[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Desktop (please complete the following information):**\n - OS: [e.g. iOS]\n - Browser [e.g. chrome, safari]\n - Version [e.g. 22]\n\n**Smartphone (please complete the following information):**\n - Device: [e.g. iPhone6]\n - OS: [e.g. iOS8.1]\n - Browser [e.g. stock browser, safari]\n - Version [e.g. 22]\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".gitignore",
    "content": "HELP.md\ntarget/\n!.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**\n!**/src/test/**\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### VS Code ###\n.vscode/\n\n### NetBeans ###\n/nbproject/private/\n/build/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\n\n### macOS ###\n.DS_Store\n\n### JRebel ###\nrebel.xml\n\n### Project ###\n/upload\n/logs"
  },
  {
    "path": ".gitlab-ci.yml",
    "content": "stages:\n- install\njob:\n  stage: install\n  script:\n  - chmod +x ./scripts/gitlabci.build.sh\n  - ./scripts/gitlabci.build.sh"
  },
  {
    "path": ".sonarcloud.properties",
    "content": "# Path to sources\n#sonar.sources=.\nsonar.exclusions=src/main/resources/**\nsonar.inclusions=src/main/java/**\n\n# Path to tests\n#sonar.tests=\n#sonar.test.exclusions=\n#sonar.test.inclusions=\n\n# Source encoding\nsonar.sourceEncoding=UTF-8\n\n# Exclusions for copy-paste detection\n#sonar.cpd.exclusions="
  },
  {
    "path": ".travis.yml",
    "content": "os: linux\ndist: trusty\nsudo: true\ngroup: stable\nscript:\n  - chmod +x ./scripts/travisci.build.sh\n  - ./scripts/travisci.build.sh\ncache:\n  directories:\n  - $HOME/.m2\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "\n## Changelog\n- v0.8.0 2020.07.24\n  - refactor:更改包名(20200721)\n  - refactor:优化代码(20200712)\n- v0.7.3 2020.05.31\n  - feat:升级 Spring Boot 至 2.3.0(20200530)\n  - feat:升级 Easy UI 至 1.9.5(20200530)\n- v0.7.2 2020.03.17\n  - fix:修复运行 jar 报 org.springframework.beans.factory.UnsatisfiedDependencyException 异常的问题(20200316)\n- v0.7.1 2020.03.15\n  - fix:修复 jar 包运行登录界面验证码图片生成失败问题(20200315)\n- v0.7.0 2020.03.08\n  - feat:新的界面(20200307)\n- v0.6.5 2019.11.26\n  - fix:修复大量 bug(20191126)\n- v0.5.5 2019.05.12\n  - fix:修复无法新建用户问题(20190506)\n  - feat:升级 EasyUI 至 1.8.1(20190507)\n  - fix:优化部门显示(20190507)\n  - feat:新增用户禁用字段(20190508)\n- v0.5.4 2019.04.18\n  - fix:修复 Duird 数据库连接池 Monitor 页部署上线后无权限访问的问题(20190418)\n  - refactor:优化 Druid 数据库连接池配置(20190418)\n- v0.5.3 2019.04.17\n  - fix:修复部署到 Linux 系统中验证码生成乱码的问题(20190417)\n- v0.5.2 2019.04.15\n  - feat:升级 Spring Boot Starter Parent 至 2.1.4.RELEASE 版本(20190415)\n  - feat:升级 MyBatis Spring Boot Starter 至 2.0.1(20190415)\n  - feat:升级 Druid Spring Boot Starter 至 1.1.16\n  - feat:升级 EasyUI 至 1.7.6(20190415)\n  - refactor:移除工作流 Flowable(20190415)\n  - refactor:优化代码(20190309)(20190415)\n- v0.5.1 2019.03.09\n  - refactor:优化代码(20190309)\n- v0.5.0 2019.02.01\n  - feat:集成 Quartz 定时任务(201902114)\n  - refactor:程序运行时自动载入之前等待发送的电子邮件到发送队列并发送(20190201)\n  - refactor:不再兼容 IE8 浏览器(20190202)\n- v0.4.0 2019.01.25\n  - feat:新增工作台界面(20190125)\n  - feat:集成工作流（Flowable）(20190121)\n  - refactor:优化 URL(20190121)\n  - refactor:优化登录界面(20190125)\n- v0.3.0 2019.01.11\n  - fix:修复 IE8 浏览器下登录页登录框变形的问题(20190104)\n  - fix:修复帐号注销登录后还能访问系统的问题(20190105)\n  - refactor:优化系统登录页布局和表单布局(20190109)\n  - refactor:优化 Excel 导出/导入实体数据(20190110)\n  - feat:升级 EasyUI 到 v1.7.1 版(20190110)\n  - feat:新增 jar 打包支持，并设置为默认打包方式(20190108)\n  - feat:新增一个帐号只允许同时在线一个 session 的功能(20190104)\n  - docs:新增 MIT 开源协议(20190110)\n- v0.2.0 2018.12.21\n  - feat:整合 ActiveMQ(20181221)\n  - feat:新增部门管理(20181221)\n- v0.1.0 2018.11.05\n  - feat:最新版发布(20181105)\n- v0.0.1 2018.02.22\n  - feat:第一版发布(20180222)"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Rakesh Zhang (godcheese@outlook.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n  <img width=\"320\" src=\"https://github.com/godcheese/nimrod/blob/master/nimrod_banner.png?raw=true\">\n</p>\n<p align=\"center\">\n  <a href=\"https://github.com/godcheese/nimrod\">\n    <img src=\"https://img.shields.io/github/last-commit/godcheese/nimrod.svg\" alt=\"GitHub Last Commit\">\n  </a>\n  <a href=\"https://github.com/godcheese/nimrod/releases\">\n    <img src=\"https://img.shields.io/github/release/godcheese/nimrod.svg\" alt=\"GitHub release\">\n  </a>\n  <a href=\"https://travis-ci.org/godcheese/nimrod\" rel=\"nofollow\">\n    <img src=\"https://travis-ci.org/godcheese/nimrod.svg?branch=master\" alt=\"Build Status\">\n  </a>\n   <a href=\"https://sonarcloud.io/dashboard?id=godcheese_nimrod\" rel=\"nofollow\">\n      <img src=\"https://sonarcloud.io/api/project_badges/measure?project=godcheese_nimrod&metric=alert_status\" alt=\"Quality Gate Status\">\n    </a>\n<a href=\"https://www.codacy.com/app/godcheese/nimrod?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=godcheese/nimrod&amp;utm_campaign=Badge_Grade\"><img src=\"https://api.codacy.com/project/badge/Grade/a8b58a98bd3541548e5705c65372734d\" alt=\"Codacy Badge\"/></a>\n  <a href=\"https://github.com/godcheese/nirmod/blob/master/LICENSE\">\n    <img src=\"https://img.shields.io/github/license/mashape/apistatus.svg\" alt=\"license\">\n  </a>\n<!--   <a href=\"https://gitter.im/repo-name/discuss\">\n    <img src=\"https://badges.gitter.im/Join%20Chat.svg\" alt=\"gitter\">\n  </a> -->\n<!--   <a href=\"https://godcheese.github.io/nimrod/donate\">\n    <img src=\"https://img.shields.io/badge/%24-donate-ff69b4.svg\" alt=\"donate\">\n  </a> -->\n</p>\n\n## 简介 Introduction 作者QQ：1176394803（可有尝提供技术支持或改代码）\n> nimrod 英[ˈnimrɔd] 美[ˈnɪmˌrɑd] n.\t好猎手，猎人;\n\nNimrod - 基于 Spring Boot 构建 的 Java Web 平台企业级单体应用快速开发框架，适合中小型项目的应用和开发。所采用的技术栈包括 Spring Boot、Spring、Spring Web MVC、MyBatis、Thymeleaf 等，遵守[阿里巴巴 Java 开发规约](https://github.com/alibaba/p3c)，帮助养成良好的编码习惯。整体采用 RBAC （ Role-Based Access Control ，基于角色的访问控制），具有严格的权限控制模块，支持系统与模块分离开发。最后希望这个项目能够对你有所帮助。\n\n- Nimrod 开发交流群（微信群）：<img width=\"170\" height=\"250\" src=\"https://github.com/godcheese/nimrod/blob/master/WechatGroup.png?raw=true\">\n- Nimrod 开发交流群（QQ 群）：[547252502](https://jq.qq.com/?_wv=1027&k=5yxyg73)\n- [码云 Gitee](https://gitee.com/godcheese/nimrod)\n\n| 环境 | 版本 |\n| :--- | :--- |\n| [Java](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) | 1.8 |\n| [MySQL](https://dev.mysql.com/downloads/mysql/5.7.html#downloads) | 5.7 |\n| [Maven](http://maven.apache.org/download.cgi) | 3.5 |\n| [Tomcat](https://tomcat.apache.org/download-90.cgi) | 9.0 |\n\n| 依赖 | 版本 |\n| :--- | :--- |\n| [Spring Boot](http://mvnrepository.com/artifact/org.springframework.boot/spring-boot) | 2.1.9.RELEASE |\n| [Spring Web MVC](http://mvnrepository.com/artifact/org.springframework/spring-webmvc) | 5.1.6.RELEASE |\n| [Spring Security Web](http://mvnrepository.com/artifact/org.springframework.security/spring-security-web) | 5.1.5.RELEASE |\n| [MyBatis](http://mvnrepository.com/artifact/org.mybatis/mybatis) | 3.5.1 |\n| [Thymeleaf](http://mvnrepository.com/artifact/org.thymeleaf/thymeleaf) | 3.0.11.RELEASE |\n| [Druid](http://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter) | 1.1.16 |\n\n| 测试账号 | 测试账号 |         |\n| :------ | :------ | :------ |\n| Username | Password | Role & Authority |\n| system_admin | 123456 | ROLE_USER,ROLE_ADMIN,ROLE_SYSTEM_ADMIN |\n| admin |123456 | ROLE_USER,ROLE_ADMIN,/API/SYSTEM/INDEX |\n| user |123456 | ROLE_USER |\n\n## 特性 Features\n\n- 数据字典 ✓\n- 角色管理 ✓\n- 用户管理 ✓\n  - 在线用户 ✗\n- 权限管理 ✓\n  - 视图菜单 ✓\n  - 视图页面 ✓\n  - 视图页面组件 ✓\n  - API ✓\n- 消息中间件（ActiveMQ） ✓\n- 电子邮件管理 ✓\n- 操作日志 ✓\n- 附件管理 ✓\n- 定时任务 ✓\n- 部门管理 ✓\n- ~~工作流（Flowable）~~ ✓\n\n## 起步 Getting started\n\n```bash\n# clone the project\ngit clone https://github.com/godcheese/nimrod.git && cd nimrod\n\n# package\nmvn clean package\n\n# develop\nmvn spring-boot:run\n```\n\n## [开发文档 Documentation](https://github.com/godcheese/nimrod/blob/master/docs/getting_started.md)\n\n## [更新日志 Changelog](https://github.com/godcheese/nimrod/releases)\n> 参照 [Commit message 和 Change log 编写指南](http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html)\n## [在线演示 Online Demo](http://demo.godcheese.com:8083/nimrod)\n\n登录用户名密码加QQ群547252502获取。\n\n#### 截图 Screenshots\n\n![1.png](https://github.com/godcheese/nimrod/blob/master/screenshots/1.png)\n![2.png](https://github.com/godcheese/nimrod/blob/master/screenshots/2.png)\n![3.png](https://github.com/godcheese/nimrod/blob/master/screenshots/3.png)\n\n## 反馈 Feedback\n\n[Issues](https://github.com/godcheese/nimrod/issues)\n\n## 捐赠 Donation\n\n如果此项目对你有所帮助，不妨请我喝咖啡。\nIf you find Nimrod useful, you can buy us a cup of coffee.\n\n[Paypal Me](https://www.paypal.me/godcheese)\n\n## 浏览器支持 Browsers support\n\nModern browsers and Internet Explorer 9+.\n\n| [<img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"IE / Edge\" width=\"24px\" height=\"24px\" />](http://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" />](http://godban.github.io/browsers-support-badges/)</br>Safari |\n| --------- | --------- | --------- | --------- |\n| IE9, IE10, IE11, Edge| last 15 versions| last 15 versions| last 10 versions\n"
  },
  {
    "path": "TODO.md",
    "content": "\n## Todo list\n- (20191018)修复 IE 上传文件异常 ✗\n- (20190920)验证码字体路径乱码 ✔\n- (20190920)项目启动时 Quartz 任务重复运行多次 ✔\n- (20190920)新的登录界面 ✔"
  },
  {
    "path": "db/mysql/example/example.sql",
    "content": "\n-- example 表\nCREATE TABLE `example`  (\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,\n  `name` varchar(255) DEFAULT '',\n  `sort` bigint(20) DEFAULT 0,\n  `remark` varchar(255) DEFAULT '',\n  `gmt_modified` datetime DEFAULT NULL,\n  `gmt_created` datetime DEFAULT NULL,\n  PRIMARY KEY (`id`) USING BTREE\n) ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = 'example 表';"
  },
  {
    "path": "db/mysql/nimrod/nimrod.sql",
    "content": "/*\r\n Navicat Premium Data Transfer\r\n\r\n Source Server         : localhost\r\n Source Server Type    : MySQL\r\n Source Server Version : 50724\r\n Source Host           : localhost:3306\r\n Source Schema         : nimrod\r\n\r\n Target Server Type    : MySQL\r\n Target Server Version : 50724\r\n File Encoding         : 65001\r\n\r\n Date: 17/07/2020 12:37:59\r\n*/\r\n\r\nSET NAMES utf8mb4;\r\nSET FOREIGN_KEY_CHECKS = 0;\r\n\r\n-- ----------------------------\r\n-- Table structure for QRTZ_BLOB_TRIGGERS\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `QRTZ_BLOB_TRIGGERS`;\r\nCREATE TABLE `QRTZ_BLOB_TRIGGERS`  (\r\n  `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `BLOB_DATA` blob NULL,\r\n  PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,\r\n  INDEX `SCHED_NAME`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE\r\n) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for QRTZ_CALENDARS\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `QRTZ_CALENDARS`;\r\nCREATE TABLE `QRTZ_CALENDARS`  (\r\n  `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `CALENDAR_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `CALENDAR` blob NOT NULL,\r\n  PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE\r\n) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for QRTZ_CRON_TRIGGERS\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `QRTZ_CRON_TRIGGERS`;\r\nCREATE TABLE `QRTZ_CRON_TRIGGERS`  (\r\n  `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `CRON_EXPRESSION` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TIME_ZONE_ID` varchar(80) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,\r\n  PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE\r\n) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of QRTZ_CRON_TRIGGERS\r\n-- ----------------------------\r\nINSERT INTO `QRTZ_CRON_TRIGGERS` VALUES ('quartzScheduler', 'com.gioov.nimrod.quartz.job.SimpleJob', '1', '0/50 * * * * ? *', 'Asia/Shanghai');\r\n\r\n-- ----------------------------\r\n-- Table structure for QRTZ_FIRED_TRIGGERS\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `QRTZ_FIRED_TRIGGERS`;\r\nCREATE TABLE `QRTZ_FIRED_TRIGGERS`  (\r\n  `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `ENTRY_ID` varchar(95) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `INSTANCE_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `FIRED_TIME` bigint(13) NOT NULL,\r\n  `SCHED_TIME` bigint(13) NOT NULL,\r\n  `PRIORITY` int(11) NOT NULL,\r\n  `STATE` varchar(16) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `JOB_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,\r\n  `JOB_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,\r\n  `IS_NONCONCURRENT` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,\r\n  `REQUESTS_RECOVERY` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,\r\n  PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE,\r\n  INDEX `IDX_QRTZ_FT_TRIG_INST_NAME`(`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE,\r\n  INDEX `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY`(`SCHED_NAME`, `INSTANCE_NAME`, `REQUESTS_RECOVERY`) USING BTREE,\r\n  INDEX `IDX_QRTZ_FT_J_G`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE,\r\n  INDEX `IDX_QRTZ_FT_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE,\r\n  INDEX `IDX_QRTZ_FT_T_G`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,\r\n  INDEX `IDX_QRTZ_FT_TG`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE\r\n) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for QRTZ_JOB_DETAILS\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `QRTZ_JOB_DETAILS`;\r\nCREATE TABLE `QRTZ_JOB_DETAILS`  (\r\n  `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `JOB_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `JOB_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `DESCRIPTION` varchar(250) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,\r\n  `JOB_CLASS_NAME` varchar(250) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `IS_DURABLE` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `IS_NONCONCURRENT` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `IS_UPDATE_DATA` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `REQUESTS_RECOVERY` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `JOB_DATA` blob NULL,\r\n  PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE,\r\n  INDEX `IDX_QRTZ_J_REQ_RECOVERY`(`SCHED_NAME`, `REQUESTS_RECOVERY`) USING BTREE,\r\n  INDEX `IDX_QRTZ_J_GRP`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE\r\n) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of QRTZ_JOB_DETAILS\r\n-- ----------------------------\r\nINSERT INTO `QRTZ_JOB_DETAILS` VALUES ('quartzScheduler', 'com.gioov.nimrod.quartz.job.SimpleJob', '1', '', 'com.gioov.nimrod.quartz.job.SimpleJob', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787000737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F40000000000010770800000010000000007800);\r\n\r\n-- ----------------------------\r\n-- Table structure for QRTZ_LOCKS\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `QRTZ_LOCKS`;\r\nCREATE TABLE `QRTZ_LOCKS`  (\r\n  `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `LOCK_NAME` varchar(40) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE\r\n) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of QRTZ_LOCKS\r\n-- ----------------------------\r\nINSERT INTO `QRTZ_LOCKS` VALUES ('quartzScheduler', 'TRIGGER_ACCESS');\r\n\r\n-- ----------------------------\r\n-- Table structure for QRTZ_PAUSED_TRIGGER_GRPS\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `QRTZ_PAUSED_TRIGGER_GRPS`;\r\nCREATE TABLE `QRTZ_PAUSED_TRIGGER_GRPS`  (\r\n  `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE\r\n) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for QRTZ_SCHEDULER_STATE\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `QRTZ_SCHEDULER_STATE`;\r\nCREATE TABLE `QRTZ_SCHEDULER_STATE`  (\r\n  `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `INSTANCE_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `LAST_CHECKIN_TIME` bigint(13) NOT NULL,\r\n  `CHECKIN_INTERVAL` bigint(13) NOT NULL,\r\n  PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE\r\n) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for QRTZ_SIMPLE_TRIGGERS\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `QRTZ_SIMPLE_TRIGGERS`;\r\nCREATE TABLE `QRTZ_SIMPLE_TRIGGERS`  (\r\n  `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `REPEAT_COUNT` bigint(7) NOT NULL,\r\n  `REPEAT_INTERVAL` bigint(12) NOT NULL,\r\n  `TIMES_TRIGGERED` bigint(10) NOT NULL,\r\n  PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE\r\n) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for QRTZ_SIMPROP_TRIGGERS\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `QRTZ_SIMPROP_TRIGGERS`;\r\nCREATE TABLE `QRTZ_SIMPROP_TRIGGERS`  (\r\n  `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `STR_PROP_1` varchar(512) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,\r\n  `STR_PROP_2` varchar(512) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,\r\n  `STR_PROP_3` varchar(512) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,\r\n  `INT_PROP_1` int(11) NULL DEFAULT NULL,\r\n  `INT_PROP_2` int(11) NULL DEFAULT NULL,\r\n  `LONG_PROP_1` bigint(20) NULL DEFAULT NULL,\r\n  `LONG_PROP_2` bigint(20) NULL DEFAULT NULL,\r\n  `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL,\r\n  `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL,\r\n  `BOOL_PROP_1` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,\r\n  `BOOL_PROP_2` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,\r\n  PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE\r\n) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for QRTZ_TRIGGERS\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `QRTZ_TRIGGERS`;\r\nCREATE TABLE `QRTZ_TRIGGERS`  (\r\n  `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `JOB_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `JOB_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `DESCRIPTION` varchar(250) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,\r\n  `NEXT_FIRE_TIME` bigint(13) NULL DEFAULT NULL,\r\n  `PREV_FIRE_TIME` bigint(13) NULL DEFAULT NULL,\r\n  `PRIORITY` int(11) NULL DEFAULT NULL,\r\n  `TRIGGER_STATE` varchar(16) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `TRIGGER_TYPE` varchar(8) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,\r\n  `START_TIME` bigint(13) NOT NULL,\r\n  `END_TIME` bigint(13) NULL DEFAULT NULL,\r\n  `CALENDAR_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,\r\n  `MISFIRE_INSTR` smallint(2) NULL DEFAULT NULL,\r\n  `JOB_DATA` blob NULL,\r\n  PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,\r\n  INDEX `IDX_QRTZ_T_J`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE,\r\n  INDEX `IDX_QRTZ_T_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE,\r\n  INDEX `IDX_QRTZ_T_C`(`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE,\r\n  INDEX `IDX_QRTZ_T_G`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE,\r\n  INDEX `IDX_QRTZ_T_STATE`(`SCHED_NAME`, `TRIGGER_STATE`) USING BTREE,\r\n  INDEX `IDX_QRTZ_T_N_STATE`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE,\r\n  INDEX `IDX_QRTZ_T_N_G_STATE`(`SCHED_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE,\r\n  INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME`(`SCHED_NAME`, `NEXT_FIRE_TIME`) USING BTREE,\r\n  INDEX `IDX_QRTZ_T_NFT_ST`(`SCHED_NAME`, `TRIGGER_STATE`, `NEXT_FIRE_TIME`) USING BTREE,\r\n  INDEX `IDX_QRTZ_T_NFT_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`) USING BTREE,\r\n  INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_STATE`) USING BTREE,\r\n  INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE\r\n) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of QRTZ_TRIGGERS\r\n-- ----------------------------\r\nINSERT INTO `QRTZ_TRIGGERS` VALUES ('quartzScheduler', 'com.gioov.nimrod.quartz.job.SimpleJob', '1', 'com.gioov.nimrod.quartz.job.SimpleJob', '1', '', 1568951270000, 1568951220000, 5, 'PAUSED', 'CRON', 1568728277000, 0, NULL, 2, '');\r\n\r\n-- ----------------------------\r\n-- Table structure for api\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `api`;\r\nCREATE TABLE `api`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'API 名称',\r\n  `url` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求地址（url）',\r\n  `authority` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限（authority）',\r\n  `api_category_id` bigint(20) UNSIGNED NOT NULL COMMENT 'API 分类 id',\r\n  `sort` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '排序',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE,\r\n  UNIQUE INDEX `uk_authority`(`authority`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 143 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'API 表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of api\r\n-- ----------------------------\r\nINSERT INTO `api` VALUES (1, '分页获取所有电子邮件队列', '/api/mail/page_all', '/API/MAIL/PAGE_ALL', 21, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (2, '新增电子邮件', '/api/mail/add_one', '/API/MAIL/ADD_ONE', 21, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (3, '指定电子邮件 id，获取电子邮件', '/api/mail/one', '/API/MAIL/ONE', 21, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (4, '指定队列电子邮件 id，批量删除队列电子邮件', '/api/mail/delete_all', '/API/MAIL/DELETE_ALL', 21, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (5, '新增任务', '/api/quartz/job/add_one', '/API/QUARTZ/JOB/ADD_ONE', 24, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (6, '指定 JobClassName、JobGroup，获取任务', '/api/quartz/job/one', '/API/QUARTZ/JOB/ONE', 24, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (7, '分页获取所有任务', '/api/quartz/job/page_all', '/API/QUARTZ/JOB/PAGE_ALL', 24, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (8, '指定 JobClassName list、JobGroup list，暂停所有任务', '/api/quartz/job/pause_all', '/API/QUARTZ/JOB/PAUSE_ALL', 24, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (9, '指定 JobClassName list、JobGroup list，恢复所有任务', '/api/quartz/job/resume_all', '/API/QUARTZ/JOB/RESUME_ALL', 24, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (10, '指定 JobClassName list、JobGroup list，删除所有任务', '/api/quartz/job/delete_all', '/API/QUARTZ/JOB/DELETE_ALL', 24, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (11, '保存任务', '/api/quartz/job/save_one', '/API/QUARTZ/JOB/SAVE_ONE', 24, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (12, '指定任务运行日志 id，获取任务运行日志', '/api/quartz/job_runtime_log/one', '/API/QUARTZ/JOB_RUNTIME_LOG/ONE', 25, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (13, '分页获取所有任务运行日志', '/api/quartz/job_runtime_log/page_all', '/API/QUARTZ/JOB_RUNTIME_LOG/PAGE_ALL', 25, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (14, '清空所有任务运行日志', '/api/quartz/job_runtime_log/clear_all', '/API/QUARTZ/JOB_RUNTIME_LOG/CLEAR_ALL', 25, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (15, '新增数据字典分类', '/api/system/dictionary_category/add_one', '/API/SYSTEM/DICTIONARY_CATEGORY/ADD_ONE', 6, 0, '', '2019-09-27 01:02:29', NULL);\r\nINSERT INTO `api` VALUES (16, '保存数据字典分类', '/api/system/dictionary_category/save_one', '/API/SYSTEM/DICTIONARY_CATEGORY/SAVE_ONE', 6, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (17, '指定数据字典分类 id list，批量删除数据字典分类', '/api/system/dictionary_category/delete_all', '/API/SYSTEM/DICTIONARY_CATEGORY/DELETE_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (18, '指定数据字典分类 id，获取数据字典分类', '/api/system/dictionary_category/one', '/API/SYSTEM/DICTIONARY_CATEGORY/ONE', 6, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (19, '获取所有数据字典分类，以 Antd Table 形式展示', '/api/system/dictionary_category/list_all_as_antd_table', '/API/SYSTEM/DICTIONARY_CATEGORY/LIST_ALL_AS_ANTD_TABLE', 6, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (20, '获取所有数据字典分类，以 Antd TreeNode 形式展示', '/api/system/dictionary_category/list_all_as_antd_tree_node', '/API/SYSTEM/DICTIONARY_CATEGORY/LIST_ALL_AS_ANTD_TREE_NODE', 6, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (21, '新增数据字典', '/api/system/dictionary/add_one', '/API/SYSTEM/DICTIONARY/ADD_ONE', 7, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (22, '保存数据字典', '/api/system/dictionary/save_one', '/API/SYSTEM/DICTIONARY/SAVE_ONE', 7, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (23, '指定数据字典 id，批量删除数据字典', '/api/system/dictionary/delete_all', '/API/SYSTEM/DICTIONARY/DELETE_ALL', 7, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (24, '指定数据字典 id，获取数据字典', '/api/system/dictionary/one', '/API/SYSTEM/DICTIONARY/ONE', 7, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (25, '指定数据字典键，从内存中获取所有数据字典', '/api/system/dictionary/list_all_by_key', '/API/SYSTEM/DICTIONARY/LIST_ALL_BY_KEY', 7, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (26, '同步数据字典到内存', '/api/system/dictionary/sync_to_memory', '/API/SYSTEM/DICTIONARY/SYNC_TO_MEMORY', 7, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (27, '指定数据字典分类 id list，导出数据字典', '/api/system/dictionary/export_all_by_dictionary_category_id_list', '/API/SYSTEM/DICTIONARY/EXPORT_ALL_BY_DICTIONARY_CATEGORY_ID_LIST', 7, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (28, '指定数据字典分类 id，导入数据字典', '/api/system/dictionary/import_all_by_dictionary_category_id', '/API/SYSTEM/DICTIONARY/IMPORT_ALL_BY_DICTIONARY_CATEGORY_ID', 7, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (29, '指定数据字典分类 id，分页获取数据字典', '/api/system/dictionary/page_all_by_dictionary_category_id_list', '/API/SYSTEM/DICTIONARY/PAGE_ALL_BY_DICTIONARY_CATEGORY_ID_LIST', 7, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (30, '分页获取所有文件', '/api/system/file/page_all', '/API/SYSTEM/FILE/PAGE_ALL', 19, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (31, '单个文件上传', '/api/system/file/upload_one', '/API/SYSTEM/FILE/UPLOAD_ONE', 19, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (32, '保存文件', '/api/system/file/save_one', '/API/SYSTEM/FILE/SAVE_ONE', 19, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (33, '指定文件 id list，批量删除文件', '/api/system/file/delete_all', '/API/SYSTEM/FILE/DELETE_ALL', 19, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (34, '指定文件 id，获取文件', '/api/system/file/one', '/API/SYSTEM/FILE/ONE', 19, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (35, '指定文件 guid，下载文件', '/api/system/file/download', '/API/SYSTEM/FILE/DOWNLOAD', 19, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (36, '分页获取所有图片文件', '/api/system/file/page_all_image', '/API/SYSTEM/FILE/PAGE_ALL_IMAGE', 19, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (37, '分页获取所有操作日志', '/api/system/operation_log/page_all', '/API/SYSTEM/OPERATION_LOG/PAGE_ALL', 22, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (38, '指定操作日志 id，获取操作日志', '/api/system/operation_log/one', '/API/SYSTEM/OPERATION_LOG/ONE', 22, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (39, '清空所有操作日志', '/api/system/operation_log/clear_all', '/API/SYSTEM/OPERATION_LOG/CLEAR_ALL', 22, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (40, '获取验证码', '/api/system/verify_code', '/API/SYSTEM/VERIFY_CODE', 2, 0, '', '2019-10-24 13:50:31', NULL);\r\nINSERT INTO `api` VALUES (41, '获取系统信息', '/api/system/system_info', '/API/SYSTEM/SYSTEM_INFO', 2, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (42, '新增 API 分类', '/api/user/api_category/add_one', '/API/USER/API_CATEGORY/ADD_ONE', 4, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (43, '保存 API 分类', '/api/user/api_category/save_one', '/API/USER/API_CATEGORY/SAVE_ONE', 4, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (44, '指定 API 分类 id list，批量删除 API 分类', '/api/user/api_category/delete_all', '/API/USER/API_CATEGORY/DELETE_ALL', 4, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (45, '指定 API 分类 id，获取所有 API 分类', '/api/user/api_category/one', '/API/USER/API_CATEGORY/ONE', 4, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (46, '获取所有 API 分类，以 Antd Table 形式展示', '/api/user/api_category/list_all_as_antd_table', '/API/USER/API_CATEGORY/LIST_ALL_AS_ANTD_TABLE', 4, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (47, '指定 API 分类 id，分页获取所有 API', '/api/user/api/page_all_by_api_category_id', '/API/USER/API/PAGE_ALL_BY_API_CATEGORY_ID', 5, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (48, '新增 API', '/api/user/api/add_one', '/API/USER/API/ADD_ONE', 5, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (49, '指定 API id list，批量删除 API', '/api/user/api/delete_all', '/API/USER/API/DELETE_ALL', 5, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (50, '指定 API id，获取所有 API', '/api/user/api/one', '/API/USER/API/ONE', 5, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (51, '指定角色 id、API 分类 id list，分页获取所有 API，以 Antd Table 形式展示', '/api/user/api/page_all_as_antd_table_by_role_id_and_api_category_id_list', '/API/USER/API/PAGE_ALL_AS_ANTD_TABLE_BY_ROLE_ID_AND_API_CATEGORY_ID_LIST', 5, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (52, '指定 API 分类 id list，分页获取所有 API，以 Antd Table 形式展示', '/api/user/api/page_all_as_antd_table_by_api_category_id_list', '/API/USER/API/PAGE_ALL_AS_ANTD_TABLE_BY_API_CATEGORY_ID_LIST', 5, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (53, '指定角色 id、API id list，批量授权', '/api/user/api/grant_all_by_role_id_and_api_id_list', '/API/USER/API/GRANT_ALL_BY_ROLE_ID_AND_API_ID_LIST', 5, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (54, '指定角色 id、API id list，批量撤销授权', '/api/user/api/revoke_all_by_role_id_and_api_id_list', '/API/USER/API/REVOKE_ALL_BY_ROLE_ID_AND_API_ID_LIST', 5, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (55, '指定视图页面 id、API 分类 id list，分页获取所有 API，以 Antd Table 形式展示', '/api/user/api/page_all_as_antd_table_by_view_page_id_and_api_category_id_list', '/API/USER/API/PAGE_ALL_AS_ANTD_TABLE_BY_VIEW_PAGE_ID_AND_API_CATEGORY_ID_LIST', 5, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (56, '指定视图页面组件 id、API 分类 id list，分页获取 API，以 Antd Table 形式展示', '/api/user/api/page_all_as_antd_table_by_view_page_component_id_and_api_category_id_list', '/API/USER/API/PAGE_ALL_AS_ANTD_TABLE_BY_VIEW_PAGE_COMPONENT_ID_AND_API_CATEGORY_ID_LIST', 5, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (57, '新增部门', '/api/user/department/add_one', '/API/USER/DEPARTMENT/ADD_ONE', 20, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (58, '保存部门', '/api/user/department/save_one', '/API/USER/DEPARTMENT/SAVE_ONE', 20, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (59, '指定部门 id list，批量删除部门', '/api/user/department/delete_all', '/API/USER/DEPARTMENT/DELETE_ALL', 20, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (60, '指定部门 id，获取部门', '/api/user/department/one', '/API/USER/DEPARTMENT/ONE', 20, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (61, '获取所有部门，以 Antd TreeNode 形式展示', '/api/user/department/list_all_as_antd_tree_node', '/API/USER/DEPARTMENT/LIST_ALL_AS_ANTD_TREE_NODE', 20, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (62, '获取所有部门，以 Antd Tree 形式展示', '/api/user/department/list_all_as_antd_tree', '/API/USER/DEPARTMENT/LIST_ALL_AS_ANTD_TREE', 20, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (63, '获取所有部门，以 Antd Table 形式展示', '/api/user/department/list_all_as_antd_table', '/API/USER/DEPARTMENT/LIST_ALL_AS_ANTD_TABLE', 20, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (64, '分页获取所有角色', '/api/user/role/page_all', '/API/USER/ROLE/PAGE_ALL', 14, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (65, '新增角色', '/api/user/role/add_one', '/API/USER/ROLE/ADD_ONE', 14, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (66, '指定角色 id list，批量删除角色', '/api/user/role/delete_all', '/API/USER/ROLE/DELETE_ALL', 14, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (67, '指定角色 id，获取角色', '/api/user/role/one', '/API/USER/ROLE/ONE', 14, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (68, '指定用户 id，分页获取所有角色，以 Antd Table 形式展示', '/api/user/role/page_all_as_antd_table_by_user_id', '/API/USER/ROLE/PAGE_ALL_AS_ANTD_TABLE_BY_USER_ID', 14, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (69, '指定用户 id、角色 id list，批量授权', '/api/user/role/grant_all_by_user_id_and_role_id_list', '/API/USER/ROLE/GRANT_ALL_BY_USER_ID_AND_ROLE_ID_LIST', 14, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (70, '指定用户 id、角色 id list，批量撤销授权', '/api/user/role/revoke_all_by_user_id_and_role_id_list', '/API/USER/ROLE/REVOKE_ALL_BY_USER_ID_AND_ROLE_ID_LIST', 14, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (71, '分页获取所有用户', '/api/user/page_all', '/API/USER/PAGE_ALL', 15, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (72, '指定部门 id，分页获取所有用户', '/api/user/page_all_by_department_id', '/API/USER/PAGE_ALL_BY_DEPARTMENT_ID', 15, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (73, '新增用户', '/api/user/add_one', '/API/USER/ADD_ONE', 15, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (74, '保存用户', '/api/user/save_one', '/API/USER/SAVE_ONE', 15, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (75, '指定用户 id list，删除用户', '/api/user/fake_delete_all', '/API/USER/FAKE_DELETE_ALL', 15, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (76, '指定用户 id list，撤销删除用户', '/api/user/revoke_fake_delete_all', '/API/USER/REVOKE_FAKE_DELETE_ALL', 15, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (77, '指定用户 id list，批量永久删除用户', '/api/user/delete_all', '/API/USER/DELETE_ALL', 15, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (78, '指定用户 id，获取用户（除密码和角色）', '/api/user/one', '/API/USER/ONE', 15, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (79, '获取当前用户（用户 id、用户名、头像、电子邮箱、权限、部门）', '/api/user/get_current_user', '/API/USER/GET_CURRENT_USER', 15, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (80, '分页获取所有用户角色', '/api/user/user_role/page_all', '/API/USER/USER_ROLE/PAGE_ALL', 16, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (81, '新增用户角色', '/api/user/user_role/add_one', '/API/USER/USER_ROLE/ADD_ONE', 16, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (82, '指定用户 id、角色 id list，批量删除用户角色', '/api/user/user_role/delete_all_by_user_id_and_role_id_list', '/API/USER/USER_ROLE/DELETE_ALL_BY_USER_ID_AND_ROLE_ID_LIST', 16, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (83, '指定角色 id，分页获取所有父级视图菜单分类', '/api/user/view_menu_category/page_all_parent_by_role_id', '/API/USER/VIEW_MENU_CATEGORY/PAGE_ALL_PARENT_BY_ROLE_ID', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (84, '指定父级视图菜单分类 id、角色 id，获取所有视图菜单分类', '/api/user/view_menu_category/list_all_by_parent_id_and_role_id', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_BY_PARENT_ID_AND_ROLE_ID', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (85, '新增视图菜单分类', '/api/user/view_menu_category/add_one', '/API/USER/VIEW_MENU_CATEGORY/ADD_ONE', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (86, '保存视图菜单分类', '/api/user/view_menu_category/save_one', '/API/USER/VIEW_MENU_CATEGORY/SAVE_ONE', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (87, '指定视图菜单分类 id，批量删除视图菜单分类', '/api/user/view_menu_category/delete_all', '/API/USER/VIEW_MENU_CATEGORY/DELETE_ALL', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (88, '指定视图菜单分类 id，获取视图菜单分类', '/api/user/view_menu_category/one', '/API/USER/VIEW_MENU_CATEGORY/ONE', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (89, '指定角色 id，获取所有父级视图菜单分类', '/api/user/view_menu_category/list_all_parent_by_role_id', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_PARENT_BY_ROLE_ID', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (90, '指定用户 id，获取所有父级视图菜单分类', '/api/user/view_menu_category/list_all_parent_by_user_id', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_PARENT_BY_USER_ID', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (91, '指定用户 id、父级视图菜单分类 id，获取所有子级视图菜单分类', '/api/user/view_menu_category/list_all_child_by_parent_id_and_user_id', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_CHILD_BY_PARENT_ID_AND_USER_ID', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (92, '获取所有视图菜单分类', '/api/user/view_menu_category/list_all', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (93, '指定视图菜单分类名称，模糊搜索获取所有视图菜单分类', '/api/user/view_menu_category/search_all_by_name', '/API/USER/VIEW_MENU_CATEGORY/SEARCH_ALL_BY_NAME', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (94, '指定角色 id，获取视图菜单分类，以 Antd Table 形式展示', '/api/user/view_menu_category/list_all_as_antd_table_by_role_id', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_AS_ANTD_TABLE_BY_ROLE_ID', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (95, '获取视图菜单分类，以 Antd Table 形式展示', '/api/user/view_menu_category/list_all_as_antd_table', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_AS_ANTD_TABLE', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (96, '获取所有视图菜单分类，以 Antd TreeNode 形式展示', '/api/user/view_menu_category/list_all_as_antd_tree_node', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_AS_ANTD_TREE_NODE', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (97, '指定角色 id、视图菜单分类 id list，批量授权', '/api/user/view_menu_category/grant_all_by_role_id_and_view_menu_category_id_list', '/API/USER/VIEW_MENU_CATEGORY/GRANT_ALL_BY_ROLE_ID_AND_VIEW_MENU_CATEGORY_ID_LIST', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (98, '指定角色 id、视图菜单分类 id list，批量撤销授权', '/api/user/view_menu_category/revoke_all_by_role_id_and_view_menu_category_id_list', '/API/USER/VIEW_MENU_CATEGORY/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_MENU_CATEGORY_ID_LIST', 17, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (99, '指定视图菜单分类 id、角色 id，分页获取所有视图菜单', '/api/user/view_menu/page_all_by_view_menu_category_id_and_role_id', '/API/USER/VIEW_MENU/PAGE_ALL_BY_VIEW_MENU_CATEGORY_ID_AND_ROLE_ID', 18, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (100, '新增视图菜单', '/api/user/view_menu/add_one', '/API/USER/VIEW_MENU/ADD_ONE', 18, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (101, '保存视图菜单', '/api/user/view_menu/save_one', '/API/USER/VIEW_MENU/SAVE_ONE', 18, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (102, '指定视图菜单 id list，批量删除视图菜单', '/api/user/view_menu/delete_all', '/API/USER/VIEW_MENU/DELETE_ALL', 18, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (103, '指定视图菜单 id，获取视图菜单', '/api/user/view_menu/one', '/API/USER/VIEW_MENU/ONE', 18, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (104, '指定视图菜单名称，模糊搜索获取所有视图菜单', '/api/user/view_menu/search_all_by_name', '/API/USER/VIEW_MENU/SEARCH_ALL_BY_NAME', 18, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (105, '获取当前用户视图菜单，以 Antd VueMenu 形式展示', '/api/user/view_menu/list_all_as_vue_menu_by_current_user', '/API/USER/VIEW_MENU/LIST_ALL_AS_VUE_MENU_BY_CURRENT_USER', 18, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (106, '指定角色 id、视图菜单分类 id list，分页获取视图菜单，以 Antd Table 形式展示', '/api/user/view_menu/page_all_as_antd_table_by_role_id_and_menu_category_id_list', '/API/USER/VIEW_MENU/PAGE_ALL_AS_ANTD_TABLE_BY_ROLE_ID_AND_MENU_CATEGORY_ID_LIST', 18, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (107, '指定视图菜单分类 id list，分页获取视图菜单，以 Antd Table 形式展示', '/api/user/view_menu/page_all_as_antd_table_by_view_menu_category_id_list', '/API/USER/VIEW_MENU/PAGE_ALL_AS_ANTD_TABLE_BY_VIEW_MENU_CATEGORY_ID_LIST', 18, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (108, '指定角色 id、视图菜单 id list，批量授权', '/api/user/view_menu/grant_all_by_role_id_and_view_menu_id_list', '/API/USER/VIEW_MENU/GRANT_ALL_BY_ROLE_ID_AND_VIEW_MENU_ID_LIST', 18, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (109, '指定角色 id、视图菜单 id list，批量撤销授权', '/api/user/view_menu/revoke_all_by_role_id_and_view_menu_id_list', '/API/USER/VIEW_MENU/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_MENU_ID_LIST', 18, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (110, '指定视图页面 id，API id list，批量关联', '/api/user/view_page_api/associate_all_by_view_page_id_and_api_id_list', '/API/USER/VIEW_PAGE_API/ASSOCIATE_ALL_BY_VIEW_PAGE_ID_AND_API_ID_LIST', 8, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (111, '指定视图页面 id，API id list，批量撤销关联', '/api/user/view_page_api/revoke_associate_all_by_view_page_id_and_api_id_list', '/API/USER/VIEW_PAGE_API/REVOKE_ASSOCIATE_ALL_BY_VIEW_PAGE_ID_AND_API_ID_LIST', 8, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (112, '分页获取所有父级视图页面分类', '/api/user/view_page_category/page_all_parent', '/API/USER/VIEW_PAGE_CATEGORY/PAGE_ALL_PARENT', 9, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (113, '指定父级视图页面分类 id，获取所有视图页面分类', '/api/user/view_page_category/list_all_by_parent_id', '/API/USER/VIEW_PAGE_CATEGORY/LIST_ALL_BY_PARENT_ID', 9, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (114, '新增视图页面分类', '/api/user/view_page_category/add_one', '/API/USER/VIEW_PAGE_CATEGORY/ADD_ONE', 9, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (115, '保存视图页面分类', '/api/user/view_page_category/save_one', '/API/USER/VIEW_PAGE_CATEGORY/SAVE_ONE', 9, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (116, '指定视图页面分类 id ，批量删除视图页面分类', '/api/user/view_page_category/delete_all', '/API/USER/VIEW_PAGE_CATEGORY/DELETE_ALL', 9, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (117, '指定视图页面分类 id，获取视图页面分类', '/api/user/view_page_category/one', '/API/USER/VIEW_PAGE_CATEGORY/ONE', 9, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (118, '指定角色 id，获取所有视图页面分类，以 Antd Table 形式展示', '/api/user/view_page_category/list_all_as_antd_table_by_role_id', '/API/USER/VIEW_PAGE_CATEGORY/LIST_ALL_AS_ANTD_TABLE_BY_ROLE_ID', 9, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (119, '获取视图页面分类，以 Antd Table 形式展示', '/api/user/view_page_category/list_all_as_antd_table', '/API/USER/VIEW_PAGE_CATEGORY/LIST_ALL_AS_ANTD_TABLE', 9, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (120, '获取所有视图页面分类，以 Antd TreeNode 形式展示', '/api/user/view_page_category/list_all_as_antd_tree_node', '/API/USER/VIEW_PAGE_CATEGORY/LIST_ALL_AS_ANTD_TREE_NODE', 9, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (121, '指定视图页面 id，获取视图页面分类', '/api/user/view_page_category/get_one_by_view_page_id', '/API/USER/VIEW_PAGE_CATEGORY/GET_ONE_BY_VIEW_PAGE_ID', 9, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (122, '指定视图页面组件 id、API id list，批量关联', '/api/user/view_page_component_api/associate_all_by_view_page_component_id_and_api_id_list', '/API/USER/VIEW_PAGE_COMPONENT_API/ASSOCIATE_ALL_BY_VIEW_PAGE_COMPONENT_ID_AND_API_ID_LIST', 12, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (123, '指定视图页面组件 id、API id，批量撤销关联', '/api/user/view_page_component_api/revoke_associate_all_by_role_id_and_authority', '/API/USER/VIEW_PAGE_COMPONENT_API/REVOKE_ASSOCIATE_ALL_BY_ROLE_ID_AND_AUTHORITY', 12, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (124, '指定视图页面 id，分页获取所有视图页面组件', '/api/user/view_page_component/page_all_by_view_page_id', '/API/USER/VIEW_PAGE_COMPONENT/PAGE_ALL_BY_VIEW_PAGE_ID', 11, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (125, '新增视图页面组件', '/api/user/view_page_component/add_one', '/API/USER/VIEW_PAGE_COMPONENT/ADD_ONE', 11, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (126, '保存视图页面组件', '/api/user/view_page_component/save_one', '/API/USER/VIEW_PAGE_COMPONENT/SAVE_ONE', 11, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (127, '指定视图页面组件 id，批量删除视图页面组件', '/api/user/view_page_component/delete_all', '/API/USER/VIEW_PAGE_COMPONENT/DELETE_ALL', 11, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (128, '指定视图组件 id，获取视图组件', '/api/user/view_page_component/one', '/API/USER/VIEW_PAGE_COMPONENT/ONE', 11, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (129, '指定角色 id、视图页面 id list，分页获取所有视图页面组件，以 Antd Table 形式展示', '/api/user/view_page_component/page_all_as_antd_table_by_role_id_and_view_page_id_list', '/API/USER/VIEW_PAGE_COMPONENT/PAGE_ALL_AS_ANTD_TABLE_BY_ROLE_ID_AND_VIEW_PAGE_ID_LIST', 11, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (130, '指定视图页面 id list，分页获取视图页面组件，以 Antd Table 形式展示', '/api/user/view_page_component/page_all_as_antd_table_by_view_page_id_list', '/API/USER/VIEW_PAGE_COMPONENT/PAGE_ALL_AS_ANTD_TABLE_BY_VIEW_PAGE_ID_LIST', 11, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (131, '指定角色 id、视图页面组件 id list，批量授权', '/api/user/view_page_component/grant_all_by_role_id_and_view_page_component_id_list', '/API/USER/VIEW_PAGE_COMPONENT/GRANT_ALL_BY_ROLE_ID_AND_VIEW_PAGE_COMPONENT_ID_LIST', 11, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (132, '指定角色 id、视图页面组件 id list，批量撤销授权', '/api/user/view_page_component/revoke_all_by_role_id_and_view_page_component_id_list', '/API/USER/VIEW_PAGE_COMPONENT/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_PAGE_COMPONENT_ID_LIST', 11, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (133, '指定视图页面分类 id ，分页获取所有视图页面', '/api/user/view_page/page_all_by_view_page_category_id', '/API/USER/VIEW_PAGE/PAGE_ALL_BY_VIEW_PAGE_CATEGORY_ID', 10, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (134, '新增视图页面', '/api/user/view_page/add_one', '/API/USER/VIEW_PAGE/ADD_ONE', 10, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (135, '保存视图页面', '/api/user/view_page/save_one', '/API/USER/VIEW_PAGE/SAVE_ONE', 10, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (136, '指定视图页面 id ，批量删除视图页面', '/api/user/view_page/delete_all', '/API/USER/VIEW_PAGE/DELETE_ALL', 10, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (137, '指定视图页面 id，获取视图页面', '/api/user/view_page/one', '/API/USER/VIEW_PAGE/ONE', 10, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (138, '指定角色 id，视图页面分类 id list，分页获取视图页面，以 Antd Table 形式展示', '/api/user/view_page/page_all_as_antd_table_by_role_id_and_view_page_category_id_list', '/API/USER/VIEW_PAGE/PAGE_ALL_AS_ANTD_TABLE_BY_ROLE_ID_AND_VIEW_PAGE_CATEGORY_ID_LIST', 10, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (139, '指定视图页面分类 id list，分页获取所有视图页面，以 Antd Table 形式展示', '/api/user/view_page/page_all_as_antd_table_by_view_page_category_id_list', '/API/USER/VIEW_PAGE/PAGE_ALL_AS_ANTD_TABLE_BY_VIEW_PAGE_CATEGORY_ID_LIST', 10, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (140, '指定角色 id、视图页面 id list，批量授权', '/api/user/view_page/grant_all_by_role_id_and_view_page_id_list', '/API/USER/VIEW_PAGE/GRANT_ALL_BY_ROLE_ID_AND_VIEW_PAGE_ID_LIST', 10, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (141, '指定角色 id、视图页面 id list，批量撤销授权', '/api/user/view_page/revoke_all_by_role_id_and_view_page_id_list', '/API/USER/VIEW_PAGE/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_PAGE_ID_LIST', 10, 0, '', NULL, NULL);\r\nINSERT INTO `api` VALUES (142, '指定视图页面分类 id，获取所有视图页面', '/api/user/view_page/list_all_by_view_page_category_id', '/API/USER/VIEW_PAGE/LIST_ALL_BY_VIEW_PAGE_CATEGORY_ID', 10, 0, '', NULL, NULL);\r\n\r\n-- ----------------------------\r\n-- Table structure for api_category\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `api_category`;\r\nCREATE TABLE `api_category`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分类名称',\r\n  `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父级分类 id',\r\n  `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 26 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'API 分类表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of api_category\r\n-- ----------------------------\r\nINSERT INTO `api_category` VALUES (1, '系统管理', NULL, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (2, '系统配置', 1, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (3, '用户配置', 1, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (4, 'API 分类', 3, 0, '', '2019-06-27 11:39:12', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (5, 'API', 3, 0, '', '2019-06-27 11:39:23', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (6, '数据字典分类', 2, 0, '', '2019-09-27 01:01:22', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (7, '数据字典', 2, 0, '', '2019-09-26 08:32:16', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (8, '视图页面关联 API', 3, 0, '', '2019-06-27 11:39:31', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (9, '视图页面分类', 3, 0, '', '2019-06-27 11:39:59', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (10, '视图页面', 3, 0, '', '2019-06-27 11:39:39', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (11, '视图页面组件', 3, 0, '', '2019-06-27 11:39:46', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (12, '视图页面组件关联 API', 3, 0, '', '2019-06-27 11:39:52', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (13, '角色关联权限', 3, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (14, '角色管理', 3, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (15, '用户管理', 3, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (16, '用户关联角色', 3, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (17, '视图菜单分类', 3, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (18, '视图菜单', 3, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43');\r\nINSERT INTO `api_category` VALUES (19, '文件管理', 2, 0, '', '2019-06-27 11:38:43', '2019-06-27 11:38:43');\r\nINSERT INTO `api_category` VALUES (20, '部门管理', 2, 0, '', '2019-07-16 12:50:58', '2019-07-16 12:50:03');\r\nINSERT INTO `api_category` VALUES (21, '电子邮件管理', 2, 0, '', '2019-07-16 12:50:37', '2019-07-16 12:50:37');\r\nINSERT INTO `api_category` VALUES (22, '操作日志', 2, 0, '', '2019-08-07 12:45:40', '2019-08-07 12:45:40');\r\nINSERT INTO `api_category` VALUES (23, 'Quartz 任务', 2, 0, '', '2019-08-07 12:46:17', '2019-08-07 12:46:01');\r\nINSERT INTO `api_category` VALUES (24, 'Quartz 任务管理', 21, 0, '', NULL, NULL);\r\nINSERT INTO `api_category` VALUES (25, 'Quartz 任务日志', 21, 0, '', NULL, NULL);\r\n\r\n-- ----------------------------\r\n-- Table structure for department\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `department`;\r\nCREATE TABLE `department`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '部门名称',\r\n  `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父级部门 id',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部门表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of department\r\n-- ----------------------------\r\nINSERT INTO `department` VALUES (1, '测试部门', NULL, '', '2018-12-20 06:08:12', '2018-12-20 03:43:04');\r\n\r\n-- ----------------------------\r\n-- Table structure for dictionary\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `dictionary`;\r\nCREATE TABLE `dictionary`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典键',\r\n  `key_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典键名',\r\n  `value_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典值名',\r\n  `value_slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典值别名',\r\n  `value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '字典值',\r\n  `dictionary_category_id` bigint(20) UNSIGNED NOT NULL COMMENT '字典分类 id',\r\n  `enabled` tinyint(1) UNSIGNED NULL DEFAULT NULL COMMENT '是否有效（0=否，1=是，默认=0）',\r\n  `sort` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '排序',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE,\r\n  UNIQUE INDEX `uk_key_value_slug`(`key`, `value_slug`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 47 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据字典表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of dictionary\r\n-- ----------------------------\r\nINSERT INTO `dictionary` VALUES (1, 'WEB', '网站配置', '网站名', 'NAME', 'Nimrod', 3, 1, 0, '', '2019-09-24 03:24:39', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (2, 'WEB', '网站配置', '页脚版权', 'FOOTER', 'Copyright &copy; 2020 Nimrod.All rights reserved.', 3, 1, 0, '', '2020-03-07 03:41:46', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (3, 'MAIL', '电子邮箱发信配置', '主机', 'HOST', 'smtp.mail.example.com', 4, 1, 0, '企业邮箱：https://mail.example.com/', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (4, 'MAIL', '电子邮箱发信配置', '协议', 'PROTOCOL', 'smtp', 4, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (5, 'MAIL', '电子邮箱发信配置', '端口号', 'PORT', '25', 4, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (6, 'MAIL', '电子邮箱发信配置', '用户名', 'USERNAME', 'no-reply@example.com', 4, 1, 0, '', '2019-02-28 08:34:20', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (7, 'MAIL', '电子邮箱发信配置', '密码', 'PASSWORD', '123456', 4, 1, 0, '', '2019-11-07 02:16:18', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (8, 'MAIL', '电子邮箱发信配置', '显示邮箱', 'FROM', 'no-reply@example.com', 4, 1, 0, '', '2019-02-28 08:34:27', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (9, 'MAIL', '电子邮箱发信配置', '默认编码', 'DEFAULT_ENCODING', 'UTF-8', 4, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (10, 'MAIL', '电子邮箱发信配置', '测试连接', 'TEST_CONNECTION', 'false', 4, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (11, 'VIEW_PAGE_COMPONENT_TYPE', '视图页面组件类型', '按钮', 'BUTTON', '1', 5, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (12, 'VIEW_PAGE_COMPONENT_TYPE', '视图页面组件类型', '搜索框', 'SEARCH', '2', 5, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (16, 'SMS_STATUS', '信息状态', '等待', 'WAIT', '0', 7, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (17, 'SMS_STATUS', '信息状态', '失败', 'FAIL', '1', 7, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (18, 'SMS_STATUS', '信息状态', '成功', 'SUCCESS', '2', 7, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (19, 'IS_OR_NOT', '是或否', '否', 'NOT', '0', 8, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (20, 'IS_OR_NOT', '是或否', '是', 'IS', '1', 8, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (21, 'GENDER', '性别', '未知', 'UNKNOWN', '0', 9, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (22, 'GENDER', '性别', '男', 'MALE', '1', 9, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (23, 'GENDER', '性别', '女', 'FEMALE', '2', 9, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary` VALUES (24, 'FILE', '文件上传配置', '上传路径', 'UPLOAD_PATH', '/upload', 11, 1, 0, '', '2019-10-25 07:46:40', '2018-11-19 07:41:07');\r\nINSERT INTO `dictionary` VALUES (25, 'OPERATION_TYPE', '操作类型', '访问页面', 'PAGE', '0', 12, 1, 0, '', '2018-12-27 03:18:00', '2018-12-17 12:13:32');\r\nINSERT INTO `dictionary` VALUES (26, 'OPERATION_TYPE', '操作类型', '调用 API', 'API', '1', 12, 1, 0, '', '2018-12-27 03:18:08', '2018-12-17 12:14:42');\r\nINSERT INTO `dictionary` VALUES (27, 'FILE', '文件上传配置', '附件类型', 'TYPE', '.jpg,.png,.zip', 11, 1, 0, '允许上传的文件类型', '2019-01-09 06:53:11', '2018-12-17 13:08:13');\r\nINSERT INTO `dictionary` VALUES (28, 'FILE', '文件上传配置', '最大单文件上传大小', 'MAX_FILE_SIZE', '200MB', 11, 1, 0, '允许上传的最大文件大小', '2019-10-25 07:01:08', '2018-12-17 13:10:23');\r\nINSERT INTO `dictionary` VALUES (29, 'SYSTEM', '系统配置', '语言', 'LANGUAGE', 'zh', 13, 0, 0, '', '2019-01-09 06:32:49', '2018-12-19 08:25:09');\r\nINSERT INTO `dictionary` VALUES (30, 'SYSTEM', '系统配置', '国家/区域', 'COUNTY', 'CN', 13, 0, 0, '', '2019-01-09 06:32:55', '2018-12-19 08:27:08');\r\nINSERT INTO `dictionary` VALUES (31, 'SYSTEM', '系统配置', '时区标识符', 'TIME_ZONE_ID', 'GMT+8', 13, 1, 0, '', '2019-01-09 06:32:59', '2018-12-19 08:30:44');\r\nINSERT INTO `dictionary` VALUES (32, 'SYSTEM', '系统配置', '日期格式', 'DATE_FORMAT_PATTERN', 'yyyy-MM-dd HH:mm:ss', 13, 0, 0, '', '2019-01-09 06:33:04', '2018-12-19 08:32:46');\r\nINSERT INTO `dictionary` VALUES (33, 'FILE', '文件上传配置', '最大请求上传大小', 'MAX_REQUEST_SIZE', '1000MB', 11, 1, 0, '', '2019-10-25 07:01:17', '2018-12-21 01:05:54');\r\nINSERT INTO `dictionary` VALUES (34, 'VERIFY_CODE', '验证码', '过期时间（秒）', 'EXPIRATION', '60', 14, 1, 0, '', '2019-01-09 06:56:53', '2019-01-09 06:56:53');\r\nINSERT INTO `dictionary` VALUES (35, 'VERIFY_CODE', '验证码', '噪点', 'YAWP', 'false', 14, 1, 0, '', '2019-01-09 06:57:56', '2019-01-09 06:57:43');\r\nINSERT INTO `dictionary` VALUES (36, 'VERIFY_CODE', '验证码', '字符长度', 'STRING_LENGTH', '4', 14, 1, 0, '建议字典值设置为4', '2019-01-10 01:02:27', '2019-01-09 06:58:19');\r\nINSERT INTO `dictionary` VALUES (37, 'VERIFY_CODE', '验证码', '干扰线条数', 'INTER_LINE', '0', 14, 1, 0, '建议字典值设置为4', '2019-01-10 01:02:56', '2019-01-09 06:59:09');\r\nINSERT INTO `dictionary` VALUES (38, 'QUARTZ_TRIGGER_STATE', 'Quartz 任务状态', '等待中', 'WAITING', 'WAITING', 15, 1, 0, '', NULL, NULL);\r\nINSERT INTO `dictionary` VALUES (39, 'QUARTZ_TRIGGER_STATE', 'Quartz 任务状态', '运行中', 'ACQUIRED', 'ACQUIRED', 15, 1, 0, '', NULL, NULL);\r\nINSERT INTO `dictionary` VALUES (40, 'QUARTZ_TRIGGER_STATE', 'Quartz 任务状态', '已暂停', 'PAUSED', 'PAUSED', 15, 1, 0, '', '2019-09-24 03:25:28', NULL);\r\nINSERT INTO `dictionary` VALUES (41, 'QUARTZ_TRIGGER_STATE', 'Quartz 任务状态', '已阻塞', 'BLOCKED', 'BLOCKED', 15, 1, 0, '', NULL, NULL);\r\nINSERT INTO `dictionary` VALUES (42, 'QUARTZ_TRIGGER_STATE', 'Quartz 任务状态', '错误', 'ERROR', 'ERROR', 15, 1, 0, '', NULL, NULL);\r\nINSERT INTO `dictionary` VALUES (43, 'VERIFY_CODE', '验证码', '背景色', 'HEX_BACKGROUND_COLOR', '#0064c8', 14, 1, 0, '', NULL, NULL);\r\nINSERT INTO `dictionary` VALUES (44, 'VERIFY_CODE', '验证码', '字体色', 'FONT_COLOR', '#ffffff', 14, 1, 0, '', NULL, NULL);\r\nINSERT INTO `dictionary` VALUES (45, 'WEB', '网站配置', '网站地址', 'URL', 'http://localhost:8080', 3, 1, 0, '', NULL, NULL);\r\nINSERT INTO `dictionary` VALUES (46, 'VERIFY_CODE', '验证码', '字体路径', 'FONT_PATH', 'classpath:/fonts/Arial.ttf', 14, 1, 0, '', '2019-11-09 02:54:48', '2019-11-09 02:54:48');\r\n\r\n-- ----------------------------\r\n-- Table structure for dictionary_category\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `dictionary_category`;\r\nCREATE TABLE `dictionary_category`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分类名称',\r\n  `parent_id` bigint(20) UNSIGNED NULL DEFAULT NULL COMMENT '父级分类 id',\r\n  `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据字典分类表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of dictionary_category\r\n-- ----------------------------\r\nINSERT INTO `dictionary_category` VALUES (1, '系统缺省字段', NULL, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary_category` VALUES (2, '通用缺省字段', NULL, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary_category` VALUES (3, '网站配置', 1, 0, '', '2019-09-26 12:47:14', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary_category` VALUES (4, '电子邮箱配置', 1, 0, '', '2019-09-24 03:15:58', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary_category` VALUES (5, '视图页面组件类型', 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary_category` VALUES (7, '信息状态', 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary_category` VALUES (8, '是否', 2, 0, '', '2019-02-26 00:41:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary_category` VALUES (9, '性别', 2, 0, '', '2019-02-26 00:41:33', '2018-07-08 15:29:33');\r\nINSERT INTO `dictionary_category` VALUES (11, '文件上传配置', 1, 0, '', '2018-11-19 07:39:44', '2018-11-19 07:39:44');\r\nINSERT INTO `dictionary_category` VALUES (12, '操作类型', 1, 0, '', '2018-12-17 12:02:51', '2018-12-17 12:02:51');\r\nINSERT INTO `dictionary_category` VALUES (13, '系统配置', 1, 0, '', '2018-12-19 08:23:57', '2018-12-19 08:23:57');\r\nINSERT INTO `dictionary_category` VALUES (14, '验证码', 1, 0, '', '2019-01-04 08:23:15', '2019-01-04 08:23:15');\r\nINSERT INTO `dictionary_category` VALUES (15, 'Quartz 任务状态', 1, 0, '', NULL, NULL);\r\n\r\n-- ----------------------------\r\n-- Table structure for file\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `file`;\r\nCREATE TABLE `file`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `user_id` bigint(20) UNSIGNED NULL DEFAULT NULL COMMENT '用户 id',\r\n  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件名',\r\n  `guid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '唯一标识符',\r\n  `size` bigint(20) NOT NULL COMMENT '文件大小',\r\n  `pretty_size` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件美化大小',\r\n  `mime_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'MIME 类型',\r\n  `path` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '文件路径',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '文件表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for job_runtime_log\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `job_runtime_log`;\r\nCREATE TABLE `job_runtime_log`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `job_class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '任务类名',\r\n  `job_group` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务分组',\r\n  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '描述',\r\n  `fire_time` datetime(0) NULL DEFAULT NULL COMMENT 'fireTime',\r\n  `next_fire_time` datetime(0) NULL DEFAULT NULL COMMENT 'nextFireTime',\r\n  `consuming_time` bigint(20) NULL DEFAULT NULL COMMENT '任务运行耗时（毫秒）',\r\n  `log` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '日志',\r\n  `job_exception` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '任务异常信息',\r\n  `gmt_created` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Quartz 任务运行日志' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for mail\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `mail`;\r\nCREATE TABLE `mail`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `status` tinyint(1) NOT NULL COMMENT '发信状态',\r\n  `from` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '发件人',\r\n  `to` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '收件人',\r\n  `subject` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主题',\r\n  `text` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '内容',\r\n  `html` tinyint(1) NULL DEFAULT 0 COMMENT '是否为 html，0=否，1=是',\r\n  `error` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '发信报错信息',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '电子邮件表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for operation_log\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `operation_log`;\r\nCREATE TABLE `operation_log`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `user_id` bigint(20) NULL DEFAULT NULL COMMENT '访问用户 id',\r\n  `ip_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户 IP',\r\n  `operation_type` tinyint(1) NULL DEFAULT NULL COMMENT '操作类型',\r\n  `operation` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '操作说明',\r\n  `consuming_time` bigint(255) NULL DEFAULT 0 COMMENT '操作耗时（毫秒）',\r\n  `request_url` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求地址',\r\n  `request_method` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求方法',\r\n  `request_parameter` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求参数',\r\n  `accept_language` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求语言',\r\n  `referer` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求来源',\r\n  `user_agent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户代理',\r\n  `handler` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'Handler',\r\n  `stack_trace` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '异常堆栈',\r\n  `session_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'Session ID',\r\n  `cookie` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'Cookie',\r\n  `status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '响应状态码',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for role\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `role`;\r\nCREATE TABLE `role`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名称',\r\n  `value` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色值',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE,\r\n  UNIQUE INDEX `uk_value`(`value`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 1000 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of role\r\n-- ----------------------------\r\nINSERT INTO `role` VALUES (1, '普通用户', 'NORMAL_USER', '', '2018-06-27 21:22:40', '2018-06-27 21:22:40');\r\nINSERT INTO `role` VALUES (2, '管理员', 'ADMIN', '', '2018-06-27 21:22:40', '2018-06-27 21:22:40');\r\nINSERT INTO `role` VALUES (999, '系统管理员', 'SYSTEM_ADMIN', '', '2018-06-27 21:22:40', '2018-06-27 21:22:40');\r\n\r\n-- ----------------------------\r\n-- Table structure for role_authority\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `role_authority`;\r\nCREATE TABLE `role_authority`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `role_id` bigint(20) UNSIGNED NOT NULL COMMENT '角色 id',\r\n  `authority` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限（authority）',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色关联权限表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for role_view_menu\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `role_view_menu`;\r\nCREATE TABLE `role_view_menu`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `role_id` bigint(20) UNSIGNED NOT NULL COMMENT '角色 id',\r\n  `view_menu_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图菜单 id',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色关联视图菜单表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of role_view_menu\r\n-- ----------------------------\r\nINSERT INTO `role_view_menu` VALUES (2, 999, 2);\r\nINSERT INTO `role_view_menu` VALUES (3, 999, 3);\r\nINSERT INTO `role_view_menu` VALUES (4, 999, 4);\r\nINSERT INTO `role_view_menu` VALUES (5, 999, 5);\r\nINSERT INTO `role_view_menu` VALUES (6, 999, 6);\r\nINSERT INTO `role_view_menu` VALUES (7, 999, 7);\r\nINSERT INTO `role_view_menu` VALUES (8, 999, 8);\r\nINSERT INTO `role_view_menu` VALUES (9, 999, 9);\r\nINSERT INTO `role_view_menu` VALUES (10, 999, 10);\r\nINSERT INTO `role_view_menu` VALUES (11, 999, 11);\r\nINSERT INTO `role_view_menu` VALUES (12, 999, 12);\r\nINSERT INTO `role_view_menu` VALUES (13, 999, 13);\r\nINSERT INTO `role_view_menu` VALUES (14, 999, 14);\r\nINSERT INTO `role_view_menu` VALUES (15, 999, 15);\r\nINSERT INTO `role_view_menu` VALUES (16, 999, 16);\r\nINSERT INTO `role_view_menu` VALUES (18, 999, 1);\r\n\r\n-- ----------------------------\r\n-- Table structure for role_view_menu_category\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `role_view_menu_category`;\r\nCREATE TABLE `role_view_menu_category`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `role_id` bigint(20) UNSIGNED NOT NULL COMMENT '角色 id',\r\n  `view_menu_category_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图菜单分类名称',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色关联视图菜单分类表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of role_view_menu_category\r\n-- ----------------------------\r\nINSERT INTO `role_view_menu_category` VALUES (1, 999, 1);\r\nINSERT INTO `role_view_menu_category` VALUES (2, 999, 2);\r\nINSERT INTO `role_view_menu_category` VALUES (3, 999, 3);\r\nINSERT INTO `role_view_menu_category` VALUES (4, 999, 4);\r\nINSERT INTO `role_view_menu_category` VALUES (5, 999, 5);\r\n\r\n-- ----------------------------\r\n-- Table structure for user\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `user`;\r\nCREATE TABLE `user`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `username` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名',\r\n  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',\r\n  `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像',\r\n  `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电子邮箱',\r\n  `email_is_verified` tinyint(1) UNSIGNED NULL DEFAULT NULL COMMENT '电子邮箱是否验证（0=未验证，1=已验证，默认=0）',\r\n  `department_id` bigint(20) UNSIGNED NOT NULL COMMENT '部门 id',\r\n  `enabled` tinyint(1) UNSIGNED NULL DEFAULT NULL COMMENT '是否启用（0=否，1=是，默认=0）',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_password_last_modified` datetime(0) NULL DEFAULT NULL COMMENT '最后更改密码时间',\r\n  `gmt_last_login` datetime(0) NULL DEFAULT NULL COMMENT '最后登录时间',\r\n  `gmt_deleted` datetime(0) NULL DEFAULT NULL COMMENT '删除时间',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE,\r\n  UNIQUE INDEX `uk_username`(`username`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 1000 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of user\r\n-- ----------------------------\r\nINSERT INTO `user` VALUES (1, 'normal_user', '$2a$10$IEK236NdbYiZzYVAHTl4qeIgPInJQwMqRh/c986PKwEN4/T1DbsSm', '', 'normal_user@outlook.com', 1, 1, 0, '测试备注', NULL, NULL, NULL, '2019-10-31 13:54:41', '2018-06-27 21:22:40');\r\nINSERT INTO `user` VALUES (2, 'admin', '$2a$10$IEK236NdbYiZzYVAHTl4qeIgPInJQwMqRh/c986PKwEN4/T1DbsSm', '', 'admin@outlook.com', 1, 1, 1, '测试备注', NULL, NULL, NULL, '2019-11-05 02:29:23', '2018-06-27 21:22:40');\r\nINSERT INTO `user` VALUES (999, 'system_admin', '$2a$10$IEK236NdbYiZzYVAHTl4qeIgPInJQwMqRh/c986PKwEN4/T1DbsSm', '', 'system_admin@outlook.com', 1, 1, 1, '测试备注', NULL, NULL, NULL, '2020-03-06 10:52:51', '2018-06-27 21:22:40');\r\n\r\n-- ----------------------------\r\n-- Table structure for user_role\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `user_role`;\r\nCREATE TABLE `user_role`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户 id',\r\n  `role_id` bigint(20) UNSIGNED NOT NULL COMMENT '角色 id',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户关联角色表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of user_role\r\n-- ----------------------------\r\nINSERT INTO `user_role` VALUES (1, 999, 999);\r\nINSERT INTO `user_role` VALUES (2, 1, 1);\r\nINSERT INTO `user_role` VALUES (3, 2, 2);\r\nINSERT INTO `user_role` VALUES (4, 2, 999);\r\n\r\n-- ----------------------------\r\n-- Table structure for user_verify_code\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `user_verify_code`;\r\nCREATE TABLE `user_verify_code`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户 id',\r\n  `verify_from` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户绑定的电子邮箱或手机号码',\r\n  `verify_code` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '电子邮箱或手机号码验证码',\r\n  `gmt_expires` datetime(0) NOT NULL COMMENT '过期时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE,\r\n  UNIQUE INDEX `uk_verify_code`(`verify_code`) USING BTREE,\r\n  INDEX `uk_user_id`(`user_id`) USING BTREE,\r\n  INDEX `uk_verify_from`(`verify_from`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户验证码表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for view_menu\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `view_menu`;\r\nCREATE TABLE `view_menu`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '视图菜单名称',\r\n  `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '图标（icon）',\r\n  `url` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求地址（url）',\r\n  `view_menu_category_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图菜单分类 id',\r\n  `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图菜单表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of view_menu\r\n-- ----------------------------\r\nINSERT INTO `view_menu` VALUES (1, 'API 管理', 'api', '/user/api/list', 3, 0, '', '2019-06-06 02:52:53', '2018-07-01 21:28:04');\r\nINSERT INTO `view_menu` VALUES (2, '数据字典', 'book', '/system/dictionary/list', 2, 0, '', '2019-06-06 02:51:54', '2018-07-01 21:28:04');\r\nINSERT INTO `view_menu` VALUES (3, '视图页面管理', 'desktop', '/user/view_page/list', 3, 0, '', '2019-06-06 02:50:52', '2018-07-01 21:28:04');\r\nINSERT INTO `view_menu` VALUES (4, 'Druid Monitor', 'alibaba', '/druid/list', 2, 0, '', '2019-06-13 04:16:42', '2018-07-01 21:28:04');\r\nINSERT INTO `view_menu` VALUES (5, '用户管理', 'user', '/user/list', 3, 0, '', '2018-07-01 21:28:04', '2018-07-01 21:28:04');\r\nINSERT INTO `view_menu` VALUES (6, '角色管理', 'team', '/user/role/list', 3, 0, '', '2019-06-06 03:16:52', '2018-07-01 21:28:04');\r\nINSERT INTO `view_menu` VALUES (7, '电子邮件管理', 'mail', '/mail/list', 2, 0, '', '2019-01-21 02:59:02', '2018-07-08 13:22:30');\r\nINSERT INTO `view_menu` VALUES (8, '操作日志', 'exception', '/system/operation_log/list', 2, 0, '', '2019-08-07 12:30:57', '2018-08-06 16:47:15');\r\nINSERT INTO `view_menu` VALUES (9, '文件管理', 'file', '/system/file/list', 2, 0, '', '2018-10-20 19:07:33', '2018-10-20 19:01:23');\r\nINSERT INTO `view_menu` VALUES (10, '部门管理', 'cluster', '/user/department/list', 3, 0, '', '2018-12-20 02:43:28', '2018-12-20 02:43:28');\r\nINSERT INTO `view_menu` VALUES (11, '视图菜单管理', 'bars', '/user/view_menu/list', 3, 0, '', '2019-06-13 04:21:31', '2019-06-13 11:37:14');\r\nINSERT INTO `view_menu` VALUES (12, 'Quartz 任务管理', 'bars', '/quartz/job/list', 4, 0, '', '2019-06-17 06:31:23', '2019-06-17 06:28:37');\r\nINSERT INTO `view_menu` VALUES (13, 'Quartz 任务日志', 'exception', '/quartz/job_runtime_log/list', 4, 0, '', NULL, NULL);\r\nINSERT INTO `view_menu` VALUES (14, '工作台', 'dashboard', '/workbench', 1, 0, '', '2019-07-27 16:11:47', '2019-02-11 01:17:37');\r\n\r\n-- ----------------------------\r\n-- Table structure for view_menu_category\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `view_menu_category`;\r\nCREATE TABLE `view_menu_category`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '视图菜单分类名称',\r\n  `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '图标（icon）',\r\n  `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父级视图菜单分类 id',\r\n  `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图菜单分类表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of view_menu_category\r\n-- ----------------------------\r\nINSERT INTO `view_menu_category` VALUES (1, '系统管理', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:11:27', '2018-07-01 21:28:04');\r\nINSERT INTO `view_menu_category` VALUES (2, '系统配置', 'fa fa-cog', 1, 0, '', '2019-06-13 04:16:55', '2018-07-01 21:28:04');\r\nINSERT INTO `view_menu_category` VALUES (3, '用户配置', 'fa fa-user', 1, 0, '', '2019-06-13 07:22:32', '2018-07-01 21:28:04');\r\nINSERT INTO `view_menu_category` VALUES (4, 'Quartz 任务', 'fa fa-bars', 2, 0, '', NULL, NULL);\r\nINSERT INTO `view_menu_category` VALUES (5, '测试菜单', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:11:41', '2019-12-17 10:38:53');\r\nINSERT INTO `view_menu_category` VALUES (6, '系统管理系统管', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:11:46', '2019-12-17 10:51:36');\r\nINSERT INTO `view_menu_category` VALUES (7, '系统管理系统管2', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:11:52', '2019-12-17 10:55:09');\r\nINSERT INTO `view_menu_category` VALUES (8, '系统管理系统管3', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:11:56', '2019-12-17 10:55:19');\r\nINSERT INTO `view_menu_category` VALUES (9, '系统管理系统管4', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:12:00', '2019-12-17 10:56:24');\r\nINSERT INTO `view_menu_category` VALUES (10, '系统管理系统管5', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:12:03', '2019-12-17 10:56:30');\r\nINSERT INTO `view_menu_category` VALUES (11, '系统管理系统管6', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:12:07', '2019-12-17 10:56:36');\r\n\r\n-- ----------------------------\r\n-- Table structure for view_page\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `view_page`;\r\nCREATE TABLE `view_page`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '视图页面名称',\r\n  `url` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求地址（url）',\r\n  `authority` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限（authority）',\r\n  `view_page_category_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图页面分类 id',\r\n  `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE,\r\n  UNIQUE INDEX `uk_authority`(`authority`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图页面表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of view_page\r\n-- ----------------------------\r\nINSERT INTO `view_page` VALUES (1, 'API 管理', '/user/api/page_all', '/USER/API/PAGE_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page` VALUES (2, '数据字典', '/system/dictionary/page_all', '/SYSTEM/DICTIONARY/PAGE_ALL', 2, 0, '', NULL, NULL);\r\nINSERT INTO `view_page` VALUES (3, '视图页面管理', '/user/view_page/page_all', '/USER/VIEW_PAGE/PAGE_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page` VALUES (4, 'Druid Monitor', '/druid', '/DRUID', 2, 0, '', NULL, NULL);\r\nINSERT INTO `view_page` VALUES (5, '用户管理', '/user/page_all', '/USER/PAGE_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page` VALUES (6, '角色管理', '/user/role/page_all', '/USER/ROLE/PAGE_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page` VALUES (7, '电子邮件管理', '/mail/page_all', '/MAIL/PAGE_ALL', 2, 0, '', NULL, NULL);\r\nINSERT INTO `view_page` VALUES (8, '操作日志', '/system/operation_log/page_all', '/SYSTEM/OPERATION_LOG/PAGE_ALL', 2, 0, '', NULL, NULL);\r\nINSERT INTO `view_page` VALUES (9, '文件管理', '/system/file/page_all', '/SYSTEM/FILE/PAGE_ALL', 2, 0, '', NULL, NULL);\r\nINSERT INTO `view_page` VALUES (10, '部门管理', '/user/department/list_all', '/USER/DEPARTMENT/LIST_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page` VALUES (11, '视图菜单管理', '/user/view_menu/page_all', '/USER/VIEW_MENU/PAGE_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page` VALUES (12, 'Quartz 任务管理', '/quartz/job/page_all', '/QUARTZ/JOB/PAGE_ALL', 4, 0, '', NULL, NULL);\r\nINSERT INTO `view_page` VALUES (13, 'Quartz 任务日志', '/quartz/job_runtime_log/page_all', '/QUARTZ/JOB_RUNTIME_LOG/PAGE_ALL', 4, 0, '', NULL, NULL);\r\nINSERT INTO `view_page` VALUES (14, '工作台', '/workbench', '/WORKBENCH', 1, 0, '', NULL, NULL);\r\n\r\n-- ----------------------------\r\n-- Table structure for view_page_api\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `view_page_api`;\r\nCREATE TABLE `view_page_api`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `view_page_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图页面 id',\r\n  `api_id` bigint(20) UNSIGNED NOT NULL COMMENT 'API id',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图页面关联 API 表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Table structure for view_page_category\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `view_page_category`;\r\nCREATE TABLE `view_page_category`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '视图页面分类名称',\r\n  `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父级视图页面分类 id',\r\n  `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图页面分类表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of view_page_category\r\n-- ----------------------------\r\nINSERT INTO `view_page_category` VALUES (1, '系统管理', NULL, 0, '', '2019-08-07 12:55:27', '2019-08-07 12:55:27');\r\nINSERT INTO `view_page_category` VALUES (2, '系统配置', 1, 0, '', '2019-08-07 13:54:02', '2019-08-07 13:54:02');\r\nINSERT INTO `view_page_category` VALUES (3, '用户配置', 1, 0, '', '2019-08-07 14:03:00', '2019-08-07 14:03:00');\r\nINSERT INTO `view_page_category` VALUES (4, 'Quartz 任务', 2, 0, '', '2019-08-07 14:17:54', '2019-08-07 14:17:43');\r\n\r\n-- ----------------------------\r\n-- Table structure for view_page_component\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `view_page_component`;\r\nCREATE TABLE `view_page_component`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `view_page_component_type` tinyint(2) NOT NULL COMMENT '视图页面组件类型 id',\r\n  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '视图页面组件名称',\r\n  `authority` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限（authority）',\r\n  `view_page_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图页面 id',\r\n  `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序',\r\n  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',\r\n  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',\r\n  `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE,\r\n  UNIQUE INDEX `uk_authority`(`authority`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 76 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图页面组件表' ROW_FORMAT = Dynamic;\r\n\r\n-- ----------------------------\r\n-- Records of view_page_component\r\n-- ----------------------------\r\nINSERT INTO `view_page_component` VALUES (1, 1, '新增发送邮件', '/COMPONENT/MAIL/SEND_ONE', 7, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (2, 1, '删除', '/COMPONENT/MAIL/DELETE_ALL', 7, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (3, 1, '删除', '/COMPONENT/MAIL/REFRESH', 7, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (4, 1, '新增', '/COMPONENT/QUARTZ/JOB/ADD_ONE', 12, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (5, 1, '编辑', '/COMPONENT/QUARTZ/JOB/EDIT_ONE', 12, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (6, 1, '删除', '/COMPONENT/QUARTZ/JOB/DELETE_ALL', 12, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (7, 1, '暂停', '/COMPONENT/QUARTZ/JOB/PAUSE_ALL', 12, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (8, 1, '恢复', '/COMPONENT/QUARTZ/JOB/RESUME_ALL', 12, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (9, 1, '刷新', '/COMPONENT/QUARTZ/JOB/REFRESH', 12, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (10, 1, '清空', '/COMPONENT/QUARTZ/JOB_RUNTIME_LOG/CLEAR_ALL', 13, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (11, 1, '新增', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_CATEGORY_ADD_ONE', 2, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (12, 1, '编辑', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_CATEGORY_EDIT_ONE', 2, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (13, 1, '删除', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_CATEGORY_DELETE_ALL', 2, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (14, 1, '新增', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_ADD_ONE', 2, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (15, 1, '编辑', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_EDIT_ONE', 2, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (16, 1, '删除', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_DELETE_ALL', 2, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (17, 1, '同步到内存', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_SYNC_TO_MEMORY', 2, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (18, 1, '单文件上传', '/COMPONENT/SYSTEM/FILE/UPLOAD_ONE', 9, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (19, 1, '编辑', '/COMPONENT/SYSTEM/FILE/EDIT_ONE', 9, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (20, 1, '删除', '/COMPONENT/SYSTEM/FILE/DELETE_ALL', 9, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (21, 1, '清空', '/COMPONENT/SYSTEM/OPERATION_LOG/CLEAR_ALL', 8, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (22, 1, '新增', '/COMPONENT/USER/ADD_ONE', 5, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (23, 1, '编辑', '/COMPONENT/USER/EDIT_ONE', 5, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (24, 1, '删除', '/COMPONENT/USER/FAKE_DELETE_ALL', 5, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (25, 1, '撤销删除', '/COMPONENT/USER/REVOKE_FAKE_DELETE_ALL', 5, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (26, 1, '永久删除', '/COMPONENT/USER/DELETE_ALL', 5, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (27, 1, '角色分配', '/COMPONENT/USER/USER_ROLE_PAGE_ALL', 5, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (28, 1, '新增', '/COMPONENT/USER/API/API_CATEGORY_ADD_ONE', 1, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (29, 1, '编辑', '/COMPONENT/USER/API/API_CATEGORY_EDIT_ONE', 1, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (30, 1, '删除', '/COMPONENT/USER/API/API_CATEGORY_DELETE_ALL', 1, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (31, 1, '新增', '/COMPONENT/USER/API/API_ADD_ONE', 1, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (32, 1, '编辑', '/COMPONENT/USER/API/API_EDIT_ONE', 1, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (33, 1, '删除', '/COMPONENT/USER/API/API_DELETE_ALL', 1, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (34, 1, '新增', '/COMPONENT/USER/DEPARTMENT/ADD_ONE', 10, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (35, 1, '编辑', '/COMPONENT/USER/DEPARTMENT/EDIT_ONE', 10, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (36, 1, '删除', '/COMPONENT/USER/DEPARTMENT/DELETE_ALL', 10, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (37, 1, '新增', '/COMPONENT/USER/ROLE/ADD_ONE', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (38, 1, '编辑', '/COMPONENT/USER/ROLE/EDIT_ONE', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (39, 1, '删除', '/COMPONENT/USER/ROLE/DELETE_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (40, 1, '视图菜单管理', '/COMPONENT/USER/ROLE/VIEW_MENU_PAGE_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (41, 1, '视图页面管理', '/COMPONENT/USER/ROLE/VIEW_PAGE_PAGE_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (42, 1, 'API 管理', '/COMPONENT/USER/ROLE/API_PAGE_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (43, 1, '授权', '/COMPONENT/USER/ROLE/API/API_GRANT_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (44, 1, '撤销授权', '/COMPONENT/USER/ROLE/API/API_REVOKE_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (45, 1, '授权', '/COMPONENT/USER/ROLE/VIEW_MENU/VIEW_MENU_CATEGORY_GRANT_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (46, 1, '撤销授权', '/COMPONENT/USER/ROLE/VIEW_MENU/VIEW_MENU_CATEGORY_REVOKE_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (47, 1, '授权', '/COMPONENT/USER/ROLE/VIEW_MENU/VIEW_MENU_GRANT_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (48, 1, '撤销授权', '/COMPONENT/USER/ROLE/VIEW_MENU/VIEW_MENU_REVOKE_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (49, 1, '授权', '/COMPONENT/USER/ROLE/VIEW_PAGE/VIEW_PAGE_GRANT_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (50, 1, '撤销授权', '/COMPONENT/USER/ROLE/VIEW_PAGE/VIEW_PAGE_REVOKE_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (51, 1, '授权', '/COMPONENT/USER/ROLE/VIEW_PAGE/VIEW_PAGE_COMPONENT_GRANT_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (52, 1, '撤销授权', '/COMPONENT/USER/ROLE/VIEW_PAGE/VIEW_PAGE_COMPONENT_REVOKE_ALL', 6, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (53, 1, '授权', '/COMPONENT/USER/USER_ROLE/GRANT_ALL', 5, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (54, 1, '撤销授权', '/COMPONENT/USER/USER_ROLE/REVOKE_ALL', 5, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (55, 1, '新增', '/COMPONENT/USER/VIEW_MENU/VIEW_MENU_CATEGORY_ADD_ONE', 11, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (56, 1, '编辑', '/COMPONENT/USER/VIEW_MENU/VIEW_MENU_CATEGORY_EDIT_ONE', 11, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (57, 1, '删除', '/COMPONENT/USER/VIEW_MENU/VIEW_MENU_CATEGORY_DELETE_ALL', 11, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (58, 1, '新增', '/COMPONENT/USER/VIEW_MENU/VIEW_MENU_ADD_ONE', 11, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (59, 1, '编辑', '/COMPONENT/USER/VIEW_MENU/VIEW_MENU_EDIT_ONE', 11, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (60, 1, '删除', '/COMPONENT/USER/VIEW_MENU/VIEW_MENU_DELETE_ALL', 11, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (61, 1, '新增', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_CATEGORY_ADD_ONE', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (62, 1, '编辑', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_CATEGORY_EDIT_ONE', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (63, 1, '删除', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_CATEGORY_DELETE_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (64, 1, '新增', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_ADD_ONE', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (65, 1, '编辑', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_EDIT_ONE', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (66, 1, '删除', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_DELETE_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (67, 1, '关联 API', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_API_PAGE_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (68, 1, '新增', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_COMPONENT_ADD_ONE', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (69, 1, '编辑', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_COMPONENT_EDIT_ONE', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (70, 1, '删除', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_COMPONENT_DELETE_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (71, 1, '关联 API', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_COMPONENT_API_PAGE_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (72, 1, '关联', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_API/ASSOCIATE_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (73, 1, '撤销关联', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_API/REVOKE_ASSOCIATE_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (74, 1, '关联', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_COMPONENT_API/ASSOCIATE_ALL', 3, 0, '', NULL, NULL);\r\nINSERT INTO `view_page_component` VALUES (75, 1, '撤销关联', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_COMPONENT_API/REVOKE_ASSOCIATE_ALL', 3, 0, '', NULL, NULL);\r\n\r\n-- ----------------------------\r\n-- Table structure for view_page_component_api\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `view_page_component_api`;\r\nCREATE TABLE `view_page_component_api`  (\r\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n  `view_page_component_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图页面组件 id',\r\n  `api_id` bigint(20) UNSIGNED NOT NULL COMMENT 'API id',\r\n  PRIMARY KEY (`id`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图页面组件关联 API 表' ROW_FORMAT = Dynamic;\r\n\r\nSET FOREIGN_KEY_CHECKS = 1;\r\n"
  },
  {
    "path": "db/mysql/nimrod/table/api_category_table.sql",
    "content": "\n-- API 分类表\nDROP TABLE IF EXISTS `api_category`;\n\nCREATE TABLE `api_category` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `name` varchar(255) NOT NULL COMMENT '分类名称',\n  `parent_id` bigint(20) DEFAULT NULL COMMENT '父级分类 id',\n  `sort` bigint(20) unsigned DEFAULT 0 COMMENT '排序',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_modified` datetime ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',\n  `gmt_created` datetime ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY `pk_id`(`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = 'API 分类表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/api_table.sql",
    "content": "\n-- API 表\n-- ----------------------------\n-- Table structure for api\n-- ----------------------------\nDROP TABLE IF EXISTS `api`;\nCREATE TABLE `api`  (\n  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',\n  `name` varchar(255) NOT NULL COMMENT 'API 名称',\n  `url` text COMMENT '请求地址（url）',\n  `authority` varchar(255) NOT NULL COMMENT '权限（authority）',\n  `api_category_id` bigint(20) unsigned NOT NULL COMMENT 'API 分类 id',\n  `sort` bigint(20) unsigned DEFAULT 0 COMMENT '排序',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY (`id`) USING BTREE,\n  UNIQUE INDEX `uk_authority`(`authority`) USING BTREE\n)   ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = 'API 表';\n\n"
  },
  {
    "path": "db/mysql/nimrod/table/attachment_table.sql",
    "content": "\n-- 附件表\nDROP TABLE\nIF EXISTS `attachment`;\n\nCREATE TABLE `attachment` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `name` varchar(255) NOT NULL COMMENT '文件名',\n  `guid` varchar(255) DEFAULT '' COMMENT '唯一标识符',\n  `size` bigint(20) unsigned DEFAULT 0 COMMENT '文件大小',\n  `pretty_size` varchar(255) NOT NULL COMMENT '文件美化大小',\n  `mime_type` varchar(255) DEFAULT '' COMMENT 'MIME 类型',\n  `path` text COMMENT '文件路径',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY `pk_id`(`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '附件表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/department_table.sql",
    "content": "\n-- 部门表\nDROP TABLE\nIF EXISTS `department`;\n\nCREATE TABLE `department` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `name` varchar(255) NOT NULL COMMENT '部门名称',\n  `parent_id` bigint(20) DEFAULT NULL COMMENT '父级部门 id',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY `pk_id` (`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '部门表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/dictionary_category_table.sql",
    "content": "\n-- 数据字典分类表\nDROP TABLE\nIF EXISTS `dictionary_category`;\n\nCREATE TABLE `dictionary_category` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `name` varchar(255) NOT NULL COMMENT '分类名称',\n  `parent_id` bigint(20) unsigned DEFAULT NULL COMMENT '父级分类 id',\n  `sort` bigint(20) DEFAULT 0 COMMENT '排序',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY (`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '数据字典分类表';\n\n"
  },
  {
    "path": "db/mysql/nimrod/table/dictionary_table.sql",
    "content": "\n-- 数据字典表\nDROP TABLE\nIF EXISTS `dictionary`;\n\nCREATE TABLE `dictionary` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `key_name` varchar(255) NOT NULL COMMENT '字典键名',\n  `key` varchar(255) NOT NULL COMMENT '字典键',\n  `value_name` varchar(255) NOT NULL COMMENT '字典值名',\n  `value_slug` varchar(255) NOT NULL COMMENT '字典值别名',\n  `value` text COMMENT '字典值',\n  `enabled` tinyint(1) unsigned NOT NULL COMMENT '是否启用（0=否，1=是，默认=0）',\n  `dictionary_category_id` bigint(20) unsigned NOT NULL COMMENT '字典分类 id',\n  `sort` bigint(20) unsigned DEFAULT 0 COMMENT '排序',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_modified` datetime DEFAULT NULL COMMENT '更新时间',\n  `gmt_created` datetime DEFAULT NULL COMMENT '创建时间',\n  PRIMARY KEY (`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '数据字典表';"
  },
  {
    "path": "db/mysql/nimrod/table/job_runtime_log_table.sql",
    "content": "\n-- Quartz 定时任务运行日志\nDROP TABLE IF EXISTS `job_runtime_log`;\n\nCREATE TABLE `job_runtime_log` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `job_class_name` varchar(255) DEFAULT '' COMMENT '任务类名',\n  `job_group` varchar(255) NOT NULL COMMENT '任务分组',\n  `description` varchar(255) DEFAULT '' COMMENT '描述',\n  `fire_time` datetime COMMENT 'fireTime',\n  `next_fire_time` datetime COMMENT 'nextFireTime',\n  `job_run_time` bigint(20) COMMENT '任务运行耗时',\n  `log` varchar(255) DEFAULT '' COMMENT '日志',\n  `job_exception` varchar(255) DEFAULT '' COMMENT '任务异常信息',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY `pk_id`(`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = 'Quartz 定时任务运行日志';\n"
  },
  {
    "path": "db/mysql/nimrod/table/mail_attachment_table.sql",
    "content": "\n-- 电子邮件文件表\nDROP TABLE\nIF EXISTS `mail_attachment`;\n\nCREATE TABLE `mail_attachment` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `mail_id` bigint(20) NOT NULL COMMENT '电子邮件 id',\n  `attachment_id` bigint(20) NOT NULL COMMENT '文件 id',\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '电子邮件附件表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/mail_table.sql",
    "content": "\n-- 电子邮件表\nDROP TABLE IF EXISTS `mail`;\n\nCREATE TABLE `mail` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `status` tinyint(1) NOT NULL COMMENT '发信状态',\n  `from` varchar(255) DEFAULT '' COMMENT '发件人',\n  `to` varchar(255) NOT NULL COMMENT '收件人',\n  `subject` varchar(255) DEFAULT '' COMMENT '主题',\n  `text` text COMMENT '内容',\n  `html` tinyint(1) DEFAULT 0 COMMENT '是否为 html，0=否，1=是',\n  `error` text COMMENT '发信报错信息',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY `pk_id`(`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '电子邮件表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/operation_log_table.sql",
    "content": "\n-- 系统请求日志表\nDROP TABLE\nIF EXISTS `operation_log`;\n\nCREATE TABLE `operation_log` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `user_id` bigint(20) DEFAULT NULL COMMENT '访问用户 id',\n  `ip_address` varchar(255) DEFAULT '' COMMENT '用户 IP',\n  `operation_type` tinyint(1) DEFAULT NULL COMMENT '操作类型',\n  `operation` text COMMENT '操作说明',\n  `request_time` bigint(255) DEFAULT 0 COMMENT '请求耗时（毫秒）',\n  `request_url` text COMMENT '请求地址',\n  `request_method` varchar(50) DEFAULT '' COMMENT '请求方法',\n  `request_parameter` text COMMENT '请求参数',\n  `accept_language` varchar(255) DEFAULT '' COMMENT '请求语言',\n  `referer` text COMMENT '请求来源',\n  `user_agent` varchar(255) DEFAULT '' COMMENT '用户代理',\n  `handler` text COMMENT 'Handler',\n  `session_id` varchar(255) DEFAULT '' COMMENT 'Session ID',\n  `cookie` text COMMENT 'Cookie',\n  `content_type` varchar(255) DEFAULT '' COMMENT '响应文本类型',\n  `status` varchar(255) DEFAULT '' COMMENT '响应状态码',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY `pk_id`(`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '系统操作日志表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/role_authority_table.sql",
    "content": "\n-- 角色关联权限表\nDROP TABLE\nIF EXISTS `role_authority`;\n\nCREATE TABLE `role_authority` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `role_id` bigint(20) unsigned NOT NULL COMMENT '角色 id',\n  `authority` varchar(255) NOT NULL COMMENT '权限（authority）',\n  PRIMARY KEY `pk_id` (`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '角色关联权限表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/role_table.sql",
    "content": "\n-- 角色表\nDROP TABLE\nIF EXISTS `role`;\n\nCREATE TABLE `role` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `name` varchar(255) NOT NULL COMMENT '角色名称',\n  `value` varchar(255) NOT NULL COMMENT '角色值',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY `pk_id`(`id`),\n  UNIQUE KEY `uk_value` (`value`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '角色表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/user_password_reset_table.sql",
    "content": "\n\n-- 用户密码重置表\nDROP TABLE\nIF EXISTS `user_password_reset`;\n\nCREATE TABLE `user_password_reset` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `user_id` bigint(20) unsigned NOT NULL COMMENT '用户 id',\n  `verify_from` varchar(255) NOT NULL COMMENT '用户绑定的电子邮箱或手机号码',\n  `verify_code` varchar(255) NOT NULL COMMENT '电子邮箱或手机号码验证码',\n  `gmt_expires` datetime NOT NULL COMMENT '过期时间',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `uk_user_id` (`user_id`),\n  UNIQUE KEY `uk_verify_from` (`verify_from`),\n  UNIQUE KEY `uk_verify_code` (`verify_code`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '用户密码重置表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/user_role_table.sql",
    "content": "\n-- 用户关联角色表\nDROP TABLE\nIF EXISTS `user_role`;\n\nCREATE TABLE `user_role` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `user_id` bigint(20) unsigned NOT NULL COMMENT '用户 id',\n  `role_id` bigint(20) unsigned NOT NULL COMMENT '角色 id',\n  PRIMARY KEY `pk_id` (`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '用户关联角色表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/user_table.sql",
    "content": "\n-- 用户表\nDROP TABLE\nIF EXISTS `user`;\n\n-- 123456\n-- $2a$10$tYdoCZPLiG2bMX9Cn09JCOV.g0BZeblQ39Rq0HL.jJy5OtCnUMOmC\n\nCREATE TABLE `user` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `password` varchar(255) NOT NULL COMMENT '用户密码',\n  `username` varchar(255) NOT NULL COMMENT '用户名',\n  `email` varchar(255) DEFAULT '' COMMENT '电子邮箱',\n  `email_is_verified` tinyint(1) unsigned COMMENT '电子邮箱是否验证通过（0=未验证，1=已验证）',\n  `department_id` bigint(20) unsigned NOT NULL COMMENT '部门 id',\n  `enabled` tinyint(20) unsigned NULL COMMENT '是否启用（0=否，1=是，默认=0）',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_deleted` datetime DEFAULT NULL COMMENT '删除时间',\n  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY `pk_id` (`id`),\n  UNIQUE KEY `uk_username` (`username`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '用户表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/view_menu_category_table.sql",
    "content": "\n\n-- 视图菜单分类表\nDROP TABLE\nIF EXISTS `view_menu_category`;\n\nCREATE TABLE `view_menu_category` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `name` varchar(255) NOT NULL COMMENT '分类名称',\n  `icon` varchar(255) DEFAULT '' COMMENT '图标（icon）',\n  `parent_id` bigint(20) DEFAULT NULL COMMENT '父级分类 id',\n  `role_id` bigint(20) unsigned NOT NULL COMMENT '角色 id',\n  `sort` bigint(20) DEFAULT 0 COMMENT '排序',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY `pk_id`(`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '视图菜单分类表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/view_menu_table.sql",
    "content": "\n-- 视图菜单表\nDROP TABLE\nIF EXISTS `view_menu`;\n\nCREATE TABLE `view_menu` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `name` varchar(255) NOT NULL COMMENT '菜单名称',\n  `icon` varchar(255) DEFAULT '' COMMENT '图标（icon）',\n  `url` text COMMENT '请求地址（url）',\n  `menu_category_id` bigint(20) unsigned NOT NULL COMMENT '菜单分类 id',\n  `role_id` bigint(20) unsigned NOT NULL COMMENT '角色 id',\n  `sort` bigint(20) DEFAULT 0 COMMENT '排序',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY `pk_id`(`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '视图菜单表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/view_page_api_table.sql",
    "content": "\n-- 视图页面关联 API 表\nDROP TABLE\nIF EXISTS `view_page_api`;\n\nCREATE TABLE `view_page_api` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `page_id` bigint(20) unsigned NOT NULL COMMENT '视图页面 id',\n  `api_id` bigint(20) unsigned NOT NULL COMMENT 'API id',\n    PRIMARY KEY `pk_id`(`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '视图页面关联 API 表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/view_page_category_table.sql",
    "content": "\n-- 视图页面分类表\nDROP TABLE\nIF EXISTS `view_page_category`;\n\nCREATE TABLE `view_page_category` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `name` varchar(255) NOT NULL COMMENT '分类名称',\n  `parent_id` bigint(20) DEFAULT NULL COMMENT '父级分类 id',\n  `sort` bigint(20) DEFAULT 0 COMMENT '排序',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY `pk_id`(`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '视图页面分类表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/view_page_component_api_table.sql",
    "content": "\n-- 视图页面组件关联 API 表\nDROP TABLE\nIF EXISTS `view_page_component_api`;\n\nCREATE TABLE `view_page_component_api` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `page_component_id` bigint(20) unsigned NOT NULL COMMENT '视图页面组件 id',\n  `api_id` bigint(20) unsigned NOT NULL COMMENT 'API id',\n    PRIMARY KEY `pk_id`(`id`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '视图页面组件关联 API 表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/view_page_component_table.sql",
    "content": "\n-- 视图页面组件表\nDROP TABLE\nIF EXISTS `view_page_component`;\n\nCREATE TABLE `view_page_component` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `page_component_type` tinyint(2) NOT NULL COMMENT '组件类型 id',\n  `name` varchar(255) NOT NULL COMMENT '组件名称',\n  `authority` varchar(255) NOT NULL COMMENT '权限（authority）',\n  `page_id` bigint(20) unsigned NOT NULL COMMENT '视图页面 id',\n  `sort` bigint(20) DEFAULT 0 COMMENT '排序',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY `pk_id`(`id`),\n  UNIQUE KEY `uk_authority` (`authority`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '视图页面组件表';\n"
  },
  {
    "path": "db/mysql/nimrod/table/view_page_table.sql",
    "content": "\n-- 视图页面表\nDROP TABLE\nIF EXISTS `view_page`;\n\nCREATE TABLE `view_page` (\n  `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id',\n  `name` varchar(255) NOT NULL COMMENT '页面名称',\n  `url` text COMMENT '请求地址（url）',\n  `authority` varchar(255) NOT NULL COMMENT '权限（authority）',\n  `page_category_id` bigint(20) unsigned NOT NULL COMMENT '页面分类 id',\n  `sort` bigint(20) DEFAULT 0 COMMENT '排序',\n  `remark` varchar(255) DEFAULT '' COMMENT '备注',\n  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',\n  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n  PRIMARY KEY `pk_id`(`id`),\n  UNIQUE KEY `uk_authority` (`authority`)\n)\n  ENGINE = INNODB\n  DEFAULT CHARACTER\n  SET = utf8mb4\n  COLLATE = utf8mb4_general_ci\n  AUTO_INCREMENT = 1\n  ROW_FORMAT = DYNAMIC\n  COMMENT = '视图页面表';"
  },
  {
    "path": "db/mysql/nimrod/util.sql",
    "content": "\n-- 修改MySQL时区\nset global time_zone = '+08:00'; -- 修改mysql全局时区为北京时间，即我们所在的东8区\nset time_zone = '+08:00'; -- 修改当前会话时区\nflush privileges; -- 立即生效\n"
  },
  {
    "path": "db/mysql/quartz/tables_mysql_innodb.sql",
    "content": "#\n# In your Quartz properties file, you'll need to set\n# org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate\n#\n#\n# By: Ron Cordell - roncordell\n#  I didn't see this anywhere, so I thought I'd post it here. This is the script from Quartz to create the tables in a MySQL database, modified to use INNODB instead of MYISAM.\n\nDROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;\nDROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;\nDROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;\nDROP TABLE IF EXISTS QRTZ_LOCKS;\nDROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;\nDROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;\nDROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;\nDROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;\nDROP TABLE IF EXISTS QRTZ_TRIGGERS;\nDROP TABLE IF EXISTS QRTZ_JOB_DETAILS;\nDROP TABLE IF EXISTS QRTZ_CALENDARS;\n\nCREATE TABLE QRTZ_JOB_DETAILS(\nSCHED_NAME VARCHAR(120) NOT NULL,\nJOB_NAME VARCHAR(190) NOT NULL,\nJOB_GROUP VARCHAR(190) NOT NULL,\nDESCRIPTION VARCHAR(250) NULL,\nJOB_CLASS_NAME VARCHAR(250) NOT NULL,\nIS_DURABLE VARCHAR(1) NOT NULL,\nIS_NONCONCURRENT VARCHAR(1) NOT NULL,\nIS_UPDATE_DATA VARCHAR(1) NOT NULL,\nREQUESTS_RECOVERY VARCHAR(1) NOT NULL,\nJOB_DATA BLOB NULL,\nPRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP))\nENGINE=InnoDB;\n\nCREATE TABLE QRTZ_TRIGGERS (\nSCHED_NAME VARCHAR(120) NOT NULL,\nTRIGGER_NAME VARCHAR(190) NOT NULL,\nTRIGGER_GROUP VARCHAR(190) NOT NULL,\nJOB_NAME VARCHAR(190) NOT NULL,\nJOB_GROUP VARCHAR(190) NOT NULL,\nDESCRIPTION VARCHAR(250) NULL,\nNEXT_FIRE_TIME BIGINT(13) NULL,\nPREV_FIRE_TIME BIGINT(13) NULL,\nPRIORITY INTEGER NULL,\nTRIGGER_STATE VARCHAR(16) NOT NULL,\nTRIGGER_TYPE VARCHAR(8) NOT NULL,\nSTART_TIME BIGINT(13) NOT NULL,\nEND_TIME BIGINT(13) NULL,\nCALENDAR_NAME VARCHAR(190) NULL,\nMISFIRE_INSTR SMALLINT(2) NULL,\nJOB_DATA BLOB NULL,\nPRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\nFOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)\nREFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP))\nENGINE=InnoDB;\n\nCREATE TABLE QRTZ_SIMPLE_TRIGGERS (\nSCHED_NAME VARCHAR(120) NOT NULL,\nTRIGGER_NAME VARCHAR(190) NOT NULL,\nTRIGGER_GROUP VARCHAR(190) NOT NULL,\nREPEAT_COUNT BIGINT(7) NOT NULL,\nREPEAT_INTERVAL BIGINT(12) NOT NULL,\nTIMES_TRIGGERED BIGINT(10) NOT NULL,\nPRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\nFOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\nREFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))\nENGINE=InnoDB;\n\nCREATE TABLE QRTZ_CRON_TRIGGERS (\nSCHED_NAME VARCHAR(120) NOT NULL,\nTRIGGER_NAME VARCHAR(190) NOT NULL,\nTRIGGER_GROUP VARCHAR(190) NOT NULL,\nCRON_EXPRESSION VARCHAR(120) NOT NULL,\nTIME_ZONE_ID VARCHAR(80),\nPRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\nFOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\nREFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))\nENGINE=InnoDB;\n\nCREATE TABLE QRTZ_SIMPROP_TRIGGERS\n  (\n    SCHED_NAME VARCHAR(120) NOT NULL,\n    TRIGGER_NAME VARCHAR(190) NOT NULL,\n    TRIGGER_GROUP VARCHAR(190) NOT NULL,\n    STR_PROP_1 VARCHAR(512) NULL,\n    STR_PROP_2 VARCHAR(512) NULL,\n    STR_PROP_3 VARCHAR(512) NULL,\n    INT_PROP_1 INT NULL,\n    INT_PROP_2 INT NULL,\n    LONG_PROP_1 BIGINT NULL,\n    LONG_PROP_2 BIGINT NULL,\n    DEC_PROP_1 NUMERIC(13,4) NULL,\n    DEC_PROP_2 NUMERIC(13,4) NULL,\n    BOOL_PROP_1 VARCHAR(1) NULL,\n    BOOL_PROP_2 VARCHAR(1) NULL,\n    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\n    FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\n    REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))\nENGINE=InnoDB;\n\nCREATE TABLE QRTZ_BLOB_TRIGGERS (\nSCHED_NAME VARCHAR(120) NOT NULL,\nTRIGGER_NAME VARCHAR(190) NOT NULL,\nTRIGGER_GROUP VARCHAR(190) NOT NULL,\nBLOB_DATA BLOB NULL,\nPRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\nINDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP),\nFOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\nREFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))\nENGINE=InnoDB;\n\nCREATE TABLE QRTZ_CALENDARS (\nSCHED_NAME VARCHAR(120) NOT NULL,\nCALENDAR_NAME VARCHAR(190) NOT NULL,\nCALENDAR BLOB NOT NULL,\nPRIMARY KEY (SCHED_NAME,CALENDAR_NAME))\nENGINE=InnoDB;\n\nCREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (\nSCHED_NAME VARCHAR(120) NOT NULL,\nTRIGGER_GROUP VARCHAR(190) NOT NULL,\nPRIMARY KEY (SCHED_NAME,TRIGGER_GROUP))\nENGINE=InnoDB;\n\nCREATE TABLE QRTZ_FIRED_TRIGGERS (\nSCHED_NAME VARCHAR(120) NOT NULL,\nENTRY_ID VARCHAR(95) NOT NULL,\nTRIGGER_NAME VARCHAR(190) NOT NULL,\nTRIGGER_GROUP VARCHAR(190) NOT NULL,\nINSTANCE_NAME VARCHAR(190) NOT NULL,\nFIRED_TIME BIGINT(13) NOT NULL,\nSCHED_TIME BIGINT(13) NOT NULL,\nPRIORITY INTEGER NOT NULL,\nSTATE VARCHAR(16) NOT NULL,\nJOB_NAME VARCHAR(190) NULL,\nJOB_GROUP VARCHAR(190) NULL,\nIS_NONCONCURRENT VARCHAR(1) NULL,\nREQUESTS_RECOVERY VARCHAR(1) NULL,\nPRIMARY KEY (SCHED_NAME,ENTRY_ID))\nENGINE=InnoDB;\n\nCREATE TABLE QRTZ_SCHEDULER_STATE (\nSCHED_NAME VARCHAR(120) NOT NULL,\nINSTANCE_NAME VARCHAR(190) NOT NULL,\nLAST_CHECKIN_TIME BIGINT(13) NOT NULL,\nCHECKIN_INTERVAL BIGINT(13) NOT NULL,\nPRIMARY KEY (SCHED_NAME,INSTANCE_NAME))\nENGINE=InnoDB;\n\nCREATE TABLE QRTZ_LOCKS (\nSCHED_NAME VARCHAR(120) NOT NULL,\nLOCK_NAME VARCHAR(40) NOT NULL,\nPRIMARY KEY (SCHED_NAME,LOCK_NAME))\nENGINE=InnoDB;\n\nCREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY);\nCREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP);\n\nCREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);\nCREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP);\nCREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME);\nCREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);\nCREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE);\nCREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);\nCREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);\nCREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME);\nCREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);\nCREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);\nCREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);\nCREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);\n\nCREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME);\nCREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);\nCREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);\nCREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP);\nCREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);\nCREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);\n\ncommit;\n"
  },
  {
    "path": "db/oracle/install_oracle_11g_r2.sh",
    "content": "#!/usr/bin/env bash\n\n# CentOS 7 自动化安装 oracle 11g r2\n\n# 安装一些必要的软件\n# wget         下载用的\n# unzip        解压oracle安装文件\n# net-tools    查看本机网络情况 比如netstat\nyum install wget unzip net-tools -y\n\n# 使用oracle提供的环境配置工具\n# 这个工具会调整内核参数，建立一些必要的linux用户&组\n# 可能网络不好会安装不成功，多install一下\nwget http://public-yum.oracle.com/public-yum-ol7.repo -O /etc/yum.repos.d/public-yum-ol7.repo\nwget http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol7 -O /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle\n\nyum install oracle-rdbms-server-11gR2-preinstall -y\n\n# 完成后备份一下这个目录的文件到其他目录\n# 这个文件夹是修改系统后日志和原本的内核配置备份\n# /var/log/oracle-rdbms-server-11gR2-preinstall\n\n# 加载内核参数 和sysctl -p一样\nsysctl -f\n\n# 创建一些目录和配置\n# 配置oracle系统配置文件&授权\ncat >> /etc/oraInst.loc <<EOF\ninventory_loc=/home/oracle/ora11g/oraInventory\ninst_group=oinstall\nEOF\nchmod 664 /etc/oraInst.loc\n\n# 创建oracle安装的目录&授权\nmkdir -p /u01/app/\nmkdir /u01/tmp\nchown -R oracle:oinstall /u01/app/\nchmod -R 775 /u01/app/\nchmod a+wr /u01/tmp\n\n# 设置oracle用户密码 oracle是安装工具自己创建的,参考我之前讲的\npasswd oracle\n\n# 为oracle用户添加一些必要的环境\ncat >> /home/oracle/.bash_profile <<EOF\nTMP=/u01/tmp\nTMPDIR=/u01/tmp\nexport TMP TMPDIR\n\nORACLE_BASE=/u01/app/oracle\nORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1\nORACLE_SID=orcl\nPATH=$ORACLE_HOME/bin:$PATH\nexport ORACLE_BASE ORACLE_SID ORACLE_HOME PATH\nEOF\n# 生效\nsource .bash_profile\n\n# linux.x64_11gR2_database_2of2.zip\n# linux.x64_11gR2_database_1of2.zip 上传至/home/oracle/\n\n# 解压 解压后文件会在/home/oracle/database/\nunzip linux.x64_11gR2_database_1of2.zip\nunzip linux.x64_11gR2_database_2of2.zip\n\n# 由于某些原因文件权限问题 运行这个命令(选)\nchown -R oracle:oinstall /home/oracle/database\n\n# 备份到/home/oracle/rsp/\ncp -r /home/oracle/database/response /home/oracle/rsp\n\n\n# 配置安装响应文件db_install.rsp文件 这里配置参数先下载到本地 用记事本根据自己情况修改 在上传过去\n# 我的/home/oracle/rsp/db_install.rsp\noracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0\n# INSTALL_DB_AND_CONFIG安装并自动配置数据库实例和监听 建议首次安装用这个\n# 不然配置另外两个文件，新建实例和监听\noracle.install.option=INSTALL_DB_AND_CONFIG\nORACLE_HOSTNAME=localhost\nUNIX_GROUP_NAME=oinstall\nINVENTORY_LOCATION=/home/oracle/ora11g/oraInventory\nSELECTED_LANGUAGES=zh_CN,en\nORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1\nORACLE_BASE=/u01/app/oracle\noracle.install.db.InstallEdition=EE\noracle.install.db.isCustomInstall=true\noracle.install.db.customComponents=oracle.server:11.2.0.1.0,oracle.sysman.ccr:10.2.7.0.0,oracle.xdk:11.2.0.1.0,oracle.rdbms.oci:11.2.0.1.0,oracle.network:11.2.0.1.0,oracle.network.listener:11.2.0.1.0,oracle.rdbms:11.2.0.1.0,oracle.options:11.2.0.1.0,oracle.rdbms.partitioning:11.2.0.1.0,oracle.oraolap:11.2.0.1.0,oracle.rdbms.dm:11.2.0.1.0,oracle.rdbms.dv:11.2.0.1.0,orcle.rdbms.lbac:11.2.0.1.0,oracle.rdbms.rat:11.2.0.1.0\noracle.install.db.DBA_GROUP=dba\noracle.install.db.OPER_GROUP=oinstall\noracle.install.db.config.starterdb.type=GENERAL_PURPOSE\n# 这个是服务名\noracle.install.db.config.starterdb.globalDBName=orcl.lan\n# 实例sid\noracle.install.db.config.starterdb.SID=orcl\noracle.install.db.config.starterdb.characterSet=AL32UTF8\noracle.install.db.config.starterdb.memoryOption=true\n# 最小256M 我是学习就选择最小了\noracle.install.db.config.starterdb.memoryLimit=256\n# 是否安装学习的scott和hr(我就知道这两个)\noracle.install.db.config.starterdb.installExampleSchemas=false\noracle.install.db.config.starterdb.enableSecuritySettings=true\n# 密码全设置成oracle (安装时会提示，个人学习忽略)\noracle.install.db.config.starterdb.password.ALL=oracle\noracle.install.db.config.starterdb.control=DB_CONTROL\noracle.install.db.config.starterdb.dbcontrol.enableEmailNotification=false\noracle.install.db.config.starterdb.automatedBackup.enable=false\noracle.install.db.config.starterdb.storageType=FILE_SYSTEM_STORAGE\noracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/u01/app/oracle/oradata\n# true\nDECLINE_SECURITY_UPDATES=true\n# 修改完成保存|上传到/home/oracle/rsp\n\n\n# 安装\n# 会出现密码不规范的警告，忽略\n/home/oracle/database/runInstaller -silent -ignorePrereq  -responseFile /home/oracle/rsp/db_install.rsp\n\n# 查看安装过程 另开一个shell 稍等\ntail -f  /home/oracle/ora11g/oraInventory/logs/installActions2017-09-24_12-26-49PM.log\n\n\n# sqlplus 登录\nsqlplus / as sysdba\n\n# 查看状态\nselect status from v$instance;\n\n# 查看1521端口\nnetstat -an|grep 1521\n\n# 防火墙 放行1521端口\nfirewall-cmd --zone=public --add-port=1521/tcp --permanent\n# 重新加载防火墙规则\nfirewall-cmd --reload\n\n# 修改oracle服务启动配置\n\nvi /etc/oratab\n# orcl:/u01/app/oracle/product/11.2.0/dbhome_1:Y\n# :wq保存\n\n\n[oracle]\n# 启动oracle\n# 因为修改了/etc/oratab  N->y 所以启动服务也会同时启动实例\n# N的情况不会同时启动实例 sqlplus登录会提示 an idle instance\n# 用sqlplus 然后---> startup启动实例\n# 重启系统后用这个命令启动\ndbstart $ORACLE_HOME\n# 关闭\ndbshut $ORACLE_HOME\n\n# 远程连接oracle\n\nsqlplus sys/oracle@192.168.100.131:1521/ORCL.LAN as sysdba\nconn sys/oracle@192.168.100.131:1521/ORCL.LAN as sysdba\nORCL.LAN是服务名 不是sid"
  },
  {
    "path": "db/oracle/quartz/tables_oracle.sql",
    "content": "--\n-- A hint submitted by a user: Oracle DB MUST be created as \"shared\" and the \n-- job_queue_processes parameter  must be greater than 2\n-- However, these settings are pretty much standard after any\n-- Oracle install, so most users need not worry about this.\n--\n-- Many other users (including the primary author of Quartz) have had success\n-- runing in dedicated mode, so only consider the above as a hint ;-)\n--\n\ndelete from qrtz_fired_triggers;\ndelete from qrtz_simple_triggers;\ndelete from qrtz_simprop_triggers;\ndelete from qrtz_cron_triggers;\ndelete from qrtz_blob_triggers;\ndelete from qrtz_triggers;\ndelete from qrtz_job_details;\ndelete from qrtz_calendars;\ndelete from qrtz_paused_trigger_grps;\ndelete from qrtz_locks;\ndelete from qrtz_scheduler_state;\n\ndrop table qrtz_calendars;\ndrop table qrtz_fired_triggers;\ndrop table qrtz_blob_triggers;\ndrop table qrtz_cron_triggers;\ndrop table qrtz_simple_triggers;\ndrop table qrtz_simprop_triggers;\ndrop table qrtz_triggers;\ndrop table qrtz_job_details;\ndrop table qrtz_paused_trigger_grps;\ndrop table qrtz_locks;\ndrop table qrtz_scheduler_state;\n\n\nCREATE TABLE qrtz_job_details\n  (\n    SCHED_NAME VARCHAR2(120) NOT NULL,\n    JOB_NAME  VARCHAR2(200) NOT NULL,\n    JOB_GROUP VARCHAR2(200) NOT NULL,\n    DESCRIPTION VARCHAR2(250) NULL,\n    JOB_CLASS_NAME   VARCHAR2(250) NOT NULL, \n    IS_DURABLE VARCHAR2(1) NOT NULL,\n    IS_NONCONCURRENT VARCHAR2(1) NOT NULL,\n    IS_UPDATE_DATA VARCHAR2(1) NOT NULL,\n    REQUESTS_RECOVERY VARCHAR2(1) NOT NULL,\n    JOB_DATA BLOB NULL,\n    CONSTRAINT QRTZ_JOB_DETAILS_PK PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)\n);\nCREATE TABLE qrtz_triggers\n  (\n    SCHED_NAME VARCHAR2(120) NOT NULL,\n    TRIGGER_NAME VARCHAR2(200) NOT NULL,\n    TRIGGER_GROUP VARCHAR2(200) NOT NULL,\n    JOB_NAME  VARCHAR2(200) NOT NULL, \n    JOB_GROUP VARCHAR2(200) NOT NULL,\n    DESCRIPTION VARCHAR2(250) NULL,\n    NEXT_FIRE_TIME NUMBER(13) NULL,\n    PREV_FIRE_TIME NUMBER(13) NULL,\n    PRIORITY NUMBER(13) NULL,\n    TRIGGER_STATE VARCHAR2(16) NOT NULL,\n    TRIGGER_TYPE VARCHAR2(8) NOT NULL,\n    START_TIME NUMBER(13) NOT NULL,\n    END_TIME NUMBER(13) NULL,\n    CALENDAR_NAME VARCHAR2(200) NULL,\n    MISFIRE_INSTR NUMBER(2) NULL,\n    JOB_DATA BLOB NULL,\n    CONSTRAINT QRTZ_TRIGGERS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\n    CONSTRAINT QRTZ_TRIGGER_TO_JOBS_FK FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) \n      REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP) \n);\nCREATE TABLE qrtz_simple_triggers\n  (\n    SCHED_NAME VARCHAR2(120) NOT NULL,\n    TRIGGER_NAME VARCHAR2(200) NOT NULL,\n    TRIGGER_GROUP VARCHAR2(200) NOT NULL,\n    REPEAT_COUNT NUMBER(7) NOT NULL,\n    REPEAT_INTERVAL NUMBER(12) NOT NULL,\n    TIMES_TRIGGERED NUMBER(10) NOT NULL,\n    CONSTRAINT QRTZ_SIMPLE_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\n    CONSTRAINT QRTZ_SIMPLE_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) \n\tREFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\n);\nCREATE TABLE qrtz_cron_triggers\n  (\n    SCHED_NAME VARCHAR2(120) NOT NULL,\n    TRIGGER_NAME VARCHAR2(200) NOT NULL,\n    TRIGGER_GROUP VARCHAR2(200) NOT NULL,\n    CRON_EXPRESSION VARCHAR2(120) NOT NULL,\n    TIME_ZONE_ID VARCHAR2(80),\n    CONSTRAINT QRTZ_CRON_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\n    CONSTRAINT QRTZ_CRON_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) \n      REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\n);\nCREATE TABLE qrtz_simprop_triggers\n  (          \n    SCHED_NAME VARCHAR2(120) NOT NULL,\n    TRIGGER_NAME VARCHAR2(200) NOT NULL,\n    TRIGGER_GROUP VARCHAR2(200) NOT NULL,\n    STR_PROP_1 VARCHAR2(512) NULL,\n    STR_PROP_2 VARCHAR2(512) NULL,\n    STR_PROP_3 VARCHAR2(512) NULL,\n    INT_PROP_1 NUMBER(10) NULL,\n    INT_PROP_2 NUMBER(10) NULL,\n    LONG_PROP_1 NUMBER(13) NULL,\n    LONG_PROP_2 NUMBER(13) NULL,\n    DEC_PROP_1 NUMERIC(13,4) NULL,\n    DEC_PROP_2 NUMERIC(13,4) NULL,\n    BOOL_PROP_1 VARCHAR2(1) NULL,\n    BOOL_PROP_2 VARCHAR2(1) NULL,\n    CONSTRAINT QRTZ_SIMPROP_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\n    CONSTRAINT QRTZ_SIMPROP_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) \n      REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\n);\nCREATE TABLE qrtz_blob_triggers\n  (\n    SCHED_NAME VARCHAR2(120) NOT NULL,\n    TRIGGER_NAME VARCHAR2(200) NOT NULL,\n    TRIGGER_GROUP VARCHAR2(200) NOT NULL,\n    BLOB_DATA BLOB NULL,\n    CONSTRAINT QRTZ_BLOB_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\n    CONSTRAINT QRTZ_BLOB_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) \n        REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\n);\nCREATE TABLE qrtz_calendars\n  (\n    SCHED_NAME VARCHAR2(120) NOT NULL,\n    CALENDAR_NAME  VARCHAR2(200) NOT NULL, \n    CALENDAR BLOB NOT NULL,\n    CONSTRAINT QRTZ_CALENDARS_PK PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)\n);\nCREATE TABLE qrtz_paused_trigger_grps\n  (\n    SCHED_NAME VARCHAR2(120) NOT NULL,\n    TRIGGER_GROUP  VARCHAR2(200) NOT NULL, \n    CONSTRAINT QRTZ_PAUSED_TRIG_GRPS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)\n);\nCREATE TABLE qrtz_fired_triggers \n  (\n    SCHED_NAME VARCHAR2(120) NOT NULL,\n    ENTRY_ID VARCHAR2(95) NOT NULL,\n    TRIGGER_NAME VARCHAR2(200) NOT NULL,\n    TRIGGER_GROUP VARCHAR2(200) NOT NULL,\n    INSTANCE_NAME VARCHAR2(200) NOT NULL,\n    FIRED_TIME NUMBER(13) NOT NULL,\n    SCHED_TIME NUMBER(13) NOT NULL,\n    PRIORITY NUMBER(13) NOT NULL,\n    STATE VARCHAR2(16) NOT NULL,\n    JOB_NAME VARCHAR2(200) NULL,\n    JOB_GROUP VARCHAR2(200) NULL,\n    IS_NONCONCURRENT VARCHAR2(1) NULL,\n    REQUESTS_RECOVERY VARCHAR2(1) NULL,\n    CONSTRAINT QRTZ_FIRED_TRIGGER_PK PRIMARY KEY (SCHED_NAME,ENTRY_ID)\n);\nCREATE TABLE qrtz_scheduler_state \n  (\n    SCHED_NAME VARCHAR2(120) NOT NULL,\n    INSTANCE_NAME VARCHAR2(200) NOT NULL,\n    LAST_CHECKIN_TIME NUMBER(13) NOT NULL,\n    CHECKIN_INTERVAL NUMBER(13) NOT NULL,\n    CONSTRAINT QRTZ_SCHEDULER_STATE_PK PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)\n);\nCREATE TABLE qrtz_locks\n  (\n    SCHED_NAME VARCHAR2(120) NOT NULL,\n    LOCK_NAME  VARCHAR2(40) NOT NULL, \n    CONSTRAINT QRTZ_LOCKS_PK PRIMARY KEY (SCHED_NAME,LOCK_NAME)\n);\n\ncreate index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY);\ncreate index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP);\n\ncreate index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);\ncreate index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP);\ncreate index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME);\ncreate index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP);\ncreate index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE);\ncreate index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);\ncreate index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);\ncreate index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME);\ncreate index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);\ncreate index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);\ncreate index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);\ncreate index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);\n\ncreate index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME);\ncreate index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);\ncreate index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);\ncreate index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP);\ncreate index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);\ncreate index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP);\n\n\n"
  },
  {
    "path": "docs/cron.md",
    "content": "## Cron 表达式详解\n\nCron表达式是一个字符串，字符串以5或6个空格隔开，分为6或7个域，每一个域代表一个含义，Cron有如下两种语法格式：\n\nSeconds Minutes Hours DayofMonth Month DayofWeek Year或\nSeconds Minutes Hours DayofMonth Month DayofWeek\n\n每一个域可出现的字符如下：\nSeconds:可出现\", - * /\"四个字符，有效范围为0-59的整数\nMinutes:可出现\", - * /\"四个字符，有效范围为0-59的整数\nHours:可出现\", - * /\"四个字符，有效范围为0-23的整数\nDayofMonth:可出现\", - * / ? L W C\"八个字符，有效范围为0-31的整数\nMonth:可出现\", - * /\"四个字符，有效范围为1-12的整数或JAN-DEC\nDayofWeek:可出现\", - * / ? L C #\"四个字符，有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天，2表示星期一， 依次类推\nYear:可出现\", - * /\"四个字符，有效范围为1970-2099年\n\n每一个域都使用数字，但还可以出现如下特殊字符，它们的含义是：\n(1)*：表示匹配该域的任意值，假如在Minutes域使用*, 即表示每分钟都会触发事件。\n\n(2)?:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值，但实际不会。因为DayofMonth和DayofWeek会相互影响。例如想在每月的20日触发调度，不管20日到底是星期几，则只能使用如下写法： 13 13 15 20 * ?, 其中最后一位只能用？，而不能使用*，如果使用*表示不管星期几都会触发，实际上并不是这样。\n\n(3)-:表示范围，例如在Minutes域使用5-20，表示从5分到20分钟每分钟触发一次\n\n(4)/：表示起始时间开始触发，然后每隔固定时间触发一次，例如在Minutes域使用5/20,则意味着5分钟触发一次，而25，45等分别触发一次.\n\n(5),:表示列出枚举值值。例如：在Minutes域使用5,20，则意味着在5和20分每分钟触发一次。\n\n(6)L:表示最后，只能出现在DayofWeek和DayofMonth域，如果在DayofWeek域使用5L,意味着在最后的一个星期四触发。\n\n(7)W:表示有效工作日(周一到周五),只能出现在DayofMonth域，系统将在离指定日期的最近的有效工作日触发事件。例如：在 DayofMonth使用5W，如果5日是星期六，则将在最近的工作日：星期五，即4日触发。如果5日是星期天，则在6日(周一)触发；如果5日在星期一到星期五中的一天，则就在5日触发。另外一点，W的最近寻找不会跨过月份\n\n(8)LW:这两个字符可以连用，表示在某个月最后一个工作日，即最后一个星期五。\n\n(9)#:用于确定每个月第几个星期几，只能出现在DayofMonth域。例如在4#2，表示某月的第二个星期三。\n\n举几个例子:\n0 0 2 1 * ? * 表示在每月的1日的凌晨2点调度任务\n0 15 10 ? * MON-FRI 表示周一到周五每天上午10：15执行作业\n0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作\n\n\n一个cron表达式有至少6个（也可能7个）有空格分隔的时间元素。\n按顺序依次为\n秒（0~59）\n分钟（0~59）\n小时（0~23）\n天（月）（0~31，但是你需要考虑你月的天数）\n月（0~11）\n天（星期）（1~7 1=SUN 或 SUN，MON，TUE，WED，THU，FRI，SAT）\n年份（1970－2099）\n\n其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于\"月份中的日期\"和\"星期中的日期\"这两个元素互斥的,必须要对其中一个设置?\n\n0 0 10,14,16 * * ? 每天上午10点，下午2点，4点\n0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时\n0 0 12 ? * WED 表示每个星期三中午12点\n\"0 0 12 * * ?\" 每天中午12点触发\n\"0 15 10 ? * *\" 每天上午10:15触发\n\"0 15 10 * * ?\" 每天上午10:15触发\n\"0 15 10 * * ? *\" 每天上午10:15触发\n\"0 15 10 * * ? 2005\" 2005年的每天上午10:15触发\n\"0 * 14 * * ?\" 在每天下午2点到下午2:59期间的每1分钟触发\n\"0 0/5 14 * * ?\" 在每天下午2点到下午2:55期间的每5分钟触发\n\"0 0/5 14,18 * * ?\" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发\n\"0 0-5 14 * * ?\" 在每天下午2点到下午2:05期间的每1分钟触发\n\"0 10,44 14 ? 3 WED\" 每年三月的星期三的下午2:10和2:44触发\n\"0 15 10 ? * MON-FRI\" 周一至周五的上午10:15触发\n\"0 15 10 15 * ?\" 每月15日上午10:15触发\n\"0 15 10 L * ?\" 每月最后一日的上午10:15触发\n\"0 15 10 ? * 6L\" 每月的最后一个星期五上午10:15触发\n\"0 15 10 ? * 6L 2002-2005\" 2002年至2005年的每月的最后一个星期五上午10:15触发\n\"0 15 10 ? * 6#3\" 每月的第三个星期五上午10:15触发\n\n\n有些子表达式能包含一些范围或列表\n\n例如：子表达式（天（星期））可以为 “MON-FRI”，“MON，WED，FRI”，“MON-WED,SAT”\n\n“*”字符代表所有可能的值\n\n因此，“*”在子表达式（月）里表示每个月的含义，“*”在子表达式（天（星期））表示星期的每一天\n\n\n“/”字符用来指定数值的增量\n例如：在子表达式（分钟）里的“0/15”表示从第0分钟开始，每15分钟\n在子表达式（分钟）里的“3/20”表示从第3分钟开始，每20分钟（它和“3，23，43”）的含义一样\n\n\n“？”字符仅被用于天（月）和天（星期）两个子表达式，表示不指定值\n当2个子表达式其中之一被指定了值以后，为了避免冲突，需要将另一个子表达式的值设为“？”\n\n“L” 字符仅被用于天（月）和天（星期）两个子表达式，它是单词“last”的缩写\n但是它在两个子表达式里的含义是不同的。\n在天（月）子表达式中，“L”表示一个月的最后一天\n在天（星期）自表达式中，“L”表示一个星期的最后一天，也就是SAT\n\n如果在“L”前有具体的内容，它就具有其他的含义了\n\n例如：“6L”表示这个月的倒数第６天，“FRIL”表示这个月的最一个星期五\n注意：在使用“L”参数时，不要指定列表或范围，因为这会导致问题\n\n字段 允许值 允许的特殊字符\n秒 0-59 , - * /\n分 0-59 , - * /\n小时 0-23 , - * /\n日期 1-31 , - * ? / L W C\n月份 1-12 或者 JAN-DEC , - * /\n星期 1-7 或者 SUN-SAT , - * ? / L C #\n年（可选） 留空, 1970-2099 , - * /"
  },
  {
    "path": "docs/getting_started.md",
    "content": "### 项目目录结构\n```\n│\n├── main\n│   │  \n│   ├── java\n│   │   │\n│   │   └── com.godcheese ----------------- 项目主类包\n│   │       │\n│   │       ├── nimrod ---------------- Nimrod 核心模块存放目录\n│   │       │   │  \n│   │       │   ├─ common ------------- 项目公用部分\n│   │       │   │\n│   │       │   ├─ mail --------------- 电子邮箱模块\n│   │       │   │\n│   │       │   ├─ quartz ------------- Quartz 定时任务模块\n│   │       │   │\n│   │       │   ├─ system ------------- 系统模块\n│   │       │   │\n│   │       │   ├─ user --------------- 用户模块\n│   │       │   │  \n│   │\n│   ├── resources ------------------------------- 项目资源目录\n│   │   │ \n│   │   ├─ fonts ------------------------------- 字体存放目录\n│   │   │ \n│   │   ├─ static ------------------------------ js/css/png 等静态文件存放目录\n│   │   │ \n│   │   ├─ templates --------------------------- Web 模板\n│   │   │ \n│   │   ├─ application.properties -------------- 项目环境配置文件\n│   │   │ \n│   │   ├─ application-dev.properties ---------- 项目 dev 环境配置文件\n│   │   │ \n│   │   ├─ application-prod.properties --------- 项目 prod 环境配置文件\n│   │   │ \n│   │   ├─ banner.txt -------------------------- 项目启动 Banner\n│   │   │ \n│   │   ├─ logback.sql ------------------------- Logback 数据库文件\n│   │   │ \n│   │   ├─ logback-spring.xml ------------------ Logback 配置文件\n│   │   │ \n│   │   ├─ mybatis-config.xml ------------------ MyBatis 配置文件\n│   │   │\n```\n\n### 运行实例\n\n- 一、安装 JDK 8+、MySQL 5.7+\n- 二、导入数据库\n`/db/mysql/nimrod/nimrod.sql`\n- 三、运行 `java -jar nimrod-*.jar`，浏览器打开 `http://localhost:8083/nimrod`\n\n### 开发调试\n\n- 一、安装 JDK 8+、MySQL 5.7+、Maven 3.5+\n- 二、在 Intelli IDEA 中打开项目\n- 三、在 Terminal 中运行 `mvn spring-boot:run`，浏览器打开 `http://localhost:8083/nimrod`\n\n### [环境搭建](https://github.com/godcheese/nimrod/blob/master/docs/java.md)"
  },
  {
    "path": "docs/java.md",
    "content": "### Java 8 Install\n1. 安装。Windows/Linux/macOS 系统下载安装对应的安装包。\n  - [Download](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)\n2. 环境变量配置。\n  - Windows 配置环境变量\n    - 计算机=>属性=>高级系统设置=>高级=>环境变量=>系统变量=>新建变量\n      - 变量名：`JAVA_HOME`，变量值：JDK 路径（如：`C:\\Program Files\\Java\\jdk1.8.0_181`）\n      - 变量名：`CLASSPATH`，变量值：`.;%JAVA_HOME%\\lib;%JAVA_HOME%\\lib\\tools.jar`\n      - 在已有 `Path` 变量的变量值最前增加：`%JAVA_HOME%\\bin;%JAVA_HOME%\\jre\\bin;`\n  - macOS 配置环境变量\n    - `cd ~ && vim .bash_profile`\n    - 输入以下内容，再保存，然后输入 `source .bash_profile` 生效：\n      - `# JDK 路径`\n      - `JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home`\n      - `PATH=$JAVA_HOME/bin:$PATH:.`\n      - `CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.`\n      - `export JAVA_HOME`\n      - `export PATH`\n      - `export CLASSPATH`\n3. 检验安装是否成功。\n### MySQL 5.7 Install\n1. 安装。Windows/Linux/macOS 系统下载安装对应的安装包。\n  - [Download](https://dev.mysql.com/downloads/mysql/5.7.html#downloads) \n### Maven 3.5 Install\n1. 安装。Windows/Linux/macOS 系统下载安装对应的安装包。\n  - [Download](http://maven.apache.org/download.cgi) \n2. 环境变量配置。\n  - Windows 配置环境变量\n    - 计算机=>属性=>高级系统设置=>高级=>环境变量=>系统变量=>新建变量\n      - 变量名：`MAVEN`，变量值：Maven 路径（如：`C:\\apache-maven-3.5.4 2`）\n      - 在已有 `Path` 变量的变量值最前增加：`%MAVEN_HOME%\\bin;`\n  - macOS 配置环境变量\n    - `cd ~ && vim .bash_profile`\n    - 输入以下内容，再保存，然后输入 `source .bash_profile` 生效：\n      - `# Maven 路径`\n      - `export M2_HOME=/Volumes/office/dev/apache-maven-3.5.0`\n      - `export PATH=$PATH:$M2_HOME/bin`"
  },
  {
    "path": "pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <parent>\n        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-parent</artifactId>\n        <version>2.3.1.RELEASE</version>\n        <relativePath/> <!-- lookup parent from repository -->\n    </parent>\n\n    <groupId>com.godcheese</groupId>\n    <artifactId>nimrod</artifactId>\n    <version>0.8.0</version>\n    <packaging>jar</packaging>\n    <name>${project.artifactId}</name>\n    <url>http://www.godcheese.com/</url>\n    <description>Nimrod - 基于 Spring Boot 构建 的 Java Web 平台企业级单体应用快速开发框架，适合中小型项目的应用和开发。</description>\n\n    <properties>\n        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n        <project.reporting.outputEncoding>${project.build.sourceEncoding}</project.reporting.outputEncoding>\n        <java.version>1.8</java.version>\n        <maven.compiler.source>${java.version}</maven.compiler.source>\n        <maven.compiler.target>${java.version}</maven.compiler.target>\n        <finalName>${project.name}-${project.version}</finalName>\n        <resource.delimiter>${}</resource.delimiter>\n        <skipTests>true</skipTests>\n        <libPath>${project.basedir}/lib</libPath>\n    </properties>\n\n    <developers>\n        <developer>\n            <id>godcheese</id>\n            <name>Rakesh Zhang</name>\n            <email>godcheese@outlook.com</email>\n        </developer>\n    </developers>\n\n    <scm>\n        <url>https://github.com/godcheese/nimrod</url>\n        <connection>scm:git:git://github.com/godcheese/nimrod.git</connection>\n        <developerConnection>scm:git@github.com:godcheese/nimrod.git</developerConnection>\n    </scm>\n\n    <issueManagement>\n        <system>GitHub</system>\n        <url>https://github.com/godcheese/nimrod/issues</url>\n    </issueManagement>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-aop</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-security</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-thymeleaf</artifactId>\n        </dependency>\n        <!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity5 -->\n        <dependency>\n            <groupId>org.thymeleaf.extras</groupId>\n            <artifactId>thymeleaf-extras-springsecurity5</artifactId>\n            <version>3.0.4.RELEASE</version>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n        </dependency>\n        <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->\n        <dependency>\n            <groupId>org.mybatis.spring.boot</groupId>\n            <artifactId>mybatis-spring-boot-starter</artifactId>\n            <version>2.1.3</version>\n        </dependency>\n        <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->\n        <dependency>\n            <groupId>com.github.pagehelper</groupId>\n            <artifactId>pagehelper-spring-boot-starter</artifactId>\n            <version>1.2.13</version>\n        </dependency>\n        <dependency>\n            <groupId>mysql</groupId>\n            <artifactId>mysql-connector-java</artifactId>\n            <scope>runtime</scope>\n        </dependency>\n        <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->\n        <dependency>\n            <groupId>com.alibaba</groupId>\n            <artifactId>druid-spring-boot-starter</artifactId>\n            <version>1.1.23</version>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-configuration-processor</artifactId>\n            <optional>true</optional>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-mail</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-activemq</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-quartz</artifactId>\n        </dependency>\n        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->\n        <dependency>\n            <groupId>org.apache.poi</groupId>\n            <artifactId>poi</artifactId>\n            <version>4.1.2</version>\n        </dependency>\n        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->\n        <dependency>\n            <groupId>org.apache.poi</groupId>\n            <artifactId>poi-ooxml</artifactId>\n            <version>4.1.2</version>\n        </dependency>\n        <!-- https://github.com/godcheese/tile -->\n        <dependency>\n            <groupId>com.godcheese</groupId>\n            <artifactId>tile</artifactId>\n            <version>1.0.0</version>\n            <scope>system</scope>\n            <systemPath>${libPath}/tile-1.0.0.jar</systemPath>\n            <type>jar</type>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n            <exclusions>\n                <exclusion>\n                    <groupId>org.junit.vintage</groupId>\n                    <artifactId>junit-vintage-engine</artifactId>\n                </exclusion>\n            </exclusions>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.security</groupId>\n            <artifactId>spring-security-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n    </dependencies>\n    <build>\n        <finalName>${finalName}</finalName>\n        <plugins>\n            <plugin>\n                <groupId>org.springframework.boot</groupId>\n                <artifactId>spring-boot-maven-plugin</artifactId>\n            </plugin>\n        </plugins>\n        <resources>\n            <resource>\n                <directory>${project.basedir}/src/main/resources</directory>\n                <filtering>false</filtering>\n                <includes>\n                    <include>**/*.*</include>\n                </includes>\n                <excludes>\n                    <exclude>**/*.properties</exclude>\n                    <exclude>**/*.yaml</exclude>\n                </excludes>\n            </resource>\n            <resource>\n                <directory>${project.basedir}/src/main/resources</directory>\n                <filtering>true</filtering>\n                <includes>\n                    <include>**/*.properties</include>\n                    <include>**/*.yaml</include>\n                </includes>\n            </resource>\n            <resource>\n                <directory>${project.basedir}/src/main/java</directory>\n                <includes>\n                    <include>**/*.xml</include>\n                </includes>\n            </resource>\n            <resource>\n                <directory>${project.basedir}</directory>\n                <targetPath>${project.build.directory}</targetPath>\n                <includes>\n                    <include>*.md</include>\n                    <include>LICENSE</include>\n                </includes>\n            </resource>\n            <resource>\n                <directory>${project.basedir}/db</directory>\n                <targetPath>${project.build.directory}/db</targetPath>\n                <includes>\n                    <include>db/*.*</include>\n                </includes>\n            </resource>\n            <resource>\n                <directory>${libPath}</directory>\n                <!-- jar 打包引用此属性值 -->\n                <targetPath>BOOT-INF/lib</targetPath>\n                <!-- war 打包引用此属性值 -->\n                <!-- <targetPath>${project.build.directory}/${finalName}/WEB-INF/lib</targetPath> -->\n                <includes>\n                    <include>**/*.jar</include>\n                </includes>\n            </resource>\n        </resources>\n    </build>\n</project>"
  },
  {
    "path": "scripts/git_clear_history_commit.sh.do_not_run",
    "content": "#!/usr/bin/env bash\n\necho \"author godcheese [godcheese@outlook.com]\"\nCURRENT_DIR=$(pwd)\nSCRIPTS_DIR=$(cd \"$(dirname $0)\" || exit; pwd)\ncd \"${SCRIPTS_DIR}\" || exit\ncd ..\necho \"Chceckout new branch...\"\ngit checkout --orphan new_branch\necho \"Add file...\"\ngit add -A\necho -n \"Submit remark...Please input anything(Initial commit):\"\nread REMARK\nif [ ! -n \"$REMARK\" ];then\n    REMARK=\"Initial commit\"\nfi\ngit commit -m \"$REMARK\"\necho \"Delete master branch...\"\ngit branch -D master\necho \"Rename new branch to master...\"\ngit branch -m master\necho \"Force submit code...\"\ngit push -f origin master\necho \"Submit complete,close...\"\ncd \"${CURRENT_DIR}\" || exit"
  },
  {
    "path": "scripts/git_config.sh.do_not_run",
    "content": "#!/usr/bin/env bash\n\necho \"author godcheese [godcheese@outlook.com]\"\ngit config --global user.name \"godcheese\"\ngit config --global user.email \"godcheese@outlook.com\"\nssh-keygen -o -t rsa -b 4096 -C \"godcheese@outlook.com\"\ncat ~/.ssh/id_rsa.pub\n"
  },
  {
    "path": "scripts/gitlabci.build.sh",
    "content": "#!/usr/bin/env bash\n# encoding: utf-8.0\n\n# http://github.com/godcheese/shell_bag\n# author: godcheese [godcheese@outlook.com]\n# description: gitlabci.build.sh\n\necho \"author godcheese [godcheese@outlook.com]\"\ncurl -o install.sh https://raw.githubusercontent.com/godcheese/shell_bag/master/linux/install_jdk.sh && bash install.sh install /webwork/software/jdk https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz jdk1.8.0_202\ncurl -o install.sh https://raw.githubusercontent.com/godcheese/shell_bag/master/linux/install_maven.sh && bash install.sh install /webwork/software/maven https://downloads.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz apache-maven-3.6.3\ncurl -o install.sh https://raw.githubusercontent.com/godcheese/shell_bag/master/linux/install_mysql.sh && bash install.sh install /webwork/software/mysql https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz mysql-5.7.31-linux-glibc2.12-x86_64\nmysql -uroot -p123456 -e \"use mysql;create user 'nimrod'@'%';update user set authentication_string=PASSWORD('123456') where User='nimrod';update user set plugin='mysql_native_password';grant usage on *.* to 'nimrod' require none with max_queries_per_hour 0 max_connections_per_hour 0 max_updates_per_hour 0 max_user_connections 0;create database if not exists nimrod;grant all privileges on nimrod.* to 'nimrod'@'%';flush privileges;\"\nmysql -unimrod -p123456 nimrod < db/mysql/nimrod/nimrod.sql\nmvn -e clean install -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=dev\nmvn -e clean install -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot:run.prifiles=prod"
  },
  {
    "path": "scripts/package.bat",
    "content": "CHCP 65001\n@echo off\necho.author godcheese [godcheese@outlook.com]\nset \"CURRENT_DIR=%~dp0\"\ncd %CURRENT_DIR%\ncd ..\ncall mvnw clean package -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=prod\ncd %CURRENT_DIR%"
  },
  {
    "path": "scripts/package.sh",
    "content": "#!/usr/bin/env bash\n\necho \"author godcheese [godcheese@outlook.com]\"\nCURRENT_DIR=$(pwd)\nSCRIPTS_DIR=$(cd \"$(dirname $0)\" || exit; pwd)\ncd \"${SCRIPTS_DIR}\" || exit\ncd ..\n./mvnw clean package -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=prod\ncd \"${CURRENT_DIR}\" || exit"
  },
  {
    "path": "scripts/run_dev.bat",
    "content": "CHCP 65001\n@echo off\necho.author godcheese [godcheese@outlook.com]\nset \"CURRENT_DIR=%~dp0\"\ncd %CURRENT_DIR%\ncd ..\ncall mvnw spring-boot:run -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=dev\ncd %CURRENT_DIR%"
  },
  {
    "path": "scripts/run_dev.sh",
    "content": "#!/usr/bin/env bash\n\necho \"author godcheese [godcheese@outlook.com]\"\nCURRENT_DIR=$(pwd)\nSCRIPTS_DIR=$(cd \"$(dirname $0)\" || exit; pwd)\ncd \"${SCRIPTS_DIR}\" || exit\ncd ..\n./mvnw spring-boot:run -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=dev\ncd \"${CURRENT_DIR}\" || exit"
  },
  {
    "path": "scripts/run_prod.bat",
    "content": "CHCP 65001\n@echo off\necho.author godcheese [godcheese@outlook.com]\nset \"CURRENT_DIR=%~dp0\"\ncd %CURRENT_DIR%\ncd ..\ncall mvnw spring-boot:run -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=prod\ncd %CURRENT_DIR%"
  },
  {
    "path": "scripts/run_prod.sh",
    "content": "#!/usr/bin/env bash\n\necho \"author godcheese [godcheese@outlook.com]\"\nCURRENT_DIR=$(pwd)\nSCRIPTS_DIR=$(cd \"$(dirname $0)\" || exit; pwd)\ncd \"${SCRIPTS_DIR}\" || exit\ncd ..\n./mvnw spring-boot:run -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=prod\ncd \"${CURRENT_DIR}\" || exit"
  },
  {
    "path": "scripts/travisci.build.sh",
    "content": "#!/usr/bin/env bash\n# encoding: utf-8.0\n\n# http://github.com/godcheese/shell_bag\n# author: godcheese [godcheese@outlook.com]\n# description: travisci.build.sh\n\necho \"author godcheese [godcheese@outlook.com]\"\nsudo curl -o install.sh https://raw.githubusercontent.com/godcheese/shell_bag/master/linux/install_jdk.sh && sudo bash install.sh install /webwork/software/jdk https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz jdk1.8.0_202\nsudo curl -o install.sh https://raw.githubusercontent.com/godcheese/shell_bag/master/linux/install_maven.sh && sudo bash install.sh install /webwork/software/maven https://downloads.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz apache-maven-3.6.3\nsudo curl -o install.sh https://raw.githubusercontent.com/godcheese/shell_bag/master/linux/install_mysql.sh && sudo bash install.sh install /webwork/software/mysql https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz mysql-5.7.31-linux-glibc2.12-x86_64\nsudo mysql -uroot -p123456 -e \"use mysql;create user 'nimrod'@'%';update user set authentication_string=PASSWORD('123456') where User='nimrod';update user set plugin='mysql_native_password';grant usage on *.* to 'nimrod' require none with max_queries_per_hour 0 max_connections_per_hour 0 max_updates_per_hour 0 max_user_connections 0;create database if not exists nimrod;grant all privileges on nimrod.* to 'nimrod'@'%';flush privileges;\"\nsudo mysql -unimrod -p123456 nimrod < db/mysql/nimrod/nimrod.sql\nsudo mvn -e clean install -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=dev\nsudo mvn -e clean install -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot:run.prifiles=prod"
  },
  {
    "path": "src/main/java/com/godcheese/NimrodApplication.java",
    "content": "package com.godcheese;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.boot.Banner;\nimport org.springframework.boot.CommandLineRunner;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.boot.builder.SpringApplicationBuilder;\nimport org.springframework.boot.web.servlet.support.SpringBootServletInitializer;\nimport org.springframework.context.ConfigurableApplicationContext;\nimport org.springframework.core.annotation.Order;\nimport org.springframework.scheduling.annotation.EnableAsync;\nimport org.springframework.stereotype.Component;\nimport org.springframework.web.context.WebApplicationContext;\n\n/**\n * Nimrod 启动类\n *\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@EnableAsync\n@SpringBootApplication\npublic class NimrodApplication extends SpringBootServletInitializer {\n\n    private static final String NIMROD_VERSION = \"0.8.0\";\n    private static final String NIMROD_URL = \"https://github.com/godcheese/nimrod\";\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(NimrodApplication.class);\n\n    public static void main(String[] args) {\n        SpringApplication application = new SpringApplication(NimrodApplication.class);\n        application.setBannerMode(Banner.Mode.OFF);\n        ConfigurableApplicationContext configurableApplicationContext = application.run(args);\n        bootstrap((WebApplicationContext) configurableApplicationContext);\n    }\n\n    private static void bootstrap(WebApplicationContext webApplicationContext) {\n        // @formatter:off\n        String banner =\n                \"  .__   __.  __  .___  ___. .______        ______    _______  \\n\" +\n                        \"  |  \\\\ |  | |  | |   \\\\/   | |   _  \\\\      /  __  \\\\  |       \\\\ \\n\" +\n                        \"  |   \\\\|  | |  | |  \\\\  /  | |  |_)  |    |  |  |  | |  .--.  |\\n\" +\n                        \"  |  . `  | |  | |  |\\\\/|  | |      /     |  |  |  | |  |  |  |\\n\" +\n                        \"  |  |\\\\   | |  | |  |  |  | |  |\\\\  \\\\----.|  `--'  | |  '--'  |\\n\" +\n                        \"  |__| \\\\__| |__| |__|  |__| | _| `._____| \\\\______/  |_______/ \";\n\n        String nimrod =\n                \"\\n  -------------------------------------------------\" +\n                        \"\\n  | Nimrod version: \" + NIMROD_VERSION + \"                         |\" +\n                        \"\\n  | Homepage: \" + NIMROD_URL + \" |\" +\n                        \"\\n  -------------------------------------------------\";\n\n        Common.getHost(webApplicationContext);\n        String scheme = Common.Host.scheme;\n        String port = Common.Host.port;\n        String contextPath = Common.Host.contextPath;\n        String ip = Common.Host.ip;\n        String local = scheme + \"://localhost\" + \":\" + port + contextPath + \"/\";\n        String network = scheme + \"://\" + ip + \":\" + port + contextPath + \"/\";\n        if (ip == null) {\n            network = \"unavailable\";\n        }\n        String appRunningAt =\n                \"\\n  App running at:\" +\n                        \"\\n  - Server:  \" + Common.Host.serverInfo +\n                        \"\\n  - Local:   \" + local +\n                        \"\\n  - Network: \" + network;\n        // @formatter:on\n        LOGGER.info(\"\\n\\n\" + banner + \"\\n\" + nimrod + \"\\n\" + appRunningAt + \"\\n\");\n    }\n\n    @Override\n    protected WebApplicationContext run(SpringApplication application) {\n        application.setBannerMode(Banner.Mode.OFF);\n        WebApplicationContext webApplicationContext = super.run(application);\n        bootstrap(webApplicationContext);\n        return webApplicationContext;\n    }\n\n    @Override\n    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {\n        return application.sources(NimrodApplication.class);\n    }\n\n    @Order\n    @Component\n    public static class ApplicationStartupRunner implements CommandLineRunner {\n        @Autowired\n        private Common common;\n\n        @Override\n        public void run(String... strings) {\n            common.initialize();\n        }\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/example/Example.java",
    "content": "package com.godcheese.example;\n\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-01-18\n */\npublic class Example {\n\n    public static class Page {\n        public static final String EXAMPLE = \"/example\";\n    }\n\n    public static class Api {\n        public static final String EXAMPLE = com.godcheese.nimrod.common.Url.API + Example.Page.EXAMPLE;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/example/api/ExampleRestController.java",
    "content": "package com.godcheese.example.api;\n\nimport com.godcheese.example.Example;\nimport com.godcheese.example.service.ExampleService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(Example.Api.EXAMPLE)\npublic class ExampleRestController {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(ExampleRestController.class);\n\n    private static final String EXAMPLE = \"/EXAMPLE\";\n\n    @Autowired\n    private ExampleService exampleService;\n\n    @RequestMapping(\"/test\")\n    public String test() {\n        return \"test\";\n    }\n}"
  },
  {
    "path": "src/main/java/com/godcheese/example/controller/ExampleController.java",
    "content": "package com.godcheese.example.controller;\n\nimport com.godcheese.example.Example;\nimport com.godcheese.nimrod.common.others.Common;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(Example.Page.EXAMPLE)\npublic class ExampleController {\n\n    /**\n     * 测试页面\n     *\n     * @return String\n     */\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/test\")\n    public String pageAll() {\n        return Common.trimSlash(Example.Page.EXAMPLE + \"/test\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/example/entity/ExampleEntity.java",
    "content": "package com.godcheese.example.entity;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class ExampleEntity implements Serializable {\n\n    private static final long serialVersionUID = 5619353235596663560L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 名\n     */\n    private String name;\n\n    /**\n     * 排序\n     */\n    private Long sort;\n\n    /**\n     * 备注\n     */\n    private String remark;\n\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public Long getSort() {\n        return sort;\n    }\n\n    public void setSort(Long sort) {\n        this.sort = sort;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/example/mapper/ExampleMapper.java",
    "content": "package com.godcheese.example.mapper;\n\nimport com.godcheese.example.entity.ExampleEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.springframework.stereotype.Component;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"exampleMapper\")\n@Mapper\npublic interface ExampleMapper extends CrudMapper<ExampleEntity, Long> {\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/example/mapper/ExampleMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.example.mapper.ExampleMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.example.entity.ExampleEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"name\" property=\"name\" jdbcType=\"VARCHAR\"/> <!-- 名 -->\n        <result column=\"sort\" property=\"sort\" jdbcType=\"BIGINT\"/> <!-- 排序 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `example`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `name`, `sort`, `remark`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        SELECT\n        <include refid=\"BaseColumnList\"/>\n        FROM\n        <include refid=\"TableName\"/>\n        WHERE `id` = #{id} LIMIT 1\n    </select>\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/example/service/ExampleService.java",
    "content": "package com.godcheese.example.service;\n\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface ExampleService {\n}\n\n\n\n"
  },
  {
    "path": "src/main/java/com/godcheese/example/service/impl/ExampleServiceImpl.java",
    "content": "package com.godcheese.example.service.impl;\n\n\nimport com.godcheese.example.service.ExampleService;\nimport org.springframework.stereotype.Service;\n\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class ExampleServiceImpl implements ExampleService {\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/Url.java",
    "content": "package com.godcheese.nimrod.common;\n\nimport com.godcheese.nimrod.system.System;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class Url {\n\n    public static final String PATH_SEPARATOR = \"/\";\n    public static final String ALL_PATH_PATTERN = \"/**\";\n\n    public static final String API = \"/api\";\n\n    public static final String API_ALL_PATTERN = API + \"/**\";\n\n    /**\n     * 静态资源 url\n     */\n    public static final String[] STATIC = {\"robots.txt\", \"/**.ico\", \"/assets/**\", \"/css/**\", \"/js/**\", \"/img/**\", \"/vendor/**\"};\n\n    public static class Api {\n\n        public static final String API_PATH_PATTERN = API + ALL_PATH_PATTERN;\n    }\n\n    public static class Page {\n\n        public static final String INDEX = \"/index\";\n\n        public static final String[] INDEX_ARRAY = {PATH_SEPARATOR, INDEX, System.Page.SYSTEM, System.Page.INDEX};\n\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/activemq/ActiveMqConfiguration.java",
    "content": "package com.godcheese.nimrod.common.activemq;\n\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.jms.annotation.EnableJms;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@EnableJms\n@Configuration\npublic class ActiveMqConfiguration {\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/controller/CustomBasicErrorController.java",
    "content": "package com.godcheese.nimrod.common.controller;\n\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.autoconfigure.web.servlet.error.AbstractErrorController;\nimport org.springframework.boot.web.error.ErrorAttributeOptions;\nimport org.springframework.boot.web.servlet.error.ErrorAttributes;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.ResponseBody;\nimport org.springframework.web.servlet.ModelAndView;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.util.Collections;\nimport java.util.Map;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(\"${server.error.path:${error.path:/error}}\")\npublic class CustomBasicErrorController extends AbstractErrorController {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(CustomBasicErrorController.class);\n\n    @Value(\"${server.error.path:${error.path:/error}}\")\n    public String errorPath = \"/error\";\n\n    @Override\n    public String getErrorPath() {\n        return errorPath;\n    }\n\n    public CustomBasicErrorController(ErrorAttributes errorAttributes) {\n        super(errorAttributes);\n    }\n\n    /**\n     * html\n     *\n     * @param request  HttpServletRequest\n     * @param response HttpServletResponse\n     * @return ModelAndView\n     */\n    @RequestMapping(produces = MediaType.TEXT_HTML_VALUE)\n    public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {\n        HttpStatus httpStatus = getStatus(request);\n        int code = httpStatus.value();\n//        Map<String, Object> errorAttributes = getErrorAttributes(request, true);\n        Map<String, Object> errorAttributes = getErrorAttributes(request, ErrorAttributeOptions.defaults());\n        LOGGER.info(\"status={},exception={}\", code, errorAttributes);\n        code = RestControllerAdviceHandler.codeSwitch(code);\n        httpStatus = HttpStatus.valueOf(code);\n//        Map<String, Object> model = Collections.unmodifiableMap(getErrorAttributes(\n//                request, true));\n        Map<String, Object> model = Collections.unmodifiableMap(getErrorAttributes(request, ErrorAttributeOptions.defaults()));\n        ModelAndView modelAndView = resolveErrorView(request, response, httpStatus, model);\n        return (modelAndView == null ? new ModelAndView(code + \"\", model, httpStatus) : modelAndView);\n    }\n\n    /**\n     * json\n     *\n     * @param request  HttpServletRequest\n     * @param response HttpServletResponse\n     * @return ResponseEntity<FailureEntity>\n     */\n    @RequestMapping\n    @ResponseBody\n    public ResponseEntity<FailureEntity> error(HttpServletRequest request, HttpServletResponse response) {\n        HttpStatus httpStatus = getStatus(request);\n        int code = httpStatus.value();\n        Map<String, Object> errorAttributes = getErrorAttributes(request, ErrorAttributeOptions.defaults());\n        LOGGER.info(\"status={},exception={}\", code, errorAttributes);\n        code = RestControllerAdviceHandler.codeSwitch(code);\n        httpStatus = HttpStatus.valueOf(code);\n        return new ResponseEntity<>(new FailureEntity((String) errorAttributes.get(\"error\"), httpStatus.value()), httpStatus);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/controller/RestControllerAdviceHandler.java",
    "content": "package com.godcheese.nimrod.common.controller;\n\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.tile.util.DataSizeUtil;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.authentication.BadCredentialsException;\nimport org.springframework.util.unit.DataSize;\nimport org.springframework.web.bind.annotation.ExceptionHandler;\nimport org.springframework.web.bind.annotation.RestControllerAdvice;\nimport org.springframework.web.multipart.MaxUploadSizeExceededException;\nimport org.springframework.web.multipart.MultipartException;\n\nimport javax.servlet.http.HttpServletRequest;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestControllerAdvice\npublic class RestControllerAdviceHandler {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(RestControllerAdviceHandler.class);\n\n    @Autowired\n    private DictionaryService dictionaryService;\n    @Autowired\n    private FailureEntity failureEntity;\n\n    @ExceptionHandler({BaseResponseException.class})\n    public ResponseEntity<FailureEntity> defaultExceptionHandler(HttpServletRequest httpServletRequest, Throwable throwable) {\n        HttpStatus httpStatus = getStatus(httpServletRequest);\n        throwable.printStackTrace();\n        String message = throwable.getMessage();\n        int code = 0;\n        if (throwable instanceof BaseResponseException) {\n            code = ((BaseResponseException) throwable).getCode();\n        }\n        return new ResponseEntity<>(new FailureEntity(message, code), httpStatus);\n    }\n\n    @ExceptionHandler(MultipartException.class)\n    public ResponseEntity<FailureEntity> sizeLimitExceededExceptionHandler(HttpServletRequest httpServletRequest, Throwable throwable) {\n        HttpStatus httpStatus = getStatus(httpServletRequest);\n        FailureEntity fm = failureEntity.i18n(\"file.upload_fail\");\n        if (throwable instanceof MaxUploadSizeExceededException) {\n            String maxFileSize = DataSizeUtil.pretty(DataSize.parse((String) dictionaryService.get(\"FILE\", \"MAX_FILE_SIZE\")).toBytes());\n            String maxRequestSize = DataSizeUtil.pretty(DataSize.parse((String) dictionaryService.get(\"FILE\", \"MAX_REQUEST_SIZE\")).toBytes());\n            fm = failureEntity.i18n(\"file.upload_fail_max_upload_size_exceeded\", maxFileSize, maxRequestSize);\n        }\n        throwable.printStackTrace();\n        return new ResponseEntity<>(fm, httpStatus);\n    }\n\n    @ExceptionHandler(BadCredentialsException.class)\n    public ResponseEntity<FailureEntity> badCredentialsExceptionHandler(HttpServletRequest httpServletRequest, Throwable throwable) {\n        HttpStatus httpStatus = getStatus(httpServletRequest);\n        throwable.printStackTrace();\n        return new ResponseEntity<>(new FailureEntity(throwable.getMessage(), httpStatus.value()), httpStatus);\n    }\n\n    public static HttpStatus getStatus(HttpServletRequest request) {\n        Integer statusCode = (Integer) request.getAttribute(\"javax.servlet.error.status_code\");\n        if (statusCode == null) {\n            return HttpStatus.INTERNAL_SERVER_ERROR;\n        } else {\n            try {\n                return HttpStatus.valueOf(statusCode);\n            } catch (Exception var4) {\n                return HttpStatus.INTERNAL_SERVER_ERROR;\n            }\n        }\n    }\n\n    public static int codeSwitch(int code) {\n        switch (code) {\n            case 400:\n                break;\n            case 403:\n                break;\n            case 404:\n                break;\n            case 500:\n                break;\n            default:\n                code = 500;\n                break;\n        }\n        return code;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/druid/DruidConfiguration.java",
    "content": "package com.godcheese.nimrod.common.druid;\n\nimport com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Primary;\n\nimport javax.sql.DataSource;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Configuration\npublic class DruidConfiguration {\n\n    public static final String DRUID_URL = \"/druid\";\n\n    /**\n     * DataSource 配置注入\n     *\n     * @return DataSource\n     * @Primary 注释在同样的 DataSource 中，首先使用被标注的 DataSource\n     * 声明其为 Bean 实例\n     */\n    @Primary\n    @Bean(initMethod = \"init\", destroyMethod = \"close\")\n    @ConfigurationProperties(\"spring.datasource.druid\")\n    public DataSource dataSource() {\n        return DruidDataSourceBuilder.create().build();\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/easyui/ComboTree.java",
    "content": "package com.godcheese.nimrod.common.easyui;\n\nimport java.io.Serializable;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-05-04\n */\npublic class ComboTree implements Serializable {\n\n    private static final long serialVersionUID = 962965761257333089L;\n\n    private Long id;\n    private String text;\n    private Long parentId;\n    private List<ComboTree> children;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getText() {\n        return text;\n    }\n\n    public void setText(String text) {\n        this.text = text;\n    }\n\n    public Long getParentId() {\n        return parentId;\n    }\n\n    public void setParentId(Long parentId) {\n        this.parentId = parentId;\n    }\n\n    public List<ComboTree> getChildren() {\n        return children;\n    }\n\n    public void setChildren(List<ComboTree> children) {\n        this.children = children;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/easyui/EasyUi.java",
    "content": "package com.godcheese.nimrod.common.easyui;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-09-26\n */\npublic class EasyUi {\n    /**\n     * Tree TreeGrid state: The node state, 'open' or 'closed'.\n     */\n    public static class State {\n        public static final String CLOSED = \"closed\";\n        public static final String OPEN = \"open\";\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/easyui/Pagination.java",
    "content": "package com.godcheese.nimrod.common.easyui;\n\nimport java.io.Serializable;\nimport java.util.List;\n\n/**\n * 返回例如：{rows:[{},{}], total:2}\n *\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class Pagination<E> implements Serializable {\n\n    private static final long serialVersionUID = -7480580436678839700L;\n\n    private List<E> rows;\n    private long total;\n    private boolean inputTotal;\n\n    public List<E> getRows() {\n        return rows;\n    }\n\n    public void setRows(List<E> rows) {\n        this.rows = rows;\n    }\n\n    public long getTotal() {\n        if (!inputTotal && getRows() != null) {\n            total = getRows().size();\n        }\n        return total;\n    }\n\n    public void setTotal(long total) {\n        this.total = total;\n        inputTotal = true;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/easyui/Tree.java",
    "content": "package com.godcheese.nimrod.common.easyui;\n\nimport java.io.Serializable;\nimport java.util.Collections;\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class Tree implements Serializable {\n\n    private static final long serialVersionUID = -7372612079113611533L;\n\n    /**\n     * node id, which is important to load remote data\n     */\n    private long id;\n\n    /**\n     * node text to show\n     */\n    private String text;\n\n    /**\n     * The css class to display icon.\n     */\n    private String iconCls;\n\n    /**\n     * node state, 'open' or 'closed', default is 'open'. When set to 'closed', the node have children nodes and will load them from remote site\n     */\n    private String state = \"open\";\n\n    /**\n     * Indicate whether the node is checked selected.\n     */\n    private boolean checked;\n\n    /**\n     * custom attributes can be added to a node.\n     */\n    private List<Map<String, String>> attributes;\n\n    /**\n     * an array nodes defines some children nodes.\n     */\n    private List<Tree> children = Collections.emptyList();\n\n    public long getId() {\n        return id;\n    }\n\n    public void setId(long id) {\n        this.id = id;\n    }\n\n    public String getText() {\n        return text;\n    }\n\n    public void setText(String text) {\n        this.text = text;\n    }\n\n    public String getIconCls() {\n        return iconCls;\n    }\n\n    public void setIconCls(String iconCls) {\n        this.iconCls = iconCls;\n    }\n\n    public String getState() {\n        return state;\n    }\n\n    public void setState(String state) {\n        this.state = state;\n    }\n\n    public boolean getChecked() {\n        return checked;\n    }\n\n    public void setChecked(boolean checked) {\n        this.checked = checked;\n    }\n\n    public List<Map<String, String>> getAttributes() {\n        return attributes;\n    }\n\n    public void setAttributes(List<Map<String, String>> attributes) {\n        this.attributes = attributes;\n    }\n\n    public List<Tree> getChildren() {\n        return children;\n    }\n\n    public void setChildren(List<Tree> children) {\n        this.children = children;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/easyui/TreeGrid.java",
    "content": "package com.godcheese.nimrod.common.easyui;\n\nimport java.io.Serializable;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-05-04\n */\npublic class TreeGrid implements Serializable {\n\n    private static final long serialVersionUID = -1416104562832619797L;\n\n    private Long id;\n    private String name;\n    private Long parentId;\n    private List<TreeGrid> children;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public Long getParentId() {\n        return parentId;\n    }\n\n    public void setParentId(Long parentId) {\n        this.parentId = parentId;\n    }\n\n    public List<TreeGrid> getChildren() {\n        return children;\n    }\n\n    public void setChildren(List<TreeGrid> children) {\n        this.children = children;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/easyui/TreeGridAdapter.java",
    "content": "package com.godcheese.nimrod.common.easyui;\n\nimport com.godcheese.nimrod.common.others.BaseEntityAdapter;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-09-26\n */\npublic class TreeGridAdapter<T> extends BaseEntityAdapter<T> {\n\n    public List<T> children;\n    public String state;\n\n    public String getState() {\n        return state;\n    }\n\n    public void setState(String state) {\n        this.state = state;\n    }\n\n    public List<T> getChildren() {\n        return children;\n    }\n\n    public void setChildren(List<T> children) {\n        this.children = children;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/exportbyexcel/ExportByExcel.java",
    "content": "package com.godcheese.nimrod.common.exportbyexcel;\n\nimport org.springframework.core.annotation.AliasFor;\n\nimport java.lang.annotation.*;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Documented\n@Retention(RetentionPolicy.RUNTIME)\n@Target(ElementType.FIELD)\npublic @interface ExportByExcel {\n\n    /**\n     * 导出显示名\n     *\n     * @return String\n     */\n    @AliasFor(\"name\")\n    String value() default \"\";\n\n    /**\n     * 导出显示名\n     *\n     * @return String\n     */\n    @AliasFor(\"value\")\n    String name() default \"\";\n\n    /**\n     * 导入时忽略此字段\n     *\n     * @return boolean\n     */\n    boolean importIgnore() default false;\n\n    boolean exportIgnore() default false;\n\n    Class<? extends ExportByExcelHandler> handler() default ExportByExcelHandler.class;\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/exportbyexcel/ExportByExcelHandler.java",
    "content": "package com.godcheese.nimrod.common.exportbyexcel;\n\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-01-09\n */\npublic class ExportByExcelHandler {\n\n    public Object exportHandler(Object object) {\n        return object;\n    }\n\n    public Object importHandler(Object object) {\n        return object;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/exportbyexcel/ExportByExcelUtil.java",
    "content": "package com.godcheese.nimrod.common.exportbyexcel;\n\nimport com.godcheese.tile.office.ExcelUtil;\nimport com.godcheese.tile.util.ClassUtil;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.apache.poi.hssf.usermodel.HSSFWorkbook;\nimport org.apache.poi.ss.usermodel.Cell;\nimport org.apache.poi.ss.usermodel.Row;\nimport org.apache.poi.ss.usermodel.Sheet;\nimport org.apache.poi.ss.usermodel.Workbook;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.io.IOException;\nimport java.lang.reflect.Field;\nimport java.lang.reflect.InvocationTargetException;\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class ExportByExcelUtil {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(ExportByExcelUtil.class);\n\n    private static final String DEFAULT_KEY = \"default\";\n\n    private static final String EXPORT_HANDLER = \"exportHandler\";\n    private static final String IMPORT_HANDLER = \"importHandler\";\n\n    private ExportByExcelUtil() {\n    }\n\n    /**\n     * 实体导出数据成 Excel 表\n     *\n     * @param httpServletRequest  httpServletRequest\n     * @param httpServletResponse httpServletResponse\n     * @param objectList          objectList\n     * @param clazz               clazz\n     * @param exportFilename      exportFilename\n     * @throws BaseResponseException\n     */\n    public static void exportEntity(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, List<? extends Object> objectList, Class<?> clazz, String exportFilename) throws BaseResponseException {\n        try (Workbook workbook = new HSSFWorkbook()) {\n            Sheet sheet = workbook.createSheet();\n            Row row = sheet.createRow(0);\n            int fieldIndex = 0;\n            Field[] fields = clazz.getDeclaredFields();\n            for (Field field : fields) {\n                ExportByExcel annotation = field.getAnnotation(ExportByExcel.class);\n                if (annotation != null) {\n                    if (!annotation.exportIgnore()) {\n                        String name = annotation.name();\n                        if (\"\".equals(name)) {\n                            name = annotation.value();\n                        }\n                        Cell cell1 = row.createCell(fieldIndex);\n                        cell1.setCellValue(name);\n                        fieldIndex++;\n                    }\n                }\n            }\n            int rowIndex = 1;\n            for (Object object : objectList) {\n                row = sheet.createRow(rowIndex);\n                ExportByExcelUtil.exportFieldValue(row, object);\n                rowIndex++;\n            }\n            ExcelUtil.read2003AndDownloadExportExcel(httpServletRequest, httpServletResponse, workbook, exportFilename);\n        } catch (IOException e) {\n            e.printStackTrace();\n            throw new BaseResponseException(\"导出失败\");\n        } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException | InstantiationException e) {\n            e.printStackTrace();\n        }\n    }\n\n    /**\n     * @param row    Row\n     * @param entity Object\n     * @throws IllegalAccessException    IllegalAccessException\n     * @throws NoSuchMethodException     NoSuchMethodException\n     * @throws InvocationTargetException InvocationTargetException\n     * @throws InstantiationException    InstantiationException\n     */\n    private static void exportFieldValue(Row row, Object entity) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException {\n        Object value;\n        Field[] fields = entity.getClass().getDeclaredFields();\n        int fieldIndex = 0;\n        for (Field field : fields) {\n            ExportByExcel exportByExcel = field.getAnnotation(ExportByExcel.class);\n            if (exportByExcel != null) {\n                if (!exportByExcel.exportIgnore()) {\n                    field.setAccessible(true);\n                    Cell cell = row.createCell(fieldIndex);\n\n                    // 导出所有值时自动调用 handler\n                    value = ClassUtil.invokeMethod(exportByExcel.handler(), EXPORT_HANDLER, field.get(entity), Object.class);\n\n                    // 获取字段值\n                    if (value == null) {\n                        value = field.get(entity);\n                    }\n                    cell.setCellValue(String.valueOf(value));\n                    fieldIndex++;\n                }\n            }\n        }\n    }\n\n    /**\n     * 将实例化的实体遍历赋值\n     *\n     * @param entity T\n     * @param map    Map<Integer, Cell>\n     * @param <T>    <T>\n     * @return T T\n     * @throws NoSuchMethodException     NoSuchMethodException\n     * @throws InstantiationException    InstantiationException\n     * @throws IllegalAccessException    IllegalAccessException\n     * @throws InvocationTargetException InvocationTargetException\n     */\n    public static <T> T importEntity(T entity, Map<Integer, Cell> map) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {\n        Field[] fields = entity.getClass().getDeclaredFields();\n        int index = 0;\n        for (Field field : fields) {\n            field.setAccessible(true);\n            ExportByExcel exportByExcel;\n            if ((exportByExcel = field.getAnnotation(ExportByExcel.class)) != null) {\n                if (!exportByExcel.importIgnore()) {\n                    Cell cell = map.get(index);\n                    String cellValue = cell.getStringCellValue();\n                    // 导入所有值时自动调用 handler\n                    Object fieldValue = ClassUtil.invokeMethod(exportByExcel.handler(), IMPORT_HANDLER, cellValue, Object.class);\n                    // 给实体字段赋值\n                    Class<?> typeClass = field.getType();\n                    if (fieldValue != null) {\n                        if (typeClass.equals(Long.class)) {\n                            field.set(entity, Long.valueOf((String) fieldValue));\n                        } else if (typeClass.equals(Integer.class)) {\n                            field.set(entity, Integer.valueOf((String) fieldValue));\n                        } else if (typeClass.equals(Double.class)) {\n                            field.set(entity, Double.valueOf((String) fieldValue));\n                        } else if (typeClass.equals(Boolean.class)) {\n                            field.set(entity, Boolean.valueOf((String) fieldValue));\n                        } else {\n                            field.set(entity, fieldValue);\n                        }\n                    }\n                    index++;\n                }\n            }\n        }\n        return entity;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/exportbyexcel/IsOrNotExportByExcelHandler.java",
    "content": "package com.godcheese.nimrod.common.exportbyexcel;\n\nimport com.godcheese.nimrod.common.others.SpringContextUtil;\nimport com.godcheese.nimrod.system.entity.DictionaryEntity;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.nimrod.system.service.impl.DictionaryServiceImpl;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-01-09\n */\npublic class IsOrNotExportByExcelHandler extends ExportByExcelHandler {\n\n    private List<DictionaryEntity> dictionaryEntityList;\n\n    public IsOrNotExportByExcelHandler() {\n        DictionaryService dictionaryService = (DictionaryService) SpringContextUtil.getBean(DictionaryServiceImpl.class);\n        dictionaryEntityList = dictionaryService.get(\"IS_OR_NOT\");\n    }\n\n    @Override\n    public Object exportHandler(Object object) {\n        for (DictionaryEntity dictionaryEntity : dictionaryEntityList) {\n            if (dictionaryEntity.getValue().equals(String.valueOf(object))) {\n                return dictionaryEntity.getValueName();\n            }\n        }\n        return object;\n    }\n\n    @Override\n    public Object importHandler(Object object) {\n        for (DictionaryEntity dictionaryEntity : dictionaryEntityList) {\n            if (dictionaryEntity.getValueName().equals(object)) {\n                return dictionaryEntity.getValue();\n            }\n        }\n        return object;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/exportbyexcel/SimpleDateFormatExportByExcelHandler.java",
    "content": "package com.godcheese.nimrod.common.exportbyexcel;\n\nimport com.godcheese.tile.util.DateUtil;\n\nimport java.text.ParseException;\nimport java.text.SimpleDateFormat;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-01-09\n */\npublic class SimpleDateFormatExportByExcelHandler extends ExportByExcelHandler {\n\n    @Override\n    public Object exportHandler(Object object) {\n        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateUtil.DEFAULT_DATE_FORMAT_PATTERN);\n        if (object != null) {\n            return simpleDateFormat.format(object);\n        } else {\n            return \"\";\n        }\n    }\n\n    @Override\n    public Object importHandler(Object object) {\n        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateUtil.DEFAULT_DATE_FORMAT_PATTERN);\n        try {\n            return simpleDateFormat.parse((String) object);\n        } catch (ParseException e) {\n            e.printStackTrace();\n        }\n        return null;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/interceptor/WebInterceptor.java",
    "content": "package com.godcheese.nimrod.common.interceptor;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.common.security.SimpleUser;\nimport com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl;\nimport com.godcheese.nimrod.user.service.UserService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.web.servlet.HandlerInterceptor;\nimport org.springframework.web.servlet.ModelAndView;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class WebInterceptor implements HandlerInterceptor {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(WebInterceptor.class);\n\n    private static final String HOST_KEY = \"_host\";\n\n    private static final String CONTEXT_PATH_KEY = \"_contextPath\";\n\n    private static final String USER_KEY = \"_user\";\n\n    @Autowired\n    private UserService userService;\n\n    @Override\n    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {\n        return true;\n    }\n\n    @Override\n    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {\n        if (modelAndView != null) {\n            modelAndView.addObject(\"SYSTEM_ADMIN\", SYSTEM_ADMIN);\n            String contextPath = Common.Host.contextPath;\n            modelAndView.addObject(CONTEXT_PATH_KEY, (contextPath != null && !\"\".equals(contextPath)) ? contextPath : \"/\");\n            SimpleUser simpleUser = SimpleUserDetailsServiceImpl.getCurrentSimpleUser(request);\n            Map<String, Object> userMap = new HashMap<>(2);\n            userMap.put(\"id\", null);\n            userMap.put(\"username\", null);\n            if (simpleUser != null) {\n                userMap.put(\"id\", simpleUser.getId());\n                userMap.put(\"username\", simpleUser.getUsername());\n                userMap.put(\"avatar\", userService.getOne(simpleUser.getId()).getAvatar());\n            }\n            modelAndView.addObject(USER_KEY, userMap);\n            String scheme = Common.Host.scheme;\n            String port = Common.Host.port;\n            String ip = Common.Host.ip;\n            String local = scheme + \"://localhost\" + \":\" + port + contextPath + \"/\";\n            String network = scheme + \"://\" + ip + \":\" + port + contextPath + \"/\";\n            String host = network;\n            if (ip == null) {\n                host = local;\n            }\n            modelAndView.addObject(HOST_KEY, host);\n        }\n    }\n\n    @Override\n    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/interceptor/WebMvcConfiguration.java",
    "content": "package com.godcheese.nimrod.common.interceptor;\n\nimport com.godcheese.nimrod.common.Url;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.web.servlet.config.annotation.InterceptorRegistry;\nimport org.springframework.web.servlet.config.annotation.WebMvcConfigurer;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Configuration\npublic class WebMvcConfiguration implements WebMvcConfigurer {\n\n    @Bean\n    public WebInterceptor webInterceptor() {\n        return new WebInterceptor();\n    }\n\n    @Override\n    public void addInterceptors(InterceptorRegistry registry) {\n        // WebInterceptor\n        registry.addInterceptor(webInterceptor())\n                .addPathPatterns(Url.ALL_PATH_PATTERN)\n                .excludePathPatterns(Url.STATIC);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/operationlog/OperationLog.java",
    "content": "package com.godcheese.nimrod.common.operationlog;\n\n\nimport org.springframework.core.annotation.AliasFor;\n\nimport java.lang.annotation.*;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Documented\n@Retention(RetentionPolicy.RUNTIME)\n@Target(ElementType.METHOD)\npublic @interface OperationLog {\n\n    /**\n     * 操作内容\n     *\n     * @return String\n     */\n    @AliasFor(\"operation\")\n    String value() default \"\";\n\n    /**\n     * 操作内容\n     *\n     * @return String\n     */\n    @AliasFor(\"value\")\n    String operation() default \"\";\n\n    /**\n     * 操作类型\n     *\n     * @return OperationLogType\n     */\n    OperationLogType type() default OperationLogType.PAGE;\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/operationlog/OperationLogAspect.java",
    "content": "package com.godcheese.nimrod.common.operationlog;\n\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl;\nimport com.godcheese.nimrod.system.entity.OperationLogEntity;\nimport com.godcheese.nimrod.user.entity.UserEntity;\nimport com.godcheese.tile.util.ClientUtil;\nimport org.aspectj.lang.JoinPoint;\nimport org.aspectj.lang.annotation.*;\nimport org.aspectj.lang.reflect.MethodSignature;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.context.ApplicationContext;\nimport org.springframework.stereotype.Component;\nimport org.springframework.web.context.request.RequestContextHolder;\nimport org.springframework.web.context.request.ServletRequestAttributes;\n\nimport javax.servlet.http.Cookie;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport javax.servlet.http.HttpSession;\nimport java.io.PrintWriter;\nimport java.io.StringWriter;\nimport java.lang.reflect.Method;\nimport java.time.Instant;\nimport java.util.*;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-07-18\n */\n@Aspect\n@Component\npublic class OperationLogAspect {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(OperationLogAspect.class);\n\n    private OperationLogEntity operationLogEntity = new OperationLogEntity();\n\n    @Autowired\n    private ApplicationContext applicationContext;\n\n    @Autowired\n    private Common common;\n\n    @Autowired\n    private SimpleUserDetailsServiceImpl simpleUserDetailsService;\n\n    @Pointcut(\"@annotation(com.godcheese.nimrod.common.operationlog.OperationLog)\")\n    public void operationLogAspect() {\n    }\n\n    @Before(value = \"operationLogAspect()\")\n    public void before(JoinPoint joinpoint) throws JsonProcessingException {\n        long beginTime = Instant.now().toEpochMilli();\n        HttpServletRequest httpServletRequest = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();\n        HttpServletResponse httpServletResponse = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getResponse();\n        UserEntity userEntity = simpleUserDetailsService.getUserEntity();\n        if (userEntity != null) {\n            operationLogEntity.setUserId(userEntity.getId());\n        }\n        operationLogEntity.setIpAddress(ClientUtil.getClientIp(httpServletRequest));\n        String operation = \"\";\n        MethodSignature methodSignature = (MethodSignature) joinpoint.getSignature();\n        Method method = methodSignature.getMethod();\n        OperationLog operationLog = method.getAnnotation(OperationLog.class);\n        if (operationLog != null) {\n            operationLogEntity.setOperationType(operationLog.type().value());\n            operation = operationLog.value();\n            if (\"\".equals(operation)) {\n                operation = operationLog.operation();\n            }\n        }\n        operationLogEntity.setOperation(operation);\n        operationLogEntity.setHandler(joinpoint.getSignature().toLongString());\n        StringBuffer requestUrl = httpServletRequest.getRequestURL();\n        if (requestUrl != null) {\n            operationLogEntity.setRequestUrl(requestUrl.toString());\n        }\n        operationLogEntity.setRequestMethod(httpServletRequest.getMethod());\n        Enumeration<String> parameterNames = httpServletRequest.getParameterNames();\n        Map<String, Object> map = new HashMap<>(6);\n        while (parameterNames.hasMoreElements()) {\n            String name = parameterNames.nextElement();\n            Object parameter = httpServletRequest.getParameter(name);\n            map.put(name, parameter);\n        }\n        operationLogEntity.setRequestParameter(common.objectToJson(map));\n        operationLogEntity.setAcceptLanguage(httpServletRequest.getHeader(\"Accept-Language\"));\n        operationLogEntity.setReferer(httpServletRequest.getHeader(\"Referer\"));\n        operationLogEntity.setUserAgent(httpServletRequest.getHeader(\"User-Agent\"));\n        HttpSession httpSession = httpServletRequest.getSession();\n        if (httpSession != null) {\n            operationLogEntity.setSessionId(httpSession.getId());\n        }\n        Cookie[] cookies = httpServletRequest.getCookies();\n        map = new HashMap<>(4);\n        if (cookies != null) {\n            for (Cookie cookie : cookies) {\n                map.put(cookie.getName(), cookie.getValue());\n            }\n        }\n        operationLogEntity.setCookie(common.objectToJson(map));\n        operationLogEntity.setStatus(String.valueOf(httpServletResponse.getStatus()));\n        operationLogEntity.setGmtCreated(new Date());\n        operationLogEntity.setConsumingTime(Instant.now().toEpochMilli() - beginTime);\n    }\n\n    @AfterReturning(pointcut = \"operationLogAspect()\", returning = \"returning\")\n    public void afterReturning(Object returning) {\n        LOGGER.info(\"returning={}\", returning);\n        applicationContext.publishEvent(new OperationLogEvent(operationLogEntity));\n    }\n\n    @AfterThrowing(pointcut = \"operationLogAspect()\", throwing = \"throwing\")\n    public void afterThrowing(Throwable throwing) {\n        StringWriter stringWriter = new StringWriter();\n        try (PrintWriter printWriter = new PrintWriter(stringWriter)) {\n            throwing.printStackTrace(printWriter);\n        }\n        operationLogEntity.setStackTrace(stringWriter.toString());\n        applicationContext.publishEvent(new OperationLogEvent(operationLogEntity));\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/operationlog/OperationLogEvent.java",
    "content": "package com.godcheese.nimrod.common.operationlog;\n\nimport com.godcheese.nimrod.system.entity.OperationLogEntity;\nimport org.springframework.context.ApplicationEvent;\n\nimport java.io.Serializable;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-07-17\n */\npublic class OperationLogEvent extends ApplicationEvent implements Serializable {\n\n    private static final long serialVersionUID = -5144993159534622159L;\n\n    public OperationLogEvent(OperationLogEntity source) {\n        super(source);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/operationlog/OperationLogListener.java",
    "content": "package com.godcheese.nimrod.common.operationlog;\n\nimport com.godcheese.nimrod.system.entity.OperationLogEntity;\nimport com.godcheese.nimrod.system.service.OperationLogService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.context.event.EventListener;\nimport org.springframework.scheduling.annotation.Async;\nimport org.springframework.stereotype.Component;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-07-17\n */\n@Component\npublic class OperationLogListener {\n\n    @Autowired\n    private OperationLogService operationLogService;\n\n    @Async\n    @EventListener(OperationLogEvent.class)\n    public void handleEvent(OperationLogEvent event) {\n        OperationLogEntity operationLogEntity = (OperationLogEntity) event.getSource();\n        operationLogService.addOne(operationLogEntity);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/operationlog/OperationLogType.java",
    "content": "package com.godcheese.nimrod.common.operationlog;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic enum OperationLogType {\n\n    /**\n     * 页面访问\n     */\n    PAGE(0),\n\n    /**\n     * API 调用\n     */\n    API(1),\n    ;\n\n    private int value;\n\n    OperationLogType(int value) {\n        this.value = value;\n    }\n\n    public int value() {\n        return this.value;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/others/BaseEntityAdapter.java",
    "content": "package com.godcheese.nimrod.common.others;\n\nimport com.godcheese.nimrod.user.entity.DepartmentEntity;\nimport com.godcheese.nimrod.user.entity.RoleEntity;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-09-30\n */\npublic abstract class BaseEntityAdapter<T> {\n\n    /**\n     * 用户名\n     */\n    private String username;\n\n    /**\n     * 角色\n     */\n    private List<RoleEntity> roles;\n\n    /**\n     * 部门\n     */\n    private List<DepartmentEntity> departments;\n\n    /**\n     * 是否已关联\n     */\n    private Integer isAssociated;\n\n    /**\n     * 是否已授权\n     */\n    private Integer isGranted;\n\n    public String getUsername() {\n        return username;\n    }\n\n    public void setUsername(String username) {\n        this.username = username;\n    }\n\n    public List<RoleEntity> getRoles() {\n        return roles;\n    }\n\n    public void setRoles(List<RoleEntity> roles) {\n        this.roles = roles;\n    }\n\n    public List<DepartmentEntity> getDepartments() {\n        return departments;\n    }\n\n    public void setDepartments(List<DepartmentEntity> departments) {\n        this.departments = departments;\n    }\n\n    public Integer getIsAssociated() {\n        return isAssociated;\n    }\n\n    public void setIsAssociated(Integer isAssociated) {\n        this.isAssociated = isAssociated;\n    }\n\n    public Integer getIsGranted() {\n        return isGranted;\n    }\n\n    public void setIsGranted(Integer isGranted) {\n        this.isGranted = isGranted;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/others/Common.java",
    "content": "package com.godcheese.nimrod.common.others;\n\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.godcheese.nimrod.common.properties.AppProperties;\nimport com.godcheese.nimrod.common.properties.UpdatableMultipartConfigElement;\nimport com.godcheese.nimrod.mail.service.MailService;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.tile.util.ClientUtil;\nimport com.godcheese.tile.util.MBeanServerUtil;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.core.io.ClassPathResource;\nimport org.springframework.stereotype.Component;\nimport org.springframework.util.unit.DataSize;\nimport org.springframework.web.context.WebApplicationContext;\n\nimport javax.management.*;\nimport java.io.IOException;\nimport java.util.Properties;\nimport java.util.TimeZone;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component\npublic class Common {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(Common.class);\n\n    @Autowired\n    private WebApplicationContext webApplicationContext;\n\n    @Autowired\n    private MailService mailService;\n\n    @Autowired\n    private DictionaryService dictionaryService;\n\n    @Autowired\n    private AppProperties appProperties;\n\n    @Autowired(required = false)\n    private UpdatableMultipartConfigElement updatableMultipartConfigElement;\n\n    public void initialize() {\n        // 首次启动加载数据字典到 ServletContext 内存\n        dictionaryService.addDictionaryToServletContext();\n        mailService.initialize();\n        // 将待发送的邮件重新加入到发送队列\n        mailService.retry(false);\n\n        String maxFileSize = (String) dictionaryService.get(\"FILE\", \"MAX_FILE_SIZE\");\n        String maxRequestSize = (String) dictionaryService.get(\"FILE\", \"MAX_REQUEST_SIZE\");\n        if(maxFileSize != null) {\n            updatableMultipartConfigElement.setMaxFileSize(DataSize.parse(maxFileSize).toBytes());\n        }\n        if(maxRequestSize != null) {\n            updatableMultipartConfigElement.setMaxRequestSize(DataSize.parse(maxRequestSize).toBytes());\n        }\n        String timeZoneId = (String) dictionaryService.get(\"SYSTEM\", \"TIME_ZONE_ID\");\n        if(timeZoneId != null) {\n            TimeZone.setDefault(TimeZone.getTimeZone(timeZoneId));\n        }\n//        Calendar.getInstance(TimeZone.getTimeZone());\n//        DateFormat.getDateTimeInstance().setTimeZone(TimeZone.getTimeZone(timeZoneId));\n    }\n\n    public static class Host {\n        public static String scheme = null;\n        public static String port = null;\n        public static String contextPath = null;\n        public static String ip = null;\n        public static String serverInfo = null;\n    }\n\n    public void getHost() {\n        getHost(webApplicationContext);\n    }\n\n    public static void getHost(WebApplicationContext webApplicationContext) {\n        try {\n            Host.ip = ClientUtil.getLocalHostLANAddress().getHostAddress();\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n        Host.serverInfo = webApplicationContext.getServletContext().getServerInfo();\n        try {\n            Host.scheme = MBeanServerUtil.getScheme();\n            Host.port = MBeanServerUtil.getPort();\n        } catch (MalformedObjectNameException | AttributeNotFoundException | InstanceNotFoundException | MBeanException | ReflectionException e) {\n            e.printStackTrace();\n        }\n        Host.contextPath = webApplicationContext.getServletContext().getContextPath();\n    }\n\n    /**\n     * 对象转 JSON\n     *\n     * @param object Object\n     * @return String\n     * @throws JsonProcessingException JsonProcessingException\n     */\n    public String objectToJson(Object object) throws JsonProcessingException {\n        return new ObjectMapper().writeValueAsString(object);\n    }\n\n    /**\n     * JSON 转对象\n     *\n     * @param json  JSON\n     * @param clazz Class\n     * @param <T>   T\n     * @return T\n     * @throws IOException IOException\n     */\n    public <T> T jsonToObject(String json, Class<T> clazz) throws IOException {\n        return new ObjectMapper().readValue(json, clazz);\n    }\n\n    public static String trimSlash(String string) {\n        if (string != null) {\n            int slashIndex = string.indexOf(\"/\");\n            if (slashIndex == 0 && string.length() > 1) {\n                while (true) {\n                    string = string.substring(1);\n                    if (string.length() >= 1) {\n                        slashIndex = string.indexOf(\"/\");\n                        if (slashIndex != 0) {\n                            return string;\n                        }\n                    }\n                }\n            } else {\n                return string;\n            }\n        }\n        return null;\n    }\n\n    public Object i18n(String key, Object... params) {\n        ClassPathResource classPathResource = new ClassPathResource(\"i18n/\" + appProperties.getI18n() + \".properties\");\n        Properties properties = new Properties();\n        try {\n            properties.load(classPathResource.getInputStream());\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n        if (params.length > 0) {\n            return String.format((String) properties.get(key), params);\n        } else {\n            return properties.get(key);\n        }\n    }\n\n    public Object i18n(String key) {\n        return i18n(key, new Object[]{});\n    }\n\n    /**\n     * 默认区域/语言\n     */\n//    private static final Locale LOCALE = Locale.CHINA;\n\n    /**\n     * 默认时区\n     */\n//    private static final TimeZone DEFAULT_TIME_ZONE = TimeZone.getTimeZone(\"GMT+8\");\n\n    /**\n     * 默认日期格式\n     */\n//    private static final String DEFAULT_DATE_FORMAT_PATTERN = \"yyyy-MM-dd HH:mm:ss\";\n\n    //    public TimeZone getSystemTimeZone() {\n//        String timeZoneId = (String) dictionaryService.get(\"SYSTEM\", \"TIME_ZONE_ID\");\n//        if (timeZoneId != null) {\n//            TimeZone timeZone = TimeZone.getTimeZone(timeZoneId);\n//            if (!DEFAULT_TIME_ZONE.hasSameRules(timeZone)) {\n//                return timeZone;\n//            }\n//        }\n//        return DEFAULT_TIME_ZONE;\n//    }\n//\n\n//\n//    private ObjectMapper getObjectMapper() {\n//        String dateFormatPattern = (String) dictionaryService.get(\"SYSTEM\", \"DATE_FORMAT_PATTERN\");\n//        String language = (String) dictionaryService.get(\"SYSTEM\", \"LANGUAGE\");\n//        String county = (String) dictionaryService.get(\"SYSTEM\", \"COUNTY\");\n//        LOGGER.info(\"dateFormatPattern1={}\", dateFormatPattern);\n//        ObjectMapper objectMapper = new ObjectMapper();\n//        objectMapper.setTimeZone(getSystemTimeZone());\n//        objectMapper.setDateFormat(new SimpleDateFormat(dateFormatPattern != null ? dateFormatPattern : DEFAULT_DATE_FORMAT_PATTERN));\n//        objectMapper.setLocale((language != null && county != null) ? new Locale(language, county) : LOCALE);\n//        return objectMapper;\n//\n//\n//    public abstract class CommonEntityAdapter<T> {\n//        /**\n//         * 用户名\n//         */\n//        private String username;\n//        /**\n//         * 角色\n//         */\n//        private List<RoleEntity> roles;\n//\n//        /**\n//         * 部门\n//         */\n//        private List<DepartmentEntity> departments;\n//\n//        /**\n//         * 是否已关联\n//         */\n//        private Integer isAssociated;\n//\n//        /**\n//         * 是否已授权\n//         */\n//        private Integer isGranted;\n//\n//        public String getUsername() {\n//            return username;\n//        }\n//\n//        public void setUsername(String username) {\n//            this.username = username;\n//        }\n//\n//        public List<RoleEntity> getRoles() {\n//            return roles;\n//        }\n//\n//        public void setRoles(List<RoleEntity> roles) {\n//            this.roles = roles;\n//        }\n//\n//        public List<DepartmentEntity> getDepartments() {\n//            return departments;\n//        }\n//\n//        public void setDepartments(List<DepartmentEntity> departments) {\n//            this.departments = departments;\n//        }\n//\n//        public Integer getIsAssociated() {\n//            return isAssociated;\n//        }\n//\n//        public void setIsAssociated(Integer isAssociated) {\n//            this.isAssociated = isAssociated;\n//        }\n//\n//        public Integer getIsGranted() {\n//            return isGranted;\n//        }\n//\n//        public void setIsGranted(Integer isGranted) {\n//            this.isGranted = isGranted;\n//        }\n//    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/others/FailureEntity.java",
    "content": "package com.godcheese.nimrod.common.others;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component\npublic class FailureEntity implements com.godcheese.tile.web.http.FailureEntity {\n\n    private static final String NULL = \"null\";\n\n    private String message;\n    private int code;\n\n    @Autowired\n    private Common common;\n\n    public FailureEntity i18n(String key, Object... params) {\n        String message = String.valueOf(common.i18n(key + \".message\", params));\n        String code = String.valueOf(common.i18n(key + \".code\"));\n        int code2 = 0;\n        if (code != null && !\"\".equals(code) && !NULL.equals(code)) {\n            code2 = Integer.parseInt(code);\n        }\n        return new FailureEntity(message, code2);\n    }\n\n    public FailureEntity i18n(String key) {\n        return i18n(key, new Object() {\n        });\n    }\n\n    @Override\n    public String getMessage() {\n        return message;\n    }\n\n    @Override\n    public int getCode() {\n        return code;\n    }\n\n    @Override\n    public long getTimestamp() {\n        return System.currentTimeMillis();\n    }\n\n    public FailureEntity() {\n    }\n\n    public FailureEntity(String message, int code) {\n        this.message = message;\n        this.code = code;\n    }\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/others/SpringContextUtil.java",
    "content": "package com.godcheese.nimrod.common.others;\n\nimport org.springframework.beans.BeansException;\nimport org.springframework.beans.factory.config.BeanDefinition;\nimport org.springframework.beans.factory.support.BeanDefinitionBuilder;\nimport org.springframework.beans.factory.support.BeanDefinitionRegistry;\nimport org.springframework.beans.factory.support.DefaultListableBeanFactory;\nimport org.springframework.context.ApplicationContext;\nimport org.springframework.context.ApplicationContextAware;\nimport org.springframework.context.ConfigurableApplicationContext;\nimport org.springframework.stereotype.Component;\n\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-01-10\n */\n@Component\npublic class SpringContextUtil implements ApplicationContextAware {\n\n    private static ApplicationContext applicationContext;\n\n    @Override\n    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {\n        if (SpringContextUtil.applicationContext == null) {\n            SpringContextUtil.applicationContext = applicationContext;\n        }\n    }\n\n    public static ApplicationContext getApplicationContext() {\n        return applicationContext;\n    }\n\n    public static Object getBean(String name) {\n        return getApplicationContext().getBean(name);\n    }\n\n    public static Object getBean(String name, Class<?> clazz) {\n        return getApplicationContext().getBean(name, clazz);\n    }\n\n    public static Object getBean(Class<?> clazz) {\n        return getApplicationContext().getBean(clazz);\n    }\n\n    public static void registerBean(String beanId, String className) {\n\n        ConfigurableApplicationContext configurableContext = (ConfigurableApplicationContext) getApplicationContext();\n\n        BeanDefinitionRegistry beanDefinitionRegistry = (DefaultListableBeanFactory) configurableContext.getBeanFactory();\n\n        BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(className);\n\n        // get the BeanDefinition\n        BeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition();\n\n        // register the bean\n        beanDefinitionRegistry.registerBeanDefinition(beanId, beanDefinition);\n    }\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/properties/AppProperties.java",
    "content": "package com.godcheese.nimrod.common.properties;\n\n\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.stereotype.Component;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component\n@ConfigurationProperties(prefix = \"app\", ignoreUnknownFields = true, ignoreInvalidFields = true)\npublic class AppProperties {\n\n    private String name;\n    private String version;\n    private List<String> systemAdminRole = new ArrayList<>(Collections.singletonList(\"SYSTEM_ADMIN\"));\n    private String[] permitUrl;\n    private String i18n = \"zh_cn\";\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public String getVersion() {\n        return version;\n    }\n\n    public void setVersion(String version) {\n        this.version = version;\n    }\n\n    public List<String> getSystemAdminRole() {\n        return systemAdminRole;\n    }\n\n    public void setSystemAdminRole(List<String> systemAdminRole) {\n        this.systemAdminRole = systemAdminRole;\n    }\n\n    public String[] getPermitUrl() {\n        return permitUrl;\n    }\n\n    public void setPermitUrl(String[] permitUrl) {\n        this.permitUrl = permitUrl;\n    }\n\n    public String getI18n() {\n        return i18n != null ? i18n : \"zh_cn\";\n    }\n\n    public void setI18n(String i18n) {\n        this.i18n = i18n;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/properties/LogProperties.java",
    "content": "package com.godcheese.nimrod.common.properties;\n\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.stereotype.Component;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component\n@ConfigurationProperties(prefix = \"log\", ignoreUnknownFields = true, ignoreInvalidFields = true)\npublic class LogProperties {\n\n    /**\n     * 日志存储目录\n     */\n    private String dir = \"../\";\n\n    /**\n     * 日志文件保存的最大天数\n     */\n    private String maxHistory = \"30\";\n\n    /**\n     * 日志文件的最大大小\n     */\n    private String maxFileSize = \"10MB\";\n\n    /**\n     * 日志文件总量大小\n     */\n    private String totalSizeCap = \"2GB\";\n\n    public String getDir() {\n        return dir;\n    }\n\n    public void setDir(String dir) {\n        this.dir = dir;\n    }\n\n    public String getMaxHistory() {\n        return maxHistory;\n    }\n\n    public void setMaxHistory(String maxHistory) {\n        this.maxHistory = maxHistory;\n    }\n\n    public String getMaxFileSize() {\n        return maxFileSize;\n    }\n\n    public void setMaxFileSize(String maxFileSize) {\n        this.maxFileSize = maxFileSize;\n    }\n\n    public String getTotalSizeCap() {\n        return totalSizeCap;\n    }\n\n    public void setTotalSizeCap(String totalSizeCap) {\n        this.totalSizeCap = totalSizeCap;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/properties/MultipartProperties.java",
    "content": "package com.godcheese.nimrod.common.properties;\n\nimport org.springframework.boot.context.properties.EnableConfigurationProperties;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\nimport javax.servlet.MultipartConfigElement;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-10-24\n */\n@Configuration\n@EnableConfigurationProperties(org.springframework.boot.autoconfigure.web.servlet.MultipartProperties.class)\npublic class MultipartProperties {\n\n    private final org.springframework.boot.autoconfigure.web.servlet.MultipartProperties multipartProperties;\n\n    public MultipartProperties(org.springframework.boot.autoconfigure.web.servlet.MultipartProperties multipartProperties) {\n        this.multipartProperties = multipartProperties;\n    }\n\n    @Bean\n    public MultipartConfigElement multipartConfigElement() {\n        MultipartConfigElement multipartConfigElement = multipartProperties.createMultipartConfig();\n        return new UpdatableMultipartConfigElement(multipartConfigElement.getLocation(), multipartConfigElement.getMaxFileSize(), multipartConfigElement.getMaxRequestSize(), multipartConfigElement.getFileSizeThreshold());\n    }\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/properties/UpdatableMultipartConfigElement.java",
    "content": "package com.godcheese.nimrod.common.properties;\n\nimport javax.servlet.MultipartConfigElement;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-10-24\n */\npublic class UpdatableMultipartConfigElement extends MultipartConfigElement {\n\n    private volatile long maxFileSize = -1;\n\n    private volatile long maxRequestSize = -1;\n\n    public UpdatableMultipartConfigElement(String location, long maxFileSize, long maxRequestSize, int fileSizeThreshold) {\n        super(location, maxFileSize, maxRequestSize, fileSizeThreshold);\n    }\n\n    @Override\n    public long getMaxFileSize() {\n        return maxFileSize == -1 ? super.getMaxFileSize() : maxFileSize;\n    }\n\n    public void setMaxFileSize(long maxFileSize) {\n        this.maxFileSize = maxFileSize;\n    }\n\n    @Override\n    public long getMaxRequestSize() {\n        return maxRequestSize == -1 ? super.getMaxRequestSize() : maxRequestSize;\n    }\n\n    public void setMaxRequestSize(long maxRequestSize) {\n        this.maxRequestSize = maxRequestSize;\n    }\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/security/AuthenticationFailureHandler.java",
    "content": "package com.godcheese.nimrod.common.security;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.security.authentication.BadCredentialsException;\nimport org.springframework.security.authentication.DisabledException;\nimport org.springframework.security.core.AuthenticationException;\nimport org.springframework.stereotype.Component;\n\nimport javax.servlet.ServletException;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.io.IOException;\nimport java.io.PrintWriter;\nimport java.nio.charset.StandardCharsets;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component\npublic class AuthenticationFailureHandler implements org.springframework.security.web.authentication.AuthenticationFailureHandler {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(AuthenticationFailureHandler.class);\n\n    @Autowired\n    private Common common;\n\n    @Autowired\n    private FailureEntity failureEntity;\n\n    @Override\n    public void onAuthenticationFailure(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException {\n        httpServletResponse.setStatus(HttpStatus.NOT_FOUND.value());\n        httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE);\n        httpServletResponse.setCharacterEncoding(StandardCharsets.UTF_8.name());\n        PrintWriter printWriter = httpServletResponse.getWriter();\n\n        // 检查 e 是否为验证码错误类\n        if (e instanceof VerifyCodeFilter.VerifyCodeCheckException) {\n            printWriter.write(common.objectToJson(new FailureEntity(e.getMessage(), 0)));\n        } else if (e instanceof BadCredentialsException) {\n            printWriter.write(common.objectToJson(failureEntity.i18n(\"user.login_fail_account_or_password_error\")));\n        } else if (e instanceof DisabledException) {\n            LOGGER.info(\"e.getMessage={}\", e.getMessage());\n            printWriter.write(common.objectToJson(failureEntity.i18n(\"user.login_fail_account_or_password_error\")));\n        }\n        e.printStackTrace();\n        printWriter.flush();\n        printWriter.close();\n    }\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/security/AuthenticationSuccessHandler.java",
    "content": "package com.godcheese.nimrod.common.security;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.tile.web.http.SuccessEntity;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.security.core.Authentication;\nimport org.springframework.stereotype.Component;\n\nimport javax.servlet.ServletException;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.io.IOException;\nimport java.io.PrintWriter;\nimport java.nio.charset.StandardCharsets;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component\npublic class AuthenticationSuccessHandler implements org.springframework.security.web.authentication.AuthenticationSuccessHandler {\n\n    @Autowired\n    private Common common;\n\n    @Override\n    public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {\n        SimpleUser simpleUser = (SimpleUser) authentication.getPrincipal();\n        httpServletResponse.setStatus(HttpStatus.OK.value());\n        httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE);\n        httpServletResponse.setCharacterEncoding(StandardCharsets.UTF_8.name());\n        PrintWriter printWriter = httpServletResponse.getWriter();\n        printWriter.write(common.objectToJson(new SuccessEntity(simpleUser)));\n        printWriter.flush();\n        printWriter.close();\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/security/LogoutSuccessHandler.java",
    "content": "package com.godcheese.nimrod.common.security;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.tile.web.http.SuccessEntity;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.security.core.Authentication;\nimport org.springframework.stereotype.Component;\n\nimport javax.servlet.ServletException;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.io.IOException;\nimport java.io.PrintWriter;\nimport java.nio.charset.StandardCharsets;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-01-07\n */\n@Component\npublic class LogoutSuccessHandler implements org.springframework.security.web.authentication.logout.LogoutSuccessHandler {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(LogoutSuccessHandler.class);\n\n    @Autowired\n    private Common common;\n\n    @Override\n    public void onLogoutSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {\n        httpServletResponse.setStatus(HttpStatus.OK.value());\n        httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE);\n        httpServletResponse.setCharacterEncoding(StandardCharsets.UTF_8.name());\n        PrintWriter printWriter = httpServletResponse.getWriter();\n        printWriter.write(common.objectToJson(new SuccessEntity(\"注销成功\")));\n        printWriter.flush();\n        printWriter.close();\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/security/SimpleUser.java",
    "content": "package com.godcheese.nimrod.common.security;\n\nimport org.apache.commons.logging.Log;\nimport org.apache.commons.logging.LogFactory;\nimport org.springframework.security.core.CredentialsContainer;\nimport org.springframework.security.core.GrantedAuthority;\nimport org.springframework.security.core.SpringSecurityCoreVersion;\nimport org.springframework.security.core.authority.AuthorityUtils;\nimport org.springframework.security.core.authority.SimpleGrantedAuthority;\nimport org.springframework.security.crypto.factory.PasswordEncoderFactories;\nimport org.springframework.security.crypto.password.PasswordEncoder;\nimport org.springframework.util.Assert;\n\nimport java.io.Serializable;\nimport java.util.*;\nimport java.util.function.Function;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class SimpleUser implements SimpleUserDetails, CredentialsContainer {\n\n    private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;\n\n    private static final Log logger = LogFactory.getLog(SimpleUser.class);\n\n    // ~ Instance fields\n    // ================================================================================================\n    private Long id;\n    private String password;\n    private final String username;\n    private final Set<GrantedAuthority> authorities;\n    private final boolean accountNonExpired;\n    private final boolean accountNonLocked;\n    private final boolean credentialsNonExpired;\n    private final boolean enabled;\n\n    // ~ Constructors\n    // ===================================================================================================\n\n    /**\n     * Calls the more complex constructor with all boolean arguments set to {@code true}.\n     */\n    public SimpleUser(Long id, String username, String password,\n                      Collection<? extends GrantedAuthority> authorities) {\n        this(id, username, password, true, true, true, true, authorities);\n    }\n\n\n    /**\n     * Construct the <code>SimpleUser</code> with the details required by\n     * {@link org.springframework.security.authentication.dao.DaoAuthenticationProvider}.\n     *\n     * @param username              the username presented to the\n     *                              <code>DaoAuthenticationProvider</code>\n     * @param password              the password that should be presented to the\n     *                              <code>DaoAuthenticationProvider</code>\n     * @param enabled               set to <code>true</code> if the user is enabled\n     * @param accountNonExpired     set to <code>true</code> if the account has not expired\n     * @param credentialsNonExpired set to <code>true</code> if the credentials have not\n     *                              expired\n     * @param accountNonLocked      set to <code>true</code> if the account is not locked\n     * @param authorities           the authorities that should be granted to the caller if they\n     *                              presented the correct username and password and the user is enabled. Not null.\n     * @throws IllegalArgumentException if a <code>null</code> value was passed either as\n     *                                  a parameter or as an element in the <code>GrantedAuthority</code> collection\n     */\n    public SimpleUser(Long id, String username, String password, boolean enabled,\n                      boolean accountNonExpired, boolean credentialsNonExpired,\n                      boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) {\n\n        if (((username == null) || \"\".equals(username)) || (password == null)) {\n            throw new IllegalArgumentException(\n                    \"Cannot pass null or empty values to constructor\");\n        }\n\n        this.id = id;\n        this.username = username;\n        this.password = password;\n        this.enabled = enabled;\n        this.accountNonExpired = accountNonExpired;\n        this.credentialsNonExpired = credentialsNonExpired;\n        this.accountNonLocked = accountNonLocked;\n        this.authorities = Collections.unmodifiableSet(sortAuthorities(authorities));\n    }\n\n    // ~ Methods\n    // ========================================================================================================\n\n    @Override\n    public Long getId() {\n        return id;\n    }\n\n    @Override\n    public Collection<GrantedAuthority> getAuthorities() {\n        return authorities;\n    }\n\n    @Override\n    public String getPassword() {\n        return password;\n    }\n\n    @Override\n    public String getUsername() {\n        return username;\n    }\n\n    @Override\n    public boolean isEnabled() {\n        return enabled;\n    }\n\n    @Override\n    public boolean isAccountNonExpired() {\n        return accountNonExpired;\n    }\n\n    @Override\n    public boolean isAccountNonLocked() {\n        return accountNonLocked;\n    }\n\n    @Override\n    public boolean isCredentialsNonExpired() {\n        return credentialsNonExpired;\n    }\n\n    @Override\n    public void eraseCredentials() {\n        password = null;\n    }\n\n    private static SortedSet<GrantedAuthority> sortAuthorities(\n            Collection<? extends GrantedAuthority> authorities) {\n        Assert.notNull(authorities, \"Cannot pass a null GrantedAuthority collection\");\n        // Ensure array iteration order is predictable (as per\n        // UserDetails.getAuthorities() contract and SEC-717)\n        SortedSet<GrantedAuthority> sortedAuthorities = new TreeSet<>(\n                new SimpleUser.AuthorityComparator());\n\n        for (GrantedAuthority grantedAuthority : authorities) {\n            Assert.notNull(grantedAuthority,\n                    \"GrantedAuthority list cannot contain any null elements\");\n            sortedAuthorities.add(grantedAuthority);\n        }\n\n        return sortedAuthorities;\n    }\n\n    private static class AuthorityComparator implements Comparator<GrantedAuthority>,\n            Serializable {\n        private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;\n\n        @Override\n        public int compare(GrantedAuthority g1, GrantedAuthority g2) {\n            // Neither should ever be null as each entry is checked before adding it to\n            // the set.\n            // If the authority is null, it is a custom authority and should precede\n            // others.\n            if (g2.getAuthority() == null) {\n                return -1;\n            }\n\n            if (g1.getAuthority() == null) {\n                return 1;\n            }\n\n            return g1.getAuthority().compareTo(g2.getAuthority());\n        }\n    }\n\n    /**\n     * Returns {@code true} if the supplied object is a {@code SimpleUser} instance with the\n     * same {@code username} value.\n     * <p>\n     * In other words, the objects are equal if they have the same username, representing\n     * the same principal.\n     */\n    @Override\n    public boolean equals(Object rhs) {\n        if (rhs instanceof SimpleUser) {\n            return username.equals(((SimpleUser) rhs).username);\n        }\n        return false;\n    }\n\n    /**\n     * Returns the hashcode of the {@code username}.\n     */\n    @Override\n    public int hashCode() {\n        return username.hashCode();\n    }\n\n    @Override\n    public String toString() {\n        StringBuilder sb = new StringBuilder();\n        sb.append(super.toString()).append(\": \");\n        sb.append(\"Id: \").append(this.id).append(\"; \");\n        sb.append(\"Username: \").append(this.username).append(\"; \");\n        sb.append(\"Password: [PROTECTED]; \");\n        sb.append(\"Enabled: \").append(this.enabled).append(\"; \");\n        sb.append(\"AccountNonExpired: \").append(this.accountNonExpired).append(\"; \");\n        sb.append(\"credentialsNonExpired: \").append(this.credentialsNonExpired)\n                .append(\"; \");\n        sb.append(\"AccountNonLocked: \").append(this.accountNonLocked).append(\"; \");\n\n        if (!authorities.isEmpty()) {\n            sb.append(\"Granted Authorities: \");\n\n            boolean first = true;\n            for (GrantedAuthority auth : authorities) {\n                if (!first) {\n                    sb.append(\",\");\n                }\n                first = false;\n\n                sb.append(auth);\n            }\n        } else {\n            sb.append(\"Not granted any authorities\");\n        }\n\n        return sb.toString();\n    }\n\n\n    public static SimpleUser.SimpleUserBuilder withId(Long id) {\n        return builder().id(id);\n    }\n\n    /**\n     * Creates a SimpleUserBuilder with a specified user name\n     *\n     * @param username the username to use\n     * @return the SimpleUserBuilder\n     */\n    public static SimpleUser.SimpleUserBuilder withUsername(String username) {\n        return builder().username(username);\n    }\n\n    /**\n     * Creates a SimpleUserBuilder\n     *\n     * @return the SimpleUserBuilder\n     */\n    public static SimpleUser.SimpleUserBuilder builder() {\n        return new SimpleUser.SimpleUserBuilder();\n    }\n\n    /**\n     * <p>\n     * <b>WARNING:</b> This method is considered unsafe for production and is only intended\n     * for sample applications.\n     * </p>\n     * <p>\n     * Creates a user and automatically encodes the provided password using\n     * {@code PasswordEncoderFactories.createDelegatingPasswordEncoder()}. For example:\n     * </p>\n     * <pre>\n     * <code>\n     * UserDetails user = SimpleUser.withDefaultPasswordEncoder()\n     *     .username(\"user\")\n     *     .password(\"password\")\n     *     .roles(\"USER\")\n     *     .build();\n     * // outputs {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG\n     * System.out.println(user.getPassword());\n     * </code>\n     * </pre>\n     * <p>\n     * This is not safe for production (it is intended for getting started experience)\n     * because the password \"password\" is compiled into the source code and then is\n     * included in memory at the time of creation. This means there are still ways to\n     * recover the plain text password making it unsafe. It does provide a slight\n     * improvement to using plain text passwords since the UserDetails password is\n     * securely hashed. This means if the UserDetails password is accidentally exposed,\n     * the password is securely stored.\n     * <p>\n     * In a production setting, it is recommended to hash the password ahead of time.\n     * For example:\n     *\n     * <pre>\n     * <code>\n     * PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();\n     * // outputs {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG\n     * // remember the password that is printed out and use in the next step\n     * System.out.println(encoder.encode(\"password\"));\n     * </code>\n     * </pre>\n     *\n     * <pre>\n     * <code>\n     * UserDetails user = SimpleUser.withUsername(\"user\")\n     *     .password(\"{bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG\")\n     *     .roles(\"USER\")\n     *     .build();\n     * </code>\n     * </pre>\n     *\n     * @return a SimpleUserBuilder that automatically encodes the password with the default\n     * PasswordEncoder\n     * @deprecated Using this method is not considered safe for production, but is\n     * acceptable for demos and getting started. For production purposes, ensure the\n     * password is encoded externally. See the method Javadoc for additional details.\n     * There are no plans to remove this support. It is deprecated to indicate\n     * that this is considered insecure for production purposes.\n     */\n    @Deprecated\n    public static SimpleUser.SimpleUserBuilder withDefaultPasswordEncoder() {\n        logger.warn(\"SimpleUser.withDefaultPasswordEncoder() is considered unsafe for production and is only intended for sample applications.\");\n        PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();\n        return builder().passwordEncoder(encoder::encode);\n    }\n\n    public static SimpleUser.SimpleUserBuilder withSimpleUserDetails(SimpleUserDetails simpleUserDetails) {\n        return withId(simpleUserDetails.getId())\n                .username(simpleUserDetails.getUsername())\n                .password(simpleUserDetails.getPassword())\n                .accountExpired(!simpleUserDetails.isAccountNonExpired())\n                .accountLocked(!simpleUserDetails.isAccountNonLocked())\n                .authorities(simpleUserDetails.getAuthorities())\n                .credentialsExpired(!simpleUserDetails.isCredentialsNonExpired())\n                .disabled(!simpleUserDetails.isEnabled());\n    }\n\n    /**\n     * Builds the user to be added. At minimum the username, password, and authorities\n     * should provided. The remaining attributes have reasonable defaults.\n     */\n    public static class SimpleUserBuilder {\n        private Long id;\n        private String username;\n        private String password;\n        private List<GrantedAuthority> authorities;\n        private boolean accountExpired;\n        private boolean accountLocked;\n        private boolean credentialsExpired;\n        private boolean disabled;\n        private Function<String, String> passwordEncoder = password -> password;\n\n        /**\n         * Creates a new instance\n         */\n        private SimpleUserBuilder() {\n        }\n\n\n        public SimpleUser.SimpleUserBuilder id(Long id) {\n            Assert.notNull(id, \"id cannot be null\");\n            this.id = id;\n            return this;\n        }\n\n        /**\n         * Populates the username. This attribute is required.\n         *\n         * @param username the username. Cannot be null.\n         * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate\n         * additional attributes for this user)\n         */\n        public SimpleUser.SimpleUserBuilder username(String username) {\n            Assert.notNull(username, \"username cannot be null\");\n            this.username = username;\n            return this;\n        }\n\n        /**\n         * Populates the password. This attribute is required.\n         *\n         * @param password the password. Cannot be null.\n         * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate\n         * additional attributes for this user)\n         */\n        public SimpleUser.SimpleUserBuilder password(String password) {\n            Assert.notNull(password, \"password cannot be null\");\n            this.password = password;\n            return this;\n        }\n\n        /**\n         * Encodes the current password (if non-null) and any future passwords supplied\n         * to {@link #password(String)}.\n         *\n         * @param encoder the encoder to use\n         * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate\n         * additional attributes for this user)\n         */\n        public SimpleUser.SimpleUserBuilder passwordEncoder(Function<String, String> encoder) {\n            Assert.notNull(encoder, \"encoder cannot be null\");\n            this.passwordEncoder = encoder;\n            return this;\n        }\n\n        /**\n         * Populates the roles. This method is a shortcut for calling\n         * {@link #authorities(String...)}, but automatically prefixes each entry with\n         * \"ROLE_\". This means the following:\n         *\n         * <code>\n         * builder.roles(\"USER\",\"ADMIN\");\n         * </code>\n         * <p>\n         * is equivalent to\n         *\n         * <code>\n         * builder.authorities(\"ROLE_USER\",\"ROLE_ADMIN\");\n         * </code>\n         *\n         * <p>\n         * This attribute is required, but can also be populated with\n         * {@link #authorities(String...)}.\n         * </p>\n         *\n         * @param roles the roles for this user (i.e. USER, ADMIN, etc). Cannot be null,\n         *              contain null values or start with \"ROLE_\"\n         * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate\n         * additional attributes for this user)\n         */\n        public SimpleUser.SimpleUserBuilder roles(String... roles) {\n            List<GrantedAuthority> authorities = new ArrayList<>(\n                    roles.length);\n            for (String role : roles) {\n                Assert.isTrue(!role.startsWith(\"ROLE_\"), () -> role\n                        + \" cannot start with ROLE_ (it is automatically added)\");\n                authorities.add(new SimpleGrantedAuthority(\"ROLE_\" + role));\n            }\n            return authorities(authorities);\n        }\n\n        /**\n         * Populates the authorities. This attribute is required.\n         *\n         * @param authorities the authorities for this user. Cannot be null, or contain\n         *                    null values\n         * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate\n         * additional attributes for this user)\n         * @see #roles(String...)\n         */\n        public SimpleUser.SimpleUserBuilder authorities(GrantedAuthority... authorities) {\n            return authorities(Arrays.asList(authorities));\n        }\n\n        /**\n         * Populates the authorities. This attribute is required.\n         *\n         * @param authorities the authorities for this user. Cannot be null, or contain\n         *                    null values\n         * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate\n         * additional attributes for this user)\n         * @see #roles(String...)\n         */\n        public SimpleUser.SimpleUserBuilder authorities(Collection<? extends GrantedAuthority> authorities) {\n            this.authorities = new ArrayList<>(authorities);\n            return this;\n        }\n\n        /**\n         * Populates the authorities. This attribute is required.\n         *\n         * @param authorities the authorities for this user (i.e. ROLE_USER, ROLE_ADMIN,\n         *                    etc). Cannot be null, or contain null values\n         * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate\n         * additional attributes for this user)\n         * @see #roles(String...)\n         */\n        public SimpleUser.SimpleUserBuilder authorities(String... authorities) {\n            return authorities(AuthorityUtils.createAuthorityList(authorities));\n        }\n\n        /**\n         * Defines if the account is expired or not. Default is false.\n         *\n         * @param accountExpired true if the account is expired, false otherwise\n         * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate\n         * additional attributes for this user)\n         */\n        public SimpleUser.SimpleUserBuilder accountExpired(boolean accountExpired) {\n            this.accountExpired = accountExpired;\n            return this;\n        }\n\n        /**\n         * Defines if the account is locked or not. Default is false.\n         *\n         * @param accountLocked true if the account is locked, false otherwise\n         * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate\n         * additional attributes for this user)\n         */\n        public SimpleUser.SimpleUserBuilder accountLocked(boolean accountLocked) {\n            this.accountLocked = accountLocked;\n            return this;\n        }\n\n        /**\n         * Defines if the credentials are expired or not. Default is false.\n         *\n         * @param credentialsExpired true if the credentials are expired, false otherwise\n         * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate\n         * additional attributes for this user)\n         */\n        public SimpleUser.SimpleUserBuilder credentialsExpired(boolean credentialsExpired) {\n            this.credentialsExpired = credentialsExpired;\n            return this;\n        }\n\n        /**\n         * Defines if the account is disabled or not. Default is false.\n         *\n         * @param disabled true if the account is disabled, false otherwise\n         * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate\n         * additional attributes for this user)\n         */\n        public SimpleUser.SimpleUserBuilder disabled(boolean disabled) {\n            this.disabled = disabled;\n            return this;\n        }\n\n        public SimpleUserDetails build() {\n            String encodedPassword = this.passwordEncoder.apply(password);\n            return new SimpleUser(id, username, encodedPassword, !disabled, !accountExpired,\n                    !credentialsExpired, !accountLocked, authorities);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/security/SimpleUserDetails.java",
    "content": "package com.godcheese.nimrod.common.security;\n\nimport org.springframework.security.core.GrantedAuthority;\nimport org.springframework.security.core.userdetails.UserDetails;\n\nimport java.io.Serializable;\nimport java.util.Collection;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-04-14\n */\npublic interface SimpleUserDetails extends UserDetails, Serializable {\n\n    /**\n     * 权限\n     *\n     * @return\n     */\n    @Override\n    Collection<? extends GrantedAuthority> getAuthorities();\n\n    /**\n     * 密码\n     *\n     * @return\n     */\n    @Override\n    String getPassword();\n\n    /**\n     * id\n     *\n     * @return\n     */\n    Long getId();\n\n    /**\n     * 用户名\n     *\n     * @return\n     */\n    @Override\n    String getUsername();\n\n    /**\n     * 账号是否未过期\n     *\n     * @return\n     */\n    @Override\n    boolean isAccountNonExpired();\n\n    /**\n     * 账号是否未锁定\n     *\n     * @return\n     */\n    @Override\n    boolean isAccountNonLocked();\n\n    /**\n     * 凭证是否未过期\n     *\n     * @return\n     */\n    @Override\n    boolean isCredentialsNonExpired();\n\n    /**\n     * 是否启用\n     *\n     * @return\n     */\n    @Override\n    boolean isEnabled();\n    // ~ Methods\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/security/SimpleUserDetailsServiceImpl.java",
    "content": "package com.godcheese.nimrod.common.security;\n\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.common.properties.AppProperties;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.nimrod.user.entity.RoleAuthorityEntity;\nimport com.godcheese.nimrod.user.entity.RoleEntity;\nimport com.godcheese.nimrod.user.entity.UserEntity;\nimport com.godcheese.nimrod.user.entity.UserRoleEntity;\nimport com.godcheese.nimrod.user.mapper.RoleAuthorityMapper;\nimport com.godcheese.nimrod.user.mapper.RoleMapper;\nimport com.godcheese.nimrod.user.mapper.UserMapper;\nimport com.godcheese.nimrod.user.mapper.UserRoleMapper;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.security.core.Authentication;\nimport org.springframework.security.core.GrantedAuthority;\nimport org.springframework.security.core.authority.SimpleGrantedAuthority;\nimport org.springframework.security.core.context.SecurityContextHolder;\nimport org.springframework.security.core.context.SecurityContextImpl;\nimport org.springframework.security.core.userdetails.UserDetails;\nimport org.springframework.security.core.userdetails.UserDetailsService;\nimport org.springframework.security.core.userdetails.UsernameNotFoundException;\nimport org.springframework.stereotype.Service;\n\nimport javax.servlet.http.HttpServletRequest;\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class SimpleUserDetailsServiceImpl implements UserDetailsService {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleUserDetailsServiceImpl.class);\n    /**\n     * 内置 SYSTEM_ADMIN。与数据库中的 SYSTEM_ADMIN 角色不一致，用户登录时，系统会提取 properties 中 app.system-admin-role 值与用户所赋予角色相比较，如若用户赋予角色在 app.system-admin-role 中存在，则将次内置 SYSTEM_ADMIN 赋予到此用户角色中。\n     */\n    public static final String SYSTEM_ADMIN = \"BUILD_IN_SYSTEM_ADMIN_FLAG\";\n\n    /**\n     * 角色前缀，Spring Security 角色会自带 ROLE_ 前缀\n     */\n    public static final String ROLE_PREFIX = \"ROLE_\";\n\n    @Autowired\n    private AppProperties appProperties;\n\n    @Autowired\n    private UserMapper userMapper;\n\n    @Autowired\n    private RoleMapper roleMapper;\n\n    @Autowired\n    private UserRoleMapper userRoleMapper;\n\n    @Autowired\n    private RoleAuthorityMapper roleAuthorityMapper;\n\n    @Autowired\n    private DictionaryService dictionaryService;\n\n    private static final String IS_OR_NOT = \"IS_OR_NOT\";\n    private static final String IS = \"IS\";\n\n    private UserEntity userEntity;\n\n    @Override\n    @OperationLog(value = \"用户名登录\", type = OperationLogType.API)\n    public SimpleUserDetails loadUserByUsername(String account) {\n        // 从数据库中获取 user 实体\n        UserEntity userEntity = userMapper.getOneByUsername(account);\n        if (userEntity == null) {\n            throw new UsernameNotFoundException(\"Account \" + account + \" not found\");\n        }\n        boolean enabled = true;\n        List<SimpleGrantedAuthority> simpleGrantedAuthorityList = listAllSimpleGrantedAuthorityByUserId(userEntity.getId());\n        for (SimpleGrantedAuthority simpleGrantedAuthority : simpleGrantedAuthorityList) {\n            LOGGER.info(\"simpleGrantedAuthority.getAuthority={}\", simpleGrantedAuthority.getAuthority());\n        }\n        if (userEntity.getEnabled() == null || !userEntity.getEnabled().equals(Integer.valueOf(String.valueOf(dictionaryService.get(IS_OR_NOT, IS))))) {\n            boolean isExistSystemAdminRole = false;\n            for (SimpleGrantedAuthority simpleGrantedAuthority : simpleGrantedAuthorityList) {\n                if (simpleGrantedAuthority.getAuthority().equals(ROLE_PREFIX + SYSTEM_ADMIN)) {\n                    isExistSystemAdminRole = true;\n                }\n            }\n            if (!isExistSystemAdminRole) {\n                enabled = false;\n            }\n        }\n\n//        if(disabled) {\n//            throw new UsernameNotFoundException(\"The account is disabled.\");\n//        }\n\n//        LOGGER.info(\"disabled={}\", disabled);\n\n//        return new SimpleUser(userEntity.getId(), userEntity.getUsername(), userEntity.getPassword(), simpleGrantedAuthorityList);\n        this.userEntity = userEntity;\n        return SimpleUser.builder().id(userEntity.getId()).username(userEntity.getUsername()).password(userEntity.getPassword()).authorities(simpleGrantedAuthorityList).disabled(!enabled).build();\n    }\n\n    public UserEntity getUserEntity() {\n        return userEntity;\n    }\n\n    /**\n     * 角色是否存在\n     *\n     * @param roleValue 角色值\n     * @return boolean\n     */\n    private boolean isExistSystemAdminRole(String roleValue) {\n        List<String> roleList = appProperties.getSystemAdminRole();\n        if (roleList != null && !roleList.isEmpty()) {\n            for (String role : roleList) {\n                if (roleValue.equals(role)) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    /**\n     * 列出用户所拥有的角色和角色权限\n     *\n     * @param userId 用户 id\n     * @return List<SimpleGrantedAuthority>\n     */\n    private List<SimpleGrantedAuthority> listAllSimpleGrantedAuthorityByUserId(Long userId) {\n        List<UserRoleEntity> userRoleEntityList = userRoleMapper.listAllByUserId(userId);\n        List<SimpleGrantedAuthority> simpleGrantedAuthorityList = new ArrayList<>();\n        // 装载角色\n        List<SimpleGrantedAuthority> simpleGrantedAuthorityList1 = new ArrayList<>();\n        // 装载角色对应的权限\n        List<SimpleGrantedAuthority> simpleGrantedAuthorityList2;\n        if (userRoleEntityList != null) {\n            boolean isExistSystemAdminRole = false;\n            for (UserRoleEntity userRoleEntity : userRoleEntityList) {\n                RoleEntity roleEntity = roleMapper.getOne(userRoleEntity.getRoleId());\n                if (roleEntity != null) {\n                    // 读取和装载角色\n                    Long roleId = roleEntity.getId();\n                    String roleValue = roleEntity.getValue().toUpperCase();\n                    if (isExistSystemAdminRole(roleValue)) {\n                        isExistSystemAdminRole = true;\n                    }\n                    simpleGrantedAuthorityList1.add(new SimpleGrantedAuthority(ROLE_PREFIX + roleValue));\n                    // 读取和装载角色权限\n                    simpleGrantedAuthorityList2 = listAllSimpleGrantedAuthorityByRoleId(roleId);\n                    if (!simpleGrantedAuthorityList2.isEmpty()) {\n                        simpleGrantedAuthorityList1.addAll(simpleGrantedAuthorityList2);\n                    }\n                }\n            }\n            // 检查是否有重复的 ROLE_SYSTEM_ADMIN\n            int i = 0;\n            for (SimpleGrantedAuthority simpleGrantedAuthority : simpleGrantedAuthorityList1) {\n                i++;\n                if (!simpleGrantedAuthority.getAuthority().equals(ROLE_PREFIX + SYSTEM_ADMIN) && (i == simpleGrantedAuthorityList1.size()) && isExistSystemAdminRole) {\n                    simpleGrantedAuthorityList.add(new SimpleGrantedAuthority(ROLE_PREFIX + SYSTEM_ADMIN));\n                }\n            }\n        }\n        simpleGrantedAuthorityList.addAll(simpleGrantedAuthorityList1);\n        return simpleGrantedAuthorityList;\n    }\n\n    /**\n     * 列出角色所拥有的权限\n     *\n     * @param roleId 角色 id\n     * @return List<SimpleGrantedAuthority>\n     */\n    private List<SimpleGrantedAuthority> listAllSimpleGrantedAuthorityByRoleId(Long roleId) {\n        List<SimpleGrantedAuthority> simpleGrantedAuthorityList = new ArrayList<>();\n        List<RoleAuthorityEntity> roleAuthorityEntityList = roleAuthorityMapper.listAllByRoleId(roleId);\n        if (roleAuthorityEntityList != null) {\n            for (RoleAuthorityEntity roleAuthorityEntity : roleAuthorityEntityList) {\n                simpleGrantedAuthorityList.add(new SimpleGrantedAuthority(roleAuthorityEntity.getAuthority().toUpperCase()));\n            }\n        }\n        return simpleGrantedAuthorityList;\n    }\n\n    public static SimpleUser getCurrentSimpleUser() {\n        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();\n        if (authentication != null) {\n            Object principal = authentication.getPrincipal();\n            if (principal instanceof UserDetails) {\n                return (SimpleUser) principal;\n            }\n        }\n        return null;\n    }\n\n    public static SimpleUser getCurrentSimpleUser(HttpServletRequest request) {\n        SecurityContextImpl securityContextImpl = (SecurityContextImpl) request.getSession().getAttribute(\"SPRING_SECURITY_CONTEXT\");\n        Authentication authentication;\n        if (securityContextImpl != null) {\n            authentication = securityContextImpl.getAuthentication();\n        } else {\n            authentication = SecurityContextHolder.getContext().getAuthentication();\n        }\n        if (authentication != null) {\n            Object principal = authentication.getPrincipal();\n            if (principal instanceof UserDetails) {\n                return (SimpleUser) principal;\n            }\n        }\n        return null;\n    }\n\n    /**\n     * 检测是否存在权限或系统管理员角色\n     *\n     * @param authorities\n     * @param authority\n     * @return\n     */\n    public static boolean isExistsAuthority(Collection<GrantedAuthority> authorities, String authority) {\n        for (GrantedAuthority grantedAuthority : authorities) {\n            if (grantedAuthority.getAuthority().equals(authority) || grantedAuthority.getAuthority().equals(ROLE_PREFIX + SYSTEM_ADMIN)) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/security/VerifyCodeFilter.java",
    "content": "package com.godcheese.nimrod.common.security;\n\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.tile.util.ImageUtil;\nimport com.godcheese.nimrod.system.api.SystemRestController;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.security.core.AuthenticationException;\nimport org.springframework.stereotype.Component;\nimport org.springframework.web.filter.OncePerRequestFilter;\n\nimport javax.servlet.FilterChain;\nimport javax.servlet.ServletException;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport javax.servlet.http.HttpSession;\nimport java.io.IOException;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component\npublic class VerifyCodeFilter extends OncePerRequestFilter {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(VerifyCodeFilter.class);\n\n    @Autowired\n    private AuthenticationFailureHandler authenticationFailureHandler;\n\n    @Override\n    protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {\n        try {\n            verifyCodeCheck(httpServletRequest);\n        } catch (VerifyCodeCheckException e) {\n            e.printStackTrace();\n            authenticationFailureHandler.onAuthenticationFailure(httpServletRequest, httpServletResponse, e);\n        }\n        filterChain.doFilter(httpServletRequest, httpServletResponse);\n    }\n\n    private void verifyCodeCheck(HttpServletRequest httpServletRequest) throws VerifyCodeCheckException {\n        if (httpServletRequest.getRequestURI().equalsIgnoreCase(httpServletRequest.getContextPath() + User.Api.LOGIN)) {\n            HttpSession httpSession = httpServletRequest.getSession();\n            ImageUtil.VerifyCodeImage verifyCodeImage = (ImageUtil.VerifyCodeImage) httpSession.getAttribute(SystemRestController.VERIFY_CODE_NAME);\n            String requestVerifyCode = httpServletRequest.getParameter(SystemRestController.VERIFY_CODE_NAME);\n\n            if (requestVerifyCode == null || \"\".equals(requestVerifyCode) || verifyCodeImage == null) {\n                throw new VerifyCodeCheckException(\"验码不正确\");\n            } else if (verifyCodeImage.isExpire()) {\n                throw new VerifyCodeCheckException(\"验证码已过期\");\n            } else if (!requestVerifyCode.equalsIgnoreCase(verifyCodeImage.getVerifyCode().toLowerCase())) {\n                httpSession.removeAttribute(SystemRestController.VERIFY_CODE_NAME);\n                throw new VerifyCodeCheckException(\"验证码不正确\");\n            }\n        }\n    }\n\n    public class VerifyCodeCheckException extends AuthenticationException {\n        private static final long serialVersionUID = 7399186031568040869L;\n\n        public VerifyCodeCheckException(String msg) {\n            super(msg);\n        }\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/security/WebSecurityConfiguration.java",
    "content": "package com.godcheese.nimrod.common.security;\n\nimport com.godcheese.nimrod.common.Url;\nimport com.godcheese.nimrod.common.druid.DruidConfiguration;\nimport com.godcheese.nimrod.system.System;\nimport com.godcheese.nimrod.user.User;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.beans.factory.annotation.Qualifier;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;\nimport org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;\nimport org.springframework.security.config.annotation.web.builders.HttpSecurity;\nimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;\nimport org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;\nimport org.springframework.security.core.userdetails.UserDetailsService;\nimport org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;\nimport org.springframework.security.crypto.password.PasswordEncoder;\nimport org.springframework.security.web.authentication.AuthenticationSuccessHandler;\nimport org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Configuration\n@EnableWebSecurity\n@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)\npublic class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(WebSecurityConfiguration.class);\n\n    @Autowired\n    @Qualifier(\"simpleUserDetailsServiceImpl\")\n    private UserDetailsService userDetailsService;\n\n    @Autowired\n    private VerifyCodeFilter verifyCodeFilter;\n\n    @Autowired\n    private AuthenticationFailureHandler authenticationFailureHandler;\n\n    @Autowired\n    private AuthenticationSuccessHandler authenticationSuccessHandler;\n\n    @Autowired\n    private LogoutSuccessHandler logoutSuccessHandler;\n\n    @Override\n    protected void configure(AuthenticationManagerBuilder auth) throws Exception {\n        auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());\n    }\n\n    @Override\n    protected void configure(HttpSecurity http) throws Exception {\n\n//        if(appProperties.getPermitUrl() != null){\n//            http.authorizeRequests().antMatchers(appProperties.getPermitUrl()).permitAll();\n//        }\n\n//        LOGGER.info(\"appProperties.getPermitUrl={}\", appProperties.getPermitUrl());\n\n//                http.authorizeRequests().antMatchers(\"/api/system/dictionary/list_all_by_key/IS_OR_NOT\").permitAll();\n\n        // 禁用 csrf，建议不要禁用 csrf\n        http.csrf().disable().anonymous();\n\n        // 解决 in a frame because it set 'X-Frame-Options' to 'deny'. 问题\n        http.headers().frameOptions().disable();\n\n        // 添加验证码校验过滤器\n        http.addFilterBefore(verifyCodeFilter, UsernamePasswordAuthenticationFilter.class).authorizeRequests().antMatchers(System.Api.VERIFY_CODE).permitAll();\n\n        // Druid 需要权限或者系统管理员角色才能访问\n        http.authorizeRequests().antMatchers(DruidConfiguration.DRUID_URL).hasAnyAuthority(SimpleUserDetailsServiceImpl.ROLE_PREFIX + SYSTEM_ADMIN, DruidConfiguration.DRUID_URL.toUpperCase());\n\n        http.authorizeRequests()\n                // 静态资源 url，无需登录认证权限直接访问\n                .antMatchers(Url.STATIC).permitAll()\n                // 登录页，无需登录认证权限直接访问\n                .antMatchers(User.Page.LOGIN).permitAll()\n                .antMatchers(\"/api/system/dictionary/list_all_by_key/IS_OR_NOT\").permitAll()\n                // 其它请求均需要权限认证\n                .anyRequest().authenticated();\n\n        // 开启表单登录，设置登录页 url\n        http.formLogin().loginPage(User.Page.LOGIN).usernameParameter(User.Page.LOGIN_ACCOUNT_STRING).passwordParameter(User.Page.LOGIN_PASSWORD_STRING)\n                // 自定义登录表单提交 url\n                .loginProcessingUrl(User.Api.LOGIN)\n                // 登录成功处理，登录成功，返回 status 200， json 返回 SimpleUser\n                .successHandler(authenticationSuccessHandler)\n                // 登录失败处理，登录失败，返回 status 404， json 返回失败提示\n                .failureHandler(authenticationFailureHandler).and()\n                // 开启记住我功能， cookie 保存登录数据，cookie 7 天有效\n                .rememberMe().tokenValiditySeconds(60 * 60 * 60 * 24 * 7).rememberMeParameter(User.Page.LOGIN_REMEMBER_ME_STRING).and()\n                // 注销\n                .logout().logoutUrl(User.Api.LOGOUT).logoutSuccessHandler(logoutSuccessHandler).deleteCookies(\"JSESSIONID\", \"remember-me\");\n\n//         一个帐号只允许同时在线一个 session\n        http.sessionManagement().sessionAuthenticationFailureHandler(authenticationFailureHandler).maximumSessions(20).expiredUrl(User.Page.LOGIN);\n    }\n\n\n//    @Bean\n//    GrantedAuthorityDefaults grantedAuthorityDefaults(){\n//        return new GrantedAuthorityDefaults(\"\");//remove the ROLE_ prefix\n//    }\n\n    @Bean\n    public PasswordEncoder passwordEncoder() {\n        return new BCryptPasswordEncoder();\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/thymeleaf/NimrodDialect.java",
    "content": "package com.godcheese.nimrod.common.thymeleaf;\n\n\nimport org.springframework.stereotype.Component;\nimport org.thymeleaf.dialect.AbstractProcessorDialect;\nimport org.thymeleaf.processor.IProcessor;\nimport org.thymeleaf.standard.StandardDialect;\n\nimport java.util.HashSet;\nimport java.util.Set;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-09-23\n */\n@Component\npublic class NimrodDialect extends AbstractProcessorDialect {\n\n    private static final String NAME = \"Nimrod Dialect\";\n    private static final String PREFIX = \"nimrod\";\n\n    protected NimrodDialect() {\n        super(NAME, PREFIX, StandardDialect.PROCESSOR_PRECEDENCE);\n    }\n\n    @Override\n    public Set<IProcessor> getProcessors(String s) {\n        final Set<IProcessor> processors = new HashSet<>();\n        processors.add(new SecurityAuthorityElementProcessor(s));\n        return processors;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/common/thymeleaf/SecurityAuthorityElementProcessor.java",
    "content": "package com.godcheese.nimrod.common.thymeleaf;\n\nimport com.godcheese.nimrod.common.security.SimpleUser;\nimport com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl;\nimport com.godcheese.tile.util.StringUtil;\nimport org.thymeleaf.context.ITemplateContext;\nimport org.thymeleaf.context.WebEngineContext;\nimport org.thymeleaf.model.IAttribute;\nimport org.thymeleaf.model.IProcessableElementTag;\nimport org.thymeleaf.processor.element.AbstractElementTagProcessor;\nimport org.thymeleaf.processor.element.IElementTagStructureHandler;\nimport org.thymeleaf.standard.StandardDialect;\nimport org.thymeleaf.templatemode.TemplateMode;\n\nimport javax.servlet.http.HttpServletRequest;\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-09-23\n */\npublic class SecurityAuthorityElementProcessor extends AbstractElementTagProcessor {\n\n    private static final String ELEMENT_NAME = \"security\";\n    private static final String AUTHORITY_ATTRIBUTE_NAME = \"authority\";\n    private static final String ROLE_ATTRIBUTE_NAME = \"role\";\n    private static final String COMMA_MARK = \",\";\n\n    public SecurityAuthorityElementProcessor(String dialectPrefix) {\n        super(TemplateMode.HTML, dialectPrefix, ELEMENT_NAME, true, null, false, StandardDialect.PROCESSOR_PRECEDENCE);\n    }\n\n    @Override\n    protected void doProcess(ITemplateContext iTemplateContext, IProcessableElementTag iProcessableElementTag, IElementTagStructureHandler iElementTagStructureHandler) {\n        WebEngineContext context2 = (WebEngineContext) iTemplateContext;\n        HttpServletRequest request = context2.getRequest();\n        SimpleUser simpleUser = SimpleUserDetailsServiceImpl.getCurrentSimpleUser(request);\n        boolean hasAuthority = false;\n        if (simpleUser != null) {\n            List<String> authorityList = new ArrayList<>(1);\n            IAttribute authority = iProcessableElementTag.getAttribute(AUTHORITY_ATTRIBUTE_NAME);\n            if (authority != null) {\n                String value = authority.getValue().toUpperCase();\n                if (value.contains(COMMA_MARK)) {\n                    authorityList = StringUtil.splitAsList(value, COMMA_MARK);\n                } else {\n                    authorityList.add(value);\n                }\n            }\n            List<String> roleList = new ArrayList<>(1);\n            IAttribute role = iProcessableElementTag.getAttribute(ROLE_ATTRIBUTE_NAME);\n            if (role != null) {\n                String value = role.getValue().toUpperCase();\n                if (value.contains(COMMA_MARK)) {\n                    roleList = StringUtil.splitAsList(value, COMMA_MARK);\n                } else {\n                    roleList.add(value);\n                }\n            }\n            for (String a : authorityList) {\n                if (SimpleUserDetailsServiceImpl.isExistsAuthority(simpleUser.getAuthorities(), a)) {\n                    hasAuthority = true;\n                }\n            }\n            for (String a : roleList) {\n                a = SimpleUserDetailsServiceImpl.ROLE_PREFIX + a;\n                if (SimpleUserDetailsServiceImpl.isExistsAuthority(simpleUser.getAuthorities(), a)) {\n                    hasAuthority = true;\n                }\n            }\n        }\n        if (hasAuthority) {\n            iElementTagStructureHandler.removeTags();\n        } else {\n            iElementTagStructureHandler.removeElement();\n        }\n    }\n\n    @Override\n    public int hashCode() {\n        return super.hashCode();\n    }\n\n    @Override\n    public boolean equals(Object obj) {\n        return super.equals(obj);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/mail/Mail.java",
    "content": "package com.godcheese.nimrod.mail;\n\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-01-18\n */\npublic class Mail {\n\n    public static class Page {\n        public static final String MAIL = \"/mail\";\n    }\n\n    public static class Api {\n        public static final String MAIL = com.godcheese.nimrod.common.Url.API + Mail.Page.MAIL;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/mail/api/MailRestController.java",
    "content": "package com.godcheese.nimrod.mail.api;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.mail.Mail;\nimport com.godcheese.nimrod.mail.entity.MailEntity;\nimport com.godcheese.nimrod.mail.service.MailService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(Mail.Api.MAIL)\npublic class MailRestController {\n\n    private static final String MAIL = \"/API/MAIL\";\n\n    @Autowired\n    private MailService mailService;\n\n    /**\n     * 新增电子邮件\n     *\n     * @param from    发件人电子邮箱\n     * @param to      收件人电子邮箱\n     * @param subject 电子邮件主题\n     * @param text    电子邮件文本内容\n     * @param html    电子邮件是否为 html\n     * @param remark  备注\n     * @return ResponseEntity<MailEntity>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + MAIL + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<MailEntity> addOne(@RequestParam String from, @RequestParam String to, @RequestParam String subject, @RequestParam String text, @RequestParam Integer html, @RequestParam String remark) throws BaseResponseException {\n        MailEntity mailEntity = new MailEntity();\n        mailEntity.setFrom(from);\n        mailEntity.setTo(to);\n        mailEntity.setSubject(subject);\n        mailEntity.setText(text);\n        mailEntity.setHtml(html);\n        mailEntity.setRemark(remark);\n        MailEntity mailEntity1 = mailService.addOne(mailEntity);\n        return new ResponseEntity<>(mailEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定队列电子邮件 id，批量删除队列电子邮件\n     *\n     * @param idList 电子邮件 id list\n     * @return ResponseEntity<Integer>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + MAIL + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) {\n        return new ResponseEntity<>(mailService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定电子邮件 id，获取电子邮件\n     *\n     * @param id 电子邮件 id\n     * @return ResponseEntity<MailEntity>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + MAIL + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<MailEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(mailService.getOne(id), HttpStatus.OK);\n    }\n\n    /**\n     * 分页获取所有电子邮件队列\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return ResponseEntity<Pagination < MailEntity>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + MAIL + \"/PAGE_ALL')\")\n    @GetMapping(value = \"/page_all\")\n    public ResponseEntity<Pagination<MailEntity>> pageAll(@RequestParam Integer page, @RequestParam Integer rows) {\n        return new ResponseEntity<>(mailService.pageAll(page, rows), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/mail/controller/MailController.java",
    "content": "package com.godcheese.nimrod.mail.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.mail.Mail;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(Mail.Page.MAIL)\npublic class MailController {\n\n    /**\n     * 发送邮件 页面\n     *\n     * @return String\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/MAIL/SEND')\")\n    @RequestMapping(\"/send\")\n    public String send() {\n        return Common.trimSlash(Mail.Page.MAIL + \"/send\");\n    }\n\n    /**\n     * 编辑重发 对话框\n     *\n     * @return String\n     */\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/send_dialog\")\n    public String sendDialog() {\n        return Common.trimSlash(Mail.Page.MAIL + \"/send_dialog\");\n    }\n\n    /**\n     * 编辑重发 对话框\n     *\n     * @return String\n     */\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/view_dialog\")\n    public String viewDialog() {\n        return Common.trimSlash(Mail.Page.MAIL + \"/view_dialog\");\n    }\n\n    /**\n     * 邮件队列 页面\n     *\n     * @return String\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/MAIL/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(Mail.Page.MAIL + \"/list\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/mail/entity/MailEntity.java",
    "content": "package com.godcheese.nimrod.mail.entity;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class MailEntity implements Serializable {\n\n    private static final long serialVersionUID = -9011780467794520270L;\n\n    private Long id;\n    /**\n     * 发信状态\n     */\n    private Integer status;\n    /**\n     * 发件人\n     */\n    private String from;\n    /**\n     * 收件人\n     */\n    private String to;\n    /**\n     * 主题\n     */\n    private String subject;\n    /**\n     * 内容\n     */\n    private String text;\n    /**\n     * 是否为 HTML\n     */\n    private Integer html;\n    /**\n     * 发信报错信息\n     */\n    private String error;\n    /**\n     * 备注\n     */\n    private String remark;\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public Integer getStatus() {\n        return status;\n    }\n\n    public void setStatus(Integer status) {\n        this.status = status;\n    }\n\n    public String getFrom() {\n        return from;\n    }\n\n    public void setFrom(String from) {\n        this.from = from;\n    }\n\n    public String getTo() {\n        return to;\n    }\n\n    public void setTo(String to) {\n        this.to = to;\n    }\n\n    public String getSubject() {\n        return subject;\n    }\n\n    public void setSubject(String subject) {\n        this.subject = subject;\n    }\n\n    public String getText() {\n        return text;\n    }\n\n    public void setText(String text) {\n        this.text = text;\n    }\n\n    public Integer getHtml() {\n        return html;\n    }\n\n    public void setHtml(Integer html) {\n        this.html = html;\n    }\n\n    public String getError() {\n        return error;\n    }\n\n    public void setError(String error) {\n        this.error = error;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n\n    @Override\n    public String toString() {\n        return \"MailEntity{\" +\n                \"id=\" + id +\n                \", status=\" + status +\n                \", from='\" + from + '\\'' +\n                \", to='\" + to + '\\'' +\n                \", subject='\" + subject + '\\'' +\n                \", text='\" + text + '\\'' +\n                \", html=\" + html +\n                \", error='\" + error + '\\'' +\n                \", remark='\" + remark + '\\'' +\n                \", gmtModified=\" + gmtModified +\n                \", gmtCreated=\" + gmtCreated +\n                '}';\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/mail/entity/MailFileEntity.java",
    "content": "package com.godcheese.nimrod.mail.entity;\n\nimport java.io.Serializable;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class MailFileEntity implements Serializable {\n\n    private static final long serialVersionUID = 2954101699588684202L;\n\n    private Long id;\n    private Long mailId;\n    private Long fileId;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public Long getMailId() {\n        return mailId;\n    }\n\n    public void setMailId(Long mailId) {\n        this.mailId = mailId;\n    }\n\n    public Long getFileId() {\n        return fileId;\n    }\n\n    public void setFileId(Long fileId) {\n        this.fileId = fileId;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/mail/mapper/MailMapper.java",
    "content": "package com.godcheese.nimrod.mail.mapper;\n\nimport com.godcheese.nimrod.mail.entity.MailEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport com.github.pagehelper.Page;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"mailMapper\")\n@Mapper\npublic interface MailMapper extends CrudMapper<MailEntity, Long> {\n\n    /**\n     * 分页获取所有电子邮件\n     *\n     * @return Page<MailEntity>\n     */\n    Page<MailEntity> pageAll();\n\n    /**\n     * 指定状态 list，获取所有电子邮件\n     *\n     * @param statusList 状态 list\n     * @return List<MailEntity>\n     */\n    List<MailEntity> listAllByStatus(@Param(\"statusList\") List<Integer> statusList);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/mail/mapper/MailMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.mail.mapper.MailMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.mail.entity.MailEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"status\" property=\"status\" jdbcType=\"INTEGER\"/> <!-- 发信状态 -->\n        <result column=\"from\" property=\"from\" jdbcType=\"VARCHAR\"/> <!-- 发件人 -->\n        <result column=\"to\" property=\"to\" jdbcType=\"VARCHAR\"/> <!-- 收件人 -->\n        <result column=\"subject\" property=\"subject\" jdbcType=\"VARCHAR\"/> <!-- 主题 -->\n        <result column=\"text\" property=\"text\" jdbcType=\"LONGVARCHAR\"/> <!-- 内容 -->\n        <result column=\"html\" property=\"html\" jdbcType=\"INTEGER\"/> <!-- 是否为 html，0=否，1=是 -->\n        <result column=\"error\" property=\"error\" jdbcType=\"LONGVARCHAR\"/> <!-- 发信报错信息 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `mail`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `status`, `from`, `to`, `subject`, `text`, `html`, `error`, `remark`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.mail.entity.MailEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `status`, `from`, `to`, `subject`, `text`, `html`, `error`, `remark`, `gmt_modified`, `gmt_created`)\n        values (#{id}, #{status}, #{from}, #{to}, #{subject}, #{text}, #{html}, #{error}, #{remark}, #{gmtModified},\n        #{gmtCreated})\n    </insert>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.mail.entity.MailEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `status` = #{status}, `from` = #{from}, `to` = #{to}, `subject` = #{subject}, `text` = #{text}, `html` =\n        #{html}, `error` = #{error}, `remark` = #{remark}, `gmt_modified` = #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"pageAll\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"listAllByStatus\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `status` in\n        (\n        <foreach collection=\"statusList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </select>\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/mail/service/MailService.java",
    "content": "package com.godcheese.nimrod.mail.service;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.mail.entity.MailEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\n\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface MailService {\n\n    /**\n     * 新增邮件\n     *\n     * @param mailEntity MailEntity\n     * @return MailEntity\n     * @throws BaseResponseException BaseResponseException\n     */\n    MailEntity addOne(MailEntity mailEntity) throws BaseResponseException;\n\n    /**\n     * 指定队列邮件 id，批量删除队列邮件\n     *\n     * @param idList 邮件 id list\n     * @return 已删除邮件个数\n     */\n    int deleteAll(List<Long> idList);\n\n    /**\n     * 指定电子邮件 id，获取电子邮件\n     *\n     * @param id 电子邮件 id\n     * @return MailEntity\n     */\n    MailEntity getOne(Long id);\n\n    /**\n     * 分页获取所有邮件队列\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return Pagination<MailEntity>\n     */\n    Pagination<MailEntity> pageAll(Integer page, Integer rows);\n\n    /**\n     * 初始化电子邮箱配置信息\n     */\n    void initialize();\n\n    /**\n     * 消费队列\n     *\n     * @param message message\n     */\n    void consume(String message);\n\n    /**\n     * 生产队列\n     *\n     * @param message message\n     */\n    void produce(String message);\n\n    /**\n     * 重试，重发电子邮件\n     *\n     * @param mailEntityList 电子邮件 list\n     */\n    void retry(List<MailEntity> mailEntityList);\n\n    /**\n     * 将待发送的邮件重新加入到发送队列\n     *\n     * @param fail 是否将发送失败的邮件也重新加入到队列 默认 false\n     */\n    void retry(boolean fail);\n\n    String loadHtmlTemplate(String templatePath, Map<String, Object> variables);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/mail/service/impl/MailServiceImpl.java",
    "content": "package com.godcheese.nimrod.mail.service.impl;\n\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.mail.entity.MailEntity;\nimport com.godcheese.nimrod.mail.mapper.MailMapper;\nimport com.godcheese.nimrod.mail.service.MailService;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport com.github.pagehelper.Page;\nimport com.github.pagehelper.PageHelper;\nimport org.apache.activemq.command.ActiveMQQueue;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.jms.annotation.JmsListener;\nimport org.springframework.jms.core.JmsMessagingTemplate;\nimport org.springframework.mail.SimpleMailMessage;\nimport org.springframework.mail.javamail.JavaMailSenderImpl;\nimport org.springframework.mail.javamail.MimeMessageHelper;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\nimport org.thymeleaf.TemplateEngine;\nimport org.thymeleaf.context.Context;\n\nimport javax.jms.Destination;\nimport javax.mail.MessagingException;\nimport javax.mail.internet.MimeMessage;\nimport java.io.IOException;\nimport java.util.*;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class MailServiceImpl implements MailService {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(MailServiceImpl.class);\n\n    @Autowired\n    private DictionaryService dictionaryService;\n    @Autowired\n    private MailMapper mailMapper;\n    private JavaMailSenderImpl javaMailSender;\n    @Autowired\n    private Common common;\n    @Autowired\n    private JmsMessagingTemplate jmsMessagingTemplate;\n    @Autowired\n    private MailService mailService;\n    @Autowired\n    private FailureEntity failureEntity;\n    @Autowired\n    private TemplateEngine templateEngine;\n\n    private static final String MAIL_QUEUE = \"mailQueue\";\n\n    public static final String MAIL_TEMPLATE_ROOT_PATH = \"/mail/template\";\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public MailEntity addOne(MailEntity mailEntity) throws BaseResponseException {\n        Integer smsStatusWait = Integer.valueOf((String) dictionaryService.get(\"SMS_STATUS\", \"WAIT\"));\n        Date date = new Date();\n        try {\n            Integer status = mailEntity.getStatus();\n            mailEntity.setStatus(status != null ? status : smsStatusWait);\n            setFrom(mailEntity);\n            mailEntity.setGmtModified(date);\n            mailEntity.setGmtCreated(date);\n            mailMapper.insertOne(mailEntity);\n            produce(common.objectToJson(mailEntity));\n        } catch (Exception e) {\n            e.printStackTrace();\n            throw new BaseResponseException(failureEntity.i18n(\"mail.add_fail\"));\n        }\n        return mailEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int deleteAll(List<Long> idList) {\n        return mailMapper.deleteAll(idList);\n    }\n\n    @Override\n    public MailEntity getOne(Long id) {\n        return mailMapper.getOne(id);\n    }\n\n    @Override\n    public Pagination<MailEntity> pageAll(Integer page, Integer rows) {\n        Pagination<MailEntity> pagination = new Pagination<>();\n        PageHelper.startPage(page, rows);\n        Page<MailEntity> mailEntityPage = mailMapper.pageAll();\n        pagination.setRows(mailEntityPage.getResult());\n        pagination.setTotal(mailEntityPage.getTotal());\n        return pagination;\n    }\n\n    @Override\n    public void initialize() {\n        String host = (String) dictionaryService.get(\"MAIL\", \"HOST\");\n        String protocol = (String) dictionaryService.get(\"MAIL\", \"PROTOCOL\");\n        String port = (String) dictionaryService.get(\"MAIL\", \"PORT\");\n        String username = (String) dictionaryService.get(\"MAIL\", \"USERNAME\");\n        String password = (String) dictionaryService.get(\"MAIL\", \"PASSWORD\");\n        String defaultEncoding = (String) dictionaryService.get(\"MAIL\", \"DEFAULT_ENCODING\");\n        String smtpAuth = (String) dictionaryService.get(\"MAIL\", \"SMTP_AUTH\");\n        String startTlsEnable = (String) dictionaryService.get(\"MAIL\", \"STARTTLS_ENABLE\");\n        String startTlsRequired = (String) dictionaryService.get(\"MAIL\", \"STARTTLS_REQUIRED\");\n\n        javaMailSender = new JavaMailSenderImpl();\n        if (host != null) {\n            javaMailSender.setHost(host);\n        }\n        if (protocol != null) {\n            javaMailSender.setProtocol(protocol);\n        }\n        if (port != null) {\n            javaMailSender.setPort(Integer.parseInt(port));\n        }\n        if (username != null) {\n            javaMailSender.setUsername(username);\n        }\n        if (password != null) {\n            javaMailSender.setPassword(password);\n        }\n        if (password != null) {\n            javaMailSender.setPassword(password);\n        }\n        if (defaultEncoding != null) {\n            javaMailSender.setDefaultEncoding(defaultEncoding);\n        }\n\n        Properties properties = new Properties();\n        if (smtpAuth != null) {\n            properties.setProperty(\"mail.smtp.auth\", smtpAuth);\n        }\n        if (startTlsEnable != null) {\n            properties.setProperty(\"mail.starttls.enable\", startTlsEnable);\n        }\n        if (startTlsRequired != null) {\n            properties.setProperty(\"mail.starttls.required\", startTlsRequired);\n        }\n        javaMailSender.setJavaMailProperties(properties);\n    }\n\n    @JmsListener(destination = MAIL_QUEUE)\n    @Override\n    public void consume(String message) {\n        MailEntity mailEntity = null;\n        try {\n            mailEntity = common.jsonToObject(message, MailEntity.class);\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n        if (mailEntity != null) {\n            send(mailEntity);\n        }\n    }\n\n    @Override\n    public void produce(String message) {\n        Destination destination = new ActiveMQQueue(MAIL_QUEUE);\n        jmsMessagingTemplate.convertAndSend(destination, message);\n    }\n\n    @Transactional(rollbackFor = Throwable.class)\n    public void send(MailEntity mailEntity) {\n        Integer smsStatusFail = Integer.valueOf((String) dictionaryService.get(\"SMS_STATUS\", \"FAIL\"));\n        Integer smsStatusSuccess = Integer.valueOf((String) dictionaryService.get(\"SMS_STATUS\", \"SUCCESS\"));\n        Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get(\"IS_OR_NOT\", \"IS\"));\n        String mailSplit = \";\";\n        MailEntity mailEntity1 = mailMapper.getOne(mailEntity.getId());\n        if (mailEntity1 != null) {\n            try {\n                mailEntity1.setStatus(smsStatusFail);\n                String to = mailEntity1.getTo();\n                if (mailEntity1.getHtml().equals(isOrNotIs)) {\n                    if (to.indexOf(mailSplit) > 0) {\n                        sendMimeMailMessage(mailEntity1.getFrom(), to.split(mailSplit), mailEntity1.getSubject(), mailEntity1.getText(), true);\n                    } else {\n                        sendMimeMailMessage(mailEntity1.getFrom(), to, mailEntity1.getSubject(), mailEntity1.getText(), true);\n                    }\n                } else {\n                    if (to.indexOf(mailSplit) > 0) {\n                        sendSimpleMailMessage(mailEntity1.getFrom(), to.split(mailSplit), mailEntity1.getSubject(), mailEntity1.getText());\n                    } else {\n                        sendSimpleMailMessage(mailEntity1.getFrom(), to, mailEntity1.getSubject(), mailEntity1.getText());\n                    }\n                }\n                mailEntity1.setStatus((smsStatusSuccess));\n                LOGGER.info(\"send success.\");\n            } catch (Exception e) {\n                mailEntity1.setError(e.getMessage());\n                mailEntity1.setStatus(smsStatusFail);\n            }\n            mailEntity1.setGmtModified(new Date());\n            mailMapper.updateOne(mailEntity1);\n        }\n    }\n\n    private void sendSimpleMailMessage(String from, String to, String subject, String text) {\n        sendSimpleMailMessage(from, new String[]{to}, subject, text);\n    }\n\n    private void sendSimpleMailMessage(String from, String[] toArray, String subject, String text) {\n        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();\n        simpleMailMessage.setFrom(from);\n        simpleMailMessage.setTo(toArray);\n        simpleMailMessage.setSubject(subject);\n        simpleMailMessage.setText(text);\n        javaMailSender.send(simpleMailMessage);\n    }\n\n    private void sendSimpleMailMessage(String from, List<String> toList, String subject, String text) {\n        String[] toArray = new String[toList.size()];\n        sendSimpleMailMessage(from, toArray, subject, text);\n    }\n\n    private void sendMimeMailMessage(String from, String[] toArray, String subject, String text, boolean html) throws MessagingException {\n        MimeMessage mimeMessage = javaMailSender.createMimeMessage();\n        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);\n        mimeMessageHelper.setFrom(from);\n        mimeMessageHelper.setTo(toArray);\n        mimeMessage.setSubject(subject);\n        mimeMessageHelper.setText(text, html);\n        javaMailSender.send(mimeMessage);\n    }\n\n    private void sendMimeMailMessage(String from, String to, String subject, String text, boolean html) throws MessagingException {\n        sendMimeMailMessage(from, new String[]{to}, subject, text, html);\n    }\n\n    private void sendMimeMailMessage(String from, List<String> toList, String subject, String text, boolean html) throws MessagingException {\n        String[] toArray = new String[toList.size()];\n        sendMimeMailMessage(from, toList.toArray(toArray), subject, text, html);\n    }\n\n    /**\n     * 设置 from 为数据字典的值\n     *\n     * @param mailEntity MailEntity\n     */\n    private void setFrom(MailEntity mailEntity) {\n        String from = mailEntity.getFrom();\n        if (from == null || \"\".equals(from)) {\n            from = (String) dictionaryService.get(\"MAIL\", \"FROM\");\n            if (from != null) {\n                mailEntity.setFrom(from);\n            }\n        }\n    }\n\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public void retry(List<MailEntity> mailEntityList) {\n        for (MailEntity mailEntity : mailEntityList) {\n            try {\n                mailService.produce(common.objectToJson(mailEntity));\n            } catch (JsonProcessingException e) {\n                e.printStackTrace();\n            }\n        }\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public void retry(boolean fail) {\n        Integer smsStatusWait = Integer.valueOf((String) dictionaryService.get(\"SMS_STATUS\", \"WAIT\"));\n        Integer smsStatusFail = Integer.valueOf((String) dictionaryService.get(\"SMS_STATUS\", \"FAIL\"));\n\n        List<Integer> statusList = new ArrayList<>();\n        statusList.add(smsStatusWait);\n        if (fail) {\n            statusList.add(smsStatusFail);\n        }\n        List<MailEntity> mailEntityList = mailMapper.listAllByStatus(statusList);\n        retry(mailEntityList);\n    }\n\n    @Override\n    public String loadHtmlTemplate(String templatePath, Map<String, Object> variables) {\n        Context context = new Context();\n        context.setVariables(variables);\n        return templateEngine.process(templatePath, context);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/Quartz.java",
    "content": "package com.godcheese.nimrod.quartz;\n\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-01-18\n */\npublic class Quartz {\n\n    public static class Page {\n        public static final String QUARTZ = \"/quartz\";\n        public static final String JOB = Page.QUARTZ + \"/job\";\n        public static final String JOB_RUNTIME_LOG = Page.QUARTZ + \"/job_runtime_log\";\n    }\n\n    public static class Api {\n        public static final String QUARTZ = com.godcheese.nimrod.common.Url.API + Page.QUARTZ;\n        public static final String JOB = Api.QUARTZ + \"/job\";\n        public static final String JOB_RUNTIME_LOG = Api.QUARTZ + \"/job_runtime_log\";\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/api/JobRestController.java",
    "content": "package com.godcheese.nimrod.quartz.api;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.quartz.Quartz;\nimport com.godcheese.nimrod.quartz.entity.JobEntity;\nimport com.godcheese.nimrod.quartz.service.JobService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.Date;\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-01\n */\n@RestController\n@RequestMapping(Quartz.Api.JOB)\npublic class JobRestController {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(JobRestController.class);\n\n    private static final String JOB = \"/API/QUARTZ/JOB\";\n\n    @Autowired\n    private JobService jobService;\n\n    /**\n     * 新增任务\n     *\n     * @param jobClassName   JobClassName\n     * @param jobGroup       JobGroup\n     * @param cronExpression Cron 表达式\n     * @param description    描述\n     * @return ResponseEntity<Date>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + JOB + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<Date> addJob(@RequestParam String jobClassName, @RequestParam String jobGroup, @RequestParam String cronExpression, @RequestParam String description) throws BaseResponseException {\n        return new ResponseEntity<>(jobService.addOne(jobClassName, jobGroup, cronExpression, description), HttpStatus.OK);\n    }\n\n    /**\n     * 指定 JobClassName list、JobGroup list，删除所有任务\n     *\n     * @param jobClassNameList JobClassName list\n     * @param jobGroupList     JobGroup list\n     * @return ResponseEntity<Integer>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + JOB + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(name = \"jobClassName[]\") List<String> jobClassNameList, @RequestParam(name = \"jobGroup[]\") List<String> jobGroupList) throws BaseResponseException {\n        return new ResponseEntity<>(jobService.deleteAll(jobClassNameList, jobGroupList), HttpStatus.OK);\n    }\n\n    /**\n     * 保存任务\n     *\n     * @param jobClassName   JobClassName\n     * @param jobGroup       JobGroup\n     * @param cronExpression Cron 表达式\n     * @param description    描述\n     * @return ResponseEntity<Date>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + JOB + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<Date> saveOne(@RequestParam String jobClassName, @RequestParam String jobGroup, @RequestParam String cronExpression, @RequestParam String description) throws BaseResponseException {\n        return new ResponseEntity<>(jobService.updateCronExpressionByJobClassNameAndJobGroup(jobClassName, jobGroup, cronExpression, description), HttpStatus.OK);\n    }\n\n    /**\n     * 指定 JobClassName、JobGroup，获取任务\n     *\n     * @param jobClassName JobClassName\n     * @param jobGroup     JobGroup\n     * @return ResponseEntity<JobEntity>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + JOB + \"/ONE')\")\n    @GetMapping(value = \"/one\")\n    public ResponseEntity<JobEntity> getOne(@RequestParam String jobClassName, @RequestParam String jobGroup) {\n        return new ResponseEntity<>(jobService.getOne(jobClassName, jobGroup), HttpStatus.OK);\n    }\n\n    /**\n     * 分页获取所有任务\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return ResponseEntity<Pagination < JobEntity>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + JOB + \"/PAGE_ALL')\")\n    @GetMapping(value = \"/page_all\")\n    public ResponseEntity<Pagination<JobEntity>> pageAll(@RequestParam Integer page, @RequestParam Integer rows) {\n        return new ResponseEntity<>(jobService.pageAll(page, rows), HttpStatus.OK);\n    }\n\n    /**\n     * 指定 JobClassName list、JobGroup list，暂停所有任务\n     *\n     * @param jobClassNameList JobClassName list\n     * @param jobGroupList     JobGroup list\n     * @return ResponseEntity<HttpStatus>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + JOB + \"/PAUSE_ALL')\")\n    @PostMapping(value = \"/pause_all\")\n    public ResponseEntity<Integer> pauseAll(@RequestParam(value = \"jobClassName[]\") List<String> jobClassNameList, @RequestParam(value = \"jobGroup[]\") List<String> jobGroupList) throws BaseResponseException {\n        return new ResponseEntity<>(jobService.pauseAll(jobClassNameList, jobGroupList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定 JobClassName list、JobGroup list，恢复所有任务\n     *\n     * @param jobClassNameList JobClassName list\n     * @param jobGroupList     JobGroup list\n     * @return ResponseEntity<Integer>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + JOB + \"/RESUME_ALL')\")\n    @PostMapping(value = \"/resume_all\")\n    public ResponseEntity<Integer> resumeAll(@RequestParam(value = \"jobClassName[]\") List<String> jobClassNameList, @RequestParam(value = \"jobGroup[]\") List<String> jobGroupList) throws BaseResponseException {\n        return new ResponseEntity<>(jobService.resumeAll(jobClassNameList, jobGroupList), HttpStatus.OK);\n    }\n\n    /**\n     * 重置状态\n     *\n     * @param jobClassNameList JobClassName list\n     * @param jobGroupList     JobGroup list\n     * @return ResponseEntity<Integer>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + JOB + \"/RESET_STATE')\")\n    @PostMapping(value = \"/reset_state\")\n    public ResponseEntity<Integer> resetState(@RequestParam(value = \"jobClassNameList[]\", required = false) List<String> jobClassNameList, @RequestParam(value = \"jobGroupList[]\", required = false) List<String> jobGroupList) throws BaseResponseException {\n        return new ResponseEntity<>(jobService.resetTriggerFromErrorState(jobClassNameList, jobGroupList), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/api/JobRuntimeLogRestController.java",
    "content": "package com.godcheese.nimrod.quartz.api;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.quartz.Quartz;\nimport com.godcheese.nimrod.quartz.entity.JobRuntimeLogEntity;\nimport com.godcheese.nimrod.quartz.service.JobRuntimeLogService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-01\n */\n@RestController\n@RequestMapping(Quartz.Api.JOB_RUNTIME_LOG)\npublic class JobRuntimeLogRestController {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(JobRuntimeLogRestController.class);\n\n    private static final String JOB_RUNTIME_LOG = \"/API/QUARTZ/JOB_RUNTIME_LOG\";\n\n    @Autowired\n    private JobRuntimeLogService jobRuntimeLogService;\n\n    /**\n     * 指定任务运行日志 id，批量删除任务运行日志\n     *\n     * @return ResponseEntity<Integer>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + JOB_RUNTIME_LOG + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) {\n        return new ResponseEntity<>(jobRuntimeLogService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定任务运行日志 id，获取任务运行日志\n     *\n     * @param id 任务运行日志 id\n     * @return ResponseEntity<JobRuntimeLogEntity>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + JOB_RUNTIME_LOG + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<JobRuntimeLogEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(jobRuntimeLogService.getOne(id), HttpStatus.OK);\n    }\n\n    /**\n     * 分页获取所有任务运行日志\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return ResponseEntity<Pagination < JobRuntimeLogEntity>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + JOB_RUNTIME_LOG + \"/PAGE_ALL')\")\n    @GetMapping(value = \"/page_all\")\n    public ResponseEntity<Pagination<JobRuntimeLogEntity>> pageAll(@RequestParam Integer page, @RequestParam Integer rows) {\n        return new ResponseEntity<>(jobRuntimeLogService.pageAll(page, rows), HttpStatus.OK);\n    }\n\n    /**\n     * 清空所有任务运行日志\n     *\n     * @return ResponseEntity<HttpStatus>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + JOB_RUNTIME_LOG + \"/CLEAR_ALL')\")\n    @PostMapping(value = \"/clear_all\")\n    public ResponseEntity<HttpStatus> clearAll() {\n        jobRuntimeLogService.clearAll();\n        return new ResponseEntity<>(HttpStatus.OK, HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/controller/JobController.java",
    "content": "package com.godcheese.nimrod.quartz.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.quartz.Quartz;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-11\n */\n@RequestMapping(Quartz.Page.JOB)\n@Controller\npublic class JobController {\n\n    /**\n     * 定时任务新增 对话框\n     *\n     * @return String\n     */\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(Quartz.Page.JOB + \"/add_dialog\");\n    }\n\n    /**\n     * 定时任务编辑 对话框\n     *\n     * @return String\n     */\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(Quartz.Page.JOB + \"/edit_dialog\");\n    }\n\n    /**\n     * 定时任务 页面\n     *\n     * @return String\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/QUARTZ/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(Quartz.Page.JOB + \"/list\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/controller/JobRuntimeLogController.java",
    "content": "package com.godcheese.nimrod.quartz.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.quartz.Quartz;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-11\n */\n@RequestMapping(Quartz.Page.JOB_RUNTIME_LOG)\n@Controller\npublic class JobRuntimeLogController {\n    /**\n     * 任务运行日志\n     *\n     * @return String\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/QUARTZ/JOB_RUNTIME_LOG/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(Quartz.Page.JOB_RUNTIME_LOG + \"/list\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/entity/JobEntity.java",
    "content": "package com.godcheese.nimrod.quartz.entity;\n\nimport java.io.Serializable;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-02\n */\npublic class JobEntity implements Serializable {\n\n    private static final long serialVersionUID = -5740486676385193410L;\n\n    private String schedName;\n    private String jobName;\n    private String jobGroup;\n    private String description;\n    private String jobClassName;\n    private String isDurable;\n    private String isNonconcurrent;\n    private String isUpdateDate;\n    private String requestsRecovery;\n    private String triggerName;\n    private String triggerGroup;\n    private Long nextFireTime;\n    private Long prevFireTime;\n    private Integer priority;\n    private String triggerState;\n    private String triggerType;\n    private Long startTime;\n    private Long endTime;\n    private String calendarName;\n    private Integer misfireInstr;\n    private String cronExpression;\n    private String timeZoneId;\n\n    public String getSchedName() {\n        return schedName;\n    }\n\n    public void setSchedName(String schedName) {\n        this.schedName = schedName;\n    }\n\n    public String getJobName() {\n        return jobName;\n    }\n\n    public void setJobName(String jobName) {\n        this.jobName = jobName;\n    }\n\n    public String getJobGroup() {\n        return jobGroup;\n    }\n\n    public void setJobGroup(String jobGroup) {\n        this.jobGroup = jobGroup;\n    }\n\n    public String getDescription() {\n        return description;\n    }\n\n    public void setDescription(String description) {\n        this.description = description;\n    }\n\n    public String getJobClassName() {\n        return jobClassName;\n    }\n\n    public void setJobClassName(String jobClassName) {\n        this.jobClassName = jobClassName;\n    }\n\n    public String getIsDurable() {\n        return isDurable;\n    }\n\n    public void setIsDurable(String isDurable) {\n        this.isDurable = isDurable;\n    }\n\n    public String getIsNonconcurrent() {\n        return isNonconcurrent;\n    }\n\n    public void setIsNonconcurrent(String isNonconcurrent) {\n        this.isNonconcurrent = isNonconcurrent;\n    }\n\n    public String getIsUpdateDate() {\n        return isUpdateDate;\n    }\n\n    public void setIsUpdateDate(String isUpdateDate) {\n        this.isUpdateDate = isUpdateDate;\n    }\n\n    public String getRequestsRecovery() {\n        return requestsRecovery;\n    }\n\n    public void setRequestsRecovery(String requestsRecovery) {\n        this.requestsRecovery = requestsRecovery;\n    }\n\n    public String getTriggerName() {\n        return triggerName;\n    }\n\n    public void setTriggerName(String triggerName) {\n        this.triggerName = triggerName;\n    }\n\n    public String getTriggerGroup() {\n        return triggerGroup;\n    }\n\n    public void setTriggerGroup(String triggerGroup) {\n        this.triggerGroup = triggerGroup;\n    }\n\n    public Long getNextFireTime() {\n        return nextFireTime;\n    }\n\n    public void setNextFireTime(Long nextFireTime) {\n        this.nextFireTime = nextFireTime;\n    }\n\n    public Long getPrevFireTime() {\n        return prevFireTime;\n    }\n\n    public void setPrevFireTime(Long prevFireTime) {\n        this.prevFireTime = prevFireTime;\n    }\n\n    public Integer getPriority() {\n        return priority;\n    }\n\n    public void setPriority(Integer priority) {\n        this.priority = priority;\n    }\n\n    public String getTriggerState() {\n        return triggerState;\n    }\n\n    public void setTriggerState(String triggerState) {\n        this.triggerState = triggerState;\n    }\n\n    public String getTriggerType() {\n        return triggerType;\n    }\n\n    public void setTriggerType(String triggerType) {\n        this.triggerType = triggerType;\n    }\n\n    public Long getStartTime() {\n        return startTime;\n    }\n\n    public void setStartTime(Long startTime) {\n        this.startTime = startTime;\n    }\n\n    public Long getEndTime() {\n        return endTime;\n    }\n\n    public void setEndTime(Long endTime) {\n        this.endTime = endTime;\n    }\n\n    public String getCalendarName() {\n        return calendarName;\n    }\n\n    public void setCalendarName(String calendarName) {\n        this.calendarName = calendarName;\n    }\n\n    public Integer getMisfireInstr() {\n        return misfireInstr;\n    }\n\n    public void setMisfireInstr(Integer misfireInstr) {\n        this.misfireInstr = misfireInstr;\n    }\n\n    public String getCronExpression() {\n        return cronExpression;\n    }\n\n    public void setCronExpression(String cronExpression) {\n        this.cronExpression = cronExpression;\n    }\n\n    public String getTimeZoneId() {\n        return timeZoneId;\n    }\n\n    public void setTimeZoneId(String timeZoneId) {\n        this.timeZoneId = timeZoneId;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/entity/JobRuntimeLogEntity.java",
    "content": "package com.godcheese.nimrod.quartz.entity;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-12\n */\npublic class JobRuntimeLogEntity implements Serializable {\n\n    private static final long serialVersionUID = 7788756745999894643L;\n\n    private Long id;\n    private String jobClassName;\n    private String jobGroup;\n    private Long consumingTime;\n    private String jobException;\n    private Date gmtCreated;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getJobClassName() {\n        return jobClassName;\n    }\n\n    public void setJobClassName(String jobClassName) {\n        this.jobClassName = jobClassName;\n    }\n\n    public String getJobGroup() {\n        return jobGroup;\n    }\n\n    public void setJobGroup(String jobGroup) {\n        this.jobGroup = jobGroup;\n    }\n\n    public Long getConsumingTime() {\n        return consumingTime;\n    }\n\n    public void setConsumingTime(Long consumingTime) {\n        this.consumingTime = consumingTime;\n    }\n\n    public String getJobException() {\n        return jobException;\n    }\n\n    public void setJobException(String jobException) {\n        this.jobException = jobException;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/job/BaseJob.java",
    "content": "package com.godcheese.nimrod.quartz.job;\n\nimport org.quartz.Job;\nimport org.quartz.JobExecutionContext;\nimport org.quartz.JobExecutionException;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-01\n */\npublic interface BaseJob extends Job {\n\n    /**\n     * 执行方法\n     *\n     * @param jobExecutionContext\n     * @throws JobExecutionException\n     */\n    @Override\n    void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException;\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/job/SimpleJob.java",
    "content": "package com.godcheese.nimrod.quartz.job;\n\nimport com.godcheese.tile.util.DateUtil;\nimport org.quartz.DisallowConcurrentExecution;\nimport org.quartz.JobExecutionContext;\nimport org.quartz.JobExecutionException;\nimport org.quartz.PersistJobDataAfterExecution;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-01\n */\n@PersistJobDataAfterExecution\n@DisallowConcurrentExecution\npublic class SimpleJob implements BaseJob {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleJob.class);\n\n    @Override\n    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {\n        LOGGER.info(\"{} SimpleJob 被执行\", DateUtil.getNowDateTime());\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/job/SimpleJob2.java",
    "content": "package com.godcheese.nimrod.quartz.job;\n\nimport com.godcheese.tile.util.DateUtil;\nimport org.quartz.DisallowConcurrentExecution;\nimport org.quartz.JobExecutionContext;\nimport org.quartz.JobExecutionException;\nimport org.quartz.PersistJobDataAfterExecution;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-01\n */\n@PersistJobDataAfterExecution\n@DisallowConcurrentExecution\npublic class SimpleJob2 implements BaseJob {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleJob2.class);\n\n    @Override\n    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {\n        LOGGER.info(\"{} SimpleJob2 被执行\", DateUtil.getNowDateTime());\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/listener/GlobalJobListener.java",
    "content": "package com.godcheese.nimrod.quartz.listener;\n\nimport com.godcheese.nimrod.common.others.SpringContextUtil;\nimport com.godcheese.nimrod.quartz.entity.JobRuntimeLogEntity;\nimport com.godcheese.nimrod.quartz.mapper.JobRuntimeLogMapper;\nimport com.godcheese.nimrod.quartz.service.JobRuntimeLogService;\nimport com.godcheese.nimrod.quartz.service.impl.JobRuntimeLogServiceImpl;\nimport org.quartz.JobExecutionContext;\nimport org.quartz.JobExecutionException;\nimport org.quartz.JobListener;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.stereotype.Component;\n\nimport java.time.Instant;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-02\n */\n@Component\npublic class GlobalJobListener implements JobListener {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(GlobalJobListener.class);\n\n    private JobRuntimeLogMapper jobRuntimeLogMapper;\n\n    private JobRuntimeLogEntity jobRuntimeLogEntity = new JobRuntimeLogEntity();\n\n    private long beginTime = 0;\n\n    public GlobalJobListener() {\n        jobRuntimeLogMapper = (JobRuntimeLogMapper) SpringContextUtil.getBean(JobRuntimeLogMapper.class);\n    }\n\n    @Autowired\n    @Bean\n    private JobRuntimeLogService jobRuntimeLogService() {\n        return new JobRuntimeLogServiceImpl();\n    }\n\n    @Override\n    public String getName() {\n        return \"globalJobListener\";\n    }\n\n    @Override\n    public void jobToBeExecuted(JobExecutionContext context) {\n        beginTime = Instant.now().toEpochMilli();\n        jobRuntimeLogEntity.setJobClassName(context.getJobDetail().getKey().getName());\n        jobRuntimeLogEntity.setJobGroup(context.getJobDetail().getKey().getGroup());\n    }\n\n    @Override\n    public void jobExecutionVetoed(JobExecutionContext context) {\n    }\n\n    @Override\n    public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {\n        if (jobException != null) {\n            jobRuntimeLogEntity.setJobException(jobException.getMessage());\n        }\n        jobRuntimeLogEntity.setConsumingTime(Instant.now().toEpochMilli() - beginTime);\n        jobRuntimeLogEntity.setGmtCreated(new Date());\n        LOGGER.info(\"jobRuntimeLogEntity={}\", jobRuntimeLogEntity);\n        jobRuntimeLogMapper.insertOne(jobRuntimeLogEntity);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/mapper/JobMapper.java",
    "content": "package com.godcheese.nimrod.quartz.mapper;\n\nimport com.godcheese.nimrod.quartz.entity.JobEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport com.github.pagehelper.Page;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"jobMapper\")\n@Mapper\npublic interface JobMapper extends CrudMapper<JobEntity, String> {\n\n    /**\n     * 分页获取所有任务\n     *\n     * @return Page<JobEntity>\n     */\n    Page<JobEntity> pageAll();\n\n    /**\n     * 指定 JobClassName、JobGroup，更新任务描述\n     *\n     * @param jobClassName JobClassName\n     * @param jobGroup     JobGroup\n     * @param description  描述\n     * @return int\n     */\n    int updateJobDetailsDescriptionByJobClassNameAndJobGroup(@Param(\"jobClassName\") String jobClassName, @Param(\"jobGroup\") String jobGroup, @Param(\"description\") String description);\n\n    /**\n     * 指定 JobClassName、JobGroup、获取任务息\n     *\n     * @param jobClassName JobClassName\n     * @param jobGroup     JobGroup\n     * @return JobEntity\n     */\n    JobEntity getOneByJobClassNameAndJobGroup(@Param(\"jobClassName\") String jobClassName, @Param(\"jobGroup\") String jobGroup);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/mapper/JobMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.quartz.mapper.JobMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.quartz.entity.JobEntity\">\n        <result column=\"sched_name\" property=\"schedName\" jdbcType=\"VARCHAR\"/> <!-- api 名称 -->\n        <result column=\"job_name\" property=\"jobName\" jdbcType=\"VARCHAR\"/> <!--请求地址（url）-->\n        <result column=\"job_group\" property=\"jobGroup\" jdbcType=\"VARCHAR\"/> <!-- 权限（authority） -->\n        <result column=\"description\" property=\"description\" jdbcType=\"VARCHAR\"/> <!-- api 分类 id -->\n        <result column=\"job_class_name\" property=\"jobClassName\" jdbcType=\"VARCHAR\"/> <!-- 排序 -->\n        <result column=\"is_durable\" property=\"isDurable\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"is_nonconcurrent\" property=\"isNonconcurrent\" jdbcType=\"VARCHAR\"/> <!-- 更新时间 -->\n        <result column=\"is_update_date\" property=\"isUpdateDate\" jdbcType=\"VARCHAR\"/> <!-- 创建时间 -->\n        <result column=\"requests_recovery\" property=\"requestsRecovery\" jdbcType=\"VARCHAR\"/> <!-- 创建时间 -->\n        <result column=\"trigger_name\" property=\"triggerName\" jdbcType=\"VARCHAR\"/> <!-- 创建时间 -->\n        <result column=\"trigger_group\" property=\"triggerGroup\" jdbcType=\"VARCHAR\"/> <!-- 创建时间 -->\n        <result column=\"nextFire_time\" property=\"nextFireTime\" jdbcType=\"BIGINT\"/> <!-- 创建时间 -->\n        <result column=\"prevFire_time\" property=\"prevFireTime\" jdbcType=\"BIGINT\"/> <!-- 创建时间 -->\n        <result column=\"priority\" property=\"priority\" jdbcType=\"INTEGER\"/> <!-- 创建时间 -->\n        <result column=\"trigger_state\" property=\"triggerState\" jdbcType=\"VARCHAR\"/> <!-- 创建时间 -->\n        <result column=\"trigger_type\" property=\"triggerType\" jdbcType=\"VARCHAR\"/> <!-- 创建时间 -->\n        <result column=\"start_time\" property=\"startTime\" jdbcType=\"BIGINT\"/> <!-- 创建时间 -->\n        <result column=\"end_time\" property=\"endTime\" jdbcType=\"BIGINT\"/> <!-- 创建时间 -->\n        <result column=\"calendar_name\" property=\"calendarName\" jdbcType=\"VARCHAR\"/> <!-- 创建时间 -->\n        <result column=\"misfire_instr\" property=\"misfireInstr\" jdbcType=\"INTEGER\"/> <!-- 创建时间 -->\n        <result column=\"cron_expression\" property=\"cronExpression\" jdbcType=\"VARCHAR\"/> <!-- 创建时间 -->\n        <result column=\"time_zone_id\" property=\"timeZoneId\" jdbcType=\"VARCHAR\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n\n    </sql>\n\n    <select id=\"pageAll\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select `qjd`.*,\n               `qt`.*,\n               `qct`.*\n        from `QRTZ_JOB_DETAILS` `qjd`\n                 left join `QRTZ_TRIGGERS` `qt` on (`qjd`.`job_name` = `qt`.`job_name`)\n                 left join `QRTZ_CRON_TRIGGERS` `qct` on (`qt`.`trigger_name` = `qct`.`trigger_name`)\n    </select>\n\n    <select id=\"getOneByJobClassNameAndJobGroup\" resultMap=\"BaseResultMap\">\n        select `qjd`.*,\n               `qt`.*,\n               `qct`.*\n        from `QRTZ_JOB_DETAILS` `qjd`\n                 left join `QRTZ_TRIGGERS` `qt` on (`qjd`.`job_name` = `qt`.`job_name`)\n                 left join `QRTZ_CRON_TRIGGERS` `qct` on (`qt`.`trigger_name` = `qct`.`trigger_name`)\n        where `qjd`.`job_class_name` = #{jobClassName}\n          and `qjd`.`job_group` = #{jobGroup}\n        limit 1\n    </select>\n\n    <update id=\"updateJobDetailsDescriptionByJobClassNameAndJobGroup\">\n        update\n            `QRTZ_JOB_DETAILS`\n        set `description` = #{description}\n        where `job_class_name` = #{jobClassName}\n          and `job_group` = #{jobGroup}\n    </update>\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/mapper/JobRuntimeLogMapper.java",
    "content": "package com.godcheese.nimrod.quartz.mapper;\n\nimport com.godcheese.nimrod.quartz.entity.JobRuntimeLogEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport com.github.pagehelper.Page;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.springframework.stereotype.Component;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"jobRuntimeLogMapper\")\n@Mapper\npublic interface JobRuntimeLogMapper extends CrudMapper<JobRuntimeLogEntity, Long> {\n\n    /**\n     * 分页获取所有任务运行日志\n     *\n     * @return Page<JobRuntimeLogEntity>\n     */\n    Page<JobRuntimeLogEntity> pageAll();\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/mapper/JobRuntimeLogMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.quartz.mapper.JobRuntimeLogMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.quartz.entity.JobRuntimeLogEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"job_class_name\" property=\"jobClassName\" jdbcType=\"VARCHAR\"/> <!-- 任务类名 -->\n        <result column=\"job_group\" property=\"jobGroup\" jdbcType=\"VARCHAR\"/> <!-- 任务分组 -->\n        <result column=\"consuming_time\" property=\"consumingTime\" jdbcType=\"BIGINT\"/> <!-- 任务运行耗时（毫秒） -->\n        <result column=\"job_exception\" property=\"jobException\" jdbcType=\"VARCHAR\"/> <!-- 任务异常信息-->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `job_runtime_log`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `job_class_name`, `job_group`, `consuming_time`, `job_exception`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.quartz.entity.JobRuntimeLogEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`job_class_name`, `job_group`, `consuming_time`, `job_exception`, `gmt_created`)\n        VALUES (#{jobClassName}, #{jobGroup}, #{consumingTime}, #{jobException}, #{gmtCreated})\n    </insert>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"pageAll\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <update id=\"truncate\">\n        truncate table\n        <include refid=\"TableName\"/>\n    </update>\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/service/JobRuntimeLogService.java",
    "content": "package com.godcheese.nimrod.quartz.service;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.quartz.entity.JobRuntimeLogEntity;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-13\n */\npublic interface JobRuntimeLogService {\n\n\n    int deleteAll(List<Long> idList);\n\n    /**\n     * 指定任务运行日志 id，获取任务运行日志\n     *\n     * @param id 任务运行日志 id\n     * @return JobRuntimeLogEntity\n     */\n    JobRuntimeLogEntity getOne(Long id);\n\n    /**\n     * 分页获取所有任务运行日志\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return Pagination<JobRuntimeLogEntity>\n     */\n    Pagination<JobRuntimeLogEntity> pageAll(Integer page, Integer rows);\n\n    /**\n     * 清空所有任务运行日志\n     */\n    void clearAll();\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/service/JobService.java",
    "content": "package com.godcheese.nimrod.quartz.service;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.quartz.entity.JobEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\n\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-01\n */\npublic interface JobService {\n\n    /**\n     * 新增任务\n     *\n     * @param jobClassName   JobClassName\n     * @param jobGroup       JobGroup\n     * @param cronExpression Cron 表达式\n     * @param description    描述\n     * @return Date\n     * @throws BaseResponseException BaseResponseException\n     */\n    Date addOne(String jobClassName, String jobGroup, String cronExpression, String description) throws BaseResponseException;\n\n    /**\n     * 指定 JobClassName list、JobGroup list，批量删除任务\n     *\n     * @param jobClassNameList JobClassName list\n     * @param jobGroupList     JobGroup list\n     * @return int\n     * @throws BaseResponseException BaseResponseException\n     */\n    int deleteAll(List<String> jobClassNameList, List<String> jobGroupList) throws BaseResponseException;\n\n    /**\n     * 指定 JobClassName、JobGroup，获取任务\n     *\n     * @param jobClassName JobClassName\n     * @param jobGroup     JobGroup\n     * @return JobEntity\n     */\n    JobEntity getOne(String jobClassName, String jobGroup);\n\n    /**\n     * 分页获取所有任务\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return Pagination<JobEntity>\n     */\n    Pagination<JobEntity> pageAll(Integer page, Integer rows);\n\n    /**\n     * 指定 JobClassName、JobGroup，更新任务 Cron 表达式、描述\n     *\n     * @param jobClassName   JobClassName\n     * @param jobGroup       JobGroup\n     * @param cronExpression Cron 表达式\n     * @param description    描述\n     * @return Date\n     * @throws BaseResponseException BaseResponseException\n     */\n    Date updateCronExpressionByJobClassNameAndJobGroup(String jobClassName, String jobGroup, String cronExpression, String description) throws BaseResponseException;\n\n    /**\n     * 指定 JobClassName list、JobGroup list，暂停所有任务\n     *\n     * @param jobClassNameList JobClassName list\n     * @param jobGroupList     JobGroup list\n     * @return int\n     * @throws BaseResponseException BaseResponseException\n     */\n    int pauseAll(List<String> jobClassNameList, List<String> jobGroupList) throws BaseResponseException;\n\n    /**\n     * 指定 JobClassName list、JobGroup list，恢复所有任务\n     *\n     * @param jobClassNameList JobClassName list\n     * @param jobGroupList     JobGroup list\n     * @return int\n     * @throws BaseResponseException BaseResponseException\n     */\n    int resumeAll(List<String> jobClassNameList, List<String> jobGroupList) throws BaseResponseException;\n\n    /**\n     * 重置 error state trigger\n     *\n     * @param jobClassNameList\n     * @param jobGroupList\n     * @return\n     * @throws BaseResponseException\n     */\n    int resetTriggerFromErrorState(List<String> jobClassNameList, List<String> jobGroupList) throws BaseResponseException;\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/service/impl/JobRuntimeLogServiceImpl.java",
    "content": "package com.godcheese.nimrod.quartz.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.others.SpringContextUtil;\nimport com.godcheese.nimrod.quartz.entity.JobRuntimeLogEntity;\nimport com.godcheese.nimrod.quartz.mapper.JobRuntimeLogMapper;\nimport com.godcheese.nimrod.quartz.service.JobRuntimeLogService;\nimport com.github.pagehelper.Page;\nimport com.github.pagehelper.PageHelper;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-13\n */\n@Service\npublic class JobRuntimeLogServiceImpl implements JobRuntimeLogService {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(JobRuntimeLogServiceImpl.class);\n\n    private JobRuntimeLogMapper jobRuntimeLogMapper;\n\n    public JobRuntimeLogServiceImpl() {\n        jobRuntimeLogMapper = (JobRuntimeLogMapper) SpringContextUtil.getBean(JobRuntimeLogMapper.class);\n    }\n\n    @Override\n    public int deleteAll(List<Long> idList) {\n        return jobRuntimeLogMapper.deleteAll(idList);\n    }\n\n    @Override\n    public JobRuntimeLogEntity getOne(Long id) {\n        return null;\n    }\n\n    @Override\n    public Pagination<JobRuntimeLogEntity> pageAll(Integer page, Integer rows) {\n        Pagination<JobRuntimeLogEntity> pagination = new Pagination<>();\n        PageHelper.startPage(page, rows);\n        Page<JobRuntimeLogEntity> jobRuntimeLogEntityPage = jobRuntimeLogMapper.pageAll();\n        pagination.setRows(jobRuntimeLogEntityPage.getResult());\n        pagination.setTotal(jobRuntimeLogEntityPage.getTotal());\n        return pagination;\n    }\n\n    @Override\n    public void clearAll() {\n        jobRuntimeLogMapper.truncate();\n    }\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/quartz/service/impl/JobServiceImpl.java",
    "content": "package com.godcheese.nimrod.quartz.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.quartz.entity.JobEntity;\nimport com.godcheese.nimrod.quartz.job.BaseJob;\nimport com.godcheese.nimrod.quartz.mapper.JobMapper;\nimport com.godcheese.nimrod.quartz.service.JobService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport com.github.pagehelper.Page;\nimport com.github.pagehelper.PageHelper;\nimport org.quartz.*;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-01\n */\n@Service\npublic class JobServiceImpl implements JobService {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(JobServiceImpl.class);\n    @Autowired\n    private Scheduler scheduler;\n    @Autowired\n    private JobMapper jobMapper;\n    @Autowired\n    private FailureEntity failureEntity;\n\n    @Transactional(rollbackFor = Throwable.class)\n    @Override\n    public Date addOne(String jobClassName, String jobGroup, String cronExpression, String description) throws BaseResponseException {\n        try {\n            scheduler.start();\n            JobDetail jobDetail = JobBuilder.newJob(getClass(jobClassName).getClass()).withIdentity(jobClassName, jobGroup).withDescription(description).build();\n            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression)\n                    // 不触发立即执行，等待下次 Cron 触发频率到达时刻开始按照 Cron 频率依次执行\n                    .withMisfireHandlingInstructionDoNothing();\n            CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(jobClassName, jobGroup).withSchedule(cronScheduleBuilder).withDescription(description).build();\n            return scheduler.scheduleJob(jobDetail, cronTrigger);\n        } catch (IllegalAccessException | InstantiationException | SchedulerException | ClassNotFoundException e) {\n            e.printStackTrace();\n            throw new BaseResponseException(failureEntity.i18n(\"quartz_job.add_fail\"));\n        }\n    }\n\n    @Transactional(rollbackFor = Throwable.class)\n    @Override\n    public int deleteAll(List<String> jobClassNameList, List<String> jobGroupList) throws BaseResponseException {\n        int index = 0;\n        try {\n            JobKey jobKey;\n            for (String jobClassName : jobClassNameList) {\n                jobKey = JobKey.jobKey(jobClassName, jobGroupList.get(index));\n                scheduler.pauseJob(jobKey);\n                scheduler.unscheduleJob(TriggerKey.triggerKey(jobClassName, jobGroupList.get(index)));\n                scheduler.deleteJob(jobKey);\n                index++;\n            }\n        } catch (SchedulerException e) {\n            e.printStackTrace();\n            throw new BaseResponseException(failureEntity.i18n(\"quartz_job.delete_fail\"));\n        }\n        return index;\n    }\n\n    @Override\n    public JobEntity getOne(String jobClassName, String jobGroup) {\n        return jobMapper.getOneByJobClassNameAndJobGroup(jobClassName, jobGroup);\n    }\n\n    @Override\n    public Pagination<JobEntity> pageAll(Integer page, Integer rows) {\n        Pagination<JobEntity> pagination = new Pagination<>();\n        PageHelper.startPage(page, rows);\n        Page<JobEntity> jobEntityPage = jobMapper.pageAll();\n        pagination.setRows(jobEntityPage.getResult());\n        pagination.setTotal(jobEntityPage.getTotal());\n        return pagination;\n    }\n\n    @Transactional(rollbackFor = Throwable.class)\n    @Override\n    public Date updateCronExpressionByJobClassNameAndJobGroup(String jobClassName, String jobGroup, String cronExpression, String description) throws BaseResponseException {\n        try {\n            TriggerKey triggerKey = TriggerKey.triggerKey(jobClassName, jobGroup);\n            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression)\n                    // 不触发立即执行，等待下次 Cron 触发频率到达时刻开始按照 Cron 频率依次执行\n                    .withMisfireHandlingInstructionDoNothing();\n            CronTrigger cronTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);\n            cronTrigger = cronTrigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).withDescription(description).build();\n            jobMapper.updateJobDetailsDescriptionByJobClassNameAndJobGroup(jobClassName, jobGroup, description);\n            scheduler.rescheduleJob(triggerKey, cronTrigger);\n            return new Date();\n        } catch (SchedulerException e) {\n            throw new BaseResponseException(failureEntity.i18n(\"quartz_job.update_fail\"));\n        }\n    }\n\n    @Override\n    public int pauseAll(List<String> jobClassNameList, List<String> jobGroupList) throws BaseResponseException {\n        int index = 0;\n        try {\n            if (jobClassNameList != null && jobGroupList != null) {\n                for (String jobClassName : jobClassNameList) {\n                    scheduler.pauseJob(JobKey.jobKey(jobClassName, jobGroupList.get(index)));\n                    index++;\n                }\n            }\n        } catch (SchedulerException e) {\n            e.printStackTrace();\n            throw new BaseResponseException(failureEntity.i18n(\"quartz_job.pause_fail\"));\n        }\n        return index;\n    }\n\n    @Override\n    public int resumeAll(List<String> jobClassNameList, List<String> jobGroupList) throws BaseResponseException {\n        int index = 0;\n        try {\n            if (jobClassNameList != null && jobGroupList != null) {\n                for (String jobClassName : jobClassNameList) {\n                    scheduler.resumeJob(JobKey.jobKey(jobClassName, jobGroupList.get(index)));\n                    index++;\n                }\n            }\n        } catch (SchedulerException e) {\n            e.printStackTrace();\n            throw new BaseResponseException(failureEntity.i18n(\"quartz_job.resume_fail\"));\n        }\n        return index;\n    }\n\n    @Override\n    public int resetTriggerFromErrorState(List<String> jobClassNameList, List<String> jobGroupList) throws BaseResponseException {\n        int index = 0;\n        try {\n            if (jobClassNameList != null && jobGroupList != null) {\n                for (String jobClassName : jobClassNameList) {\n                    LOGGER.info(\"jobClassName={}={}\", jobClassName, jobGroupList.get(index));\n                    scheduler.resetTriggerFromErrorState(TriggerKey.triggerKey(jobClassName, jobGroupList.get(index)));\n                    index++;\n                }\n            }\n        } catch (SchedulerException e) {\n            e.printStackTrace();\n            throw new BaseResponseException(failureEntity.i18n(\"quartz_job.resume_fail\"));\n        }\n        return index;\n    }\n\n    private static BaseJob getClass(String classname) throws ClassNotFoundException, IllegalAccessException, InstantiationException {\n        Class<?> class1 = Class.forName(classname);\n        return (BaseJob) class1.newInstance();\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/System.java",
    "content": "package com.godcheese.nimrod.system;\n\nimport com.godcheese.nimrod.common.Url;\n\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-20\n */\npublic class System extends Url {\n\n    public static class Page {\n\n        public static final String SYSTEM = \"/system\";\n\n        public static final String INDEX = SYSTEM + Url.Page.INDEX;\n\n        public static final String WORKBENCH = SYSTEM + \"/workbench\";\n\n        public static final String DICTIONARY = SYSTEM + \"/dictionary\";\n        public static final String DICTIONARY_CATEGORY = SYSTEM + \"/dictionary_category\";\n\n        public static final String MAIL = SYSTEM + \"/mail\";\n\n        public static final String OPERATION_LOG = SYSTEM + \"/operation_log\";\n\n        public static final String FILE = SYSTEM + \"/file\";\n    }\n\n    public static class Api {\n\n        public static final String SYSTEM = Url.API + Page.SYSTEM;\n\n        public static final String DICTIONARY = SYSTEM + \"/dictionary\";\n        public static final String DICTIONARY_CATEGORY = SYSTEM + \"/dictionary_category\";\n\n        public static final String OPERATION_LOG = SYSTEM + \"/operation_log\";\n\n        public static final String FILE = SYSTEM + \"/file\";\n\n        public static final String VERIFY_CODE = SYSTEM + \"/verify_code\";\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/api/DictionaryCategoryRestController.java",
    "content": "package com.godcheese.nimrod.system.api;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.system.System;\nimport com.godcheese.nimrod.system.entity.DictionaryCategoryEntity;\nimport com.godcheese.nimrod.system.service.DictionaryCategoryService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(System.Api.DICTIONARY_CATEGORY)\npublic class DictionaryCategoryRestController {\n\n    private static final String DICTIONARY_CATEGORY = \"/API/SYSTEM/DICTIONARY_CATEGORY\";\n\n    @Autowired\n    private DictionaryCategoryService dictionaryCategoryService;\n\n\n    /**\n     * 新增数据字典分类\n     *\n     * @param name     数据字典分类名称\n     * @param parentId 数据字典分类父级 id\n     * @param sort     排序\n     * @param remark   备注\n     * @return ResponseEntity<DictionaryCategoryEntity>\n     */\n    @OperationLog(value = \"新增数据字典分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY_CATEGORY + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<DictionaryCategoryEntity> addOne(@RequestParam String name, @RequestParam(required = false) Long parentId, @RequestParam Long sort, @RequestParam String remark) {\n        DictionaryCategoryEntity dictionaryCategoryEntity = new DictionaryCategoryEntity();\n        dictionaryCategoryEntity.setName(name);\n        dictionaryCategoryEntity.setParentId(parentId);\n        dictionaryCategoryEntity.setSort(sort);\n        dictionaryCategoryEntity.setRemark(remark);\n        DictionaryCategoryEntity dictionaryCategoryEntity1 = dictionaryCategoryService.insertOne(dictionaryCategoryEntity);\n        return new ResponseEntity<>(dictionaryCategoryEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定数据字典分类 id list，批量删除数据字典分类\n     *\n     * @param idList 数据字典分类 id list\n     * @return ResponseEntity<Integer>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"指定数据字典分类 id list，批量删除数据字典分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY_CATEGORY + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) throws BaseResponseException {\n        return new ResponseEntity<>(dictionaryCategoryService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 保存数据字典分类\n     *\n     * @param id     数据字典分类 id\n     * @param name   数据字典分类名称\n     * @param sort   排序\n     * @param remark 备注\n     * @return ResponseEntity<DictionaryCategoryEntity>\n     */\n    @OperationLog(value = \"保存数据字典分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY_CATEGORY + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<DictionaryCategoryEntity> saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam Long parentId, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException {\n        DictionaryCategoryEntity dictionaryCategoryEntity = new DictionaryCategoryEntity();\n        dictionaryCategoryEntity.setId(id);\n        dictionaryCategoryEntity.setName(name);\n        dictionaryCategoryEntity.setParentId(parentId);\n        dictionaryCategoryEntity.setSort(sort);\n        dictionaryCategoryEntity.setRemark(remark);\n        DictionaryCategoryEntity dictionaryCategoryEntity1 = dictionaryCategoryService.updateOne(dictionaryCategoryEntity);\n        return new ResponseEntity<>(dictionaryCategoryEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定数据字典分类 id，获取数据字典分类\n     *\n     * @param id 数据字典分类 id\n     * @return ResponseEntity<DictionaryCategoryEntity>\n     */\n    @OperationLog(value = \"指定数据字典分类 id，获取数据字典分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY_CATEGORY + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<DictionaryCategoryEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(dictionaryCategoryService.getOne(id), HttpStatus.OK);\n    }\n\n    /**\n     * 分页获取所有父级数据字典分类\n     *\n     * @return ResponseEntity<Pagination < DictionaryCategoryEntity>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY_CATEGORY + \"/LIST_ALL_PARENT')\")\n    @GetMapping(value = \"/list_all_parent\")\n    public ResponseEntity<List<DictionaryCategoryEntity>> listAllParent() {\n        return new ResponseEntity<>(dictionaryCategoryService.listAllParent(), HttpStatus.OK);\n    }\n\n    /**\n     * 指定父级数据字典分类 id，获取所有数据字典分类\n     *\n     * @param parentId 父级数据字典分类 id\n     * @return ResponseEntity<List < DictionaryCategoryEntity>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY_CATEGORY + \"/LIST_ALL_BY_PARENT_ID')\")\n    @GetMapping(value = \"/list_all_by_parent_id\")\n    public ResponseEntity<List<DictionaryCategoryEntity>> listAllByParentId(@RequestParam Long parentId) {\n        return new ResponseEntity<>(dictionaryCategoryService.listAllByParentId(parentId), HttpStatus.OK);\n    }\n\n    /**\n     * 获取所有数据字典分类，以 ComboTree 形式展示\n     *\n     * @return ResponseEntity<List < ComboTree>>\n     */\n    @OperationLog(value = \"获取所有数据字典分类，以 ComboTree 形式展示\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY_CATEGORY + \"/LIST_ALL_AS_COMBO_TREE')\")\n    @GetMapping(value = \"/list_all_as_combo_tree\")\n    public ResponseEntity<List<ComboTree>> listAllAsComboTree() {\n        List<ComboTree> comboTreeResultList = new ArrayList<>();\n        List<ComboTree> dictionaryCategoryComboTreeList = dictionaryCategoryService.listAllDictionaryCategoryComboTree();\n        for (ComboTree comboTree : dictionaryCategoryComboTreeList) {\n            if (comboTree.getParentId() == null) {\n                comboTreeResultList.add(comboTree);\n            }\n        }\n        for (ComboTree comboTree : comboTreeResultList) {\n            comboTree.setChildren(dictionaryCategoryService.getDictionaryCategoryChildrenComboTree(comboTree.getId(), dictionaryCategoryComboTreeList));\n        }\n        return new ResponseEntity<>(comboTreeResultList, HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/api/DictionaryRestController.java",
    "content": "package com.godcheese.nimrod.system.api;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.system.System;\nimport com.godcheese.nimrod.system.entity.DictionaryEntity;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\nimport org.springframework.web.multipart.MultipartFile;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.util.List;\nimport java.util.Map;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = System.Api.DICTIONARY, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class DictionaryRestController {\n\n    private static final String DICTIONARY = \"/API/SYSTEM/DICTIONARY\";\n\n    @Autowired\n    private DictionaryService dictionaryService;\n\n    @Autowired\n    private Common common;\n\n    /**\n     * 新增数据字典\n     *\n     * @param keyName              数据字典键名\n     * @param key                  数据字典键\n     * @param valueName            数据字典值名\n     * @param valueSlug            数据字典值别名\n     * @param value                数据字典值\n     * @param dictionaryCategoryId 数据字典分类 id\n     * @param enabled              是否启用\n     * @param sort                 排序\n     * @param remark               备注\n     * @return ResponseEntity<DictionaryEntity>\n     */\n    @OperationLog(value = \"新增数据字典\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<DictionaryEntity> addOne(@RequestParam String keyName, @RequestParam String key, @RequestParam String valueName, @RequestParam String valueSlug, @RequestParam String value, @RequestParam Long dictionaryCategoryId, @RequestParam Integer enabled, @RequestParam Long sort, @RequestParam String remark) {\n        DictionaryEntity dictionaryEntity = new DictionaryEntity();\n        dictionaryEntity.setKeyName(keyName);\n        dictionaryEntity.setKey(key);\n        dictionaryEntity.setValueName(valueName);\n        dictionaryEntity.setValueSlug(valueSlug);\n        dictionaryEntity.setValue(value);\n        dictionaryEntity.setDictionaryCategoryId(dictionaryCategoryId);\n        dictionaryEntity.setEnabled(enabled);\n        dictionaryEntity.setSort(sort);\n        dictionaryEntity.setRemark(remark);\n        DictionaryEntity dictionaryEntity1 = dictionaryService.addOne(dictionaryEntity);\n        return new ResponseEntity<>(dictionaryEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定数据字典 id，批量删除数据字典\n     *\n     * @param idList 数据字典 id list\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"指定数据字典 id，批量删除数据字典\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY + \"/DELETE_ALL')\")\n    @PostMapping(\"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) {\n        return new ResponseEntity<>(dictionaryService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 保存数据字典\n     *\n     * @param id                   数据字典 id\n     * @param keyName              数据字典键名\n     * @param key                  数据字典键\n     * @param valueName            数据字典值名\n     * @param valueSlug            数据字典值别名\n     * @param value                数据字典值\n     * @param dictionaryCategoryId 数据字典分类 id\n     * @param enabled              是否启用\n     * @param sort                 排序\n     * @param remark               备注\n     * @return ResponseEntity<DictionaryEntity>\n     */\n    @OperationLog(value = \"保存数据字典\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<DictionaryEntity> saveOne(@RequestParam Long id, @RequestParam String keyName, @RequestParam String key, @RequestParam String valueName, @RequestParam String valueSlug, @RequestParam String value, @RequestParam Long dictionaryCategoryId, @RequestParam Integer enabled, @RequestParam Long sort, @RequestParam String remark) {\n        DictionaryEntity dictionaryEntity = dictionaryService.getOne(id);\n        dictionaryEntity.setKeyName(keyName);\n        dictionaryEntity.setKey(key);\n        dictionaryEntity.setValueName(valueName);\n        dictionaryEntity.setValueSlug(valueSlug);\n        dictionaryEntity.setValue(value);\n        dictionaryEntity.setDictionaryCategoryId(dictionaryCategoryId);\n        dictionaryEntity.setEnabled(enabled);\n        dictionaryEntity.setSort(sort);\n        dictionaryEntity.setRemark(remark);\n        DictionaryEntity dictionaryEntity1 = dictionaryService.saveOne(dictionaryEntity);\n        return new ResponseEntity<>(dictionaryEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定数据字典 id，获取数据字典\n     *\n     * @param id 数据字典 id\n     * @return ResponseEntity<DictionaryEntity>\n     */\n    @OperationLog(value = \"指定数据字典 id，获取数据字典\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<DictionaryEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(dictionaryService.getOne(id), HttpStatus.OK);\n    }\n\n//    /**\n//     * 指定父级数据字典分类 id，分页获取所有数据字典\n//     * @param page                 页\n//     * @param rows                 每页显示数量\n//     * @param dictionaryCategoryId 数据字典分类 id\n//     * @return ResponseEntity<Pagination<DictionaryEntity>>\n//     */\n//    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY + \"/PAGE_ALL_BY_DICTIONARY_CATEGORY_ID')\")\n//    @GetMapping(value = \"/page_all_by_dictionary_category_id/{dictionaryCategoryId}\")\n//    public ResponseEntity<Pagination<DictionaryEntity>> pageAllByDictionaryCategoryId(@RequestParam Integer page, @RequestParam Integer rows, @PathVariable Long dictionaryCategoryId) {\n//        return new ResponseEntity<>(dictionaryService.pageAllByDictionaryCategoryId(dictionaryCategoryId, page, rows), HttpStatus.OK);\n//    }\n\n    /**\n     * 获取所有数据字典\n     *\n     * @return ResponseEntity<Map < String, Map < String, Object>>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY + \"/LIST_ALL')\")\n    @RequestMapping(\"/list_all\")\n    public ResponseEntity<Map<String, Map<String, Object>>> listAll() {\n        return new ResponseEntity<>(dictionaryService.keyValueMap(), HttpStatus.OK);\n    }\n\n    /**\n     * 指定数据字典键，从内存中获取所有数据字典\n     *\n     * @param key 数据字典键\n     * @return ResponseEntity<List < DictionaryEntity>>\n     */\n    @OperationLog(value = \"指定数据字典键，从内存中获取所有数据字典\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY + \"/LIST_ALL_BY_KEY')\")\n    @RequestMapping(\"/list_all_by_key/{key}\")\n    public ResponseEntity<List<DictionaryEntity>> listAllByKey(@PathVariable String key) {\n        return new ResponseEntity<>(dictionaryService.get(key), HttpStatus.OK);\n    }\n\n    /**\n     * 同步数据字典到内存\n     *\n     * @return ResponseEntity<HttpStatus>\n     */\n    @OperationLog(value = \"同步数据字典到内存\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY + \"/SYNC_TO_MEMORY')\")\n    @PostMapping(value = \"/sync_to_memory\")\n    public ResponseEntity<HttpStatus> syncToMemory() {\n        common.initialize();\n        return new ResponseEntity<>(HttpStatus.OK);\n    }\n\n    /**\n     * 指定数据字典分类 id list，导出数据字典\n     *\n     * @param httpServletRequest       HttpServletRequest\n     * @param httpServletResponse      HttpServletResponse\n     * @param dictionaryCategoryIdList 数据字典分类 id list\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"指定数据字典分类 id list，导出数据字典\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY + \"/EXPORT_ALL_BY_DICTIONARY_CATEGORY_ID_LIST')\")\n    @GetMapping(value = \"/export_all_by_dictionary_category_id_list\")\n    public void exportAllByDictionaryCategoryIdList(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, @RequestParam List<Long> dictionaryCategoryIdList) throws BaseResponseException {\n        dictionaryService.exportAllByDictionaryCategoryIdList(httpServletRequest, httpServletResponse, dictionaryCategoryIdList);\n    }\n\n    /**\n     * 指定数据字典分类 id，导入数据字典\n     *\n     * @param file                 导入文件\n     * @param dictionaryCategoryId 数据字典分类 id\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"指定数据字典分类 id，导入数据字典\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY + \"/IMPORT_ALL_BY_DICTIONARY_CATEGORY_ID')\")\n    @PostMapping(value = \"/import_all_by_dictionary_category_id\")\n    public void importAllByDictionaryCategoryId(@RequestParam MultipartFile file, @RequestParam Long dictionaryCategoryId) throws BaseResponseException {\n        dictionaryService.importAllByDictionaryCategoryId(file, dictionaryCategoryId);\n    }\n\n    /**\n     * 指定数据字典分类 id，分页获取数据字典\n     *\n     * @param page                 页\n     * @param rows                 每页显示数量\n     * @param dictionaryCategoryId 数据字典分类 id\n     * @return ResponseEntity<Pagination < DictionaryEntity>>\n     */\n    @OperationLog(value = \"指定数据字典分类 id，分页获取数据字典\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DICTIONARY + \"/PAGE_ALL_BY_DICTIONARY_CATEGORY')\")\n    @GetMapping(value = \"/page_all_by_dictionary_category_id\")\n    public ResponseEntity<Pagination<DictionaryEntity>> pageAllByDictionaryCategoryId(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam Long dictionaryCategoryId) {\n        return new ResponseEntity<>(dictionaryService.pageAllByDictionaryCategoryId(dictionaryCategoryId, page, rows), HttpStatus.OK);\n//        return new ResponseEntity<>(dictionaryService.pageAllByDictionaryCategoryIdList(dictionaryCategoryIdList, page, rows), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/api/FileRestController.java",
    "content": "package com.godcheese.nimrod.system.api;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.system.System;\nimport com.godcheese.nimrod.system.entity.FileEntity;\nimport com.godcheese.nimrod.system.service.FileService;\nimport com.godcheese.nimrod.user.service.UserService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\nimport org.springframework.web.multipart.MultipartFile;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = System.Api.FILE, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class FileRestController {\n    private static final Logger LOGGER = LoggerFactory.getLogger(FileRestController.class);\n\n    private static final String FILE = \"/API/SYSTEM/FILE\";\n\n    @Autowired\n    private FileService fileService;\n    @Autowired\n    private UserService userService;\n\n    /**\n     * 指定文件 id list，批量删除文件\n     *\n     * @param idList 文件 id list\n     * @return ResponseEntity<Integer> 被删除的数量\n     */\n    @OperationLog(value = \"指定文件 id list，批量删除文件\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + FILE + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) {\n        return new ResponseEntity<>(fileService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 保存文件\n     *\n     * @param id     文件 id\n     * @param name   文件名\n     * @param remark 备注\n     * @return ResponseEntity<FileEntity>\n     */\n    @OperationLog(value = \"保存文件\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + FILE + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<FileEntity> saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam String remark) {\n        FileEntity fileEntity = new FileEntity();\n        fileEntity.setId(id);\n        fileEntity.setName(name);\n        fileEntity.setRemark(remark);\n        FileEntity fileEntity1 = fileService.saveOne(fileEntity);\n        return new ResponseEntity<>(fileEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定文件 id，获取文件\n     *\n     * @param id 文件 id\n     * @return ResponseEntity<FileEntity>\n     */\n    @OperationLog(value = \"指定文件 id，获取文件\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + FILE + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<FileEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(fileService.getOne(id), HttpStatus.OK);\n    }\n\n    /**\n     * 分页获取所有文件\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return ResponseEntity<Pagination < FileEntity>>\n     */\n    @OperationLog(value = \"分页获取所有文件\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + FILE + \"/PAGE_ALL')\")\n    @GetMapping(value = \"/page_all\")\n    public ResponseEntity<Pagination<FileEntity>> pageAll(@RequestParam Integer page, @RequestParam Integer rows) {\n        return new ResponseEntity<>(fileService.pageAll(page, rows), HttpStatus.OK);\n    }\n\n    /**\n     * 单个文件上传\n     *\n     * @param file 文件\n     * @return ResponseEntity<FileEntity>\n     */\n    @OperationLog(value = \"单个文件上传\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + FILE + \"/UPLOAD_ONE')\")\n    @PostMapping(value = \"/upload_one\")\n    public ResponseEntity<FileEntity> uploadOne(HttpServletRequest httpServletRequest, @RequestParam MultipartFile file) throws BaseResponseException {\n        LOGGER.info(\"User-Agent={}\", httpServletRequest.getHeader(\"User-Agent\"));\n        return new ResponseEntity<>(fileService.uploadOne(file), HttpStatus.OK);\n    }\n\n    /**\n     * 多个文件上传\n     *\n     * @param files 文件 file array\n     * @return ResponseEntity<FileEntity>\n     */\n    @OperationLog(value = \"多个文件上传\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + FILE + \"/UPLOAD_ALL')\")\n    @PostMapping(value = \"/upload_all\")\n    public ResponseEntity<List<FileEntity>> uploadAll(@RequestParam(\"file[]\") List<MultipartFile> files) throws BaseResponseException {\n        return new ResponseEntity<>(fileService.uploadAll(files), HttpStatus.OK);\n    }\n\n    /**\n     * 指定文件 guid，下载文件\n     *\n     * @param httpServletRequest  HttpServletRequest\n     * @param httpServletResponse HttpServletResponse\n     * @param guid                文件 guid\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"指定文件 guid，下载文件\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + FILE + \"/DOWNLOAD')\")\n    @GetMapping(value = \"/download/{guid:.+}\")\n    public void download(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, @PathVariable String guid) throws BaseResponseException {\n        fileService.download(httpServletRequest, httpServletResponse, guid);\n    }\n\n    /**\n     * 分页获取所有图片文件\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return ResponseEntity<Pagination < FileEntity>>\n     */\n    @OperationLog(value = \"分页获取所有图片文件\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + FILE + \"/PAGE_ALL_IMAGE')\")\n    @GetMapping(value = \"/page_all_image\")\n    public ResponseEntity<Pagination<FileEntity>> pageAllImage(@RequestParam Integer page, @RequestParam Integer rows) {\n        return new ResponseEntity<>(fileService.pageAllImage(page, rows, null), HttpStatus.OK);\n    }\n\n    /**\n     * 根据当前用户，分页获取所有图片文件\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return ResponseEntity<Pagination < FileEntity>>\n     */\n    @OperationLog(value = \"根据当前用户，分页获取所有图片文件\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + FILE + \"/PAGE_ALL_IMAGE')\")\n    @GetMapping(value = \"/page_all_image_by_current_user\")\n    public ResponseEntity<Pagination<FileEntity>> pageAllImageByCurrentUser(@RequestParam Integer page, @RequestParam Integer rows) {\n        return new ResponseEntity<>(fileService.pageAllImage(page, rows, userService.getCurrentUser().getId()), HttpStatus.OK);\n    }\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/api/OperationLogRestController.java",
    "content": "package com.godcheese.nimrod.system.api;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.system.entity.OperationLogEntity;\nimport com.godcheese.nimrod.system.service.OperationLogService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\nimport com.godcheese.nimrod.system.System;\n\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = System.Api.OPERATION_LOG, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class OperationLogRestController {\n\n    private static final String OPERATION_LOG = \"/API/SYSTEM/OPERATION_LOG\";\n\n    @Autowired\n    private OperationLogService operationLogService;\n\n    /**\n     * 指定操作日志 id，批量删除操作日志\n     *\n     * @return ResponseEntity<Integer>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + OPERATION_LOG + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) {\n        return new ResponseEntity<>(operationLogService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定操作日志 id，获取操作日志\n     *\n     * @param id 操作日志 id\n     * @return ResponseEntity<OperationLogEntity2>\n     */\n    @OperationLog(value = \"指定操作日志 id，获取操作日志\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + OPERATION_LOG + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<OperationLogEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(operationLogService.getOne(id), HttpStatus.OK);\n    }\n\n    /**\n     * 分页获取所有操作日志\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return ResponseEntity<Pagination < OperationLogEntity>>\n     */\n    @OperationLog(value = \"分页获取所有操作日志\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + OPERATION_LOG + \"/PAGE_ALL')\")\n    @GetMapping(value = \"/page_all\")\n    public ResponseEntity<Pagination<OperationLogEntity>> pageAll(@RequestParam Integer page, @RequestParam Integer rows) throws BaseResponseException {\n        return new ResponseEntity<>(operationLogService.pageAll(page, rows), HttpStatus.OK);\n    }\n\n    /**\n     * 清空所有操作日志\n     *\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"清空所有操作日志\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + OPERATION_LOG + \"/CLEAR_ALL')\")\n    @PostMapping(value = \"/clear_all\")\n    public ResponseEntity<HttpStatus> clearAll() {\n        operationLogService.clearAll();\n        return new ResponseEntity<>(HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/api/SystemRestController.java",
    "content": "package com.godcheese.nimrod.system.api;\n\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.system.System;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.tile.util.ColorUtil;\nimport com.godcheese.tile.util.ImageUtil;\nimport com.godcheese.tile.util.RandomUtil;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.core.io.ClassPathResource;\nimport org.springframework.core.io.ResourceLoader;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport javax.imageio.ImageIO;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.awt.*;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = System.Api.SYSTEM, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class SystemRestController {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(SystemRestController.class);\n\n    private static final String SYSTEM = \"/API/SYSTEM\";\n\n    public static final String VERIFY_CODE_NAME = \"verifyCode\";\n\n    @Autowired\n    private DictionaryService dictionaryService;\n\n    @Autowired\n    private FailureEntity failureEntity;\n\n    /**\n     * 获取验证码\n     *\n     * @param httpServletResponse HttpServletResponse\n     * @param httpServletRequest  HttpServletRequest\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"获取验证码\", type = OperationLogType.API)\n    @GetMapping(value = \"/verify_code\")\n    public void verifyCode(HttpServletResponse httpServletResponse, HttpServletRequest httpServletRequest) throws BaseResponseException {\n        long expiration = Long.parseLong((String) dictionaryService.get(\"VERIFY_CODE\", \"EXPIRATION\"));\n        boolean yawp = Boolean.parseBoolean((String) dictionaryService.get(\"VERIFY_CODE\", \"YAWP\"));\n        int stringLength = Integer.parseInt((String) dictionaryService.get(\"VERIFY_CODE\", \"STRING_LENGTH\"));\n        int interLine = Integer.parseInt((String) dictionaryService.get(\"VERIFY_CODE\", \"INTER_LINE\"));\n        String hexBackgroundColor = String.valueOf(dictionaryService.get(\"VERIFY_CODE\", \"HEX_BACKGROUND_COLOR\"));\n        String fontColor = String.valueOf(dictionaryService.get(\"VERIFY_CODE\", \"FONT_COLOR\"));\n        String fontPath = String.valueOf(dictionaryService.get(\"VERIFY_CODE\", \"FONT_PATH\"));\n        stringLength = (stringLength >= 3 && stringLength <= 8) ? stringLength : 4;\n        interLine = (interLine >= 1 && interLine <= 8) ? interLine : 0;\n        expiration = (expiration >= 20) ? expiration : 60;\n        hexBackgroundColor = hexBackgroundColor.length() == 7 ? hexBackgroundColor : \"#0064c8\";\n        fontColor = fontColor.length() == 7 ? fontColor : \"#ffffff\";\n        ImageUtil.VerifyCodeImage verifyCodeImage;\n        try {\n\n            InputStream fontInputStream = null;\n            if (fontPath.startsWith(ResourceLoader.CLASSPATH_URL_PREFIX)) {\n                fontPath = fontPath.substring(ResourceLoader.CLASSPATH_URL_PREFIX.length());\n                fontInputStream = new ClassPathResource(fontPath).getInputStream();\n            } else {\n                fontInputStream = this.getClass().getClassLoader().getResourceAsStream(fontPath);\n            }\n\n            if (fontInputStream == null) {\n                throw new BaseResponseException(failureEntity.i18n(\"system.verify_code_create_fail_font_not_exists\", fontPath));\n            }\n\n            verifyCodeImage = ImageUtil.createVerifyCodeImage(114, 40, ColorUtil.getRGBColorByHexString(hexBackgroundColor), RandomUtil.randomString(stringLength, RandomUtil.NUMBER_LETTER), ColorUtil.getRGBColorByHexString(fontColor), fontInputStream, yawp, interLine, expiration);\n\n            httpServletResponse.addHeader(\"Pragma\", \"no-cache\");\n            httpServletResponse.addHeader(\"Cache-Control\", \"no-cache\");\n            httpServletResponse.addHeader(\"Expires\", \"0\");\n            // 生成验证码，写入用户session\n            httpServletRequest.getSession().setAttribute(VERIFY_CODE_NAME, verifyCodeImage);\n            // 输出验证码给客户端\n            httpServletResponse.setContentType(MediaType.IMAGE_PNG_VALUE);\n            ImageIO.write(verifyCodeImage.getBufferedImage(), \"png\", httpServletResponse.getOutputStream());\n        } catch (FontFormatException e) {\n            e.printStackTrace();\n        } catch (IOException e) {\n            e.printStackTrace();\n            throw new BaseResponseException(failureEntity.i18n(\"system.verify_code_create_fail\"));\n        }\n    }\n\n    /**\n     * 获取系统信息\n     *\n     * @param httpServletResponse HttpServletResponse\n     * @param httpServletRequest  HttpServletRequest\n     * @return ResponseEntity<Map < String, String>>\n     */\n    @OperationLog(value = \"获取系统信息\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + SYSTEM + \"/SYSTEM_INFO')\")\n    @GetMapping(value = \"/system_info\")\n    public ResponseEntity<Map<String, String>> systemInfo(HttpServletResponse httpServletResponse, HttpServletRequest httpServletRequest) throws BaseResponseException {\n        Map<String, String> map = new HashMap<>(1);\n        map.put(\"osName\", java.lang.System.getProperty(\"os.name\"));\n        map.put(\"osVersion\", java.lang.System.getProperty(\"os.version\"));\n        map.put(\"osArch\", java.lang.System.getProperty(\"os.arch\"));\n        map.put(\"javaHome\", java.lang.System.getProperty(\"java.home\"));\n        map.put(\"javaVersion\", java.lang.System.getProperty(\"java.version\"));\n\n        /**\n         *  \"user.timezone\": \"Asia/Shanghai\",\n         *     \"os.name\": \"Mac OS X\",\n         *      \"os.version\": \"10.14.5\",\n         *      \"os.arch\": \"x86_64\",\n         *     \"java.home\": \"/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre\",\n         *           \"java.version\": \"1.8.0_192\",\n         */\n        return new ResponseEntity<>(map, HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/controller/DictionaryCategoryController.java",
    "content": "package com.godcheese.nimrod.system.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.system.System;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(System.Page.DICTIONARY_CATEGORY)\npublic class DictionaryCategoryController {\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(System.Page.DICTIONARY_CATEGORY + \"/add_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(System.Page.DICTIONARY_CATEGORY + \"/edit_dialog\");\n    }\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/controller/DictionaryController.java",
    "content": "package com.godcheese.nimrod.system.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.system.System;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(System.Page.DICTIONARY)\npublic class DictionaryController {\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/SYSTEM/DICTIONARY/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(System.Page.DICTIONARY + \"/list\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(System.Page.DICTIONARY + \"/add_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(System.Page.DICTIONARY + \"/edit_dialog\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/controller/FileController.java",
    "content": "package com.godcheese.nimrod.system.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.system.System;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(System.Page.FILE)\npublic class FileController {\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/SYSTEM/FILE/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(System.Page.FILE + \"/list\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/upload_one_dialog\")\n    public String uploadOneDialog() {\n        return Common.trimSlash(System.Page.FILE + \"/upload_one_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/upload_all_dialog\")\n    public String uploadAllDialog() {\n        return Common.trimSlash(System.Page.FILE + \"/upload_all_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(System.Page.FILE + \"/edit_dialog\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/controller/OperationLogController.java",
    "content": "package com.godcheese.nimrod.system.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.system.System;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(System.Page.OPERATION_LOG)\npublic class OperationLogController {\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/SYSTEM/OPERATION_LOG/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(System.Page.OPERATION_LOG + \"/list\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/view_dialog\")\n    public String viewDialog() {\n        return Common.trimSlash(System.Page.OPERATION_LOG + \"/view_dialog\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/controller/SystemController.java",
    "content": "package com.godcheese.nimrod.system.controller;\n\nimport com.godcheese.nimrod.common.Url;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.system.System;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping\npublic class SystemController {\n    private static final Logger LOGGER = LoggerFactory.getLogger(SystemController.class);\n\n    @Value(\"${server.error.path}\")\n    private String serverErrorPath;\n\n    /**\n     * 用户登录后首页\n     *\n     * @return String\n     */\n    @OperationLog(value = \"首页\")\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAnyAuthority('/','/INDEX','/SYSTEM','/SYSTEM/INDEX')\")\n    @RequestMapping(value = {\"/\", Url.Page.INDEX, System.Page.SYSTEM, System.Page.INDEX})\n    public String index() {\n        return Common.trimSlash(System.Page.SYSTEM + \"/index\");\n    }\n\n    /**\n     * 工作台\n     *\n     * @return String\n     */\n    @OperationLog(value = \"工作台\")\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/SYSTEM/WORKBENCH')\")\n    @RequestMapping(value = System.Page.WORKBENCH)\n    public String workbench() {\n        return Common.trimSlash(System.Page.WORKBENCH);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/entity/DictionaryCategoryEntity.java",
    "content": "package com.godcheese.nimrod.system.entity;\n\nimport com.godcheese.nimrod.common.easyui.TreeGridAdapter;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class DictionaryCategoryEntity extends TreeGridAdapter<DictionaryCategoryEntity> implements Serializable {\n\n    private static final long serialVersionUID = -7781485490574400936L;\n\n    private Long id;\n    /**\n     * 分类名称\n     */\n    private String name;\n    /**\n     * 父级分类 id\n     */\n    private Long parentId;\n    /**\n     * 排序\n     */\n    private Long sort;\n    /**\n     * 备注\n     */\n    private String remark;\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public Long getParentId() {\n        return parentId;\n    }\n\n    public void setParentId(Long parentId) {\n        this.parentId = parentId;\n    }\n\n    public Long getSort() {\n        return sort;\n    }\n\n    public void setSort(Long sort) {\n        this.sort = sort;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/entity/DictionaryEntity.java",
    "content": "package com.godcheese.nimrod.system.entity;\n\nimport com.godcheese.nimrod.common.exportbyexcel.ExportByExcel;\nimport com.godcheese.nimrod.common.exportbyexcel.IsOrNotExportByExcelHandler;\nimport com.godcheese.nimrod.common.exportbyexcel.SimpleDateFormatExportByExcelHandler;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class DictionaryEntity implements Serializable {\n\n    private static final long serialVersionUID = 1964884843454780630L;\n\n    /**\n     * id\n     */\n    @ExportByExcel(name = \"ID\", importIgnore = true, exportIgnore = true)\n    private Long id;\n\n    /**\n     * 字典键名\n     */\n    @ExportByExcel(\"字典键名\")\n    private String keyName;\n\n    /**\n     * 字典键\n     */\n    @ExportByExcel(name = \"字典键\")\n    private String key;\n\n    /**\n     * 字典值名\n     */\n    @ExportByExcel(\"字典值名\")\n    private String valueName;\n\n    /**\n     * 字典值别名\n     */\n    @ExportByExcel(\"字典值别名\")\n    private String valueSlug;\n\n    /**\n     * 字典值\n     */\n    @ExportByExcel(\"字典值\")\n    private String value;\n\n    /**\n     * 字典分类 id\n     */\n    private Long dictionaryCategoryId;\n\n    /**\n     * 是否有效（0=否，1=是，默认=0）\n     */\n    @ExportByExcel(value = \"是否启用\", handler = IsOrNotExportByExcelHandler.class)\n    private Integer enabled;\n\n    /**\n     * 排序\n     */\n    @ExportByExcel(\"排序\")\n    private Long sort;\n\n    /**\n     * 备注\n     */\n    @ExportByExcel(\"备注\")\n    private String remark;\n\n    /**\n     * 更新时间\n     */\n    @ExportByExcel(value = \"更新时间\", handler = SimpleDateFormatExportByExcelHandler.class)\n    private Date gmtModified;\n\n    /**\n     * 创建时间\n     */\n    @ExportByExcel(value = \"创建时间\", handler = SimpleDateFormatExportByExcelHandler.class)\n\n    private Date gmtCreated;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getKeyName() {\n        return keyName;\n    }\n\n    public void setKeyName(String keyName) {\n        this.keyName = keyName;\n    }\n\n    public String getKey() {\n        return key;\n    }\n\n    public void setKey(String key) {\n        this.key = key;\n    }\n\n    public String getValueName() {\n        return valueName;\n    }\n\n    public void setValueName(String valueName) {\n        this.valueName = valueName;\n    }\n\n    public String getValueSlug() {\n        return valueSlug;\n    }\n\n    public void setValueSlug(String valueSlug) {\n        this.valueSlug = valueSlug;\n    }\n\n    public String getValue() {\n        return value;\n    }\n\n    public void setValue(String value) {\n        this.value = value;\n    }\n\n    public Integer getEnabled() {\n        return enabled;\n    }\n\n    public void setEnabled(Integer enabled) {\n        this.enabled = enabled;\n    }\n\n    public Long getDictionaryCategoryId() {\n        return dictionaryCategoryId;\n    }\n\n    public void setDictionaryCategoryId(Long dictionaryCategoryId) {\n        this.dictionaryCategoryId = dictionaryCategoryId;\n    }\n\n    public Long getSort() {\n        return sort;\n    }\n\n    public void setSort(Long sort) {\n        this.sort = sort;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n\n    @Override\n    public String toString() {\n        return \"DictionaryEntity{\" +\n                \"id=\" + id +\n                \", key='\" + key + '\\'' +\n                \", keyName='\" + keyName + '\\'' +\n                \", valueName='\" + valueName + '\\'' +\n                \", valueSlug='\" + valueSlug + '\\'' +\n                \", value='\" + value + '\\'' +\n                \", enabled=\" + enabled +\n                \", dictionaryCategoryId=\" + dictionaryCategoryId +\n                \", sort=\" + sort +\n                \", remark='\" + remark + '\\'' +\n                \", gmtModified=\" + gmtModified +\n                \", gmtCreated=\" + gmtCreated +\n                '}';\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/entity/FileEntity.java",
    "content": "package com.godcheese.nimrod.system.entity;\n\nimport com.godcheese.nimrod.common.others.BaseEntityAdapter;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class FileEntity extends BaseEntityAdapter<FileEntity> implements Serializable {\n\n    private static final long serialVersionUID = -361336044807379339L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 用户 id\n     */\n    private Long userId;\n\n    /**\n     * 文件名\n     */\n    private String name;\n\n    /**\n     * 文件大小\n     */\n    private Long size;\n\n    /**\n     * 文件美化大小\n     */\n    private String prettySize;\n\n    /**\n     * MIME 类型\n     */\n    private String mimeType;\n\n    /**\n     * 文件路径\n     */\n    private String path;\n\n    /**\n     * 唯一标识符\n     */\n    private String guid;\n\n    /**\n     * 备注\n     */\n    private String remark;\n\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public Long getUserId() {\n        return userId;\n    }\n\n    public void setUserId(Long userId) {\n        this.userId = userId;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public Long getSize() {\n        return size;\n    }\n\n    public void setSize(Long size) {\n        this.size = size;\n    }\n\n    public String getPrettySize() {\n        return prettySize;\n    }\n\n    public void setPrettySize(String prettySize) {\n        this.prettySize = prettySize;\n    }\n\n    public String getMimeType() {\n        return mimeType;\n    }\n\n    public void setMimeType(String mimeType) {\n        this.mimeType = mimeType;\n    }\n\n    public String getPath() {\n        return path;\n    }\n\n    public void setPath(String path) {\n        this.path = path;\n    }\n\n    public String getGuid() {\n        return guid;\n    }\n\n    public void setGuid(String guid) {\n        this.guid = guid;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/entity/OperationLogEntity.java",
    "content": "package com.godcheese.nimrod.system.entity;\n\nimport com.godcheese.nimrod.common.others.BaseEntityAdapter;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class OperationLogEntity extends BaseEntityAdapter<OperationLogEntity> implements Serializable {\n\n    private static final long serialVersionUID = 723090697169069573L;\n\n    private Long id;\n\n    /**\n     * 访问用户 id\n     */\n    private Long userId;\n\n    /**\n     * 用户 IP\n     */\n    private String ipAddress;\n\n    /**\n     * 操作类型\n     */\n    private Integer operationType;\n\n    /**\n     * 操作说明\n     */\n    private String operation;\n\n    /**\n     * 请求耗时（毫秒）consumingTime\n     */\n    private Long consumingTime;\n\n    /**\n     * 请求地址\n     */\n    private String requestUrl;\n\n    /**\n     * 请求方法\n     */\n    private String requestMethod;\n\n    /**\n     * 请求参数\n     */\n    private String requestParameter;\n\n    /**\n     * 请求语言\n     */\n    private String acceptLanguage;\n\n    /**\n     * 请求来源\n     */\n    private String referer;\n\n    /**\n     * 用户代理\n     */\n    private String userAgent;\n\n    /**\n     * Handler\n     */\n    private String handler;\n\n    /**\n     * 异常堆栈\n     */\n    private String stackTrace;\n\n    /**\n     * Session ID\n     */\n    private String sessionId;\n\n    /**\n     * Cookie\n     */\n    private String cookie;\n\n    /**\n     * 响应状态码\n     */\n    private String status;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public Long getUserId() {\n        return userId;\n    }\n\n    public void setUserId(Long userId) {\n        this.userId = userId;\n    }\n\n    public String getIpAddress() {\n        return ipAddress;\n    }\n\n    public void setIpAddress(String ipAddress) {\n        this.ipAddress = ipAddress;\n    }\n\n    public Integer getOperationType() {\n        return operationType;\n    }\n\n    public void setOperationType(Integer operationType) {\n        this.operationType = operationType;\n    }\n\n    public String getOperation() {\n        return operation;\n    }\n\n    public void setOperation(String operation) {\n        this.operation = operation;\n    }\n\n    public Long getConsumingTime() {\n        return consumingTime;\n    }\n\n    public void setConsumingTime(Long consumingTime) {\n        this.consumingTime = consumingTime;\n    }\n\n    public String getRequestUrl() {\n        return requestUrl;\n    }\n\n    public void setRequestUrl(String requestUrl) {\n        this.requestUrl = requestUrl;\n    }\n\n    public String getRequestMethod() {\n        return requestMethod;\n    }\n\n    public void setRequestMethod(String requestMethod) {\n        this.requestMethod = requestMethod;\n    }\n\n    public String getRequestParameter() {\n        return requestParameter;\n    }\n\n    public void setRequestParameter(String requestParameter) {\n        this.requestParameter = requestParameter;\n    }\n\n    public String getAcceptLanguage() {\n        return acceptLanguage;\n    }\n\n    public void setAcceptLanguage(String acceptLanguage) {\n        this.acceptLanguage = acceptLanguage;\n    }\n\n    public String getReferer() {\n        return referer;\n    }\n\n    public void setReferer(String referer) {\n        this.referer = referer;\n    }\n\n    public String getUserAgent() {\n        return userAgent;\n    }\n\n    public void setUserAgent(String userAgent) {\n        this.userAgent = userAgent;\n    }\n\n    public String getHandler() {\n        return handler;\n    }\n\n    public void setHandler(String handler) {\n        this.handler = handler;\n    }\n\n    public String getStackTrace() {\n        return stackTrace;\n    }\n\n    public void setStackTrace(String stackTrace) {\n        this.stackTrace = stackTrace;\n    }\n\n    public String getSessionId() {\n        return sessionId;\n    }\n\n    public void setSessionId(String sessionId) {\n        this.sessionId = sessionId;\n    }\n\n    public String getCookie() {\n        return cookie;\n    }\n\n    public void setCookie(String cookie) {\n        this.cookie = cookie;\n    }\n\n    public String getStatus() {\n        return status;\n    }\n\n    public void setStatus(String status) {\n        this.status = status;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n\n    @Override\n    public String toString() {\n        return \"OperationLogEntity{\" +\n                \"id=\" + id +\n                \", userId=\" + userId +\n                \", ipAddress='\" + ipAddress + '\\'' +\n                \", operationType=\" + operationType +\n                \", operation='\" + operation + '\\'' +\n                \", consumingTime=\" + consumingTime +\n                \", requestUrl='\" + requestUrl + '\\'' +\n                \", requestMethod='\" + requestMethod + '\\'' +\n                \", requestParameter='\" + requestParameter + '\\'' +\n                \", acceptLanguage='\" + acceptLanguage + '\\'' +\n                \", referer='\" + referer + '\\'' +\n                \", userAgent='\" + userAgent + '\\'' +\n                \", handler='\" + handler + '\\'' +\n                \", stackTrace='\" + stackTrace + '\\'' +\n                \", sessionId='\" + sessionId + '\\'' +\n                \", cookie='\" + cookie + '\\'' +\n                \", status='\" + status + '\\'' +\n                \", gmtCreated=\" + gmtCreated +\n                '}';\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/mapper/DictionaryCategoryMapper.java",
    "content": "package com.godcheese.nimrod.system.mapper;\n\nimport com.godcheese.nimrod.system.entity.DictionaryCategoryEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"dictionaryCategoryMapper\")\n@Mapper\npublic interface DictionaryCategoryMapper extends CrudMapper<DictionaryCategoryEntity, Long> {\n\n    /**\n     * 分页获取所有父级 id 为 null 的数据字典分类\n     *\n     * @return List<DictionaryCategoryEntity>\n     */\n    List<DictionaryCategoryEntity> listAllByParentIdIsNull();\n\n    /**\n     * 指定父级数据字典分类 id，获取所有数据字典分类\n     *\n     * @param parentId 父级数据字典分类 id\n     * @return List<DictionaryCategoryEntity>\n     */\n    List<DictionaryCategoryEntity> listAllByParentId(@Param(\"parentId\") Long parentId);\n\n    /**\n     * 指定父级 id 为 null 的数据字典分类，获取数据字典分类\n     *\n     * @param parentId 父级数据字典分类 id\n     * @return DictionaryCategoryEntity\n     */\n    DictionaryCategoryEntity getOneByParentId(@Param(\"parentId\") Long parentId);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/mapper/DictionaryCategoryMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.system.mapper.DictionaryCategoryMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.system.entity.DictionaryCategoryEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"name\" property=\"name\" jdbcType=\"VARCHAR\"/> <!-- 分类名称 -->\n        <result column=\"parent_id\" property=\"parentId\" jdbcType=\"BIGINT\"/> <!-- 父级分类 id -->\n        <result column=\"sort\" property=\"sort\" jdbcType=\"BIGINT\"/> <!-- 排序 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `dictionary_category`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `name`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.system.entity.DictionaryCategoryEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `name`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`)\n        values (#{id}, #{name}, #{parentId}, #{sort}, #{remark}, #{gmtModified}, #{gmtCreated})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.system.entity.DictionaryCategoryEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `name` = #{name}, `parent_id` = #{parentId}, `gmt_modified` = #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"listAllByParentIdIsNull\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` is null\n    </select>\n\n    <select id=\"listAllByParentId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` = #{parentId}\n    </select>\n\n    <select id=\"getOneByParentId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` = #{parentId} limit 1\n    </select>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/mapper/DictionaryMapper.java",
    "content": "package com.godcheese.nimrod.system.mapper;\n\nimport com.godcheese.nimrod.system.entity.DictionaryEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport com.github.pagehelper.Page;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"dictionaryMapper\")\n@Mapper\npublic interface DictionaryMapper extends CrudMapper<DictionaryEntity, Long> {\n\n    /**\n     * 指定数据字典分类 id，获取数据字典\n     *\n     * @param dictionaryCategoryId 数据字典分类 id\n     * @return DictionaryEntity\n     */\n    DictionaryEntity getOneByDictionaryCategoryId(@Param(\"dictionaryCategoryId\") Long dictionaryCategoryId);\n\n    /**\n     * 指定数据字典分类 id，分页获取所有数据字典\n     *\n     * @param dictionaryCategoryId 数据字典分类 id\n     * @return Page<DictionaryEntity>\n     */\n    Page<DictionaryEntity> pageAllByDictionaryCategoryId(@Param(\"dictionaryCategoryId\") Long dictionaryCategoryId);\n\n    /**\n     * 指定数据字典键和值别名，获取数据字典\n     *\n     * @param key       数据字典键\n     * @param valueSlug 数据字典值别名\n     * @return DictionaryEntity\n     */\n    DictionaryEntity getOneByKeyAndValueSlug(@Param(\"key\") String key, @Param(\"valueSlug\") String valueSlug);\n\n    /**\n     * 指定数据字典键，获取所有数据字典\n     *\n     * @param key 数据字典键\n     * @return List<DictionaryEntity>\n     */\n    List<DictionaryEntity> listAllByKey(@Param(\"key\") String key);\n\n    /**\n     * 指定数据字典分类 id，分页获取所有数据字典\n     *\n     * @param dictionaryCategoryId 数据字典分类 id\n     * @return List<DictionaryEntity>\n     */\n    List<DictionaryEntity> listAllByDictionaryCategoryId(@Param(\"dictionaryCategoryId\") Long dictionaryCategoryId);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/mapper/DictionaryMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.system.mapper.DictionaryMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.system.entity.DictionaryEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"key_name\" property=\"keyName\" jdbcType=\"VARCHAR\"/> <!-- 字典键名 -->\n        <result column=\"key\" property=\"key\" jdbcType=\"VARCHAR\"/> <!-- 字典键 -->\n        <result column=\"value_name\" property=\"valueName\" jdbcType=\"VARCHAR\"/> <!-- 字典值名 -->\n        <result column=\"value_slug\" property=\"valueSlug\" jdbcType=\"VARCHAR\"/> <!-- 字典值别名 -->\n        <result column=\"value\" property=\"value\" jdbcType=\"LONGVARCHAR\"/> <!-- 字典值 -->\n        <result column=\"dictionary_category_id\" property=\"dictionaryCategoryId\" jdbcType=\"BIGINT\"/> <!-- 字典分类 id -->\n        <result column=\"enabled\" property=\"enabled\" jdbcType=\"TINYINT\"/> <!-- 是否启用（0=否，1=是，默认=0） -->\n        <result column=\"sort\" property=\"sort\" jdbcType=\"BIGINT\"/> <!-- 排序 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `dictionary`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `key_name`, `key`, `value_name`, `value_slug`, `value`, `enabled`, `dictionary_category_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.system.entity.DictionaryEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `key_name`, `key`, `value_name`, `value_slug`, `value`,`dictionary_category_id`, `enabled`, `sort`,\n        `remark`, `gmt_modified`, `gmt_created`)\n        values (#{id}, #{keyName}, #{key}, #{valueName}, #{valueSlug}, #{value}, #{dictionaryCategoryId}, #{enabled},\n        #{sort}, #{remark}, #{gmtModified}, #{gmtCreated})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.system.entity.DictionaryEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `key_name` = #{keyName}, `key` = #{key}, `value_name` = #{valueName}, `value_slug` = #{valueSlug}, `value` =\n        #{value}, `dictionary_category_id` = #{dictionaryCategoryId}, `enabled` = #{enabled}, `sort` = #{sort}, `remark`\n        = #{remark}, `gmt_modified` = #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <!--    <select id=\"pageAll\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">-->\n    <!--        select-->\n    <!--        <include refid=\"BaseColumnList\"/>-->\n    <!--        from-->\n    <!--        <include refid=\"TableName\"/>-->\n    <!--    </select>-->\n\n    <select id=\"getOneByDictionaryCategoryId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `dictionary_category_id` = #{dictionaryCategoryId} limit 1\n    </select>\n\n    <select id=\"pageAllByDictionaryCategoryId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `dictionary_category_id` = #{dictionaryCategoryId}\n    </select>\n\n    <select id=\"getOneByKeyAndValueSlug\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `key` = #{key} AND `value_slug` = #{valueSlug} limit 1\n    </select>\n\n    <select id=\"listAllByKey\" resultMap=\"BaseResultMap\" parameterType=\"string\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `key` = #{key}\n    </select>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <select id=\"listAllByDictionaryCategoryId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `dictionary_category_id` = #{dictionaryCategoryId}\n    </select>\n\n    <select id=\"pageAllByDictionaryCategoryIdList\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `dictionary_category_id` in (\n        <foreach collection=\"dictionaryCategoryIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </select>\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/mapper/FileMapper.java",
    "content": "package com.godcheese.nimrod.system.mapper;\n\nimport com.godcheese.nimrod.system.entity.FileEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport com.github.pagehelper.Page;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"fileMapper\")\n@Mapper\npublic interface FileMapper extends CrudMapper<FileEntity, Long> {\n\n    /**\n     * 指定 guid，获取文件\n     *\n     * @param guid guid\n     * @return FileEntity\n     */\n    FileEntity getOneByGuid(@Param(\"guid\") String guid);\n\n    /**\n     * 分页获取所有文件\n     *\n     * @return Page<FileEntity>\n     */\n    Page<FileEntity> pageAll();\n\n    Page<FileEntity> pageAllByUserId();\n\n    /**\n     * 分页获取所有图片文件\n     *\n     * @return Page<FileEntity>\n     */\n    Page<FileEntity> pageAllImage();\n\n    Page<FileEntity> pageAllImageByUserId(@Param(\"userId\") Long userId);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/mapper/FileMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.system.mapper.FileMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.system.entity.FileEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"user_id\" property=\"userId\" jdbcType=\"BIGINT\"/> <!-- 用户 id -->\n        <result column=\"name\" property=\"name\" jdbcType=\"VARCHAR\"/> <!-- 文件名 -->\n        <result column=\"size\" property=\"size\" jdbcType=\"BIGINT\"/> <!-- 文件大小 -->\n        <result column=\"pretty_size\" property=\"prettySize\" jdbcType=\"VARCHAR\"/> <!-- 文件美化大小 -->\n        <result column=\"mime_type\" property=\"mimeType\" jdbcType=\"VARCHAR\"/> <!-- MIME 类型 -->\n        <result column=\"path\" property=\"path\" jdbcType=\"LONGVARCHAR\"/> <!-- 文件路径 -->\n        <result column=\"guid\" property=\"guid\" jdbcType=\"VARCHAR\"/> <!-- 唯一标识符 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `file`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `user_id`, `name`, `size`, `pretty_size`, `mime_type`, `path`, `guid`, `remark`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.system.entity.FileEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        ( `user_id`,`name`, `size`, `pretty_size`, `mime_type`, `path`, `guid`, `remark`, `gmt_modified`, `gmt_created`)\n        values (#{userId}, #{name}, #{size}, #{prettySize}, #{mimeType}, #{path}, #{guid}, #{remark}, #{gmtCreated},\n        #{gmtModified})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.system.entity.FileEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `name` = #{name}, `size` = #{size}, `pretty_size` = #{prettySize}, `mime_type` = #{mimeType}, `path` =\n        #{path}, `guid` = #{guid}, `remark` = #{remark}, `gmt_created` = #{gmtCreated}, `gmt_modified` = #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"pageAll\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"pageAllByUserId\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `user_id` = #{userId}\n    </select>\n\n    <select id=\"pageAllImage\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `mime_type` like 'image%'\n    </select>\n\n    <select id=\"pageAllImageByUserId\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `mime_type` like 'image%' and `user_id` = #{userId}\n    </select>\n\n    <select id=\"getOneByGuid\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `guid` = #{guid} limit 1\n    </select>\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/mapper/OperationLogMapper.java",
    "content": "package com.godcheese.nimrod.system.mapper;\n\nimport com.godcheese.nimrod.system.entity.OperationLogEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport com.github.pagehelper.Page;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.springframework.stereotype.Component;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"operationLogMapper\")\n@Mapper\npublic interface OperationLogMapper extends CrudMapper<OperationLogEntity, Long> {\n\n    /**\n     * 分页获取所有操作日志\n     *\n     * @return Page<OperationLogEntity>\n     */\n    Page<OperationLogEntity> pageAll();\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/mapper/OperationLogMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.system.mapper.OperationLogMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.system.entity.OperationLogEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"user_id\" property=\"userId\" jdbcType=\"BIGINT\"/> <!-- 访问用户 id -->\n        <result column=\"ip_address\" property=\"ipAddress\" jdbcType=\"VARCHAR\"/> <!-- 用户 IP -->\n        <result column=\"operation_type\" property=\"operationType\" jdbcType=\"INTEGER\"/> <!-- 操作类型 -->\n        <result column=\"operation\" property=\"operation\" jdbcType=\"LONGVARCHAR\"/> <!-- 操作说明 -->\n        <result column=\"consuming_time\" property=\"consumingTime\" jdbcType=\"BIGINT\"/> <!-- 操作耗时（毫秒） -->\n        <result column=\"request_url\" property=\"requestUrl\" jdbcType=\"VARCHAR\"/> <!-- 请求地址 -->\n        <result column=\"request_method\" property=\"requestMethod\" jdbcType=\"VARCHAR\"/> <!-- 请求方法 -->\n        <result column=\"request_parameter\" property=\"requestParameter\" jdbcType=\"LONGVARCHAR\"/> <!-- 请求参数 -->\n        <result column=\"accept_language\" property=\"acceptLanguage\" jdbcType=\"VARCHAR\"/> <!-- 请求语言 -->\n        <result column=\"referer\" property=\"referer\" jdbcType=\"VARCHAR\"/> <!-- 请求来源 -->\n        <result column=\"user_agent\" property=\"userAgent\" jdbcType=\"VARCHAR\"/> <!-- 用户代理 -->\n        <result column=\"handler\" property=\"handler\" jdbcType=\"LONGVARCHAR\"/> <!-- Handler -->\n        <result column=\"stack_trace\" property=\"stackTrace\" jdbcType=\"LONGVARCHAR\"/> <!-- 异常堆栈 -->\n        <result column=\"session_id\" property=\"sessionId\" jdbcType=\"VARCHAR\"/> <!-- Session ID -->\n        <result column=\"cookie\" property=\"cookie\" jdbcType=\"LONGVARCHAR\"/> <!-- Cookie -->\n        <result column=\"status\" property=\"status\" jdbcType=\"VARCHAR\"/> <!-- 响应状态码 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `operation_log`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `user_id`, `ip_address`, `operation_type`, `operation`, `consuming_time`, `request_url`, `request_method`, `request_parameter`, `accept_language`, `referer`, `user_agent`, `handler`, `stack_trace`, `session_id`, `cookie`, `status`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.system.entity.OperationLogEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`user_id`, `ip_address`, `operation_type`, `operation`, `consuming_time`, `request_url`, `request_method`,\n        `request_parameter`, `accept_language`, `referer`, `user_agent`, `handler`, `stack_trace`, `session_id`,\n        `cookie`, `status`, `gmt_created`)\n        values (#{userId}, #{ipAddress}, #{operationType}, #{operation}, #{consumingTime}, #{requestUrl},\n        #{requestMethod}, #{requestParameter}, #{acceptLanguage}, #{referer}, #{userAgent}, #{handler}, #{stackTrace},\n        #{sessionId},\n        #{cookie}, #{status}, #{gmtCreated})\n    </insert>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <update id=\"truncate\">\n        truncate table\n        <include refid=\"TableName\"/>\n    </update>\n\n    <select id=\"pageAll\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/service/DictionaryCategoryService.java",
    "content": "package com.godcheese.nimrod.system.service;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.system.entity.DictionaryCategoryEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface DictionaryCategoryService {\n\n    /**\n     * 分页获取所有父级数据字典分类\n     *\n     * @return List<DictionaryCategoryEntity>\n     */\n    List<DictionaryCategoryEntity> listAllParent();\n\n    /**\n     * 指定父级数据字典分类 id，获取所有数据字典分类\n     *\n     * @param parentId 父级数据字典分类 id\n     * @return List<DictionaryEntity>\n     */\n    List<DictionaryCategoryEntity> listAllByParentId(Long parentId);\n\n    /**\n     * 新增数据字典分类\n     *\n     * @param dictionaryCategoryEntity DictionaryCategoryEntity\n     * @return DictionaryCategoryEntity\n     */\n    DictionaryCategoryEntity insertOne(DictionaryCategoryEntity dictionaryCategoryEntity);\n\n    /**\n     * 保存数据字典分类\n     *\n     * @param dictionaryCategoryEntity DictionaryCategoryEntity\n     * @return DictionaryCategoryEntity\n     */\n    DictionaryCategoryEntity updateOne(DictionaryCategoryEntity dictionaryCategoryEntity) throws BaseResponseException;\n\n    /**\n     * 指定数据字典分类 id list，批量删除数据字典分类\n     *\n     * @param idList 数据字典分类 id list\n     * @return int\n     * @throws BaseResponseException BaseResponseException\n     */\n    int deleteAll(List<Long> idList) throws BaseResponseException;\n\n    /**\n     * 指定数据字典分类 id，获取数据字典分类\n     *\n     * @param id 数据字典分类 id\n     * @return DictionaryCategoryEntity\n     */\n    DictionaryCategoryEntity getOne(Long id);\n\n    /**\n     * 获取所有数据字典分类，以 ComboTree 形式展示\n     *\n     * @return List<ComboTree>\n     */\n    List<ComboTree> listAllDictionaryCategoryComboTree();\n\n    /**\n     * 指定父级数据字典分类 id，DictionaryCategoryComboTree list，获取所有子级数据字典分类\n     *\n     * @param parentId                        父级数据字典分类 id\n     * @param dictionaryCategoryComboTreeList DictionaryCategoryComboTree list\n     * @return List<ComboTree>\n     */\n    List<ComboTree> getDictionaryCategoryChildrenComboTree(long parentId, List<ComboTree> dictionaryCategoryComboTreeList);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/service/DictionaryService.java",
    "content": "package com.godcheese.nimrod.system.service;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.system.entity.DictionaryEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.web.multipart.MultipartFile;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface DictionaryService {\n\n    /**\n     * 添加数据字典到 ServletContext（内存），高效\n     */\n    void addDictionaryToServletContext();\n\n    /**\n     * 从数据库获取数据字典值\n     *\n     * @param key       数据字典键\n     * @param valueSlug 数据字典值别名\n     * @return Object\n     */\n    Object getFromDatabase(String key, String valueSlug);\n\n    /**\n     * 从内存获取数据字典值\n     *\n     * @param key       数据字典键\n     * @param valueSlug 数据字典值别名\n     * @return Object 数据字典值\n     */\n    Object get(String key, String valueSlug);\n\n    /**\n     * 从内存获取数据字典值\n     *\n     * @param key          数据字典键\n     * @param valueSlug    数据字典值别名\n     * @param defaultValue 数据字典默认值\n     * @return 数据字典值\n     */\n    Object get(String key, String valueSlug, Object defaultValue);\n\n    /**\n     * 指定数据字典键，从内存获取所有数据字典\n     *\n     * @param key 数据字典键\n     * @return List<DictionaryEntity>\n     */\n    List<DictionaryEntity> get(String key);\n\n    /**\n     * 将数据字典包装成 map\n     *\n     * @return Map<String, Map < String, Object>>\n     */\n    Map<String, Map<String, Object>> keyValueMap();\n\n    /**\n     * 新增数据字典\n     *\n     * @param dictionaryEntity DictionaryEntity\n     * @return DictionaryEntity\n     */\n    DictionaryEntity addOne(DictionaryEntity dictionaryEntity);\n\n    /**\n     * 保存数据字典\n     *\n     * @param dictionaryEntity DictionaryEntity\n     * @return DictionaryEntity\n     */\n    DictionaryEntity saveOne(DictionaryEntity dictionaryEntity);\n\n    /**\n     * 指定数据字典 id，批量删除数据字典\n     *\n     * @param idList 数据字典 id list\n     * @return int 已删除数据字典个数\n     */\n    int deleteAll(List<Long> idList);\n\n    /**\n     * 指定数据字典 id，获取数据字典\n     *\n     * @param id 数据字典 id\n     * @return DictionaryEntity\n     */\n    DictionaryEntity getOne(Long id);\n\n    /**\n     * 指定数据字典分类 id list，导出所有数据字典\n     *\n     * @param httpServletRequest       HttpServletRequest\n     * @param httpServletResponse      HttpServletResponse\n     * @param dictionaryCategoryIdList 数据字典分类 id list\n     * @throws BaseResponseException BaseResponseException\n     */\n    void exportAllByDictionaryCategoryIdList(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, List<Long> dictionaryCategoryIdList) throws BaseResponseException;\n\n    /**\n     * 指定数据字典分类 id，导入数据字典\n     *\n     * @param multipartFile        要导入的数据字典 Excel 表文件\n     * @param dictionaryCategoryId 数据字典分类 id\n     * @throws BaseResponseException BaseResponseException\n     */\n    void importAllByDictionaryCategoryId(MultipartFile multipartFile, Long dictionaryCategoryId) throws BaseResponseException;\n\n    /**\n     * 指定父级数据字典分类 id，分页获取所有数据字典\n     *\n     * @param dictionaryCategoryId 数据字典分类 id\n     * @param page                 页\n     * @param rows                 每页显示数量\n     * @return Pagination<DictionaryEntity>\n     */\n    Pagination<DictionaryEntity> pageAllByDictionaryCategoryId(Long dictionaryCategoryId, Integer page, Integer rows);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/service/FileService.java",
    "content": "package com.godcheese.nimrod.system.service;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.system.entity.FileEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.web.multipart.MultipartFile;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface FileService {\n\n    /**\n     * 指定文件 id，分页获取所有文件\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return Pagination<FileEntity>\n     */\n    Pagination<FileEntity> pageAll(Integer page, Integer rows);\n\n    /**\n     * 单文件上传\n     *\n     * @param file MultipartFile\n     * @return FileEntity\n     * @throws BaseResponseException BaseResponseException\n     */\n    FileEntity uploadOne(MultipartFile file) throws BaseResponseException;\n\n    /**\n     * 多文件上传\n     *\n     * @param fileList MultipartFile list\n     * @return List<FileEntity>\n     * @throws BaseResponseException BaseResponseException\n     */\n    List<FileEntity> uploadAll(List<MultipartFile> fileList) throws BaseResponseException;\n\n    /**\n     * 保存文件\n     *\n     * @param fileEntity FileEntity\n     * @return FileEntity\n     */\n    FileEntity saveOne(FileEntity fileEntity);\n\n    /**\n     * 指定文件 id list，批量删除文件\n     *\n     * @param idList API id list\n     * @return int 已删除 API 个数\n     */\n    int deleteAll(List<Long> idList);\n\n    /**\n     * 指定文件 id，获取文件\n     *\n     * @param id 文件 id\n     * @return FileEntity\n     */\n    FileEntity getOne(Long id);\n\n    /**\n     * 指定 guid，下载文件\n     *\n     * @param httpServletRequest  HttpServletRequest\n     * @param httpServletResponse HttpServletResponse\n     * @param guid                guid\n     * @throws BaseResponseException BaseResponseException\n     */\n    void download(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String guid) throws BaseResponseException;\n\n    /**\n     * 分页获取所有图片文件\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return Pagination<FileEntity>\n     */\n    Pagination<FileEntity> pageAllImage(Integer page, Integer rows, Long userId);\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/service/OperationLogService.java",
    "content": "package com.godcheese.nimrod.system.service;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.system.entity.OperationLogEntity;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface OperationLogService {\n\n    /**\n     * 分页获取所有操作日志\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return Pagination<OperationLogEntity>\n     */\n    Pagination<OperationLogEntity> pageAll(Integer page, Integer rows);\n\n    /**\n     * 新增操作日志\n     *\n     * @param operationLogEntity OperationLogEntity\n     * @return OperationLogEntity\n     */\n    OperationLogEntity addOne(OperationLogEntity operationLogEntity);\n\n    /**\n     * 指定操作日志 id，批量删除操作日志\n     *\n     * @param idList 操作日志 id list\n     * @return 已删除操作日志个数\n     */\n    int deleteAll(List<Long> idList);\n\n    /**\n     * 指定操作日志 id，获取操作日志\n     *\n     * @param id 操作日志 id\n     * @return OperationLogEntity\n     */\n    OperationLogEntity getOne(Long id);\n\n    /**\n     * 清空所有操作日志\n     */\n    void clearAll();\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/service/impl/DictionaryCategoryServiceImpl.java",
    "content": "package com.godcheese.nimrod.system.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.common.easyui.EasyUi;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.system.entity.DictionaryCategoryEntity;\nimport com.godcheese.nimrod.system.entity.DictionaryEntity;\nimport com.godcheese.nimrod.system.mapper.DictionaryCategoryMapper;\nimport com.godcheese.nimrod.system.mapper.DictionaryMapper;\nimport com.godcheese.nimrod.system.service.DictionaryCategoryService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class DictionaryCategoryServiceImpl implements DictionaryCategoryService {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(DictionaryCategoryServiceImpl.class);\n\n    @Autowired\n    private DictionaryCategoryMapper dictionaryCategoryMapper;\n\n    @Autowired\n    private DictionaryMapper dictionaryMapper;\n\n    @Autowired\n    private FailureEntity failureEntity;\n\n    @Override\n    public List<DictionaryCategoryEntity> listAllParent() {\n        List<DictionaryCategoryEntity> dictionaryCategoryEntityList = dictionaryCategoryMapper.listAllByParentIdIsNull();\n        List<DictionaryCategoryEntity> dictionaryCategoryEntityListResult = new ArrayList<>();\n        for (DictionaryCategoryEntity dictionaryCategoryEntity : dictionaryCategoryEntityList) {\n            if (dictionaryCategoryMapper.getOneByParentId(dictionaryCategoryEntity.getId()) != null) {\n                dictionaryCategoryEntity.setState(EasyUi.State.CLOSED);\n            }\n            dictionaryCategoryEntityListResult.add(dictionaryCategoryEntity);\n        }\n        return dictionaryCategoryEntityListResult;\n    }\n\n    @Override\n    public List<DictionaryCategoryEntity> listAllByParentId(Long parentId) {\n        List<DictionaryCategoryEntity> dictionaryCategoryEntityList = dictionaryCategoryMapper.listAllByParentId(parentId);\n        List<DictionaryCategoryEntity> dictionaryCategoryEntityListResult = new ArrayList<>();\n        for (DictionaryCategoryEntity dictionaryCategoryEntity : dictionaryCategoryEntityList) {\n            if (dictionaryCategoryMapper.getOneByParentId(dictionaryCategoryEntity.getId()) != null) {\n                dictionaryCategoryEntity.setState(EasyUi.State.CLOSED);\n            }\n            dictionaryCategoryEntityListResult.add(dictionaryCategoryEntity);\n        }\n        return dictionaryCategoryEntityListResult;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public DictionaryCategoryEntity insertOne(DictionaryCategoryEntity dictionaryCategoryEntity) {\n        Date date = new Date();\n        dictionaryCategoryEntity.setGmtCreated(date);\n        dictionaryCategoryMapper.insertOne(dictionaryCategoryEntity);\n        return dictionaryCategoryEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public DictionaryCategoryEntity updateOne(DictionaryCategoryEntity dictionaryCategoryEntity) throws BaseResponseException {\n        if (dictionaryCategoryEntity.getId().equals(dictionaryCategoryEntity.getParentId())) {\n            throw new BaseResponseException(failureEntity.i18n(\"dictionary_category.save_fail_do_not_save_self_dictionary_category\"));\n        }\n        dictionaryCategoryEntity.setGmtModified(new Date());\n        dictionaryCategoryMapper.updateOne(dictionaryCategoryEntity);\n        return dictionaryCategoryEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int deleteAll(List<Long> idList) throws BaseResponseException {\n        int result = 0;\n        for (Long id : idList) {\n            DictionaryCategoryEntity dictionaryCategoryEntity = dictionaryCategoryMapper.getOneByParentId(id);\n            if (dictionaryCategoryEntity != null) {\n                throw new BaseResponseException(failureEntity.i18n(\"dictionary_category.delete_fail_has_children_category\"));\n            }\n            DictionaryEntity dictionaryEntity = dictionaryMapper.getOneByDictionaryCategoryId(id);\n            if (dictionaryEntity != null) {\n                throw new BaseResponseException(failureEntity.i18n(\"dictionary_category.delete_fail_has_dictionary\"));\n            }\n            dictionaryCategoryMapper.deleteOne(id);\n            result++;\n        }\n        return result;\n    }\n\n    @Override\n    public DictionaryCategoryEntity getOne(Long id) {\n        return dictionaryCategoryMapper.getOne(id);\n    }\n\n    @Override\n    public List<ComboTree> listAllDictionaryCategoryComboTree() {\n        List<ComboTree> comboTreeList = new ArrayList<>(0);\n        List<DictionaryCategoryEntity> dictionaryCategoryEntityList = dictionaryCategoryMapper.listAll();\n        for (DictionaryCategoryEntity dictionaryCategoryEntity : dictionaryCategoryEntityList) {\n            ComboTree comboTree = new ComboTree();\n            comboTree.setId(dictionaryCategoryEntity.getId());\n            comboTree.setText(dictionaryCategoryEntity.getName());\n            comboTree.setParentId(dictionaryCategoryEntity.getParentId());\n            comboTreeList.add(comboTree);\n        }\n        return comboTreeList;\n    }\n\n    @Override\n    public List<ComboTree> getDictionaryCategoryChildrenComboTree(long parentId, List<ComboTree> dictionaryCategoryComboTreeList) {\n        List<ComboTree> children = new ArrayList<>(0);\n        for (ComboTree comboTree : dictionaryCategoryComboTreeList) {\n            if (comboTree.getParentId() != null && comboTree.getParentId().equals(parentId)) {\n                children.add(comboTree);\n            }\n        }\n        for (ComboTree child : children) {\n            List<ComboTree> childChildren = getDictionaryCategoryChildrenComboTree(child.getId(), dictionaryCategoryComboTreeList);\n            child.setChildren(childChildren);\n        }\n        if (children.size() == 0) {\n            return null;\n        }\n        return children;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/service/impl/DictionaryServiceImpl.java",
    "content": "package com.godcheese.nimrod.system.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.exportbyexcel.ExportByExcelUtil;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.system.entity.DictionaryEntity;\nimport com.godcheese.nimrod.system.mapper.DictionaryMapper;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.tile.office.ExcelUtil;\nimport com.godcheese.tile.util.DateUtil;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport com.github.pagehelper.Page;\nimport com.github.pagehelper.PageHelper;\nimport org.apache.poi.ss.usermodel.Cell;\nimport org.apache.poi.ss.usermodel.Row;\nimport org.apache.poi.ss.usermodel.Sheet;\nimport org.apache.poi.ss.usermodel.Workbook;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\nimport org.springframework.web.context.WebApplicationContext;\nimport org.springframework.web.multipart.MultipartFile;\n\nimport javax.servlet.ServletContext;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.io.IOException;\nimport java.lang.reflect.InvocationTargetException;\nimport java.util.*;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class DictionaryServiceImpl implements DictionaryService {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(DictionaryServiceImpl.class);\n\n    @Autowired\n    private DictionaryMapper dictionaryMapper;\n    @Autowired\n    private WebApplicationContext webApplicationContext;\n    @Autowired\n    private FailureEntity failureEntity;\n\n    @Override\n    public void addDictionaryToServletContext() {\n        /**\n         * 是否有效（0=否，1=是，默认=0）\n         */\n        final int isOrNotIs = 1;\n        final int isOrNotNot = 0;\n\n        ServletContext servletContext = webApplicationContext.getServletContext();\n        if (servletContext != null) {\n            List<DictionaryEntity> dictionaryEntityList = dictionaryMapper.listAll();\n            if (dictionaryEntityList != null) {\n\n                // 添加到内存供 servletContext.getAttribute 获取，如：servletContext.getAttribute('WEB.NAME')、${#servletContext.getAttribute('WEB.NAME')}\n                for (DictionaryEntity dictionaryEntity : dictionaryEntityList) {\n                    if (isOrNotIs == dictionaryEntity.getEnabled()) {\n                        servletContext.setAttribute(dictionaryEntity.getKey().toUpperCase() + \".\" + dictionaryEntity.getValueSlug().toUpperCase(), dictionaryEntity.getValue());\n                    }\n                }\n\n                // 添加到内存供字典键直接获取，如：WEB\n                Map<String, List<DictionaryEntity>> dictionaryEntityMap = new HashMap<>(6);\n                for (DictionaryEntity dictionaryEntity : dictionaryEntityList) {\n                    if (isOrNotIs == dictionaryEntity.getEnabled()) {\n                        String key = dictionaryEntity.getKey().toUpperCase();\n                        if (dictionaryEntityMap.containsKey(key)) {\n                            List<DictionaryEntity> dictionaryEntityList1 = dictionaryEntityMap.get(key);\n                            if (!dictionaryEntityList1.contains(dictionaryEntity)) {\n                                dictionaryEntityList1.add(dictionaryEntity);\n                                dictionaryEntityMap.put(key, dictionaryEntityList1);\n                            }\n                        } else {\n                            List<DictionaryEntity> dictionaryEntityList2 = new ArrayList<>(1);\n                            dictionaryEntityList2.add(dictionaryEntity);\n                            dictionaryEntityMap.put(key, dictionaryEntityList2);\n                        }\n                    }\n                }\n                for (Map.Entry entry : dictionaryEntityMap.entrySet()) {\n                    servletContext.setAttribute((String) entry.getKey(), entry.getValue());\n                }\n            }\n        }\n    }\n\n    /**\n     * 从数据库中获取\n     *\n     * @param key       数据字典键\n     * @param valueSlug 数据字典值别名\n     * @return\n     */\n    @Override\n    public Object getFromDatabase(String key, String valueSlug) {\n        DictionaryEntity dictionaryEntity = dictionaryMapper.getOneByKeyAndValueSlug(key.toUpperCase(), valueSlug.toUpperCase());\n        if (dictionaryEntity != null) {\n            return dictionaryEntity.getValue();\n        }\n        return null;\n    }\n\n    /**\n     * 从内存中获取\n     *\n     * @param key\n     * @param valueSlug\n     * @return\n     */\n    private Object getValueByKeyAndValueSlug(String key, String valueSlug) {\n        ServletContext servletContext = webApplicationContext.getServletContext();\n        if (servletContext != null) {\n            return servletContext.getAttribute(key + \".\" + valueSlug);\n        } else {\n            return null;\n        }\n    }\n\n    /**\n     * 从内存中获取字典\n     *\n     * @param key       数据字典键\n     * @param valueSlug 数据字典值别名\n     * @return Object\n     */\n    @Override\n    public Object get(String key, String valueSlug) {\n        return getValueByKeyAndValueSlug(key, valueSlug);\n    }\n\n    /**\n     * 从内存中获取\n     *\n     * @param key          数据字典键\n     * @param valueSlug    数据字典值别名\n     * @param defaultValue 数据字典默认值\n     * @return\n     */\n    @Override\n    public Object get(String key, String valueSlug, Object defaultValue) {\n        Object v = getValueByKeyAndValueSlug(key, valueSlug);\n        if (v != null) {\n            return v;\n        }\n        return defaultValue;\n    }\n\n    /**\n     * 从内存获取\n     *\n     * @param key\n     * @return\n     */\n    @Override\n    @SuppressWarnings(\"unchecked\")\n    public List<DictionaryEntity> get(String key) {\n        return (List<DictionaryEntity>) Objects.requireNonNull(webApplicationContext.getServletContext()).getAttribute(key.toUpperCase());\n    }\n\n    @Override\n    public Map<String, Map<String, Object>> keyValueMap() {\n        Map<String, Map<String, Object>> mapMap = new HashMap<>(6);\n        List<DictionaryEntity> dictionaryEntityList = dictionaryMapper.listAll();\n        if (dictionaryEntityList != null) {\n            for (DictionaryEntity dictionaryEntity : dictionaryEntityList) {\n                if (mapMap.containsKey(dictionaryEntity.getKey())) {\n                    Map<String, Object> valueMap = mapMap.get(dictionaryEntity.getKey());\n                    if (!valueMap.containsKey(dictionaryEntity.getValueSlug())) {\n                        valueMap.put(dictionaryEntity.getValueSlug(), dictionaryEntity.getValue());\n                    }\n                    mapMap.put(dictionaryEntity.getKey(), valueMap);\n                } else {\n                    Map<String, Object> valueMap = new HashMap<>(1);\n                    valueMap.put(dictionaryEntity.getValueSlug(), dictionaryEntity.getValue());\n                    mapMap.put(dictionaryEntity.getKey(), valueMap);\n                }\n            }\n        }\n        return mapMap;\n    }\n\n    @Override\n    public Pagination<DictionaryEntity> pageAllByDictionaryCategoryId(Long dictionaryCategoryId, Integer page, Integer rows) {\n        Pagination<DictionaryEntity> pagination = new Pagination<>();\n        PageHelper.startPage(page, rows);\n        Page<DictionaryEntity> dictionaryEntityPage = dictionaryMapper.pageAllByDictionaryCategoryId(dictionaryCategoryId);\n        pagination.setRows(dictionaryEntityPage.getResult());\n        pagination.setTotal(dictionaryEntityPage.getTotal());\n        return pagination;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public DictionaryEntity addOne(DictionaryEntity dictionaryEntity) {\n        Date date = new Date();\n        dictionaryEntity.setKey(dictionaryEntity.getKey().toUpperCase());\n        dictionaryEntity.setValueSlug(dictionaryEntity.getValueSlug().toUpperCase());\n        dictionaryEntity.setGmtModified(date);\n        dictionaryEntity.setGmtCreated(date);\n        dictionaryMapper.insertOne(dictionaryEntity);\n        return dictionaryEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public DictionaryEntity saveOne(DictionaryEntity dictionaryEntity) {\n        DictionaryEntity dictionaryEntity1 = dictionaryMapper.getOne(dictionaryEntity.getId());\n        dictionaryEntity1.setKeyName(dictionaryEntity.getKeyName());\n        dictionaryEntity1.setKey(dictionaryEntity.getKey());\n        dictionaryEntity1.setKey(dictionaryEntity.getKey().toUpperCase());\n        dictionaryEntity1.setValueName(dictionaryEntity.getValueName());\n        dictionaryEntity1.setValueSlug(dictionaryEntity.getValueSlug().toUpperCase());\n        dictionaryEntity1.setValue(dictionaryEntity.getValue());\n        dictionaryEntity1.setDictionaryCategoryId(dictionaryEntity.getDictionaryCategoryId());\n        dictionaryEntity1.setEnabled(dictionaryEntity.getEnabled());\n        dictionaryEntity1.setSort(dictionaryEntity.getSort());\n        dictionaryEntity1.setRemark(dictionaryEntity.getRemark());\n        dictionaryEntity1.setGmtModified(new Date());\n        dictionaryMapper.updateOne(dictionaryEntity1);\n        return dictionaryEntity1;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int deleteAll(List<Long> idList) {\n        return dictionaryMapper.deleteAll(idList);\n    }\n\n    @Override\n    public DictionaryEntity getOne(Long id) {\n        return dictionaryMapper.getOne(id);\n    }\n\n    @Override\n    public void exportAllByDictionaryCategoryIdList(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, List<Long> idList) throws BaseResponseException {\n        List<DictionaryEntity> dictionaryEntityList = new ArrayList<>();\n        for (Long id : idList) {\n            dictionaryEntityList.addAll(dictionaryMapper.listAllByDictionaryCategoryId(id));\n        }\n        String filename = \"数据字典_\" + DateUtil.getNow(\"yyyyMMddHHmmss\") + \".xls\";\n        ExportByExcelUtil.exportEntity(httpServletRequest, httpServletResponse, dictionaryEntityList, DictionaryEntity.class, filename);\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public void importAllByDictionaryCategoryId(MultipartFile multipartFile, Long categoryId) throws BaseResponseException {\n        try {\n            List<Map<Integer, Cell>> list = uploadAndReadExcel(multipartFile);\n            if (list != null && !list.isEmpty()) {\n                list.remove(0);\n                for (Map<Integer, Cell> map : list) {\n                    DictionaryEntity dictionaryEntity = new DictionaryEntity();\n                    dictionaryEntity.setDictionaryCategoryId(categoryId);\n                    DictionaryEntity dictionaryEntity1 = ExportByExcelUtil.importEntity(dictionaryEntity, map);\n                    int effectRows = dictionaryMapper.insertOne(dictionaryEntity1);\n                    if (effectRows <= 0) {\n                        throw new BaseResponseException(failureEntity.i18n(\"dictionary.import_fail\"));\n                    }\n                }\n            }\n\n        } catch (IOException | NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {\n            e.printStackTrace();\n            throw new BaseResponseException(failureEntity.i18n(\"dictionary.import_fail\"));\n        }\n\n    }\n\n    private List<Map<Integer, Cell>> uploadAndReadExcel(MultipartFile multipartFile) throws IOException {\n        List<Map<Integer, Cell>> list = new ArrayList<>();\n        Workbook workbook = ExcelUtil.getWorkbook(Objects.requireNonNull(multipartFile.getOriginalFilename()), multipartFile.getInputStream());\n        if (workbook != null) {\n            Sheet sheet = workbook.getSheetAt(0);\n            int rowIndex;\n            for (rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {\n                Row row = sheet.getRow(rowIndex);\n                int cellIndex;\n                Map<Integer, Cell> map = new HashMap<>(1);\n                for (cellIndex = 0; cellIndex < row.getLastCellNum(); cellIndex++) {\n                    map.put(cellIndex, row.getCell(cellIndex));\n                }\n                list.add(map);\n            }\n        }\n        return list.isEmpty() ? null : list;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/service/impl/FileServiceImpl.java",
    "content": "package com.godcheese.nimrod.system.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.system.entity.FileEntity;\nimport com.godcheese.nimrod.system.mapper.FileMapper;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.nimrod.system.service.FileService;\nimport com.godcheese.nimrod.user.entity.UserEntity;\nimport com.godcheese.nimrod.user.service.UserService;\nimport com.godcheese.tile.util.DataSizeUtil;\nimport com.godcheese.tile.util.FileUtil;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport com.github.pagehelper.Page;\nimport com.github.pagehelper.PageHelper;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\nimport org.springframework.web.multipart.MultipartFile;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.io.File;\nimport java.io.IOException;\nimport java.util.*;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class FileServiceImpl implements FileService {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(FileServiceImpl.class);\n    @Autowired\n    private FileMapper fileMapper;\n    @Autowired\n    private DictionaryService dictionaryService;\n    @Autowired\n    private FailureEntity failureEntity;\n    @Autowired\n    private UserService userService;\n\n    @Override\n    public Pagination<FileEntity> pageAll(Integer page, Integer rows) {\n        Pagination<FileEntity> pagination = new Pagination<>();\n        PageHelper.startPage(page, rows);\n        Page<FileEntity> fileEntityPage = fileMapper.pageAll();\n        List<FileEntity> fileEntityList = fileEntityPage.getResult();\n        List<FileEntity> fileEntityListResult = new ArrayList<>();\n        for (FileEntity fileEntity : fileEntityList) {\n            if (fileEntity.getUserId() != null) {\n                UserEntity userEntity = userService.getOneByIdNoPassword(fileEntity.getUserId());\n                if (userEntity != null) {\n                    fileEntity.setUsername(userEntity.getUsername());\n                }\n            }\n            fileEntityListResult.add(fileEntity);\n        }\n        pagination.setRows(fileEntityListResult);\n        pagination.setTotal(fileEntityPage.getTotal());\n        return pagination;\n    }\n\n    /**\n     * 文件上传\n     *\n     * @param file\n     * @return\n     * @throws BaseResponseException\n     * @throws IOException\n     */\n    private FileEntity upload(MultipartFile file) throws BaseResponseException, IOException {\n        FileEntity fileEntity;\n        Date date = new Date();\n        fileEntity = new FileEntity();\n        fileEntity.setUserId(userService.getCurrentUser().getId());\n        fileEntity.setName(file.getOriginalFilename());\n        fileEntity.setSize(file.getSize());\n        fileEntity.setPrettySize(DataSizeUtil.pretty(file.getSize()));\n        fileEntity.setMimeType(file.getContentType());\n        fileEntity.setGmtModified(date);\n        fileEntity.setGmtCreated(date);\n        Calendar calendar = Calendar.getInstance();\n        calendar.setTime(date);\n        String year = String.valueOf(calendar.get(Calendar.YEAR));\n        String month = String.valueOf(calendar.get(Calendar.MONTH) + 1);\n        String guid = (String.valueOf(calendar.toInstant().toEpochMilli()) + UUID.randomUUID() + \".\" + FileUtil.getSuffix(file.getOriginalFilename())).replaceAll(\"-\", \"\");\n        String datePath = File.separator + year + File.separator + month;\n        String absolutePath = FileUtil.getCurrentRootPath() + dictionaryService.get(\"FILE\", \"UPLOAD_PATH\") + datePath;\n        if (!FileUtil.createDirectory(absolutePath)) {\n            throw new BaseResponseException(failureEntity.i18n(\"file.upload_fail\"));\n        }\n        fileEntity.setGuid(guid);\n        fileEntity.setPath(datePath + File.separator + guid);\n        String absolutePathGuid = File.separator + FileUtil.filterFileSeparator(absolutePath + File.separator + guid);\n        file.transferTo(new File(absolutePathGuid));\n        fileMapper.insertOne(fileEntity);\n        return fileEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public FileEntity uploadOne(MultipartFile file) throws BaseResponseException {\n        FileEntity fileEntity;\n        try {\n            fileEntity = upload(file);\n        } catch (IOException e) {\n            e.printStackTrace();\n            throw new BaseResponseException(failureEntity.i18n(\"file.upload_fail\"));\n        }\n        return fileEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public List<FileEntity> uploadAll(List<MultipartFile> fileList) throws BaseResponseException {\n        if (fileList == null || fileList.isEmpty()) {\n            throw new BaseResponseException(failureEntity.i18n(\"file.upload_fail\"));\n        }\n        List<FileEntity> fileEntityList = new ArrayList<>();\n        try {\n            for (MultipartFile file : fileList) {\n                fileEntityList.add(upload(file));\n            }\n        } catch (IOException e) {\n            e.printStackTrace();\n            throw new BaseResponseException(failureEntity.i18n(\"file.upload_fail\"));\n        }\n        return fileEntityList.isEmpty() ? null : fileEntityList;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public FileEntity saveOne(FileEntity fileEntity) {\n        FileEntity fileEntity1 = fileMapper.getOne(fileEntity.getId());\n        fileEntity1.setName(fileEntity.getName());\n        fileEntity1.setRemark(fileEntity.getRemark());\n        fileEntity1.setGmtModified(new Date());\n        fileMapper.updateOne(fileEntity1);\n        return fileEntity1;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int deleteAll(List<Long> idList) {\n        int result = 0;\n        for (Long id : idList) {\n            FileEntity fileEntity = fileMapper.getOne(id);\n            if (fileEntity != null) {\n                String uploadPath = (String) dictionaryService.get(\"ATTACHMENT\", \"UPLOAD_PATH\");\n                String filename = File.separator + FileUtil.filterFileSeparator(FileUtil.getCurrentRootPath() + uploadPath + fileEntity.getPath() + fileEntity.getGuid());\n                FileUtil.delete(new File(filename));\n                fileMapper.deleteOne(id);\n            }\n            result++;\n        }\n        return result;\n    }\n\n    @Override\n    public FileEntity getOne(Long id) {\n        FileEntity fileEntity = fileMapper.getOne(id);\n        if (fileEntity != null) {\n            if (fileEntity.getUserId() != null) {\n                UserEntity userEntity = userService.getOneByIdNoPassword(fileEntity.getUserId());\n                if (userEntity != null) {\n                    fileEntity.setUsername(userEntity.getUsername());\n                }\n            }\n            return fileEntity;\n        }\n        return null;\n    }\n\n    @Override\n    public void download(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String guid) throws BaseResponseException {\n        FileEntity fileEntity = fileMapper.getOneByGuid(guid);\n        if (fileEntity == null) {\n            throw new BaseResponseException(failureEntity.i18n(\"file.download_fail_file_not_exists\"));\n        }\n        String absolutePath = File.separator + FileUtil.filterFileSeparator(FileUtil.getCurrentRootPath() + dictionaryService.get(\"FILE\", \"UPLOAD_PATH\") + fileEntity.getPath());\n        try {\n            FileUtil.download(httpServletRequest, httpServletResponse, fileEntity.getMimeType(), fileEntity.getName(), new File(absolutePath));\n        } catch (IOException e) {\n            e.printStackTrace();\n            throw new BaseResponseException(failureEntity.i18n(\"file.download_fail\"));\n        }\n    }\n\n    @Override\n    public Pagination<FileEntity> pageAllImage(Integer page, Integer rows, Long userId) {\n        Pagination<FileEntity> pagination = new Pagination<>();\n        PageHelper.startPage(page, rows);\n        Page<FileEntity> fileEntityPage;\n        if (userId != null) {\n            fileEntityPage = fileMapper.pageAllImageByUserId(userId);\n        } else {\n            fileEntityPage = fileMapper.pageAllImage();\n        }\n        List<FileEntity> fileEntityList = fileEntityPage.getResult();\n        List<FileEntity> fileEntityListResult = new ArrayList<>();\n        for (FileEntity fileEntity : fileEntityList) {\n            if (fileEntity.getUserId() != null) {\n                UserEntity userEntity = userService.getOneByIdNoPassword(fileEntity.getUserId());\n                if (userEntity != null) {\n                    fileEntity.setUsername(userEntity.getUsername());\n                }\n            }\n            fileEntityListResult.add(fileEntity);\n        }\n        pagination.setRows(fileEntityListResult);\n        pagination.setTotal(fileEntityPage.getTotal());\n        return pagination;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/system/service/impl/OperationLogServiceImpl.java",
    "content": "package com.godcheese.nimrod.system.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.system.entity.OperationLogEntity;\nimport com.godcheese.nimrod.system.mapper.OperationLogMapper;\nimport com.godcheese.nimrod.system.service.OperationLogService;\nimport com.godcheese.nimrod.user.entity.UserEntity;\nimport com.godcheese.nimrod.user.service.UserService;\nimport com.github.pagehelper.Page;\nimport com.github.pagehelper.PageHelper;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class OperationLogServiceImpl implements OperationLogService {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(OperationLogServiceImpl.class);\n    @Autowired\n    private OperationLogMapper operationLogMapper;\n\n    @Autowired\n    private UserService userService;\n\n    @Autowired\n    private Common common;\n\n    @Override\n    public Pagination<OperationLogEntity> pageAll(Integer page, Integer rows) {\n        Pagination<OperationLogEntity> pagination = new Pagination<>();\n        PageHelper.startPage(page, rows);\n        Page<OperationLogEntity> operationLogEntityPage = operationLogMapper.pageAll();\n        List<OperationLogEntity> operationLogEntityList = operationLogEntityPage.getResult();\n        List<OperationLogEntity> operationLogEntityListResult = new ArrayList<>(1);\n        for (OperationLogEntity operationLogEntity : operationLogEntityPage) {\n            UserEntity userEntity = userService.getOne(operationLogEntity.getUserId());\n            if (userEntity != null) {\n                operationLogEntity.setUsername(userEntity.getUsername());\n            }\n            operationLogEntityListResult.add(operationLogEntity);\n        }\n        pagination.setRows(operationLogEntityListResult);\n        pagination.setTotal(operationLogEntityPage.getTotal());\n        return pagination;\n    }\n\n    @Override\n    public OperationLogEntity addOne(OperationLogEntity operationLogEntity) {\n        operationLogEntity.setGmtCreated(new Date());\n        operationLogMapper.insertOne(operationLogEntity);\n        return operationLogEntity;\n    }\n\n    @Override\n    public int deleteAll(List<Long> idList) {\n        return operationLogMapper.deleteAll(idList);\n    }\n\n    @Override\n    public OperationLogEntity getOne(Long id) {\n        OperationLogEntity operationLogEntity = operationLogMapper.getOne(id);\n        UserEntity userEntity = userService.getOne(operationLogEntity.getUserId());\n        if (userEntity != null) {\n            operationLogEntity.setUsername(userEntity.getUsername());\n        }\n        return operationLogEntity;\n    }\n\n    @Override\n    public void clearAll() {\n        operationLogMapper.truncate();\n    }\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/User.java",
    "content": "package com.godcheese.nimrod.user;\n\nimport com.godcheese.nimrod.common.Url;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2019-02-20\n */\npublic class User extends Url {\n\n    public static class Page {\n\n        public static final String USER = \"/user\";\n\n        public static final String LOGIN_ACCOUNT_STRING = \"account\";\n        public static final String LOGIN_PASSWORD_STRING = \"password\";\n        public static final String LOGIN_REMEMBER_ME_STRING = \"rememberMe\";\n\n        public static final String LOGIN = USER + \"/login\";\n        public static final String LOGIN_PATH_PATTERN = LOGIN + ALL_PATH_PATTERN;\n\n        public static final String REGISTER = USER + \"/register\";\n        public static final String REGISTER_PATH_PATTERN = REGISTER + ALL_PATH_PATTERN;\n\n        public static final String LOGOUT = USER + \"/logout\";\n        public static final String LOGOUT_PATH_PATTERN = LOGIN + ALL_PATH_PATTERN;\n\n        public static final String ROLE = USER + \"/role\";\n        public static final String ROLE_AUTHORITY = USER + \"/role_authority\";\n        public static final String ROLE_VIEW_MENU = USER + \"/role_view_menu\";\n        public static final String ROLE_VIEW_MENU_CATEGORY = USER + \"/role_view_menu_category\";\n\n        public static final String USER_ROLE = USER + \"/user_role\";\n\n        public static final String DEPARTMENT = USER + \"/department\";\n\n        public static final String API = USER + \"/api\";\n        public static final String API_CATEGORY = USER + \"/api_category\";\n\n        public static final String VIEW_PAGE = USER + \"/view_page\";\n        public static final String VIEW_PAGE_CATEGORY = USER + \"/view_page_category\";\n\n        public static final String VIEW_PAGE_API = USER + \"/view_page_api\";\n\n        public static final String VIEW_PAGE_COMPONENT = USER + \"/view_page_component\";\n        public static final String VIEW_PAGE_COMPONENT_API = USER + \"/view_page_component_api\";\n\n        public static final String VIEW_MENU = USER + \"/view_menu\";\n        public static final String VIEW_MENU_CATEGORY = USER + \"/view_menu_category\";\n    }\n\n    public static class Api {\n\n        public static final String USER = Url.API + Page.USER;\n\n        public static final String LOGIN = USER + \"/login\";\n        public static final String REGISTER = USER + \"/register\";\n        public static final String LOGOUT = USER + \"/logout\";\n\n        public static final String FORGOT_PASSWORD = USER + \"/forgot_password\";\n\n        public static final String SEND_PASSWORD_EMAIL = USER + \"/send_password_email\";\n        public static final String SEND_PASSWORD_SMS = USER + \"/send_password_sms\";\n\n        public static final String ROLE = USER + \"/role\";\n        public static final String ROLE_AUTHORITY = USER + \"/role_authority\";\n        public static final String ROLE_VIEW_MENU = USER + \"/role_view_menu\";\n        public static final String ROLE_VIEW_MENU_CATEGORY = USER + \"/role_view_menu_category\";\n        public static final String USER_ROLE = USER + \"/user_role\";\n\n        public static final String DEPARTMENT = USER + \"/department\";\n\n        public static final String API = USER + \"/api\";\n        public static final String API_CATEGORY = USER + \"/api_category\";\n\n        public static final String VIEW_MENU = USER + \"/view_menu\";\n        public static final String VIEW_MENU_CATEGORY = USER + \"/view_menu_category\";\n\n        public static final String VIEW_PAGE = USER + \"/view_page\";\n        public static final String VIEW_PAGE_CATEGORY = USER + \"/view_page_category\";\n        public static final String VIEW_PAGE_API = USER + \"/view_page_api\";\n\n        public static final String VIEW_PAGE_COMPONENT = USER + \"/view_page_component\";\n        public static final String VIEW_PAGE_COMPONENT_API = USER + \"/view_page_component_api\";\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/ApiCategoryRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.entity.ApiCategoryEntity;\nimport com.godcheese.nimrod.user.service.ApiCategoryService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.API_CATEGORY, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class ApiCategoryRestController {\n\n    private static final String API_CATEGORY = \"/API/SYSTEM/API_CATEGORY\";\n\n    @Autowired\n    private ApiCategoryService apiCategoryService;\n\n    /**\n     * 获取所有父级 API 分类\n     *\n     * @return List<ApiCategoryEntity>\n     */\n    @OperationLog(value = \"分页获取所有父级 API 分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + API_CATEGORY + \"/LIST_ALL_PARENT')\")\n    @GetMapping(value = \"/list_all_parent\")\n    public ResponseEntity<List<ApiCategoryEntity>> listAllParent() {\n        return new ResponseEntity<>(apiCategoryService.listAllParent(), HttpStatus.OK);\n    }\n\n    /**\n     * 指定父级 API 分类 id，获取所有 API 分类\n     *\n     * @param parentId API 分类父级 id\n     * @return ResponseEntity<List < ApiCategoryEntity>>\n     */\n    @OperationLog(value = \"获取所有 API 分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + API_CATEGORY + \"/LIST_ALL_BY_PARENT_ID')\")\n    @GetMapping(value = \"/list_all_by_parent_id\")\n    public ResponseEntity<List<ApiCategoryEntity>> listAllByParentId(@RequestParam Long parentId) {\n        return new ResponseEntity<>(apiCategoryService.listAllByParentId(parentId), HttpStatus.OK);\n    }\n\n    /**\n     * 新增 API 分类\n     *\n     * @param name     API 分类名称\n     * @param parentId API 分类父级 id\n     * @param sort     排序\n     * @param remark   备注\n     * @return ResponseEntity<ApiCategoryEntity>\n     */\n    @OperationLog(value = \"新增 API 分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + API_CATEGORY + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<ApiCategoryEntity> addOne(@RequestParam String name, @RequestParam Long parentId, @RequestParam Long sort, @RequestParam String remark) {\n        ApiCategoryEntity apiCategoryEntity = new ApiCategoryEntity();\n        apiCategoryEntity.setName(name);\n        apiCategoryEntity.setParentId(parentId);\n        apiCategoryEntity.setSort(sort);\n        apiCategoryEntity.setRemark(remark);\n        ApiCategoryEntity apiCategoryEntity1 = apiCategoryService.addOne(apiCategoryEntity);\n        return new ResponseEntity<>(apiCategoryEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 保存 API 分类\n     *\n     * @param id       API 分类 id\n     * @param name     API 分类名称\n     * @param parentId API 分类父级 id\n     * @param sort     排序\n     * @param remark   备注\n     * @return ResponseEntity<ApiCategoryEntity>\n     */\n    @OperationLog(value = \"保存 API 分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + API_CATEGORY + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<ApiCategoryEntity> saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam Long parentId, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException {\n        ApiCategoryEntity apiCategoryEntity = new ApiCategoryEntity();\n        apiCategoryEntity.setId(id);\n        apiCategoryEntity.setName(name);\n        apiCategoryEntity.setParentId(parentId);\n        apiCategoryEntity.setSort(sort);\n        apiCategoryEntity.setRemark(remark);\n        ApiCategoryEntity apiCategoryEntity1 = apiCategoryService.saveOne(apiCategoryEntity);\n        return new ResponseEntity<>(apiCategoryEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定 API 分类 id list，批量删除 API 分类\n     *\n     * @param idList API 分类 id list\n     * @return ResponseEntity<Integer>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"指定 API 分类 id list，批量删除 API 分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + API_CATEGORY + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) throws BaseResponseException {\n        return new ResponseEntity<>(apiCategoryService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定 API 分类 id，获取所有 API 分类\n     *\n     * @param id API 分类 id\n     * @return ResponseEntity<ApiCategoryEntity>\n     */\n    @OperationLog(value = \"指定 API 分类 id，获取所有 API 分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + API_CATEGORY + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<ApiCategoryEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(apiCategoryService.getOne(id), HttpStatus.OK);\n    }\n\n    /**\n     * 获取所有 API 分类，以 ComboTree 形式展示\n     *\n     * @return ResponseEntity<List < ComboTree>>\n     */\n    @OperationLog(value = \"获取所有 API 分类，以 ComboTree 形式展示\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + API_CATEGORY + \"/LIST_ALL_AS_COMBO_TREE')\")\n    @GetMapping(value = \"/list_all_as_combo_tree\")\n    public ResponseEntity<List<ComboTree>> listAllAsComboTree() {\n        List<ComboTree> comboTreeResultList = new ArrayList<>();\n        List<ComboTree> apiCategoryComboTreeList = apiCategoryService.listAllApiCategoryComboTree();\n        for (ComboTree comboTree : apiCategoryComboTreeList) {\n            if (comboTree.getParentId() == null) {\n                comboTreeResultList.add(comboTree);\n            }\n        }\n        for (ComboTree comboTree : comboTreeResultList) {\n            comboTree.setChildren(apiCategoryService.getApiCategoryChildrenComboTree(comboTree.getId(), apiCategoryComboTreeList));\n        }\n        return new ResponseEntity<>(comboTreeResultList, HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/ApiRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.entity.ApiEntity;\nimport com.godcheese.nimrod.user.service.ApiService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.API, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class ApiRestController {\n\n    private static final String API = \"/API/SYSTEM/API\";\n\n    @Autowired\n    private ApiService apiService;\n\n    /**\n     * 指定 API 分类 id，分页获取所有 API\n     *\n     * @param page          页\n     * @param rows          每页显示数量\n     * @param apiCategoryId API 分类 id\n     * @return ResponseEntity<Pagination < ApiEntity>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + API + \"/PAGE_ALL_BY_API_CATEGORY_ID')\")\n    @GetMapping(value = \"/page_all_by_api_category_id\")\n    public ResponseEntity<Pagination<ApiEntity>> pageAllByApiCategoryId(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam Long apiCategoryId, @RequestParam(required = false) Long viewPageId, @RequestParam(required = false) Long viewPageComponentId, @RequestParam(required = false) Long roleId) {\n        return new ResponseEntity<>(apiService.pageAllByApiCategoryId(page, rows, apiCategoryId, viewPageId, viewPageComponentId, roleId), HttpStatus.OK);\n    }\n\n    /**\n     * 新增 API\n     *\n     * @param name          API 名称\n     * @param url           请求地址（url）\n     * @param authority     权限（authority）\n     * @param apiCategoryId API 分类 id\n     * @param sort          排序\n     * @param remark        备注\n     * @return ResponseEntity<ApiEntity>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"新增 API\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + API + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<ApiEntity> addOne(@RequestParam String name, @RequestParam String url, @RequestParam String authority, @RequestParam Long apiCategoryId, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException {\n        ApiEntity apiEntity = new ApiEntity();\n        apiEntity.setName(name);\n        apiEntity.setUrl(url);\n        apiEntity.setAuthority(authority);\n        apiEntity.setApiCategoryId(apiCategoryId);\n        apiEntity.setSort(sort);\n        apiEntity.setRemark(remark);\n        ApiEntity apiEntity1 = apiService.addOne(apiEntity);\n        return new ResponseEntity<>(apiEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 保存 API\n     *\n     * @param id     API id\n     * @param name   API 名称\n     * @param url    请求地址（url）\n     * @param sort   排序\n     * @param remark 备注\n     * @return ResponseEntity<ApiEntity>\n     */\n    @OperationLog(value = \"保存 API\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + API + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<ApiEntity> saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam String url, @RequestParam String authority, @RequestParam Long apiCategoryId, @RequestParam Long sort, @RequestParam String remark) {\n        ApiEntity apiEntity = new ApiEntity();\n        apiEntity.setId(id);\n        apiEntity.setName(name);\n        apiEntity.setUrl(url);\n        apiEntity.setAuthority(authority);\n        apiEntity.setApiCategoryId(apiCategoryId);\n        apiEntity.setSort(sort);\n        apiEntity.setRemark(remark);\n        ApiEntity apiEntity1 = apiService.saveOne(apiEntity);\n        return new ResponseEntity<>(apiEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定 API id list，批量删除 API\n     *\n     * @param idList API id list\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"指定 API id list，批量删除 API\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + API + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) {\n        return new ResponseEntity<>(apiService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定 API id，获取所有 API\n     *\n     * @param id API id\n     * @return ResponseEntity<ApiEntity>\n     */\n    @OperationLog(value = \"指定 API id，获取所有 API\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + API + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<ApiEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(apiService.getOne(id), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/DepartmentRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.common.easyui.TreeGrid;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.entity.DepartmentEntity;\nimport com.godcheese.nimrod.user.service.DepartmentService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.DEPARTMENT, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class DepartmentRestController {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(DepartmentRestController.class);\n\n    private static final String DEPARTMENT = \"/API/USER/DEPARTMENT\";\n\n    @Autowired\n    private DepartmentService departmentService;\n\n    /**\n     * 获取所有父级部门\n     *\n     * @return List<DepartmentEntity>\n     */\n    @OperationLog(value = \"获取所有父级部门\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DEPARTMENT + \"/LIST_ALL_PARENT')\")\n    @GetMapping(value = \"/list_all_parent\")\n    public ResponseEntity<List<DepartmentEntity>> listAllParent() {\n        return new ResponseEntity<>(departmentService.listAllParent(), HttpStatus.OK);\n    }\n\n    /**\n     * 指定父级部门 id，获取所有子级部门\n     *\n     * @param parentId API 分类父级 id\n     * @return ResponseEntity<List < DepartmentEntity>>\n     */\n    @OperationLog(value = \"获取所有子级部门\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DEPARTMENT + \"/LIST_ALL_BY_PARENT_ID')\")\n    @GetMapping(value = \"/list_all_by_parent_id/{parentId}\")\n    public ResponseEntity<List<DepartmentEntity>> listAllByParentId(@PathVariable Long parentId) {\n        return new ResponseEntity<>(departmentService.listAllByParentId(parentId), HttpStatus.OK);\n    }\n\n    /**\n     * 新增部门\n     *\n     * @param name     部门名称\n     * @param parentId 父级部门 id\n     * @param remark   备注\n     * @return ResponseEntity<DepartmentEntity>\n     */\n    @OperationLog(value = \"新增部门\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DEPARTMENT + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<DepartmentEntity> addOne(@RequestParam String name, @RequestParam Long parentId, @RequestParam String remark) {\n        DepartmentEntity departmentEntity = new DepartmentEntity();\n        departmentEntity.setName(name);\n        departmentEntity.setParentId(parentId);\n        departmentEntity.setRemark(remark);\n        DepartmentEntity departmentEntity1 = departmentService.addOne(departmentEntity);\n        return new ResponseEntity<>(departmentEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 保存部门\n     *\n     * @param id       部门 id\n     * @param name     部门名称\n     * @param parentId 父级部门 id\n     * @param remark   备注\n     * @return ResponseEntity<DepartmentEntity>\n     */\n    @OperationLog(value = \"保存部门\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DEPARTMENT + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<DepartmentEntity> saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam Long parentId, @RequestParam String remark) {\n        DepartmentEntity departmentEntity = new DepartmentEntity();\n        departmentEntity.setId(id);\n        departmentEntity.setName(name);\n        departmentEntity.setParentId(parentId);\n        departmentEntity.setRemark(remark);\n        DepartmentEntity departmentEntity1 = departmentService.saveOne(departmentEntity);\n        return new ResponseEntity<>(departmentEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定部门 id list，批量删除部门\n     *\n     * @param idList 部门 id list\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"指定部门 id list，批量删除部门\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DEPARTMENT + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) throws BaseResponseException {\n        return new ResponseEntity<>(departmentService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定部门 id，获取部门\n     *\n     * @param id 部门 id\n     * @return ResponseEntity<DepartmentEntity>\n     */\n    @OperationLog(value = \"指定部门 id，获取部门\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DEPARTMENT + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<DepartmentEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(departmentService.getOne(id), HttpStatus.OK);\n    }\n\n    @OperationLog(value = \"根据子节点获取所有父级节点部门\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DEPARTMENT + \"/LIST_ALL_BY_DEPARTMENT_ID')\")\n    @GetMapping(value = \"/list_all_by_department_id/{id}\")\n    public List<DepartmentEntity> listAllByDepartmentId(@PathVariable Long id) {\n        List<DepartmentEntity> departmentEntityResultList = new ArrayList<>(0);\n        List<DepartmentEntity> departmentEntityList = departmentService.listAll();\n\n        DepartmentEntity departmentEntity = departmentService.getOne(id);\n        departmentEntityResultList.add(departmentEntity);\n        forEachParent(departmentEntity, departmentEntityList, departmentEntityResultList);\n        Collections.reverse(departmentEntityResultList);\n        return departmentEntityResultList;\n    }\n\n    public void forEachParent(DepartmentEntity departmentEntity, List<DepartmentEntity> departmentEntityList, List<DepartmentEntity> departmentEntityResultList) {\n        for (DepartmentEntity entity : departmentEntityList) {\n            if (departmentEntity.getParentId() != null) {\n                if (departmentEntity.getParentId().equals(entity.getId())) {\n                    departmentEntityResultList.add(entity);\n                    forEachParent(entity, departmentEntityList, departmentEntityResultList);\n                }\n            }\n        }\n    }\n\n    /**\n     * 获取所有部门，以 EasyUI Combo Tree 形式展示\n     *\n     * @return Pagination<DepartmentEntity>\n     */\n    @OperationLog(value = \"分页获取所有父级部门\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DEPARTMENT + \"/LIST_ALL_AS_COMBO_TREE')\")\n    @GetMapping(value = \"/list_all_as_combo_tree\")\n    public ResponseEntity<List<ComboTree>> listAllAsComboTree() {\n\n        List<ComboTree> comboTreeResultList = new ArrayList<>();\n        List<ComboTree> departmentComboTreeList = departmentService.listAllDepartmentComboTree();\n\n        for (ComboTree comboTree : departmentComboTreeList) {\n            if (comboTree.getParentId() == null) {\n                comboTreeResultList.add(comboTree);\n            }\n        }\n\n        for (ComboTree comboTree : comboTreeResultList) {\n            comboTree.setChildren(departmentService.getDepartmentChildrenComboTree(comboTree.getId(), departmentComboTreeList));\n        }\n\n        return new ResponseEntity<>(comboTreeResultList, HttpStatus.OK);\n    }\n\n    /**\n     * 获取所有部门，以 EasyUI TreeGrid 形式展示\n     *\n     * @return Pagination<DepartmentEntity>\n     */\n    @OperationLog(value = \"分页获取所有父级部门\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + DEPARTMENT + \"/LIST_ALL_AS_COMBO_TREE')\")\n    @GetMapping(value = \"/list_all_as_tree_grid\")\n    public ResponseEntity<List<TreeGrid>> listAllAsTreeGrid() {\n\n        List<TreeGrid> treeGridResultList = new ArrayList<>();\n        List<TreeGrid> departmentTreeGridList = departmentService.listAllDepartmentTreeGrid();\n\n        for (TreeGrid treeGrid : departmentTreeGridList) {\n            if (treeGrid.getParentId() == null) {\n                treeGridResultList.add(treeGrid);\n            }\n        }\n\n        for (TreeGrid treeGrid : treeGridResultList) {\n            treeGrid.setChildren(departmentService.getDepartmentChildrenTreeGrid(treeGrid.getId(), departmentTreeGridList));\n        }\n\n        return new ResponseEntity<>(treeGridResultList, HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/RoleAuthorityRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.entity.RoleAuthorityEntity;\nimport com.godcheese.nimrod.user.service.RoleAuthorityService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.ROLE_AUTHORITY, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class RoleAuthorityRestController {\n\n    private static final String ROLE_AUTHORITY = \"/API/USER/ROLE_AUTHORITY\";\n\n    @Autowired\n    private RoleAuthorityService roleAuthorityService;\n\n    /**\n     * 指定角色 id、API 权限（authority），批量授权\n     *\n     * @param roleId        角色 id\n     * @param authorityList 权限（authority） list\n     * @return ResponseEntity<List < String>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE_AUTHORITY + \"/GRANT_ALL_BY_ROLE_ID_AND_API_AUTHORITY_LIST')\")\n    @PostMapping(value = \"/grant_all_by_role_id_and_api_authority_list\")\n    public ResponseEntity<Integer> grantAllByRoleIdAndApiAuthorityList(@RequestParam Long roleId, @RequestParam(\"authorityList[]\") List<String> authorityList) {\n        return new ResponseEntity<>(roleAuthorityService.grantAllByRoleIdAndApiAuthorityList(roleId, authorityList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定角色 id、API 权限（authority），批量撤销授权\n     *\n     * @param roleId        角色 id\n     * @param authorityList 权限（authority） list\n     * @return ResponseEntity<Integer>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE_AUTHORITY + \"/REVOKE_ALL_BY_ROLE_ID_AND_API_AUTHORITY_LIST')\")\n    @PostMapping(value = \"/revoke_all_by_role_id_and_api_authority_list\")\n    public ResponseEntity<Integer> revokeAllByRoleIdAndApiAuthorityList(@RequestParam Long roleId, @RequestParam(\"authorityList[]\") List<String> authorityList) {\n        return new ResponseEntity<>(roleAuthorityService.revokeAllByRoleIdAndApiAuthorityList(roleId, authorityList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定角色 id、视图页面权限（authority），批量授权\n     *\n     * @param roleId        角色 id\n     * @param authorityList 权限（authority） list\n     * @return ResponseEntity<Integer>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE_AUTHORITY + \"/GRANT_ALL_BY_ROLE_ID_AND_VIEW_PAGE_AUTHORITY_LIST')\")\n    @PostMapping(value = \"/grant_all_by_role_id_and_view_page_authority_list\")\n    public ResponseEntity<Object> grantAllByRoleIdAndViewPageAuthorityList(@RequestParam Long roleId, @RequestParam(\"authorityList[]\") List<String> authorityList) {\n        return new ResponseEntity<>(roleAuthorityService.grantAllByRoleIdAndViewPageAuthorityList(roleId, authorityList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定角色 id、视图页面权限（authority），批量撤销授权\n     *\n     * @param roleId        角色 id\n     * @param authorityList 权限（authority） list\n     * @return ResponseEntity<Integer>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE_AUTHORITY + \"/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_PAGE_AUTHORITY_LIST')\")\n    @PostMapping(value = \"/revoke_all_by_role_id_and_view_page_authority_list\")\n    public ResponseEntity<Integer> revokeAllByRoleIdAndViewPageAuthorityList(@RequestParam Long roleId, @RequestParam(\"authorityList[]\") List<String> authorityList) {\n        return new ResponseEntity<>(roleAuthorityService.revokeAllByRoleIdAndViewPageAuthorityList(roleId, authorityList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定角色 id、视图页面组件权限（authority），批量授权\n     *\n     * @param roleId        角色 id\n     * @param authorityList 权限（authority） list\n     * @return ResponseEntity<Integer>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE_AUTHORITY + \"/GRANT_ALL_BY_ROLE_ID_AND_VIEW_PAGE_COMPONENT_AUTHORITY_LIST')\")\n    @PostMapping(value = \"/grant_all_by_role_id_and_view_page_component_authority_list\")\n    public ResponseEntity<Integer> grantAllByRoleIdAndViewPageComponentAuthorityList(@RequestParam Long roleId, @RequestParam(\"authorityList[]\") List<String> authorityList) {\n        return new ResponseEntity<>(roleAuthorityService.grantAllByRoleIdAndViewPageComponentAuthorityList(roleId, authorityList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定角色 id、视图页面组件权限（authority），批量撤销授权\n     *\n     * @param roleId        角色 id\n     * @param authorityList 权限（authority） list\n     * @return ResponseEntity<Integer>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE_AUTHORITY + \"/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_PAGE_COMPONENT_AUTHORITY_LIST')\")\n    @PostMapping(value = \"/revoke_all_by_role_id_and_view_page_component_authority_list\")\n    public ResponseEntity<Integer> revokeAllByRoleIdAndViewPageComponentAuthorityList(@RequestParam Long roleId, @RequestParam(\"authorityList[]\") List<String> authorityList) {\n        return new ResponseEntity<>(roleAuthorityService.revokeAllByRoleIdAndViewPageComponentAuthorityList(roleId, authorityList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定角色 id、权限（authority）判断是否已授权\n     *\n     * @param roleId    角色 id\n     * @param authority 权限（authority） list\n     * @return ResponseEntity<Map < String, Object>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE_AUTHORITY + \"/IS_GRANTED_BY_ROLE_ID_AND_AUTHORITY')\")\n    @GetMapping(value = \"/is_granted_by_role_id_and_authority\")\n    public ResponseEntity<Map<String, Object>> isGrantedByRoleIdAndAuthority(@RequestParam Long roleId, @RequestParam String authority) {\n        return new ResponseEntity<>(roleAuthorityService.isGrantedByRoleIdAndAuthority(roleId, authority), HttpStatus.OK);\n    }\n\n    /**\n     * 指定角色权限 id，获取角色权限信息\n     *\n     * @param id 角色权限 id\n     * @return ResponseEntity<RoleAuthorityEntity>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE_AUTHORITY + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<RoleAuthorityEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(roleAuthorityService.getOne(id), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/RoleRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.entity.RoleEntity;\nimport com.godcheese.nimrod.user.service.RoleService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.ROLE, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class RoleRestController {\n\n    private static final String ROLE = \"/API/USER/ROLE\";\n\n    @Autowired\n    private RoleService roleService;\n\n    /**\n     * 分页获取所有角色\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return ResponseEntity<Pagination < RoleEntity>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE + \"/PAGE_ALL')\")\n    @GetMapping(value = \"/page_all\")\n    public ResponseEntity<Pagination<RoleEntity>> pageAll(@RequestParam Integer page, @RequestParam Integer rows) {\n        return new ResponseEntity<>(roleService.pageAll(page, rows), HttpStatus.OK);\n    }\n\n    /**\n     * 获取所有角色\n     *\n     * @return ResponseEntity<List < RoleEntity>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE + \"/LIST_ALL')\")\n    @GetMapping(value = \"/list_all\")\n    public ResponseEntity<List<RoleEntity>> listAll() {\n        return new ResponseEntity<>(roleService.listAll(), HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id，获取用户角色\n     *\n     * @param userId 用户 id\n     * @return ResponseEntity<List < RoleEntity>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE + \"/ONE')\")\n    @GetMapping(value = \"/list_all_by_user_id/{userId}\")\n    public ResponseEntity<List<RoleEntity>> listAllByUserId(@PathVariable Long userId) {\n        return new ResponseEntity<>(roleService.listAllByUserId(userId), HttpStatus.OK);\n    }\n\n    /**\n     * 新增角色\n     *\n     * @param name   角色名称\n     * @param value  角色值\n     * @param remark 备注\n     * @return ResponseEntity<RoleEntity>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"新增角色\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<RoleEntity> addOne(@RequestParam String name, @RequestParam String value, @RequestParam String remark) throws BaseResponseException {\n        RoleEntity roleEntity = new RoleEntity();\n        roleEntity.setName(name);\n        roleEntity.setValue(value);\n        roleEntity.setRemark(remark);\n        RoleEntity roleEntity1 = roleService.addOne(roleEntity);\n        return new ResponseEntity<>(roleEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 保存角色\n     *\n     * @param id     角色 id\n     * @param name   角色名称\n     * @param value  角色值\n     * @param remark 备注\n     * @return ResponseEntity<RoleEntity>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"保存角色\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<RoleEntity> saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam String value, @RequestParam String remark) throws BaseResponseException {\n        RoleEntity roleEntity = new RoleEntity();\n        roleEntity.setId(id);\n        roleEntity.setName(name);\n        roleEntity.setValue(value);\n        roleEntity.setRemark(remark);\n        RoleEntity roleEntity1 = roleService.saveOne(roleEntity);\n        return new ResponseEntity<>(roleEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定角色 id list，批量删除角色\n     *\n     * @param idList 角色 id list\n     * @return ResponseEntity<Integer>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"指定角色 id list，批量删除角色\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) throws BaseResponseException {\n        return new ResponseEntity<>(roleService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定角色 id，获取角色\n     *\n     * @param id 角色 id\n     * @return ResponseEntity<RoleEntity>\n     */\n    @OperationLog(value = \"指定角色 id，获取角色\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<RoleEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(roleService.getOne(id), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/RoleViewMenuCategoryRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.service.RoleViewMenuCategoryService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.ROLE_VIEW_MENU_CATEGORY, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class RoleViewMenuCategoryRestController {\n\n    private static final String ROLE_VIEW_MENU_CATEGORY = \"/API/USER/ROLE_VIEW_MENU_CATEGORY\";\n\n    @Autowired\n    private RoleViewMenuCategoryService roleViewMenuCategoryService;\n\n    /**\n     * 指定角色 id、视图菜单分类 id list，批量授权\n     *\n     * @param roleId                 角色 id\n     * @param viewMenuCategoryIdList 视图菜单分类 id list\n     * @return ResponseEntity<Integer>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE_VIEW_MENU_CATEGORY + \"/GRANT_ALL_BY_ROLE_ID_AND_VIEW_MENU_CATEGORY_ID_LIST')\")\n    @PostMapping(value = \"/grant_all_by_role_id_and_view_menu_category_id_list\")\n    public ResponseEntity<Integer> grantAllByRoleIdAndViewMenuCategoryIdList(@RequestParam Long roleId, @RequestParam(\"viewMenuCategoryIdList[]\") List<Long> viewMenuCategoryIdList) {\n        return new ResponseEntity<>(roleViewMenuCategoryService.grantAllByRoleIdAndViewMenuCategoryIdList(roleId, viewMenuCategoryIdList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定角色 id、视图菜单分类 id list，批量撤销授权\n     *\n     * @param roleId                 角色 id\n     * @param viewMenuCategoryIdList 视图菜单分类 id list\n     * @return ResponseEntity<Integer>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE_VIEW_MENU_CATEGORY + \"/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_MENU_CATEGORY_ID_LIST')\")\n    @PostMapping(value = \"/revoke_all_by_role_id_and_view_menu_id_list\")\n    public ResponseEntity<Integer> revokeAllByRoleIdAndViewMenuCategoryIdList(@RequestParam Long roleId, @RequestParam(\"viewMenuCategoryIdList[]\") List<Long> viewMenuCategoryIdList) {\n        return new ResponseEntity<>(roleViewMenuCategoryService.revokeAllByRoleIdAndViewMenuCategoryIdList(roleId, viewMenuCategoryIdList), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/RoleViewMenuRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.service.RoleViewMenuService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.ROLE_VIEW_MENU, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class RoleViewMenuRestController {\n\n    private static final String ROLE_VIEW_MENU = \"/API/USER/ROLE_VIEW_MENU\";\n\n    @Autowired\n    private RoleViewMenuService roleViewMenuService;\n\n    /**\n     * 指定角色 id、视图菜单 id list，批量授权\n     *\n     * @param roleId         角色 id\n     * @param viewMenuIdList 视图菜单 id list\n     * @return ResponseEntity<List < String>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE_VIEW_MENU + \"/GRANT_ALL_BY_ROLE_ID_AND_VIEW_MENU_ID_LIST')\")\n    @PostMapping(value = \"/grant_all_by_role_id_and_view_menu_id_list\")\n    public ResponseEntity<Integer> grantAllByRoleIdAndViewMenuIdList(@RequestParam Long roleId, @RequestParam(\"viewMenuIdList[]\") List<Long> viewMenuIdList) {\n        return new ResponseEntity<>(roleViewMenuService.grantAllByRoleIdAndViewMenuIdList(roleId, viewMenuIdList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定角色 id、视图菜单 id list，批量撤销授权\n     *\n     * @param roleId         角色 id\n     * @param viewMenuIdList 视图菜单 id list\n     * @return ResponseEntity<Integer>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + ROLE_VIEW_MENU + \"/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_MENU_ID_LIST')\")\n    @PostMapping(value = \"/revoke_all_by_role_id_and_view_menu_id_list\")\n    public ResponseEntity<Integer> revokeAllByRoleIdAndViewMenuIdList(@RequestParam Long roleId, @RequestParam(\"viewMenuIdList[]\") List<Long> viewMenuIdList) {\n        return new ResponseEntity<>(roleViewMenuService.revokeAllByRoleIdAndViewMenuIdList(roleId, viewMenuIdList), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/UserRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.common.security.SimpleUserDetails;\nimport com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl;\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.entity.UserEntity;\nimport com.godcheese.nimrod.user.mapper.UserMapper;\nimport com.godcheese.nimrod.user.service.*;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport com.godcheese.nimrod.user.service.DepartmentService;\nimport com.godcheese.nimrod.user.service.RoleService;\nimport com.godcheese.nimrod.user.service.UserRoleService;\nimport com.godcheese.nimrod.user.service.ViewMenuService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.security.core.GrantedAuthority;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.servlet.http.HttpServletRequest;\nimport java.util.*;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.USER, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class UserRestController {\n    private static final Logger LOGGER = LoggerFactory.getLogger(UserRestController.class);\n\n    private static final String USER = \"/API/USER\";\n\n    @Autowired\n    private UserService userService;\n    @Autowired\n    private UserMapper userMapper;\n    @Autowired\n    private DepartmentService departmentService;\n    @Autowired\n    private ViewMenuService viewMenuService;\n    @Autowired\n    private UserRoleService userRoleService;\n    @Autowired\n    private RoleService roleService;\n\n    /**\n     * 分页获取所有用户\n     *\n     * @param page            页\n     * @param rows            每页显示数量\n     * @param sortField       排序字段\n     * @param sortOrder       排序 order\n     * @param username        用户名\n     * @param email           电子邮箱\n     * @param emailIsVerified 电子邮箱是否验证\n     * @param departmentId    部门 id\n     * @param enabled         是否启用\n     * @param gmtCreatedStart\n     * @param gmtCreatedEnd\n     * @param gmtDeletedStart\n     * @param gmtDeletedEnd\n     * @return ResponseEntity<Pagination < UserEntity>>\n     */\n    @OperationLog(value = \"分页获取所有用户\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/PAGE_ALL')\")\n    @GetMapping(value = \"/page_all\")\n    public ResponseEntity<Pagination<UserEntity>> pageAll(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam(required = false) String sortField, @RequestParam(required = false) String sortOrder, @RequestParam(required = false) String username, @RequestParam(required = false) String email, @RequestParam(required = false) Integer emailIsVerified, @RequestParam(required = false) Long departmentId, @RequestParam(required = false) Integer enabled, @RequestParam(required = false) String gmtCreatedStart, @RequestParam(required = false) String gmtCreatedEnd, @RequestParam(required = false) String gmtDeletedStart, @RequestParam(required = false) String gmtDeletedEnd) {\n        UserEntity userEntity = new UserEntity();\n        userEntity.setUsername(username);\n        userEntity.setEmail(email);\n        userEntity.setEmailIsVerified(emailIsVerified);\n        userEntity.setDepartmentId(departmentId);\n        userEntity.setEnabled(enabled);\n        return new ResponseEntity<>(userService.pageAll(page, rows, sortField, sortOrder, userEntity, gmtCreatedStart, gmtCreatedEnd, gmtDeletedStart, gmtDeletedEnd), HttpStatus.OK);\n    }\n\n    /**\n     * 指定部门 id，分页获取所有用户\n     *\n     * @param departmentId 部门 id\n     * @param page         页\n     * @param rows         每页显示数量\n     * @return ResponseEntity<Pagination < UserEntity>>\n     */\n    @OperationLog(value = \"指定部门 id，分页获取所有用户\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/PAGE_ALL_BY_DEPARTMENT_ID')\")\n    @GetMapping(value = \"/page_all_by_department_id\")\n    public ResponseEntity<Pagination<UserEntity>> pageAllByDepartmentId(@RequestParam Long departmentId, @RequestParam Integer page, @RequestParam Integer rows) {\n        return new ResponseEntity<>(userService.pageAllByDepartmentId(departmentId, page, rows), HttpStatus.OK);\n    }\n\n    /**\n     * 新增用户\n     *\n     * @param username        用户名\n     * @param password        密码\n     * @param avatar          头像\n     * @param email           电子邮箱\n     * @param emailIsVerified 电子邮箱是否验证\n     * @param departmentId    部门 id\n     * @param enabled         是否启用\n     * @param remark          备注\n     * @return ResponseEntity<UserEntity>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"新增用户\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<UserEntity> addOne(@RequestParam String username, @RequestParam String password, @RequestParam String avatar, @RequestParam String email, @RequestParam Integer emailIsVerified, @RequestParam Long departmentId, @RequestParam Integer enabled, @RequestParam String remark) throws BaseResponseException {\n        UserEntity userEntity = new UserEntity();\n        userEntity.setUsername(username);\n        userEntity.setPassword(password);\n        userEntity.setAvatar(avatar);\n        userEntity.setEmail(email);\n        userEntity.setEmailIsVerified(emailIsVerified);\n        userEntity.setDepartmentId(departmentId);\n        userEntity.setEnabled(enabled);\n        userEntity.setRemark(remark);\n        UserEntity userEntity1 = userService.addOne(userEntity);\n        return new ResponseEntity<>(userEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 保存用户\n     *\n     * @param id              用户 id\n     * @param username        用户名\n     * @param password        密码\n     * @param avatar          头像\n     * @param email           电子邮箱\n     * @param emailIsVerified 电子邮箱是否验证\n     * @param departmentId    departmentId\n     * @param enabled         是否启用\n     * @param remark          备注\n     * @return ResponseEntity<UserEntity>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"保存用户\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<UserEntity> saveOne(@RequestParam Long id, @RequestParam String username, @RequestParam(required = false) String password, @RequestParam String avatar, @RequestParam String email, @RequestParam Integer emailIsVerified, @RequestParam Long departmentId, @RequestParam Integer enabled, @RequestParam String remark) throws BaseResponseException {\n        UserEntity userEntity = new UserEntity();\n        userEntity.setId(id);\n        userEntity.setUsername(username);\n        userEntity.setPassword(password);\n        userEntity.setAvatar(avatar);\n        userEntity.setEmail(email);\n        userEntity.setEmailIsVerified(emailIsVerified);\n        userEntity.setDepartmentId(departmentId);\n        userEntity.setEnabled(enabled);\n        userEntity.setRemark(remark);\n        UserEntity userEntity1 = userService.saveOne(userEntity);\n        return new ResponseEntity<>(userEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id list，删除用户\n     *\n     * @param idList 用户 id list\n     * @return ResponseEntity<HttpStatus>\n     */\n    @OperationLog(value = \"指定用户 id list，删除用户\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/FAKE_DELETE_ALL')\")\n    @PostMapping(value = \"/fake_delete_all\")\n    public ResponseEntity<Integer> fakeDeleteAll(@RequestParam(\"id[]\") List<Long> idList) {\n        return new ResponseEntity<>(userService.fakeDeleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id list，撤销删除用户\n     *\n     * @param idList 用户 id list\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"指定用户 id list，撤销删除用户\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/REVOKE_FAKE_DELETE_ALL')\")\n    @PostMapping(value = \"/revoke_fake_delete_all\")\n    public ResponseEntity<Integer> revokeFakeDeleteAll(@RequestParam(\"id[]\") List<Long> idList) {\n        return new ResponseEntity<>(userService.revokeFakeDeleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id list，批量永久删除用户\n     *\n     * @param idList 用户 id list\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"指定用户 id list，批量永久删除用户\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) {\n        return new ResponseEntity<>(userService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id，获取用户（除密码和角色）\n     *\n     * @param id 用户 id\n     * @return ResponseEntity<UserEntity>\n     */\n    @OperationLog(value = \"指定用户 id，获取用户（除密码和角色）\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<UserEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(userService.getOneByIdNoPassword(id), HttpStatus.OK);\n    }\n\n    /**\n     * 获取当前用户（用户 id、用户名、头像、电子邮箱、权限、部门）\n     *\n     * @param httpServletRequest HttpServletRequest\n     * @return ResponseEntity<UserEntity>\n     */\n    @OperationLog(value = \"获取当前用户（用户 id、用户名、头像、电子邮箱、权限、部门）\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/GET_CURRENT_USER')\")\n    @GetMapping(value = \"/get_current_user\")\n    public ResponseEntity<Map<String, Object>> getCurrentUser(HttpServletRequest httpServletRequest) {\n        SimpleUserDetails simpleUserDetails = SimpleUserDetailsServiceImpl.getCurrentSimpleUser(httpServletRequest);\n        Map<String, Object> map = new HashMap<>(0);\n        map.put(\"id\", null);\n        map.put(\"username\", null);\n        map.put(\"avatar\", null);\n        map.put(\"email\", null);\n        map.put(\"authority\", new ArrayList<>(0));\n        if (simpleUserDetails != null) {\n            UserEntity userEntity = userMapper.getOne(simpleUserDetails.getId());\n            map.put(\"id\", userEntity.getId());\n            map.put(\"username\", userEntity.getUsername());\n            map.put(\"avatar\", userEntity.getAvatar());\n            map.put(\"email\", userEntity.getEmail());\n            Collection<? extends GrantedAuthority> grantedAuthorityCollection = simpleUserDetails.getAuthorities();\n            List<String> stringList = new ArrayList<>(0);\n            if (grantedAuthorityCollection != null) {\n                for (GrantedAuthority grantedAuthority : grantedAuthorityCollection) {\n                    stringList.add(grantedAuthority.getAuthority());\n                }\n            }\n            map.put(\"authority\", stringList);\n            map.put(\"department\", departmentService.listAllByDepartmentId(userEntity.getDepartmentId()));\n        }\n        return new ResponseEntity<>(map, HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id，获取用户（除密码和角色）\n     *\n     * @param id 用户 id\n     * @return ResponseEntity<UserEntity>\n     */\n    @OperationLog(value = \"指定用户 id，获取用户（除密码和角色）\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/ONE')\")\n    @GetMapping(value = \"/profile/{id}\")\n    public ResponseEntity<UserEntity> profile(@PathVariable Long id) {\n        return new ResponseEntity<>(userService.profile(userService.getOneByIdNoPassword(id)), HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id，获取用户（除密码和角色）\n     *\n     * @return ResponseEntity<UserEntity>\n     */\n    @OperationLog(value = \"指定用户 id，获取用户（除密码和角色）\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/ONE')\")\n    @GetMapping(value = \"/get_profile_by_current_user\")\n    public ResponseEntity<UserEntity> getProfileByCurrentUser() {\n        return new ResponseEntity<>(userService.profile(userService.getCurrentUser()), HttpStatus.OK);\n    }\n\n    /**\n     * 保存用户\n     *\n     * @param avatar 头像\n     * @return ResponseEntity<UserEntity>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"保存用户\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_profile\")\n    public ResponseEntity<UserEntity> saveProfile(@RequestParam String avatar) throws BaseResponseException {\n        UserEntity userEntity = new UserEntity();\n        userEntity.setAvatar(avatar);\n        return new ResponseEntity<>(userService.saveProfile(userEntity), HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id，获取用户（除密码和角色）\n     *\n     * @return ResponseEntity<UserEntity>\n     */\n    @OperationLog(value = \"指定用户 id，获取用户（除密码和角色）\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/SEND_EMAIL_VERIFY_CODE_BY_CURRENT_USER')\")\n    @PostMapping(value = \"/send_email_verify_code_by_current_user\")\n    public ResponseEntity<Boolean> sendEmailVerifyCodeByCurrentUser(@RequestParam(required = false) String newEmail) throws BaseResponseException {\n        UserEntity userEntity = userService.getCurrentUser();\n        if (newEmail != null) {\n            return new ResponseEntity<>(userService.sendEmailVerifyCode(userEntity.getId(), newEmail), HttpStatus.OK);\n        } else {\n            return new ResponseEntity<>(userService.sendEmailVerifyCode(userEntity), HttpStatus.OK);\n        }\n    }\n\n    /**\n     * 指定用户 id，获取用户（除密码和角色）\n     *\n     * @return ResponseEntity<UserEntity>\n     */\n    @OperationLog(value = \"指定用户 id，获取用户（除密码和角色）\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/CHECK_VERIFY_CODE_BY_CURRENT_USER')\")\n    @PostMapping(value = \"/check_email_verify_code_by_current_user\")\n    public ResponseEntity<Boolean> checkEmailVerifyCodeByCurrentUser(@RequestParam String emailVerifyCode) throws BaseResponseException {\n        UserEntity userEntity = userService.getCurrentUser();\n        return new ResponseEntity<>(userService.checkEmailVerifyCode(userEntity, userEntity.getEmail(), emailVerifyCode), HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id，获取用户（除密码和角色）\n     *\n     * @return ResponseEntity<UserEntity>\n     */\n    @OperationLog(value = \"指定用户 id，获取用户（除密码和角色）\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/CHANGE_EMAIL_BY_CURRENT_USER')\")\n    @PostMapping(value = \"/change_email_by_current_user\")\n    public ResponseEntity<Boolean> changeEmailByCurrentUser(@RequestParam String emailVerifyCode, @RequestParam String newEmail, @RequestParam String newEmailVerifyCode) throws BaseResponseException {\n        UserEntity userEntity = userService.getCurrentUser();\n        return new ResponseEntity<>(userService.changeEmail(userEntity, emailVerifyCode, newEmail, newEmailVerifyCode), HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id，获取用户（除密码和角色）\n     *\n     * @return ResponseEntity<UserEntity>\n     */\n    @OperationLog(value = \"指定用户 id，获取用户（除密码和角色）\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER + \"/CHANGE_PASSWORD_BY_CURRENT_USER')\")\n    @PostMapping(value = \"/change_password_by_current_user\")\n    public ResponseEntity<Boolean> changePasswordByCurrentUser(@RequestParam String password, @RequestParam String newPassword, @RequestParam String confirmNewPassword) throws BaseResponseException {\n        UserEntity userEntity = userService.getCurrentUser();\n        return new ResponseEntity<>(userService.changePassword(userEntity, password, newPassword, confirmNewPassword), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/UserRoleRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.entity.UserRoleEntity;\nimport com.godcheese.nimrod.user.service.UserRoleService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.USER_ROLE, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class UserRoleRestController {\n\n    private static final String USER_ROLE = \"/API/USER/USER_ROLE\";\n\n    @Autowired\n    private UserRoleService userRoleService;\n\n    /**\n     * 分页获取所有用户角色\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return ResponseEntity<Pagination < UserRoleEntity>>\n     */\n    @OperationLog(value = \"分页获取所有用户角色\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER_ROLE + \"/PAGE_ALL')\")\n    @GetMapping(value = \"/page_all\")\n    public ResponseEntity<Pagination<UserRoleEntity>> pageAll(@RequestParam Integer page, @RequestParam Integer rows) {\n        return new ResponseEntity<>(userRoleService.pageAll(page, rows), HttpStatus.OK);\n    }\n\n    /**\n     * 新增用户角色\n     *\n     * @param userId 用户 id\n     * @param roleId 角色 id\n     * @return ResponseEntity<UserRoleEntity>\n     */\n    @OperationLog(value = \"新增用户角色\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER_ROLE + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<UserRoleEntity> addOne(@RequestParam Long userId, @RequestParam Long roleId) {\n        UserRoleEntity userRoleEntity = new UserRoleEntity();\n        userRoleEntity.setUserId(userId);\n        userRoleEntity.setRoleId(roleId);\n        UserRoleEntity userRoleEntity1 = userRoleService.addOne(userRoleEntity);\n        return new ResponseEntity<>(userRoleEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id、角色 id list，批量删除用户角色\n     *\n     * @param userId     用户 id\n     * @param roleIdList 角色 id list\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"指定用户 id、角色 id list，批量删除用户角色\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + USER_ROLE + \"/DELETE_ALL_BY_USER_ID_AND_ROLE_ID_LIST')\")\n    @PostMapping(value = \"/delete_all_by_user_id_and_role_id_list\")\n    public ResponseEntity<Integer> deleteAllByUserIdAndRoleIdList(@RequestParam Long userId, @RequestParam(\"roleIdList[]\") List<Long> roleIdList) {\n        return new ResponseEntity<>(userRoleService.deleteAllByUserIdAndRoleIdList(userId, roleIdList), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/ViewMenuCategoryRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.entity.ViewMenuCategoryEntity;\nimport com.godcheese.nimrod.user.service.ViewMenuCategoryService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Map;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.VIEW_MENU_CATEGORY, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class ViewMenuCategoryRestController {\n\n    private static final String VIEW_MENU_CATEGORY = \"/API/USER/VIEW_MENU_CATEGORY\";\n\n    @Autowired\n    private ViewMenuCategoryService viewMenuCategoryService;\n\n    /**\n     * 获取所有父级视图菜单分类\n     *\n     * @return ResponseEntity<List < ViewMenuCategoryEntity>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU_CATEGORY + \"/LIST_ALL_PARENT')\")\n    @GetMapping(value = \"/list_all_parent\")\n    public ResponseEntity<List<ViewMenuCategoryEntity>> listAllParent(@RequestParam(required = false) Long roleId) {\n        return new ResponseEntity<>(viewMenuCategoryService.listAllParent(roleId), HttpStatus.OK);\n    }\n\n    /**\n     * 指定父级视图菜单分类 id，获取所有视图菜单分类\n     *\n     * @param parentId 父级视图菜单分类 id\n     * @return ResponseEntity<List < ViewMenuCategoryEntity>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU_CATEGORY + \"/LIST_ALL_BY_PARENT_ID')\")\n    @GetMapping(value = \"/list_all_by_parent_id\")\n    public ResponseEntity<List<ViewMenuCategoryEntity>> listAllByParentId(@RequestParam Long parentId, @RequestParam(required = false) Long roleId) {\n        return new ResponseEntity<>(viewMenuCategoryService.listAllByParentId(parentId, roleId), HttpStatus.OK);\n    }\n\n    /**\n     * 新增视图菜单分类\n     *\n     * @param name     视图菜单分类名称\n     * @param icon     图标（icon）\n     * @param parentId 父级视图菜单分类 id\n     * @param sort     排序\n     * @param remark   备注\n     * @return <ViewMenuCategoryEntity>\n     */\n    @OperationLog(value = \"新增视图菜单分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU_CATEGORY + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<ViewMenuCategoryEntity> addOne(@RequestParam String name, @RequestParam(required = false) String icon, @RequestParam(required = false) Long parentId, @RequestParam Long sort, @RequestParam String remark) {\n        ViewMenuCategoryEntity viewMenuCategoryEntity = new ViewMenuCategoryEntity();\n        viewMenuCategoryEntity.setName(name);\n        viewMenuCategoryEntity.setIcon(icon);\n        viewMenuCategoryEntity.setParentId(parentId);\n        viewMenuCategoryEntity.setSort(sort);\n        viewMenuCategoryEntity.setRemark(remark);\n        ViewMenuCategoryEntity viewMenuCategoryEntity1 = viewMenuCategoryService.addOne(viewMenuCategoryEntity);\n        return new ResponseEntity<>(viewMenuCategoryEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 保存视图菜单分类\n     *\n     * @param id     视图菜单分类 id\n     * @param name   视图菜单分类名称\n     * @param icon   图标（icon）\n     * @param sort   排序\n     * @param remark 备注\n     * @return ResponseEntity<ViewMenuCategoryEntity>\n     */\n    @OperationLog(value = \"保存视图菜单分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU_CATEGORY + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<ViewMenuCategoryEntity> saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam(required = false) String icon, @RequestParam Long sort, @RequestParam String remark) {\n        ViewMenuCategoryEntity viewMenuCategoryEntity = new ViewMenuCategoryEntity();\n        viewMenuCategoryEntity.setId(id);\n        viewMenuCategoryEntity.setName(name);\n        viewMenuCategoryEntity.setIcon(icon);\n        viewMenuCategoryEntity.setSort(sort);\n        viewMenuCategoryEntity.setRemark(remark);\n        ViewMenuCategoryEntity viewMenuCategoryEntity1 = viewMenuCategoryService.saveOne(viewMenuCategoryEntity);\n        return new ResponseEntity<>(viewMenuCategoryEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图菜单分类 id，批量删除视图菜单分类\n     *\n     * @param idList 视图菜单分类 id list\n     * @return ResponseEntity<Integer>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"指定视图菜单分类 id，批量删除视图菜单分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU_CATEGORY + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) throws BaseResponseException {\n        return new ResponseEntity<>(viewMenuCategoryService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图菜单分类 id，获取视图菜单分类\n     *\n     * @param id 视图菜单分类 id\n     * @return ResponseEntity<ViewMenuCategoryEntity>\n     */\n    @OperationLog(value = \"指定视图菜单分类 id，获取视图菜单分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU_CATEGORY + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<ViewMenuCategoryEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(viewMenuCategoryService.getOne(id), HttpStatus.OK);\n    }\n\n    /**\n     * 指定角色 id，获取所有父级视图菜单分类\n     *\n     * @param roleId 角色 id\n     * @return ResponseEntity<List < ViewMenuCategoryEntity>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU_CATEGORY + \"/LIST_ALL_PARENT_BY_ROLE_ID')\")\n    @GetMapping(value = \"/list_all_parent_by_role_id/{roleId}\")\n    public ResponseEntity<List<ViewMenuCategoryEntity>> listAllParentByRoleId(@PathVariable Long roleId) {\n        return new ResponseEntity<>(viewMenuCategoryService.listAllParentByRoleId(roleId), HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id，获取所有父级视图菜单分类\n     *\n     * @param userId 用户 id\n     * @return ResponseEntity<List < ViewMenuCategoryEntity>>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU_CATEGORY + \"/LIST_ALL_PARENT_BY_USER_ID')\")\n    @GetMapping(value = \"/list_all_parent_by_user_id/{userId}\")\n    public ResponseEntity<List<ViewMenuCategoryEntity>> listAllParentByUserId(@PathVariable Long userId) {\n        return new ResponseEntity<>(viewMenuCategoryService.listAllParentByUserId(userId), HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id、父级视图菜单分类 id，获取所有子级视图菜单分类\n     *\n     * @param userId   用户 id\n     * @param parentId 视图菜单分类父级 id\n     * @return ResponseEntity<? extends Object>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU_CATEGORY + \"/LIST_ALL_CHILD_BY_PARENT_ID_AND_USER_ID')\")\n    @GetMapping(value = \"/list_all_child_by_parent_id_and_user_id\")\n    public ResponseEntity<Object> listAllChildByParentIdAndUserId(@RequestParam Long parentId, @RequestParam Long userId) {\n        return new ResponseEntity<>(viewMenuCategoryService.listAllChildByParentIdAndUserId(parentId, userId), HttpStatus.OK);\n    }\n\n    /**\n     * 指定用户 id、父级视图菜单分类 id，获取所有子级视图菜单分类和视图菜单\n     *\n     * @param userId   用户 id\n     * @param parentId 视图菜单分类父级 id\n     * @return ResponseEntity<List < Map < String, Object>> >\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU_CATEGORY + \"/LIST_ALL_CHILD_VIEW_MENU_CATEGORY_AND_VIEW_MENU_BY_PARENT_ID_AND_USER_ID')\")\n    @GetMapping(value = \"/list_all_child_view_menu_category_and_view_menu_by_parent_id_and_user_id\")\n    public ResponseEntity<List<Map<String, Object>>> listAllChildViewMenuCategoryAndViewMenuByParentIdAndUserId(@RequestParam Long parentId, @RequestParam Long userId) {\n        return new ResponseEntity<>(viewMenuCategoryService.listAllChildViewMenuCategoryAndViewMenuByParentIdAndUserId(parentId, userId), HttpStatus.OK);\n    }\n\n    /**\n     * 获取所有菜单分类\n     *\n     * @return ResponseEntity<? extends Object>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU_CATEGORY + \"/LIST_ALL')\")\n    @GetMapping(value = \"/list_all\")\n    public ResponseEntity<Object> listAll() {\n        return new ResponseEntity<>(viewMenuCategoryService.listAll(), HttpStatus.OK);\n    }\n\n    /**\n     * 指定菜单分类名，模糊搜索获取所有菜单分类\n     *\n     * @return ResponseEntity<? extends Object>\n     */\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU_CATEGORY + \"/SEARCH_ALL_BY_NAME')\")\n    @GetMapping(value = \"/search_all_by_name\")\n    public ResponseEntity<Object> searchAllByName(@RequestParam String q) {\n        return new ResponseEntity<>(viewMenuCategoryService.searchAllByName(q), HttpStatus.OK);\n    }\n\n    /**\n     * 获取所有视图菜单分类，以 ComboTree 形式展示\n     *\n     * @return ResponseEntity<List < ComboTree>>\n     */\n    @OperationLog(value = \"获取所有视图菜单分类，以 ComboTree 形式展示\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU_CATEGORY + \"/LIST_ALL_AS_COMBO_TREE')\")\n    @GetMapping(value = \"/list_all_as_combo_tree\")\n    public ResponseEntity<List<ComboTree>> listAllAsComboTree() {\n        List<ComboTree> comboTreeResultList = new ArrayList<>();\n        List<ComboTree> viewMenuCategoryComboTreeList = viewMenuCategoryService.listAllViewMenuCategoryComboTree();\n        for (ComboTree comboTree : viewMenuCategoryComboTreeList) {\n            if (comboTree.getParentId() == null) {\n                comboTreeResultList.add(comboTree);\n            }\n        }\n        for (ComboTree comboTree : comboTreeResultList) {\n            comboTree.setChildren(viewMenuCategoryService.getViewMenuCategoryChildrenComboTree(comboTree.getId(), viewMenuCategoryComboTreeList));\n        }\n        return new ResponseEntity<>(comboTreeResultList, HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/ViewMenuRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.entity.ViewMenuEntity;\nimport com.godcheese.nimrod.user.service.ViewMenuService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.VIEW_MENU, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class ViewMenuRestController {\n\n    private static final String VIEW_MENU = \"/API/USER/VIEW_MENU\";\n    private static final Logger LOGGER = LoggerFactory.getLogger(ViewMenuRestController.class);\n\n    @Autowired\n    private ViewMenuService viewMenuService;\n\n    /**\n     * 新增视图菜单\n     *\n     * @param name               视图菜单名称\n     * @param icon               图标（icon）\n     * @param url                请求地址（url）\n     * @param viewMenuCategoryId 视图菜单分类 id\n     * @param sort               排序\n     * @param remark             备注\n     * @return ResponseEntity<ViewMenuEntity>\n     */\n    @OperationLog(value = \"新增视图菜单\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<ViewMenuEntity> addOne(@RequestParam String name, @RequestParam(required = false) String icon, @RequestParam String url, @RequestParam Long viewMenuCategoryId, @RequestParam Long sort, @RequestParam String remark) {\n        ViewMenuEntity viewMenuEntity = new ViewMenuEntity();\n        viewMenuEntity.setName(name);\n        viewMenuEntity.setIcon(icon);\n        viewMenuEntity.setUrl(url);\n        viewMenuEntity.setViewMenuCategoryId(viewMenuCategoryId);\n        viewMenuEntity.setSort(sort);\n        viewMenuEntity.setRemark(remark);\n        ViewMenuEntity viewMenuEntity1 = viewMenuService.addOne(viewMenuEntity);\n        return new ResponseEntity<>(viewMenuEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 保存视图菜单\n     *\n     * @param id                 视图菜单 id\n     * @param name               视图菜单名称\n     * @param icon               图标（icon）\n     * @param url                请求地址（url）\n     * @param viewMenuCategoryId 视图菜单分类 id\n     * @param sort               排序\n     * @param remark             备注\n     * @return ResponseEntity<ViewMenuEntity>\n     */\n    @OperationLog(value = \"保存视图菜单\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<ViewMenuEntity> saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam(required = false) String icon, @RequestParam String url, @RequestParam Long viewMenuCategoryId, @RequestParam Long sort, @RequestParam String remark) {\n        ViewMenuEntity viewMenuEntity = new ViewMenuEntity();\n        viewMenuEntity.setId(id);\n        viewMenuEntity.setName(name);\n        viewMenuEntity.setIcon(icon);\n        viewMenuEntity.setUrl(url);\n        viewMenuEntity.setViewMenuCategoryId(viewMenuCategoryId);\n        viewMenuEntity.setSort(sort);\n        viewMenuEntity.setRemark(remark);\n        ViewMenuEntity viewMenuEntity1 = viewMenuService.saveOne(viewMenuEntity);\n        return new ResponseEntity<>(viewMenuEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图菜单 id list，批量删除视图菜单\n     *\n     * @param idList 视图菜单 id list\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"指定视图菜单 id list，批量删除视图菜单\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) {\n        return new ResponseEntity<>(viewMenuService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图菜单 id，获取视图菜单\n     *\n     * @param id 视图菜单 id\n     * @return ResponseEntity<ViewMenuEntity>\n     */\n    @OperationLog(value = \"指定视图菜单 id，获取视图菜单\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<ViewMenuEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(viewMenuService.getOne(id), HttpStatus.OK);\n    }\n\n//    /**\n//     * 指定视图菜单分类 id、角色 id，分页获取所有视图菜单\n//     * @param viewMenuCategoryId 视图菜单分类 id\n//     * @param roleId 角色 id\n//     * @param page 页\n//     * @param rows 每页显示数量\n//     * @return ResponseEntity<Pagination<ViewMenuEntity>>\n//     */\n//    @OperationLog(value = \"指定视图菜单分类 id、角色 id，分页获取所有视图菜单\", type = OperationLogType.API)\n//    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU + \"/PAGE_ALL_BY_VIEW_MENU_CATEGORY_ID_AND_ROLE_ID')\")\n//    @GetMapping(value = \"/page_all_by_view_menu_category_id_and_role_id\")\n//    public ResponseEntity<Pagination<ViewMenuEntity>> pageAllByViewMenuCategoryIdAndRoleId(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam Long viewMenuCategoryId, @RequestParam Long roleId) {\n//        return new ResponseEntity<>(viewMenuService.pageAllByViewMenuCategoryIdAndRoleId(viewMenuCategoryId, roleId, page, rows), HttpStatus.OK);\n//    }\n\n    /**\n     * 指定视图菜单分类 id，分页获取所有视图菜单\n     *\n     * @param viewMenuCategoryId 视图菜单分类 id\n     * @param page               页\n     * @param rows               每页显示数量\n     * @return ResponseEntity<Pagination < ViewMenuEntity>>\n     */\n    @OperationLog(value = \"指定视图菜单分类 id，分页获取所有视图菜单\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU + \"/PAGE_ALL_BY_VIEW_MENU_CATEGORY_ID')\")\n    @GetMapping(value = \"/page_all_by_view_menu_category_id\")\n    public ResponseEntity<Pagination<ViewMenuEntity>> pageAllByViewMenuCategoryId(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam Long viewMenuCategoryId, @RequestParam(required = false) Long roleId) {\n        return new ResponseEntity<>(viewMenuService.pageAllByViewMenuCategoryId(page, rows, viewMenuCategoryId, roleId), HttpStatus.OK);\n    }\n\n//    /**\n//     * 指定菜单名，模糊搜索获取所有菜单\n//     * @return ResponseEntity<List<ViewMenuEntity>>\n//     */\n//    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_MENU + \"/SEARCH_ALL_BY_NAME')\")\n//    @GetMapping(value = \"/search_all_by_name\")\n//    public ResponseEntity<List<ViewMenuEntity>> searchAllByName(@RequestParam String q) {\n//        return new ResponseEntity<>(viewMenuService.searchAllByName(q), HttpStatus.OK);\n//    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/ViewPageApiRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.service.ViewPageApiService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(User.Api.VIEW_PAGE_API)\npublic class ViewPageApiRestController {\n\n    private static final String VIEW_PAGE_API = \"/API/SYSTEM/VIEW_PAGE_API\";\n\n    @Autowired\n    private ViewPageApiService viewPageApiService;\n\n//    /**\n//     * 是否关联 API\n//     * @param viewPageId 视图页面 id\n//     * @param apiId  API id\n//     * @return ResponseEntity<Map < String ,   Object>>\n//     */\n//    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_API + \"/IS_ASSOCIATED_BY_VIEW_PAGE_ID_AND_API_ID')\")\n//    @GetMapping(value = \"/is_associated_by_vie_page_id_and_api_id\")\n//    public ResponseEntity<Map<String, Object>> isAssociatedByViewPageIdAndApiId(@RequestParam Long viewPageId, @RequestParam Long apiId) {\n//        return new ResponseEntity<>(viewPageApiService.isAssociatedByViewPageIdAndApiId(viewPageId, apiId), HttpStatus.OK);\n//    }\n\n    /**\n     * 指定视图页面 id，API id list，批量关联\n     *\n     * @param viewPageId 视图页面 id\n     * @param apiIdList  API id list\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"指定视图页面 id，API id list，批量关联\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_API + \"/ASSOCIATE_ALL_BY_VIEW_PAGE_ID_AND_API_ID_LIST')\")\n    @PostMapping(value = \"/associate_all_by_view_page_id_and_api_id_list\")\n    public ResponseEntity<Integer> associateAllByViewPageIdAndApiIdList(@RequestParam Long viewPageId, @RequestParam(\"apiIdList[]\") List<Long> apiIdList) {\n        return new ResponseEntity<>(viewPageApiService.associateAllByViewPageIdAndApiIdList(viewPageId, apiIdList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图页面 id，API id list，批量撤销关联\n     *\n     * @param viewPageId 视图页面 id\n     * @param apiIdList  API id list\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"指定视图页面 id，API id list，批量撤销关联\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_API + \"/REVOKE_ASSOCIATE_ALL_BY_VIEW_PAGE_ID_AND_API_ID_LIST')\")\n    @PostMapping(value = \"/revoke_associate_all_by_view_page_id_and_api_id_list\")\n    public ResponseEntity<Integer> revokeAssociateAllByViewPageIdAndApiIdList(@RequestParam Long viewPageId, @RequestParam(\"apiIdList[]\") List<Long> apiIdList) {\n        return new ResponseEntity<>(viewPageApiService.revokeAssociateAllByViewPageIdAndApiIdList(viewPageId, apiIdList), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/ViewPageCategoryRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.entity.ViewPageCategoryEntity;\nimport com.godcheese.nimrod.user.service.ViewPageCategoryService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.VIEW_PAGE_CATEGORY, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class ViewPageCategoryRestController {\n\n    private static final String VIEW_PAGE_CATEGORY = \"/API/SYSTEM/VIEW_PAGE_CATEGORY\";\n\n    @Autowired\n    private ViewPageCategoryService viewPageCategoryService;\n\n    /**\n     * 新增视图页面分类\n     *\n     * @param name     视图页面分类名称\n     * @param parentId 父级视图菜单 id\n     * @param sort     排序\n     * @param remark   备注\n     * @return ResponseEntity<ViewPageCategoryEntity>\n     */\n    @OperationLog(value = \"新增视图页面分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_CATEGORY + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<ViewPageCategoryEntity> addOne(@RequestParam String name, @RequestParam(required = false) Long parentId, @RequestParam Long sort, @RequestParam String remark) {\n        ViewPageCategoryEntity viewPageCategoryEntity = new ViewPageCategoryEntity();\n        viewPageCategoryEntity.setName(name);\n        viewPageCategoryEntity.setParentId(parentId);\n        viewPageCategoryEntity.setSort(sort);\n        viewPageCategoryEntity.setRemark(remark);\n        ViewPageCategoryEntity viewPageCategoryEntity1 = viewPageCategoryService.addOne(viewPageCategoryEntity);\n        return new ResponseEntity<>(viewPageCategoryEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 保存视图页面分类\n     *\n     * @param id       视图页面分类 id\n     * @param name     视图页面分类名称\n     * @param parentId 父级视图页面分类 id\n     * @param sort     排序\n     * @param remark   备注\n     * @return ResponseEntity<ViewPageCategoryEntity>\n     */\n    @OperationLog(value = \"保存视图页面分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_CATEGORY + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<ViewPageCategoryEntity> saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam Long parentId, @RequestParam Long sort, @RequestParam String remark) {\n        ViewPageCategoryEntity viewPageCategoryEntity = new ViewPageCategoryEntity();\n        viewPageCategoryEntity.setId(id);\n        viewPageCategoryEntity.setName(name);\n        viewPageCategoryEntity.setParentId(parentId);\n        viewPageCategoryEntity.setSort(sort);\n        viewPageCategoryEntity.setRemark(remark);\n        ViewPageCategoryEntity viewPageCategoryEntity1 = viewPageCategoryService.saveOne(viewPageCategoryEntity);\n        return new ResponseEntity<>(viewPageCategoryEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图页面分类 id，批量删除视图页面分类\n     *\n     * @param idList 视图页面分类 id list\n     * @return ResponseEntity<Integer>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"指定视图页面分类 id，批量删除视图页面分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_CATEGORY + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) throws BaseResponseException {\n        return new ResponseEntity<>(viewPageCategoryService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图页面分类 id，获取视图页面分类\n     *\n     * @param id 视图页面分类 id\n     * @return ResponseEntity<ViewPageCategoryEntity>\n     */\n    @OperationLog(value = \"指定视图页面分类 id，获取视图页面分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_CATEGORY + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<ViewPageCategoryEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(viewPageCategoryService.getOne(id), HttpStatus.OK);\n    }\n\n    /**\n     * 获取所有父级视图页面分类\n     *\n     * @return ResponseEntity<List < ViewPageCategoryEntity>>\n     */\n    @OperationLog(value = \"获取所有父级视图页面分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_CATEGORY + \"/LIST_ALL_PARENT')\")\n    @GetMapping(value = \"/list_all_parent\")\n    public ResponseEntity<List<ViewPageCategoryEntity>> listAllParent() {\n        return new ResponseEntity<>(viewPageCategoryService.listAllParent(), HttpStatus.OK);\n    }\n\n    /**\n     * 指定父级视图页面分类 id，获取所有视图页面分类\n     *\n     * @param parentId 父级视图页面分类 id\n     * @return ResponseEntity<List < ViewPageCategoryEntity>>\n     */\n    @OperationLog(value = \"指定父级视图页面分类 id，获取所有视图页面分类\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_CATEGORY + \"/LIST_ALL_BY_PARENT_ID')\")\n    @GetMapping(value = \"/list_all_by_parent_id\")\n    public ResponseEntity<List<ViewPageCategoryEntity>> listAllByParentId(@RequestParam Long parentId) {\n        return new ResponseEntity<>(viewPageCategoryService.listAllByParentId(parentId), HttpStatus.OK);\n    }\n\n    /**\n     * 获取所有视图页面分类，以 ComboTree 形式展示\n     *\n     * @return ResponseEntity<List < ComboTree>>\n     */\n    @OperationLog(value = \"获取所有视图页面分类，以 ComboTree 形式展示\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_CATEGORY + \"/LIST_ALL_AS_COMBO_TREE')\")\n    @GetMapping(value = \"/list_all_as_combo_tree\")\n    public ResponseEntity<List<ComboTree>> listAllAsComboTree() {\n        List<ComboTree> comboTreeResultList = new ArrayList<>();\n        List<ComboTree> viewPageCategoryComboTreeList = viewPageCategoryService.listAllViewPageCategoryComboTree();\n        for (ComboTree comboTree : viewPageCategoryComboTreeList) {\n            if (comboTree.getParentId() == null) {\n                comboTreeResultList.add(comboTree);\n            }\n        }\n        for (ComboTree comboTree : comboTreeResultList) {\n            comboTree.setChildren(viewPageCategoryService.getViewPageCategoryChildrenComboTree(comboTree.getId(), viewPageCategoryComboTreeList));\n        }\n        return new ResponseEntity<>(comboTreeResultList, HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/ViewPageComponentApiRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.service.ViewPageComponentApiService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(User.Api.VIEW_PAGE_COMPONENT_API)\npublic class ViewPageComponentApiRestController {\n\n    private static final String VIEW_PAGE_COMPONENT_API = \"/API/SYSTEM/VIEW_PAGE_COMPONENT_API\";\n\n    @Autowired\n    private ViewPageComponentApiService viewPageComponentApiService;\n\n//    /**\n//     * 是否关联 API\n//     * @param viewPageComponentId 视图页面组件 id\n//     * @param apiId API id\n//     * @return ResponseEntity<Map<String, Object>>\n//     */\n//    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_COMPONENT_API + \"/IS_ASSOCIATED_BY_VIEW_PAGE_COMPONENT_ID_AND_API_ID')\")\n//    @GetMapping(value = \"/is_associated_by_view_page_component_id_and_api_id\")\n//    public ResponseEntity<Map<String, Object>> isAssociatedByViewPageComponentIdAndApiId(@RequestParam Long viewPageComponentId, @RequestParam Long apiId) {\n//        return new ResponseEntity<>(viewPageComponentApiService.isAssociatedByViewPageComponentIdAndApiId(viewPageComponentId, apiId), HttpStatus.OK);\n//    }\n\n    /**\n     * 指定视图页面组件 id、API id list，批量关联\n     *\n     * @param viewPageComponentId 视图页面组件 id\n     * @param apiIdList           API id list\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"指定视图页面组件 id、API id list，批量关联\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_COMPONENT_API + \"/ASSOCIATE_ALL_BY_VIEW_PAGE_COMPONENT_ID_AND_API_ID_LIST')\")\n    @PostMapping(value = \"/associate_all_by_view_page_component_id_and_api_id_list\")\n    public ResponseEntity<Integer> associateAllByViewPageComponentIdAndApiIdList(@RequestParam Long viewPageComponentId, @RequestParam(\"apiIdList[]\") List<Long> apiIdList) {\n        return new ResponseEntity<>(viewPageComponentApiService.associateAllByViewPageComponentIdAndApiIdList(viewPageComponentId, apiIdList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图页面组件 id、API id，批量撤销关联\n     *\n     * @param viewPageComponentId 视图页面组件 id\n     * @param apiIdList           API id list\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"指定视图页面组件 id、API id，批量撤销关联\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_COMPONENT_API + \"/REVOKE_ASSOCIATE_ALL_BY_ROLE_ID_AND_AUTHORITY')\")\n    @PostMapping(value = \"/revoke_associate_all_by_view_page_component_id_and_api_id_list\")\n    public ResponseEntity<Integer> revokeAssociateAllByViewPageComponentIdAndApiIdList(@RequestParam Long viewPageComponentId, @RequestParam(\"apiIdList[]\") List<Long> apiIdList) {\n        return new ResponseEntity<>(viewPageComponentApiService.revokeAssociateAllByViewPageComponentIdAndApiIdList(viewPageComponentId, apiIdList), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/ViewPageComponentRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.entity.ViewPageComponentEntity;\nimport com.godcheese.nimrod.user.service.ViewPageComponentService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.VIEW_PAGE_COMPONENT, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class ViewPageComponentRestController {\n\n    private static final String VIEW_PAGE_COMPONENT = \"/API/SYSTEM/VIEW_PAGE_COMPONENT\";\n\n    @Autowired\n    private ViewPageComponentService viewPageComponentService;\n\n    /**\n     * 新增视图页面组件\n     *\n     * @param viewPageComponentType 视图页面组件类型\n     * @param name                  视图页面组件名称\n     * @param authority             权限（authority）\n     * @param viewPageId            视图页面 id\n     * @param sort                  排序\n     * @param remark                备注\n     * @return ResponseEntity<ViewPageComponentEntity>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"新增视图页面组件\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_COMPONENT + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<ViewPageComponentEntity> addOne(@RequestParam Long viewPageComponentType, @RequestParam String name, @RequestParam String authority, @RequestParam Long viewPageId, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException {\n        ViewPageComponentEntity viewPageComponentEntity = new ViewPageComponentEntity();\n        viewPageComponentEntity.setViewPageComponentType(viewPageComponentType);\n        viewPageComponentEntity.setName(name);\n        viewPageComponentEntity.setAuthority(authority);\n        viewPageComponentEntity.setViewPageId(viewPageId);\n        viewPageComponentEntity.setSort(sort);\n        viewPageComponentEntity.setRemark(remark);\n        ViewPageComponentEntity viewPageComponentEntity1 = viewPageComponentService.addOne(viewPageComponentEntity);\n        return new ResponseEntity<>(viewPageComponentEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 保存视图页面组件\n     *\n     * @param id                    视图页面组件 id\n     * @param viewPageComponentType 视图页面组件类型\n     * @param name                  视图页面组件名称\n     * @param authority             权限（authority）\n     * @param sort                  排序\n     * @param remark                备注\n     * @return ResponseEntity<ViewPageComponentEntity>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"保存视图页面组件\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_COMPONENT + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<ViewPageComponentEntity> saveOne(@RequestParam Long id, @RequestParam Long viewPageComponentType, @RequestParam String name, @RequestParam String authority, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException {\n        ViewPageComponentEntity viewPageComponentEntity = new ViewPageComponentEntity();\n        viewPageComponentEntity.setId(id);\n        viewPageComponentEntity.setName(name);\n        viewPageComponentEntity.setViewPageComponentType(viewPageComponentType);\n        viewPageComponentEntity.setAuthority(authority);\n        viewPageComponentEntity.setSort(sort);\n        viewPageComponentEntity.setRemark(remark);\n        ViewPageComponentEntity viewPageComponentEntity1 = viewPageComponentService.saveOne(viewPageComponentEntity);\n        return new ResponseEntity<>(viewPageComponentEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图页面组件 id，批量删除视图页面组件\n     *\n     * @param idList 视图页面组件 id list\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"指定视图页面组件 id，批量删除视图页面组件\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_COMPONENT + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) {\n        return new ResponseEntity<>(viewPageComponentService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图组件 id，获取视图组件\n     *\n     * @param id 视图页面组件 id\n     * @return ResponseEntity<ViewPageComponentEntity>\n     */\n    @OperationLog(value = \"指定视图组件 id，获取视图组件\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_COMPONENT + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<ViewPageComponentEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(viewPageComponentService.getOne(id), HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图页面 id，分页获取所有视图页面组件\n     *\n     * @param viewPageId 视图页面 id\n     * @param page       页\n     * @param rows       每页显示数量\n     * @return ResponseEntity<Pagination < ViewPageComponentEntity>>\n     */\n    @OperationLog(value = \"指定视图页面 id，分页获取所有视图页面组件\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE_COMPONENT + \"/PAGE_ALL_BY_VIEW_PAGE_ID')\")\n    @GetMapping(value = \"/page_all_by_view_page_id\")\n    public ResponseEntity<Pagination<ViewPageComponentEntity>> pageAllByViewPageId(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam Long viewPageId, @RequestParam Long roleId) {\n        return new ResponseEntity<>(viewPageComponentService.pageAllByViewPageId(page, rows, viewPageId, roleId), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/api/ViewPageRestController.java",
    "content": "package com.godcheese.nimrod.user.api;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.operationlog.OperationLogType;\nimport com.godcheese.nimrod.user.User;\nimport com.godcheese.nimrod.user.entity.ViewPageEntity;\nimport com.godcheese.nimrod.user.service.ViewPageService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.MediaType;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@RestController\n@RequestMapping(value = User.Api.VIEW_PAGE, produces = MediaType.APPLICATION_JSON_VALUE)\npublic class ViewPageRestController {\n\n    private static final String VIEW_PAGE = \"/API/SYSTEM/VIEW_PAGE\";\n\n    @Autowired\n    private ViewPageService viewPageService;\n\n    /**\n     * 新增视图页面\n     *\n     * @param name               视图页面名称\n     * @param url                请求地址（url）\n     * @param authority          权限（authority）\n     * @param viewPageCategoryId 视图页面分类 id\n     * @param sort               排序\n     * @param remark             备注\n     * @return ResponseEntity<ViewPageEntity>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"新增视图页面\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE + \"/ADD_ONE')\")\n    @PostMapping(value = \"/add_one\")\n    public ResponseEntity<ViewPageEntity> addOne(@RequestParam String name, @RequestParam String url, @RequestParam String authority, @RequestParam Long viewPageCategoryId, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException {\n        ViewPageEntity viewPageEntity = new ViewPageEntity();\n        viewPageEntity.setName(name);\n        viewPageEntity.setUrl(url);\n        viewPageEntity.setAuthority(authority);\n        viewPageEntity.setViewPageCategoryId(viewPageCategoryId);\n        viewPageEntity.setSort(sort);\n        viewPageEntity.setRemark(remark);\n        ViewPageEntity viewPageEntity1 = viewPageService.addOne(viewPageEntity);\n        return new ResponseEntity<>(viewPageEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 保存视图页面\n     *\n     * @param id                 视图页面 id\n     * @param name               视图页面名称\n     * @param url                请求地址（url）\n     * @param authority          权限（authority）\n     * @param viewPageCategoryId 视图页面分类 id\n     * @param sort               排序\n     * @param remark             备注\n     * @return ResponseEntity<ViewPageEntity>\n     * @throws BaseResponseException BaseResponseException\n     */\n    @OperationLog(value = \"保存视图页面\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE + \"/SAVE_ONE')\")\n    @PostMapping(value = \"/save_one\")\n    public ResponseEntity<ViewPageEntity> saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam String url, @RequestParam String authority, @RequestParam Long viewPageCategoryId, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException {\n        ViewPageEntity viewPageEntity = new ViewPageEntity();\n        viewPageEntity.setId(id);\n        viewPageEntity.setName(name);\n        viewPageEntity.setUrl(url);\n        viewPageEntity.setAuthority(authority);\n        viewPageEntity.setViewPageCategoryId(viewPageCategoryId);\n        viewPageEntity.setSort(sort);\n        viewPageEntity.setRemark(remark);\n        ViewPageEntity viewPageEntity1 = viewPageService.saveOne(viewPageEntity);\n        return new ResponseEntity<>(viewPageEntity1, HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图页面 id，批量删除视图页面\n     *\n     * @param idList 视图页面 id list\n     * @return ResponseEntity<Integer>\n     */\n    @OperationLog(value = \"指定视图页面 id，批量删除视图页面\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE + \"/DELETE_ALL')\")\n    @PostMapping(value = \"/delete_all\")\n    public ResponseEntity<Integer> deleteAll(@RequestParam(\"id[]\") List<Long> idList) {\n        return new ResponseEntity<>(viewPageService.deleteAll(idList), HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图页面 id，获取视图页面\n     *\n     * @param id 视图页面 id\n     * @return ResponseEntity<ViewPageEntity>\n     */\n    @OperationLog(value = \"指定视图页面 id，获取视图页面\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE + \"/ONE')\")\n    @GetMapping(value = \"/one/{id}\")\n    public ResponseEntity<ViewPageEntity> getOne(@PathVariable Long id) {\n        return new ResponseEntity<>(viewPageService.getOne(id), HttpStatus.OK);\n    }\n\n    /**\n     * 指定视图页面分类 id，分页获取所有视图页面\n     *\n     * @param page               页\n     * @param rows               每页显示数量\n     * @param viewPageCategoryId 视图页面分类\n     * @return ResponseEntity<Pagination < ViewPageEntity>>\n     */\n    @OperationLog(value = \"指定视图页面分类 id，分页获取所有视图页面\", type = OperationLogType.API)\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('\" + VIEW_PAGE + \"/PAGE_ALL_BY_VIEW_PAGE_CATEGORY_ID')\")\n    @GetMapping(value = \"/page_all_by_view_page_category_id\")\n    public ResponseEntity<Pagination<ViewPageEntity>> pageAllByViewPageCategoryId(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam Long viewPageCategoryId, @RequestParam(required = false) Long roleId) {\n        return new ResponseEntity<>(viewPageService.pageAllByViewPageCategoryId(page, rows, viewPageCategoryId, roleId), HttpStatus.OK);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/ApiCategoryController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.API_CATEGORY)\npublic class ApiCategoryController {\n    @OperationLog(value = \"新增\")\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(User.Page.API_CATEGORY + \"/add_dialog\");\n    }\n\n    @OperationLog(value = \"编辑\")\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(User.Page.API_CATEGORY + \"/edit_dialog\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/ApiController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.API)\npublic class ApiController {\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/SYSTEM/API/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(User.Page.API + \"/list\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(User.Page.API + \"/add_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(User.Page.API + \"/edit_dialog\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/DepartmentController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.DEPARTMENT)\npublic class DepartmentController {\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/USER/DEPARTMENT/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(User.Page.DEPARTMENT + \"/list\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(User.Page.DEPARTMENT + \"/add_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(User.Page.DEPARTMENT + \"/edit_dialog\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/RoleAuthorityController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.ROLE_AUTHORITY)\npublic class RoleAuthorityController {\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(User.Page.ROLE_AUTHORITY + \"/add_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(User.Page.ROLE_AUTHORITY + \"/edit_dialog\");\n    }\n\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/USER/ROLE_AUTHORITY/VIEW_PAG')\")\n    @RequestMapping(\"/view_page\")\n    public String viewPage() {\n        return Common.trimSlash(User.Page.ROLE_AUTHORITY + \"/view_page\");\n    }\n\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/USER/ROLE_AUTHORITY/API')\")\n    @RequestMapping(\"/api\")\n    public String api() {\n        return Common.trimSlash(User.Page.ROLE_AUTHORITY + \"/api\");\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/RoleController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.ROLE)\npublic class RoleController {\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/USER/ROLE/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(User.Page.ROLE + \"/list\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(User.Page.ROLE + \"/add_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(User.Page.ROLE + \"/edit_dialog\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/RoleViewMenuController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.ROLE_VIEW_MENU)\npublic class RoleViewMenuController {\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/USER/ROLE_VIEW_MENU/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(User.Page.ROLE_VIEW_MENU + \"/list\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/UserController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.operationlog.OperationLog;\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.USER)\npublic class UserController {\n    @OperationLog(\"登录页\")\n    @RequestMapping(\"/login\")\n    public String login() {\n        return Common.trimSlash(User.Page.LOGIN);\n    }\n\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/USER/LIST')\")\n    @RequestMapping(\"/list\")\n    public String user() {\n        return Common.trimSlash(User.Page.USER + \"/list\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(User.Page.USER + \"/add_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(User.Page.USER + \"/edit_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/change_avatar_dialog\")\n    public String changeAvatarDialog() {\n        return Common.trimSlash(User.Page.USER + \"/change_avatar_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/change_email_dialog\")\n    public String changeEmailDialog() {\n        return Common.trimSlash(User.Page.USER + \"/change_email_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/change_password_dialog\")\n    public String changePasswordDialog() {\n        return Common.trimSlash(User.Page.USER + \"/change_password_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/profile\")\n    public String profile() {\n        return Common.trimSlash(User.Page.USER + \"/profile\");\n    }\n\n\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/UserRoleController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.USER_ROLE)\npublic class UserRoleController {\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/USER/USER_ROLE/LIST')\")\n    @RequestMapping(\"/list\")\n    public String userRole() {\n        return Common.trimSlash(User.Page.USER_ROLE + \"/list\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(User.Page.USER_ROLE + \"/add_dialog\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/ViewMenuCategoryController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.VIEW_MENU_CATEGORY)\npublic class ViewMenuCategoryController {\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(User.Page.VIEW_MENU_CATEGORY + \"/add_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(User.Page.VIEW_MENU_CATEGORY + \"/edit_dialog\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/ViewMenuController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.VIEW_MENU)\npublic class ViewMenuController {\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/USER/VIEW_MENU/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(User.Page.VIEW_MENU + \"/list\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(User.Page.VIEW_MENU + \"/add_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(User.Page.VIEW_MENU + \"/edit_dialog\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/ViewPageApiController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.VIEW_PAGE_API)\npublic class ViewPageApiController {\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/SYSTEM/VIEW_PAGE_API/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(User.Page.VIEW_PAGE_API + \"/list\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/ViewPageCategoryController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.VIEW_PAGE_CATEGORY)\npublic class ViewPageCategoryController {\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(User.Page.VIEW_PAGE_CATEGORY + \"/add_dialog\");\n    }\n\n    @PreAuthorize(\"isAuthenticated()\")\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(User.Page.VIEW_PAGE_CATEGORY + \"/edit_dialog\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/ViewPageComponentApiController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.VIEW_PAGE_COMPONENT_API)\npublic class ViewPageComponentApiController {\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/SYSTEM/VIEW_PAGE_COMPONENT_API/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(User.Page.VIEW_PAGE_COMPONENT_API + \"/list\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/ViewPageComponentController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.VIEW_PAGE_COMPONENT)\npublic class ViewPageComponentController {\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/SYSTEM/VIEW_PAGE_COMPONENT/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(User.Page.VIEW_PAGE_COMPONENT + \"/list\");\n    }\n\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(User.Page.VIEW_PAGE_COMPONENT + \"/add_dialog\");\n    }\n\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(User.Page.VIEW_PAGE_COMPONENT + \"/edit_dialog\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/controller/ViewPageController.java",
    "content": "package com.godcheese.nimrod.user.controller;\n\nimport com.godcheese.nimrod.common.others.Common;\nimport com.godcheese.nimrod.user.User;\nimport org.springframework.security.access.prepost.PreAuthorize;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Controller\n@RequestMapping(User.Page.VIEW_PAGE)\npublic class ViewPageController {\n    @PreAuthorize(\"hasRole('\" + SYSTEM_ADMIN + \"') OR hasAuthority('/SYSTEM/VIEW_PAGE/LIST')\")\n    @RequestMapping(\"/list\")\n    public String list() {\n        return Common.trimSlash(User.Page.VIEW_PAGE + \"/list\");\n    }\n\n    @RequestMapping(\"/add_dialog\")\n    public String addDialog() {\n        return Common.trimSlash(User.Page.VIEW_PAGE + \"/add_dialog\");\n    }\n\n    @RequestMapping(\"/edit_dialog\")\n    public String editDialog() {\n        return Common.trimSlash(User.Page.VIEW_PAGE + \"/edit_dialog\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/ApiCategoryEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport com.godcheese.nimrod.common.easyui.TreeGridAdapter;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class ApiCategoryEntity extends TreeGridAdapter<ApiCategoryEntity> implements Serializable {\n\n    private static final long serialVersionUID = -4351689880748496938L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 分类名称\n     */\n    private String name;\n\n    /**\n     * 父级分类 id\n     */\n    private Long parentId;\n\n    /**\n     * 排序\n     */\n    private Long sort;\n\n    /**\n     * 备注\n     */\n    private String remark;\n\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public Long getParentId() {\n        return parentId;\n    }\n\n    public void setParentId(Long parentId) {\n        this.parentId = parentId;\n    }\n\n    public Long getSort() {\n        return sort;\n    }\n\n    public void setSort(Long sort) {\n        this.sort = sort;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/ApiEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\n\nimport com.godcheese.nimrod.common.others.BaseEntityAdapter;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class ApiEntity extends BaseEntityAdapter<ApiEntity> implements Serializable {\n\n    private static final long serialVersionUID = 820249208575877774L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * api 名称\n     */\n    private String name;\n\n    /**\n     * 请求地址（url）\n     */\n    private String url;\n\n    /**\n     * 权限（authority）\n     */\n    private String authority;\n\n    /**\n     * API 分类 id\n     */\n    private Long apiCategoryId;\n\n    /**\n     * 排序\n     */\n    private Long sort;\n\n    /**\n     * 备注\n     */\n    private String remark;\n\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public String getUrl() {\n        return url;\n    }\n\n    public void setUrl(String url) {\n        this.url = url;\n    }\n\n    public String getAuthority() {\n        return authority;\n    }\n\n    public void setAuthority(String authority) {\n        this.authority = authority;\n    }\n\n    public Long getApiCategoryId() {\n        return apiCategoryId;\n    }\n\n    public void setApiCategoryId(Long apiCategoryId) {\n        this.apiCategoryId = apiCategoryId;\n    }\n\n    public Long getSort() {\n        return sort;\n    }\n\n    public void setSort(Long sort) {\n        this.sort = sort;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/DepartmentEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class DepartmentEntity implements Serializable {\n\n    private static final long serialVersionUID = 2255810820162075332L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 部门名称\n     */\n    private String name;\n\n    /**\n     * 父级部门 id\n     */\n    private Long parentId;\n\n    /**\n     * 备注\n     */\n    private String remark;\n\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public Long getParentId() {\n        return parentId;\n    }\n\n    public void setParentId(Long parentId) {\n        this.parentId = parentId;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/RoleAuthorityEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport java.io.Serializable;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class RoleAuthorityEntity implements Serializable {\n\n    private static final long serialVersionUID = -2620819100513212127L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 角色 id\n     */\n    private Long roleId;\n\n    /**\n     * 权限（authority）\n     */\n    private String authority;\n\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public Long getRoleId() {\n        return roleId;\n    }\n\n    public void setRoleId(Long roleId) {\n        this.roleId = roleId;\n    }\n\n    public String getAuthority() {\n        return authority;\n    }\n\n    public void setAuthority(String authority) {\n        this.authority = authority;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/RoleEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class RoleEntity implements Serializable {\n\n    private static final long serialVersionUID = -5287519220646696022L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 角色名称\n     */\n    private String name;\n\n    /**\n     * 角色值\n     */\n    private String value;\n\n    /**\n     * 备注\n     */\n    private String remark;\n\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public String getValue() {\n        return value;\n    }\n\n    public void setValue(String value) {\n        this.value = value;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/RoleViewMenuCategoryEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport java.io.Serializable;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class RoleViewMenuCategoryEntity implements Serializable {\n\n    private static final long serialVersionUID = -6845129368544578850L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 角色 id\n     */\n    private Long roleId;\n\n    /**\n     * 视图菜单分类 id\n     */\n    private String viewMenuCategoryId;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public Long getRoleId() {\n        return roleId;\n    }\n\n    public void setRoleId(Long roleId) {\n        this.roleId = roleId;\n    }\n\n    public String getViewMenuCategoryId() {\n        return viewMenuCategoryId;\n    }\n\n    public void setViewMenuCategoryId(String viewMenuCategoryId) {\n        this.viewMenuCategoryId = viewMenuCategoryId;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/RoleViewMenuEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport java.io.Serializable;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class RoleViewMenuEntity implements Serializable {\n\n    private static final long serialVersionUID = 4539087168395191315L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 角色 id\n     */\n    private Long roleId;\n\n    /**\n     * 视图菜单 id\n     */\n    private String viewMenuId;\n\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public Long getRoleId() {\n        return roleId;\n    }\n\n    public void setRoleId(Long roleId) {\n        this.roleId = roleId;\n    }\n\n    public String getViewMenuId() {\n        return viewMenuId;\n    }\n\n    public void setViewMenuId(String viewMenuId) {\n        this.viewMenuId = viewMenuId;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/UserEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport com.godcheese.nimrod.common.others.BaseEntityAdapter;\n\nimport java.io.Serializable;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class UserEntity extends BaseEntityAdapter<UserEntity> implements Serializable, Cloneable {\n\n    private static final long serialVersionUID = -4809374154449809L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 用户名\n     */\n    private String username;\n\n    /**\n     * 密码\n     */\n    private String password;\n\n    /**\n     * 头像\n     */\n    private String avatar;\n\n    /**\n     * 电子邮箱\n     */\n    private String email;\n\n    /**\n     * 电子邮箱是否已验证\n     */\n    private Integer emailIsVerified;\n\n    /**\n     * 所在部门 id\n     */\n    private Long departmentId;\n\n    /**\n     * 所在部门\n     */\n    private List<DepartmentEntity> department;\n\n    /**\n     * 是否启用（0=否，1=是，默认=0）\n     */\n    private Integer enabled;\n\n    /**\n     * 备注\n     */\n    private String remark;\n\n    private Date gmtPasswordLastModified;\n\n    private Date gmtLastLogin;\n\n    /**\n     * 删除时间\n     */\n    private Date gmtDeleted;\n\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getPassword() {\n        return password;\n    }\n\n    public void setPassword(String password) {\n        this.password = password;\n    }\n\n    @Override\n    public String getUsername() {\n        return username;\n    }\n\n    @Override\n    public void setUsername(String username) {\n        this.username = username;\n    }\n\n    public String getAvatar() {\n        return avatar;\n    }\n\n    public void setAvatar(String avatar) {\n        this.avatar = avatar;\n    }\n\n    public String getEmail() {\n        return email;\n    }\n\n    public void setEmail(String email) {\n        this.email = email;\n    }\n\n    public Integer getEmailIsVerified() {\n        return emailIsVerified;\n    }\n\n    public void setEmailIsVerified(Integer emailIsVerified) {\n        this.emailIsVerified = emailIsVerified;\n    }\n\n    public Long getDepartmentId() {\n        return departmentId;\n    }\n\n    public void setDepartmentId(Long departmentId) {\n        this.departmentId = departmentId;\n    }\n\n    public List<DepartmentEntity> getDepartment() {\n        return department;\n    }\n\n    public void setDepartment(List<DepartmentEntity> department) {\n        this.department = department;\n    }\n\n    public Integer getEnabled() {\n        return enabled;\n    }\n\n    public void setEnabled(Integer enabled) {\n        this.enabled = enabled;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtPasswordLastModified() {\n        return gmtPasswordLastModified;\n    }\n\n    public void setGmtPasswordLastModified(Date gmtPasswordLastModified) {\n        this.gmtPasswordLastModified = gmtPasswordLastModified;\n    }\n\n    public Date getGmtLastLogin() {\n        return gmtLastLogin;\n    }\n\n    public void setGmtLastLogin(Date gmtLastLogin) {\n        this.gmtLastLogin = gmtLastLogin;\n    }\n\n    public Date getGmtDeleted() {\n        return gmtDeleted;\n    }\n\n    public void setGmtDeleted(Date gmtDeleted) {\n        this.gmtDeleted = gmtDeleted;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n\n    @Override\n    public String toString() {\n        return \"UserEntity{\" +\n                \"id=\" + id +\n                \", username='\" + username + '\\'' +\n                \", password='\" + password + '\\'' +\n                \", avatar='\" + avatar + '\\'' +\n                \", email='\" + email + '\\'' +\n                \", emailIsVerified=\" + emailIsVerified +\n                \", departmentId=\" + departmentId +\n                \", department=\" + department +\n                \", enabled=\" + enabled +\n                \", remark='\" + remark + '\\'' +\n                \", gmtPasswordLastModified=\" + gmtPasswordLastModified +\n                \", gmtLastLogin=\" + gmtLastLogin +\n                \", gmtDeleted=\" + gmtDeleted +\n                \", gmtModified=\" + gmtModified +\n                \", gmtCreated=\" + gmtCreated +\n                '}';\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/UserRoleEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport java.io.Serializable;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class UserRoleEntity implements Serializable {\n\n    private static final long serialVersionUID = 6510813723513038865L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 用户 id\n     */\n    private Long userId;\n\n    /**\n     * 角色 id\n     */\n    private Long roleId;\n\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public Long getUserId() {\n        return userId;\n    }\n\n    public void setUserId(Long userId) {\n        this.userId = userId;\n    }\n\n    public Long getRoleId() {\n        return roleId;\n    }\n\n    public void setRoleId(Long roleId) {\n        this.roleId = roleId;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/UserVerifyCodeEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class UserVerifyCodeEntity implements Serializable {\n\n    private static final long serialVersionUID = -7053740452414479328L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 用户 id\n     */\n    private Long userId;\n\n    /**\n     * 用户绑定的电子邮箱或手机号码\n     */\n    private String verifyFrom;\n\n    /**\n     * 电子邮箱或手机号码验证码\n     */\n    private String verifyCode;\n\n    /**\n     * 过期时间\n     */\n    private Date gmtExpires;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public Long getUserId() {\n        return userId;\n    }\n\n    public void setUserId(Long userId) {\n        this.userId = userId;\n    }\n\n    public String getVerifyFrom() {\n        return verifyFrom;\n    }\n\n    public void setVerifyFrom(String verifyFrom) {\n        this.verifyFrom = verifyFrom;\n    }\n\n    public String getVerifyCode() {\n        return verifyCode;\n    }\n\n    public void setVerifyCode(String verifyCode) {\n        this.verifyCode = verifyCode;\n    }\n\n    public Date getGmtExpires() {\n        return gmtExpires;\n    }\n\n    public void setGmtExpires(Date gmtExpires) {\n        this.gmtExpires = gmtExpires;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/ViewMenuCategoryEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport com.godcheese.nimrod.common.easyui.TreeGridAdapter;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class ViewMenuCategoryEntity extends TreeGridAdapter<ViewMenuCategoryEntity> implements Serializable {\n\n    private static final long serialVersionUID = -1331974479094679699L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 分类名称\n     */\n    private String name;\n\n    /**\n     * 图标（icon）\n     */\n    private String icon;\n\n    /**\n     * 父级分类 id\n     */\n    private Long parentId;\n\n    /**\n     * 排序\n     */\n    private Long sort;\n\n    /**\n     * 备注\n     */\n    private String remark;\n\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public String getIcon() {\n        return icon;\n    }\n\n    public void setIcon(String icon) {\n        this.icon = icon;\n    }\n\n    public Long getParentId() {\n        return parentId;\n    }\n\n    public void setParentId(Long parentId) {\n        this.parentId = parentId;\n    }\n\n    public Long getSort() {\n        return sort;\n    }\n\n    public void setSort(Long sort) {\n        this.sort = sort;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/ViewMenuEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport com.godcheese.nimrod.common.others.BaseEntityAdapter;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class ViewMenuEntity extends BaseEntityAdapter<ViewMenuEntity> implements Serializable {\n\n    private static final long serialVersionUID = 5133319566323006861L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 菜单名称\n     */\n    private String name;\n\n    /**\n     * 图标（icon）\n     */\n    private String icon;\n\n    /**\n     * 请求地址（url）\n     */\n    private String url;\n\n    /**\n     * 菜单分类 id\n     */\n    private Long viewMenuCategoryId;\n\n    /**\n     * 排序\n     */\n    private Long sort;\n\n    /**\n     * 备注\n     */\n    private String remark;\n\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public String getIcon() {\n        return icon;\n    }\n\n    public void setIcon(String icon) {\n        this.icon = icon;\n    }\n\n    public String getUrl() {\n        return url;\n    }\n\n    public void setUrl(String url) {\n        this.url = url;\n    }\n\n    public Long getViewMenuCategoryId() {\n        return viewMenuCategoryId;\n    }\n\n    public void setViewMenuCategoryId(Long viewMenuCategoryId) {\n        this.viewMenuCategoryId = viewMenuCategoryId;\n    }\n\n    public Long getSort() {\n        return sort;\n    }\n\n    public void setSort(Long sort) {\n        this.sort = sort;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n\n    @Override\n    public String toString() {\n        return \"ViewMenuEntity{\" +\n                \"id=\" + id +\n                \", name='\" + name + '\\'' +\n                \", icon='\" + icon + '\\'' +\n                \", url='\" + url + '\\'' +\n                \", viewMenuCategoryId=\" + viewMenuCategoryId +\n                \", sort=\" + sort +\n                \", remark='\" + remark + '\\'' +\n                \", gmtModified=\" + gmtModified +\n                \", gmtCreated=\" + gmtCreated +\n                '}';\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/ViewPageApiEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport java.io.Serializable;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class ViewPageApiEntity implements Serializable {\n\n    private static final long serialVersionUID = 5514010345109428863L;\n\n    private Long id;\n\n    /**\n     * 视图页面 id\n     */\n    private Long viewPageId;\n\n    /**\n     * API id\n     */\n    private Long apiId;\n\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public Long getViewPageId() {\n        return viewPageId;\n    }\n\n    public void setViewPageId(Long viewPageId) {\n        this.viewPageId = viewPageId;\n    }\n\n    public Long getApiId() {\n        return apiId;\n    }\n\n    public void setApiId(Long apiId) {\n        this.apiId = apiId;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/ViewPageCategoryEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport com.godcheese.nimrod.common.easyui.TreeGridAdapter;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class ViewPageCategoryEntity extends TreeGridAdapter<ViewPageCategoryEntity> implements Serializable {\n\n    private static final long serialVersionUID = -1851793867270727714L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 分类名称\n     */\n    private String name;\n\n    /**\n     * 父级分类 id\n     */\n    private Long parentId;\n\n    /**\n     * 排序\n     */\n    private Long sort;\n\n    /**\n     * 备注\n     */\n    private String remark;\n\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public Long getParentId() {\n        return parentId;\n    }\n\n    public void setParentId(Long parentId) {\n        this.parentId = parentId;\n    }\n\n    public Long getSort() {\n        return sort;\n    }\n\n    public void setSort(Long sort) {\n        this.sort = sort;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/ViewPageComponentApiEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport java.io.Serializable;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class ViewPageComponentApiEntity implements Serializable {\n\n    private static final long serialVersionUID = 9177243332779548374L;\n\n    private Long id;\n\n    /**\n     * 视图页面组件 id\n     */\n    private Long viewPageComponentId;\n\n    /**\n     * API id\n     */\n    private Long apiId;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public Long getViewPageComponentId() {\n        return viewPageComponentId;\n    }\n\n    public void setViewPageComponentId(Long viewPageComponentId) {\n        this.viewPageComponentId = viewPageComponentId;\n    }\n\n    public Long getApiId() {\n        return apiId;\n    }\n\n    public void setApiId(Long apiId) {\n        this.apiId = apiId;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/ViewPageComponentEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\n\nimport com.godcheese.nimrod.common.others.BaseEntityAdapter;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class ViewPageComponentEntity extends BaseEntityAdapter<ViewPageComponentEntity> implements Serializable {\n\n    private static final long serialVersionUID = -5628097399101917617L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 组件分类 id\n     */\n    private Long viewPageComponentType;\n\n    /**\n     * 组件名称\n     */\n    private String name;\n\n    /**\n     * 权限（authority）\n     */\n    private String authority;\n\n    /**\n     * 视图页面 id\n     */\n    private Long viewPageId;\n\n    /**\n     * 排序\n     */\n    private Long sort;\n\n    /**\n     * 备注\n     */\n    private String remark;\n\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public Long getViewPageComponentType() {\n        return viewPageComponentType;\n    }\n\n    public void setViewPageComponentType(Long viewPageComponentType) {\n        this.viewPageComponentType = viewPageComponentType;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public String getAuthority() {\n        return authority;\n    }\n\n    public void setAuthority(String authority) {\n        this.authority = authority;\n    }\n\n    public Long getViewPageId() {\n        return viewPageId;\n    }\n\n    public void setViewPageId(Long viewPageId) {\n        this.viewPageId = viewPageId;\n    }\n\n    public Long getSort() {\n        return sort;\n    }\n\n    public void setSort(Long sort) {\n        this.sort = sort;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/entity/ViewPageEntity.java",
    "content": "package com.godcheese.nimrod.user.entity;\n\nimport com.godcheese.nimrod.common.others.BaseEntityAdapter;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic class ViewPageEntity extends BaseEntityAdapter<ViewPageEntity> implements Serializable {\n\n    private static final long serialVersionUID = -8255954879287469862L;\n\n    /**\n     * id\n     */\n    private Long id;\n\n    /**\n     * 页面名称\n     */\n    private String name;\n\n    /**\n     * 请求地址（url）\n     */\n    private String url;\n\n    /**\n     * 权限（authority）\n     */\n    private String authority;\n\n    /**\n     * 视图页面分类 id\n     */\n    private Long viewPageCategoryId;\n\n    /**\n     * 排序\n     */\n    private Long sort;\n\n    /**\n     * 备注\n     */\n    private String remark;\n\n    /**\n     * 更新时间\n     */\n    private Date gmtModified;\n\n    /**\n     * 创建时间\n     */\n    private Date gmtCreated;\n\n\n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public String getUrl() {\n        return url;\n    }\n\n    public void setUrl(String url) {\n        this.url = url;\n    }\n\n    public String getAuthority() {\n        return authority;\n    }\n\n    public void setAuthority(String authority) {\n        this.authority = authority;\n    }\n\n    public Long getViewPageCategoryId() {\n        return viewPageCategoryId;\n    }\n\n    public void setViewPageCategoryId(Long viewPageCategoryId) {\n        this.viewPageCategoryId = viewPageCategoryId;\n    }\n\n    public Long getSort() {\n        return sort;\n    }\n\n    public void setSort(Long sort) {\n        this.sort = sort;\n    }\n\n    public String getRemark() {\n        return remark;\n    }\n\n    public void setRemark(String remark) {\n        this.remark = remark;\n    }\n\n    public Date getGmtModified() {\n        return gmtModified;\n    }\n\n    public void setGmtModified(Date gmtModified) {\n        this.gmtModified = gmtModified;\n    }\n\n    public Date getGmtCreated() {\n        return gmtCreated;\n    }\n\n    public void setGmtCreated(Date gmtCreated) {\n        this.gmtCreated = gmtCreated;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ApiCategoryMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.ApiCategoryEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"apiCategoryMapper\")\n@Mapper\npublic interface ApiCategoryMapper extends CrudMapper<ApiCategoryEntity, Long> {\n\n    /**\n     * 获取所有父级 id 为 null 的 API 分类\n     *\n     * @return List<ApiCategoryEntity>\n     */\n    List<ApiCategoryEntity> listAllByParentIdIsNull();\n\n    /**\n     * 指定父级 API 分类 id，获取所有 API 分类\n     *\n     * @param parentId 父级 API 分类 id\n     * @return List<ApiCategoryEntity>\n     */\n    List<ApiCategoryEntity> listAllByParentId(@Param(\"parentId\") Long parentId);\n\n    /**\n     * 指定父级 API 分类 id，获取所有 API 分类\n     *\n     * @param parentId 父级 API 分类 id\n     * @return ApiCategoryEntity\n     */\n    ApiCategoryEntity getOneByParentId(@Param(\"parentId\") Long parentId);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ApiCategoryMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.ApiCategoryMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.ApiCategoryEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"name\" property=\"name\" jdbcType=\"VARCHAR\"/> <!-- 分类名称 -->\n        <result column=\"parent_id\" property=\"parentId\" jdbcType=\"BIGINT\"/> <!-- 父级分类 id -->\n        <result column=\"sort\" property=\"sort\" jdbcType=\"BIGINT\"/> <!-- 排序 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `api_category`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `name`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.ApiCategoryEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `name`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`)\n        values (#{id}, #{name}, #{parentId}, #{sort}, #{remark}, #{gmtModified}, #{gmtCreated})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.ApiCategoryEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `name` = #{name}, `parent_id` = #{parentId}, `sort` = #{sort}, `remark` = #{remark}, `gmt_modified` =\n        #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"pageAll\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"listAllByParentIdIsNull\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` IS NULL\n    </select>\n\n    <select id=\"listAllByParentId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` = #{parentId}\n    </select>\n\n    <select id=\"getOneByParentId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` = #{parentId} limit 1\n    </select>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ApiMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.ApiEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport com.github.pagehelper.Page;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"apiMapper\")\n@Mapper\npublic interface ApiMapper extends CrudMapper<ApiEntity, Long> {\n\n    /**\n     * 指定 API 分类 id，获取所有 API\n     *\n     * @param apiCategoryId API 分类 id\n     * @return ApiEntity\n     */\n    ApiEntity getOneByApiCategoryId(@Param(\"apiCategoryId\") Long apiCategoryId);\n\n    /**\n     * 指定 API 分类 id，分页获取所有 API\n     *\n     * @param apiCategoryId API 分类 id\n     * @return List<ApiEntity>\n     */\n    Page<ApiEntity> pageAllByApiCategoryId(@Param(\"apiCategoryId\") Long apiCategoryId);\n\n    /**\n     * 指定 authority，获取所有 API\n     *\n     * @param authority authority\n     * @return ApiEntity\n     */\n    ApiEntity getOneByAuthority(@Param(\"authority\") String authority);\n\n    /**\n     * 指定 API 分类 id list，分页获取所有 API\n     *\n     * @param apiCategoryIdList API 分类 id list\n     * @return Page<ApiEntity>\n     */\n    Page<ApiEntity> pageAllByApiCategoryIdList(@Param(\"apiCategoryIdList\") List<Long> apiCategoryIdList);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ApiMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.ApiMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.ApiEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"name\" property=\"name\" jdbcType=\"VARCHAR\"/> <!-- api 名称 -->\n        <result column=\"url\" property=\"url\" jdbcType=\"LONGVARCHAR\"/> <!--请求地址（url）-->\n        <result column=\"authority\" property=\"authority\" jdbcType=\"VARCHAR\"/> <!-- 权限（authority） -->\n        <result column=\"api_category_id\" property=\"apiCategoryId\" jdbcType=\"BIGINT\"/> <!-- api 分类 id -->\n        <result column=\"sort\" property=\"sort\" jdbcType=\"BIGINT\"/> <!-- 排序 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `api`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `name`, `url`, `authority`, `api_category_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.ApiEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `name`, `url`, `authority`, `api_category_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`)\n        values (#{id}, #{name}, #{url}, #{authority}, #{apiCategoryId}, #{sort}, #{remark}, #{gmtCreated},\n        #{gmtModified})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.ApiEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `name` = #{name}, `url` = #{url}, `authority` = #{authority}, `api_category_id` = #{apiCategoryId}, `sort` =\n        #{sort}, `remark` =\n        #{remark}, `gmt_created` = #{gmtCreated}, `gmt_modified` = #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <!--    <select id=\"pageAll\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">-->\n    <!--        select-->\n    <!--        <include refid=\"BaseColumnList\"/>-->\n    <!--        from-->\n    <!--        <include refid=\"TableName\"/>-->\n    <!--    </select>-->\n\n    <select id=\"getOneByApiCategoryId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `api_category_id` = #{apiCategoryId} limit 1\n    </select>\n\n    <select id=\"pageAllByApiCategoryId\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `api_category_id` = #{apiCategoryId}\n    </select>\n    <select id=\"countAllByApiCategoryId\" resultType=\"int\">\n        select COUNT(1) from\n        <include refid=\"TableName\"/>\n        where `api_category_id` = #{apiCategoryId}\n    </select>\n\n    <select id=\"getOneByAuthority\" resultMap=\"BaseResultMap\" parameterType=\"string\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `authority` = #{authority} limit 1\n    </select>\n\n    <select id=\"pageAllByApiCategoryIdList\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `api_category_id` in (\n        <foreach collection=\"apiCategoryIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </select>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/DepartmentMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.DepartmentEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"departmentMapper\")\n@Mapper\npublic interface DepartmentMapper extends CrudMapper<DepartmentEntity, Long> {\n\n    /**\n     * 获取所有父级 id 为 null 的部门\n     *\n     * @return List<DepartmentEntity>\n     */\n    List<DepartmentEntity> listAllParentIdIsNull();\n\n    /**\n     * 指定父级部门 id，获取所有部门\n     *\n     * @param parentId 父级部门 id\n     * @return List<ApiCategoryEntity>\n     */\n    List<DepartmentEntity> listAllByParentId(@Param(\"parentId\") Long parentId);\n\n    /**\n     * 指定父级部门 id，获取部门\n     *\n     * @param parentId 父级部门 id\n     * @return DepartmentEntity\n     */\n    DepartmentEntity getOneByParentId(@Param(\"parentId\") Long parentId);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/DepartmentMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.DepartmentMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.DepartmentEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"name\" property=\"name\" jdbcType=\"VARCHAR\"/> <!-- 部门名称 -->\n        <result column=\"parent_id\" property=\"parentId\" jdbcType=\"BIGINT\"/> <!-- 父级部门 id -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `department`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `name`, `parent_id`, `remark`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.DepartmentEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (<include refid=\"BaseColumnList\"/>)\n        values (#{id}, #{name}, #{parentId}, #{remark}, #{gmtModified}, #{gmtCreated})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.DepartmentEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `name` = #{name}, `parent_id` = #{parentId}, `remark` = #{remark}, `gmt_modified` = #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"getOneByParentId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` = #{parentId} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"pageAllParentIdIsNull\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` is null\n    </select>\n\n    <select id=\"listAllByParentId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` = #{parentId}\n    </select>\n\n    <select id=\"listAllParentIdIsNull\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` is null\n    </select>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/RoleAuthorityMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.RoleAuthorityEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"roleAuthorityMapper\")\n@Mapper\npublic interface RoleAuthorityMapper extends CrudMapper<RoleAuthorityEntity, Long> {\n\n    /**\n     * 指定角色 id，获取所有角色权限\n     *\n     * @param roleId 角色 id\n     * @return List<RoleAuthorityEntity>\n     */\n    List<RoleAuthorityEntity> listAllByRoleId(@Param(\"roleId\") Long roleId);\n\n    /**\n     * 指定角色 id、authority，获取角色权限\n     *\n     * @param roleId    角色 id\n     * @param authority authority\n     * @return RoleAuthorityEntity\n     */\n    RoleAuthorityEntity getOneByRoleIdAndAuthority(@Param(\"roleId\") Long roleId, @Param(\"authority\") String authority);\n\n    /**\n     * 指定角色 id、authority list，批量删除\n     *\n     * @param roleId        角色 id\n     * @param authorityList authority list\n     * @return int\n     */\n    int deleteAllByRoleIdAndAuthorityList(@Param(\"roleId\") Long roleId, @Param(\"authorityList\") List<String> authorityList);\n\n    /**\n     * 指定角色 id、authority list，批量插入\n     *\n     * @param roleId        角色 id\n     * @param authorityList authority list\n     * @return int\n     */\n    int insertAllByRoleIdAndAuthorityList(@Param(\"roleId\") Long roleId, @Param(\"authorityList\") List<String> authorityList);\n\n    /**\n     * 指定角色 id，批量删除角色权限\n     *\n     * @param roleId 角色 id\n     * @return int\n     */\n    int deleteAllByRoleId(@Param(\"roleId\") Long roleId);\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/RoleAuthorityMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.RoleAuthorityMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.RoleAuthorityEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"role_id\" property=\"roleId\" jdbcType=\"BIGINT\"/> <!-- 角色 id -->\n        <result column=\"authority\" property=\"authority\" jdbcType=\"VARCHAR\"/> <!-- 权限（authority） -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `role_authority`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `role_id`, `authority`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.RoleAuthorityEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `role_id`, `authority`)\n        values (#{id}, #{roleId}, #{authority})\n    </insert>\n\n    <insert id=\"insertAll\" useGeneratedKeys=\"true\" keyProperty=\"id\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`role_id`, `authority`)\n        values (#{roleId}, #{authority})\n    </insert>\n\n    <insert id=\"insertAllByRoleIdAndAuthorityList\" useGeneratedKeys=\"true\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`role_id`, `authority`)\n        values\n        <foreach collection=\"authorityList\" item=\"item\" index=\"index\" separator=\",\">\n            <if test=\"item != ''\">\n                (#{roleId}, #{item})\n            </if>\n        </foreach>\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.RoleAuthorityEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `role_id` = #{roleId}, `authority` = #{authority}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <delete id=\"deleteAllByRoleIdAndAuthorityList\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId} and `authority` in (\n        <foreach collection=\"authorityList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <delete id=\"deleteAllByRoleId\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId}\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"listAllByRoleId\" resultMap=\"BaseResultMap\" parameterType=\"long\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId}\n    </select>\n\n    <select id=\"getOneByRoleIdAndAuthority\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId} and `authority` = #{authority} limit 1\n    </select>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/RoleMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.RoleEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport com.github.pagehelper.Page;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"roleMapper\")\n@Mapper\npublic interface RoleMapper extends CrudMapper<RoleEntity, Long> {\n\n    /**\n     * 指定角色值，获取角色\n     *\n     * @param value 角色值\n     * @return RoleEntity\n     */\n    RoleEntity getOneByValue(@Param(\"value\") String value);\n\n    /**\n     * 分页获取所有角色\n     *\n     * @return Page<RoleEntity>\n     */\n    Page<RoleEntity> pageAll();\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/RoleMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.RoleMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.RoleEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"name\" property=\"name\" jdbcType=\"VARCHAR\"/> <!-- 角色名称 -->\n        <result column=\"value\" property=\"value\" jdbcType=\"VARCHAR\"/> <!-- 角色值 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `role`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `name`, `value`, `remark`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.RoleEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (<include refid=\"BaseColumnList\"/>)\n        values (#{id}, #{name}, #{value}, #{remark}, #{gmtModified}, #{gmtCreated})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.RoleEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `name` = #{name}, `remark` = #{remark}, `gmt_modified` = #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"pageAll\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n    <!--    <select id=\"countAll\" resultType=\"int\">-->\n    <!--        select count(1) from-->\n    <!--        <include refid=\"TableName\"/>-->\n    <!--    </select>-->\n\n    <select id=\"getOneByValue\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `value` = #{value} limit 1\n    </select>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/RoleViewMenuCategoryMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.RoleViewMenuCategoryEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"roleViewMenuCategoryMapper\")\n@Mapper\npublic interface RoleViewMenuCategoryMapper extends CrudMapper<RoleViewMenuCategoryEntity, Long> {\n\n    /**\n     * 指定角色 id，获取所有角色权限\n     *\n     * @param roleId 角色 id\n     * @return List<RoleViewMenuCategoryEntity>\n     */\n    List<RoleViewMenuCategoryEntity> listAllByRoleId(@Param(\"roleId\") Long roleId);\n\n    /**\n     * 指定角色 id，批量删除角色视图菜单分类\n     *\n     * @param roleId 角色 id\n     * @return int\n     */\n    int deleteAllByRoleId(@Param(\"roleId\") Long roleId);\n\n    /**\n     * 指定角色 id、 视图菜单分类 id list，批量插入\n     *\n     * @param roleId                 角色 id\n     * @param viewMenuCategoryIdList 视图菜单分类 id list\n     * @return int\n     */\n    int insertAllByRoleIdAndViewMenuCategoryIdList(@Param(\"roleId\") Long roleId, @Param(\"viewMenuCategoryIdList\") List<Long> viewMenuCategoryIdList);\n\n    /**\n     * 指定角色 id、authority，获取角色权限\n     *\n     * @param roleId             角色 id\n     * @param viewMenuCategoryId 视图菜单分类 id\n     * @return RoleAuthorityEntity\n     */\n    RoleViewMenuCategoryEntity getOneByRoleIdAndViewMenuCategoryId(@Param(\"roleId\") Long roleId, @Param(\"viewMenuCategoryId\") Long viewMenuCategoryId);\n\n    /**\n     * 指定角色 id、视图菜单分类 id list，批量删除角色视图菜单分类\n     *\n     * @param roleId                 角色 id\n     * @param viewMenuCategoryIdList 视图菜单分类 id list\n     * @return int\n     */\n    int deleteAllByRoleIdAndViewMenuCategoryIdList(@Param(\"roleId\") Long roleId, @Param(\"viewMenuCategoryIdList\") List<Long> viewMenuCategoryIdList);\n\n    /**\n     * 指定视图菜单分类 id，批量删除角色视图菜单分类\n     *\n     * @param viewMenuCategoryId 视图菜单分类 id\n     * @return\n     */\n    int deleteAllByViewMenuCategoryId(@Param(\"viewMenuCategoryId\") Long viewMenuCategoryId);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/RoleViewMenuCategoryMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.RoleViewMenuCategoryMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.RoleViewMenuCategoryEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"role_id\" property=\"roleId\" jdbcType=\"BIGINT\"/> <!-- 角色 id -->\n        <result column=\"view_menu_category_id\" property=\"viewMenuCategoryId\" jdbcType=\"VARCHAR\"/> <!-- 视图菜单分类 id -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `role_view_menu_category`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `role_id`, `view_menu_category_id`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.RoleViewMenuCategoryEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `role_id`, `view_menu_category_id`)\n        values (#{id}, #{roleId}, #{viewMenuCategoryId})\n    </insert>\n\n    <insert id=\"insertAll\" useGeneratedKeys=\"true\" keyProperty=\"id\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`role_id`, `view_menu_category_id`)\n        values (#{roleId}, #{viewMenuCategoryId})\n    </insert>\n\n    <insert id=\"insertAllByRoleIdAndViewMenuCategoryIdList\" useGeneratedKeys=\"true\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`role_id`, `view_menu_category_id`)\n        values\n        <foreach collection=\"viewMenuCategoryIdList\" item=\"item\" index=\"index\" separator=\",\">\n            <if test=\"item != ''\">\n                (#{roleId}, #{item})\n            </if>\n        </foreach>\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.RoleViewMenuCategoryEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `role_id` = #{roleId}, `view_menu_category_id` = #{viewMenuCategoryId}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <delete id=\"deleteAllByRoleIdAndViewMenuCategoryIdList\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId} and `view_menu_category_id` in (\n        <foreach collection=\"viewMenuCategoryIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <delete id=\"deleteAllByViewMenuCategoryId\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `view_menu_category_id` = #{viewMenuCategoryId}\n    </delete>\n\n    <delete id=\"deleteAllByRoleId\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId}\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"listAllByRoleId\" resultMap=\"BaseResultMap\" parameterType=\"long\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId}\n    </select>\n\n    <select id=\"getOneByRoleIdAndViewMenuCategoryId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId} and `view_menu_category_id` = #{viewMenuCategoryId} limit 1\n    </select>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/RoleViewMenuMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.RoleViewMenuEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"roleViewMenuEntity\")\n@Mapper\npublic interface RoleViewMenuMapper extends CrudMapper<RoleViewMenuEntity, Long> {\n\n    /**\n     * 指定角色 id，获取所有角色权限\n     *\n     * @param roleId 角色 id\n     * @return List<RoleViewMenuEntity>\n     */\n    List<RoleViewMenuEntity> listAllByRoleId(@Param(\"roleId\") Long roleId);\n\n    /**\n     * 指定角色 id，批量删除角色视图菜单\n     *\n     * @param roleId 角色 id\n     * @return int\n     */\n    int deleteAllByRoleId(@Param(\"roleId\") Long roleId);\n\n    /**\n     * 指定角色 id、视图菜单分类 id list，批量新增\n     *\n     * @param roleId         角色 id\n     * @param viewMenuIdList 视图菜单 id list\n     * @return int\n     */\n    int insertAllByRoleIdAndViewMenuIdList(@Param(\"roleId\") Long roleId, @Param(\"viewMenuIdList\") List<Long> viewMenuIdList);\n\n    /**\n     * 指定角色 id、authority，获取角色权限\n     *\n     * @param roleId     角色 id\n     * @param viewMenuId 视图菜单 id\n     * @return RoleAuthorityEntity\n     */\n    RoleViewMenuEntity getOneByRoleIdAndViewMenuId(@Param(\"roleId\") Long roleId, @Param(\"viewMenuId\") Long viewMenuId);\n\n    /**\n     * 指定角色 id，视图菜单 id list，批量删除\n     *\n     * @param roleId         角色 id\n     * @param viewMenuIdList 视图菜单 id list\n     * @return int\n     */\n    int deleteAllByRoleIdAndViewMenuIdList(@Param(\"roleId\") Long roleId, @Param(\"viewMenuIdList\") List<Long> viewMenuIdList);\n\n    /**\n     * 指定视图菜单 id list，批量删除\n     *\n     * @param viewMenuIdList 视图菜单 id list\n     * @return int\n     */\n    int deleteAllByViewMenuIdList(@Param(\"viewMenuIdList\") List<Long> viewMenuIdList);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/RoleViewMenuMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.RoleViewMenuMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.RoleViewMenuEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"role_id\" property=\"roleId\" jdbcType=\"BIGINT\"/> <!-- 角色 id -->\n        <result column=\"view_menu_id\" property=\"viewMenuId\" jdbcType=\"VARCHAR\"/> <!-- 视图菜单 id -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `role_view_menu`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `role_id`, `view_menu_id`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.RoleViewMenuEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `role_id`, `view_menu_id`)\n        values (#{id}, #{roleId}, #{viewMenuId})\n    </insert>\n\n    <insert id=\"insertAll\" useGeneratedKeys=\"true\" keyProperty=\"id\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`role_id`, `view_menu_category_id`)\n        values (#{roleId}, #{viewMenuCategoryId})\n    </insert>\n\n    <insert id=\"insertAllByRoleIdAndViewMenuIdList\" useGeneratedKeys=\"true\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`role_id`, `view_menu_id`)\n        values\n        <foreach collection=\"viewMenuIdList\" item=\"item\" index=\"index\" separator=\",\">\n            <if test=\"item != ''\">\n                (#{roleId}, #{item})\n            </if>\n        </foreach>\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.RoleViewMenuEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `role_id` = #{roleId}, `view_menu_id` = #{viewMenuId}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <delete id=\"deleteAllByRoleIdAndViewMenuIdList\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId} and `view_menu_id` in (\n        <foreach collection=\"viewMenuIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <delete id=\"deleteAllByViewMenuIdList\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `view_menu_id` in (\n        <foreach collection=\"viewMenuIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <delete id=\"deleteAllByRoleId\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId}\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"listAllByRoleId\" resultMap=\"BaseResultMap\" parameterType=\"long\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId}\n    </select>\n\n    <select id=\"getOneByRoleIdAndViewMenuId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId} and `view_menu_id` = #{viewMenuId} limit 1\n    </select>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/UserMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.UserEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport com.github.pagehelper.Page;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"userMapper\")\n@Mapper\npublic interface UserMapper extends CrudMapper<UserEntity, Long> {\n    /**\n     * 指定 username 获取用户\n     *\n     * @param username 用户名\n     * @return UserEntity\n     */\n    UserEntity getOneByUsername(@Param(\"username\") String username);\n\n    /**\n     * 指定电子邮箱，获取用户\n     *\n     * @param email 电子邮箱\n     * @return UserEntity\n     */\n    UserEntity getOneByEmail(@Param(\"email\") String email);\n\n    /**\n     * 指定手机号码，获取用户\n     *\n     * @param cellphone 手机号码\n     * @return UserEntity\n     */\n    UserEntity getOneByCellphone(@Param(\"cellphone\") String cellphone);\n\n    /**\n     * 伪删除用户，标记 gmtDeleted 字段\n     *\n     * @param idList     id list\n     * @param gmtDeleted 删除时间\n     * @return int\n     */\n    int fakeDeleteAll(@Param(\"idList\") List<Long> idList, @Param(\"gmtDeleted\") Date gmtDeleted);\n\n    /**\n     * 撤销伪删除用户，不标记 gmtDeleted 字段\n     *\n     * @param idList id list\n     * @return int\n     */\n    int revokeFakeDeleteAll(@Param(\"idList\") List<Long> idList);\n\n    /**\n     * 指定部门 id，分页获取所有用户\n     *\n     * @param departmentId 部门 id\n     * @return\n     */\n    Page<UserEntity> pageAllByDepartmentId(@Param(\"departmentId\") Long departmentId);\n\n    /**\n     * 指定部门 id，获取用户\n     *\n     * @param departmentId 部门 id\n     * @return UserEntity\n     */\n    UserEntity getOneByDepartmentId(@Param(\"departmentId\") Long departmentId);\n\n    /**\n     * 分页获取所有用户\n     *\n     * @param userEntity      UserEntity\n     * @param gmtCreatedStart gmtCreatedStart\n     * @param gmtCreatedEnd   gmtCreatedEnd\n     * @param gmtDeletedStart gmtDeletedStart\n     * @param gmtDeletedEnd   gmtDeletedEnd\n     * @return Page<UserEntity>\n     */\n    Page<UserEntity> pageAll(@Param(\"userEntity\") UserEntity userEntity, @Param(\"gmtCreatedStart\") String gmtCreatedStart, @Param(\"gmtCreatedEnd\") String gmtCreatedEnd, @Param(\"gmtDeletedStart\") String gmtDeletedStart, @Param(\"gmtDeletedEnd\") String gmtDeletedEnd);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/UserMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.UserMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.UserEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"username\" property=\"username\" jdbcType=\"VARCHAR\"/> <!-- 用户名 -->\n        <result column=\"password\" property=\"password\" jdbcType=\"VARCHAR\"/> <!-- 用户密码 -->\n        <result column=\"avatar\" property=\"avatar\" jdbcType=\"VARCHAR\"/> <!-- 头像 -->\n        <result column=\"email\" property=\"email\" jdbcType=\"VARCHAR\"/> <!-- 电子邮箱 -->\n        <result column=\"email_is_verified\" property=\"emailIsVerified\" jdbcType=\"INTEGER\"/> <!-- 电子邮箱是否已验证 -->\n        <result column=\"department_id\" property=\"departmentId\" jdbcType=\"BIGINT\"/> <!-- 部门 id -->\n        <result column=\"enabled\" property=\"enabled\" jdbcType=\"INTEGER\"/> <!-- 是否启用 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_deleted\" property=\"gmtDeleted\" jdbcType=\"TIMESTAMP\"/> <!-- 删除时间 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `user`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `username`, `password`, `avatar`, `email`, `email_is_verified`, `department_id`, `enabled`, `remark`, `gmt_deleted`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.UserEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`username`, `password`, `avatar`, `email`, `email_is_verified`, `department_id`, `enabled`, `remark`,\n        `gmt_deleted`,\n        `gmt_modified`,\n        `gmt_created`)\n        values (#{username}, #{password}, #{avatar}, #{email}, #{emailIsVerified}, #{departmentId}, #{enabled},\n        #{remark},\n        #{gmtDeleted}, #{gmtModified}, #{gmtCreated})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.UserEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `username` = #{username}, `password` = #{password}, `avatar` = #{avatar}, `email` = #{email},\n        `email_is_verified` =\n        #{emailIsVerified}, `department_id` = #{departmentId}, `enabled` = #{enabled}, `remark` = #{remark},\n        `gmt_modified` = #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"getOneByDepartmentId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `department_id` = #{departmentId} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <!--    <select id=\"pageAll\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">-->\n    <!--        select-->\n    <!--        <include refid=\"BaseColumnList\"/>-->\n    <!--        from-->\n    <!--        <include refid=\"TableName\"/>-->\n    <!--    </select>-->\n    <!--    <select id=\"countAll\" resultType=\"int\">-->\n    <!--        select count(1) from-->\n    <!--        <include refid=\"TableName\"/>-->\n    <!--    </select>-->\n\n    <select id=\"pageAll\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where 1 = 1\n        <if test=\"userEntity.username != null and userEntity.username != ''\">\n            and `username` like concat('%',#{userEntity.username},'%')\n        </if>\n        <if test=\"userEntity.email != null and userEntity.email != ''\">\n            and `email` like concat('%',#{userEntity.email},'%')\n        </if>\n        <if test=\"userEntity.emailIsVerified != null\">\n            and `email_is_verified` = #{userEntity.emailIsVerified}\n        </if>\n        <if test=\"userEntity.departmentId != null\">\n            and `department_id` = #{userEntity.departmentId}\n        </if>\n        <if test=\"userEntity.enabled != null\">\n            and `enabled` = #{userEntity.enabled}\n        </if>\n        <if test=\"gmtDeletedStart != null and gmtDeletedStart != '' and gmtDeletedEnd != null and gmtDeletedEnd != ''\">\n            <![CDATA[  and `gmt_deleted` >= #{gmtDeletedStart} and `gmt_deleted` <= #{gmtDeletedEnd} ]]>\n        </if>\n        <if test=\"gmtCreatedStart != null and gmtCreatedStart != '' and gmtCreatedEnd != null and gmtCreatedEnd != ''\">\n            <![CDATA[  and `gmt_created` >= #{gmtCreatedStart} and `gmt_created` <= #{gmtCreatedEnd} ]]>\n        </if>\n        <!--        <if test=\"gmtCreatedStart != null and gmtCreatedStart != ''\">-->\n        <!--            and `gmt_created` >= #{gmtCreatedEnd}-->\n        <!--        </if>-->\n        <!--        <if test=\" gmtCreatedEnd != null and gmtCreatedEnd != ''\">-->\n        <!--          and `gmt_created` <= #{gmtCreatedEnd}-->\n        <!--        </if>-->\n    </select>\n\n    <!--    <select id=\"pageAllByPage\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">-->\n    <!--        select-->\n    <!--        <include refid=\"BaseColumnList\"/>-->\n    <!--        from-->\n    <!--        <include refid=\"TableName\"/>-->\n    <!--    </select>-->\n\n    <!--        <select id=\"countAll\" resultType=\"int\">-->\n    <!--            select count(1) from-->\n    <!--            <include refid=\"TableName\"/>-->\n    <!--        </select>-->\n\n    <select id=\"pageAllByDepartmentId\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where department_id = #{departmentId}\n    </select>\n\n    <select id=\"getOneByUsername\" resultMap=\"BaseResultMap\" parameterType=\"string\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where username = #{username} limit 1\n    </select>\n\n    <select id=\"getOneByEmail\" resultMap=\"BaseResultMap\" parameterType=\"string\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where email = #{email} limit 1\n    </select>\n\n    <select id=\"getOneByCellphone\" resultMap=\"BaseResultMap\" parameterType=\"string\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where cellphone = #{cellphone} limit 1\n    </select>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        );\n        delete from `user_role` where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        );\n\n        delete from `user_password_reset` where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        );\n    </delete>\n\n    <update id=\"fakeDeleteAll\">\n        update\n        <include refid=\"TableName\"/>\n        set `gmt_deleted` = #{gmtDeleted}\n        where `id` in\n        (\n        <foreach collection=\"idList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </update>\n\n    <update id=\"revokeFakeDeleteAll\">\n        update\n        <include refid=\"TableName\"/>\n        set `gmt_deleted` = null\n        where `id` in\n        (\n        <foreach collection=\"idList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </update>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/UserRoleMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.UserRoleEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport com.github.pagehelper.Page;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"userRoleMapper\")\n@Mapper\npublic interface UserRoleMapper extends CrudMapper<UserRoleEntity, Long> {\n\n    /**\n     * 指定用户 id，获取用户角色\n     *\n     * @param userId 用户 id\n     * @return List<UserRoleEntity>\n     */\n    List<UserRoleEntity> listAllByUserId(@Param(\"userId\") Long userId);\n\n    /**\n     * 指定角色 id，获取用户角色\n     *\n     * @param roleId 角色 id\n     * @return UserRoleEntity\n     */\n    UserRoleEntity getOneByRoleId(@Param(\"roleId\") Long roleId);\n\n    /**\n     * 指定用户 id、角色 id list，删除所有\n     *\n     * @param userId     用户 id\n     * @param roleIdList 角色 id list\n     * @return int\n     */\n    int deleteAllByUserIdAndRoleIdList(@Param(\"userId\") Long userId, @Param(\"roleIdList\") List<Long> roleIdList);\n\n    /**\n     * 指定用户 id、角色 id，获取用户角色\n     *\n     * @param userId 用户 id\n     * @param roleId 角色 id\n     * @return UserRoleEntity\n     */\n    UserRoleEntity getOneByUserIdAndRoleId(@Param(\"userId\") Long userId, @Param(\"roleId\") Long roleId);\n\n    /**\n     * 指定角色 id，删除所有\n     *\n     * @param roleId 角色 id\n     * @return int\n     */\n    int deleteAllByRoleId(@Param(\"roleId\") Long roleId);\n\n    /**\n     * 分页获取所有用户角色\n     *\n     * @return Page<UserRoleEntity>\n     */\n    Page<UserRoleEntity> pageAll();\n\n    /**\n     * 指定角色 id、视图菜单分类 id list，批量新增\n     *\n     * @param userId     角色 id\n     * @param roleIdList 视图菜单 id list\n     * @return int\n     */\n    int insertAllByUserIdAndRoleIdList(@Param(\"userId\") Long userId, @Param(\"roleIdList\") List<Long> roleIdList);\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/UserRoleMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.UserRoleMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.UserRoleEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"user_id\" property=\"userId\" jdbcType=\"BIGINT\"/> <!-- 用户 id -->\n        <result column=\"role_id\" property=\"roleId\" jdbcType=\"BIGINT\"/> <!-- 角色 id -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `user_role`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `user_id`, `role_id`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.UserRoleEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `user_id`, `role_id`)\n        values (#{id}, #{userId}, #{roleId})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.UserRoleEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `user_id` = #{userId}, `role_id` = #{roleId}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"listAllByUserId\" resultMap=\"BaseResultMap\" parameterType=\"long\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `user_id` = #{userId}\n    </select>\n\n    <select id=\"pageAll\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"getOneByRoleId\" resultMap=\"BaseResultMap\" parameterType=\"long\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId} limit 1\n    </select>\n    <select id=\"getOneByUserIdAndRoleId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `user_id` = #{userId} and `role_id` = #{roleId} limit 1\n    </select>\n\n    <delete id=\"deleteAllByUserIdAndRoleIdList\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `user_id` = #{userId} and `role_id` in (\n        <foreach collection=\"roleIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <delete id=\"deleteAllByRoleId\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `role_id` = #{roleId}\n    </delete>\n\n    <insert id=\"insertAllByUserIdAndRoleIdList\" useGeneratedKeys=\"true\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`user_id`, `role_id`)\n        values\n        <foreach collection=\"roleIdList\" item=\"item\" index=\"index\" separator=\",\">\n            <if test=\"item != ''\">\n                (#{userId}, #{item})\n            </if>\n        </foreach>\n    </insert>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/UserVerifyCodeMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.UserVerifyCodeEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"userVerifyCodeMapper\")\n@Mapper\npublic interface UserVerifyCodeMapper extends CrudMapper<UserVerifyCodeEntity, Long> {\n    UserVerifyCodeEntity getOneByUserIdAndVerifyFrom(@Param(\"userId\") Long userId, @Param(\"verifyFrom\") String verifyFrom);\n\n    int updateOneByUserIdAndVerifyFrom(UserVerifyCodeEntity userVerifyCodeEntity);\n\n    int deleteAllByEmail(String email);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/UserVerifyCodeMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.UserVerifyCodeMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.UserVerifyCodeEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"user_id\" property=\"userId\" jdbcType=\"BIGINT\"/> <!-- 用户 id -->\n        <result column=\"verify_from\" property=\"verifyFrom\" jdbcType=\"VARCHAR\"/> <!-- 用户绑定的电子邮箱或手机号码 -->\n        <result column=\"verify_code\" property=\"verifyCode\" jdbcType=\"VARCHAR\"/> <!-- 电子邮箱或手机号码验证码 -->\n        <result column=\"gmt_expires\" property=\"gmtExpires\" jdbcType=\"TIMESTAMP\"/> <!-- 过期时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `user_verify_code`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `user_id`, `verify_from`, `verify_code`, `gmt_expires`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.UserVerifyCodeEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `user_id`, `verify_from`, `verify_code`, `gmt_expires`, `gmt_created`)\n        values (#{id}, #{userId}, #{verifyFrom}, #{verifyCode}, #{gmtExpires}, #{gmtCreated})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.UserVerifyCodeEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `user_id` = #{userId}, `verify_from` = #{verifyFrom}, `verify_code` = #{verifyCode}, `gmt_expires` =\n        #{gmtExpires}, `gmt_created` = #{gmtCreated}\n        where `id`= #{id}\n    </update>\n\n    <update id=\"updateOneByUserIdAndVerifyFrom\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.UserVerifyCodeEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `verify_code` = #{verifyCode}, `gmt_expires` =\n        #{gmtExpires}, `gmt_created` = #{gmtCreated}\n        where `user_id`= #{userId} and `verify_from` = #{verifyFrom}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <delete id=\"deleteAllByEmail\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `email` = #{email}\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"getOneByUserIdAndVerifyFrom\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `user_id` = #{userId} and `verify_from` = #{verifyFrom} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewMenuCategoryMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.ViewMenuCategoryEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"viewMenuCategoryMapper\")\n@Mapper\npublic interface ViewMenuCategoryMapper extends CrudMapper<ViewMenuCategoryEntity, Long> {\n\n    /**\n     * 指定角色 id，获取所有视图菜单分类\n     *\n     * @param roleId 角色 id\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> listAllByParentIdIsNullAndRoleId(@Param(\"roleId\") Long roleId);\n\n    /**\n     * 获取所有视图菜单分类\n     *\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> listAllByParentIdIsNull();\n\n    /**\n     * 指定角色 id、视图菜单分类父级 id，获取所有视图菜单分类\n     *\n     * @param roleId   角色 id\n     * @param parentId 视图菜单分类父级 id\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> listAllByParentIdAndRoleId(@Param(\"parentId\") Long parentId, @Param(\"roleId\") Long roleId);\n\n    /**\n     * 指定视图菜单分类父级 id，获取所有视图菜单分类\n     *\n     * @param parentId 视图菜单分类父级 id\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> listAllByParentId(@Param(\"parentId\") Long parentId);\n\n    /**\n     * 指定角色 id、视图菜单分类父级 id，获取视图菜单分类\n     *\n     * @param roleId   角色 id\n     * @param parentId 视图菜单分类父级 id\n     * @return ViewMenuCategoryEntity\n     */\n    ViewMenuCategoryEntity getOneByParentId(@Param(\"parentId\") Long parentId);\n\n    /**\n     * 指定视图菜单分类名，搜索获取所有视图菜单分类\n     *\n     * @param name 视图菜单分类名\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> searchAllByName(@Param(\"name\") String name);\n\n    /**\n     * 指定角色 id，获取所有视图菜单分类\n     *\n     * @param roleIdList 角色 id list\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> listAllByParentIdIsNullAndRoleIdList(@Param(\"roleIdList\") List<Long> roleIdList);\n\n    /**\n     * 指定角色 id、视图菜单分类父级 id，获取所有视图菜单分类\n     *\n     * @param roleIdList 角色 id list\n     * @param parentId   视图菜单分类父级 id\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> listAllByParentIdAndRoleIdList(@Param(\"parentId\") Long parentId, @Param(\"roleIdList\") List<Long> roleIdList);\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewMenuCategoryMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.ViewMenuCategoryMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.ViewMenuCategoryEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"name\" property=\"name\" jdbcType=\"VARCHAR\"/> <!-- 分类名称 -->\n        <result column=\"icon\" property=\"icon\" jdbcType=\"VARCHAR\"/> <!-- 图标（icon） -->\n        <result column=\"parent_id\" property=\"parentId\" jdbcType=\"BIGINT\"/> <!-- 父级分类 id -->\n        <result column=\"sort\" property=\"sort\" jdbcType=\"BIGINT\"/> <!-- 排序 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `view_menu_category`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `name`, `icon`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.ViewMenuCategoryEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `name`, `icon`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`)\n        values (#{id}, #{name}, #{icon}, #{parentId}, #{sort}, #{remark}, #{gmtModified}, #{gmtCreated})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.ViewMenuCategoryEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `name` = #{name}, `icon` = #{icon}, `sort` = #{sort}, `remark` = #{remark}, `gmt_modified` = #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <!--    <select id=\"listAllByParentIdIsNullAndRoleIdList\" resultMap=\"BaseResultMap\">-->\n    <!--        select-->\n    <!--        <include refid=\"BaseColumnList\"/>-->\n    <!--        from-->\n    <!--        <include refid=\"TableName\"/>-->\n    <!--        where `parent_id` is null and `role_id` in (-->\n    <!--        <foreach collection=\"roleId\" item=\"item\" index=\"index\" separator=\",\">-->\n    <!--            #{item}-->\n    <!--        </foreach>-->\n    <!--        )-->\n    <!--    </select>-->\n\n    <select id=\"listAllByParentIdIsNullAndRoleIdList\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` is null and `id` in (\n        select `view_menu_category_id` from `role_view_menu_category` where `role_id` in (\n        <foreach collection=\"roleIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n        )\n\n    </select>\n\n    <select id=\"listAllByParentIdAndRoleId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` = #{parentId}\n    </select>\n\n    <select id=\"listAllByParentId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` = #{parentId}\n    </select>\n\n    <select id=\"listAllByParentIdIsNull\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` is null\n    </select>\n\n    <select id=\"getOneByParentId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` = #{parentId} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"searchAllByName\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `name` like '%${name}%'\n    </select>\n\n    <select id=\"listAllByParentIdIsNullAndRoleId\" resultMap=\"BaseResultMap\" parameterType=\"long\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` is null\n    </select>\n\n    <select id=\"listAllByParentIdAndRoleIdList\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` = #{parentId} and `id` in (\n        select `view_menu_category_id` from `role_view_menu_category` where `role_id` in (\n        <foreach collection=\"roleIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n        )\n    </select>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewMenuMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.ViewMenuEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport com.github.pagehelper.Page;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"viewMenuMapper\")\n@Mapper\npublic interface ViewMenuMapper extends CrudMapper<ViewMenuEntity, Long> {\n\n    /**\n     * 指定视图菜单分类 id、角色 id，获取视图菜单\n     *\n     * @param viewMenuCategoryId 视图菜单分类 id\n     * @param roleId             角色 id\n     * @return List<ViewMenuEntity>\n     */\n    List<ViewMenuEntity> listAllByViewMenuCategoryIdAndRoleId(@Param(\"viewMenuCategoryId\") Long viewMenuCategoryId, @Param(\"roleId\") Long roleId);\n\n    /**\n     * 指定视图菜单分类 id、角色 id，获取视图菜单\n     *\n     * @param viewMenuCategoryIdList 视图菜单分类 id list\n     * @return List<ViewMenuEntity>\n     */\n    List<ViewMenuEntity> listAllByViewMenuCategoryIdList(@Param(\"viewMenuCategoryIdList\") List<Long> viewMenuCategoryIdList);\n\n    /**\n     * 指定视图菜单分类 id list，分页获取所有视图菜单\n     *\n     * @param viewMenuCategoryIdList 视图菜单分类 id list\n     * @return Page<ViewMenuEntity>\n     */\n    Page<ViewMenuEntity> pageAllByViewMenuCategoryIdList(@Param(\"viewMenuCategoryIdList\") List<Long> viewMenuCategoryIdList);\n\n    /**\n     * 指定视图菜单分类 id，获取视图菜单\n     *\n     * @param viewMenuCategoryId 视图菜单分类 id\n     * @return ViewMenuEntity\n     */\n    ViewMenuEntity getOneByViewMenuCategoryId(@Param(\"viewMenuCategoryId\") Long viewMenuCategoryId);\n\n    /**\n     * 指定视图菜单分类 id、角色 id，分页获取所有视图菜单\n     *\n     * @param viewMenuCategoryId 视图菜单分类 id\n     * @param roleId             角色 id\n     * @return List<ViewMenuEntity>\n     */\n    Page<ViewMenuEntity> pageAllByViewMenuCategoryIdAndRoleId(@Param(\"viewMenuCategoryId\") Long viewMenuCategoryId, @Param(\"roleId\") Long roleId);\n\n    /**\n     * 指定视图菜单分类 id、角色 id，分页获取所有视图菜单\n     *\n     * @param viewMenuCategoryId 视图菜单分类 id\n     * @return List<ViewMenuEntity>\n     */\n    Page<ViewMenuEntity> pageAllByViewMenuCategoryId(@Param(\"viewMenuCategoryId\") Long viewMenuCategoryId);\n\n    /**\n     * 指定视图菜单名称，模糊搜索获取所有视图菜单\n     *\n     * @param name 视图菜单名称\n     * @return List<ViewMenuEntity>\n     */\n    List<ViewMenuEntity> searchAllByName(@Param(\"name\") String name);\n\n    /**\n     * 指定视图菜单分类 id、角色 id list，获取视图菜单\n     *\n     * @param viewMenuCategoryId 视图菜单分类 id\n     * @param roleIdList         角色 id list\n     * @return List<ViewMenuEntity>\n     */\n    List<ViewMenuEntity> listAllByViewMenuCategoryIdAndRoleIdList(@Param(\"viewMenuCategoryId\") Long viewMenuCategoryId, @Param(\"roleIdList\") List<Long> roleIdList);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewMenuMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.ViewMenuMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.ViewMenuEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"name\" property=\"name\" jdbcType=\"VARCHAR\"/> <!-- 菜单名称 -->\n        <result column=\"icon\" property=\"icon\" jdbcType=\"VARCHAR\"/> <!-- 图标（icon） -->\n        <result column=\"url\" property=\"url\" jdbcType=\"LONGVARCHAR\"/> <!--请求地址（url）-->\n        <result column=\"view_menu_category_id\" property=\"viewMenuCategoryId\" jdbcType=\"BIGINT\"/> <!-- 视图菜单分类 id -->\n        <result column=\"sort\" property=\"sort\" jdbcType=\"BIGINT\"/> <!-- 排序 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `view_menu`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `name`, `icon`, `url`, `view_menu_category_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.ViewMenuEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `name`, `icon`, `url`, `view_menu_category_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`)\n        values (#{id}, #{name}, #{icon}, #{url}, #{viewMenuCategoryId}, #{sort}, #{remark},\n        #{gmtModified}, #{gmtCreated})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.ViewMenuEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `name` = #{name}, `icon` = #{icon}, `url` = #{url}, `view_menu_category_id` = #{viewMenuCategoryId}, `sort`\n        = #{sort}, `remark` =\n        #{remark}, `gmt_modified` = #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"listAllByViewMenuCategoryIdAndRoleId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_menu_category_id` = #{viewMenuCategoryId}\n    </select>\n\n    <select id=\"pageAllByViewMenuCategoryIdAndRoleId\" resultMap=\"BaseResultMap\"\n            parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_menu_category_id` = #{viewMenuCategoryId}\n    </select>\n\n    <select id=\"pageAllByViewMenuCategoryId\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_menu_category_id` = #{viewMenuCategoryId}\n    </select>\n\n    <select id=\"getOneByViewMenuCategoryId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_menu_category_id` = #{viewMenuCategoryId} limit 1\n    </select>\n\n    <select id=\"searchAllByName\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `name` like '%${name}%'\n    </select>\n\n    <select id=\"listAllByViewMenuCategoryIdAndRoleIdList\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_menu_category_id` = #{viewMenuCategoryId} and `id` in (\n        select `view_menu_id` from `role_view_menu` where `role_id` in (\n        <foreach collection=\"roleIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n        )\n    </select>\n    <select id=\"listAllByViewMenuCategoryIdList\" resultType=\"com.godcheese.nimrod.user.entity.ViewMenuEntity\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_menu_category_id` = #{viewMenuCategoryId}\n    </select>\n\n    <select id=\"pageAllByViewMenuCategoryIdList\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_menu_category_id` in (\n        <foreach collection=\"viewMenuCategoryIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </select>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewPageApiMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.ViewPageApiEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"viewPageApiMapper\")\n@Mapper\npublic interface ViewPageApiMapper extends CrudMapper<ViewPageApiEntity, Long> {\n\n    /**\n     * 指定视图页面 id、 API id，获取视图页面 API\n     *\n     * @param viewPageId 视图页面 id\n     * @param apiId      视图页面 API id\n     * @return ViewPageApiEntity\n     */\n    ViewPageApiEntity getOneByViewPageIdAndApiId(@Param(\"viewPageId\") Long viewPageId, @Param(\"apiId\") Long apiId);\n\n    /**\n     * 指定视图页面 id、 API id list，插入所有\n     *\n     * @param viewPageId 视图页面 id\n     * @param apiIdList  视图页面 API id list\n     * @return int\n     */\n    int insertAllByViewPageIdAndApiIdList(@Param(\"viewPageId\") Long viewPageId, @Param(\"apiIdList\") List<Long> apiIdList);\n\n    /**\n     * 指定视图页面 id、 API id list，删除所有\n     *\n     * @param viewPageId 视图页面 id\n     * @param apiIdList  视图页面 API id list\n     * @return int\n     */\n    int deleteAllByViewPageIdAndApiIdList(@Param(\"viewPageId\") Long viewPageId, @Param(\"apiIdList\") List<Long> apiIdList);\n\n    /**\n     * 指定视图页面 id，获取所有视图页面 API\n     *\n     * @param viewPageId 视图页面 id\n     * @return List<ViewPageApiEntity>\n     */\n    List<ViewPageApiEntity> listAllByViewPageId(@Param(\"viewPageId\") Long viewPageId);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewPageApiMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.ViewPageApiMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.ViewPageApiEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"page_id\" property=\"viewPageId\" jdbcType=\"BIGINT\"/> <!-- 视图页面 id -->\n        <result column=\"api_id\" property=\"apiId\" jdbcType=\"BIGINT\"/> <!-- API id -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `view_page_api`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `view_page_id`, `api_id`\n    </sql>\n\n    <insert id=\"insertAllByViewPageIdAndApiIdList\" useGeneratedKeys=\"true\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`view_page_id`, `api_id`)\n        values\n        <foreach collection=\"apiIdList\" item=\"item\" index=\"index\" separator=\",\">\n            <if test=\"item != ''\">\n                (#{viewPageId}, #{item})\n            </if>\n        </foreach>\n    </insert>\n\n    <delete id=\"deleteAllByViewPageIdAndApiIdList\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `view_page_id` = #{viewPageId} AND `api_id` in (\n        <foreach collection=\"apiIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n\n    <select id=\"listAllByViewPageId\" resultMap=\"BaseResultMap\" parameterType=\"long\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_page_id` = #{viewPageId}\n    </select>\n\n    <select id=\"getOneByViewPageIdAndApiId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_page_id` = #{viewPageId} AND `api_id` = #{apiId} limit 1\n    </select>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewPageCategoryMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.ViewPageCategoryEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"viewPageCategoryMapper\")\n@Mapper\npublic interface ViewPageCategoryMapper extends CrudMapper<ViewPageCategoryEntity, Long> {\n\n    /**\n     * 获取所有父级 id 为 null 的视图页面分类\n     *\n     * @return List<ViewPageCategoryEntity>\n     */\n    List<ViewPageCategoryEntity> listAllByParentIdIsNull();\n\n    /**\n     * 指定父级视图页面分类 id，获取所有视图页面分类\n     *\n     * @param parentId 父级视图页面分类 id\n     * @return List<ViewPageCategoryEntity>\n     */\n    List<ViewPageCategoryEntity> listAllByParentId(@Param(\"parentId\") Long parentId);\n\n    /**\n     * 指定父级视图页面分类 id，获取视图页面分类\n     *\n     * @param parentId 父级视图页面分类 id\n     * @return ViewPageCategoryEntity\n     */\n    ViewPageCategoryEntity getOneByParentId(@Param(\"parentId\") Long parentId);\n\n    /**\n     * 指定视图页面 id，获取视图页面分类\n     *\n     * @param viewPageId 视图页面 id\n     * @return ViewPageCategoryEntity\n     */\n    ViewPageCategoryEntity getOneByViewPageId(@Param(\"viewPageId\") Long viewPageId);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewPageCategoryMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.ViewPageCategoryMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.ViewPageCategoryEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"name\" property=\"name\" jdbcType=\"VARCHAR\"/> <!-- 分类名称 -->\n        <result column=\"parent_id\" property=\"parentId\" jdbcType=\"BIGINT\"/> <!-- 父级分类 id -->\n        <result column=\"sort\" property=\"sort\" jdbcType=\"BIGINT\"/> <!-- 排序 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `view_page_category`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `name`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.ViewPageCategoryEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `name`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`)\n        values (#{id}, #{name}, #{parentId}, #{sort}, #{remark}, #{gmtModified}, #{gmtCreated})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.ViewPageCategoryEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `name` = #{name}, `parent_id` = #{parentId}, `sort` = #{sort}, `remark` = #{remark}, `gmt_modified` =\n        #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"listAll\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"listAllByParentIdIsNull\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` is null\n    </select>\n\n    <select id=\"listAllByParentId\" resultMap=\"BaseResultMap\" parameterType=\"long\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` = #{parentId}\n    </select>\n\n    <select id=\"getOneByParentId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `parent_id` = #{parentId} limit 1\n    </select>\n\n    <select id=\"getOneByViewPageId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = (select `view_page_category_id` from `view_page` where `id` = #{viewPageId} limit 1) limit 1\n    </select>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewPageComponentApiMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.ViewPageComponentApiEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"viewPageComponentApiMapper\")\n@Mapper\npublic interface ViewPageComponentApiMapper extends CrudMapper<ViewPageComponentApiEntity, Long> {\n\n    /**\n     * 指定视图页面组件 id、 API id，获取视图页面组件 API\n     *\n     * @param viewPageComponentId 视图页面组件 id\n     * @param apiId               视图页面组件 API id\n     * @return ViewPageComponentApiEntity\n     */\n    ViewPageComponentApiEntity getOneByViewPageComponentIdAndApiId(@Param(\"viewPageComponentId\") Long viewPageComponentId, @Param(\"apiId\") Long apiId);\n\n    /**\n     * 指定视图页面组件 id、 API id list，统计所有视图页面组件 API 个数\n     *\n     * @param viewPageComponentId 视图页面组件 id\n     * @param apiIdList           视图页面组件 API id\n     * @return int\n     */\n    int insertAllByViewPageComponentIdAndApiIdList(@Param(\"viewPageComponentId\") Long viewPageComponentId, @Param(\"apiIdList\") List<Long> apiIdList);\n\n    /**\n     * 指定视图页面组件 id、 API id list，删除所有\n     *\n     * @param viewPageComponentId 视图页面组件 id\n     * @param apiIdList           视图页面组件 API\n     * @return int\n     */\n    int deleteAllByViewPageComponentIdAndApiIdList(@Param(\"viewPageComponentId\") Long viewPageComponentId, @Param(\"apiIdList\") List<Long> apiIdList);\n\n    /**\n     * 指定视图页面组件 id，获取所有视图页面组件 API\n     *\n     * @param viewPageComponentId 视图页面组件 id\n     * @return List<ViewPageComponentApiEntity>\n     */\n    List<ViewPageComponentApiEntity> listAllByViewPageComponentId(@Param(\"viewPageComponentId\") Long viewPageComponentId);\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewPageComponentApiMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.ViewPageComponentApiMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.ViewPageComponentApiEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"page_component_id\" property=\"viewPageComponentId\" jdbcType=\"BIGINT\"/> <!-- 视图页面组件 id -->\n        <result column=\"api_id\" property=\"apiId\" jdbcType=\"BIGINT\"/> <!-- API id -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `view_page_component_api`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `view_page_component_id`, `api_id`\n    </sql>\n\n    <insert id=\"insertAllByViewPageComponentIdAndApiIdList\" useGeneratedKeys=\"true\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`view_page_component_id`, `api_id`)\n        values\n        <foreach collection=\"apiIdList\" item=\"item\" index=\"index\" separator=\",\">\n            <if test=\"item != ''\">\n                (#{viewPageComponentId}, #{item})\n            </if>\n        </foreach>\n    </insert>\n\n    <delete id=\"deleteAllByViewPageComponentIdAndApiIdList\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `view_page_component_id` = #{viewPageComponentId} AND `api_id` in (\n        <foreach collection=\"apiIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n\n    <select id=\"listAllByViewPageComponentId\" resultMap=\"BaseResultMap\" parameterType=\"long\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_page_component_id` = #{viewPageComponentId}\n    </select>\n\n    <select id=\"pageAll\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n    </select>\n\n    <select id=\"getOneByViewPageComponentIdAndApiId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_page_component_id` = #{viewPageComponentId} AND `api_id` = #{apiId} limit 1\n    </select>\n\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewPageComponentMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.ViewPageComponentEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport com.github.pagehelper.Page;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"viewPageComponentMapper\")\n@Mapper\npublic interface ViewPageComponentMapper extends CrudMapper<ViewPageComponentEntity, Long> {\n\n    /**\n     * 指定视图页面 id，获取所有视图页面组件\n     *\n     * @param viewPageId 视图页面 id\n     * @return List<ViewPageComponentEntity>\n     */\n    Page<ViewPageComponentEntity> pageAllByViewPageId(@Param(\"viewPageId\") Long viewPageId);\n\n    /**\n     * 指定 authority，获取视图页面组件\n     *\n     * @param authority authority\n     * @return ViewPageComponentEntity\n     */\n    ViewPageComponentEntity getOneByAuthority(@Param(\"authority\") String authority);\n\n    /**\n     * 指定视图页面 id list，分页获取视图页面\n     *\n     * @param viewPageIdList 视图页面 id list\n     * @return Page<ViewPageComponentEntity>\n     */\n    Page<ViewPageComponentEntity> pageAllByViewPageIdList(@Param(\"viewPageIdList\") List<Long> viewPageIdList);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewPageComponentMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.ViewPageComponentMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.ViewPageComponentEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"view_page_component_type\" property=\"viewPageComponentType\" jdbcType=\"BIGINT\"/> <!-- 组件分类 id -->\n        <result column=\"name\" property=\"name\" jdbcType=\"VARCHAR\"/> <!-- 组件名称 -->\n        <result column=\"authority\" property=\"authority\" jdbcType=\"VARCHAR\"/> <!-- 权限（authority） -->\n        <result column=\"page_id\" property=\"viewPageId\" jdbcType=\"BIGINT\"/> <!-- 视图页面 id -->\n        <result column=\"sort\" property=\"sort\" jdbcType=\"BIGINT\"/> <!-- 排序 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `view_page_component`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `view_page_component_type`, `name`, `authority`, `view_page_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <select id=\"pageAllByViewPageId\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_page_id` = #{viewPageId}\n    </select>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\" parameterType=\"long\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </select>\n\n    <select id=\"getOneByAuthority\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `authority` = #{authority} limit 1\n    </select>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`view_page_component_type`, `name`, `authority`, `view_page_id`, `sort`, `remark`,`gmt_modified`,\n        `gmt_created`)\n        values (#{viewPageComponentType}, #{name}, #{authority}, #{viewPageId}, #{sort}, #{remark}, #{gmtModified},\n        #{gmtCreated})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.ViewPageComponentEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `view_page_component_type` = #{viewPageComponentType}, `name` = #{name}, `authority` = #{authority}, `sort`\n        =\n        #{sort}, `remark` = #{remark}, `gmt_modified` = #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <select id=\"pageAllByViewPageIdList\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_page_id` in (\n        <foreach collection=\"viewPageIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </select>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewPageMapper.java",
    "content": "package com.godcheese.nimrod.user.mapper;\n\nimport com.godcheese.nimrod.user.entity.ViewPageEntity;\nimport com.godcheese.tile.mybatis.CrudMapper;\nimport com.github.pagehelper.Page;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Component(\"viewPageMapper\")\n@Mapper\npublic interface ViewPageMapper extends CrudMapper<ViewPageEntity, Long> {\n\n    /**\n     * 指定视图页面分类 id，获取所有视图页面\n     *\n     * @param viewPageCategoryId 视图页面分类 id\n     * @return List<ViewPageEntity>\n     */\n    Page<ViewPageEntity> pageAllByViewPageCategoryId(@Param(\"viewPageCategoryId\") Long viewPageCategoryId);\n\n    /**\n     * 指定视图页面分类 id，统计所有视图页面个数\n     *\n     * @param viewPageCategoryId 视图页面分类 id\n     * @return int\n     */\n    int countAllByViewPageCategoryId(@Param(\"viewPageCategoryId\") Long viewPageCategoryId);\n\n    /**\n     * 指定 authority，获取视图页面\n     *\n     * @param authority authority\n     * @return ViewPageEntity\n     */\n    ViewPageEntity getOneByAuthority(@Param(\"authority\") String authority);\n\n    /**\n     * 指定视图页面分类 id，获取所有视图页面\n     *\n     * @param viewPageCategoryId 视图页面分类 id\n     * @return List<ViewPageEntity>\n     */\n    List<ViewPageEntity> listAllByViewPageCategoryId(@Param(\"viewPageCategoryId\") Long viewPageCategoryId);\n\n    /**\n     * 指定视图页面分类 id，获取视图页面\n     *\n     * @param viewPageCategoryId 视图页面分类 id\n     * @return ViewPageEntity\n     */\n    ViewPageEntity getOneByViewPageCategoryId(@Param(\"viewPageCategoryId\") Long viewPageCategoryId);\n\n    /**\n     * 指定视图页面分类 id list，分页获取视图页面\n     *\n     * @param viewPageCategoryIdList 视图页面分类 id list\n     * @return Page<ViewPageEntity>\n     */\n    Page<ViewPageEntity> pageAllByViewPageCategoryIdList(@Param(\"viewPageCategoryIdList\") List<Long> viewPageCategoryIdList);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/mapper/ViewPageMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.godcheese.nimrod.user.mapper.ViewPageMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.godcheese.nimrod.user.entity.ViewPageEntity\">\n        <id column=\"id\" property=\"id\" jdbcType=\"BIGINT\"/> <!-- id -->\n        <result column=\"name\" property=\"name\" jdbcType=\"VARCHAR\"/> <!-- 页面名称 -->\n        <result column=\"url\" property=\"url\" jdbcType=\"LONGVARCHAR\"/> <!--请求地址（url）-->\n        <result column=\"authority\" property=\"authority\" jdbcType=\"VARCHAR\"/> <!-- 权限（authority） -->\n        <result column=\"view_page_category_id\" property=\"viewPageCategoryId\" jdbcType=\"BIGINT\"/> <!-- 页面分类 id -->\n        <result column=\"sort\" property=\"sort\" jdbcType=\"BIGINT\"/> <!-- 排序 -->\n        <result column=\"remark\" property=\"remark\" jdbcType=\"VARCHAR\"/> <!-- 备注 -->\n        <result column=\"gmt_modified\" property=\"gmtModified\" jdbcType=\"TIMESTAMP\"/> <!-- 更新时间 -->\n        <result column=\"gmt_created\" property=\"gmtCreated\" jdbcType=\"TIMESTAMP\"/> <!-- 创建时间 -->\n    </resultMap>\n\n    <sql id=\"TableName\">\n        `view_page`\n    </sql>\n\n    <sql id=\"BaseColumnList\">\n        `id`, `name`, `url`, `view_page_category_id`, `sort`, `remark`, `authority`, `gmt_modified`, `gmt_created`\n    </sql>\n\n    <insert id=\"insertOne\" useGeneratedKeys=\"true\" keyProperty=\"id\"\n            parameterType=\"com.godcheese.nimrod.user.entity.ViewPageEntity\">\n        insert into\n        <include refid=\"TableName\"/>\n        (`id`, `name`, `url`, `authority`, `view_page_category_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`)\n        values (#{id}, #{name}, #{url}, #{authority}, #{viewPageCategoryId}, #{sort}, #{remark},\n        #{gmtModified}, #{gmtCreated})\n    </insert>\n\n    <update id=\"updateOne\" keyProperty=\"id\" parameterType=\"com.godcheese.nimrod.user.entity.ViewPageEntity\">\n        update\n        <include refid=\"TableName\"/>\n        set `name` = #{name}, `url` = #{url}, `authority` = #{authority}, `view_page_category_id` =\n        #{viewPageCategoryId}, `sort` = #{sort}, `remark` = #{remark},\n        `gmt_modified` = #{gmtModified}\n        where `id`= #{id}\n    </update>\n\n    <delete id=\"deleteAll\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` in\n        (\n        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </delete>\n\n    <delete id=\"deleteOne\" parameterType=\"long\">\n        delete from\n        <include refid=\"TableName\"/>\n        where `id` = #{id}\n    </delete>\n\n    <select id=\"getOne\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `id` = #{id} limit 1\n    </select>\n\n    <select id=\"pageAllByViewPageCategoryId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_page_category_id` = #{viewPageCategoryId}\n    </select>\n\n    <select id=\"countAllByViewPageCategoryId\" parameterType=\"long\" resultType=\"int\">\n        select COUNT(1) from\n        <include refid=\"TableName\"/>\n        where `view_page_category_id` = #{viewPageCategoryId}\n    </select>\n\n    <select id=\"getOneByAuthority\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `authority` = #{authority} limit 1\n    </select>\n\n    <select id=\"listAllByViewPageCategoryId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_page_category_id` = #{viewPageCategoryId}\n    </select>\n\n    <select id=\"getOneByViewPageCategoryId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_page_category_id` = #{viewPageCategoryId} limit 1\n    </select>\n\n    <select id=\"pageAllByViewPageCategoryIdList\" resultMap=\"BaseResultMap\" parameterType=\"com.github.pagehelper.Page\">\n        select\n        <include refid=\"BaseColumnList\"/>\n        from\n        <include refid=\"TableName\"/>\n        where `view_page_category_id` in (\n        <foreach collection=\"viewPageCategoryIdList\" item=\"item\" index=\"index\" separator=\",\">\n            #{item}\n        </foreach>\n        )\n    </select>\n\n</mapper>\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/ApiCategoryService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.user.entity.ApiCategoryEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface ApiCategoryService {\n    /**\n     * 新增 API 分类\n     *\n     * @param apiCategoryEntity ApiCategoryEntity\n     * @return ApiCategoryEntity\n     */\n    ApiCategoryEntity addOne(ApiCategoryEntity apiCategoryEntity);\n\n    /**\n     * 保存 API 分类\n     *\n     * @param apiCategoryEntity ApiCategoryEntity\n     * @return ApiCategoryEntity\n     */\n    ApiCategoryEntity saveOne(ApiCategoryEntity apiCategoryEntity) throws BaseResponseException;\n\n    /**\n     * 指定 API 分类 id list，批量删除 API 分类\n     *\n     * @param idList API 分类 id list\n     * @return 已删除 API 分类个数\n     * @throws BaseResponseException BaseResponseException\n     */\n    int deleteAll(List<Long> idList) throws BaseResponseException;\n\n    /**\n     * 指定 API 分类 id，获取所有 API 分类\n     *\n     * @param id API 分类 id\n     * @return ApiCategoryEntity\n     */\n    ApiCategoryEntity getOne(Long id);\n\n    /**\n     * 获取所有父级 API 分类\n     *\n     * @return Pagination<ApiCategoryEntity>\n     */\n    List<ApiCategoryEntity> listAllParent();\n\n    /**\n     * 指定父级 API 分类 id，获取所有 API 分类\n     *\n     * @param parentId API 分类父级 id\n     * @return List<ApiCategoryEntity>\n     */\n    List<ApiCategoryEntity> listAllByParentId(Long parentId);\n\n    /**\n     * 获取所有 API 分类，以 ComboTree 形式展示\n     *\n     * @return List<ComboTree>\n     */\n    List<ComboTree> listAllApiCategoryComboTree();\n\n    /**\n     * 指定父级 API 分类 id，ApiCategoryComboTree list，获取所有子级 API 分类\n     *\n     * @param parentId                 父级 API 分类 id\n     * @param apiCategoryComboTreeList ApiCategoryComboTree list\n     * @return List<ComboTree>\n     */\n    List<ComboTree> getApiCategoryChildrenComboTree(long parentId, List<ComboTree> apiCategoryComboTreeList);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/ApiService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.user.entity.ApiEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface ApiService {\n\n    /**\n     * 新增 API\n     *\n     * @param apiEntity ApiEntity\n     * @return ApiEntity\n     * @throws BaseResponseException BaseResponseException\n     */\n    ApiEntity addOne(ApiEntity apiEntity) throws BaseResponseException;\n\n    /**\n     * 保存 API\n     *\n     * @param apiEntity ApiEntity\n     * @return ApiEntity\n     */\n    ApiEntity saveOne(ApiEntity apiEntity);\n\n    /**\n     * 指定 API id list，批量删除 API\n     *\n     * @param idList API id list\n     * @return int 已删除 API 个数\n     */\n    int deleteAll(List<Long> idList);\n\n    /**\n     * 指定 API id，获取 API\n     *\n     * @param id API id\n     * @return ApiEntity\n     */\n    ApiEntity getOne(Long id);\n\n    /**\n     * 指定 API 分类 id，分页获取所有 API\n     *\n     * @param page                页\n     * @param rows                每页显示数量\n     * @param apiCategoryId       API 分类 id\n     * @param viewPageId          viewPageId\n     * @param viewPageComponentId viewPageComponentId\n     * @return Pagination<ApiEntity>\n     */\n    Pagination<ApiEntity> pageAllByApiCategoryId(Integer page, Integer rows, Long apiCategoryId, Long viewPageId, Long viewPageComponentId, Long roleId);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/DepartmentService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.easyui.TreeGrid;\nimport com.godcheese.nimrod.user.entity.DepartmentEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface DepartmentService {\n    /**\n     * 新增部门\n     *\n     * @param departmentEntity DepartmentEntity\n     * @return DepartmentEntity\n     */\n    DepartmentEntity addOne(DepartmentEntity departmentEntity);\n\n    /**\n     * 保存部门\n     *\n     * @param departmentEntity DepartmentEntity\n     * @return DepartmentEntity\n     */\n    DepartmentEntity saveOne(DepartmentEntity departmentEntity);\n\n    /**\n     * 指定部门 id list，批量删除部门\n     *\n     * @param idList 角色 id list\n     * @return int 已删除角色个数\n     * @throws BaseResponseException BaseResponseException\n     */\n    int deleteAll(List<Long> idList) throws BaseResponseException;\n\n    /**\n     * 指定部门 id，获取部门\n     *\n     * @param id 部门 id\n     * @return DepartmentEntity\n     */\n    DepartmentEntity getOne(Long id);\n\n    /**\n     * 指定父级 API 分类 id，获取所有 API 分类\n     *\n     * @return List<ApiCategoryEntity>\n     */\n    List<DepartmentEntity> listAllParent();\n\n    /**\n     * 指定父级部门 id，获取所有部门\n     *\n     * @param parentId 父级部门 id\n     * @return List<DepartmentEntity>\n     */\n    List<DepartmentEntity> listAllByParentId(Long parentId);\n\n//    /**\n//     * 指定用户角色 list，获取所有角色\n//     *\n//     * @param userRoleEntityList 用户角色 list\n//     * @return List<RoleEntity>\n//     */\n//    List<DepartmentEntity> listAllByUserRoleList(List<UserRoleEntity> userRoleEntityList);\n\n    /**\n     * 指定 API 分类 id，分页获取所有 API\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return Pagination<DepartmentEntity>\n     */\n    Pagination<DepartmentEntity> pageAll(Integer page, Integer rows);\n\n    /**\n     * 获取所有部门\n     *\n     * @return List<DepartmentEntity>\n     */\n    List<DepartmentEntity> listAll();\n\n//    /**\n//     * 指定用户 id，获取用户角色\n//     *\n//     * @param userId 用户 id\n//     * @return List<RoleEntity>\n//     */\n//    List<DepartmentEntity> listAllByUserId(Long userId);\n\n    /**\n     * 指定部门 id，获取所有部门\n     *\n     * @param id 部门 id\n     * @return List<DepartmentEntity>\n     */\n    List<DepartmentEntity> listAllByDepartmentId(Long id);\n\n    /**\n     * 获取所有部门，以 EasyUI ComboTree 形式展示\n     *\n     * @return List<ComboTree>\n     */\n    List<ComboTree> listAllDepartmentComboTree();\n\n    /**\n     * 指定父级部门 id，DepartmentComboTree list，以 EasyUI ComboTree 形式展示\n     *\n     * @param parentId                父级部门 id\n     * @param departmentComboTreeList DepartmentComboTree list\n     * @return List<ComboTree>\n     */\n    List<ComboTree> getDepartmentChildrenComboTree(long parentId, List<ComboTree> departmentComboTreeList);\n\n    /**\n     * 获取所有部门，以 EasyUI TreeGrid 形式展示\n     *\n     * @return List<TreeGrid>\n     */\n    List<TreeGrid> listAllDepartmentTreeGrid();\n\n    /**\n     * 指定父级部门 id，DepartmentTreeGrid list，获取所有子级部门，以 EasyUI TreeGrid 形式展示\n     *\n     * @param parentId               父级部门 id\n     * @param departmentTreeGridList DepartmentTreeGrid list\n     * @return List<TreeGrid>\n     */\n    List<TreeGrid> getDepartmentChildrenTreeGrid(long parentId, List<TreeGrid> departmentTreeGridList);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/RoleAuthorityService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport com.godcheese.nimrod.user.entity.RoleAuthorityEntity;\n\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface RoleAuthorityService {\n\n    /**\n     * 指定角色权限 id，获取角色权限\n     *\n     * @param id 角色权限 id\n     * @return RoleAuthorityEntity\n     */\n    RoleAuthorityEntity getOne(Long id);\n\n    /**\n     * 指定角色 id、API 权限（authority），批量授权\n     *\n     * @param roleId           角色 id\n     * @param apiAuthorityList API 权限（authority） list\n     * @return List<String>\n     */\n    int grantAllByRoleIdAndApiAuthorityList(Long roleId, List<String> apiAuthorityList);\n\n    /**\n     * 指定角色 id、API 权限（authority），批量撤销授权\n     *\n     * @param roleId           角色 id\n     * @param apiAuthorityList API 权限（authority） list\n     * @return List<String>\n     */\n    int revokeAllByRoleIdAndApiAuthorityList(Long roleId, List<String> apiAuthorityList);\n\n    /**\n     * 指定角色 id、视图页面权限（authority） list，批量授权\n     *\n     * @param roleId            角色 id\n     * @param viewPageAuthority 视图页面权限（authority） list\n     * @return List<String>\n     */\n    int grantAllByRoleIdAndViewPageAuthorityList(Long roleId, List<String> viewPageAuthority);\n\n    /**\n     * 指定角色 id、视图页面权限（authority） list，批量撤销授权\n     *\n     * @param roleId            角色 id\n     * @param viewPageAuthority 视图页面权限（authority） list\n     * @return List<String>\n     */\n    int revokeAllByRoleIdAndViewPageAuthorityList(Long roleId, List<String> viewPageAuthority);\n\n    /**\n     * 指定角色 id、视图页面组件权限（authority），批量授权\n     *\n     * @param roleId                         角色 id\n     * @param viewPageComponentAuthorityList 视图页面组件权限（authority） list\n     * @return List<String>\n     */\n    int grantAllByRoleIdAndViewPageComponentAuthorityList(Long roleId, List<String> viewPageComponentAuthorityList);\n\n    /**\n     * 指定角色 id、视图页面组件权限（authority） list，批量撤销授权\n     *\n     * @param roleId                         角色 id\n     * @param viewPageComponentAuthorityList 视图页面组件权限（authority） list\n     * @return List<String>\n     */\n    int revokeAllByRoleIdAndViewPageComponentAuthorityList(Long roleId, List<String> viewPageComponentAuthorityList);\n\n    /**\n     * 指定角色 id、权限（authority） list，判断是否已授权\n     *\n     * @param roleId    角色 id\n     * @param authority 权限（authority） list\n     * @return Map<String, Object>\n     */\n    Map<String, Object> isGrantedByRoleIdAndAuthority(Long roleId, String authority);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/RoleService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.user.entity.RoleEntity;\nimport com.godcheese.nimrod.user.entity.UserRoleEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface RoleService {\n\n    /**\n     * 新增角色\n     *\n     * @param roleEntity RoleEntity\n     * @return RoleEntity\n     * @throws BaseResponseException BaseResponseException\n     */\n    RoleEntity addOne(RoleEntity roleEntity) throws BaseResponseException;\n\n    /**\n     * 保存角色\n     *\n     * @param roleEntity RoleEntity\n     * @return RoleEntity\n     * @throws BaseResponseException BaseResponseException\n     */\n    RoleEntity saveOne(RoleEntity roleEntity) throws BaseResponseException;\n\n    /**\n     * 指定角色 id list，批量删除角色\n     *\n     * @param idList 角色 id list\n     * @return int 已删除角色个数\n     * @throws BaseResponseException BaseResponseException\n     */\n    int deleteAll(List<Long> idList) throws BaseResponseException;\n\n    /**\n     * 指定角色 id，获取角色\n     *\n     * @param id 角色 id\n     * @return RoleEntity\n     */\n    RoleEntity getOne(Long id);\n\n    /**\n     * 指定用户角色 list，获取所有角色\n     *\n     * @param userRoleEntityList 用户角色 list\n     * @return List<RoleEntity>\n     */\n    List<RoleEntity> listAllByUserRoleList(List<UserRoleEntity> userRoleEntityList);\n\n    /**\n     * 分页获取所有角色\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return Pagination<RoleEntity>\n     */\n    Pagination<RoleEntity> pageAll(Integer page, Integer rows);\n\n    /**\n     * 获取所有角色\n     *\n     * @return List<RoleEntity>\n     */\n    List<RoleEntity> listAll();\n\n    /**\n     * 指定用户 id，获取角色\n     *\n     * @param userId 用户 id\n     * @return List<RoleEntity>\n     */\n    List<RoleEntity> listAllByUserId(Long userId);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/RoleViewMenuCategoryService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface RoleViewMenuCategoryService {\n    /**\n     * 指定角色 id、视图菜单分类 id list，批量授权\n     *\n     * @param roleId                 角色 id\n     * @param viewMenuCategoryIdList 视图菜单分类 id list\n     * @return List<String>\n     */\n    int grantAllByRoleIdAndViewMenuCategoryIdList(Long roleId, List<Long> viewMenuCategoryIdList);\n\n    /**\n     * 指定角色 id、视图菜单分类 id list，批量撤销授权\n     *\n     * @param roleId                 角色 id\n     * @param viewMenuCategoryIdList 视图菜单分类 id list\n     * @return List<String>\n     */\n    int revokeAllByRoleIdAndViewMenuCategoryIdList(Long roleId, List<Long> viewMenuCategoryIdList);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/RoleViewMenuService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface RoleViewMenuService {\n    /**\n     * 指定角色 id、视图菜单 id list，批量授权\n     *\n     * @param roleId         角色 id\n     * @param viewMenuIdList 视图菜单 id list\n     * @return List<String>\n     */\n    int grantAllByRoleIdAndViewMenuIdList(Long roleId, List<Long> viewMenuIdList);\n\n    /**\n     * 指定角色 id、视图菜单 id list，批量撤销授权\n     *\n     * @param roleId         角色 id\n     * @param viewMenuIdList 视图菜单 id list\n     * @return List<String>\n     */\n    int revokeAllByRoleIdAndViewMenuIdList(Long roleId, List<Long> viewMenuIdList);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/UserRoleService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.user.entity.UserRoleEntity;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface UserRoleService {\n    /**\n     * 新增用户角色\n     *\n     * @param userRoleEntity UserRoleEntity\n     * @return UserRoleEntity\n     */\n    UserRoleEntity addOne(UserRoleEntity userRoleEntity);\n\n    /**\n     * 指定用户 id、角色 id list，批量删除用户角色\n     *\n     * @param userId     用户 id\n     * @param roleIdList 角色 id list\n     * @return 已删除角色个数\n     */\n    int deleteAllByUserIdAndRoleIdList(Long userId, List<Long> roleIdList);\n\n    /**\n     * 分页获取所有用户角色\n     *\n     * @param page 页\n     * @param rows 每页显示数量\n     * @return Pagination<UserRoleEntity>\n     */\n    Pagination<UserRoleEntity> pageAll(Integer page, Integer rows);\n\n    List<UserRoleEntity> listAllByUserId(Long userId);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/UserService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.user.entity.UserEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\n\nimport javax.servlet.http.HttpServletRequest;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface UserService {\n\n    /**\n     * 新增用户\n     *\n     * @param userEntity UserEntity\n     * @return UserEntity\n     * @throws BaseResponseException BaseResponseException\n     */\n    UserEntity addOne(UserEntity userEntity) throws BaseResponseException;\n\n    /**\n     * 保存角色\n     *\n     * @param userEntity UserEntity\n     * @return UserEntity\n     * @throws BaseResponseException BaseResponseException\n     */\n    UserEntity saveOne(UserEntity userEntity) throws BaseResponseException;\n\n    /**\n     * 指定用户 id list，批量永久删除用户\n     *\n     * @param idList 用户 id list\n     * @return int 已删除角色个数\n     */\n    int deleteAll(List<Long> idList);\n\n    /**\n     * 指定用户 id，获取用户\n     *\n     * @param id 用户 id\n     * @return UserEntity\n     */\n    UserEntity getOne(Long id);\n\n    /**\n     * 获取当前用户，可能会 null\n     *\n     * @return UserEntity\n     */\n    UserEntity getCurrentUser();\n\n    /**\n     * 获取当前用户，可能会 null\n     *\n     * @return UserEntity\n     */\n    UserEntity getCurrentUserNoPassword();\n\n    /**\n     * 获取当前用户，更可靠的获取，但需指定 HttpServletRequest\n     *\n     * @param request HttpServletRequest\n     * @return UserEntity\n     */\n    UserEntity getCurrentUser(HttpServletRequest request);\n\n    /**\n     * 获取当前 SimpleUser，可能会 null\n     * @return UserEntity\n     */\n//     SimpleUser getCurrentSimpleUser();\n\n    /**\n     * 获取当前 SimpleUser，更可靠的获取，但需指定 HttpServletRequest\n     * @param request HttpServletRequest\n     * @return UserEntity\n     */\n//    static SimpleUser getCurrentSimpleUser(HttpServletRequest request);\n\n    /**\n     * 指定用户 id、密码，获取用户\n     *\n     * @param id       用户 id\n     * @param password 用户密码\n     * @return UserEntity\n     */\n    UserEntity getOneByIdAndPassword(Long id, String password);\n\n    /**\n     * 指定用户名、密码，获取用户\n     *\n     * @param username 用户名\n     * @param password 用户密码\n     * @return UserEntity\n     */\n    UserEntity getOneByUsernameAndPassword(String username, String password);\n\n    /**\n     * 指定电子邮箱、密码，获取用户\n     *\n     * @param email    电子邮箱\n     * @param password 密码\n     * @return UserEntity\n     */\n    UserEntity getOneByEmailAndPassword(String email, String password);\n\n    /**\n     * 指定手机号码、密码，获取用户\n     *\n     * @param cellphone 手机号\n     * @param password  密码\n     * @return UserEntity\n     */\n    UserEntity getOneByCellphoneAndPassword(String cellphone, String password);\n\n    /**\n     * 校验密码是否正确\n     *\n     * @param plainPassword  明文密码\n     * @param cipherPassword 密文密码\n     * @return boolean\n     */\n    boolean checkPassword(String plainPassword, String cipherPassword);\n\n    /**\n     * 加密明文密码\n     *\n     * @param plainPassword 明文密码\n     * @return String\n     */\n    String encodePassword(String plainPassword);\n\n    /**\n     * 指定用户 id，获取用户（去掉密码）\n     *\n     * @param id 用户 id\n     * @return UserEntity\n     */\n    UserEntity getOneByIdNoPassword(Long id);\n\n    /**\n     * 指定用户 id list，批量删除用户\n     *\n     * @param idList 用户 id list\n     * @return int\n     */\n    int fakeDeleteAll(List<Long> idList);\n\n    /**\n     * 指定用户 id list，批量撤销删除用户\n     *\n     * @param idList 用户 id list\n     * @return int\n     */\n    int revokeFakeDeleteAll(List<Long> idList);\n\n//    /**\n//     * 注销当前用户\n//     * @param httpServletRequest  HttpServletRequest\n//     * @param httpServletResponse HttpServletResponse\n//     */\n//    void logout(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws BaseResponseException;\n\n    /**\n     * 分页获取所有用户\n     *\n     * @param page            页\n     * @param rows            每页显示数量\n     * @param sorterField     sorterField\n     * @param sorterOrder     sorterOrder\n     * @param userEntity      userEntity\n     * @param gmtCreatedStart gmtCreatedStart\n     * @param gmtCreatedEnd   gmtCreatedEnd\n     * @param gmtDeletedStart gmtDeletedStart\n     * @param gmtDeletedEnd   gmtDeletedEnd\n     * @return Pagination<UserEntity>\n     */\n    Pagination<UserEntity> pageAll(Integer page, Integer rows, String sorterField, String sorterOrder, UserEntity userEntity, String gmtCreatedStart, String gmtCreatedEnd, String gmtDeletedStart, String gmtDeletedEnd);\n\n    /**\n     * 指定部门 id，分页获取所有用户\n     *\n     * @param departmentId 部门 id\n     * @param page         页\n     * @param rows         每页显示数量\n     * @return Pagination<UserEntity>\n     */\n    Pagination<UserEntity> pageAllByDepartmentId(Long departmentId, Integer page, Integer rows);\n\n    UserEntity profile(UserEntity userEntity);\n\n    UserEntity saveProfile(UserEntity userEntity) throws BaseResponseException;\n\n    boolean sendEmailVerifyCode(Long userId, String email) throws BaseResponseException;\n\n    boolean sendEmailVerifyCode(UserEntity userEntity) throws BaseResponseException;\n\n    boolean checkEmailVerifyCode(UserEntity userEntity, String email, String emailVerifyCode) throws BaseResponseException;\n\n    boolean changeEmail(UserEntity userEntity, String emailVerifyCode, String newEmail, String newEmailVerifyCode) throws BaseResponseException;\n\n    boolean changePassword(UserEntity userEntity, String password, String newPassword, String confirmNewPassword) throws BaseResponseException;\n}\n\n\n\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/UserVerifyCodeService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport com.godcheese.nimrod.user.entity.UserVerifyCodeEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface UserVerifyCodeService {\n    /**\n     * @param userId\n     * @param verifyFrom\n     * @return\n     */\n    UserVerifyCodeEntity addOne(UserVerifyCodeEntity userVerifyCodeEntity) throws BaseResponseException;\n\n    /**\n     * 指定用户 id、角色 id list，批量删除用户角色\n     *\n     * @param userId     用户 id\n     * @param roleIdList 角色 id list\n     * @return 已删除角色个数\n     */\n    int deleteAllByUserIdAndVerifyFrom(Long userId, String verifyFrom);\n\n    boolean isExpires(UserVerifyCodeEntity userVerifyCodeEntity);\n\n    UserVerifyCodeEntity getOneByUserIdAndVerifyFrom(Long userId, String verifyFrom, boolean isExpires, String comparisonVerifyCode) throws BaseResponseException;\n}"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/ViewMenuCategoryService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.user.entity.ViewMenuCategoryEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\n\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface ViewMenuCategoryService {\n\n    /**\n     * 新增视图菜单分类\n     *\n     * @param viewMenuCategoryEntity ViewMenuCategoryEntity\n     * @return ViewMenuCategoryEntity\n     */\n    ViewMenuCategoryEntity addOne(ViewMenuCategoryEntity viewMenuCategoryEntity);\n\n    /**\n     * 保存视图菜单分类\n     *\n     * @param viewMenuCategoryEntity ViewMenuCategoryEntity\n     * @return ViewMenuCategoryEntity\n     */\n    ViewMenuCategoryEntity saveOne(ViewMenuCategoryEntity viewMenuCategoryEntity);\n\n    /**\n     * 指定视图菜单分类 id list，批量删除视图菜单分类\n     *\n     * @param idList 视图菜单分类 id list\n     * @return int\n     * @throws BaseResponseException BaseResponseException\n     */\n    int deleteAll(List<Long> idList) throws BaseResponseException;\n\n    /**\n     * 指定角色 id，获取角色\n     *\n     * @param id 角色 id\n     * @return ViewMenuCategoryEntity\n     */\n    ViewMenuCategoryEntity getOne(Long id);\n\n    /**\n     * 指定用户 id，获取视图菜单分类\n     *\n     * @param userId 用户 id\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> listAllParentByUserId(Long userId);\n\n    /**\n     * 指定父级视图菜单分类 id、用户 id，获取视图菜单分类\n     *\n     * @param parentId 父级视图菜单分类 id\n     * @param userId   用户 id\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> listAllChildByParentIdAndUserId(Long parentId, Long userId);\n\n    /**\n     * 指定父级视图菜单分类 id、角色 id，获取所有视图菜单分类\n     *\n     * @param parentId 父级视图菜单分类 id\n     * @param roleId   角色 id\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> listAllByParentIdAndRoleId(Long parentId, Long roleId);\n\n    List<ViewMenuCategoryEntity> listAllByParentId(Long parentId, Long roleId);\n\n    /**\n     * 指定角色 id，获取所有父级视图菜单分类\n     *\n     * @param roleId 角色 id\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> listAllParentByRoleId(Long roleId);\n\n    List<Map<String, Object>> listAllChildViewMenuCategoryAndViewMenuByParentIdAndUserId(Long parentId, Long userId);\n\n    /**\n     * 获取所有视图菜单分类\n     *\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> listAll();\n\n    /**\n     * 指定视图菜单分类名称，模糊搜索获取所有视图菜单分类\n     *\n     * @param name 视图菜单分类名称\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> searchAllByName(String name);\n\n    /**\n     * 分页获取所有父级视图菜单分类\n     *\n     * @return List<ViewMenuCategoryEntity>\n     */\n    List<ViewMenuCategoryEntity> listAllParent(Long roleId);\n\n    /**\n     * 获取所有视图菜单分类，以 ComboTree 形式展示\n     *\n     * @return List<ComboTree>\n     */\n    List<ComboTree> listAllViewMenuCategoryComboTree();\n\n    /**\n     * 指定父级视图菜单分类 id，ViewMenuCategoryComboTree list，获取所有子级视图菜单分类\n     *\n     * @param parentId                      父级视图菜单分类 id\n     * @param viewMenuCategoryComboTreeList ViewMenuCategoryComboTree list\n     * @return List<ComboTree>\n     */\n    List<ComboTree> getViewMenuCategoryChildrenComboTree(long parentId, List<ComboTree> viewMenuCategoryComboTreeList);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/ViewMenuService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.user.entity.ViewMenuEntity;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface ViewMenuService {\n\n    /**\n     * 新增视图菜单\n     *\n     * @param viewMenuEntity ViewMenuEntity\n     * @return ViewMenuEntity\n     */\n    ViewMenuEntity addOne(ViewMenuEntity viewMenuEntity);\n\n    /**\n     * 保存视图菜单\n     *\n     * @param viewMenuEntity ViewMenuEntity\n     * @return ViewMenuEntity\n     */\n    ViewMenuEntity saveOne(ViewMenuEntity viewMenuEntity);\n\n    /**\n     * 指定视图菜单 id list，批量删除视图菜单\n     *\n     * @param idList 视图菜单 id list\n     * @return int\n     */\n    int deleteAll(List<Long> idList);\n\n    /**\n     * 指定视图菜单 id，获取视图菜单\n     *\n     * @param id 视图菜单 id\n     * @return ViewMenuEntity\n     */\n    ViewMenuEntity getOne(Long id);\n\n    /**\n     * 指定用户 id、视图菜单分类 id，获取所有视图菜单\n     *\n     * @param userId             用户 id\n     * @param viewMenuCategoryId 视图菜单分类 id\n     * @return List<ViewMenuEntity>\n     */\n    List<ViewMenuEntity> listAllByUserIdAndMenuCategoryId(Long userId, Long viewMenuCategoryId);\n\n    /**\n     * 指定视图菜单分类 id、角色 id，分页获取所有视图菜单\n     *\n     * @param page               页\n     * @param rows               每页显示数量\n     * @param viewMenuCategoryId 视图菜单分类 id\n     * @return Pagination<ViewMenuEntity>\n     */\n    Pagination<ViewMenuEntity> pageAllByViewMenuCategoryId(Integer page, Integer rows, Long viewMenuCategoryId, Long roleId);\n\n//    /**\n//     * 指定视图菜单名称，模糊搜索获取所有视图菜单\n//     * @param name 视图菜单名称\n//     * @return List<ViewMenuEntity>\n//     */\n//    List<ViewMenuEntity> searchAllByName(String name);\n\n//    /**\n//     * 指定用户 id，获取用户的树形视图菜单\n//     * @param userId\n//     * @return\n//     */\n//    List<AntdVueMenu> listAllAsAntdVueMenuByUserId(Long userId);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/ViewPageApiService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface ViewPageApiService {\n\n//    /**\n//     * 指定视图页面 id、API id，判断是否关联 API\n//     * @param viewPageId 视图页面 id\n//     * @param apiId API id\n//     * @return Map<String,Object>\n//     */\n//    Map<String, Object> isAssociatedByViewPageIdAndApiId(Long viewPageId, Long apiId);\n\n    /**\n     * 指定视图页面 id、API id list，批量关联 API\n     *\n     * @param viewPageId 视图页面 id\n     * @param apiIdList  API id list\n     * @return int\n     */\n    int associateAllByViewPageIdAndApiIdList(Long viewPageId, List<Long> apiIdList);\n\n    /**\n     * 指定视图页面 id、API id list，批量撤销关联 API\n     *\n     * @param viewPageId 视图页面 id\n     * @param apiIdList  API id list\n     * @return int\n     */\n    int revokeAssociateAllByViewPageIdAndApiIdList(Long viewPageId, List<Long> apiIdList);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/ViewPageCategoryService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.user.entity.ViewPageCategoryEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface ViewPageCategoryService {\n\n    /**\n     * 新增视图页面分类\n     *\n     * @param viewPageCategoryEntity ViewPageCategoryEntity\n     * @return ViewPageCategoryEntity\n     */\n    ViewPageCategoryEntity addOne(ViewPageCategoryEntity viewPageCategoryEntity);\n\n    /**\n     * 保存视图页面分类\n     *\n     * @param viewPageCategoryEntity ViewPageCategoryEntity\n     * @return ViewPageCategoryEntity\n     */\n    ViewPageCategoryEntity saveOne(ViewPageCategoryEntity viewPageCategoryEntity);\n\n    /**\n     * 指定视图页面分类 id list，批量删除视图页面分类\n     *\n     * @param idList 视图页面分类 id list\n     * @return int\n     * @throws BaseResponseException BaseResponseException\n     */\n    int deleteAll(List<Long> idList) throws BaseResponseException;\n\n    /**\n     * 指定视图页面分类 id，获取所有视图页面分类\n     *\n     * @param id 数据字典 id\n     * @return ViewPageCategoryEntity\n     */\n    ViewPageCategoryEntity getOne(Long id);\n\n\n    /**\n     * 获取所有父级视图页面分类\n     *\n     * @return List<ViewPageCategoryEntity>\n     */\n    List<ViewPageCategoryEntity> listAllParent();\n\n    /**\n     * 指定父级视图页面分类 id，获取所有视图页面分类\n     *\n     * @param parentId 父级视图页面分类 id\n     * @return List<ViewPageCategoryEntity>\n     */\n    List<ViewPageCategoryEntity> listAllByParentId(Long parentId);\n\n    /**\n     * 获取所有视图页面分类，以 ComboTree 形式展示\n     *\n     * @return List<ComboTree>\n     */\n    List<ComboTree> listAllViewPageCategoryComboTree();\n\n    /**\n     * 指定父级视图页面分类 id，ViewPageCategoryComboTree list，获取所有子级视图页面分类\n     *\n     * @param parentId                      父级视图页面分类 id\n     * @param viewPageCategoryComboTreeList ViewPageCategoryComboTree list\n     * @return List<ComboTree>\n     */\n    List<ComboTree> getViewPageCategoryChildrenComboTree(long parentId, List<ComboTree> viewPageCategoryComboTreeList);\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/ViewPageComponentApiService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface ViewPageComponentApiService {\n\n//    /**\n//     * 指定视图页面组件 id、API id，判断是否关联 API\n//     * @param viewPageComponentId 视图页面组件 id\n//     * @param apiId API id\n//     * @return Map<String,Object>\n//     */\n//    Map<String, Object> isAssociatedByViewPageComponentIdAndApiId(Long viewPageComponentId, Long apiId);\n\n    /**\n     * 指定视图页面组件 id、API id list，批量关联 API\n     *\n     * @param viewPageComponentId 视图页面组件 id\n     * @param apiIdList           API id list\n     * @return int\n     */\n    int associateAllByViewPageComponentIdAndApiIdList(Long viewPageComponentId, List<Long> apiIdList);\n\n    /**\n     * 指定视图页面组件 id、API id list，批量撤销关联 API\n     *\n     * @param viewPageComponentId 视图页面组件 id\n     * @param apiIdList           API id list\n     * @return int\n     */\n    int revokeAssociateAllByViewPageComponentIdAndApiIdList(Long viewPageComponentId, List<Long> apiIdList);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/ViewPageComponentService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.user.entity.ViewPageComponentEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface ViewPageComponentService {\n\n    /**\n     * 新增视图页面组件\n     *\n     * @param viewPageComponentEntity ViewPageComponentEntity\n     * @return ViewPageComponentEntity\n     * @throws BaseResponseException BaseResponseException\n     */\n    ViewPageComponentEntity addOne(ViewPageComponentEntity viewPageComponentEntity) throws BaseResponseException;\n\n    /**\n     * 保存视图页面组件\n     *\n     * @param viewPageComponentEntity ViewPageComponentEntity\n     * @return ViewPageComponentEntity\n     * @throws BaseResponseException BaseResponseException\n     */\n    ViewPageComponentEntity saveOne(ViewPageComponentEntity viewPageComponentEntity) throws BaseResponseException;\n\n    /**\n     * 指定视图页面组件 id，批量删除视图页面组件\n     *\n     * @param idList 视图页面组件 id list\n     * @return int\n     */\n    int deleteAll(List<Long> idList);\n\n    /**\n     * 指定视图页面组件 id，获取视图页面组件\n     *\n     * @param id 视图页面组件 id\n     * @return ViewPageComponentEntity\n     */\n    ViewPageComponentEntity getOne(Long id);\n\n    /**\n     * 指定视图页面 id，分页获取所有视图页面组件\n     *\n     * @param page       页\n     * @param rows       每页显示数量\n     * @param viewPageId 视图页面 id\n     * @return Pagination<ViewPageComponentEntity>\n     */\n    Pagination<ViewPageComponentEntity> pageAllByViewPageId(Integer page, Integer rows, Long viewPageId, Long roleId);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/ViewPageService.java",
    "content": "package com.godcheese.nimrod.user.service;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.user.entity.ViewPageEntity;\nimport com.godcheese.tile.web.exception.BaseResponseException;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\npublic interface ViewPageService {\n    /**\n     * 新增视图页面\n     *\n     * @param viewPageEntity ViewPageEntity\n     * @return ViewPageEntity\n     * @throws BaseResponseException BaseResponseException\n     */\n    ViewPageEntity addOne(ViewPageEntity viewPageEntity) throws BaseResponseException;\n\n    /**\n     * 保存视图页面\n     *\n     * @param viewPageEntity ViewPageEntity\n     * @return ViewPageEntity\n     * @throws BaseResponseException BaseResponseException\n     */\n    ViewPageEntity saveOne(ViewPageEntity viewPageEntity) throws BaseResponseException;\n\n    /**\n     * 指定视图页面 id，批量删除视图页面\n     *\n     * @param idList 视图页面 id list\n     * @return int\n     */\n    int deleteAll(List<Long> idList);\n\n    /**\n     * 指定视图页面 id，获取视图页面\n     *\n     * @param id 视图页面 id\n     * @return ViewPageEntity\n     */\n    ViewPageEntity getOne(Long id);\n\n    /**\n     * 指定视图页面分类 id、角色 id，分页获取所有视图页面\n     *\n     * @param page               页\n     * @param rows               每页显示数量\n     * @param viewPageCategoryId 视图页面分类 id\n     * @param roleId             角色 id\n     * @return\n     */\n    Pagination<ViewPageEntity> pageAllByViewPageCategoryId(Integer page, Integer rows, Long viewPageCategoryId, Long roleId);\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/ApiCategoryServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.common.easyui.EasyUi;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.user.entity.ApiCategoryEntity;\nimport com.godcheese.nimrod.user.entity.ApiEntity;\nimport com.godcheese.nimrod.user.mapper.ApiCategoryMapper;\nimport com.godcheese.nimrod.user.mapper.ApiMapper;\nimport com.godcheese.nimrod.user.service.ApiCategoryService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class ApiCategoryServiceImpl implements ApiCategoryService {\n\n    @Autowired\n    private ApiCategoryMapper apiCategoryMapper;\n\n    @Autowired\n    private ApiMapper apiMapper;\n    @Autowired\n    private FailureEntity failureEntity;\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public ApiCategoryEntity addOne(ApiCategoryEntity apiCategoryEntity) {\n        Date date = new Date();\n        apiCategoryEntity.setGmtModified(date);\n        apiCategoryEntity.setGmtCreated(date);\n        apiCategoryMapper.insertOne(apiCategoryEntity);\n        return apiCategoryEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public ApiCategoryEntity saveOne(ApiCategoryEntity apiCategoryEntity) throws BaseResponseException {\n        if (apiCategoryEntity.getId().equals(apiCategoryEntity.getParentId())) {\n            throw new BaseResponseException(failureEntity.i18n(\"api_category.save_fail_do_not_save_self_api_category\"));\n        }\n        apiCategoryEntity.setGmtModified(new Date());\n        apiCategoryMapper.updateOne(apiCategoryEntity);\n        return apiCategoryEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int deleteAll(List<Long> idList) throws BaseResponseException {\n        int result = 0;\n        for (Long id : idList) {\n            ApiCategoryEntity viewPageCategoryEntity = apiCategoryMapper.getOneByParentId(id);\n            if (viewPageCategoryEntity != null) {\n                throw new BaseResponseException(failureEntity.i18n(\"api_category.delete_fail_has_category\"));\n            }\n            ApiEntity apiEntity = apiMapper.getOneByApiCategoryId(id);\n            if (apiEntity != null) {\n                throw new BaseResponseException(failureEntity.i18n(\"api_category.delete_fail_has_api\"));\n            }\n            apiCategoryMapper.deleteOne(id);\n            result++;\n        }\n        return result;\n    }\n\n    @Override\n    public ApiCategoryEntity getOne(Long id) {\n        return apiCategoryMapper.getOne(id);\n    }\n\n    @Override\n    public List<ApiCategoryEntity> listAllParent() {\n        List<ApiCategoryEntity> apiCategoryEntityList = apiCategoryMapper.listAllByParentIdIsNull();\n        List<ApiCategoryEntity> apiCategoryEntityListResult = new ArrayList<>();\n        for (ApiCategoryEntity apiCategoryEntity : apiCategoryEntityList) {\n            if (apiCategoryMapper.getOneByParentId(apiCategoryEntity.getId()) != null) {\n                apiCategoryEntity.setState(EasyUi.State.CLOSED);\n            }\n            apiCategoryEntityListResult.add(apiCategoryEntity);\n        }\n        return apiCategoryEntityListResult;\n    }\n\n    @Override\n    public List<ApiCategoryEntity> listAllByParentId(Long parentId) {\n        List<ApiCategoryEntity> apiCategoryEntityList = apiCategoryMapper.listAllByParentId(parentId);\n        List<ApiCategoryEntity> apiCategoryEntityListResult = new ArrayList<>();\n        for (ApiCategoryEntity apiCategoryEntity : apiCategoryEntityList) {\n            if (apiCategoryMapper.getOneByParentId(apiCategoryEntity.getId()) != null) {\n                apiCategoryEntity.setState(EasyUi.State.CLOSED);\n            }\n            apiCategoryEntityListResult.add(apiCategoryEntity);\n        }\n        return apiCategoryEntityListResult;\n    }\n\n    @Override\n    public List<ComboTree> listAllApiCategoryComboTree() {\n        List<ComboTree> comboTreeList = new ArrayList<>(0);\n        List<ApiCategoryEntity> apiCategoryEntityList = apiCategoryMapper.listAll();\n        for (ApiCategoryEntity apiCategoryEntity : apiCategoryEntityList) {\n            ComboTree comboTree = new ComboTree();\n            comboTree.setId(apiCategoryEntity.getId());\n            comboTree.setText(apiCategoryEntity.getName());\n            comboTree.setParentId(apiCategoryEntity.getParentId());\n            comboTreeList.add(comboTree);\n        }\n        return comboTreeList;\n    }\n\n    @Override\n    public List<ComboTree> getApiCategoryChildrenComboTree(long parentId, List<ComboTree> apiCategoryComboTreeList) {\n        List<ComboTree> children = new ArrayList<>(0);\n        for (ComboTree comboTree : apiCategoryComboTreeList) {\n            if (comboTree.getParentId() != null && comboTree.getParentId().equals(parentId)) {\n                children.add(comboTree);\n            }\n        }\n        for (ComboTree child : children) {\n            List<ComboTree> childChildren = getApiCategoryChildrenComboTree(child.getId(), apiCategoryComboTreeList);\n            child.setChildren(childChildren);\n        }\n        if (children.size() == 0) {\n            return null;\n        }\n        return children;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/ApiServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.nimrod.user.entity.ApiEntity;\nimport com.godcheese.nimrod.user.mapper.ApiMapper;\nimport com.godcheese.nimrod.user.mapper.RoleAuthorityMapper;\nimport com.godcheese.nimrod.user.mapper.ViewPageApiMapper;\nimport com.godcheese.nimrod.user.mapper.ViewPageComponentApiMapper;\nimport com.godcheese.nimrod.user.service.ApiService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport com.github.pagehelper.Page;\nimport com.github.pagehelper.PageHelper;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class ApiServiceImpl implements ApiService {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(ApiServiceImpl.class);\n\n    @Autowired\n    private ApiMapper apiMapper;\n    @Autowired\n    private FailureEntity failureEntity;\n    @Autowired\n    private ViewPageComponentApiMapper viewPageComponentApiMapper;\n    @Autowired\n    private ViewPageApiMapper viewPageApiMapper;\n    @Autowired\n    private DictionaryService dictionaryService;\n    @Autowired\n    private RoleAuthorityMapper roleAuthorityMapper;\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public ApiEntity addOne(ApiEntity apiEntity) throws BaseResponseException {\n        Date date = new Date();\n        String authority = apiEntity.getAuthority().toUpperCase();\n        if (apiMapper.getOneByAuthority(authority) != null) {\n            throw new BaseResponseException(failureEntity.i18n(\"api.add_fail_authority_exists\"));\n        }\n        apiEntity.setAuthority(authority);\n        apiEntity.setGmtModified(date);\n        apiEntity.setGmtCreated(date);\n        apiMapper.insertOne(apiEntity);\n        return apiEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public ApiEntity saveOne(ApiEntity apiEntity) {\n        ApiEntity apiEntity1 = apiMapper.getOne(apiEntity.getId());\n        apiEntity1.setName(apiEntity.getName());\n        apiEntity1.setUrl(apiEntity.getUrl());\n        apiEntity1.setAuthority(apiEntity.getAuthority().toUpperCase());\n        apiEntity1.setApiCategoryId(apiEntity.getApiCategoryId());\n        apiEntity1.setSort(apiEntity.getSort());\n        apiEntity1.setRemark(apiEntity.getRemark());\n        apiEntity1.setGmtModified(new Date());\n        apiMapper.updateOne(apiEntity1);\n        return apiEntity1;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int deleteAll(List<Long> idList) {\n        return apiMapper.deleteAll(idList);\n    }\n\n    @Override\n    public ApiEntity getOne(Long id) {\n        return apiMapper.getOne(id);\n    }\n\n    @Override\n    public Pagination<ApiEntity> pageAllByApiCategoryId(Integer page, Integer rows, Long apiCategoryId, Long viewPageId, Long viewPageComponentId, Long roleId) {\n        Pagination<ApiEntity> pagination = new Pagination<>();\n        PageHelper.startPage(page, rows);\n        Page<ApiEntity> apiEntityPage = apiMapper.pageAllByApiCategoryId(apiCategoryId);\n        List<ApiEntity> apiEntityList = apiEntityPage.getResult();\n        List<ApiEntity> apiEntityListResult = new ArrayList<>();\n        Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get(\"IS_OR_NOT\", \"IS\"));\n        Integer isOrNotNot = Integer.valueOf((String) dictionaryService.get(\"IS_OR_NOT\", \"NOT\"));\n        if (viewPageId != null) {\n            for (ApiEntity apiEntity : apiEntityList) {\n                if (viewPageApiMapper.getOneByViewPageIdAndApiId(viewPageId, apiEntity.getId()) != null) {\n                    // 是否已关联，IS=是，NOT=否\n                    apiEntity.setIsAssociated(isOrNotIs);\n                } else {\n                    apiEntity.setIsAssociated(isOrNotNot);\n                }\n                apiEntityListResult.add(apiEntity);\n            }\n            pagination.setRows(apiEntityListResult);\n        } else if (viewPageComponentId != null) {\n            for (ApiEntity apiEntity : apiEntityList) {\n                if (viewPageComponentApiMapper.getOneByViewPageComponentIdAndApiId(viewPageComponentId, apiEntity.getId()) != null) {\n                    // 是否已关联，IS=是，NOT=否\n                    apiEntity.setIsAssociated(isOrNotIs);\n                } else {\n                    apiEntity.setIsAssociated(isOrNotNot);\n                }\n                apiEntityListResult.add(apiEntity);\n            }\n            pagination.setRows(apiEntityListResult);\n        } else if (roleId != null) {\n            for (ApiEntity apiEntity : apiEntityList) {\n                if (roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, apiEntity.getAuthority()) != null) {\n                    // 是否已授权，IS=是，NOT=否\n                    apiEntity.setIsGranted(isOrNotIs);\n                } else {\n                    apiEntity.setIsGranted(isOrNotNot);\n                }\n                apiEntityListResult.add(apiEntity);\n            }\n            pagination.setRows(apiEntityListResult);\n        } else {\n            pagination.setRows(apiEntityList);\n        }\n        pagination.setTotal(apiEntityPage.getTotal());\n        return pagination;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/DepartmentServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.easyui.TreeGrid;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.user.entity.DepartmentEntity;\nimport com.godcheese.nimrod.user.entity.UserEntity;\nimport com.godcheese.nimrod.user.mapper.DepartmentMapper;\nimport com.godcheese.nimrod.user.mapper.UserMapper;\nimport com.godcheese.nimrod.user.service.DepartmentService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class DepartmentServiceImpl implements DepartmentService {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(DepartmentServiceImpl.class);\n\n    @Autowired\n    private DepartmentMapper departmentMapper;\n    @Autowired\n    private UserMapper userMapper;\n    @Autowired\n    private FailureEntity failureEntity;\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public DepartmentEntity addOne(DepartmentEntity departmentEntity) {\n        Date date = new Date();\n        departmentEntity.setGmtModified(date);\n        departmentEntity.setGmtCreated(date);\n        departmentMapper.insertOne(departmentEntity);\n        return departmentEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public DepartmentEntity saveOne(DepartmentEntity departmentEntity) {\n        departmentEntity.setGmtModified(new Date());\n        departmentMapper.updateOne(departmentEntity);\n        return departmentEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int deleteAll(List<Long> idList) throws BaseResponseException {\n        int result = 0;\n        for (Long id : idList) {\n            UserEntity userEntity = userMapper.getOneByDepartmentId(id);\n            if (userEntity != null) {\n                throw new BaseResponseException(failureEntity.i18n(\"department.delete_fail_has_user\"));\n            }\n            DepartmentEntity departmentEntity = departmentMapper.getOneByParentId(id);\n            if (departmentEntity != null) {\n                throw new BaseResponseException(failureEntity.i18n(\"department.delete_fail_has_children_department\"));\n            }\n            departmentMapper.deleteOne(id);\n            result++;\n        }\n        return result;\n    }\n\n    @Override\n    public DepartmentEntity getOne(Long id) {\n        return departmentMapper.getOne(id);\n    }\n\n    @Override\n    public List<DepartmentEntity> listAllParent() {\n        return departmentMapper.listAllParentIdIsNull();\n    }\n\n    @Override\n    public List<DepartmentEntity> listAllByParentId(Long parentId) {\n        return departmentMapper.listAllByParentId(parentId);\n    }\n\n    @Override\n    public Pagination<DepartmentEntity> pageAll(Integer page, Integer rows) {\n        return null;\n    }\n\n    //    /**\n//     * 根据用户关联角色来获取所有角色\n//     *\n//     * @param userRoleEntityList 用户角色 list\n//     * @return List<RoleEntity>\n//     */\n//    @Override\n//    public List<RoleEntity> listAllByUserRoleList(List<UserRoleEntity> userRoleEntityList) {\n//        List<RoleEntity> roleEntityList = null;\n//        if (userRoleEntityList != null && !userRoleEntityList.isEmpty()) {\n//            roleEntityList = new ArrayList<>();\n//            for (UserRoleEntity userRoleEntity : userRoleEntityList) {\n//                RoleEntity roleEntity = roleMapper.getOne(userRoleEntity.getRoleId());\n//                roleEntityList.add(roleEntity);\n//            }\n//        }\n//        return roleEntityList;\n//    }\n\n    @Override\n    public List<DepartmentEntity> listAll() {\n        return departmentMapper.listAll();\n    }\n\n//    @Override\n//    public List<RoleEntity> listAllByUserId(Long userId) {\n//        List<RoleEntity> roleEntityList = new ArrayList<>();\n//        List<UserRoleEntity> userRoleEntityList = userRoleMapper.listAllByUserId(userId);\n//        if (userRoleEntityList != null && !userRoleEntityList.isEmpty()) {\n//            for (UserRoleEntity userRoleEntity : userRoleEntityList) {\n//                RoleEntity roleEntity = roleMapper.getOne(userRoleEntity.getRoleId());\n//                roleEntityList.add(roleEntity);\n//            }\n//        }\n//        return roleEntityList;\n//    }\n\n    /**\n     * 根据子级部门 id 获取所有父级部门\n     *\n     * @param id\n     * @return\n     */\n    @Override\n    public List<DepartmentEntity> listAllByDepartmentId(Long id) {\n        List<DepartmentEntity> departmentEntityResultList = new ArrayList<>(0);\n        List<DepartmentEntity> departmentEntityList = listAll();\n        DepartmentEntity departmentEntity = getOne(id);\n        departmentEntityResultList.add(departmentEntity);\n        forEachDepartmentParent(departmentEntity, departmentEntityList, departmentEntityResultList);\n        Collections.reverse(departmentEntityResultList);\n        return departmentEntityResultList;\n    }\n\n    public void forEachDepartmentParent(DepartmentEntity departmentEntity, List<DepartmentEntity> departmentEntityList, List<DepartmentEntity> departmentEntityResultList) {\n        for (DepartmentEntity entity : departmentEntityList) {\n            if (departmentEntity.getParentId() != null) {\n                if (departmentEntity.getParentId().equals(entity.getId())) {\n                    departmentEntityResultList.add(entity);\n                    forEachDepartmentParent(entity, departmentEntityList, departmentEntityResultList);\n                }\n            }\n        }\n    }\n\n    @Override\n    public List<ComboTree> listAllDepartmentComboTree() {\n        List<ComboTree> comboTreeList = new ArrayList<>(0);\n        List<DepartmentEntity> departmentEntityList = listAll();\n        for (DepartmentEntity departmentEntity : departmentEntityList) {\n            ComboTree comboTree = new ComboTree();\n            comboTree.setId(departmentEntity.getId());\n            comboTree.setText(departmentEntity.getName());\n            comboTree.setParentId(departmentEntity.getParentId());\n            comboTreeList.add(comboTree);\n        }\n        return comboTreeList;\n    }\n\n    @Override\n    public List<ComboTree> getDepartmentChildrenComboTree(long parentId, List<ComboTree> departmentComboTreeList) {\n\n        List<ComboTree> children = new ArrayList<>(0);\n\n        for (ComboTree comboTree : departmentComboTreeList) {\n            if (comboTree.getParentId() != null && comboTree.getParentId().equals(parentId)) {\n                children.add(comboTree);\n            }\n        }\n\n        for (ComboTree child : children) {\n\n            List<ComboTree> childChildren = getDepartmentChildrenComboTree(child.getId(), departmentComboTreeList);\n            if (childChildren == null) {\n                childChildren = new ArrayList<>(0);\n            }\n            child.setChildren(childChildren);\n        }\n\n        return children;\n    }\n\n    @Override\n    public List<TreeGrid> listAllDepartmentTreeGrid() {\n        List<TreeGrid> treeGridList = new ArrayList<>(0);\n        List<DepartmentEntity> departmentEntityList = listAll();\n        for (DepartmentEntity departmentEntity : departmentEntityList) {\n            TreeGrid treeGrid = new TreeGrid();\n            treeGrid.setId(departmentEntity.getId());\n            treeGrid.setName(departmentEntity.getName());\n            treeGrid.setParentId(departmentEntity.getParentId());\n            treeGridList.add(treeGrid);\n        }\n        return treeGridList;\n    }\n\n    @Override\n    public List<TreeGrid> getDepartmentChildrenTreeGrid(long parentId, List<TreeGrid> departmentTreeGridList) {\n\n        List<TreeGrid> children = new ArrayList<>(0);\n        for (TreeGrid treeGrid : departmentTreeGridList) {\n            if (treeGrid.getParentId() != null && treeGrid.getParentId().equals(parentId)) {\n                children.add(treeGrid);\n            }\n        }\n\n        for (TreeGrid child : children) {\n\n            List<TreeGrid> childChildren = getDepartmentChildrenTreeGrid(child.getId(), departmentTreeGridList);\n            if (childChildren == null) {\n                childChildren = new ArrayList<>(0);\n            }\n            child.setChildren(childChildren);\n        }\n        return children;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/RoleAuthorityServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.user.entity.*;\nimport com.godcheese.nimrod.user.mapper.*;\nimport com.godcheese.nimrod.user.entity.ApiEntity;\nimport com.godcheese.nimrod.user.entity.ViewPageApiEntity;\nimport com.godcheese.nimrod.user.entity.ViewPageComponentEntity;\nimport com.godcheese.nimrod.user.entity.ViewPageEntity;\nimport com.godcheese.nimrod.user.mapper.*;\nimport com.godcheese.nimrod.user.service.RoleAuthorityService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class RoleAuthorityServiceImpl implements RoleAuthorityService {\n\n    @Autowired\n    private RoleAuthorityMapper roleAuthorityMapper;\n\n    @Autowired\n    private ViewPageMapper viewPageMapper;\n\n    @Autowired\n    private ViewPageApiMapper viewPageApiMapper;\n\n    @Autowired\n    private ApiMapper apiMapper;\n\n    @Autowired\n    private ViewPageComponentMapper viewPageComponentMapper;\n\n    @Autowired\n    private ViewPageComponentApiMapper viewPageComponentApiMapper;\n\n    @Override\n    public RoleAuthorityEntity getOne(Long id) {\n        return roleAuthorityMapper.getOne(id);\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int grantAllByRoleIdAndApiAuthorityList(Long roleId, List<String> authorityList) {\n        // API authority\n        List<String> apiAuthorityList = new ArrayList<>();\n        // 最终被添加的 authority\n        List<String> authorityList3 = new ArrayList<>();\n        for (String authority : authorityList) {\n            if (!\"\".equals(authority.trim())) {\n                apiAuthorityList.add(authority);\n            }\n        }\n        RoleAuthorityEntity roleAuthorityEntity;\n        for (String a : apiAuthorityList) {\n            roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, a);\n            if (roleAuthorityEntity == null) {\n                authorityList3.add(a);\n            }\n        }\n        // authority 全部写入数据库\n        if (!authorityList3.isEmpty()) {\n            roleAuthorityMapper.insertAllByRoleIdAndAuthorityList(roleId, authorityList3);\n        }\n        return authorityList3.size();\n\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int revokeAllByRoleIdAndApiAuthorityList(Long roleId, List<String> authorityList) {\n        // API authority\n        List<String> apiAuthorityList = new ArrayList<>();\n        // 最终被添加的 authority\n        List<String> authorityList3 = new ArrayList<>();\n        for (String authority : authorityList) {\n            if (!\"\".equals(authority.trim())) {\n                apiAuthorityList.add(authority);\n            }\n        }\n        RoleAuthorityEntity roleAuthorityEntity;\n        for (String a : apiAuthorityList) {\n            roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, a);\n            if (roleAuthorityEntity != null) {\n                authorityList3.add(a);\n            }\n        }\n        // authority 全部删除\n        if (!authorityList3.isEmpty()) {\n            roleAuthorityMapper.deleteAllByRoleIdAndAuthorityList(roleId, authorityList3);\n        }\n        return authorityList3.size();\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int grantAllByRoleIdAndViewPageAuthorityList(Long roleId, List<String> authorityList) {\n        // 视图页面 authority\n        List<String> viewPageAuthorityList = new ArrayList<>();\n        // 视图页面组件关联的 API authority\n        List<String> apiAuthorityList = new ArrayList<>();\n        // 最终被添加的 authority\n        List<String> authorityList3 = new ArrayList<>();\n        for (String authority : authorityList) {\n            if (!\"\".equals(authority.trim())) {\n                viewPageAuthorityList.add(authority);\n\n                ViewPageEntity viewPageEntity = viewPageMapper.getOneByAuthority(authority);\n                if (viewPageEntity != null) {\n                    List<ViewPageApiEntity> viewPageApiEntityList = viewPageApiMapper.listAllByViewPageId(viewPageEntity.getId());\n                    if (viewPageApiEntityList != null && !viewPageApiEntityList.isEmpty()) {\n\n                        for (ViewPageApiEntity viewPageApiEntity : viewPageApiEntityList) {\n                            ApiEntity apiEntity = apiMapper.getOne(viewPageApiEntity.getApiId());\n                            if (apiEntity != null) {\n                                apiAuthorityList.add(apiEntity.getAuthority());\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        // 视图页面关联的 API authority 全部放入 viewPageAuthorityList\n        viewPageAuthorityList.addAll(apiAuthorityList);\n        RoleAuthorityEntity roleAuthorityEntity;\n        for (String a : viewPageAuthorityList) {\n            roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, a);\n            if (roleAuthorityEntity == null) {\n                authorityList3.add(a);\n            }\n        }\n        // authority 全部写入数据库\n        if (!authorityList3.isEmpty()) {\n            roleAuthorityMapper.insertAllByRoleIdAndAuthorityList(roleId, authorityList3);\n        }\n        return authorityList3.size();\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int revokeAllByRoleIdAndViewPageAuthorityList(Long roleId, List<String> authorityList) {\n        // 视图页面 authority\n        List<String> viewPageAuthorityList = new ArrayList<>();\n        // 视图页面组件关联的 API authority\n        List<String> apiAuthorityList = new ArrayList<>();\n        // 最终被添加的 authority\n        List<String> authorityList3 = new ArrayList<>();\n        for (String authority : authorityList) {\n            if (!\"\".equals(authority.trim())) {\n                viewPageAuthorityList.add(authority);\n                ViewPageEntity viewPageEntity = viewPageMapper.getOneByAuthority(authority);\n                if (viewPageEntity != null) {\n                    List<ViewPageApiEntity> viewPageApiEntityList = viewPageApiMapper.listAllByViewPageId(viewPageEntity.getId());\n                    if (viewPageApiEntityList != null && !viewPageApiEntityList.isEmpty()) {\n                        for (ViewPageApiEntity viewPageApiEntity : viewPageApiEntityList) {\n                            ApiEntity apiEntity = apiMapper.getOne(viewPageApiEntity.getApiId());\n                            if (apiEntity != null) {\n                                apiAuthorityList.add(apiEntity.getAuthority());\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        // 视图页面组件关联的 API authority 全部放入 viewPageAuthorityList\n        viewPageAuthorityList.addAll(apiAuthorityList);\n        RoleAuthorityEntity roleAuthorityEntity = null;\n        for (String a : viewPageAuthorityList) {\n            roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, a);\n            if (roleAuthorityEntity != null) {\n                authorityList3.add(a);\n            }\n        }\n        // authority 全部删除\n        if (!authorityList3.isEmpty()) {\n            roleAuthorityMapper.deleteAllByRoleIdAndAuthorityList(roleId, authorityList3);\n        }\n        return authorityList3.size();\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int grantAllByRoleIdAndViewPageComponentAuthorityList(Long roleId, List<String> authorityList) {\n        // 视图页面组件 authority\n        List<String> pageComponentAuthorityList = new ArrayList<>();\n        // 视图页面组件关联的 API authority\n        List<String> apiAuthorityList = new ArrayList<>();\n        // 最终被添加的 authority\n        List<String> authorityList3 = new ArrayList<>();\n        for (String authority : authorityList) {\n            if (!\"\".equals(authority.trim())) {\n                pageComponentAuthorityList.add(authority);\n                ViewPageComponentEntity viewPageComponentEntity = viewPageComponentMapper.getOneByAuthority(authority);\n                if (viewPageComponentEntity != null) {\n                    List<ViewPageComponentApiEntity> viewPageComponentApiEntityList = viewPageComponentApiMapper.listAllByViewPageComponentId(viewPageComponentEntity.getId());\n                    if (viewPageComponentApiEntityList != null && !viewPageComponentApiEntityList.isEmpty()) {\n                        for (ViewPageComponentApiEntity viewPageApiEntity : viewPageComponentApiEntityList) {\n                            ApiEntity apiEntity = apiMapper.getOne(viewPageApiEntity.getApiId());\n                            if (apiEntity != null) {\n                                apiAuthorityList.add(apiEntity.getAuthority());\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        // 视图页面组件关联的 API authority 全部放入 pageComponentAuthorityList\n        pageComponentAuthorityList.addAll(apiAuthorityList);\n        RoleAuthorityEntity roleAuthorityEntity = null;\n        for (String a : pageComponentAuthorityList) {\n            roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, a);\n            if (roleAuthorityEntity == null) {\n                authorityList3.add(a);\n            }\n        }\n        // authority 全部写入数据库\n        if (!authorityList3.isEmpty()) {\n            roleAuthorityMapper.insertAllByRoleIdAndAuthorityList(roleId, authorityList3);\n        }\n        return authorityList3.size();\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int revokeAllByRoleIdAndViewPageComponentAuthorityList(Long roleId, List<String> authorityList) {\n        // 视图页面组件 authority\n        List<String> pageComponentAuthorityList = new ArrayList<>();\n        // 视图页面组件关联的 API authority\n        List<String> apiAuthorityList = new ArrayList<>();\n        // 最终被添加的 authority\n        List<String> authorityList3 = new ArrayList<>();\n        for (String authority : authorityList) {\n            if (!\"\".equals(authority.trim())) {\n                pageComponentAuthorityList.add(authority);\n\n                ViewPageComponentEntity viewPageComponentEntity = viewPageComponentMapper.getOneByAuthority(authority);\n                if (viewPageComponentEntity != null) {\n                    List<ViewPageComponentApiEntity> viewPageComponentApiEntityList = viewPageComponentApiMapper.listAllByViewPageComponentId(viewPageComponentEntity.getId());\n                    if (viewPageComponentApiEntityList != null && !viewPageComponentApiEntityList.isEmpty()) {\n\n                        for (ViewPageComponentApiEntity viewPageApiEntity : viewPageComponentApiEntityList) {\n                            ApiEntity apiEntity = apiMapper.getOne(viewPageApiEntity.getApiId());\n                            if (apiEntity != null) {\n                                apiAuthorityList.add(apiEntity.getAuthority());\n                            }\n                        }\n                    }\n                }\n\n            }\n        }\n        // 视图页面组件关联的 API authority 全部放入 pageComponentAuthorityList\n        pageComponentAuthorityList.addAll(apiAuthorityList);\n        RoleAuthorityEntity roleAuthorityEntity = null;\n        for (String a : pageComponentAuthorityList) {\n            roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, a);\n            if (roleAuthorityEntity != null) {\n                authorityList3.add(a);\n            }\n        }\n        // authority 全部删除\n        if (!authorityList3.isEmpty()) {\n            roleAuthorityMapper.deleteAllByRoleIdAndAuthorityList(roleId, authorityList3);\n        }\n        return authorityList3.size();\n    }\n\n    @Override\n    public Map<String, Object> isGrantedByRoleIdAndAuthority(Long roleId, String authority) {\n        Map<String, Object> data = new HashMap<>(1);\n        data.put(\"isGranted\", false);\n        RoleAuthorityEntity roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, authority);\n        if (roleAuthorityEntity != null) {\n            data.put(\"isGranted\", true);\n        }\n        return data;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/RoleServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.user.entity.RoleEntity;\nimport com.godcheese.nimrod.user.entity.UserRoleEntity;\nimport com.godcheese.nimrod.user.mapper.RoleAuthorityMapper;\nimport com.godcheese.nimrod.user.mapper.RoleMapper;\nimport com.godcheese.nimrod.user.mapper.UserRoleMapper;\nimport com.godcheese.nimrod.user.service.RoleService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport com.github.pagehelper.Page;\nimport com.github.pagehelper.PageHelper;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class RoleServiceImpl implements RoleService {\n\n    @Autowired\n    private RoleMapper roleMapper;\n\n    @Autowired\n    private UserRoleMapper userRoleMapper;\n    @Autowired\n    private FailureEntity failureEntity;\n    @Autowired\n    private RoleAuthorityMapper roleAuthorityMapper;\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public RoleEntity addOne(RoleEntity roleEntity) throws BaseResponseException {\n        Date date = new Date();\n        String value = roleEntity.getValue().toUpperCase();\n        RoleEntity roleEntity2 = roleMapper.getOneByValue(value);\n        if (roleEntity2 != null) {\n            throw new BaseResponseException(failureEntity.i18n(\"role.add_fail_value_exists\"));\n        }\n        roleEntity.setGmtModified(date);\n        roleEntity.setGmtCreated(date);\n        roleMapper.insertOne(roleEntity);\n        return roleEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public RoleEntity saveOne(RoleEntity roleEntity) throws BaseResponseException {\n        String value = roleEntity.getValue().toUpperCase();\n        RoleEntity roleEntity2 = roleMapper.getOneByValue(value);\n        if (roleEntity2 != null && !roleEntity2.getId().equals(roleEntity.getId())) {\n            throw new BaseResponseException(failureEntity.i18n(\"role.save_fail_value_exists\"));\n        }\n        roleEntity.setGmtModified(new Date());\n        roleMapper.updateOne(roleEntity);\n        return roleEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int deleteAll(List<Long> idList) throws BaseResponseException {\n        int result = 0;\n        for (Long id : idList) {\n            UserRoleEntity userRoleEntity = userRoleMapper.getOneByRoleId(id);\n            if (userRoleEntity != null) {\n                throw new BaseResponseException(failureEntity.i18n(\"role.delete_fail_has_user\"));\n            }\n            roleMapper.deleteOne(id);\n            roleAuthorityMapper.deleteAllByRoleId(id);\n            result++;\n        }\n        return result;\n    }\n\n    @Override\n    public RoleEntity getOne(Long id) {\n        return roleMapper.getOne(id);\n    }\n\n    /**\n     * 根据用户关联角色来获取所有角色\n     *\n     * @param userRoleEntityList 用户角色 list\n     * @return List<RoleEntity>\n     */\n    @Override\n    public List<RoleEntity> listAllByUserRoleList(List<UserRoleEntity> userRoleEntityList) {\n        List<RoleEntity> roleEntityList = null;\n        if (userRoleEntityList != null && !userRoleEntityList.isEmpty()) {\n            roleEntityList = new ArrayList<>();\n            for (UserRoleEntity userRoleEntity : userRoleEntityList) {\n                RoleEntity roleEntity = roleMapper.getOne(userRoleEntity.getRoleId());\n                roleEntityList.add(roleEntity);\n            }\n        }\n        return roleEntityList;\n    }\n\n    @Override\n    public Pagination<RoleEntity> pageAll(Integer page, Integer rows) {\n        Pagination<RoleEntity> pagination = new Pagination<>();\n        PageHelper.startPage(page, rows);\n        Page<RoleEntity> roleEntityPage = roleMapper.pageAll();\n        pagination.setRows(roleEntityPage.getResult());\n        pagination.setTotal(roleEntityPage.getTotal());\n        return pagination;\n    }\n\n    @Override\n    public List<RoleEntity> listAll() {\n        return roleMapper.listAll();\n    }\n\n    @Override\n    public List<RoleEntity> listAllByUserId(Long userId) {\n        List<RoleEntity> roleEntityList = new ArrayList<>();\n        List<UserRoleEntity> userRoleEntityList = userRoleMapper.listAllByUserId(userId);\n        if (userRoleEntityList != null && !userRoleEntityList.isEmpty()) {\n            for (UserRoleEntity userRoleEntity : userRoleEntityList) {\n                RoleEntity roleEntity = roleMapper.getOne(userRoleEntity.getRoleId());\n                roleEntityList.add(roleEntity);\n            }\n        }\n        return roleEntityList;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/RoleViewMenuCategoryServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.user.entity.ViewMenuCategoryEntity;\nimport com.godcheese.nimrod.user.mapper.RoleViewMenuCategoryMapper;\nimport com.godcheese.nimrod.user.mapper.ViewMenuCategoryMapper;\nimport com.godcheese.nimrod.user.service.RoleViewMenuCategoryService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class RoleViewMenuCategoryServiceImpl implements RoleViewMenuCategoryService {\n    @Autowired\n    private RoleViewMenuCategoryMapper roleViewMenuCategoryMapper;\n    @Autowired\n    private ViewMenuCategoryMapper viewMenuCategoryMapper;\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int grantAllByRoleIdAndViewMenuCategoryIdList(Long roleId, List<Long> viewMenuCategoryIdList) {\n        // 最终被添加的 viewMenuCategoryIdList\n        List<Long> viewMenuCategoryIdListResult = new ArrayList<>();\n        ViewMenuCategoryEntity viewMenuCategoryEntity;\n        for (Long viewMenuCategoryId : viewMenuCategoryIdList) {\n            viewMenuCategoryEntity = viewMenuCategoryMapper.getOne(viewMenuCategoryId);\n            if (viewMenuCategoryEntity == null) {\n                viewMenuCategoryIdListResult.add(viewMenuCategoryId);\n            }\n        }\n        // viewMenuCategoryIdList 全部写入数据库\n        if (!viewMenuCategoryIdListResult.isEmpty()) {\n            roleViewMenuCategoryMapper.insertAllByRoleIdAndViewMenuCategoryIdList(roleId, viewMenuCategoryIdListResult);\n        }\n        return viewMenuCategoryIdListResult.size();\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int revokeAllByRoleIdAndViewMenuCategoryIdList(Long roleId, List<Long> viewMenuCategoryIdList) {\n        // 最终被添加的 viewMenuCategoryIdList\n        List<Long> viewMenuCategoryIdListResult = new ArrayList<>();\n        ViewMenuCategoryEntity viewMenuCategoryEntity;\n        for (Long viewMenuCategoryId : viewMenuCategoryIdList) {\n            viewMenuCategoryEntity = viewMenuCategoryMapper.getOne(viewMenuCategoryId);\n            if (viewMenuCategoryEntity == null) {\n                viewMenuCategoryIdListResult.add(viewMenuCategoryId);\n            }\n        }\n        // viewMenuCategoryIdList 全部写入数据库\n        if (!viewMenuCategoryIdListResult.isEmpty()) {\n            roleViewMenuCategoryMapper.deleteAllByRoleIdAndViewMenuCategoryIdList(roleId, viewMenuCategoryIdListResult);\n        }\n        return viewMenuCategoryIdListResult.size();\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/RoleViewMenuServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.user.entity.ViewMenuEntity;\nimport com.godcheese.nimrod.user.mapper.RoleViewMenuMapper;\nimport com.godcheese.nimrod.user.mapper.ViewMenuMapper;\nimport com.godcheese.nimrod.user.service.RoleViewMenuService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class RoleViewMenuServiceImpl implements RoleViewMenuService {\n    @Autowired\n    private RoleViewMenuMapper roleViewMenuMapper;\n    @Autowired\n    private ViewMenuMapper viewMenuMapper;\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int grantAllByRoleIdAndViewMenuIdList(Long roleId, List<Long> viewMenuIdList) {\n        // 最终被添加的 viewMenuIdList\n        List<Long> viewMenuIdListResult = new ArrayList<>();\n        ViewMenuEntity viewMenuEntity;\n        for (Long viewMenuId : viewMenuIdList) {\n            viewMenuEntity = viewMenuMapper.getOne(viewMenuId);\n            if (viewMenuEntity != null) {\n                viewMenuIdListResult.add(viewMenuId);\n            }\n        }\n        // viewMenuIdList 全部写入数据库\n        if (!viewMenuIdListResult.isEmpty()) {\n            roleViewMenuMapper.insertAllByRoleIdAndViewMenuIdList(roleId, viewMenuIdListResult);\n        }\n        return viewMenuIdListResult.size();\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int revokeAllByRoleIdAndViewMenuIdList(Long roleId, List<Long> viewMenuIdList) {\n        int result = 0;\n        // viewMenuIdList 全部写入数据库\n        if (!viewMenuIdList.isEmpty()) {\n            result = roleViewMenuMapper.deleteAllByRoleIdAndViewMenuIdList(roleId, viewMenuIdList);\n        }\n        return result;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/UserRoleServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.user.entity.UserRoleEntity;\nimport com.godcheese.nimrod.user.mapper.UserRoleMapper;\nimport com.godcheese.nimrod.user.service.UserRoleService;\nimport com.github.pagehelper.Page;\nimport com.github.pagehelper.PageHelper;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class UserRoleServiceImpl implements UserRoleService {\n\n    @Autowired\n    private UserRoleMapper userRoleMapper;\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public UserRoleEntity addOne(UserRoleEntity userRoleEntity) {\n        UserRoleEntity userRoleEntity1 = userRoleMapper.getOneByUserIdAndRoleId(userRoleEntity.getUserId(), userRoleEntity.getRoleId());\n        if (userRoleEntity1 == null) {\n            userRoleMapper.insertOne(userRoleEntity);\n        }\n        return userRoleEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int deleteAllByUserIdAndRoleIdList(Long userId, List<Long> roleIdList) {\n        return userRoleMapper.deleteAllByUserIdAndRoleIdList(userId, roleIdList);\n    }\n\n    @Override\n    public Pagination<UserRoleEntity> pageAll(Integer page, Integer rows) {\n        Pagination<UserRoleEntity> pagination = new Pagination<>();\n        PageHelper.startPage(page, rows);\n        Page<UserRoleEntity> userRoleEntityPage = userRoleMapper.pageAll();\n        pagination.setRows(userRoleEntityPage.getResult());\n        pagination.setTotal(userRoleEntityPage.getTotal());\n        return pagination;\n    }\n\n    @Override\n    public List<UserRoleEntity> listAllByUserId(Long userId) {\n        return userRoleMapper.listAllByUserId(userId);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/UserServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.common.security.SimpleUser;\nimport com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl;\nimport com.godcheese.nimrod.mail.entity.MailEntity;\nimport com.godcheese.nimrod.mail.service.MailService;\nimport com.godcheese.nimrod.mail.service.impl.MailServiceImpl;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.nimrod.user.entity.*;\nimport com.godcheese.nimrod.user.mapper.UserMapper;\nimport com.godcheese.nimrod.user.mapper.UserVerifyCodeMapper;\nimport com.godcheese.nimrod.user.service.*;\nimport com.godcheese.tile.util.DateUtil;\nimport com.godcheese.tile.util.RandomUtil;\nimport com.godcheese.tile.util.StringUtil;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport com.github.pagehelper.Page;\nimport com.github.pagehelper.PageHelper;\nimport com.godcheese.nimrod.user.service.DepartmentService;\nimport com.godcheese.nimrod.user.service.RoleService;\nimport com.godcheese.nimrod.user.service.UserRoleService;\nimport com.godcheese.nimrod.user.service.UserVerifyCodeService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport javax.servlet.http.HttpServletRequest;\nimport java.util.*;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class UserServiceImpl implements UserService {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceImpl.class);\n\n    private static final int PASSWORD_MIN_LENGTH = 6;\n    private static final int PASSWORD_MAX_LENGTH = 32;\n\n    @Autowired\n    private UserMapper userMapper;\n    @Autowired\n    private FailureEntity failureEntity;\n    @Autowired\n    private DepartmentService departmentService;\n    @Autowired\n    private UserRoleService userRoleService;\n    @Autowired\n    private RoleService roleService;\n    @Autowired\n    private MailService mailService;\n    @Autowired\n    private DictionaryService dictionaryService;\n    @Autowired\n    private UserVerifyCodeMapper userVerifyCodeMapper;\n    @Autowired\n    private UserVerifyCodeService userVerifyCodeService;\n    @Autowired\n    private UserService userService;\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public UserEntity addOne(UserEntity userEntity) throws BaseResponseException {\n        Date date = new Date();\n        userEntity.setUsername(userEntity.getUsername().trim());\n        if (userMapper.getOneByUsername(userEntity.getUsername()) != null) {\n            throw new BaseResponseException(failureEntity.i18n(\"user.username_exists\"));\n        }\n        userEntity.setPassword(encodePassword(userEntity.getPassword().trim()));\n        userEntity.setGmtModified(date);\n        userEntity.setGmtCreated(date);\n        userMapper.insertOne(userEntity);\n        return userEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public UserEntity saveOne(UserEntity userEntity) throws BaseResponseException {\n        userEntity.setUsername(userEntity.getUsername().trim());\n        UserEntity userEntity1 = userMapper.getOneByUsername(userEntity.getUsername());\n        if (userEntity1 != null && !userEntity1.getId().equals(userEntity.getId())) {\n            throw new BaseResponseException(failureEntity.i18n(\"user.username_exists\"));\n        }\n        if (userEntity.getPassword() != null && !\"\".equals(userEntity.getPassword().trim())) {\n            userEntity.setPassword(encodePassword(userEntity.getPassword().trim()));\n        } else {\n            UserEntity userEntity2 = userMapper.getOne(userEntity.getId());\n            if (userEntity2 != null) {\n                userEntity.setPassword(userEntity2.getPassword());\n            }\n        }\n        userEntity.setGmtModified(new Date());\n        userMapper.updateOne(userEntity);\n        return userEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int deleteAll(List<Long> idList) {\n        return userMapper.deleteAll(idList);\n    }\n\n    @Override\n    public UserEntity getOne(Long id) {\n        return userMapper.getOne(id);\n    }\n\n    @Override\n    public UserEntity getCurrentUser() {\n        SimpleUser simpleUser;\n        if ((simpleUser = SimpleUserDetailsServiceImpl.getCurrentSimpleUser()) != null) {\n            return userMapper.getOne(simpleUser.getId());\n        }\n        return null;\n    }\n\n    @Override\n    public UserEntity getCurrentUserNoPassword() {\n        UserEntity userEntity = getCurrentUser();\n        if (userEntity != null) {\n            userEntity.setPassword(null);\n            return userEntity;\n        }\n        return null;\n    }\n\n    @Override\n    public UserEntity getCurrentUser(HttpServletRequest request) {\n        SimpleUser simpleUser;\n        if ((simpleUser = SimpleUserDetailsServiceImpl.getCurrentSimpleUser(request)) != null) {\n            return userMapper.getOne(simpleUser.getId());\n        }\n        return null;\n    }\n\n//    @Override\n//    public void logout(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws BaseResponseException {\n//        try {\n//            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();\n//\n//            if (authentication != null) {\n//                LOGGER.info(\"username1={}\",((SimpleUser)authentication.getPrincipal()).getUsername());\n//                new SecurityContextLogoutHandler().logout(httpServletRequest, httpServletResponse, authentication);\n//                HttpSession httpSession = httpServletRequest.getSession(false);\n//                        if(httpSession != null) {\n//                            httpSession.invalidate();\n//                        }\n//                authentication = SecurityContextHolder.getContext().getAuthentication();\n//\n//\n//                        if(authentication != null) {\n//                            LOGGER.info(\"username2={}\", ((SimpleUser) authentication.getPrincipal()).getUsername());\n//                        }\n//            }\n//        } catch (Exception e) {\n//            throw new BaseResponseException(FailureEntity.LOGOUT_FAIL);\n//        }\n//    }\n\n    @Override\n    public Pagination<UserEntity> pageAll(Integer page, Integer rows, String sorterField, String sorterOrder, UserEntity userEntity, String gmtCreatedStart, String gmtCreatedEnd, String gmtDeletedStart, String gmtDeletedEnd) {\n        if (sorterField != null && !\"\".equals(sorterField) && sorterOrder != null && !\"\".equals(sorterOrder)) {\n            sorterField = StringUtil.camelToUnderline(sorterField);\n            String orderBy = sorterField + \" \" + sorterOrder;\n            PageHelper.startPage(page, rows, orderBy);\n        } else {\n            PageHelper.startPage(page, rows);\n        }\n        Page<UserEntity> userEntityPage = userMapper.pageAll(userEntity, gmtCreatedStart, gmtCreatedEnd, gmtDeletedStart, gmtDeletedEnd);\n        Pagination<UserEntity> pagination = new Pagination<>();\n        List<UserEntity> userEntityList = new ArrayList<>();\n        List<UserEntity> tempUserEntityList = userEntityPage.getResult();\n        if (tempUserEntityList != null) {\n            for (UserEntity userEntity2 : tempUserEntityList) {\n                userEntity2.setPassword(null);\n                userEntity2.setDepartment(departmentService.listAllByDepartmentId(userEntity2.getDepartmentId()));\n                userEntityList.add(userEntity2);\n            }\n        }\n        pagination.setRows(userEntityList);\n        pagination.setTotal(userEntityPage.getTotal());\n        return pagination;\n    }\n\n    @Override\n    public Pagination<UserEntity> pageAllByDepartmentId(Long departmentId, Integer page, Integer rows) {\n        Pagination<UserEntity> pagination = new Pagination<>();\n        PageHelper.startPage(page, rows);\n        Page<UserEntity> tempUserEntityPage = userMapper.pageAllByDepartmentId(departmentId);\n        List<UserEntity> userEntityList = new ArrayList<>();\n        if (tempUserEntityPage != null) {\n            for (UserEntity userEntity : tempUserEntityPage.getResult()) {\n                userEntity.setPassword(null);\n                userEntityList.add(userEntity);\n            }\n            pagination.setRows(userEntityList);\n            pagination.setTotal(tempUserEntityPage.getTotal());\n        }\n        return pagination;\n    }\n\n    @Override\n    public UserEntity getOneByIdAndPassword(Long id, String password) {\n        UserEntity userEntity = userMapper.getOne(id);\n        if (userEntity.getId().equals(id) && checkPassword(password, userEntity.getPassword())) {\n            return userEntity;\n        }\n        return null;\n    }\n\n    @Override\n    public UserEntity getOneByUsernameAndPassword(String username, String password) {\n        UserEntity userEntity = userMapper.getOneByUsername(username);\n        if (checkPassword(password, userEntity.getPassword())) {\n            return userEntity;\n        }\n        return null;\n    }\n\n    @Override\n    public UserEntity getOneByEmailAndPassword(String email, String password) {\n        UserEntity userEntity = userMapper.getOneByEmail(email);\n        if (checkPassword(password, userEntity.getPassword())) {\n            return userEntity;\n        }\n        return null;\n    }\n\n    @Override\n    public UserEntity getOneByCellphoneAndPassword(String cellphone, String password) {\n        UserEntity userEntity = userMapper.getOneByCellphone(cellphone);\n        return checkPassword(password, userEntity.getPassword()) ? userEntity : null;\n    }\n\n    @Override\n    public boolean checkPassword(String plainPassword, String cipherPassword) {\n        return new BCryptPasswordEncoder().matches(plainPassword, cipherPassword);\n    }\n\n    @Override\n    public String encodePassword(String plainPassword) {\n        return  new BCryptPasswordEncoder().encode(plainPassword);\n    }\n\n    @Override\n    public UserEntity getOneByIdNoPassword(Long id) {\n        UserEntity userEntity = userMapper.getOne(id);\n        if (userEntity != null) {\n            userEntity.setPassword(null);\n            return userEntity;\n        }\n        return null;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int fakeDeleteAll(List<Long> idList) {\n        return userMapper.fakeDeleteAll(idList, DateUtil.newDate());\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int revokeFakeDeleteAll(List<Long> idList) {\n        return userMapper.revokeFakeDeleteAll(idList);\n    }\n\n    @Override\n    public UserEntity profile(UserEntity userEntity) {\n        List<RoleEntity> roleEntityList = new ArrayList<>();\n        List<DepartmentEntity> departmentEntityList;\n        if (userEntity != null) {\n            userEntity.setPassword(null);\n            List<UserRoleEntity> userRoleEntityList = userRoleService.listAllByUserId(userEntity.getId());\n            if (!userRoleEntityList.isEmpty()) {\n                for (UserRoleEntity userRoleEntity : userRoleEntityList) {\n                    RoleEntity roleEntity = roleService.getOne(userRoleEntity.getRoleId());\n                    if (roleEntity != null) {\n                        roleEntityList.add(roleEntity);\n                    }\n                }\n            }\n            userEntity.setRoles(roleEntityList);\n            departmentEntityList = departmentService.listAllByDepartmentId(userEntity.getDepartmentId());\n            userEntity.setDepartments(departmentEntityList);\n        }\n        return userEntity;\n    }\n\n    @Override\n    public UserEntity saveProfile(UserEntity userEntity) throws BaseResponseException {\n        UserEntity userEntity1 = getCurrentUser();\n        userEntity1.setAvatar(userEntity.getAvatar());\n        userEntity1.setPassword(null);\n        return saveOne(userEntity1);\n    }\n\n    @Override\n    public boolean sendEmailVerifyCode(Long userId, String email) throws BaseResponseException {\n        Integer isOrNotIs = Integer.valueOf(String.valueOf(dictionaryService.get(\"IS_OR_NOT\", \"IS\")));\n        MailEntity mailEntity = new MailEntity();\n        Map<String, Object> variables = new HashMap<>(3);\n        String webName = (String) dictionaryService.get(\"WEB\", \"NAME\");\n        variables.put(\"webName\", webName);\n        variables.put(\"webUrl\", dictionaryService.get(\"WEB\", \"URL\"));\n        String verifyCode = RandomUtil.randomString(6, RandomUtil.NUMBER);\n        variables.put(\"verifyCode\", verifyCode);\n        mailEntity.setTo(email);\n        mailEntity.setSubject(webName);\n        mailEntity.setText(mailService.loadHtmlTemplate(MailServiceImpl.MAIL_TEMPLATE_ROOT_PATH + \"/email_verify_code\", variables));\n        mailEntity.setHtml(isOrNotIs);\n        UserVerifyCodeEntity userVerifyCodeEntity = new UserVerifyCodeEntity();\n        userVerifyCodeEntity.setUserId(userId);\n        userVerifyCodeEntity.setVerifyFrom(email);\n        userVerifyCodeEntity.setVerifyCode(verifyCode);\n        userVerifyCodeService.addOne(userVerifyCodeEntity);\n        return mailService.addOne(mailEntity) != null;\n    }\n\n    @Override\n    public boolean sendEmailVerifyCode(UserEntity userEntity) throws BaseResponseException {\n        if (!sendEmailVerifyCode(userEntity.getId(), userEntity.getEmail())) {\n            throw new BaseResponseException(failureEntity.i18n(\"user_verify_code.send_fail\"));\n        }\n        return true;\n    }\n\n    @Override\n    public boolean checkEmailVerifyCode(UserEntity userEntity, String email, String emailVerifyCode) throws BaseResponseException {\n        UserVerifyCodeEntity userVerifyCodeEntity = userVerifyCodeService.getOneByUserIdAndVerifyFrom(userEntity.getId(), email, true, emailVerifyCode);\n        if (userVerifyCodeEntity != null) {\n            return true;\n        }\n        return false;\n    }\n\n    @Override\n    public boolean changeEmail(UserEntity userEntity, String emailVerifyCode, String newEmail, String newEmailVerifyCode) throws BaseResponseException {\n        String oldEmail = userEntity.getEmail();\n        if (!checkEmailVerifyCode(userEntity, userEntity.getEmail(), emailVerifyCode) || !checkEmailVerifyCode(userEntity, newEmail, newEmailVerifyCode)) {\n            throw new BaseResponseException(failureEntity.i18n(\"user_verify_code.verification_code_error\"));\n        }\n        userEntity.setEmail(newEmail);\n        userEntity.setPassword(null);\n        userVerifyCodeMapper.deleteAllByEmail(oldEmail);\n        userVerifyCodeMapper.deleteAllByEmail(newEmail);\n        userService.saveOne(userEntity);\n        return true;\n    }\n\n    @Override\n    public boolean changePassword(UserEntity userEntity, String password, String newPassword, String confirmNewPassword) throws BaseResponseException {\n        password = password.trim();\n        newPassword = newPassword.trim();\n        confirmNewPassword = confirmNewPassword.trim();\n        if (!newPassword.equalsIgnoreCase(confirmNewPassword)) {\n            throw new BaseResponseException(failureEntity.i18n(\"user.new_password_and_confirm_new_password_error\"));\n        }\n        if (!checkPassword(password, userEntity.getPassword())) {\n            throw new BaseResponseException(failureEntity.i18n(\"user.original_password_error\"));\n        }\n        if (newPassword.length() < PASSWORD_MIN_LENGTH || newPassword.length() > PASSWORD_MAX_LENGTH) {\n            throw new BaseResponseException(failureEntity.i18n(\"user.new_password_must_length\"));\n        }\n        if (checkPassword(newPassword, userEntity.getPassword())) {\n            throw new BaseResponseException(failureEntity.i18n(\"user.same_as_the_original_password\"));\n        }\n        userEntity.setPassword(newPassword);\n        userService.saveOne(userEntity);\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/UserVerifyCodeServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.user.entity.UserVerifyCodeEntity;\nimport com.godcheese.nimrod.user.mapper.UserVerifyCodeMapper;\nimport com.godcheese.nimrod.user.service.UserVerifyCodeService;\nimport com.godcheese.tile.util.DateUtil;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.Calendar;\nimport java.util.Date;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class UserVerifyCodeServiceImpl implements UserVerifyCodeService {\n\n    @Autowired\n    private UserVerifyCodeMapper userVerifyCodeMapper;\n    @Autowired\n    private FailureEntity failureEntity;\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public UserVerifyCodeEntity addOne(UserVerifyCodeEntity userVerifyCodeEntity) throws BaseResponseException {\n//        UserVerifyCodeEntity userVerifyCodeEntity1 = userVerifyCodeMapper.getOneByUserIdAndVerifyFrom(userVerifyCodeEntity.getUserId(), userVerifyCodeEntity.getVerifyFrom());\n//        if (userVerifyCodeEntity1 != null) {\n//            userVerifyCodeMapper.updateOneByUserIdAndVerifyFrom(userVerifyCodeEntity);\n//        } else {\n//            userVerifyCodeMapper.insertOne(userVerifyCodeEntity);\n//        }\n//        return userVerifyCodeEntity;\n\n        UserVerifyCodeEntity userVerifyCodeEntity1 = userVerifyCodeMapper.getOneByUserIdAndVerifyFrom(userVerifyCodeEntity.getUserId(), userVerifyCodeEntity.getVerifyFrom());\n        Date gmtCreated = new Date();\n        Date gmtExpires = DateUtil.calendarPlus(gmtCreated, Calendar.MINUTE, 10);\n        if (userVerifyCodeEntity1 != null) {\n            Date gmtCreatedPlus1Minute = DateUtil.calendarPlus(userVerifyCodeEntity1.getGmtCreated(), Calendar.MINUTE, 1);\n            if (System.currentTimeMillis() < gmtCreatedPlus1Minute.getTime()) {\n                throw new BaseResponseException(failureEntity.i18n(\"user_verify_code.too_frequent_operation\"));\n            }\n            userVerifyCodeEntity.setGmtExpires(gmtExpires);\n            userVerifyCodeEntity.setGmtCreated(gmtCreated);\n            userVerifyCodeMapper.updateOneByUserIdAndVerifyFrom(userVerifyCodeEntity);\n        } else {\n            userVerifyCodeEntity.setGmtExpires(gmtExpires);\n            userVerifyCodeEntity.setGmtCreated(gmtCreated);\n            userVerifyCodeMapper.insertOne(userVerifyCodeEntity);\n        }\n//        Integer isOrNotIs = Integer.valueOf(String.valueOf(dictionaryService.get(\"IS_OR_NOT\", \"IS\")));\n//        MailEntity mailEntity = new MailEntity();\n//        Map<String, Object> variables = new HashMap<>();\n//        String webName = (String) dictionaryService.get(\"WEB\", \"NAME\");\n//        variables.put(\"webName\", webName);\n//        variables.put(\"webUrl\", dictionaryService.get(\"WEB\", \"URL\"));\n//        String verifyCode = RandomUtil.randomString( 6, RandomUtil.NUMBER);\n//        variables.put(\"verifyCode\", verifyCode);\n//        mailEntity.setTo(userEntity.getEmail());\n//        mailEntity.setSubject(webName);\n//        mailEntity.setText(mailService.loadHtmlTemplate(MailServiceImpl.MAIL_TEMPLATE_ROOT_PATH + \"/email_verify_code\", variables));\n//        mailEntity.setHtml(isOrNotIs);\n//        UserVerifyCodeEntity userVerifyCodeEntity1 = new UserVerifyCodeEntity();\n//        userVerifyCodeEntity1.setUserId(userEntity.getId());\n//        userVerifyCodeEntity1.setVerifyFrom(userEntity.getEmail());\n//        userVerifyCodeEntity1.setVerifyCode(verifyCode);\n//        userVerifyCodeEntity1.setGmtExpires(gmtExpires);\n//        userVerifyCodeEntity1.setGmtCreated(gmtCreated);\n//        userVerifyCodeService.addOne(userVerifyCodeEntity);\n//        mailService.addOne(mailEntity);\n\n//                UserVerifyCodeEntity userVerifyCodeEntity1 = userVerifyCodeMapper.getOneByUserIdAndVerifyFrom(userVerifyCodeEntity.getUserId(), userVerifyCodeEntity.getVerifyFrom());\n\n        return userVerifyCodeEntity;\n\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int deleteAllByUserIdAndVerifyFrom(Long userId, String verifyFrom) {\n//        return userVerifyCodeMapper.deleteAllByUserIdAndRoleIdList(userId, roleIdList);\n        return 0;\n    }\n\n    /**\n     * 判断验证码是否过期，过期返回=true，未过期返回=false\n     *\n     * @param userVerifyCodeEntity\n     * @return\n     */\n    @Override\n    public boolean isExpires(UserVerifyCodeEntity userVerifyCodeEntity) {\n        if (System.currentTimeMillis() >= userVerifyCodeEntity.getGmtExpires().getTime()) {\n            return true;\n        }\n        return false;\n    }\n\n    @Override\n    public UserVerifyCodeEntity getOneByUserIdAndVerifyFrom(Long userId, String verifyFrom, boolean isExpires, String comparisonVerifyCode) throws BaseResponseException {\n        UserVerifyCodeEntity userVerifyCodeEntity = userVerifyCodeMapper.getOneByUserIdAndVerifyFrom(userId, verifyFrom);\n        if (userVerifyCodeEntity == null) {\n            throw new BaseResponseException(failureEntity.i18n(\"user_verify_code.verification_code_error\"));\n        }\n        if (isExpires(userVerifyCodeEntity) && isExpires) {\n            throw new BaseResponseException(failureEntity.i18n(\"user_verify_code.verification_code_error_or_expires\"));\n        }\n        if (!userVerifyCodeEntity.getVerifyCode().equalsIgnoreCase(comparisonVerifyCode)) {\n            throw new BaseResponseException(failureEntity.i18n(\"user_verify_code.verification_code_error_or_expires\"));\n        }\n        return userVerifyCodeEntity;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/ViewMenuCategoryServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.common.easyui.EasyUi;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.nimrod.user.entity.RoleEntity;\nimport com.godcheese.nimrod.user.entity.UserRoleEntity;\nimport com.godcheese.nimrod.user.entity.ViewMenuCategoryEntity;\nimport com.godcheese.nimrod.user.entity.ViewMenuEntity;\nimport com.godcheese.nimrod.user.mapper.RoleViewMenuCategoryMapper;\nimport com.godcheese.nimrod.user.mapper.UserRoleMapper;\nimport com.godcheese.nimrod.user.mapper.ViewMenuCategoryMapper;\nimport com.godcheese.nimrod.user.mapper.ViewMenuMapper;\nimport com.godcheese.nimrod.user.service.RoleService;\nimport com.godcheese.nimrod.user.service.ViewMenuCategoryService;\nimport com.godcheese.nimrod.user.service.ViewMenuService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.*;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class ViewMenuCategoryServiceImpl implements ViewMenuCategoryService {\n\n    @Autowired\n    private ViewMenuCategoryMapper viewMenuCategoryMapper;\n\n    @Autowired\n    private UserRoleMapper userRoleMapper;\n\n    @Autowired\n    private RoleService roleService;\n\n    @Autowired\n    private ViewMenuMapper viewMenuMapper;\n\n    @Autowired\n    private ViewMenuCategoryService viewMenuCategoryService;\n    @Autowired\n    private ViewMenuService viewMenuService;\n    @Autowired\n    private FailureEntity failureEntity;\n    @Autowired\n    private RoleViewMenuCategoryMapper roleViewMenuCategoryMapper;\n    @Autowired\n    private DictionaryService dictionaryService;\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public ViewMenuCategoryEntity addOne(ViewMenuCategoryEntity viewMenuCategoryEntity) {\n        Date date = new Date();\n        viewMenuCategoryEntity.setGmtModified(date);\n        viewMenuCategoryEntity.setGmtCreated(date);\n        viewMenuCategoryMapper.insertOne(viewMenuCategoryEntity);\n        return viewMenuCategoryEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public ViewMenuCategoryEntity saveOne(ViewMenuCategoryEntity viewMenuCategoryEntity) {\n        ViewMenuCategoryEntity viewMenuCategoryEntity1 = viewMenuCategoryMapper.getOne(viewMenuCategoryEntity.getId());\n        Date date = new Date();\n        viewMenuCategoryEntity1.setName(viewMenuCategoryEntity.getName());\n        viewMenuCategoryEntity1.setIcon(viewMenuCategoryEntity.getIcon());\n        viewMenuCategoryEntity1.setSort(viewMenuCategoryEntity.getSort());\n        viewMenuCategoryEntity1.setRemark(viewMenuCategoryEntity.getRemark());\n        viewMenuCategoryEntity1.setGmtModified(date);\n        viewMenuCategoryMapper.updateOne(viewMenuCategoryEntity1);\n        return viewMenuCategoryEntity1;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int deleteAll(List<Long> idList) throws BaseResponseException {\n        int result = 0;\n        for (Long id : idList) {\n            // 有子视图菜单分类报错\n            ViewMenuCategoryEntity viewMenuCategoryEntity = viewMenuCategoryMapper.getOneByParentId(id);\n            if (viewMenuCategoryEntity != null) {\n                throw new BaseResponseException(failureEntity.i18n(\"view_menu_category.delete_fail_has_children_category\"));\n            }\n            // 有子视图菜单报错\n            ViewMenuEntity viewMenuEntity = viewMenuMapper.getOneByViewMenuCategoryId(id);\n            if (viewMenuEntity != null) {\n                throw new BaseResponseException(failureEntity.i18n(\"view_menu_category.delete_fail_has_view_menu\"));\n            }\n            roleViewMenuCategoryMapper.deleteAllByViewMenuCategoryId(id);\n            viewMenuCategoryMapper.deleteOne(id);\n            result++;\n        }\n        return result;\n    }\n\n    @Override\n    public ViewMenuCategoryEntity getOne(Long id) {\n        return viewMenuCategoryMapper.getOne(id);\n    }\n\n    /**\n     * 指定 用户id，获取所有视图菜单父级分类\n     *\n     * @param userId\n     * @return\n     */\n    @Override\n    public List<ViewMenuCategoryEntity> listAllParentByUserId(Long userId) {\n        List<ViewMenuCategoryEntity> viewMenuCategoryEntityList = null;\n        List<UserRoleEntity> userRoleEntityList;\n        if ((userRoleEntityList = userRoleMapper.listAllByUserId(userId)) != null) {\n            List<RoleEntity> roleEntityList;\n            if ((roleEntityList = roleService.listAllByUserRoleList(userRoleEntityList)) != null) {\n                viewMenuCategoryEntityList = new ArrayList<>();\n                for (RoleEntity roleEntity : roleEntityList) {\n                    viewMenuCategoryEntityList.addAll(viewMenuCategoryMapper.listAllByParentIdIsNullAndRoleId(roleEntity.getId()));\n                }\n            }\n        }\n        return viewMenuCategoryEntityList;\n    }\n\n    /**\n     * 指定用户id、视图菜单父级分类，获取所有视图菜单子级分类\n     *\n     * @param userId\n     * @param parentId\n     * @return\n     */\n    @Override\n    public List<ViewMenuCategoryEntity> listAllChildByParentIdAndUserId(Long parentId, Long userId) {\n        List<ViewMenuCategoryEntity> viewMenuCategoryEntityList = null;\n        List<UserRoleEntity> userRoleEntityList;\n        if ((userRoleEntityList = userRoleMapper.listAllByUserId(userId)) != null) {\n            List<RoleEntity> roleEntityList;\n            if ((roleEntityList = roleService.listAllByUserRoleList(userRoleEntityList)) != null) {\n                viewMenuCategoryEntityList = new ArrayList<>();\n                for (RoleEntity roleEntity : roleEntityList) {\n                    // 根据父级视图菜单分类和角色 id，获取每个角色所拥有的视图菜单子级分类\n                    viewMenuCategoryEntityList.addAll(viewMenuCategoryMapper.listAllByParentIdAndRoleId(parentId, roleEntity.getId()));\n                }\n            }\n        }\n        return viewMenuCategoryEntityList;\n    }\n\n    @Override\n    public List<ViewMenuCategoryEntity> listAllByParentIdAndRoleId(Long parentId, Long roleId) {\n        return viewMenuCategoryMapper.listAllByParentIdAndRoleId(parentId, roleId);\n    }\n\n    @Override\n    public List<ViewMenuCategoryEntity> listAllByParentId(Long parentId, Long roleId) {\n        List<ViewMenuCategoryEntity> viewPageCategoryEntityList = viewMenuCategoryMapper.listAllByParentId(parentId);\n        List<ViewMenuCategoryEntity> viewMenuCategoryEntityListResult = new ArrayList<>();\n        Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get(\"IS_OR_NOT\", \"IS\"));\n        Integer isOrNotNot = Integer.valueOf((String) dictionaryService.get(\"IS_OR_NOT\", \"NOT\"));\n        if (!viewPageCategoryEntityList.isEmpty()) {\n            for (ViewMenuCategoryEntity viewMenuCategoryEntity : viewPageCategoryEntityList) {\n                if (viewMenuCategoryMapper.getOneByParentId(viewMenuCategoryEntity.getId()) != null) {\n                    viewMenuCategoryEntity.setState(EasyUi.State.CLOSED);\n                }\n                if (roleId != null) {\n                    if (roleViewMenuCategoryMapper.getOneByRoleIdAndViewMenuCategoryId(roleId, viewMenuCategoryEntity.getId()) != null) {\n                        viewMenuCategoryEntity.setIsGranted(isOrNotIs);\n                    } else {\n                        viewMenuCategoryEntity.setIsGranted(isOrNotNot);\n                    }\n                }\n                viewMenuCategoryEntityListResult.add(viewMenuCategoryEntity);\n            }\n        }\n        return viewMenuCategoryEntityListResult;\n    }\n\n    @Override\n    public List<ViewMenuCategoryEntity> listAllParentByRoleId(Long roleId) {\n        return viewMenuCategoryMapper.listAllByParentIdIsNullAndRoleId(roleId);\n    }\n\n    @Override\n    public List<Map<String, Object>> listAllChildViewMenuCategoryAndViewMenuByParentIdAndUserId(Long parentId, Long userId) {\n        List<Map<String, Object>> mapList = new ArrayList<>();\n        List<ViewMenuCategoryEntity> viewMenuCategoryEntityList = null;\n        viewMenuCategoryEntityList = viewMenuCategoryService.listAllChildByParentIdAndUserId(parentId, userId);\n        if (viewMenuCategoryEntityList != null) {\n            for (ViewMenuCategoryEntity viewMenuCategoryEntity : viewMenuCategoryEntityList) {\n                Map<String, Object> map = new HashMap<>(3);\n                map.put(\"id\", viewMenuCategoryEntity.getId());\n                map.put(\"name\", viewMenuCategoryEntity.getName());\n                map.put(\"icon\", viewMenuCategoryEntity.getIcon());\n                mapList.add(map);\n            }\n            List<ViewMenuEntity> viewMenuEntityList = null;\n            viewMenuEntityList = viewMenuService.listAllByUserIdAndMenuCategoryId(userId, parentId);\n            if (viewMenuEntityList != null) {\n                for (ViewMenuEntity viewMenuEntity : viewMenuEntityList) {\n                    Map<String, Object> map = new HashMap<>(4);\n                    map.put(\"id\", viewMenuEntity.getId());\n                    map.put(\"name\", viewMenuEntity.getName());\n                    map.put(\"icon\", viewMenuEntity.getIcon());\n                    map.put(\"url\", viewMenuEntity.getUrl());\n                    mapList.add(map);\n                }\n            }\n        }\n        return mapList;\n    }\n\n    @Override\n    public List<ViewMenuCategoryEntity> listAll() {\n        return viewMenuCategoryMapper.listAll();\n    }\n\n    @Override\n    public List<ViewMenuCategoryEntity> searchAllByName(String name) {\n        return viewMenuCategoryMapper.searchAllByName(name);\n    }\n\n    @Override\n    public List<ViewMenuCategoryEntity> listAllParent(Long roleId) {\n        List<ViewMenuCategoryEntity> viewMenuCategoryEntityList = viewMenuCategoryMapper.listAllByParentIdIsNull();\n        List<ViewMenuCategoryEntity> viewMenuCategoryEntityListResult = new ArrayList<>();\n        Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get(\"IS_OR_NOT\", \"IS\"));\n        Integer isOrNotNot = Integer.valueOf((String) dictionaryService.get(\"IS_OR_NOT\", \"NOT\"));\n        for (ViewMenuCategoryEntity viewMenuCategoryEntity : viewMenuCategoryEntityList) {\n            if (viewMenuCategoryMapper.getOneByParentId(viewMenuCategoryEntity.getId()) != null) {\n                viewMenuCategoryEntity.setState(EasyUi.State.CLOSED);\n            }\n            if (roleId != null) {\n                if (roleViewMenuCategoryMapper.getOneByRoleIdAndViewMenuCategoryId(roleId, viewMenuCategoryEntity.getId()) != null) {\n                    viewMenuCategoryEntity.setIsGranted(isOrNotIs);\n                } else {\n                    viewMenuCategoryEntity.setIsGranted(isOrNotNot);\n                }\n            }\n            viewMenuCategoryEntityListResult.add(viewMenuCategoryEntity);\n        }\n        return viewMenuCategoryEntityListResult;\n    }\n\n    @Override\n    public List<ComboTree> listAllViewMenuCategoryComboTree() {\n        List<ComboTree> comboTreeList = new ArrayList<>(0);\n        List<ViewMenuCategoryEntity> viewMenuCategoryEntityList = viewMenuCategoryMapper.listAll();\n        for (ViewMenuCategoryEntity viewMenuCategoryEntity : viewMenuCategoryEntityList) {\n            ComboTree comboTree = new ComboTree();\n            comboTree.setId(viewMenuCategoryEntity.getId());\n            comboTree.setText(viewMenuCategoryEntity.getName());\n            comboTree.setParentId(viewMenuCategoryEntity.getParentId());\n            comboTreeList.add(comboTree);\n        }\n        return comboTreeList;\n    }\n\n    @Override\n    public List<ComboTree> getViewMenuCategoryChildrenComboTree(long parentId, List<ComboTree> viewMenuCategoryComboTreeList) {\n        List<ComboTree> children = new ArrayList<>(0);\n        for (ComboTree comboTree : viewMenuCategoryComboTreeList) {\n            if (comboTree.getParentId() != null && comboTree.getParentId().equals(parentId)) {\n                children.add(comboTree);\n            }\n        }\n        for (ComboTree child : children) {\n            List<ComboTree> childChildren = getViewMenuCategoryChildrenComboTree(child.getId(), viewMenuCategoryComboTreeList);\n            child.setChildren(childChildren);\n        }\n        if (children.size() == 0) {\n            return null;\n        }\n        return children;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/ViewMenuServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.nimrod.user.entity.RoleEntity;\nimport com.godcheese.nimrod.user.entity.UserRoleEntity;\nimport com.godcheese.nimrod.user.entity.ViewMenuEntity;\nimport com.godcheese.nimrod.user.mapper.RoleViewMenuMapper;\nimport com.godcheese.nimrod.user.mapper.UserRoleMapper;\nimport com.godcheese.nimrod.user.mapper.ViewMenuMapper;\nimport com.godcheese.nimrod.user.service.RoleService;\nimport com.godcheese.nimrod.user.service.ViewMenuService;\nimport com.github.pagehelper.Page;\nimport com.github.pagehelper.PageHelper;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class ViewMenuServiceImpl implements ViewMenuService {\n\n    @Autowired\n    private UserRoleMapper userRoleMapper;\n\n    @Autowired\n    private ViewMenuMapper viewMenuMapper;\n\n    @Autowired\n    private RoleService roleService;\n    @Autowired\n    private RoleViewMenuMapper roleViewMenuMapper;\n    @Autowired\n    private DictionaryService dictionaryService;\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public ViewMenuEntity addOne(ViewMenuEntity viewMenuEntity) {\n        Date date = new Date();\n        viewMenuEntity.setGmtModified(date);\n        viewMenuEntity.setGmtCreated(date);\n        viewMenuMapper.insertOne(viewMenuEntity);\n        return viewMenuEntity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public ViewMenuEntity saveOne(ViewMenuEntity viewMenuEntity) {\n        ViewMenuEntity viewMenuEntity1 = viewMenuMapper.getOne(viewMenuEntity.getId());\n        viewMenuEntity1.setName(viewMenuEntity.getName());\n        viewMenuEntity1.setIcon(viewMenuEntity.getIcon());\n        viewMenuEntity1.setUrl(viewMenuEntity.getUrl());\n        viewMenuEntity1.setViewMenuCategoryId(viewMenuEntity.getViewMenuCategoryId());\n        viewMenuEntity1.setSort(viewMenuEntity.getSort());\n        viewMenuEntity1.setRemark(viewMenuEntity.getRemark());\n        viewMenuEntity1.setGmtModified(new Date());\n        viewMenuMapper.updateOne(viewMenuEntity1);\n        return viewMenuEntity1;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Throwable.class)\n    public int deleteAll(List<Long> idList) {\n        roleViewMenuMapper.deleteAllByViewMenuIdList(idList);\n        return viewMenuMapper.deleteAll(idList);\n    }\n\n    @Override\n    public ViewMenuEntity getOne(Long id) {\n        return viewMenuMapper.getOne(id);\n    }\n\n    /**\n     * 指定用户 id、视图菜单分类 id 获取视图菜单\n     *\n     * @param userId             用户 id\n     * @param viewMenuCategoryId 视图菜单分类 id\n     * @return\n     */\n    @Override\n    public List<ViewMenuEntity> listAllByUserIdAndMenuCategoryId(Long userId, Long viewMenuCategoryId) {\n        List<ViewMenuEntity> viewMenuCategoryEntityList = null;\n        List<UserRoleEntity> userRoleEntityList;\n        if ((userRoleEntityList = userRoleMapper.listAllByUserId(userId)) != null) {\n            List<RoleEntity> roleEntityList;\n            if ((roleEntityList = roleService.listAllByUserRoleList(userRoleEntityList)) != null) {\n                viewMenuCategoryEntityList = new ArrayList<>();\n                for (RoleEntity roleEntity : roleEntityList) {\n                    viewMenuCategoryEntityList.addAll(viewMenuMapper.listAllByViewMenuCategoryIdAndRoleId(viewMenuCategoryId, roleEntity.getId()));\n                }\n            }\n        }\n        return viewMenuCategoryEntityList;\n    }\n\n    @Override\n    public Pagination<ViewMenuEntity> pageAllByViewMenuCategoryId(Integer page, Integer rows, Long viewMenuCategoryId, Long roleId) {\n        Pagination<ViewMenuEntity> pagination = new Pagination<>();\n        PageHelper.startPage(page, rows);\n        Page<ViewMenuEntity> viewMenuEntityPage = viewMenuMapper.pageAllByViewMenuCategoryId(viewMenuCategoryId);\n        List<ViewMenuEntity> viewMenuEntityListResult = new ArrayList<>();\n        List<ViewMenuEntity> viewMenuEntityList = viewMenuEntityPage.getResult();\n        Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get(\"IS_OR_NOT\", \"IS\"));\n        Integer isOrNotNot = Integer.valueOf((String) dictionaryService.get(\"IS_OR_NOT\", \"NOT\"));\n        if (!viewMenuEntityList.isEmpty()) {\n            for (ViewMenuEntity viewMenuEntity : viewMenuEntityList) {\n                if (roleId != null) {\n                    if (roleViewMenuMapper.getOneByRoleIdAndViewMenuId(roleId, viewMenuEntity.getId()) != null) {\n                        viewMenuEntity.setIsGranted(isOrNotIs);\n                    } else {\n                        viewMenuEntity.setIsGranted(isOrNotNot);\n                    }\n                }\n                viewMenuEntityListResult.add(viewMenuEntity);\n            }\n        }\n        pagination.setRows(viewMenuEntityListResult);\n        pagination.setTotal(viewMenuEntityPage.getTotal());\n        return pagination;\n    }\n\n\n//    @Override\n//    public List<AntdVueMenu> listAllAsAntdVueMenuByUserId(Long userId) {\n//        List<AntdVueMenu> vueMenuList = new ArrayList<>(0);\n//        List<AntdVueMenu> vueMenuListResult = new ArrayList<>(0);\n//        List<ViewMenuCategoryEntity> viewMenuCategoryEntityList = null;\n//        List<UserRoleEntity> userRoleEntityList;\n//        List<Long> roleIdList = new ArrayList<>(1);\n//        if ((userRoleEntityList = userRoleMapper.listAllByUserId(userId)) != null) {\n//            List<RoleEntity> roleEntityList;\n//            if ((roleEntityList = roleService.listAllByUserRoleList(userRoleEntityList)) != null) {\n//                for (RoleEntity roleEntity : roleEntityList) {\n//                    roleIdList.add(roleEntity.getId());\n//                }\n//            }\n//        }\n//        viewMenuCategoryEntityList = viewMenuCategoryMapper.listAllByParentIdIsNullAndRoleIdList(roleIdList);\n//        if(viewMenuCategoryEntityList != null) {\n//            for (ViewMenuCategoryEntity viewMenuCategoryEntity : viewMenuCategoryEntityList) {\n//                forEachViewMenuAndViewMenuCategoryByViewMenuCategoryId(viewMenuCategoryEntity.getId(), roleIdList, vueMenuList);\n//                AntdVueMenu vueMenu = new AntdVueMenu();\n//                vueMenu.setId(viewMenuCategoryEntity.getId());\n//                vueMenu.setName(viewMenuCategoryEntity.getName());\n//                vueMenu.setIcon(viewMenuCategoryEntity.getIcon());\n//                vueMenu.setParentId(viewMenuCategoryEntity.getParentId());\n//                vueMenu.setIsCategory(true);\n//                vueMenuList.add(vueMenu);\n//            }\n//        }\n//        for(AntdVueMenu vueMenu : vueMenuList) {\n//            if(vueMenu.getParentId() == null) {\n//                vueMenuListResult.add(vueMenu);\n//            }\n//        }\n//        for(AntdVueMenu vueMenu : vueMenuListResult) {\n//            vueMenu.setChildren(forEachVueMenuByVueMenuParentId(vueMenu.getId(), vueMenuList));\n//        }\n//        return vueMenuListResult;\n//    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/ViewPageApiServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.user.entity.ViewPageApiEntity;\nimport com.godcheese.nimrod.user.mapper.ViewPageApiMapper;\nimport com.godcheese.nimrod.user.service.ViewPageApiService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class ViewPageApiServiceImpl implements ViewPageApiService {\n\n    @Autowired\n    private ViewPageApiMapper viewPageApiMapper;\n\n//    @Override\n//    public Map<String, Object> isAssociatedByViewPageIdAndApiId(Long viewPageId, Long apiId) {\n//        Map<String, Object> data = new HashMap<>(1);\n//        data.put(\"isAssociated\", false);\n//        ViewPageApiEntity viewPageApiEntity = viewPageApiMapper.getOneByViewPageIdAndApiId(viewPageId, apiId);\n//        if (viewPageApiEntity != null) {\n//            data.put(\"isAssociated\", true);\n//        }\n//        return data;\n//    }\n\n    @Override\n    public int associateAllByViewPageIdAndApiIdList(Long viewPageId, List<Long> apiIdList) {\n        List<Long> apiIdList2 = new ArrayList<>();\n        ViewPageApiEntity viewPageApiEntity;\n        for (Long apiId : apiIdList) {\n            viewPageApiEntity = viewPageApiMapper.getOneByViewPageIdAndApiId(viewPageId, apiId);\n            if (viewPageApiEntity == null) {\n                apiIdList2.add(apiId);\n            }\n        }\n        if (!apiIdList2.isEmpty()) {\n            viewPageApiMapper.insertAllByViewPageIdAndApiIdList(viewPageId, apiIdList2);\n        }\n        return apiIdList2.size();\n    }\n\n    @Override\n    public int revokeAssociateAllByViewPageIdAndApiIdList(Long viewPageId, List<Long> apiIdList) {\n        return viewPageApiMapper.deleteAllByViewPageIdAndApiIdList(viewPageId, apiIdList);\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/ViewPageCategoryServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.ComboTree;\nimport com.godcheese.nimrod.common.easyui.EasyUi;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.user.entity.ViewPageCategoryEntity;\nimport com.godcheese.nimrod.user.entity.ViewPageEntity;\nimport com.godcheese.nimrod.user.mapper.RoleAuthorityMapper;\nimport com.godcheese.nimrod.user.mapper.ViewPageCategoryMapper;\nimport com.godcheese.nimrod.user.mapper.ViewPageMapper;\nimport com.godcheese.nimrod.user.service.ViewPageCategoryService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class ViewPageCategoryServiceImpl implements ViewPageCategoryService {\n\n    @Autowired\n    private ViewPageCategoryMapper viewPageCategoryMapper;\n    @Autowired\n    private ViewPageMapper viewPageMapper;\n    @Autowired\n    private FailureEntity failureEntity;\n    @Autowired\n    private RoleAuthorityMapper roleAuthorityMapper;\n\n    @Override\n    public ViewPageCategoryEntity addOne(ViewPageCategoryEntity viewPageCategoryEntity) {\n        Date date = new Date();\n        viewPageCategoryEntity.setGmtModified(date);\n        viewPageCategoryEntity.setGmtCreated(date);\n        viewPageCategoryMapper.insertOne(viewPageCategoryEntity);\n        return viewPageCategoryEntity;\n    }\n\n    @Override\n    public ViewPageCategoryEntity saveOne(ViewPageCategoryEntity viewPageCategoryEntity) {\n        ViewPageCategoryEntity viewPageCategoryEntity1 = viewPageCategoryMapper.getOne(viewPageCategoryEntity.getId());\n        viewPageCategoryEntity1.setName(viewPageCategoryEntity.getName());\n        viewPageCategoryEntity1.setParentId(viewPageCategoryEntity.getParentId());\n        viewPageCategoryEntity1.setSort(viewPageCategoryEntity.getSort());\n        viewPageCategoryEntity1.setRemark(viewPageCategoryEntity.getRemark());\n        viewPageCategoryEntity1.setGmtModified(new Date());\n        viewPageCategoryMapper.updateOne(viewPageCategoryEntity1);\n        return viewPageCategoryEntity1;\n    }\n\n    @Override\n    public int deleteAll(List<Long> idList) throws BaseResponseException {\n        int result = 0;\n        for (Long id : idList) {\n            ViewPageCategoryEntity viewPageCategoryEntity = viewPageCategoryMapper.getOneByParentId(id);\n            if (viewPageCategoryEntity != null) {\n                throw new BaseResponseException(failureEntity.i18n(\"view_page_category.delete_fail_has_children_category\"));\n            }\n            ViewPageEntity viewPageEntity = viewPageMapper.getOneByViewPageCategoryId(id);\n            if (viewPageEntity != null) {\n                throw new BaseResponseException(failureEntity.i18n(\"view_page_category.delete_fail_has_view_page\"));\n            }\n            viewPageCategoryMapper.deleteOne(id);\n            result++;\n        }\n        return result;\n    }\n\n    @Override\n    public ViewPageCategoryEntity getOne(Long id) {\n        return viewPageCategoryMapper.getOne(id);\n    }\n\n    @Override\n    public List<ViewPageCategoryEntity> listAllParent() {\n        List<ViewPageCategoryEntity> viewPageCategoryEntityList = viewPageCategoryMapper.listAllByParentIdIsNull();\n        List<ViewPageCategoryEntity> viewPageCategoryEntityListResult = new ArrayList<>();\n        for (ViewPageCategoryEntity viewPageCategoryEntity : viewPageCategoryEntityList) {\n            if (viewPageCategoryMapper.getOneByParentId(viewPageCategoryEntity.getId()) != null) {\n                viewPageCategoryEntity.setState(EasyUi.State.CLOSED);\n            }\n            viewPageCategoryEntityListResult.add(viewPageCategoryEntity);\n        }\n        return viewPageCategoryEntityListResult;\n    }\n\n    @Override\n    public List<ViewPageCategoryEntity> listAllByParentId(Long parentId) {\n        List<ViewPageCategoryEntity> viewPageCategoryEntityList = viewPageCategoryMapper.listAllByParentId(parentId);\n        List<ViewPageCategoryEntity> viewPageCategoryEntityListResult = new ArrayList<>();\n        for (ViewPageCategoryEntity viewPageCategoryEntity : viewPageCategoryEntityList) {\n            if (viewPageCategoryMapper.getOneByParentId(viewPageCategoryEntity.getId()) != null) {\n                viewPageCategoryEntity.setState(EasyUi.State.CLOSED);\n            }\n            viewPageCategoryEntityListResult.add(viewPageCategoryEntity);\n        }\n        return viewPageCategoryEntityListResult;\n    }\n\n    @Override\n    public List<ComboTree> listAllViewPageCategoryComboTree() {\n        List<ComboTree> comboTreeList = new ArrayList<>(0);\n        List<ViewPageCategoryEntity> viewPageCategoryEntityList = viewPageCategoryMapper.listAll();\n        for (ViewPageCategoryEntity viewPageCategoryEntity : viewPageCategoryEntityList) {\n            ComboTree comboTree = new ComboTree();\n            comboTree.setId(viewPageCategoryEntity.getId());\n            comboTree.setText(viewPageCategoryEntity.getName());\n            comboTree.setParentId(viewPageCategoryEntity.getParentId());\n            comboTreeList.add(comboTree);\n        }\n        return comboTreeList;\n    }\n\n    @Override\n    public List<ComboTree> getViewPageCategoryChildrenComboTree(long parentId, List<ComboTree> viewPageCategoryComboTreeList) {\n        List<ComboTree> children = new ArrayList<>(0);\n        for (ComboTree comboTree : viewPageCategoryComboTreeList) {\n            if (comboTree.getParentId() != null && comboTree.getParentId().equals(parentId)) {\n                children.add(comboTree);\n            }\n        }\n        for (ComboTree child : children) {\n            List<ComboTree> childChildren = getViewPageCategoryChildrenComboTree(child.getId(), viewPageCategoryComboTreeList);\n            child.setChildren(childChildren);\n        }\n        if (children.size() == 0) {\n            return null;\n        }\n        return children;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/ViewPageComponentApiServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.user.entity.ViewPageComponentApiEntity;\nimport com.godcheese.nimrod.user.mapper.ViewPageComponentApiMapper;\nimport com.godcheese.nimrod.user.service.ViewPageComponentApiService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class ViewPageComponentApiServiceImpl implements ViewPageComponentApiService {\n\n    @Autowired\n    private ViewPageComponentApiMapper viewPageComponentApiMapper;\n\n//    @Override\n//    public Map<String, Object> isAssociatedByViewPageComponentIdAndApiId(Long viewPageComponentId, Long apiId) {\n//        Map<String, Object> data = new HashMap<>(1);\n//        data.put(\"isAssociated\", false);\n//        ViewPageComponentApiEntity viewPageComponentApiEntity = viewPageComponentApiMapper.getOneByViewPageComponentIdAndApiId(viewPageComponentId, apiId);\n//\n//        if (viewPageComponentApiEntity != null) {\n//            data.put(\"isAssociated\", true);\n//        }\n//        return data;\n//    }\n\n    @Override\n    public int associateAllByViewPageComponentIdAndApiIdList(Long viewPageComponentId, List<Long> apiIdList) {\n        List<Long> apiIdList2 = new ArrayList<>();\n        ViewPageComponentApiEntity viewPageComponentApiEntity;\n        for (Long apiId : apiIdList) {\n            viewPageComponentApiEntity = viewPageComponentApiMapper.getOneByViewPageComponentIdAndApiId(viewPageComponentId, apiId);\n            if (viewPageComponentApiEntity == null) {\n                apiIdList2.add(apiId);\n            }\n        }\n        if (!apiIdList2.isEmpty()) {\n            viewPageComponentApiMapper.insertAllByViewPageComponentIdAndApiIdList(viewPageComponentId, apiIdList2);\n        }\n        return apiIdList2.size();\n    }\n\n    @Override\n    public int revokeAssociateAllByViewPageComponentIdAndApiIdList(Long viewPageComponentId, List<Long> apiIdList) {\n        return viewPageComponentApiMapper.deleteAllByViewPageComponentIdAndApiIdList(viewPageComponentId, apiIdList);\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/ViewPageComponentServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.nimrod.user.entity.ViewPageComponentEntity;\nimport com.godcheese.nimrod.user.mapper.RoleAuthorityMapper;\nimport com.godcheese.nimrod.user.mapper.ViewPageComponentMapper;\nimport com.godcheese.nimrod.user.service.ViewPageComponentService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport com.github.pagehelper.Page;\nimport com.github.pagehelper.PageHelper;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class ViewPageComponentServiceImpl implements ViewPageComponentService {\n\n    @Autowired\n    private ViewPageComponentMapper viewPageComponentMapper;\n    @Autowired\n    private FailureEntity failureEntity;\n    @Autowired\n    private DictionaryService dictionaryService;\n    @Autowired\n    private RoleAuthorityMapper roleAuthorityMapper;\n\n    @Override\n    public ViewPageComponentEntity addOne(ViewPageComponentEntity viewPageComponentEntity) throws BaseResponseException {\n        Date date = new Date();\n        String authority = viewPageComponentEntity.getAuthority().toUpperCase();\n        if (viewPageComponentMapper.getOneByAuthority(authority) != null) {\n            throw new BaseResponseException(failureEntity.i18n(\"view_page_component.add_fail_authority_exists\"));\n        }\n        viewPageComponentEntity.setAuthority(authority);\n        viewPageComponentEntity.setGmtModified(date);\n        viewPageComponentEntity.setGmtCreated(date);\n        viewPageComponentMapper.insertOne(viewPageComponentEntity);\n        return viewPageComponentEntity;\n    }\n\n    @Override\n    public ViewPageComponentEntity saveOne(ViewPageComponentEntity viewPageComponentEntity) throws BaseResponseException {\n        ViewPageComponentEntity viewPageComponentEntity1 = viewPageComponentMapper.getOne(viewPageComponentEntity.getId());\n        String authority = viewPageComponentEntity.getAuthority().toUpperCase();\n        ViewPageComponentEntity viewPageComponentEntity2 = viewPageComponentMapper.getOneByAuthority(authority);\n        if (viewPageComponentEntity2 != null && !viewPageComponentEntity2.getId().equals(viewPageComponentEntity.getId())) {\n            throw new BaseResponseException(failureEntity.i18n(\"view_page_component.save_fail_authority_exists\"));\n        }\n        viewPageComponentEntity1.setViewPageComponentType(viewPageComponentEntity.getViewPageComponentType());\n        viewPageComponentEntity1.setName(viewPageComponentEntity.getName());\n        viewPageComponentEntity1.setAuthority(authority);\n        viewPageComponentEntity1.setSort(viewPageComponentEntity.getSort());\n        viewPageComponentEntity1.setRemark(viewPageComponentEntity.getRemark());\n        viewPageComponentEntity1.setGmtModified(new Date());\n        viewPageComponentMapper.updateOne(viewPageComponentEntity1);\n        return viewPageComponentEntity1;\n    }\n\n    @Override\n    public int deleteAll(List<Long> idList) {\n        return viewPageComponentMapper.deleteAll(idList);\n    }\n\n    @Override\n    public ViewPageComponentEntity getOne(Long id) {\n        return viewPageComponentMapper.getOne(id);\n    }\n\n    @Override\n    public Pagination<ViewPageComponentEntity> pageAllByViewPageId(Integer page, Integer rows, Long viewPageId, Long roleId) {\n        Pagination<ViewPageComponentEntity> pagination = new Pagination<>();\n        PageHelper.startPage(page, rows);\n        Page<ViewPageComponentEntity> viewPageComponentEntityPage = viewPageComponentMapper.pageAllByViewPageId(viewPageId);\n        List<ViewPageComponentEntity> viewPageComponentEntityList = viewPageComponentEntityPage.getResult();\n        List<ViewPageComponentEntity> viewPageComponentEntityListResult = new ArrayList<>();\n        Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get(\"IS_OR_NOT\", \"IS\"));\n        Integer isOrNotNot = Integer.valueOf((String) dictionaryService.get(\"IS_OR_NOT\", \"NOT\"));\n        if (!viewPageComponentEntityList.isEmpty()) {\n            for (ViewPageComponentEntity viewPageComponentEntity : viewPageComponentEntityList) {\n\n                if (roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, viewPageComponentEntity.getAuthority()) != null) {\n                    viewPageComponentEntity.setIsGranted(isOrNotIs);\n                } else {\n                    viewPageComponentEntity.setIsGranted(isOrNotNot);\n                }\n                viewPageComponentEntityListResult.add(viewPageComponentEntity);\n            }\n        }\n        pagination.setRows(viewPageComponentEntityListResult);\n        pagination.setTotal(viewPageComponentEntityPage.getTotal());\n        return pagination;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/godcheese/nimrod/user/service/impl/ViewPageServiceImpl.java",
    "content": "package com.godcheese.nimrod.user.service.impl;\n\nimport com.godcheese.nimrod.common.easyui.Pagination;\nimport com.godcheese.nimrod.common.others.FailureEntity;\nimport com.godcheese.nimrod.system.service.DictionaryService;\nimport com.godcheese.nimrod.user.entity.ViewPageEntity;\nimport com.godcheese.nimrod.user.mapper.RoleAuthorityMapper;\nimport com.godcheese.nimrod.user.mapper.ViewPageMapper;\nimport com.godcheese.nimrod.user.service.ViewPageService;\nimport com.godcheese.tile.web.exception.BaseResponseException;\nimport com.github.pagehelper.Page;\nimport com.github.pagehelper.PageHelper;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author godcheese [godcheese@outlook.com]\n * @date 2018-02-22\n */\n@Service\npublic class ViewPageServiceImpl implements ViewPageService {\n\n    @Autowired\n    private ViewPageMapper viewPageMapper;\n    @Autowired\n    private FailureEntity failureEntity;\n    @Autowired\n    private RoleAuthorityMapper roleAuthorityMapper;\n    @Autowired\n    private DictionaryService dictionaryService;\n\n    @Override\n    public ViewPageEntity addOne(ViewPageEntity viewPageEntity) throws BaseResponseException {\n        Date date = new Date();\n        String authority = viewPageEntity.getAuthority().toUpperCase();\n        ViewPageEntity viewPageEntity2 = viewPageMapper.getOneByAuthority(authority);\n        if (viewPageEntity2 != null) {\n            throw new BaseResponseException(failureEntity.i18n(\"view_page.add_fail_authority_exists\"));\n        }\n        viewPageEntity.setAuthority(authority);\n        viewPageEntity.setGmtModified(date);\n        viewPageEntity.setGmtCreated(date);\n        viewPageMapper.insertOne(viewPageEntity);\n        return viewPageEntity;\n    }\n\n    @Override\n    public ViewPageEntity saveOne(ViewPageEntity viewPageEntity) throws BaseResponseException {\n        ViewPageEntity viewPageEntity1 = viewPageMapper.getOne(viewPageEntity.getId());\n        Date date = new Date();\n        String authority = viewPageEntity.getAuthority().toUpperCase();\n        ViewPageEntity viewPageEntity2 = viewPageMapper.getOneByAuthority(authority);\n        if (viewPageEntity2 != null && !viewPageEntity2.getId().equals(viewPageEntity.getId())) {\n            throw new BaseResponseException(failureEntity.i18n(\"view_page.save_fail_authority_exists\"));\n        }\n        viewPageEntity1.setName(viewPageEntity.getName());\n        viewPageEntity1.setUrl(viewPageEntity.getUrl());\n        viewPageEntity1.setAuthority(authority);\n        viewPageEntity1.setViewPageCategoryId(viewPageEntity.getViewPageCategoryId());\n        viewPageEntity1.setSort(viewPageEntity.getSort());\n        viewPageEntity1.setRemark(viewPageEntity.getRemark());\n        viewPageEntity1.setGmtModified(date);\n        viewPageMapper.updateOne(viewPageEntity1);\n        return viewPageEntity1;\n    }\n\n    @Override\n    public int deleteAll(List<Long> idList) {\n        return viewPageMapper.deleteAll(idList);\n    }\n\n    @Override\n    public ViewPageEntity getOne(Long id) {\n        return viewPageMapper.getOne(id);\n    }\n\n    @Override\n    public Pagination<ViewPageEntity> pageAllByViewPageCategoryId(Integer page, Integer rows, Long viewPageCategoryId, Long roleId) {\n        Pagination<ViewPageEntity> pagination = new Pagination<>();\n        //        if(sorterField != null && !\"\".equals(sorterField) && sorterOrder != null && !\"\".equals(sorterOrder)) {\n//            sorterField = StringUtil.camelToUnderline(sorterField);\n//            String orderBy = sorterField + \" \" + sorterOrder;\n//            PageHelper.startPage(page, rows, orderBy);\n//        } else {\n        PageHelper.startPage(page, rows);\n//        }\n        Page<ViewPageEntity> viewPageEntityPage = viewPageMapper.pageAllByViewPageCategoryId(viewPageCategoryId);\n        List<ViewPageEntity> viewPageEntityList = viewPageEntityPage.getResult();\n        List<ViewPageEntity> viewPageEntityListResult = new ArrayList<>();\n        Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get(\"IS_OR_NOT\", \"IS\"));\n        Integer isOrNotNot = Integer.valueOf((String) dictionaryService.get(\"IS_OR_NOT\", \"NOT\"));\n        if (!viewPageEntityList.isEmpty()) {\n            for (ViewPageEntity viewPageEntity : viewPageEntityList) {\n                if (roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, viewPageEntity.getAuthority()) != null) {\n                    viewPageEntity.setIsGranted(isOrNotIs);\n                } else {\n                    viewPageEntity.setIsGranted(isOrNotNot);\n                }\n                viewPageEntityListResult.add(viewPageEntity);\n            }\n        }\n        pagination.setRows(viewPageEntityListResult);\n        pagination.setTotal(viewPageEntityPage.getTotal());\n        return pagination;\n    }\n}\n"
  },
  {
    "path": "src/main/resources/application-dev.properties",
    "content": "# App\napp.name=nimrod\napp.version=${project.version}\napp.system-admin-role=SYSTEM_ADMIN\n#app.permit-url=/api/system/dictionary/list_all_by_key/IS_OR_NOT\napp.permit-url=/api/system/system_info\n# Server\nserver.port=8083\nserver.servlet.context-path=/nimrod\nserver.error.path=/500\nserver.tomcat.mbeanregistry.enabled=true\n# Database\nspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver\nspring.datasource.type=com.alibaba.druid.pool.DruidDataSource\nspring.datasource.url=jdbc:mysql://localhost:3306/nimrod?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8\nspring.datasource.username=nimrod\nspring.datasource.password=123456\n# Druid\nspring.datasource.druid.stat-view-servlet.enabled=true\nspring.datasource.druid.stat-view-servlet.url-pattern=/druid/*\nspring.datasource.druid.stat-view-servlet.allow=null\nspring.datasource.druid.stat-view-servlet.reset-enable=true\nspring.datasource.druid.filter.wall.config.multi-statement-allow=true\nspring.datasource.druid.validation-query=SELECT 1\nspring.datasource.druid.web-stat-filter.enabled=true\nspring.datasource.druid.filter.stat.log-slow-sql=true\nspring.datasource.druid.filter.stat.enabled=true\nspring.datasource.druid.filter.wall.enabled=true\nspring.datasource.druid.filters=stat,wall\nspring.datasource.druid.filter.wall.config.comment-allow=true\n# MyBatis\n# \\u5168\\u5C40\\u6620\\u5C04\\u5668\\u542F\\u7528\\u7F13\\u5B58\nmybatis.configuration.cache-enabled=true\n# \\u67E5\\u8BE2\\u65F6\\uFF0C\\u5173\\u95ED\\u5173\\u8054\\u5BF9\\u8C61\\u53CA\\u65F6\\u52A0\\u8F7D\\u4EE5\\u63D0\\u9AD8\\u6027\\u80FD\nmybatis.configuration.lazy-loading-enabled=true\n# \\u8BBE\\u7F6E\\u5173\\u8054\\u5BF9\\u8C61\\u52A0\\u8F7D\\u7684\\u5F62\\u6001\\uFF0C\\u6B64\\u5904\\u4E3A\\u6309\\u9700\\u52A0\\u8F7D\\u5B57\\u6BB5\\uFF08\\u52A0\\u8F7D\\u5B57\\u6BB5\\u7531 SQL \\u6307\\u5B9A\\uFF09\\uFF0C\\u4E0D\\u4F1A\\u52A0\\u8F7D\\u5173\\u8054\\u8868\\u7684\\u6240\\u6709\\u5B57\\u6BB5\\uFF0C\\u4EE5\\u63D0\\u9AD8\\u6027\\u80FD\nmybatis.configuration.aggressive-lazy-loading=true\n# \\u5BF9\\u4E8E\\u4F4D\\u7F6E\\u7684 SQL \\u67E5\\u8BE2\\uFF0C\\u5141\\u8BB8\\u8FD4\\u56DE\\u4E0D\\u540C\\u7684\\u7ED3\\u679C\\u96C6\\u4EE5\\u8FBE\\u5230\\u901A\\u7528\\u7684\\u6548\\u679C\nmybatis.configuration.multiple-result-sets-enabled=true\n# \\u5141\\u8BB8\\u4F7F\\u7528\\u5217\\u6807\\u7B7E\\u4EE3\\u66FF\\u5217\\u540D\\uFF0C\\u5373\\u5141\\u8BB8\\u4F7F\\u7528\\u522B\\u540D\\u6765\\u4EE3\\u66FF\\u5217\\u540D\nmybatis.configuration.use-column-label=true\n# \\u5141\\u8BB8\\u4F7F\\u7528\\u81EA\\u5B9A\\u4E49\\u7684\\u4E3B\\u952E\\u503C\\uFF08\\u6BD4\\u5982\\u7531\\u7A0B\\u5E8F\\u751F\\u6210\\u7684 UUID 32 \\u4F4D\\u7F16\\u7801\\u4F5C\\u4E3A\\u952E\\u503C\\uFF09\\uFF0C\\u6570\\u636E\\u8868\\u7684 pk \\u751F\\u6210\\u7B56\\u7565\\u5C06\\u88AB\\u8986\\u76D6\nmybatis.configuration.use-generated-keys=true\n# \\u7ED9\\u4E88\\u88AB\\u5D4C\\u5957\\u7684 resultMap \\u4EE5\\u5B57\\u6BB5-\\u5C5E\\u6027\\u7684\\u6620\\u5C04\\u652F\\u6301\nmybatis.configuration.auto-mapping-behavior=partial\n# \\u5BF9\\u4E8E\\u6279\\u91CF\\u66F4\\u65B0\\u64CD\\u4F5C\\u7F13\\u5B58 SQL \\u4EE5\\u63D0\\u9AD8\\u6027\\u80FD\nmybatis.configuration.default-executor-type=reuse\n# \\u6570\\u636E\\u5E93\\u8D85\\u8FC7 25000 \\u79D2\\u4ECD\\u672A\\u54CD\\u5E94\\u5219\\u8D85\\u65F6\nmybatis.configuration.default-statement-timeout=25000\nmybatis.configuration.jdbc-type-for-null=null\n# \\u6253\\u5370\\u67E5\\u8BE2\\u8BED\\u53E5\nmybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl\n# PageHelper\npagehelper.helper-dialect=mysql\npagehelper.reasonable=true\npagehelper.support-methods-arguments=true\n# Quartz\nspring.quartz.job-store-type=jdbc\nspring.quartz.startup-delay=5s\nspring.quartz.properties.org.quartz.jobListener.NAME.class=com.godcheese.nimrod.quartz.listener.GlobalJobListener\n# Spring\nspring.application.name=${app.name}\n# Jackson\nspring.jackson.date-format=yyyy-MM-dd HH:mm:ss\nspring.jackson.locale=zh_CN\nspring.jackson.time-zone=GMT+8\n# Thymeleaf\nspring.thymeleaf.encoding=UTF-8\nspring.thymeleaf.cache=false\nspring.thymeleaf.prefix=classpath:/templates/\nspring.thymeleaf.suffix=.html\nspring.thymeleaf.servlet.content-type=text/html\nspring.thymeleaf.mode=HTML\n# Logback\nlog.dir=./logs/${app.name}\nlog.max-history=30\nlog.max-file-size=10MB\nlog.total-size-cap=2GB"
  },
  {
    "path": "src/main/resources/application-prod.properties",
    "content": "# App\napp.name=nimrod\napp.version=${project.version}\napp.system-admin-role=SYSTEM_ADMIN\n#app.permit-url=/api/system/dictionary/list_all_by_key/IS_OR_NOT\napp.permit-url=/api/system/system_info\n# Server\nserver.port=8083\nserver.servlet.context-path=/nimrod\nserver.error.path=/500\nserver.tomcat.mbeanregistry.enabled=true\n# Database\nspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver\nspring.datasource.type=com.alibaba.druid.pool.DruidDataSource\nspring.datasource.url=jdbc:mysql://localhost:3306/nimrod?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8\nspring.datasource.username=nimrod\nspring.datasource.password=123456\n# Druid\nspring.datasource.druid.stat-view-servlet.enabled=true\nspring.datasource.druid.stat-view-servlet.url-pattern=/druid/*\nspring.datasource.druid.stat-view-servlet.allow=null\nspring.datasource.druid.stat-view-servlet.reset-enable=true\nspring.datasource.druid.filter.wall.config.multi-statement-allow=true\nspring.datasource.druid.validation-query=SELECT 1\nspring.datasource.druid.web-stat-filter.enabled=true\nspring.datasource.druid.filter.stat.log-slow-sql=true\nspring.datasource.druid.filter.stat.enabled=true\nspring.datasource.druid.filter.wall.enabled=true\nspring.datasource.druid.filters=stat,wall\nspring.datasource.druid.filter.wall.config.comment-allow=true\n# MyBatis\n# \\u5168\\u5C40\\u6620\\u5C04\\u5668\\u542F\\u7528\\u7F13\\u5B58\nmybatis.configuration.cache-enabled=true\n# \\u67E5\\u8BE2\\u65F6\\uFF0C\\u5173\\u95ED\\u5173\\u8054\\u5BF9\\u8C61\\u53CA\\u65F6\\u52A0\\u8F7D\\u4EE5\\u63D0\\u9AD8\\u6027\\u80FD\nmybatis.configuration.lazy-loading-enabled=true\n# \\u8BBE\\u7F6E\\u5173\\u8054\\u5BF9\\u8C61\\u52A0\\u8F7D\\u7684\\u5F62\\u6001\\uFF0C\\u6B64\\u5904\\u4E3A\\u6309\\u9700\\u52A0\\u8F7D\\u5B57\\u6BB5\\uFF08\\u52A0\\u8F7D\\u5B57\\u6BB5\\u7531 SQL \\u6307\\u5B9A\\uFF09\\uFF0C\\u4E0D\\u4F1A\\u52A0\\u8F7D\\u5173\\u8054\\u8868\\u7684\\u6240\\u6709\\u5B57\\u6BB5\\uFF0C\\u4EE5\\u63D0\\u9AD8\\u6027\\u80FD\nmybatis.configuration.aggressive-lazy-loading=true\n# \\u5BF9\\u4E8E\\u4F4D\\u7F6E\\u7684 SQL \\u67E5\\u8BE2\\uFF0C\\u5141\\u8BB8\\u8FD4\\u56DE\\u4E0D\\u540C\\u7684\\u7ED3\\u679C\\u96C6\\u4EE5\\u8FBE\\u5230\\u901A\\u7528\\u7684\\u6548\\u679C\nmybatis.configuration.multiple-result-sets-enabled=true\n# \\u5141\\u8BB8\\u4F7F\\u7528\\u5217\\u6807\\u7B7E\\u4EE3\\u66FF\\u5217\\u540D\\uFF0C\\u5373\\u5141\\u8BB8\\u4F7F\\u7528\\u522B\\u540D\\u6765\\u4EE3\\u66FF\\u5217\\u540D\nmybatis.configuration.use-column-label=true\n# \\u5141\\u8BB8\\u4F7F\\u7528\\u81EA\\u5B9A\\u4E49\\u7684\\u4E3B\\u952E\\u503C\\uFF08\\u6BD4\\u5982\\u7531\\u7A0B\\u5E8F\\u751F\\u6210\\u7684 UUID 32 \\u4F4D\\u7F16\\u7801\\u4F5C\\u4E3A\\u952E\\u503C\\uFF09\\uFF0C\\u6570\\u636E\\u8868\\u7684 pk \\u751F\\u6210\\u7B56\\u7565\\u5C06\\u88AB\\u8986\\u76D6\nmybatis.configuration.use-generated-keys=true\n# \\u7ED9\\u4E88\\u88AB\\u5D4C\\u5957\\u7684 resultMap \\u4EE5\\u5B57\\u6BB5-\\u5C5E\\u6027\\u7684\\u6620\\u5C04\\u652F\\u6301\nmybatis.configuration.auto-mapping-behavior=partial\n# \\u5BF9\\u4E8E\\u6279\\u91CF\\u66F4\\u65B0\\u64CD\\u4F5C\\u7F13\\u5B58 SQL \\u4EE5\\u63D0\\u9AD8\\u6027\\u80FD\nmybatis.configuration.default-executor-type=reuse\n# \\u6570\\u636E\\u5E93\\u8D85\\u8FC7 25000 \\u79D2\\u4ECD\\u672A\\u54CD\\u5E94\\u5219\\u8D85\\u65F6\nmybatis.configuration.default-statement-timeout=25000\nmybatis.configuration.jdbc-type-for-null=null\n# \\u6253\\u5370\\u67E5\\u8BE2\\u8BED\\u53E5\nmybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl\n# PageHelper\npagehelper.helper-dialect=mysql\npagehelper.reasonable=true\npagehelper.support-methods-arguments=true\n# Quartz\nspring.quartz.job-store-type=jdbc\nspring.quartz.startup-delay=5s\nspring.quartz.properties.org.quartz.jobListener.NAME.class=com.godcheese.nimrod.quartz.listener.GlobalJobListener\n# Spring\nspring.application.name=${app.name}\n# Jackson\nspring.jackson.date-format=yyyy-MM-dd HH:mm:ss\nspring.jackson.locale=zh_CN\nspring.jackson.time-zone=GMT+8\n# Thymeleaf\nspring.thymeleaf.encoding=UTF-8\nspring.thymeleaf.cache=false\nspring.thymeleaf.prefix=classpath:/templates/\nspring.thymeleaf.suffix=.html\nspring.thymeleaf.servlet.content-type=text/html\nspring.thymeleaf.mode=HTML\n# Logback\nlog.dir=./logs/${app.name}\nlog.max-history=30\nlog.max-file-size=10MB\nlog.total-size-cap=2GB"
  },
  {
    "path": "src/main/resources/application.properties",
    "content": "spring.profiles.active=dev"
  },
  {
    "path": "src/main/resources/i18n/zh_cn.properties",
    "content": "user.login_fail_account_or_password_error.message=\\u767B\\u5F55\\u5931\\u8D25\\uFF0C\\u8D26\\u53F7\\u6216\\u5BC6\\u7801\\u9519\\u8BEF\nuser.login_fail_account_or_password_error.code=404\nuser.login_fail_account_is_not_enable.message=\\u767B\\u5F55\\u5931\\u8D25\\uFF0C\\u8D26\\u53F7\\u672A\\u542F\\u7528\nuser.login_fail_account_is_not_enable.code=0\nuser.login_fail_account_deleted.message=\\u767B\\u5F55\\u5931\\u8D25\\uFF0C\\u8D26\\u53F7\\u4E0D\\u5B58\\u5728\nuser.login_fail_account_deleted.code=0\nuser.full_authentication_is_required_to_access_this_resource.message=\\u8BBF\\u95EE\\u6B64\\u8D44\\u6E90\\u9700\\u8981\\u5B8C\\u5168\\u8EAB\\u4EFD\\u9A8C\\u8BC1\nuser.full_authentication_is_required_to_access_this_resource.code=401\nuser.logout_fail.message=\\u6CE8\\u9500\\u5931\\u8D25\nuser.add_fail.message=\\u65B0\\u589E\\u5931\\u8D25\nuser.delete_fail.message=\\u5220\\u9664\\u5931\\u8D25\nuser.save_fail.message=\\u4FDD\\u5B58\\u5931\\u8D25\nuser.username_exists.message=\\u8BE5\\u7528\\u6237\\u540D\\u5DF2\\u5B58\\u5728\nuser.new_password_and_confirm_new_password_error.message=\\u65B0\\u5BC6\\u7801\\u4E0E\\u91CD\\u8F93\\u5BC6\\u7801\\u4E0D\\u76F8\\u540C\nuser.original_password_error.message=\\u539F\\u5BC6\\u7801\\u9519\\u8BEF\nuser.new_password_must_length.message=\\u65B0\\u5BC6\\u7801\\u957F\\u5EA6\\u4E3A6-32\\u4E2A\\u5B57\\u7B26\nuser.same_as_the_original_password.message=\\u65B0\\u5BC6\\u7801\\u4E0E\\u539F\\u5BC6\\u7801\\u76F8\\u540C\\uFF0C\\u65E0\\u9700\\u66F4\\u6539\n#user.save_profile_fail_password_error.message=\\u4FDD\\u5B58\\u5931\\u8D25\\uFF0C\\u5BC6\\u7801\\u9519\\u8BEF\nuser_verify_code.send_fail.message=\\u9A8C\\u8BC1\\u7801\\u53D1\\u9001\\u5931\\u8D25\\uFF0C\\u8BF7\\u7A0D\\u540E\\u91CD\\u8BD5\nuser_verify_code.verification_code_error.message=\\u9A8C\\u8BC1\\u7801\\u9519\\u8BEF\nuser_verify_code.too_frequent_operation.message=\\u64CD\\u4F5C\\u8FC7\\u4E8E\\u9891\\u7E41\\uFF0C\\u8BF7\\u572860\\u79D2\\u540E\\u91CD\\u8BD5\nuser_verify_code.verification_code_error_or_expires.message=\\u9A8C\\u8BC1\\u7801\\u9519\\u8BEF\\u6216\\u5DF2\\u8FC7\\u671F\\uFF0C\\u8BF7\\u91CD\\u65B0\\u53D1\\u9001\napi.add_fail_authority_exists.message=\\u65B0\\u589E\\u5931\\u8D25\\uFF0C\\u6743\\u9650\\uFF08authority\\uFF09\\u5DF2\\u5B58\\u5728\napi_category.delete_fail_has_children_category.message=\\u5220\\u9664\\u5931\\u8D25\\uFF0C\\u8BE5\\u5206\\u7C7B\\u4E0B\\u5B58\\u5728\\u5B50\\u7EA7\\u5206\\u7C7B\napi_category.delete_fail_has_children_category.code=\napi_category.delete_fail_has_api.message=\\u5220\\u9664\\u5931\\u8D25\\uFF0C\\u8BE5\\u5206\\u7C7B\\u4E0B\\u5B58\\u5728 API\napi_category.add_fail.message=\\u65B0\\u589E\\u5931\\u8D25\\uFF0C\\u6743\\u9650\\uFF08authority\\uFF09\\u5DF2\\u5B58\\u5728\napi_category.save_fail_do_not_save_self_api_category.message=\\u4FDD\\u5B58\\u5931\\u8D25\\uFF0C\\u4E0D\\u80FD\\u5C06\\u7236\\u7EA7\\u5206\\u7C7B\\u4FDD\\u5B58\\u4E3A\\u672C\\u8EAB\ndictionary.import_fail.message=\\u6570\\u636E\\u5B57\\u5178\\u5BFC\\u5165\\u5931\\u8D25\ndictionary_category.save_fail_do_not_save_self_dictionary_category.message=\\u4FDD\\u5B58\\u5931\\u8D25\\uFF0C\\u4E0D\\u80FD\\u5C06\\u7236\\u7EA7\\u5206\\u7C7B\\u4FDD\\u5B58\\u4E3A\\u672C\\u8EAB\ndictionary_category.delete_fail_has_children_category.message=\\u5220\\u9664\\u5931\\u8D25\\uFF0C\\u8BE5\\u5206\\u7C7B\\u4E0B\\u5B58\\u5728\\u5B50\\u7EA7\\u5206\\u7C7B\ndictionary_category.delete_fail_has_dictionary.message=\\u5220\\u9664\\u5931\\u8D25\\uFF0C\\u8BE5\\u5206\\u7C7B\\u4E0B\\u5B58\\u5728\\u5B57\\u5178\nview_page_category.delete_fail_has_children_category.message=\\u5220\\u9664\\u5931\\u8D25\\uFF0C\\u8BE5\\u5206\\u7C7B\\u4E0B\\u5B58\\u5728\\u5B50\\u7EA7\\u5206\\u7C7B\nview_page_category.delete_fail_has_view_page.message=\\u5220\\u9664\\u5931\\u8D25\\uFF0C\\u8BE5\\u5206\\u7C7B\\u4E0B\\u5B58\\u5728\\u9875\\u9762\nview_page_component.add_fail_authority_exists.message=\\u65B0\\u589E\\u5931\\u8D25\\uFF0C\\u6743\\u9650\\uFF08authority\\uFF09\\u5DF2\\u5B58\\u5728\nview_page_component.save_fail_authority_exists.message=\\u4FDD\\u5B58\\u5931\\u8D25\\uFF0C\\u6743\\u9650\\uFF08authority\\uFF09\\u5DF2\\u5B58\\u5728\nrole.add_fail_value_exists.message=\\u65B0\\u589E\\u5931\\u8D25\\uFF0C\\u89D2\\u8272\\u503C\\u5DF2\\u5B58\\u5728\nrole.save_fail_value_exists.message=\\u4FDD\\u5B58\\u5931\\u8D25\\uFF0C\\u89D2\\u8272\\u503C\\u5DF2\\u5B58\\u5728\nrole.delete_fail_has_user.message=\\u5220\\u9664\\u5931\\u8D25\\uFF0C\\u8BE5\\u89D2\\u8272\\u4E0B\\u5B58\\u5728\\u7528\\u6237\nview_menu_category.delete_fail_has_children_category.message=\\u5220\\u9664\\u5931\\u8D25\\uFF0C\\u8BE5\\u5206\\u7C7B\\u4E0B\\u5B58\\u5728\\u5B50\\u7EA7\\u5206\\u7C7B\nview_menu_category.delete_fail_has_view_menu.message=\\u5220\\u9664\\u5931\\u8D25\\uFF0C\\u8BE5\\u5206\\u7C7B\\u4E0B\\u5B58\\u5728\\u83DC\\u5355\noauth_client.add_fail_oauth_client_exists.message=\\u65B0\\u589E\\u5931\\u8D25\\uFF0C\\u8BE5 OAuth \\u5BA2\\u6237\\u7AEF\\u5DF2\\u5B58\\u5728\noauth_client.save_fail_oauth_client_exists.message=\\u4FDD\\u5B58\\u5931\\u8D25\\uFF0C\\u8BE5 OAuth \\u5BA2\\u6237\\u7AEF\\u5DF2\\u5B58\\u5728\noauth_client.delete_fail.message=\\u5220\\u9664\\u5931\\u8D25\nview_page.add_fail_authority_exists.message=\\u65B0\\u589E\\u5931\\u8D25\\uFF0C\\u6743\\u9650\\uFF08authority\\uFF09\\u5DF2\\u5B58\\u5728\nview_page.save_fail_authority_exists.message=\\u4FDD\\u5B58\\u5931\\u8D25\\uFF0C\\u6743\\u9650\\uFF08authority\\uFF09\\u5DF2\\u5B58\\u5728\nsystem.verify_code_create_fail.message=\\u9A8C\\u8BC1\\u7801\\u751F\\u6210\\u9519\\u8BEF\nsystem.verify_code_create_fail_font_not_exists.message=\\u9A8C\\u8BC1\\u7801\\u751F\\u6210\\u9519\\u8BEF\\uFF0C\\u5B57\\u4F53\\u6587\\u4EF6\\u4E0D\\u5B58\\u5728\\uFF1A%s\ndepartment.delete_fail_has_user.message=\\u5220\\u9664\\u5931\\u8D25\\uFF0C\\u8BE5\\u90E8\\u95E8\\u4E0B\\u5B58\\u5728\\u7528\\u6237\ndepartment.delete_fail_has_children_department.message=\\u5220\\u9664\\u5931\\u8D25\\uFF0C\\u8BE5\\u90E8\\u95E8\\u4E0B\\u5B58\\u5728\\u5B50\\u90E8\\u95E8\nfile.upload_fail_max_upload_size_exceeded.message=\\u6587\\u4EF6\\u4E0A\\u4F20\\u5931\\u8D25\\uFF0C\\u4E0A\\u4F20\\u8D85\\u51FA\\u6700\\u5927\\u6587\\u4EF6\\u4E0A\\u4F20\\u5927\\u5C0F%s\\u6216\\u6700\\u5927\\u8BF7\\u6C42\\u4E0A\\u4F20\\u5927\\u5C0F%s\nfile.upload_fail.message=\\u6587\\u4EF6\\u4E0A\\u4F20\\u5931\\u8D25\nfile.download_fail_file_not_exists.message=\\u6587\\u4EF6\\u4E0B\\u8F7D\\u5931\\u8D25\\uFF0C\\u6587\\u4EF6\\u4E0D\\u5B58\\u5728\nfile.download_fail.message=\\u6587\\u4EF6\\u4E0B\\u8F7D\\u5931\\u8D25\nquartz_job.add_fail.message=\\u4EFB\\u52A1\\u65B0\\u589E\\u5931\\u8D25\nquartz_job.delete_fail.message=\\u4EFB\\u52A1\\u5220\\u9664\\u5931\\u8D25\nquartz_job.update_fail.message=\\u4EFB\\u52A1\\u66F4\\u65B0\\u5931\\u8D25\nquartz_job.pause_fail.message=\\u4EFB\\u52A1\\u6682\\u505C\\u5931\\u8D25\nquartz_job.resume_fail.message=\\u4EFB\\u52A1\\u6062\\u590D\\u5931\\u8D25\nmail.add_fail.message=\\u90AE\\u4EF6\\u53D1\\u9001\\u5931\\u8D25\n"
  },
  {
    "path": "src/main/resources/logback-spring.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n    <!-- 读取 spring.application.name 属性来生成日志文件名\n    scope：作用域\n    name：在 logback-spring.xml 使用的键\n    source：application.properties 文件中的键\n    defaultValue：默认值 -->\n    <contextName>logback</contextName>\n    <springProperty scope=\"logback\" name=\"log.dir\" source=\"log.dir\" defaultValue=\"../logs/app\"/>\n    <springProperty scope=\"logback\" name=\"log.max_history\" source=\"log.max_history\" defaultValue=\"30\"/>\n    <springProperty scope=\"logback\" name=\"log.max_file_size\" source=\"log.max_file_size\" defaultValue=\"10MB\"/>\n    <springProperty scope=\"logback\" name=\"log.total_size_cap\" source=\"log.total_size_cap\" defaultValue=\"2GB\"/>\n    <!-- ConsoleAppender 控制台输出日志-->\n    <appender name=\"CONSOLE_LOG\" class=\"ch.qos.logback.core.ConsoleAppender\">\n        <filter class=\"ch.qos.logback.classic.filter.ThresholdFilter\">\n            <level>DEBUG</level>\n        </filter>\n        <encoder class=\"ch.qos.logback.classic.encoder.PatternLayoutEncoder\">\n            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} Line:%-3L - %msg%n</pattern>\n            <charset>UTF-8</charset> <!-- 默认编码：UTF-8，Windows 系统可能需要用 GBK 编码-->\n        </encoder>\n    </appender>\n    <!-- 日志记录器，日期滚动记录 -->\n    <appender name=\"ERROR_LOG\" class=\"ch.qos.logback.core.rolling.RollingFileAppender\">\n        <filter class=\"ch.qos.logback.classic.filter.LevelFilter\">\n            <level>ERROR</level>\n            <onMatch>ACCEPT</onMatch>\n            <onMismatch>DENY</onMismatch>\n        </filter>\n        <encoder class=\"ch.qos.logback.classic.encoder.PatternLayoutEncoder\">\n            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} Line:%-3L - %msg%n</pattern>\n            <charset>UTF-8</charset>\n        </encoder>\n        <!-- 追加方式记录日志 -->\n        <append>true</append>\n        <!-- 日志记录器的滚动策略，按日期，按大小记录 -->\n        <rollingPolicy class=\"ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy\">\n            <!-- 除按日志记录之外，还配置了日志文件不能超过2M，若超过2M，日志文件会以索引0开始，命名日志文件，例如log-error-2013-12-21.0.log -->\n            <fileNamePattern>${log.dir}/error/log_error_%d{yyyy-MM-dd}.%i.log</fileNamePattern>\n            <!-- 日志文件的最大大小 -->\n            <maxFileSize>${log.max_file_size}</maxFileSize>\n            <!-- 日志文件保存的最大天数 -->\n            <maxHistory>${log.max_history}</maxHistory>\n            <!-- 日志文件总量大小 -->\n            <totalSizeCap>${log.total_size_cap}</totalSizeCap>\n        </rollingPolicy>\n    </appender>\n    <appender name=\"WARN_LOG\" class=\"ch.qos.logback.core.rolling.RollingFileAppender\">\n        <filter class=\"ch.qos.logback.classic.filter.LevelFilter\">\n            <level>WARN</level>\n            <onMatch>ACCEPT</onMatch>\n            <onMismatch>DENY</onMismatch>\n        </filter>\n        <encoder class=\"ch.qos.logback.classic.encoder.PatternLayoutEncoder\">\n            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} Line:%-3L - %msg%n</pattern>\n            <charset>UTF-8</charset>\n        </encoder>\n        <append>true</append>\n        <rollingPolicy class=\"ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy\">\n            <fileNamePattern>${log.dir}/warn/log_warn_%d{yyyy-MM-dd}.%i.log</fileNamePattern>\n            <maxFileSize>${log.max_file_size}</maxFileSize>\n            <maxHistory>${log.max_history}</maxHistory>\n            <totalSizeCap>${log.total_size_cap}</totalSizeCap>\n        </rollingPolicy>\n    </appender>\n    <appender name=\"INFO_LOG\" class=\"ch.qos.logback.core.rolling.RollingFileAppender\">\n        <filter class=\"ch.qos.logback.classic.filter.LevelFilter\">\n            <level>INFO</level>\n            <onMatch>ACCEPT</onMatch>\n            <onMismatch>DENY</onMismatch>\n        </filter>\n        <encoder class=\"ch.qos.logback.classic.encoder.PatternLayoutEncoder\">\n            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level in %logger Line:%-3L - %msg%n</pattern>\n            <charset>UTF-8</charset>\n        </encoder>\n        <append>true</append>\n        <rollingPolicy class=\"ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy\">\n            <fileNamePattern>${log.dir}/info/log_info_%d{yyyy-MM-dd}.%i.log</fileNamePattern>\n            <maxFileSize>${log.max_file_size}</maxFileSize>\n            <maxHistory>${log.max_history}</maxHistory>\n            <totalSizeCap>${log.total_size_cap}</totalSizeCap>\n        </rollingPolicy>\n    </appender>\n    <appender name=\"ASYNC_CONSOLE_LOG\" class=\"ch.qos.logback.classic.AsyncAppender\">\n        <discardingThreshold>0</discardingThreshold>\n        <queueSize>256</queueSize>\n        <appender-ref ref=\"CONSOLE_LOG\"/>\n    </appender>\n    <appender name=\"ASYNC_ERROR_LOG\" class=\"ch.qos.logback.classic.AsyncAppender\">\n        <discardingThreshold>0</discardingThreshold>\n        <queueSize>256</queueSize>\n        <appender-ref ref=\"ERROR_LOG\"/>\n    </appender>\n    <appender name=\"ASYNC_WARN_LOG\" class=\"ch.qos.logback.classic.AsyncAppender\">\n        <discardingThreshold>0</discardingThreshold>\n        <queueSize>256</queueSize>\n        <appender-ref ref=\"WARN_LOG\"/>\n    </appender>\n    <appender name=\"ASYNC_INFO_LOG\" class=\"ch.qos.logback.classic.AsyncAppender\">\n        <discardingThreshold>0</discardingThreshold>\n        <queueSize>256</queueSize>\n        <appender-ref ref=\"INFO_LOG\"/>\n    </appender>\n\n    <!-- 生产环境下，将此级别配置为适合的级别，以免日志文件太多或影响程序性能 -->\n    <root level=\"INFO\">\n        <!-- 生产环境建议将 CONSOLE_LOG 去掉 -->\n        <appender-ref ref=\"CONSOLE_LOG\"/>\n        <appender-ref ref=\"ERROR_LOG\"/>\n        <appender-ref ref=\"WARN_LOG\"/>\n        <appender-ref ref=\"INFO_LOG\"/>\n    </root>\n</configuration>"
  },
  {
    "path": "src/main/resources/static/assets/css/base.css",
    "content": "/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n    line-height: 1.15; /* 1 */\n    -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n   ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n    margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n    display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n    font-size: 2em;\n    margin: 0.67em 0;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n    box-sizing: content-box; /* 1 */\n    height: 0; /* 1 */\n    overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n    font-family: monospace, monospace; /* 1 */\n    font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n    background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n    border-bottom: none; /* 1 */\n    text-decoration: underline; /* 2 */\n    text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n    font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n    font-family: monospace, monospace; /* 1 */\n    font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n    font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n    font-size: 75%;\n    line-height: 0;\n    position: relative;\n    vertical-align: baseline;\n}\n\nsub {\n    bottom: -0.25em;\n}\n\nsup {\n    top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n    border-style: none;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n    font-family: inherit; /* 1 */\n    font-size: 100%; /* 1 */\n    line-height: 1.15; /* 1 */\n    margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n    overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n    text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n    -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n    border-style: none;\n    padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n    outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n    padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\n\nlegend {\n    box-sizing: border-box; /* 1 */\n    color: inherit; /* 2 */\n    display: table; /* 1 */\n    max-width: 100%; /* 1 */\n    padding: 0; /* 3 */\n    white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n    vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n    overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n    box-sizing: border-box; /* 1 */\n    padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n    height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n    -webkit-appearance: textfield; /* 1 */\n    outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n    -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n    -webkit-appearance: button; /* 1 */\n    font: inherit; /* 2 */\n}\n\n/* Interactive\n   ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n    display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n    display: list-item;\n}\n\n/* Misc\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n    display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n    display: none;\n}\n\n/*! normalize.css end */\n\n\n/**{outline: 1px solid red;}*/\n\nhtml, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video, img, input, button {\n    margin: 0;\n    padding: 0;\n    border: 0;\n    font: inherit;\n    font-size: 100%;\n    vertical-align: baseline;\n    outline-style: none; /*去掉环绕边框*/\n}\n\nhtml {\n    line-height: 1;\n    background: #f0f0f0;\n\n}\n\nol, ul {\n    list-style: none\n}\n\ntable {\n    border-collapse: collapse;\n    border-spacing: 0\n}\n\ncaption, th, td {\n    text-align: left;\n    font-weight: normal;\n    vertical-align: middle\n}\n\nq, blockquote {\n    quotes: none\n}\n\nq:before, q:after, blockquote:before, blockquote:after {\n    content: \"\";\n    content: none\n}\n\na img {\n    border: none\n}\n\narticle, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary {\n    display: block\n}\n\nhtml {\n    *overflow: auto\n}\n\nbody, button, input, select, textarea {\n    font-family: PingFang SC, Lantinghei SC, Microsoft Yahei, Hiragino Sans GB, Microsoft Sans Serif, WenQuanYi Micro Hei, sans;\n    font-size: 12px;\n}\n\n.clearfix:after {\n    content: \"\";\n    display: block;\n    height: 0;\n    clear: both;\n    visibility: hidden\n}\n\n.clearfix {\n    display: inline-block\n}\n\n.clearfix {\n    height: 1%\n}\n\n.clearfix {\n    display: block;\n    overflow: hidden\n}\n\n.ellipsis {\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    overflow: hidden\n}\n\n/*b {*/\n/*    a background: #036;*/\n/*    a: hover #114f8e;*/\n\n/*background: #026890;*/\n\n/*a:hover:background-color: rgba(255,255,255,.1);*/\n/*.nav-bar li.a, .nav-bar li:hover {*/\n/*background-color: rgba(255,255,255,.1);*/\n/*}*/\n\n/*黑、青色*/\n/*background:#373d41;*/\n/*a:hover:#30c5c3;*/\n\n/*黑色、绿色*/\n/*background: #333;*/\n/*border-left: 1px solid #444;*/\n/*border-right: 1px solid #000;*/\n/*#41cd52*/\n\n/*.bus_effect_2 {*/\n/*-webkit-transform: translateY(15px);*/\n/*transform: translateY(15px);*/\n/*-webkit-animation: moveUp 0.65s ease forwards;*/\n/*animation: moveUp 0.65s ease forwards;*/\n/*}*/\n\n/*绿色 绿色*/\n/*background: #009e73;*/\n/*a background: #05b88a;*/\n\n/*color: #fff!important;*/\n/*position: static;*/\n/*font-size: 30px;*/\n/*background: #008fd4;*/\n/*padding-left: 25px;*/\n/*position: relative;*/\n/*display: block;*/\n/*left: 0!Important;*/\n/*height: 74px;*/\n/*line-height: 74px;*/\n/*}*/\n\n"
  },
  {
    "path": "src/main/resources/static/assets/css/global.css",
    "content": ""
  },
  {
    "path": "src/main/resources/static/assets/css/index.css",
    "content": ".tab-iframe {\n    border: 0;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n    padding: 10px;\n}\n\n.header {\n    padding: 0;\n    margin: 0 auto;\n    height: 50px;\n    left: 0;\n    right: 0;\n    background: #005EA5;\n    min-width: 1370px;\n    position: relative;\n}\n\n.header .header-logo {\n    float: left;\n    padding: 0 60px;\n    height: 100%;\n    width: 220px;\n    line-height: 50px;\n}\n\n.header .header-logo img {\n    vertical-align: middle;\n    margin-left: -10px;\n}\n\n.header .header-nav {\n    position: relative;\n    float: left;\n}\n\n.header .header-user {\n    position: relative;\n    float: right;\n    margin-right: 20px;\n    padding: 0 14px 0 10px;\n    height: 50px;\n    line-height: 50px;\n    cursor: pointer;\n}\n\n.header .header-user .user-dropdown-menu li:hover {\n    background: #e2e2e2;\n}\n\n.header .header-user:hover .user-dropdown-menu {\n    display: block;\n}\n\n.header .header-user .user-avatar {\n    float: left;\n    margin: 8px 8px 0 0;\n    width: 35px;\n    height: 35px;\n}\n\n.header .header-user .user-avatar img {\n    border-radius: 20px;\n    -webkit-border-radius: 20px;\n    -moz-border-radius: 20px;\n    width: 35px;\n    height: 35px;\n}\n\n.header .header-user .user-name {\n    float: left;\n    max-width: 150px;\n    color: #ffffff;\n    font-size: 14px;\n    margin-right: 5px;\n}\n\n.header .header-user .user-dropdown {\n    color: #ffffff;\n    position: relative;\n    top: -2px;\n}\n\n.header .header-user .fa {\n    color: #7F92A9\n}\n\n.header .header-nav .nav-prev, .header .header-nav .nav-next {\n    position: absolute;\n    right: -32px;\n    top: 4px;\n    width: 22px;\n    height: 19px;\n    background: #0071C1;\n    color: #ffffff;\n    text-decoration: none;\n    text-align: center;\n    line-height: 18px;\n    font-size: 14px !important;\n}\n\n.header .nav-prev.disabled, .header .nav-next.disabled {\n    color: #cccccc;\n    background: #fff;\n    cursor: default;\n}\n\n.ellipsis {\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    overflow: hidden;\n}\n\n.header .header-user .user-dropdown-menu {\n    display: none;\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 50px;\n    background: #fff;\n    z-index: 1;\n    border: 1px solid #bfbfbf;\n    box-shadow: 1px 1px 2px #dddddd;\n}\n\n.header .header-user .user-dropdown-menu li {\n    height: 30px;\n    line-height: 30px;\n    font-size: 13px;\n    padding: 0 15px;\n}\n\n.header .header-user .user-dropdown-menu li a {\n    color: #000000;\n    text-decoration: none;\n}\n\n.header .header-user .user-dropdown-menu li .fa {\n    margin-right: 10px;\n    color: #000000;\n}\n\n.header .header-nav .nav-wrap {\n    float: left;\n    height: 50px;\n    width: 625px;\n    overflow: hidden;\n}\n\n.header .nav-wrap-ul {\n    float: left;\n}\n\n.header .header-nav .nav-item.selected, .header .header-nav .nav-item:hover, .header .header-user:hover {\n    background: #0071C1;\n}\n\n.header .header-nav .nav-item {\n    float: left;\n    height: 50px;\n    line-height: 50px;\n    color: #ffffff;\n    padding: 0 15px;\n    cursor: pointer;\n    font-size: 16px;\n}\n\n.header .header-nav .nav-item.selected a {\n    color: #ffffff;\n}\n\n.header .header-nav .nav-item a {\n    display: block;\n    color: #ffffff;\n    text-decoration: none;\n    height: 50px;\n}\n\n.header .header-nav .nav-item .fa {\n    line-height: 50px;\n    margin-right: 3px;\n    font-size: 18px;\n    height: 50px;\n}\n\n.header .header-nav .nav-next {\n    top: 25px;\n}\n\nol, ul {\n    list-style: none;\n}\n\n.container {\n    position: absolute;\n    top: 50px;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    padding: 0;\n    z-index: 0;\n    transition: all 0.3s ease;\n    min-width: 1370px;\n}\n\n#left {\n    width: 225px;\n}\n\n#top {\n    height: 70px;\n    margin: 0;\n    padding: 0;\n}\n\n#left {\n    margin: 0;\n    padding: 0;\n}\n\n#bottom {\n    background: #f3f3f3;\n    color: #575765;\n    height: 28px;\n    overflow: hidden;\n    margin: 0;\n    padding: 0;\n}\n\n#bottom .footer {\n    text-align: center;\n    line-height: 28px;\n    font-size: 12px;\n}\n\n/*#top .pageTitle {*/\n/*    font-size: 20px;*/\n/*}*/\n/*#top .rightMenu {*/\n/*    float: right !important;*/\n/*    line-height: 40px !important;*/\n/*}*/\n/*#top .rightMenu a {*/\n/*    font-size: 14px;*/\n/*    text-decoration: none;*/\n/*    color: #ffffff;*/\n/*    padding: 5px 8px;*/\n/*}*/\n/*#top .rightMenu ul li a.avatar {*/\n/*    background: transparent;*/\n/*    border: 0;*/\n/*}*/\n#center .tabs {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    width: 50000px;\n    border-width: 0;\n}\n\n#center .tabs-closable {\n    padding-right: 12px;\n}\n\n#center .tabs li a.tabs-inner {\n    border-width: 0;\n}\n\n#center .tabs li {\n    margin: 0;\n}\n\n#center .tabs-panels {\n    border-bottom: 0;\n}\n\n#center .tabs li.tabs-selected a.tabs-inner {\n    font-weight: normal;\n    outline: none;\n}\n\n#center .tabs li a.tabs-inner {\n    display: inline-block;\n    text-decoration: none;\n    margin: 0;\n    padding: 0 18px;\n    height: 25px;\n    text-align: center;\n    white-space: nowrap;\n}\n\n#center .tabs-tool {\n    position: absolute;\n    bottom: 0;\n    padding: 0;\n    overflow: hidden;\n    border-width: 1px;\n    border-style: solid;\n    height: 100%;\n    border-top: 0;\n    border-bottom: 0;\n}\n\n#center .tabs-title {\n    font-size: 12px;\n}\n\n#center.tabs-icon {\n    position: absolute;\n    width: 16px;\n    height: 16px;\n    left: 10px;\n    top: 50%;\n    margin-top: -8px;\n    font-size: 14px;\n}\n\n\n#top, #tabs .tabs-panels > .panel > .panel-body, .messager-body {\n    overflow: hidden;\n}\n\n\n#center .tabs-container {\n    overflow: hidden;\n}\n\n#center .tabs-header {\n    border-width: 1px;\n    border-style: solid;\n    border-bottom-width: 0;\n    position: relative;\n    padding: 0;\n    padding-top: 2px;\n    overflow: hidden;\n}\n\n#center .tabs-scroller-left,\n#center .tabs-scroller-right {\n    position: absolute;\n    top: auto;\n    bottom: 0;\n    width: 18px;\n    font-size: 1px;\n    display: none;\n    cursor: pointer;\n    border-width: 1px;\n    border-style: solid;\n}\n\n#center .tabs-scroller-left {\n    left: 0;\n}\n\n#center .tabs-scroller-right {\n    right: 0;\n}\n\n#center .tabs-tool {\n    position: absolute;\n    bottom: 0;\n    padding: 1px;\n    overflow: hidden;\n    border-width: 1px;\n    border-style: solid;\n}\n\n#center .tabs-header-plain .tabs-tool {\n    padding: 0 1px;\n}\n\n#center .tabs-wrap {\n    position: relative;\n    left: 0;\n    overflow: hidden;\n    width: 100%;\n    margin: 0;\n    padding: 0;\n}\n\n#center .tabs-scrolling {\n    margin-left: 18px;\n    margin-right: 18px;\n}\n\n#center .tabs-disabled {\n    opacity: 0.3;\n    filter: alpha(opacity=30);\n}\n\n#center .tabs {\n    list-style-type: none;\n    height: 26px;\n    margin: 0px;\n    padding: 0px;\n    padding-left: 4px;\n    width: 50000px;\n    border-style: solid;\n    border-width: 0 0 1px 0;\n}\n\n#center .tabs li {\n    float: left;\n    display: inline-block;\n    margin: -1px 0 -1px 0;\n    padding: 0;\n    position: relative;\n    border: 0;\n}\n\n#center .tabs li .tabs-inner {\n    display: inline-block;\n    text-decoration: none;\n    cursor: hand;\n    cursor: pointer;\n    margin: 0;\n    padding: 0 10px;\n    height: 25px;\n    line-height: 25px;\n    text-align: center;\n    white-space: nowrap;\n    border-width: 1px;\n    border-style: solid;\n    /*-moz-border-radius: 5px 5px 0 0;*/\n    /*-webkit-border-radius: 5px 5px 0 0;*/\n    /*border-radius: 5px 5px 0 0;*/\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n\n#center .tabs li.tabs-selected .tabs-inner {\n    font-weight: normal;\n    outline: none;\n}\n\n#center .tabs li.tabs-selected .tabs-inner:hover {\n    cursor: default;\n    pointer: default;\n}\n\n#center .tabs li a.tabs-close,\n#center .tabs-p-tool {\n    position: absolute;\n    font-size: 1px;\n    display: block;\n    height: 16px;\n    padding: 0;\n    top: 50%;\n    margin-top: -6px;\n    overflow: hidden;\n}\n\n#center .tabs li a.tabs-close {\n    width: 18px;\n    margin-top: -9px;\n    right: 5px;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n\n#center .tabs-p-tool {\n    right: 16px;\n}\n\n#center .tabs-p-tool a {\n    display: inline-block;\n    font-size: 1px;\n    width: 12px;\n    height: 12px;\n    margin: 0;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n\n#center .tabs li a:hover.tabs-close,\n#center .tabs-p-tool a:hover {\n    opacity: 1;\n    filter: alpha(opacity=100);\n    cursor: hand;\n    cursor: pointer;\n}\n\n#center .tabs-with-icon {\n    padding-left: 11px;\n}\n\n#center .tabs-icon {\n    position: absolute;\n    width: 16px;\n    height: 16px;\n    left: 10px;\n    top: 50%;\n    margin-top: -16px;\n    font-size: 14px;\n}\n\n#center .tabs-title {\n    font-size: 12px;\n}\n\n#center .tabs-closable {\n    padding-right: 8px;\n}\n\n#center .tabs-panels {\n    margin: 0px;\n    padding: 0px;\n    border-width: 1px;\n    border-style: solid;\n    border-top-width: 0;\n    overflow: hidden;\n}\n\n#center .tabs-header-bottom {\n    border-width: 0 1px 1px 1px;\n    padding: 0 0 2px 0;\n}\n\n#center .tabs-header-bottom .tabs {\n    border-width: 1px 0 0 0;\n}\n\n#center .tabs-header-bottom .tabs li {\n    margin: -1px 4px 0 0;\n}\n\n#center .tabs-header-bottom .tabs li .tabs-inner {\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n\n#center .tabs-header-bottom .tabs-tool {\n    top: 0;\n}\n\n#center .tabs-header-bottom .tabs-scroller-left,\n#center .tabs-header-bottom .tabs-scroller-right {\n    top: 0;\n    bottom: auto;\n}\n\n#center .tabs-panels-top {\n    border-width: 1px 1px 0 1px;\n}\n\n#center .tabs-header-left {\n    float: left;\n    border-width: 1px 0 1px 1px;\n    padding: 0;\n}\n\n#center .tabs-header-right {\n    float: right;\n    border-width: 1px 1px 1px 0;\n    padding: 0;\n}\n\n#center .tabs-header-left .tabs-wrap,\n#center .tabs-header-right .tabs-wrap {\n    height: 100%;\n}\n\n#center .tabs-header-left .tabs {\n    height: 100%;\n    padding: 4px 0 0 2px;\n    border-width: 0 1px 0 0;\n}\n\n#center .tabs-header-right .tabs {\n    height: 100%;\n    padding: 4px 2px 0 0;\n    border-width: 0 0 0 1px;\n}\n\n#center .tabs-header-left .tabs li,\n#center .tabs-header-right .tabs li {\n    display: block;\n    width: 100%;\n    position: relative;\n}\n\n#center .tabs-header-left .tabs li {\n    left: auto;\n    right: 0;\n    margin: 0 -1px 4px 0;\n    float: right;\n}\n\n#center .tabs-header-right .tabs li {\n    left: 0;\n    right: auto;\n    margin: 0 0 4px -1px;\n    float: left;\n}\n\n#center .tabs-justified li .tabs-inner {\n    padding-left: 0;\n    padding-right: 0;\n}\n\n#center .tabs-header-left .tabs li .tabs-inner {\n    display: block;\n    text-align: left;\n    padding-left: 10px;\n    padding-right: 10px;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n\n#center .tabs-header-right .tabs li .tabs-inner {\n    display: block;\n    text-align: left;\n    padding-left: 10px;\n    padding-right: 10px;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n\n#center .tabs-panels-right {\n    float: right;\n    border-width: 1px 1px 1px 0;\n}\n\n#center .tabs-panels-left {\n    float: left;\n    border-width: 1px 0 1px 1px;\n}\n\n#center .tabs-header-noborder,\n#center .tabs-panels-noborder {\n    border: 0px;\n}\n\n#center .tabs-header-plain {\n    border: 0px;\n    background: transparent;\n}\n\n#center .tabs-pill {\n    padding-bottom: 3px;\n}\n\n#center .tabs-header-bottom .tabs-pill {\n    padding-top: 3px;\n    padding-bottom: 0;\n}\n\n#center .tabs-header-left .tabs-pill {\n    padding-right: 3px;\n}\n\n#center .tabs-header-right .tabs-pill {\n    padding-left: 3px;\n}\n\n#center .tabs-header .tabs-pill li .tabs-inner {\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n\n#center .tabs-header-narrow,\n#center .tabs-header-narrow .tabs-narrow {\n    padding: 0;\n}\n\n#center .tabs-narrow li,\n#center .tabs-header-bottom .tabs-narrow li {\n    margin-left: 0;\n    margin-right: -1px;\n}\n\n#center .tabs-narrow li.tabs-last,\n#center .tabs-header-bottom .tabs-narrow li.tabs-last {\n    margin-right: 0;\n}\n\n#center .tabs-header-left .tabs-narrow,\n#center .tabs-header-right .tabs-narrow {\n    padding-top: 0;\n}\n\n#center .tabs-header-left .tabs-narrow li {\n    margin-bottom: -1px;\n    margin-right: -1px;\n}\n\n#center .tabs-header-left .tabs-narrow li.tabs-last,\n#center .tabs-header-right .tabs-narrow li.tabs-last {\n    margin-bottom: 0;\n}\n\n#center .tabs-header-right .tabs-narrow li {\n    margin-bottom: -1px;\n    margin-left: -1px;\n}\n\n/*#center .tabs-scroller-left {*/\n/*    background: #f3f3f3 url('images/tabs_icons.png') no-repeat 1px center;*/\n/*}*/\n/*#center .tabs-scroller-right {*/\n/*    background: #f3f3f3 url('images/tabs_icons.png') no-repeat -15px center;*/\n/*}*/\n#center .tabs li a.tabs-close {\n    /*background: url('images/tabs_icons.png') no-repeat -34px center;*/\n    background: none;\n    font-family: \"iconfont\" !important;\n    font-size: 14px;\n    font-style: normal;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    text-decoration: none;\n    color: #262626;\n    padding: 2px;\n}\n\n#center .tabs li a.tabs-close:before {\n    content: \"\\e6a2\";\n}\n\n#center .tabs li .tabs-inner:hover {\n    background: #e2e2e2;\n    color: #000000;\n    filter: none;\n}\n\n#center .tabs li.tabs-selected .tabs-inner {\n    background-color: #ffffff;\n    color: #575765;\n    background: #ffffff;\n    background-repeat: repeat-x;\n    filter: none;\n}\n\n#center .tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n    background: #ffffff;\n    background-repeat: repeat-x;\n    filter: none;\n}\n\n#center .tabs-header-left .tabs li.tabs-selected .tabs-inner {\n    background: #ffffff;\n    background-repeat: repeat-y;\n    filter: none;\n}\n\n#center .tabs-header-right .tabs li.tabs-selected .tabs-inner {\n    background: #ffffff;\n    background-repeat: repeat-y;\n    filter: none;\n}\n\n#center .tabs li .tabs-inner {\n    color: #575765;\n    background-color: #f3f3f3;\n    background: #f3f3f3;\n    background-repeat: repeat-x;\n    filter: none;\n}\n\n#center .tabs-header,\n#center .tabs-tool {\n    background-color: #f3f3f3;\n}\n\n#center .tabs-header-plain {\n    background: transparent;\n}\n\n#center .tabs-header,\n#center .tabs-scroller-left,\n#center .tabs-scroller-right,\n#center .tabs-tool,\n#center .tabs,\n#center .tabs-panels,\n#center .tabs li .tabs-inner,\n#center .tabs li.tabs-selected .tabs-inner,\n#center .tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n#center .tabs-header-left .tabs li.tabs-selected .tabs-inner,\n#center .tabs-header-right .tabs li.tabs-selected .tabs-inner {\n    border-color: #D3D3D3;\n}\n\n#center .tabs-p-tool a:hover,\n#center .tabs li a:hover.tabs-close,\n#center .tabs-scroller-over {\n    background-color: #e2e2e2;\n}\n\n#center .tabs li.tabs-selected .tabs-inner {\n    border-bottom: 0 solid #ffffff;\n}\n\n#center .tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n    border-top: 1px solid #ffffff;\n}\n\n#center .tabs-header-left .tabs li.tabs-selected .tabs-inner {\n    border-right: 1px solid #ffffff;\n}\n\n#center .tabs-header-right .tabs li.tabs-selected .tabs-inner {\n    border-left: 1px solid #ffffff;\n}\n\n#center .tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n    background: #0092DC;\n    color: #fff;\n    filter: none;\n    border-color: #D3D3D3;\n}\n\n\n#center .l-btn {\n    text-decoration: none;\n    display: inline-block;\n    overflow: hidden;\n    margin: 0;\n    padding: 0;\n    cursor: pointer;\n    outline: none;\n    text-align: center;\n    vertical-align: middle;\n    line-height: normal;\n}\n\n#center .l-btn-plain {\n    border-width: 0;\n    padding: 1px;\n}\n\n#center .l-btn-left {\n    display: inline-block;\n    position: relative;\n    overflow: hidden;\n    margin: 0;\n    padding: 0;\n    vertical-align: top;\n}\n\n#center .l-btn-text {\n    display: inline-block;\n    vertical-align: top;\n    width: auto;\n    line-height: 28px;\n    font-size: 14px;\n    padding: 0;\n    margin: 0 6px;\n}\n\n#center .l-btn-icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    line-height: 16px;\n    position: absolute;\n    top: 50%;\n    margin-top: -8px;\n    font-size: 1px;\n}\n\n#center .l-btn span span .l-btn-empty {\n    display: inline-block;\n    margin: 0;\n    width: 16px;\n    height: 24px;\n    font-size: 1px;\n    vertical-align: top;\n}\n\n#center .l-btn span .l-btn-icon-left {\n    padding: 0 0 0 20px;\n    background-position: left center;\n}\n\n#center .l-btn span .l-btn-icon-right {\n    padding: 0 20px 0 0;\n    background-position: right center;\n}\n\n#center .l-btn-icon-left .l-btn-text {\n    margin: 0 6px 0 26px;\n}\n\n#center .l-btn-icon-left .l-btn-icon {\n    left: 6px;\n}\n\n#center .l-btn-icon-right .l-btn-text {\n    margin: 0 26px 0 6px;\n}\n\n#center .l-btn-icon-right .l-btn-icon {\n    right: 6px;\n}\n\n#center .l-btn-icon-top .l-btn-text {\n    margin: 20px 4px 0 4px;\n}\n\n#center .l-btn-icon-top .l-btn-icon {\n    top: 4px;\n    left: 50%;\n    margin: 0 0 0 -8px;\n}\n\n#center .l-btn-icon-bottom .l-btn-text {\n    margin: 0 4px 20px 4px;\n}\n\n#center .l-btn-icon-bottom .l-btn-icon {\n    top: auto;\n    bottom: 4px;\n    left: 50%;\n    margin: 0 0 0 -8px;\n}\n\n#center .l-btn-left .l-btn-empty {\n    margin: 0 6px;\n    width: 16px;\n}\n\n#center .l-btn-plain:hover {\n    padding: 0;\n}\n\n#center .l-btn-focus {\n    outline: #0000FF dotted thin;\n}\n\n#center .l-btn-large .l-btn-text {\n    line-height: 44px;\n}\n\n#center .l-btn-large .l-btn-icon {\n    width: 32px;\n    height: 32px;\n    line-height: 32px;\n    margin-top: -16px;\n}\n\n#center .l-btn-large .l-btn-icon-left .l-btn-text {\n    margin-left: 40px;\n}\n\n#center .l-btn-large .l-btn-icon-right .l-btn-text {\n    margin-right: 40px;\n}\n\n#center .l-btn-large .l-btn-icon-top .l-btn-text {\n    margin-top: 36px;\n    line-height: 24px;\n    min-width: 32px;\n}\n\n#center .l-btn-large .l-btn-icon-top .l-btn-icon {\n    margin: 0 0 0 -16px;\n}\n\n#center .l-btn-large .l-btn-icon-bottom .l-btn-text {\n    margin-bottom: 36px;\n    line-height: 24px;\n    min-width: 32px;\n}\n\n#center .l-btn-large .l-btn-icon-bottom .l-btn-icon {\n    margin: 0 0 0 -16px;\n}\n\n#center .l-btn-large .l-btn-left .l-btn-empty {\n    margin: 0 6px;\n    width: 32px;\n}\n\n#center .l-btn {\n    color: #444;\n    background: #fafafa;\n    border: 0px solid #bbb;\n    filter: none;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n\n#center .l-btn:hover {\n    background: #e2e2e2;\n    color: #000000;\n    border: 0 solid #ccc;\n    filter: none;\n}\n\n#center .l-btn-plain {\n    background: transparent;\n    border-width: 0;\n    filter: none;\n}\n\n.l-btn-outline {\n    border-width: 1px;\n    border-color: #ccc;\n    padding: 0;\n}\n\n#center .l-btn-plain:hover {\n    background: #e2e2e2;\n    color: #000000;\n    border: 1px solid #ccc;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n\n#center .l-btn-disabled,\n#center .l-btn-disabled:hover {\n    opacity: 0.5;\n    cursor: default;\n    background: #fafafa;\n    color: #444444;\n    background-repeat: repeat-x;\n    filter: none;\n}\n\n#center .l-btn-disabled .l-btn-text,\n#center .l-btn-disabled .l-btn-icon {\n    filter: alpha(opacity=50);\n}\n\n#center .l-btn-plain-disabled,\n#center .l-btn-plain-disabled:hover {\n    background: transparent;\n    filter: alpha(opacity=50);\n}\n\n#center .l-btn-selected,\n#center .l-btn-selected:hover {\n    background: #ddd;\n    filter: none;\n}\n\n#center .l-btn-plain-selected,\n#center .l-btn-plain-selected:hover {\n    background: #ddd;\n}\n\n\n/*#left .tree-node {*/\n/*    height: 30px;*/\n/*    white-space: nowrap;*/\n/*    cursor: pointer;*/\n/*    padding:3px 0 12px 10px;*/\n/*}*/\n/*#left .tree-title {*/\n/*    font-size: 12px;*/\n/*    display: inline-block;*/\n/*    text-decoration: none;*/\n/*    vertical-align: top;*/\n/*    white-space: nowrap;*/\n/*    padding: 0 5px;*/\n/*    height: 18px;*/\n/*    line-height: 18px;*/\n/*    padding-left: 6px;*/\n/*}*/\n.submitButton {\n    margin: 10px;\n}\n\n.closeButton {\n    margin: 10px;\n}\n\n.messenger-message-inner {\n    text-align: center !important;\n}\n\n.browser-happy {\n    position: absolute;\n    z-index: 9999;\n    width: 100%;\n}\n\n.messenger {\n    margin: 0 auto;\n}\n\n.messenger ul, ol {\n    padding: 0;\n    margin: 0 0 10px 25px;\n}\n\n.messenger li {\n    list-style-type: none;\n    line-height: 30px;\n}\n\n.messenger-message {\n    margin-top: 0 !important;\n}\n\n.alert {\n    margin-bottom: 20px;\n    padding: 0 10px;\n    height: 60px;\n    line-height: 60px;\n    border: 1px solid #ddd;\n    color: #888;\n}\n\n.alert .alert-error {\n    background: #fc0000;\n    color: #ffffff;\n    border-color: #fc0000;\n}\n\n.messenger-message a {\n    text-decoration: none;\n}\n\n.messenger-message a:hover {\n    background: #970A07;\n}\n\n.alert {\n    text-shadow: none;\n}\n\n.alert-error {\n    color: #fff;\n    background-color: #e74c3c;\n    border-color: transparent;\n}\n\n.alert, .alert h4 {\n    color: #fff;\n}\n\n.alert {\n    margin-top: 10px;\n    padding: 0 35px 8px 0;\n    margin-bottom: 0;\n    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n    background-color: #970A07;\n    border: 1px solid transparent;\n}\n\n\n* {\n    -moz-box-sizing: border-box;\n    -webkit-box-sizing: border-box;\n    -o-box-sizing: border-box;\n    -ms-box-sizing: border-box;\n    box-sizing: border-box;\n}\n\n#left .panel {\n    overflow: hidden;\n    text-align: left;\n    margin: 0;\n    border: 0;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n\n#left .panel-header,\n#left .panel-body {\n    border-width: 0;\n    border-style: solid;\n}\n\n#left .panel-header {\n    padding: 5px;\n    position: relative;\n}\n\n/*.panel-title {*/\n/*background: url('images/blank.gif') no-repeat;*/\n/*}*/\n#left .panel-header-noborder {\n    border-width: 0 0 1px 0;\n}\n\n#left .panel-body {\n    overflow: auto;\n    border-top-width: 0;\n    padding: 0;\n}\n\n#left .panel-body-noheader {\n    border-top-width: 0 !important;\n}\n\n#left .panel-body-noborder {\n    border-width: 0;\n}\n\n#left .panel-body-nobottom {\n    border-bottom-width: 0;\n}\n\n#left .panel-with-icon {\n    padding-left: 18px;\n}\n\n#left .panel-icon,\n#left .panel-tool {\n    position: absolute;\n    top: 50%;\n    margin-top: -8px;\n    height: 16px;\n    overflow: hidden;\n}\n\n#left .panel-icon {\n    left: 5px;\n    width: 16px;\n    color: #ffffff\n}\n\n#left .panel-tool {\n    right: 5px;\n    width: auto;\n}\n\n#left .panel-tool a {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n    margin: 0 0 0 2px;\n    vertical-align: top;\n}\n\n#left .panel-tool a:hover {\n    opacity: 1;\n    filter: alpha(opacity=100);\n    background-color: #e2e2e2;\n    /*-moz-border-radius: 3px 3px 3px 3px;*/\n    /*-webkit-border-radius: 3px 3px 3px 3px;*/\n    /*border-radius: 3px 3px 3px 3px;*/\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n\n#left .panel-loading {\n    padding: 11px 0px 10px 30px;\n}\n\n#left .panel-noscroll {\n    overflow: hidden;\n}\n\n#left .panel-fit,\n#left .panel-fit body {\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    border: 0;\n    overflow: hidden;\n}\n\n/*.panel-loading {*/\n/*    background: url('images/loading.gif') no-repeat 10px 10px;*/\n/*}*/\n/*.panel-tool-close {*/\n/*    background: url('images/panel_tools.png') no-repeat -16px 0px;*/\n/*}*/\n/*.panel-tool-min {*/\n/*    background: url('images/panel_tools.png') no-repeat 0px 0px;*/\n/*}*/\n/*.panel-tool-max {*/\n/*    background: url('images/panel_tools.png') no-repeat 0px -16px;*/\n/*}*/\n/*.panel-tool-restore {*/\n/*    background: url('images/panel_tools.png') no-repeat -16px -16px;*/\n/*}*/\n/*.panel-tool-collapse {*/\n/*    background: url('images/panel_tools.png') no-repeat -32px 0;*/\n/*}*/\n/*.panel-tool-expand {*/\n/*    background: url('images/panel_tools.png') no-repeat -32px -16px;*/\n/*}*/\n#left .panel-header,\n#left .panel-body {\n    border-color: #D3D3D3;\n}\n\n#left .panel-header {\n    background-color: #273142;\n    background: #273142;\n    background-repeat: repeat;\n    filter: none;\n    color: #575765;\n}\n\n#left .panel-body {\n    background-color: #2c3b41;;\n    color: #b8c7ce;\n    font-size: 14px;\n}\n\n#left .panel-title {\n    font-size: 14px;\n    font-weight: normal;\n    color: #7F92A9;\n    height: 30px;\n    line-height: 32px;\n}\n\n#left .panel-footer {\n    border: 1px solid #D3D3D3;\n    overflow: hidden;\n    background: #fafafa;\n    color: #000000;\n}\n\n#left .panel-footer-noborder {\n    border-width: 1px 0 0 0;\n}\n\n#left .panel-hleft,\n#left .panel-hright {\n    position: relative;\n}\n\n#left .panel-hleft > .panel-body,\n#left .panel-hright > .panel-body {\n    position: absolute;\n}\n\n#left .panel-hleft > .panel-header {\n    float: left;\n}\n\n#left .panel-hright > .panel-header {\n    float: right;\n}\n\n#left .panel-hleft > .panel-body {\n    border-top-width: 0;\n    border-left-width: 0;\n}\n\n#left .panel-hright > .panel-body {\n    border-top-width: 0;\n    border-right-width: 0;\n}\n\n#left .panel-hleft > .panel-body-nobottom {\n    border-bottom-width: 0;\n    border-right-width: 0;\n}\n\n#left .panel-hright > .panel-body-nobottom {\n    border-bottom-width: 0;\n    border-left-width: 0;\n}\n\n#left .panel-hleft > .panel-footer {\n    position: absolute;\n    right: 0;\n}\n\n#left .panel-hright > .panel-footer {\n    position: absolute;\n    left: 0;\n}\n\n#left .panel-hleft > .panel-header-noborder {\n    border-width: 0 1px 0 0;\n}\n\n#left .panel-hright > .panel-header-noborder {\n    border-width: 0 0 0 1px;\n}\n\n#left .panel-hleft > .panel-body-noborder {\n    border-width: 0;\n}\n\n#left .panel-hright > .panel-body-noborder {\n    border-width: 0;\n}\n\n#left .panel-hleft > .panel-body-noheader {\n    border-left-width: 1px;\n}\n\n#left .panel-hright > .panel-body-noheader {\n    border-right-width: 1px;\n}\n\n#left .panel-hleft > .panel-footer-noborder {\n    border-width: 0 0 0 1px;\n}\n\n#left .panel-hright > .panel-footer-noborder {\n    border-width: 0 1px 0 0;\n}\n\n#left .panel-hleft > .panel-header .panel-icon,\n#left .panel-hright > .panel-header .panel-icon {\n    margin-top: 0;\n    top: 5px;\n    left: 50%;\n    margin-left: -8px;\n}\n\n#left .panel-hleft > .panel-header .panel-title,\n#left .panel-hright > .panel-header .panel-title {\n    position: absolute;\n    min-width: 16px;\n    left: 25px;\n    top: 5px;\n    bottom: auto;\n    white-space: nowrap;\n    word-wrap: normal;\n    -webkit-transform: none;\n    -webkit-transform-origin: 0 0;\n    -moz-transform: none;\n    -moz-transform-origin: 0 0;\n    -o-transform: none;\n    -o-transform-origin: 0 0;\n    transform: none;\n    transform-origin: 0 0;\n}\n\n#left .panel-hleft > .panel-header .panel-title-up,\n#left .panel-hright > .panel-header .panel-title-up {\n    position: absolute;\n    min-width: 16px;\n    left: 21px;\n    top: auto;\n    bottom: 0px;\n    text-align: right;\n    white-space: nowrap;\n    word-wrap: normal;\n    -webkit-transform: none;\n    -webkit-transform-origin: 0 0;\n    -moz-transform: none;\n    -moz-transform-origin: 0 0;\n    -o-transform: none;\n    -o-transform-origin: 0 0;\n    transform: none;\n    transform-origin: 0 16px;\n}\n\n#left .panel-hleft > .panel-header .panel-with-icon.panel-title-up,\n#left .panel-hright > .panel-header .panel-with-icon.panel-title-up {\n    padding-left: 0;\n    padding-right: 18px;\n}\n\n#left .panel-hleft > .panel-header .panel-tool,\n#left .panel-hright > .panel-header .panel-tool {\n    top: auto;\n    bottom: 5px;\n    width: 16px;\n    height: auto;\n    left: 50%;\n    margin-left: -8px;\n    margin-top: 0;\n}\n\n#left .panel-hleft > .panel-header .panel-tool a,\n#left .panel-hright > .panel-header .panel-tool a {\n    margin: 2px 0 0 0;\n}\n\n\n#left .accordion {\n    overflow: hidden;\n    border-width: 1px;\n    border-style: solid;\n}\n\n#left .accordion .accordion-header {\n    border-width: 0 0 1px;\n    cursor: pointer;\n}\n\n#left .accordion .accordion-body {\n    border-width: 0 0 1px;\n}\n\n#left .accordion-noborder {\n    border-width: 0;\n}\n\n#left .accordion-noborder .accordion-header {\n    border-width: 0 0 0;\n}\n\n#left .accordion-noborder .accordion-body {\n    border-width: 0 0 0;\n}\n\n#left .accordion-collapse {\n    /*background: url('images/accordion_arrows.png') no-repeat 0 0;*/\n    background: none;\n    font-family: \"iconfont\" !important;\n    font-size: 16px;\n    font-style: normal;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    text-decoration: none;\n    padding: 0px;\n    color: #7F92A9;\n}\n\n#left .accordion-collapse:before {\n    content: \"\\e699\";\n}\n\n#left .accordion-expand {\n    /*background: url('images/accordion_arrows.png') no-repeat -16px 0;*/\n    background: none;\n    font-family: \"iconfont\" !important;\n    font-size: 16px;\n    font-style: normal;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    text-decoration: none;\n    padding: 0px;\n    color: #7F92A9;\n}\n\n#left .accordion-expand:before {\n    content: \"\\e695\";\n}\n\n#left .accordion {\n    background: #2c3b41;\n    border-color: #D3D3D3;\n}\n\n#left .accordion .accordion-header {\n    background: #222d32;\n    filter: none;\n    border-left: 3px solid #222d32;\n    height: 40px;\n}\n\n#left .accordion .accordion-header-selected {\n    background: #1e282c;\n    border-left: 3px solid #0071C1;\n    /*border-bottom: solid 0px #2c3b41;*/\n}\n\n#left .accordion .accordion-header-selected .panel-title {\n    color: #ffffff;\n}\n\n#left .accordion .panel-last > .accordion-header {\n    border-bottom-color: #f3f3f3;\n}\n\n#left .accordion .panel-last > .accordion-body {\n    border-bottom-color: #ffffff;\n}\n\n#left .accordion .panel-last > .accordion-header-selected,\n#left .accordion .panel-last > .accordion-header-border {\n    border-bottom: 0;\n}\n\n#left .accordion > .panel-hleft {\n    float: left;\n}\n\n#left .accordion > .panel-hleft > .panel-header {\n    border-width: 0 1px 0 0;\n}\n\n#left .accordion > .panel-hleft > .panel-body {\n    border-width: 0 1px 0 0;\n}\n\n#left .accordion > .panel-hleft.panel-last > .accordion-header {\n    border-right-color: #f3f3f3;\n}\n\n#left .accordion > .panel-hleft.panel-last > .accordion-body {\n    border-right-color: #ffffff;\n}\n\n#left .accordion > .panel-hleft.panel-last > .accordion-header-selected,\n#left .accordion > .panel-hleft.panel-last > .accordion-header-border {\n    border-right-color: #D3D3D3;\n}\n\n#left .accordion > .panel-hright {\n    float: right;\n}\n\n#left .accordion > .panel-hright > .panel-header {\n    border-width: 0 0 0 1px;\n}\n\n#left .accordion > .panel-hright > .panel-body {\n    border-width: 0 0 0 1px;\n}\n\n#left .accordion > .panel-hright.panel-last > .accordion-header {\n    border-left-color: #f3f3f3;\n}\n\n#left .accordion > .panel-hright.panel-last > .accordion-body {\n    border-left-color: #ffffff;\n}\n\n#left .accordion > .panel-hright.panel-last > .accordion-header-selected,\n#left .accordion > .panel-hright.panel-last > .accordion-header-border {\n    border-left-color: #D3D3D3;\n}\n\n\n#left .tree {\n    margin: 0;\n    padding: 0;\n    list-style-type: none;\n}\n\n#left .tree li {\n    /*height: 33px;*/\n    /*line-height: 23px;*/\n    white-space: nowrap;\n}\n\n#left .tree li ul {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n}\n\n#left .tree-node {\n    height: 35px;\n    white-space: nowrap;\n    cursor: pointer;\n    line-height: 17px;\n    padding-top: 5px;\n    padding-left: 10px;\n}\n\n#left .tree-hit {\n    cursor: pointer;\n}\n\n#left .tree-expanded,\n#left .tree-collapsed,\n#left .tree-folder,\n#left .tree-file,\n#left .tree-checkbox,\n#left .tree-indent {\n    display: inline-block;\n    width: 16px;\n    height: 18px;\n    margin: 5px 0;\n    vertical-align: middle;\n    overflow: hidden;\n}\n\n.tree-expanded {\n    background: none;\n    font-family: \"iconfont\" !important;\n    font-size: 16px;\n    font-style: normal;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n\n.tree-expanded:before {\n    content: \"\\e677\";\n}\n\n/*.tree-expanded-hover {*/\n/*    background: url('images/tree_icons.png') no-repeat -50px 0px;*/\n/*}*/\n.tree-collapsed {\n    background: none;\n    font-family: \"iconfont\" !important;\n    font-size: 16px;\n    font-style: normal;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n\n.tree-collapsed:before {\n    content: \"\\e67b\";\n}\n\n/*.tree-collapsed-hover {*/\n/*    background: url('images/tree_icons.png') no-repeat -32px 0px;*/\n/*}*/\n/*.tree-lines .tree-expanded,*/\n/*.tree-lines .tree-root-first .tree-expanded {*/\n/*    background: url('images/tree_icons.png') no-repeat -144px 0;*/\n/*}*/\n/*.tree-lines .tree-collapsed,*/\n/*.tree-lines .tree-root-first .tree-collapsed {*/\n/*    background: url('images/tree_icons.png') no-repeat -128px 0;*/\n/*}*/\n/*.tree-lines .tree-node-last .tree-expanded,*/\n/*.tree-lines .tree-root-one .tree-expanded {*/\n/*    background: url('images/tree_icons.png') no-repeat -80px 0;*/\n/*}*/\n/*.tree-lines .tree-node-last .tree-collapsed,*/\n/*.tree-lines .tree-root-one .tree-collapsed {*/\n/*    background: url('images/tree_icons.png') no-repeat -64px 0;*/\n/*}*/\n/*.tree-line {*/\n/*    background: url('images/tree_icons.png') no-repeat -176px 0;*/\n/*}*/\n/*.tree-join {*/\n/*    background: url('images/tree_icons.png') no-repeat -192px 0;*/\n/*}*/\n/*.tree-joinbottom {*/\n/*    background: url('images/tree_icons.png') no-repeat -160px 0;*/\n/*}*/\n.tree-folder {\n    background: none;\n    font-family: \"iconfont\" !important;\n    font-size: 14px;\n    font-style: normal;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    color: #b8c7ce;\n}\n\n.tree-folder:before {\n    content: \"\\e722\";\n}\n\n.tree-folder-open {\n    background: none;\n    font-family: \"iconfont\" !important;\n    font-size: 16px;\n    font-style: normal;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n\n.tree-folder-open:before {\n    content: \"\\e71f\";\n}\n\n.tree-file {\n    background: none;\n    font-family: \"iconfont\" !important;\n    font-size: 14px;\n    font-style: normal;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    color: #b8c7ce;\n}\n\n.tree-file:before {\n    content: \"\\e70e\";\n}\n\n/*.tree-loading {*/\n/*    background: url('images/loading.gif') no-repeat center center;*/\n/*}*/\n/*.tree-checkbox0 {*/\n/*    background: url('images/tree_icons.png') no-repeat -208px -18px;*/\n/*}*/\n/*.tree-checkbox1 {*/\n/*    background: url('images/tree_icons.png') no-repeat -224px -18px;*/\n/*}*/\n/*.tree-checkbox2 {*/\n/*    background: url('images/tree_icons.png') no-repeat -240px -18px;*/\n/*}*/\n#left .tree-title {\n    font-size: 12px;\n    display: inline-block;\n    text-decoration: none;\n    vertical-align: middle;\n    white-space: nowrap;\n    padding: 0;\n    margin: 0;\n    height: 18px;\n    padding-left: 6px;\n}\n\n#left .tree-node-proxy {\n    font-size: 14px;\n    line-height: 20px;\n    padding: 0 2px 0 20px;\n    border-width: 1px;\n    border-style: solid;\n    z-index: 9900000;\n}\n\n#left .tree-dnd-icon {\n    display: inline-block;\n    position: absolute;\n    width: 16px;\n    height: 18px;\n    left: 2px;\n    top: 50%;\n    margin-top: -9px;\n}\n\n/*.tree-dnd-yes {*/\n/*    background: url('images/tree_icons.png') no-repeat -256px 0;*/\n/*}*/\n/*.tree-dnd-no {*/\n/*    background: url('images/tree_icons.png') no-repeat -256px -18px;*/\n/*}*/\n#left .tree-node-top {\n    border-top: 1px dotted red;\n}\n\n#left .tree-node-bottom {\n    border-bottom: 1px dotted red;\n}\n\n#left .tree-node-append .tree-title {\n    border: 1px dotted red;\n}\n\n#left .tree-editor {\n    border: 1px solid #D3D3D3;\n    font-size: 14px;\n    height: 26px;\n    line-height: 26px;\n    padding: 0 4px;\n    margin: 0;\n    width: 80px;\n    outline-style: none;\n    vertical-align: middle;\n    position: absolute;\n    top: 0;\n}\n\n#left .tree-node-proxy {\n    background-color: #ffffff;\n    color: #000000;\n    border-color: #D3D3D3;\n}\n\n#left .tree-node-hover {\n    background: #646D7C;\n    color: #FFFFFF;\n}\n\n#left .tree-node-selected {\n    background: #646D7C;\n    color: #FFFFFF;\n}\n\n#left .tree-node-disabled {\n    opacity: 0.5;\n    cursor: default;\n}\n\n#left .tree-node-hidden {\n    display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/css/login.css",
    "content": "/*css 初始化 */\n/*html, body, ul, li, ol, dl, dd, dt, p, h1, h2, h3, h4, h5, h6, form, fieldset, legend, img {*/\n/*    margin: 0;*/\n/*    padding: 0;*/\n/*}*/\n\n/*!*将标签原有的默认内外边距去掉*!*/\n/*fieldset, img, input, button {*/\n/*    border: none; !*去掉边框*!*/\n/*    padding: 0;*/\n/*    margin: 0;*/\n/*    outline-style: none; !*去掉环绕边框*!*/\n/*}*/\n\n/*ul, ol {*/\n/*    list-style: none; !*去掉原样式中的小黑点*!*/\n/*    !*ctrl+alt+l*!*/\n/*}*/\n\ninput {\n    padding-top: 0;\n    padding-bottom: 0;\n}\n\nselect, input {\n    vertical-align: middle; /*输入字居中显示*/\n}\n\nselect, input, textarea {\n    font-size: 14px;\n    margin: 0;\n}\n\n/**/\ntextarea {\n    resize: none; /*防止拖动*/\n}\n\nimg {\n    border: 0;\n    vertical-align: middle; /*  去掉图片底部默认的3像素空白缝隙*/\n}\n\ntable {\n    border-collapse: collapse; /*合并外边线*/\n}\n\nbody {\n    font-family: Microsoft YaHei, Arial, \"\\5b8b\\4f53\";\n    /*background:#0064C8;*/\n}\n\n.clearfix:before, .clearfix:after {\n    content: \"\";\n    display: table;\n}\n\n.clearfix:after {\n    clear: both;\n}\n\n.clearfix {\n    *zoom: 1; /*IE/7/6*/\n    /*兼容IE6下的写法*/\n}\n\nh1, h2, h3, h4, h5, h6 {\n    text-decoration: none; /**/\n    font-weight: normal; /*不加粗*/\n    font-size: 100%;\n}\n\n.login-page {\n    content: '';\n    width: 100%;\n    height: 100%;\n    display: block;\n    z-index: -1;\n\n    position: absolute;\n    top: 0;\n    right: 0;\n    background: url(\"../img/login/login_page_background.jpg\") no-repeat;\n    background-size: cover;\n}\n\n/*login 开始*/\n.login-box {\n    width: 1000px;\n    height: 500px;\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    margin-left: -510px; /* 500px */\n    margin-top: -250px; /* -250px */\n    /*background:#0064C8;*/\n}\n\n.login-box > .login-header {\n    height: 80px;\n    text-align: center;\n}\n\n.login-box > .login-header > p {\n    color: #fff;\n    font-size: 40px;\n    font-weight: 600;\n    margin-top: -40px;\n    letter-spacing: 5px\n}\n\n.login-box > .login-body {\n    width: 1000px;\n    height: 370px; /* 320px */\n    margin-top: 20px; /* 20px */\n}\n\n.login-box > .login-body > .login-body-left {\n    height: 370px; /* 320px */\n    width: 650px;\n    float: left;\n    -moz-border-top-left-radius: 10px;\n    -webkit-border-top-left-radius: 10px;\n    border-top-left-radius: 10px;\n    background: url(\"../img/login/login_body_left.jpg\") no-repeat;\n    background-size: cover;\n}\n\n.login-box > .login-body > .login-body-right {\n    height: 370px; /* 320px */\n    width: 350px;\n    float: right;\n    background-color: #e9eef2;\n    -moz-border-top-right-radius: 10px;\n    -webkit-border-top-right-radius: 10px;\n    border-top-right-radius: 10px;\n\n    -moz-border-bottom-right-radius: 10px;\n    -webkit-border-bottom-right-radius: 10px;\n    border-bottom-right-radius: 10px;\n}\n\n.login-box > .login-body > .login-body-right > .right-title {\n    color: #251E5F;\n    font-size: 20px;\n    font-weight: 700;\n    text-align: center;\n    line-height: 60px;\n    background: url(\"../img/login/horizontal_divider.png\") repeat;\n    margin-bottom: 25px;\n}\n\n.login-box > .login-body > .login-body-right > form > div {\n    position: relative;\n}\n\n/*.login-box>.login-body>.login-body-right>form>div>img{*/\n/*    position: absolute;*/\n/*    left: 62px;*/\n/*    top:7px;*/\n/*}*/\n.login-box > .login-body > .login-body-right > form > div > i {\n    position: absolute;\n    /*left: 62px;*/\n    /*top:7px;*/\n    left: 61px;\n    top: 6px;\n    font-size: 20px;\n    color: #C3C2C2;\n}\n\n.login-box > .login-body > .login-body-right > form input {\n    height: 35px;\n    width: 250px;\n    border: 1px solid #d3d8dc;\n    box-sizing: border-box;\n    margin-bottom: 20px;\n    margin-left: 50px;\n    -moz-border-radius: 3px;\n    -webkit-border-radius: 3px;\n    border-radius: 3px;\n    color: #333;\n    padding-left: 40px;\n    line-height: 40px; /* 解决 ie8 下 input 输入框文字顶格的问题 */\n    line-height: normal\n}\n\n.login-box > .login-body > .login-body-right > form > .verify-code > input {\n    width: 150px;\n}\n\n.login-box > .login-body > .login-body-right > form > .verify-code > .verify-code-image {\n    float: right;\n    margin-right: 50px;\n    cursor: pointer;\n}\n\n.login-box > .login-body > .login-body-right > form > .verify-code > .verify-code-image > img {\n    width: 90px;\n    height: 30px;\n}\n\n.login-box > .login-body > .login-body-right > form > .remember-me > input {\n    width: 20px;\n    margin-top: -12px;\n    margin-bottom: 5px;\n}\n\n.login-box > .login-body > .login-body-right > form > .remember-me > div {\n    float: right;\n    margin-right: 240px;\n    cursor: pointer;\n}\n\n.login-box > .login-body > .login-body-right > form input:focus {\n    border: 1px solid #999;\n}\n\n.login-box > .login-body > .login-body-right > form > .login-button > a {\n    display: block;\n    width: 250px;\n    height: 35px;\n    line-height: 35px;\n    text-align: center;\n    background-color: #0064c8; /* */\n    -moz-border-radius: 3px;\n    -webkit-border-radius: 3px;\n    border-radius: 3px;\n    color: #fff;\n    text-decoration: none;\n    margin-left: 50px;\n}\n\n.login-box > .login-body > .login-body-right > form > .login-button > a:hover {\n    background-color: #0058af;\n}\n\n\n.login-box > .login-body > .login-body-right > form > .login-button > button {\n    display: block;\n    width: 250px;\n    height: 35px;\n    line-height: 35px;\n    text-align: center;\n    background-color: #0064c8; /* */\n    -moz-border-radius: 3px;\n    -webkit-border-radius: 3px;\n    border-radius: 3px;\n    color: #fff;\n    text-decoration: none;\n    margin-left: 50px;\n}\n\n.login-box > .login-body > .login-body-right > form > .login-button > button:hover {\n    background-color: #0058af;\n}\n\n.login-box > .login-footer {\n    text-align: center;\n    padding-top: 20px;\n}\n\n.login-box > .login-footer > p {\n    font-size: 14px;\n    color: #eee;\n    line-height: 30px;\n}\n\n/*login 结束*/\n"
  },
  {
    "path": "src/main/resources/static/assets/css/workbench.css",
    "content": "body {\n    min-width: 1220px;\n    position: relative\n}\n\nbody .todo-panel {\n    position: absolute;\n    height: 515px;\n    border: 1px solid #cbcbcb;\n    background-color: #ffffff;\n    box-shadow: 0 2px 0 0 #cbcbcb;\n    border-bottom-left-radius: 3px;\n    border-bottom-right-radius: 3px;\n    display: none\n}\n\nbody .todo-panel .todo-title {\n    position: relative;\n    height: 111px\n}\n\nbody .todo-panel .todo-title i {\n    position: absolute;\n    font-size: 60px;\n    left: 14px;\n    top: 29px;\n    color: #0089d0\n}\n\nbody .todo-panel .todo-title span.num {\n    position: absolute;\n    left: 80px;\n    top: 30px;\n    font-size: 32px;\n    color: #f45438\n}\n\nbody .todo-panel .todo-title span.num span {\n    font-size: 14px;\n    color: #000\n}\n\nbody .todo-panel .todo-title label {\n    position: absolute;\n    top: 70px;\n    font-size: 14px;\n    left: 80px;\n    color: #000\n}\n\nbody .todo-panel .todo-items {\n    overflow-y: auto;\n    height: 394px\n}\n\nbody .todo-panel .todo-items ul li {\n    list-style: none;\n    font-size: 14px;\n    color: #000;\n    padding-left: 15px;\n    padding-right: 20px;\n    line-height: 31px;\n    height: 31px\n}\n\nbody .todo-panel .todo-items ul li > span {\n    position: relative;\n    display: inline-block;\n    background-color: #0089d0;\n    width: 3px;\n    height: 3px;\n    top: -14px;\n    margin-right: 3px\n}\n\nbody .todo-panel .todo-items ul li a {\n    display: inline-block;\n    color: #000;\n    text-decoration: none;\n    width: 80%\n}\n\nbody .todo-panel .todo-items ul li a:hover {\n    text-decoration: underline\n}\n\nbody .todo-panel .todo-items ul li a > span {\n    color: #f45438\n}\n\nbody .todo-panel .todo-items ul li label {\n    float: right;\n    color: #b8b8b8\n}\n\n#body .body-content {\n    position: relative;\n    padding-right: 300px\n}\n\n#body .body-content .right-zone {\n    position: absolute;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    width: 300px\n}\n\n#body .item-box {\n    width: 286px;\n    border: 1px solid #bfbfbf;\n    margin-bottom: 12px\n}\n\n#body .item-box.right-box-one {\n    height: 231px\n}\n\n#body .item-box.right-box-two {\n    height: 272px\n}\n\n#body .item-box.right-box-three {\n    height: 272px;\n}\n\n#body .item-box.right-box-three .right-box-header {\n    border-bottom: 0;\n}\n\n#body .item-box.right-box-three .right-box-tab {\n    height: 31px;\n    border-top: 2px solid #0089d0;\n    margin-bottom: 5px;\n    border-left: 1px solid #bfbfbf\n}\n\n#body .item-box.right-box-three .right-box-tab a {\n    display: inline-block;\n    width: 141px;\n    height: 31px;\n    float: left;\n    border: 0;\n    color: #000;\n    text-align: center;\n    line-height: 31px;\n    text-decoration: none;\n    background-color: #f1f1f1\n}\n\n#body .item-box.right-box-three .right-box-tab a.current {\n    background-color: #ffffff;\n    border-bottom: 1px solid #bfbfbf;\n}\n\n#body .item-box.right-box-three ul.hide {\n    display: none\n}\n\n/*#body .item-box.right-box-three ul li a{width:260px}*/\n#body .item-box .right-box-header {\n    padding: 0 10px;\n    height: 35px;\n    line-height: 35px;\n    background-color: #e3e3e3;\n    border-left: 1px solid #bfbfbf;\n}\n\n#body .item-box .right-box-header label {\n    color: #000;\n    font-weight: bold\n}\n\n#body .item-box .right-box-header a {\n    text-decoration: none;\n    float: right;\n    color: #000\n}\n\n#body .item-box .right-box-header a:hover {\n    text-decoration: underline\n}\n\n#body .item-box ul {\n    padding-top: 5px\n}\n\n#body .item-box ul li {\n    list-style: none;\n    font-size: 14px;\n    color: #000;\n    padding: 0 10px;\n    line-height: 31px;\n    height: 31px\n}\n\n#body .item-box ul li span {\n    position: relative;\n    display: inline-block;\n    background-color: #0089d0;\n    width: 3px;\n    height: 3px;\n    top: -14px;\n    margin-right: 3px\n}\n\n#body .item-box ul li a {\n    display: inline-block;\n    color: #000;\n    text-decoration: none;\n    width: 200px\n}\n\n#body .item-box ul li a:hover {\n    text-decoration: underline\n}\n\n#body .item-box ul li label {\n    float: right;\n    color: #b8b8b8\n}\n\n#body .center-part .center-items {\n    margin-bottom: 10px\n}\n\n#body .center-part .center-items .item-header {\n    padding: 0 10px;\n    height: 35px;\n    line-height: 35px;\n    border-bottom: 1px solid #bfbfbf;\n    background-color: #e3e3e3;\n    font-weight: bold\n}\n\n#body .center-part .center-items.todo {\n    position: relative;\n    height: 233px;\n    padding-right: 215px\n}\n\n#body .center-part .center-items.todo .calendar-part {\n    position: absolute;\n    right: 0;\n    width: 215px;\n    top: 0;\n    bottom: 0\n}\n\n#body .center-part .center-items.todo .work-items {\n    height: 233px\n}\n\n#body .center-part .center-items.todo .work-items li {\n    float: left;\n    width: 33.333333%;\n    cursor: pointer\n}\n\n#body .center-part .center-items.todo .work-items li .work-inner {\n    padding-right: 10px\n}\n\n#body .center-part .center-items.todo .work-items li .work-inner .work-item {\n    position: relative;\n    height: 111px;\n    color: #ffffff\n}\n\n#body .center-part .center-items.todo .work-items li .work-inner .work-item i {\n    position: absolute;\n    font-size: 60px;\n    left: 11px;\n    top: 22px\n}\n\n#body .center-part .center-items.todo .work-items li .work-inner .work-item span.num {\n    position: absolute;\n    left: 80px;\n    top: 30px;\n    font-size: 32px\n}\n\n#body .center-part .center-items.todo .work-items li .work-inner .work-item span.num span {\n    font-size: 14px\n}\n\n#body .center-part .center-items.todo .work-items li .work-inner .work-item label {\n    position: absolute;\n    top: 70px;\n    font-size: 14px;\n    left: 80px\n}\n\n#body .center-part .center-items.todo .work-items li .work-inner .work-item.green {\n    background-color: #28a745;\n    margin-bottom: 11px\n}\n\n#body .center-part .center-items.todo .work-items li .work-inner .work-item.red {\n    background-color: #dc3545;\n    margin-bottom: 11px\n}\n\n#body .center-part .center-items.todo .work-items li .work-inner .work-item.yellow {\n    background-color: #ffc107;\n    margin-bottom: 11px\n}\n\n#body .center-part .center-items.todo .work-items li .work-inner .work-item.blue {\n    background-color: #007bff\n}\n\n#body .center-part .center-items.todo .work-items li .work-inner .work-item.purple {\n    background-color: #6f42c1\n}\n\n#body .center-part .center-items.todo .work-items li .work-inner .work-item.gray {\n    background-color: #6c757d\n}\n\n#body .center-part .center-items.chart0 {\n    height: 274px\n}\n\n#body .center-part .center-items.chart0 .chart0-item {\n    float: left;\n    width: 50%\n}\n\n#body .center-part .center-items.chart0 .chart0-item .item-inner {\n    padding-right: 10px\n}\n\n#body .center-part .center-items.chart0 .chart0-item .item-inner .item-content {\n    height: 272px;\n    border: 1px solid #bfbfbf\n}\n\n#body .center-part .center-items.chart0 .chart0-item .item-inner .item-content .content-header {\n    padding: 0 10px;\n    height: 35px;\n    line-height: 35px;\n    border-bottom: 1px solid #bfbfbf;\n    background-color: #e3e3e3;\n    font-weight: bold\n}\n\n#body .center-part .center-items.chart0 .chart0-item .item-inner .item-content .chart-chart {\n    height: 236px\n}\n\n#body .center-part .center-items.chart1 {\n    padding-right: 10px;\n    height: 274px;\n    border: 0;\n    margin-bottom: 0\n}\n\n#body .center-part .center-items.chart1 .chart1-inner {\n    height: 272px;\n    border: 1px solid #bfbfbf\n}\n\n#body .center-part .center-items.chart1 .chart1-inner .chart1-chart {\n    height: 236px\n}"
  },
  {
    "path": "src/main/resources/static/assets/js/global.js",
    "content": "if ($) {\n    if ($.fn.validatebox) {\n        $.extend($.fn.validatebox.defaults.rules, {\n            confirmPassword: {\n                validator: function (value, param) {\n                    return value === $(param[0]).val();\n                },\n                message: '密码输入不一致'\n            },\n            password: {\n                validator: function (value) {\n                    return value.length >= 6 && value.length <= 32\n                },\n                message: '密码长度为6-32个字符'\n            }\n        });\n    }\n}"
  },
  {
    "path": "src/main/resources/static/assets/js/index.js",
    "content": "$(window).load(function () {\n    $(\"#loading\").fadeOut();\n});\n\n$(function () {\n    parentViewMenuCategory();\n    addTab('#tabs', '工作台', '/system/workbench', 'iconfont icon-home', false, -1);\n    $('#logoutButton').click(function () {\n        if (window.confirm('确定要注销登录吗？')) {\n            expressui.ajax({\n                // dataType: 'json',\n                url: Url.User.Api.LOGOUT,\n                success: function (data) {\n                    window.location.href = Url.User.Page.LOGIN;\n                },\n                error: function (xhr) {\n                    alert(\"注销失败\");\n                }\n            });\n        }\n    });\n});\n\nfunction pageTurning() {\n    var page = 0, navItemHeight = 50, pages = ($('.nav-wrap-ul').height() / navItemHeight) - 1;\n    if (page < pages) {\n        $('.nav-prev,.nav-next').show();\n    }\n\n    $(document).on('click', '.nav-prev,.nav-next', function () {\n        if ($(this).hasClass('disabled')) return;\n        if ($(this).hasClass('nav-next')) {\n            page++;\n            $('.nav-wrap-ul').stop().animate({'margin-top': -navItemHeight * page}, 200);\n            if (page === pages) {\n                $(this).addClass('disabled');\n                $('.nav-prev').removeClass('disabled');\n            } else {\n                $('.nav-prev').removeClass('disabled');\n            }\n\n        } else {\n            page--;\n            $('.nav-wrap-ul').stop().animate({'margin-top': -navItemHeight * page}, 200);\n            if (page === 0) {\n                $(this).addClass('disabled');\n                $('.nav-next').removeClass('disabled');\n            } else {\n                $('.nav-next').removeClass('disabled');\n            }\n        }\n    });\n}\n\nfunction removeSelf() {\n    var parent = document.getElementsByTagName('body')[0];\n    var getElementsByClassName = function (searchClass, node, tag) {\n        if (document.getElementsByClassName) {\n            var nodes = (node || document).getElementsByClassName(searchClass), result = [];\n            for (var i = 0; node === nodes[i++];) {\n                if (tag !== \"*\" && node.tagName === tag.toUpperCase()) {\n                    result.push(node)\n                }\n            }\n            return result\n        } else {\n            node = node || document;\n            tag = tag || \"*\";\n            result = [];\n            var classes = searchClass.split(\" \"),\n                elements = (tag === \"*\" && node.all) ? node.all : node.getElementsByTagName(tag),\n                patterns = [],\n                current,\n                match;\n            var i = classes.length;\n            while (--i >= 0) {\n                patterns.push(new RegExp(\"(^|\\\\s)\" + classes[i] + \"(\\\\s|$)\"));\n            }\n            var j = elements.length;\n            while (--j >= 0) {\n                current = elements[j];\n                match = false;\n                for (var k = 0, kl = patterns.length; k < kl; k++) {\n                    match = patterns[k].test(current.className);\n                    if (!match) break;\n                }\n                if (match) result.push(current);\n            }\n            return result;\n        }\n    };\n    var happy = getElementsByClassName('browser-happy')[0];\n    parent.removeChild(happy);\n}\n\n/**\n * @desc 父级菜单分类\n */\nfunction parentViewMenuCategory() {\n    var parentViewMenuCategory = $('#parentViewMenuCategory');\n    expressui.ajax({\n        url: Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_parent_by_user_id/' + _user.id,\n        success: function (data) {\n            if (data) {\n                var viewMenuCategory = data;\n                if (viewMenuCategory) {\n                    for (var i = 0; i < viewMenuCategory.length; i++) {\n                        var id = viewMenuCategory[i].id;\n                        var name = viewMenuCategory[i].name;\n                        var icon = viewMenuCategory[i].icon;\n                        if (i === 0) {\n                            // 第一个父级菜单默认选中\n                            parentViewMenuCategory.append('<li class=\"parent-view-menu-category nav-item selected\" data-view-menu-category=\"' + id + '\"><a href=\"javascript:\"><i class=\"' + icon + '\"></i><span class=\"nav-item-title\">' + name + '</span> </a> </li>')\n                        } else {\n                            parentViewMenuCategory.append('<li class=\"parent-view-menu-category nav-item\" data-view-menu-category=\"' + id + '\"><a href=\"javascript:\"><i class=\"' + icon + '\"></i><span class=\"nav-item-title\">' + name + '</span> </a> </li>')\n                        }\n                    }\n                }\n\n                pageTurning();\n\n                $('.parent-view-menu-category').on('click', function () {\n                    var viewMenuCategoryId = $(this).data('view-menu-category');\n                    childViewMenuCategory(this, viewMenuCategoryId);\n\n                    var viewMenuCategoryName = $(this).find('span').html();\n                    // $($('#layout').layout('panel', 'west')).panel({title: viewMenuCategoryName});\n\n                });\n\n                // 默认点击第一个父级菜单分类，并显示其所有子级菜单分类\n                $('.parent-view-menu-category').eq('0').trigger('click');\n\n            }\n        }\n    });\n}\n\n/**\n * @desc 显示二级子菜单菜单\n * @param currentSelector\n * @param viewMenuCategoryId\n */\nfunction childViewMenuCategory(currentSelector, viewMenuCategoryId) {\n    removeAllFirstMenuSelectedClass(currentSelector);\n    removeAccordionPanel();\n    var slideMenu = $('.slide-menu');\n    if (!viewMenuCategoryId) {\n        return;\n    }\n\n    expressui.ajax({\n        url: Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_child_by_parent_id_and_user_id',\n        data: {\n            parentId: viewMenuCategoryId,\n            userId: _user.id\n        },\n        success: function (data) {\n            if (data) {\n                var childViewMenuCategory = data;\n                for (var i = 0; i < childViewMenuCategory.length; i++) {\n                    var childViewMenuCategoryId = childViewMenuCategory[i].id;\n                    childViewMenuCategory[i].selected = (i === 0);\n\n                    childViewMenuCategory[i].title = childViewMenuCategory[i].name;\n                    childViewMenuCategory[i].iconCls = childViewMenuCategory[i].icon;\n                    childViewMenuCategory[i].content = '<div id=\"childViewMenuCategoryAndViewMenu_' + childViewMenuCategoryId + '\"></div>';\n                    slideMenu.accordion('add', childViewMenuCategory[i]);\n\n                    childViewMenuCategoryAndViewMenu('#childViewMenuCategoryAndViewMenu_' + childViewMenuCategoryId, childViewMenuCategoryId);\n                }\n            }\n        }\n    });\n\n}\n\n/**\n * @desc 显示三级子菜单和四级子菜单\n * @param selector\n * @param parentId\n */\nfunction childViewMenuCategoryAndViewMenu(selector, parentId) {\n    expressui.ajax({\n        url: Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_child_view_menu_category_and_view_menu_by_parent_id_and_user_id',\n        data: {\n            parentId: parentId,\n            userId: _user.id\n        },\n        success: function (data) {\n            if (data) {\n                var childViewMenuCategoryAndViewMenu = data;\n                $(selector).tree({\n                    loadFilter: function (data) {\n                        childViewMenuCategoryAndViewMenu = data.data ? data.data : data;\n                        for (var i = 0; i < childViewMenuCategoryAndViewMenu.length; i++) {\n                            if (!childViewMenuCategoryAndViewMenu[i].url) {\n                                childViewMenuCategoryAndViewMenu[i].state = 'closed';\n                            } else {\n                                childViewMenuCategoryAndViewMenu[i].state = 'open';\n                            }\n                            childViewMenuCategoryAndViewMenu[i].text = childViewMenuCategoryAndViewMenu[i].name;\n                        }\n                        return childViewMenuCategoryAndViewMenu;\n                    },\n                    data: childViewMenuCategoryAndViewMenu,\n                    lines: false,\n                    animate: true,\n                    onBeforeExpand: function (node, param) {\n                        // 列出四级子菜单，直接可点击的菜单\n                        $(selector).tree('options').url = Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_child_view_menu_category_and_view_menu_by_parent_id_and_user_id?parentId=' + node.id + '&userId=' + _user.id;\n                        $(selector).tree('options').method = 'get';\n                    },\n                    onClick: function (node) {\n                        if (node.url) {\n                            addTab('#tabs', node.text, node.url, node.iconCls, true, node.id);\n                        } else {\n                            $(selector).tree('toggle', node.target);\n                        }\n                    }\n                    // onDblClick:function (node) {\n                    // $(selector).tree('toggle',node.target);\n                    // }\n                });\n            }\n        }\n    });\n}\n\n/**\n * @desc 移除左侧Accordion已有的菜单\n */\nfunction removeAccordionPanel() {\n    var slideMenu = $('.slide-menu');\n    var panels = slideMenu.accordion('panels');\n    var panelsLength = panels.length;\n    if (panelsLength > 0) {\n        for (var i = 0; i < panelsLength; i++) {\n            slideMenu.accordion('remove', 0);\n        }\n    }\n}\n\n/**\n * @desc 移除所有一级父菜单的 selected class，然后 selected 当前被点击的一级菜单\n * @param currentSelector\n */\nfunction removeAllFirstMenuSelectedClass(currentSelector) {\n    $('.parent-view-menu-category').each(function (i, e) {\n        $(e).removeClass('selected');\n    });\n    $(currentSelector).addClass('selected');\n}\n\n/**\n * @desc 添加 tab\n * @param tabsSelector\n * @param title\n * @param url\n * @param iconCls\n * @param closable\n * @param index\n */\nfunction addTab(tabsSelector, title, url, iconCls, closable, index) {\n    var tabs = $(tabsSelector).tabs('tabs');\n    var tabsLength = tabs.length;\n    index = tabsLength + 1;\n    if ($(tabsSelector).tabs('exists', title)) {\n        $(tabsSelector).tabs('select', title);\n\n    } else {\n        var lastMenuClickTime = util.cookie.get(\"menuClickTime\");\n        var nowTime = new Date().getTime();\n        if ((nowTime - lastMenuClickTime) >= 600) {\n            util.cookie.set(\"menuClickTime\", new Date().getTime());\n            $(tabsSelector).tabs('add', {\n                id: Math.random(),\n                title: title,\n                index: index,\n                selected: true,\n                closable: (closable === undefined) || (closable === null) || (closable === true),\n                content: '<iframe src=\"' + Url.PAGE + url + '\" scrolling=\"auto\" frameborder=\"0\" class=\"tab-iframe\"></iframe>', // iframe框架内加载\n                // href:url, // 可能会出现元素重复加载的情况，js、css等都会出现问题\n                // iconCls:'iconfont icon-file',\n                iconCls: (iconCls === undefined) ? 'iconfont icon-file' : iconCls,\n                fit: true,\n                border: false,\n                cache: false\n            });\n        } else {\n            $.messager.show({\n                title: '信息',\n                msg: '操作过快，请稍后重试！'\n            });\n        }\n    }\n}\n\n/**\n * @desc 跳转至指定 index\n * @param tabsSelector\n * @param index\n */\nfunction tabsTo(tabsSelector, index) {\n    $(tabsSelector).tabs('select', index);\n}\n\n/**\n * @desc 关闭选中tab\n * @param tabsSelector\n */\nfunction closeSelectedTab(tabsSelector) {\n    var tab = $(tabsSelector).tabs('getSelected');\n    var index = $(tabsSelector).tabs('getTabIndex', tab);\n    if (index !== 0) {\n        $(tabsSelector).tabs('close', index);\n    }\n}\n\n/**\n * @desc 刷新指定 tabs 内的 tab\n * @param tabsSelector\n */\nfunction refreshTabIframe(tabsSelector) {\n    var tab = $(tabsSelector).tabs('getSelected');\n    var iframe = tab.find('iframe')[0];\n    iframe.contentWindow.location.href = iframe.src;\n}\n\nfunction onContextMenu(event, title, index) {\n    event.preventDefault();\n    if (index >= 0) {\n        tabsTo('#tabs', index);\n        $('#tabsContextMenu').menu('show', {\n            left: event.pageX,\n            top: event.pageY\n        }).data('tabTitle', title);\n    }\n}\n\nfunction tabsContextMenu(menu, tabsSelector, type) {\n    var tabs = tabsSelector.tabs('tabs');\n    var tabsTitle = [];\n    var refreshTab, refreshIframe;\n    var i;\n\n    $.each(tabs, function (i, e) {\n        var options = $(e).panel('options');\n        if (options.closable)\n            tabsTitle.push(options.title);\n    });\n    var currentTabTitle = $(menu).data('tabTitle');\n    var currentTabIndex = tabsSelector.tabs('getTabIndex', tabsSelector.tabs('getTab', currentTabTitle));\n    switch (type) {\n        case 'tabRefresh': // 重新加载\n            refreshTab = tabsSelector.tabs('getSelected');\n            refreshIframe = refreshTab.find('iframe')[0];\n            refreshIframe.contentWindow.location.href = refreshIframe.src;\n            break;\n        case 'tabCloseCurrent':// 关闭标签页\n            if (currentTabIndex === 0) {\n                $.messager.show({\n                    title: '操作提示',\n                    msg: '工作台不允许关闭'\n                });\n            }\n            if (currentTabIndex > 0) {\n                tabsSelector.tabs('close', currentTabTitle);\n            }\n            break;\n        case 'tabCloseAll':// 关闭所有标签页\n            for (i = 0; i < tabsTitle.length; i++) {\n                tabsSelector.tabs('close', tabsTitle[i]);\n            }\n            break;\n        case 'tabCloseOther':// 关闭其他标签页\n            for (i = 0; i < tabsTitle.length; i++) {\n                if (currentTabTitle !== tabsTitle[i])\n                    tabsSelector.tabs('close', tabsTitle[i]);\n            }\n            tabsSelector.tabs('select', currentTabTitle);\n            break;\n        case 'tabCloseRight':// 关闭右侧标签页\n            for (i = currentTabIndex; i < tabsTitle.length; i++) {\n                tabsSelector.tabs('close', tabsTitle[i]);\n            }\n            tabsSelector.tabs('select', currentTabTitle);\n            break;\n        case 'tabCloseLeft': //关闭左侧标签页\n            for (i = 0; i < currentTabIndex - 1; i++) {\n                tabsSelector.tabs('close', tabsTitle[i]);\n            }\n            tabsSelector.tabs('select', currentTabTitle);\n            break;\n\n        case 7: //在新窗口打开\n            refreshTab = tabsSelector.tabs('getSelected');\n            refreshIframe = refreshTab.find('iframe')[0];\n            window.open(refreshIframe.src);\n            break;\n    }\n}"
  },
  {
    "path": "src/main/resources/static/assets/js/login.js",
    "content": "$(function () {\n    // $('input, textarea').placeholder();\n\n    // /**\n    //  * iframe 框架刷新父页面\n    //  */\n    // if (window.top !== window.self) {\n    //     window.top.location = window.location;\n    // }\n\n    /**\n     * 刷新验证码\n     * @type {*|jQuery}\n     */\n    var verifyCodeImageSrc = $('#verifyCodeImage').attr('src');\n    $('#verifyCodeImage').click(function () {\n        refreshVerifyCode($(this), verifyCodeImageSrc);\n    });\n\n    function refreshVerifyCode(_this, verifyCodeImageSrc) {\n        _this.attr('src', verifyCodeImageSrc + '?_=' + Math.random());\n    }\n\n    $('#loginButton').click(function () {\n        var account = $('#account');\n        var password = $('#password');\n        var rememberMe = $('#rememberMe');\n        var verifyCode = $('#verifyCode');\n\n        if (account.val() === '' || password.val() === '') {\n            alert('请先输入账号和密码');\n            return;\n        }\n\n        if (verifyCode.val() === '') {\n            alert('请输入验证码');\n            return;\n        }\n\n        _this = this;\n\n        $(_this).attr('disabled', 'disabled');\n        account.attr('disabled', 'disabled');\n        password.attr('disabled', 'disabled');\n        verifyCode.attr('disabled', 'disabled');\n        rememberMe.attr('disabled', 'disabled');\n        try {\n            $.ajax({\n                url: Url.User.Api.LOGIN,\n                data: {\n                    account: account.val(),\n                    password: password.val(),\n                    rememberMe: rememberMe.is(':checked'),\n                    verifyCode: verifyCode.val()\n                },\n                type: 'post',\n                success: function (XMLHttpRequest, statusText) {\n                    // 刷新页面跳转到首页\n                    window.location.href = _contextPath;\n                },\n                error: function (XMLHttpRequest, statusText, errorThrown) {\n                    alert(XMLHttpRequest.responseJSON.message);\n                    $('#verifyCodeImage').click();\n                    account.removeAttr('disabled');\n                    password.removeAttr('disabled');\n                    verifyCode.removeAttr('disabled');\n                    rememberMe.removeAttr('disabled');\n                    $(_this).removeAttr('disabled');\n                }\n            });\n\n        } catch (e) {\n            console.log(e);\n            account.removeAttr('disabled');\n            password.removeAttr('disabled');\n            verifyCode.removeAttr('disabled');\n            rememberMe.removeAttr('disabled');\n            $(_this).removeAttr('disabled');\n        }\n    });\n\n});\n\nutil.document.keyDown(13, function () {\n    $('#loginButton').click();\n});"
  },
  {
    "path": "src/main/resources/static/assets/js/url.js",
    "content": "var Url = Url || {};\nUrl.PAGE = _contextPath;\nif (Url.PAGE.lastIndexOf('/') === 0 && Url.PAGE.length === 1) {\n    Url.PAGE = '';\n}\nUrl.API = Url.PAGE + '/api';\n\n// System\n{\n    Url.System = {};\n    page = {};\n    page.SYSTEM = Url.PAGE + '/system';\n    page.DICTIONARY = page.SYSTEM + '/dictionary';\n    page.DICTIONARY_CATEGORY = page.SYSTEM + '/dictionary_category';\n    page.OPERATION_LOG = page.SYSTEM + '/operation_log';\n    page.FILE = page.SYSTEM + '/file';\n    Url.System.Page = page;\n\n    api = {};\n    api.SYSTEM = Url.API + '/system';\n    api.DICTIONARY = api.SYSTEM + '/dictionary';\n    api.DICTIONARY_CATEGORY = api.SYSTEM + '/dictionary_category';\n    api.OPERATION_LOG = api.SYSTEM + '/operation_log';\n    api.FILE = api.SYSTEM + '/file';\n    Url.System.Api = api;\n}\n\n// User\n{\n    Url.User = {};\n    page = {};\n    page.USER = Url.PAGE + '/user';\n    page.LOGIN = page.USER + '/login';\n    page.LOGOUT = page.USER + '/logout';\n    page.ROLE = page.USER + '/role';\n    page.ROLE_AUTHORITY = page.USER + '/role_authority';\n    page.ROLE_VIEW_MENU = page.USER + '/role_view_menu';\n    page.VIEW_MENU = page.USER + '/view_menu';\n    page.VIEW_MENU_CATEGORY = page.USER + '/view_menu_category';\n    page.USER_ROLE = page.USER + '/user_role';\n    page.DEPARTMENT = page.USER + '/department';\n    page.VIEW_PAGE = page.USER + '/view_page';\n    page.VIEW_PAGE_CATEGORY = page.USER + '/view_page_category';\n    page.VIEW_PAGE_API = page.USER + '/view_page_api';\n    page.VIEW_PAGE_COMPONENT = page.USER + '/view_page_component';\n    page.VIEW_PAGE_COMPONENT_API = page.USER + '/view_page_component_api';\n    page.API = page.USER + '/api';\n    page.API_CATEGORY = page.USER + '/api_category';\n    Url.User.Page = page;\n\n    api = {};\n    api.USER = Url.API + '/user';\n    api.LOGIN = api.USER + '/login';\n    api.LOGOUT = api.USER + '/logout';\n    api.ROLE = api.USER + '/role';\n    api.ROLE_AUTHORITY = api.USER + '/role_authority';\n    api.ROLE_VIEW_MENU = api.USER + '/role_view_menu';\n    api.ROLE_VIEW_MENU_CATEGORY = api.USER + '/role_view_menu_category';\n    api.VIEW_MENU = api.USER + '/view_menu';\n    api.VIEW_MENU_CATEGORY = api.USER + '/view_menu_category';\n    api.USER_ROLE = api.USER + '/user_role';\n    api.DEPARTMENT = api.USER + '/department';\n    api.VIEW_PAGE = api.USER + '/view_page';\n    api.VIEW_PAGE_CATEGORY = api.USER + '/view_page_category';\n    api.VIEW_PAGE_API = api.USER + '/view_page_api';\n    api.VIEW_PAGE_COMPONENT = api.USER + '/view_page_component';\n    api.VIEW_PAGE_COMPONENT_CATEGORY = api.USER + '/view_page_component_category';\n    api.VIEW_PAGE_COMPONENT_API = api.USER + '/view_page_component_api';\n    api.API = api.USER + '/api';\n    api.API_CATEGORY = api.USER + '/api_category';\n    Url.User.Api = api;\n}\n\n// Mail\n{\n    Url.Mail = {};\n    page = {};\n    page.MAIL = Url.PAGE + '/mail';\n    Url.Mail.Page = page;\n\n    api = {};\n    api.MAIL = Url.API + '/mail';\n    Url.Mail.Api = api;\n}\n\n// Quartz\n{\n    Url.Quartz = {};\n    page = {};\n    page.QUARTZ = Url.PAGE + '/quartz';\n    page.JOB = page.QUARTZ + '/job';\n    page.JOB_RUNTIME_LOG = page.QUARTZ + '/job_runtime_log';\n    Url.Quartz.Page = page;\n\n    api = {};\n    api.QUARTZ = Url.API + '/quartz';\n    api.JOB = api.QUARTZ + '/job';\n    api.JOB_RUNTIME_LOG = api.QUARTZ + '/job_runtime_log';\n    Url.Quartz.Api = api;\n}\n\n\n// function getDictionaryCode(field, codeSlug){\n//     ajax({url:api.system+'/dictionary/getCode/byFieldAndCodeSlug',data:{field:field,codeSlug:codeSlug},success:function (result) {\n//             if(result.data){\n//                 return result.data;\n//             }\n//         }})\n// }\n"
  },
  {
    "path": "src/main/resources/static/assets/js/util.js",
    "content": "/**\n * jQuery Utils\n */\n\n\nvar util = util || {};\n\n(function (_util) {\n\n    _util = {\n        response: {},\n        request: {},\n        string: {},\n        object: {},\n        json: {},\n        document: {},\n        cookie: {}\n    };\n\n    {\n        _util.json.toObject = function (json) {\n            return eval('(' + json + ')');\n        };\n\n        _util.response.MESSAGE = 'message';\n        _util.response.CODE = 'code';\n        _util.response.DATA = 'data';\n        _util.response.EXCEPTION = 'exception';\n        _util.response._httpStatus = function (code, message) {\n            var json = '{\"' + _util.response.CODE + '\":' + code + ',\"' + _util.response.MESSAGE + '\":\"' + message + '\"}';\n            return _util.json.toObject(json);\n        };\n\n        _util.response.httpStatus = {\n            OK: _util.response._httpStatus(200, 'OK'),\n            NOT_FOUND: _util.response._httpStatus(404, 'NOT FOUND')\n        };\n\n        _util.response.ok = function (responseResult, fnOkCallback, fnNotOkCallback, fnThenCallback) {\n            if (responseResult) {\n\n                var OK = _util.response.httpStatus.OK.code;\n\n                var data = responseResult.hasOwnProperty(_util.response.DATA) ? responseResult[_util.response.DATA] : undefined;\n\n                var message = responseResult.hasOwnProperty(_util.response.MESSAGE) ? responseResult[_util.response.MESSAGE] : undefined;\n\n                var code = responseResult.hasOwnProperty(_util.response.CODE) ? responseResult[_util.response.CODE] : undefined;\n\n                if (code === OK) {\n                    if (typeof fnOkCallback === 'function') {\n                        fnOkCallback(data, message, code);\n                    }\n                } else {\n                    if (typeof fnNotOkCallback === 'function') {\n                        fnNotOkCallback(data, message, code);\n                    }\n                }\n\n                if (typeof fnThenCallback === 'function') {\n                    fnThenCallback(data, message, code);\n                }\n\n            }\n        };\n\n        _util.request.getQueryParam = function (name) {\n            var href = window.location.href;\n            var arr = href.split('?');\n            if (arr) {\n                if (arr.length > 1) {\n                    var arr1 = arr.splice(1);\n                    if (!arr1) {\n\n                    }\n                    var arr2 = arr1[0];\n                    if (!arr2) {\n                        return;\n                    }\n                    var arr3 = arr2.split('&');\n                    if (!arr3) {\n                        return;\n                    }\n                    if (arr3.length >= 1) {\n                        for (var i = 0; arr3.length > i; i++) {\n                            var arr4 = arr3[i];\n\n                            if (arr4) {\n                                var arr5 = arr4.split('=');\n                                if (arr5) {\n                                    if (arr5.length >= 2) {\n                                        if (name === arr5[0]) {\n                                            return arr5[1];\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n\n        };\n\n        _util.ajax = function (options) {\n            if (!window.jQuery) {\n                alert('util.ajax 需要jQuery支持');\n                return;\n            }\n            var defaults = {\n                async: true,\n                type: 'get',\n                dataType: 'json',\n                processData: true,\n                error: function (xhr, textStatus, errorThrown) {\n                }\n            };\n\n            $.extend(defaults, options);\n            return $.ajax(defaults);\n        };\n        _util.ajax = function (url, method, data, success, error) {\n            var defaults = {\n                dataType: 'JSON',\n                success: function (XMLHttpRequest, statusText) {\n                },\n                error: function (XMLHttpRequest, statusText, errorThrown) {\n                }\n            };\n            if (typeof url === 'object') {\n                $.extend(defaults, url);\n            } else {\n                defaults.url = url;\n            }\n            defaults.method = typeof method === 'string' ? method : defaults.method;\n            defaults.data = typeof data === 'object' ? data : defaults.data;\n            defaults.success = typeof success === 'function' ? success : defaults.success;\n            defaults.error = typeof error === 'function' ? error : defaults.error;\n            return $.ajax(defaults);\n        };\n\n        _util.string.replaceAllPlaceholder = function (string, searchValue, replaceValue) {\n            return string.replace(new RegExp('{' + searchValue + '}', \"gm\"), replaceValue);\n        };\n\n        // 获取字符的长度\n        _util.string.countSymbols = function (string) {\n            var regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n            return string\n                // 把代理对改为一个BMP的字符.\n                .replace(regexAstralSymbols, '_')\n                // …这时候取长度就妥妥的啦.\n                .length;\n        };\n\n        // 获取前6个字符\n        _util.string.sliceSymbols = function (str, limit) {\n            var regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n            var output = [];\n            var index = 0;\n            var oldStr = str;\n            str = str.replace(regexAstralSymbols, function (input, offset, match) {\n                if (offset > index) {\n                    output = output.concat(match.slice(index, offset).split(\"\"));\n                }\n                index = offset + input.length;\n                output.push(input);\n                return \"\";\n            });\n\n            if (index < oldStr.length) {\n                output = output.concat(oldStr.slice(index, oldStr.length).split(\"\"));\n            }\n            return output.slice(0, limit).join(\"\");\n        };\n\n        _util.document.create = function (options, tag) {\n            var _body = document.body;\n            var _tag;\n            if (tag) {\n                _tag = document.createElement(tag);\n            } else {\n                _tag = document.createElement('div');\n            }\n            if (typeof options === 'string') {\n                var selector = options.charAt(0);\n                if (selector) {\n                    switch (selector) {\n                        case '#':\n                            options = options.substring(1, options.length);\n                            _tag.id = options;\n                            break;\n                        case '.':\n                            options = options.substring(1, options.length);\n                            _tag.className = options;\n                            break;\n                        default:\n                            break;\n                    }\n                }\n                return _body.appendChild(_tag);\n            }\n        };\n\n        _util.formatter = function (key, defaultValue, keyValue, formatterCallback) {\n            var result;\n            if (typeof keyValue === 'object') {\n                for (var k in keyValue) {\n                    switch (typeof key) {\n                        case 'number':\n                            k = parseInt(k);\n                            break;\n                        case 'string':\n                            k = k.toString();\n                            break;\n                    }\n                    if (key === k) {\n                        result = keyValue[k];\n                        break;\n                    }\n                }\n                if (typeof result === 'undefined') {\n                    if (typeof defaultValue !== 'undefined') {\n                        result = defaultValue;\n                    }\n                }\n            }\n\n\n            if (typeof formatterCallback === 'function') {\n                result = formatterCallback(result, key, defaultValue, keyValue);\n            }\n\n            return result;\n        };\n\n\n        /**\n         * 某个按键按下操作\n         * 回车键（enter） = 13\n         * @param keyCode\n         * @param callback\n         */\n        _util.document.keyDown = function (keyCode, callback) {\n\n            document.onkeydown = function (e) {\n                var ev = document.all ? window.event : e;\n                if (ev.keyCode === keyCode) {\n                    if (typeof callback === 'function') {\n                        callback();\n                    }\n                }\n            }\n\n        }\n\n        _util.cookie.set = function (name, value, expires, path, domain, secure) {\n            var expDays = expires * 24 * 60 * 60 * 1000;\n            var expDate = new Date();\n            expDate.setTime(expDate.getTime() + expDays);\n            var expString = ((expires == null) ? \"\" : (\";expires=\" + expDate.toGMTString()));\n            var pathString = ((path == null) ? \"\" : (\";path=\" + path));\n            var domainString = ((domain == null) ? \"\" : (\";domain=\" + domain));\n            var secureString = ((secure == true) ? \";secure\" : \"\");\n            document.cookie = name + \"=\" + escape(value) + expString + pathString + domainString + secureString;\n        };\n\n        _util.cookie.get = function (name) {\n            var result = null;\n            var myCookie = document.cookie + \";\";\n            var searchName = name + \"=\";\n            var startOfCookie = myCookie.indexOf(searchName);\n            var endOfCookie;\n            if (startOfCookie != -1) {\n                startOfCookie += searchName.length;\n                endOfCookie = myCookie.indexOf(\";\", startOfCookie);\n                result = unescape(myCookie.substring(startOfCookie, endOfCookie));\n            }\n            return result;\n        }\n    }\n\n    util = _util;\n})(util);\n\n\n//\n// <div id=\"pageloading\" style=\"display: none;\"></div>\n//\n// #pageloading\n// {\n//     position: absolute;\n//     left: 0\n//     px;\n//     top: 0\n//     px;\n//     background: white\n//     url(loading.gif)\n//     no - repeat\n//     center;\n//     width: 100 %;\n//     height: 100 %;\n//     z - index\n// :\n//     99999;\n// }"
  },
  {
    "path": "src/main/resources/static/assets/js/workbench.js",
    "content": "$(document).ready(function () {\n    var option0 = {\n        tooltip: {\n            trigger: 'item',\n            formatter: \"{a} <br/>{b} : {c} ({d}%)\"\n        },\n        legend: {\n            orient: 'vertical',\n            x: 'left',\n            data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎'],\n            show: false\n        },\n        toolbox: {\n            show: false,\n            feature: {\n                mark: {show: true},\n                dataView: {show: true, readOnly: false},\n                magicType: {\n                    show: true,\n                    type: ['pie', 'funnel'],\n                    option: {\n                        funnel: {\n                            x: '25%',\n                            width: '50%',\n                            funnelAlign: 'center',\n                            max: 1548\n                        }\n                    }\n                },\n                restore: {show: true},\n                saveAsImage: {show: true}\n            }\n        },\n        calculable: true,\n        series: [\n            {\n                name: '访问来源',\n                type: 'pie',\n                radius: ['50%', '70%'],\n                itemStyle: {\n                    normal: {\n                        label: {\n                            show: false\n                        },\n                        labelLine: {\n                            show: false\n                        }\n                    },\n                    emphasis: {\n                        label: {\n                            show: true,\n                            position: 'center',\n                            textStyle: {\n                                fontSize: '30',\n                                fontWeight: 'bold'\n                            }\n                        }\n                    }\n                },\n                data: [\n                    {value: 335, name: '直接访问'},\n                    {value: 310, name: '邮件营销'},\n                    {value: 234, name: '联盟广告'},\n                    {value: 135, name: '视频广告'},\n                    {value: 1548, name: '搜索引擎'}\n                ]\n            }\n        ]\n    };\n\n    var myChart0 = echarts.init(document.getElementById('chart0'));\n    myChart0.setOption(option0);\n\n    //chart1\n    var option1 = {\n        tooltip: {\n            trigger: 'axis'\n        },\n        legend: {\n            data: ['邮件营销', '联盟广告', '视频广告', '直接访问', '搜索引擎'],\n            show: false\n        },\n        toolbox: {\n            show: false,\n            feature: {\n                mark: {show: true},\n                dataView: {show: true, readOnly: false},\n                magicType: {show: true, type: ['line', 'bar', 'stack', 'tiled']},\n                restore: {show: true},\n                saveAsImage: {show: true}\n            }\n        },\n        calculable: true,\n        xAxis: [\n            {\n                type: 'category',\n                boundaryGap: false,\n                data: ['第一周', '第二周', '第三周', '第四周', '第五周', '第六周', '第七周']\n            }\n        ],\n        yAxis: [\n            {\n                type: 'value'\n            }\n        ],\n        series: [\n            {\n                name: '邮件营销',\n                type: 'line',\n                stack: '总量',\n                data: [120, 132, 101, 134, 90, 230, 210]\n            },\n            {\n                name: '联盟广告',\n                type: 'line',\n                stack: '总量',\n                data: [220, 182, 191, 234, 290, 330, 310]\n            },\n            {\n                name: '视频广告',\n                type: 'line',\n                stack: '总量',\n                data: [150, 232, 201, 154, 190, 330, 410]\n            },\n            {\n                name: '直接访问',\n                type: 'line',\n                stack: '总量',\n                data: [320, 332, 301, 334, 390, 330, 320]\n            },\n            {\n                name: '搜索引擎',\n                type: 'line',\n                stack: '总量',\n                data: [820, 932, 901, 934, 1290, 1330, 1320]\n            }\n        ]\n    };\n    var myChart1 = echarts.init(document.getElementById('chart1'));\n    myChart1.setOption(option1);\n\n    var option3 = {\n        tooltip: {\n            trigger: 'axis'\n        },\n        legend: {\n            data: ['访问次数'],\n            show: false\n        },\n        toolbox: {\n            show: false,\n            feature: {\n                mark: {show: true},\n                dataView: {show: true, readOnly: false},\n                magicType: {show: true, type: ['line', 'bar']},\n                restore: {show: true},\n                saveAsImage: {show: true}\n            }\n        },\n        calculable: true,\n        xAxis: [\n            {\n                type: 'category',\n                data: ['采购组织', '供应商', '新物料', 'OA', '信息管理', '业务系统', '采购商']\n            }\n        ],\n        yAxis: [\n            {\n                type: 'value'\n            }\n        ],\n        series: [\n            {\n                name: '访问次数',\n                type: 'bar',\n                data: [60, 45, 73, 23, 37, 48, 18],\n                markPoint: {\n                    data: [\n                        {type: 'max', name: '最大值'},\n                        {type: 'min', name: '最小值'}\n                    ]\n                },\n                markLine: {\n                    data: [\n                        {type: 'average', name: '平均值'}\n                    ]\n                }\n            }\n        ]\n    };\n\n    var myChart3 = echarts.init(document.getElementById('chart3'));\n    myChart3.setOption(option3);\n\n    // 我的待办点击事件\n    $(document).on('click', '.work-item.blue', function (event) {\n        var width = (2 * $(this).width()) + 10;\n        $(\".todo-panel\").width(width - 2).css({top: $(this).offset().top, left: $(this).offset().left}).show();\n        event.stopPropagation();\n    });\n    $(\".todo-panel\").click(function () {\n        event.stopPropagation();\n    });\n    $(document).click(function () {\n        $(\".todo-panel\").hide();\n    });\n\n    // 文件下载 tab 事件处理\n    $('.right-box-tab').find('a').click(function () {\n        $(this).closest(\".right-box-tab\").find(\"a\").removeClass(\"current\");\n        $(this).addClass(\"current\");\n        $($(this).attr('href')).closest(\".right-box-tab-list\").find(\"ul\").addClass(\"hide\");\n        $($(this).attr('href')).removeClass(\"hide\");\n    });\n\n});\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/easyui-plus-1.0.0/CHANGELOG.md",
    "content": "\n## v1.0.0\n- 2018.09.25\n- 基本功能完成"
  },
  {
    "path": "src/main/resources/static/assets/vendor/easyui-plus-1.0.0/README.md",
    "content": "# easyui plus\n> 基于 EasyUI 的 Javascript 框架，可快速简单的搭建企业级应用的 UI，已兼容更新 EasyUI 至最新版（v1.6.3）\n\n## 更新日志\n[CHANGELOG.md](/CHANGELOG.md)\n\n## 引用示例\n\n```\n<link rel=\"stylesheet\" type=\"text/css\" th:href=\"/vendor/font-awesome-4.7.0/css/font-awesome.css\">\n<link rel=\"stylesheet\" type=\"text/css\" th:href=\"/vendor/jquery-easyui-1.6.3/themes/icon.css\">\n<link rel=\"stylesheet\" type=\"text/css\" th:href=\"/vendor/jquery-easyui-1.6.3/themes/color.css\">\n<link rel=\"stylesheet\" type=\"text/css\" th:href=\"@{/vendor/jquery-easyui-1.6.3/themes/default/easyui.css\">\n<link rel=\"stylesheet\" type=\"text/css\" th:href=\"/vendor/expressui-1.0.0/themes/default/easyui.css\">\n<link rel=\"stylesheet\" type=\"text/css\" th:href=\"/vendor/expressui-1.0.0/css/expressui.css\">\n\n<script type=\"text/javascript\" th:src=\"/vendor/jquery/jquery-1.12.4.min.js\" charset=\"UTF-8\"></script>\n<script type=\"text/javascript\" th:src=\"/vendor/jquery-easyui-1.6.3/jquery.easyui.min.js\" charset=\"UTF-8\"></script>\n<script type=\"text/javascript\" th:src=\"/vendor/jquery-easyui-1.6.3/locale/easyui-lang-zh_CN.js\" charset=\"UTF-8\"></script>\n<script type=\"text/javascript\" th:src=\"@{/vendor/expressui-1.0.0/js/jquery.expressui.js}\" charset=\"UTF-8\"></script>\n\n```\n\n## 使用示例\n### dialog\n\n- 新增\n```\n            $('#dialogSelector').dialog(expressui.dialog.create, {\n                title: 'dialog demo',\n                grid: {type: 'treegrid', selector: '#treegridSelector'},\n                href: '/dialog_demo/add_dialog',\n                save: {\n                    url: '/dialog_demo/add_one',\n                    data: something ? something : {}, // 非必传参数\n                    method: 'post'\n                },\n                buttons: [{\n                    text: '保存',\n                    iconCls: 'iconfont icon-save',\n                    handler: expressui.dialog.add,\n                    reload: [{type: 'treegrid', selector: '#treegridSelector'}, {type: 'datagrid', selector: '#datagridSelector', data: []}],\n                    success: '新增成功'\n                }, {\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n\n```"
  },
  {
    "path": "src/main/resources/static/assets/vendor/easyui-plus-1.0.0/css/easyui.plus.css",
    "content": "/**\n * jQuery EasyUI plus\n * @version v1.0.0\n * @author godcheese <godcheese@outlook.com>\n * @uri http://www.github.com/godcheese/expressui\n */\n\n.fa {\n    display: inline-block;\n    font: normal normal normal 12px FontAwesome;\n    font-size: inherit;\n    text-rendering: auto;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n\n/*******************************************************/\n\n.fa {\n    display: inline-block;\n    font: normal normal normal 12px FontAwesome;\n    font-size: inherit;\n    text-rendering: auto;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    padding-top:2px;\n}\n\n.datagrid-toolbar {\n    padding: 5px;\n}\n\n/* 对话框窗口的 form 表单  */\n\n.submit-form {\n    height: 100% !important;\n    margin: 5px;\n    background-color: #ffffff;\n    outline: 6px solid #ffffff;\n    outline-offset: 0;\n    border: 0 solid #ffffff;\n}\n\n.submit-form table.submit-table {\n    width: 100%;\n    padding: 0;\n    height: 100% !important;\n    table-layout: fixed;\n}\n\n.submit-form table.submit-table tr {\n    vertical-align: middle;\n    border: 1px solid #D3D3D3;\n    border-right-width: 0;\n    border-left-width: 0;\n}\n\n.submit-form table.submit-table tr td {\n    border: 1px solid #D3D3D3;\n    border-top-width: 0;\n    border-bottom-width: 0;\n    padding: 5px;\n    width: 100%;\n}\n\n.submit-form table.submit-table tr td.label {\n    width: 30%;\n    text-align: right;\n    font-size: 12px;\n    color: #666;\n    min-width: 80px;\n    font-weight: 400;\n    margin: 0;\n    padding: 5px;\n    word-break: keep-all; /* for ie */\n    word-wrap: break-word;\n    background: #f5f5f5;\n    border: 1px solid #cacaca;\n}\n\n.submit-form table.submit-table span.textbox {\n    width: 80% !important;\n}\n.submit-form table.submit-table input.textbox-text,.submit-form table.submit-table textarea.textbox-text {\n    width: 100% !important;\n}\n\n.submit-form .submit-button {\n    border-color: #dadde2;\n}\n\n.submit-form .submit-button {\n    background: rgb(244, 244, 244);\n    border-width: 1px;\n    border-style: solid;\n}\n.submit-form .submit-button {\n    position: relative;\n    top: -1px;\n    text-align: right;\n    padding: 5px;\n}\n\n/*\n--blue: #007bff;\n--indigo: #6610f2;\n--purple: #6f42c1;\n--pink: #e83e8c;\n--red: #dc3545;\n--orange: #fd7e14;\n--yellow: #ffc107;\n--green: #28a745;\n--teal: #20c997;\n--cyan: #17a2b8;\n--white: #ffffff;\n--gray: #6c757d;\n--gray-dark: #343a40;\n--primary: #007bff;\n--secondary: #6c757d;\n--success: #28a745;\n--info: #17a2b8;\n--warning: #ffc107;\n--danger: #dc3545;\n--light: #f8f9fa;\n--dark: #343a40;\n*/\n\n/*background: #4989ed;*/\n/*color: #ffffff;*/\n/*width: 82px;*/\n/*border-radius: 5px;*/\n\n\n/* button primary */\n/*color: #ffffff;*/\n/*background-color: #50a1ff;*/\n/*border-color: #50a1ff;*/\n\n/* button */\n/*display: inline-block;*/\n/*font-weight: 600;*/\n/*text-align: center;*/\n/*white-space: nowrap;*/\n/*vertical-align: middle;*/\n/*-webkit-user-select: none;*/\n/*-moz-user-select: none;*/\n/*-ms-user-select: none;*/\n/*user-select: none;*/\n/*border: 1px solid transparent;*/\n/*padding: 0.375rem 0.75rem;*/\n/*font-size: 0.9375rem;*/\n/*line-height: 1.9;*/\n/*border-radius: 0.25rem;*/\n/*-webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;*/\n/*transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;*/\n/*transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;*/\n/*transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;*/"
  },
  {
    "path": "src/main/resources/static/assets/vendor/easyui-plus-1.0.0/js/easyui.plus.js",
    "content": "/**\n * Expressui\n * jQuery EasyUI extend plugin\n * @version v1.0.0\n * @author godcheese <godcheese@outlook.com>\n * @uri http://www.github.com/godcheese/expressui\n */\n\n/**\n *\n 响应状态码\n 100~199：信息状态码，代表请求已被接受，需要继续处理。\n 200~299：成功状态码，代表请求已成功被服务器接收、理解、并接受。\n 300~399：重定向状态码，代表需要客户端采取进一步的操作才能完成请求。\n 400~499：客户端错误状态码，代表了客户端看起来可能发生了错误，妨碍了服务器的处理。\n 500~599：服务器错误状态码，代表了服务器在处理请求的过程中有错误或者异常状态发生，也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。\n\n 200 OK - [GET]：服务器成功返回用户请求的数据，该操作是幂等的（Idempotent）。\n 201 CREATED - [POST/PUT/PATCH]：用户新建或修改数据成功。\n 202 Accepted - [*]：表示一个请求已经进入后台排队（异步任务）\n 204 NO CONTENT - [DELETE]：用户删除数据成功。\n 400 INVALID REQUEST - [POST/PUT/PATCH]：用户发出的请求有错误，服务器没有进行新建或修改数据的操作，该操作是幂等的。\n 401 Unauthorized - [*]：表示用户没有权限（令牌、用户名、密码错误）。\n 403 Forbidden - [*] 表示用户得到授权（与401错误相对），但是访问是被禁止的。\n 404 NOT FOUND - [*]：用户发出的请求针对的是不存在的记录，服务器没有进行操作，该操作是幂等的。\n 406 Not Acceptable - [GET]：用户请求的格式不可得（比如用户请求JSON格式，但是只有XML格式）。\n 410 Gone -[GET]：用户请求的资源被永久删除，且不会再得到的。\n 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时，发生一个验证错误。\n 500 INTERNAL SERVER ERROR - [*]：服务器发生错误，用户将无法判断发出的请求是否成功。\n\n 如果状态码是4xx，就应该向用户返回出错信息。一般来说，返回的信息中将error作为键名，出错信息作为键值即可。\n\n 错误处理（Error handling）\n {\n     error: \"Invalid API key\"\n     errorno: 4041,\n }\n\n {\n  \"message\": \"Requires authentication\",\n  \"documentation_url\": \"https://developer.github.com/v3\"\n}\n\n 针对不同操作，服务器向用户返回的结果应该符合以下规范。\n\n GET /collection：返回资源对象的列表（数组）\n GET /collection/resource：返回单个资源对象\n POST /collection：返回新生成的资源对象\n PUT /collection/resource：返回完整的资源对象\n PATCH /collection/resource：返回完整的资源对象\n DELETE /collection/resource：返回一个空文档\n *\n */\n\nvar expressui = expressui || {};\n\n(function (_expressui) {\n\n    if (!window.jQuery) {\n        console.error('expressui 需要 jQuery 支持');\n        return;\n    }\n\n    $.extend(_expressui, {\n        util: {},\n        datagrid: {},\n        dialog: {},\n        treegrid: {},\n        tree: {},\n        messager: {},\n        grid: {},\n        response: {\n            CODE: 'code',\n            MESSAGE: 'message',\n            DATA: 'data',\n            EXCEPTION: 'exception'\n        },\n        httpStatus: {}\n    });\n\n    _expressui.util.toObject = function (json) {\n        return eval('(' + json + ')');\n    };\n\n    _expressui.util.initSelector = function (options) {\n        var selector;\n        if (options.selector) {\n            selector = options.selector;\n            // 初始 selector，仅支持 #id 和 .className 两种选择器\n            if (selector.charAt(0) !== '#' && selector.charAt(0) !== '.') {\n                throw new Error('Selector ' + selector + ' is not id or class.');\n            }\n            if (!options[0]) {\n                _expressui.util.createElement(options.selector);\n            }\n        }\n        return selector;\n    };\n\n    /**\n     * 创建 html 元素\n     * @param selector\n     * @param tag\n     * @param innerHTML\n     * @returns {Node}\n     */\n    _expressui.util.createElement = function (selector, tag, innerHTML) {\n\n        /**\n         * 生成 node，没 selector 指定 node 就生成一个\n         * @param selector\n         * @param tag\n         * @returns {*}\n         * @private\n         */\n        function _selectorNode(selector, tag) {\n            var _selectorId, _selectorClassName, _node;\n            if (typeof selector === 'string') {\n                var _symbol = selector.charAt(0);\n                if (_symbol) {\n                    switch (_symbol) {\n                        case '#':\n                            _selectorId = selector.substring(1, selector.length);\n                            _node = document.getElementById(_selectorId);\n\n                            break;\n                        case '.':\n                            _selectorClassName = selector.substring(1, selector.length);\n\n                            _node = document.getElementsByClassName(_selectorClassName);\n                            _node = _node[0];\n                            break;\n                        default:\n                            break;\n                    }\n\n\n                    if (!_node) {\n                        if (tag) {\n                            _node = document.createElement(tag);\n                        } else {\n                            _node = document.createElement('div');\n                        }\n\n                        if (_selectorId) {\n                            _node.id = _selectorId;\n                        }\n\n                        if (_selectorClassName) {\n                            _node.className = _selectorClassName;\n                        }\n\n                        // 标记这些标签为自动生成的\n                        if (_node) {\n                            _node.setAttribute(\"data-create\", \"auto\");\n                        }\n                    }\n                }\n\n\n            }\n\n            return _node;\n        }\n\n        var _body = document.body;\n\n        var _node = _selectorNode(selector);\n\n        if (innerHTML) {\n            _node.innerHTML = innerHTML;\n        }\n\n        return _body.appendChild(_node);\n    };\n\n    _expressui.util.replaceAllPlaceholder = function (string, searchValue, replaceValue) {\n        if (string) {\n            string = string + '';\n        }\n        return string.replace(new RegExp('{' + searchValue + '}', \"gm\"), replaceValue);\n\n    };\n\n    _expressui.ajax = function (url, method, data, success, error) {\n        var defaults = {\n            dataType: 'JSON',\n            success: function (XMLHttpRequest, statusText) {\n            },\n            error: function (XMLHttpRequest, statusText, errorThrown) {\n            }\n        };\n\n        if (typeof url === 'object') {\n            $.extend(defaults, url);\n        } else {\n            defaults.url = url;\n        }\n\n        if (typeof method === 'string') {\n            defaults.method = method;\n        }\n\n        if (typeof data === 'object') {\n            defaults.data = data;\n        }\n\n        if (typeof success === 'function') {\n            defaults.success = success;\n        }\n\n        if (typeof error === 'function') {\n            defaults.error = error;\n        }\n        return $.ajax(defaults);\n    };\n    _expressui.replaceUrlPlaceholder = function (url, object, prefix) {\n        if (url && object) {\n            for (var key in object) {\n                if (object.hasOwnProperty(key)) {\n                    var urlPlaceholder = key;\n                    if (prefix) {\n                        urlPlaceholder = prefix + \".\" + key;\n                    }\n                    url = _expressui.util.replaceAllPlaceholder(url, urlPlaceholder, object[key]);\n                }\n            }\n        }\n        return url;\n    };\n\n    _expressui.response._httpStatus = function (code, message) {\n        var json = '{\"' + _expressui.response.CODE + '\":' + code + ',\"' + _expressui.response.MESSAGE + '\":\"' + message + '\"}';\n        return _expressui.util.toObject(json);\n    };\n    _expressui.response.httpStatus = {\n        OK: _expressui.response._httpStatus(200, 'OK'),\n        NOT_FOUND: _expressui.response._httpStatus(404, 'NOT FOUND')\n    };\n    _expressui.response._ok = function (responseResult, fnOkCallback, fnNotOkCallback, fnThenCallback) {\n\n        if (responseResult) {\n\n            var OK = _expressui.response.httpStatus.OK.code;\n\n            var data = responseResult.hasOwnProperty(_expressui.response.DATA) ? responseResult[_expressui.response.DATA] : undefined;\n\n            var message = responseResult.hasOwnProperty(_expressui.response.MESSAGE) ? responseResult[_expressui.response.MESSAGE] : undefined;\n\n            var code = responseResult.hasOwnProperty(_expressui.response.CODE) ? responseResult[_expressui.response.CODE] : undefined;\n\n            if (code === OK) {\n                if (typeof fnOkCallback === 'function') {\n                    fnOkCallback(data, message, code);\n                }\n            } else {\n                if (typeof fnNotOkCallback === 'function') {\n                    fnNotOkCallback(data, message, code);\n                }\n            }\n\n            if (typeof fnThenCallback === 'function') {\n                fnThenCallback(data, message, code);\n            }\n\n        }\n\n    };\n    _expressui.response.ok = function (responseResult, fnOkCallback, fnNotOkCallback, fnThenCallback) {\n        _expressui.response._ok(responseResult, function (data, message, code) {\n            if (fnOkCallback) {\n                fnOkCallback(data, message, code);\n            }\n        }, function (data, message, code) {\n            if (fnNotOkCallback) {\n                fnNotOkCallback(data, message, code);\n            }\n        }, function (data, message, code) {\n            if (fnThenCallback) {\n                fnThenCallback(data, message, code);\n            }\n        });\n\n\n    };\n    _expressui.response.okHasMessage = function (responseResult, statusText, XMLHttpRequest, fnOkCallback, fnNotOkCallback, fnThenCallback) {\n        _expressui.response._ok(responseResult, function (responseResult, statusText, XMLHttpRequest) {\n            if (typeof fnOkCallback === 'function') {\n                fnOkCallback(responseResult, statusText, XMLHttpRequest);\n            }\n        }, function (responseResult, statusText, XMLHttpRequest) {\n            if (typeof fnNotOkCallback === 'function') {\n                fnNotOkCallback(responseResult, statusText, XMLHttpRequest);\n            }\n            // $.messager.show({title:'信息', msg:message});\n            // $.messager.alert('信息', message, 'error');\n        }, function (responseResult, statusText, XMLHttpRequest) {\n            if (fnThenCallback) {\n                fnThenCallback(responseResult, statusText, XMLHttpRequest);\n            }\n        });\n    };\n\n    /**\n     * 创建并打开一个对话框实例\n     * @type {string}\n     */\n    _expressui.dialog.create = 'create';\n\n    /**\n     * 对话框新增数据提交表单方法\n     * @type {string}\n     */\n    _expressui.dialog.add = 'add';\n\n    /**\n     * 对话框保存数据提交表单方法\n     * @type {string}\n     */\n    _expressui.dialog.save = 'save';\n\n    /**\n     * 对话框实例关闭\n     * @type {string}\n     */\n    _expressui.dialog.close = 'close';\n\n    /**\n     * 创建表格实例\n     * @type {string}\n     */\n    _expressui.grid.create = 'create';\n\n    /**\n     * 删除多项\n     * @type {string}\n     */\n    _expressui.grid.deleteChecked = 'deleteChecked';\n\n    // 删除一项\n    _expressui.grid.deleteCheckedOne = 'deleteCheckedOne';\n\n    /**\n     * 获取必须一个勾选项，否则弹出警告信息\n     * @type {string}\n     */\n    _expressui.grid.getCheckedOneOrShowAlert = 'getCheckedOneOrShowAlert';\n\n    /**\n     * 勾选一项或不勾选项都不弹出警告信息，否则弹出警告信息\n     * @type {string}\n     */\n    _expressui.grid.getCheckedOneNoCheckedOrShowAlert = 'getCheckedOneNoCheckedOrShowAlert';\n\n    /**\n     * 获取勾选的一项\n     * @type {string}\n     */\n    _expressui.grid.getCheckedOne = 'getCheckedOne';\n\n    /**\n     * 获取勾选的多项\n     * @type {string}\n     */\n    _expressui.grid.getChecked = 'getChecked';\n\n    // 获取至少勾选一项，否则弹出警告信息\n    _expressui.grid.getCheckedLessOneOrShowAlert = 'getCheckedLessOneOrShowAlert';\n\n    // post 勾选或不勾选都可以\n    _expressui.grid.post = 'post';\n\n    // post 必须勾选一项或一项以上，否则弹出警告信息\n    _expressui.grid.postCheckedLessOneOrShowAlert = 'postCheckedLessOneOrShowAlert';\n\n    // post 必须只勾选一项，否则弹出警告信息\n    _expressui.grid.postCheckedMustOneOrShowAlert = 'postCheckedMustOneOrShowAlert';\n\n    // _expressui.messager = {\n    //     show: function (msg) {\n    //         var options = {\n    //             title: '信息',\n    //             msg: '',\n    //             timeout: 1000,\n    //             showType: 'slide',\n    //             modal: false,\n    //             shadow: false,\n    //             draggable: false,\n    //             resizable: false,\n    //             closed: true,\n    //             style: {\n    //                 left: \"\",\n    //                 top: \"\",\n    //                 right: 0,\n    //                 zIndex: 999,\n    //                 bottom: -document.body.scrollTop - document.documentElement.scrollTop\n    //             },\n    //             width: 260,\n    //             height: 120,\n    //             minHeight: 0,\n    //             showSpeed: 600\n    //         };\n    //\n    //         if (msg && typeof msg === 'string') {\n    //             options.msg = msg;\n    //         }\n    //         $.extend(options, msg);\n    //         $.messager.show(options);\n    //     },\n    //     confirm: function (msg, okCallback) {\n    //         var options = {\n    //             title: '信息',\n    //             msg: '确认操作吗？',\n    //             fn: function (ok) {}\n    //         };\n    //         if (msg && typeof msg === 'string') {\n    //             options.msg = msg;\n    //         }\n    //         if (msg && (typeof okCallback === 'function')) {\n    //             options.msg = msg;\n    //             options.fn = function (ok) {\n    //                 if (ok) {\n    //                     okCallback(ok);\n    //                 }\n    //             }\n    //         }\n    //         if (msg && typeof msg === 'object') {\n    //             $.extend(options, msg);\n    //         }\n    //         $.messager.confirm(options);\n    //     },\n    //     progress: function (msg) {\n    //         var options = {};\n    //         if (typeof msg === 'string') {\n    //             options.msg = msg;\n    //         }\n    //         if (typeof msg === 'object') {\n    //             $.extend(options, msg);\n    //         }\n    //\n    //         if (msg === 'close') {\n    //             $.messager.progress(msg);\n    //         } else {\n    //             $.messager.progress(options);\n    //         }\n    //     },\n    //     alert: function (msg, icon) {\n    //         var options = {\n    //             title: '提示',\n    //             msg: '',\n    //             icon: 'warning'\n    //         };\n    //         if (typeof msg === 'string') {\n    //             options.msg = msg;\n    //         }\n    //\n    //         if (msg && icon) {\n    //             options.msg = msg;\n    //             options.icon = icon;\n    //         }\n    //\n    //         if (typeof msg === 'object') {\n    //             $.extend(options, msg);\n    //         }\n    //\n    //         $.messager.alert(options);\n    //     }\n    // };\n\n    _expressui.grid._reload = function (grid) {\n        switch (grid.type) {\n            case 'datagrid':\n                if (typeof grid.data === 'object') {\n                    $(grid.selector).datagrid('loadData', grid.data);\n                } else {\n                    if (grid.url) {\n                        $(grid.selector).datagrid('reload', grid.url);\n                    } else {\n                        $(grid.selector).datagrid('reload');\n                    }\n                }\n                break;\n            case 'tree':\n                if (typeof grid.data === 'object') {\n                    $(grid.selector).tree('loadData', grid.data);\n                } else {\n                    if (grid.url) {\n                        $(grid.selector).tree('options').url = grid.url;\n                    }\n                    $(grid.selector).tree('reload');\n                }\n                break;\n            case 'treegrid':\n                if (typeof grid.data === 'object') {\n                    $(grid.selector).treegrid('loadData', grid.data);\n                } else {\n                    if (grid.url) {\n                        $(grid.selector).treegrid('options').url = grid.url;\n                    }\n                    $(grid.selector).treegrid('reload');\n                }\n                break;\n        }\n    };\n\n    _expressui.grid.reload = function (grid) {\n        if (grid) {\n            if (!grid.type) {\n                for (var i = 0; i < grid.length; i++) {\n                    _expressui.grid._reload(grid[i]);\n                }\n            } else {\n                _expressui.grid._reload(grid);\n            }\n        }\n    };\n\n    _expressui.grid.getChecked = function (grid) {\n        var checked;\n        if (grid.type) {\n            switch (grid.type) {\n                case 'datagrid':\n                    checked = $(grid.selector).datagrid('getChecked');\n                    break;\n                case 'treegrid':\n                    checked = $(grid.selector).treegrid('getChecked');\n                    break;\n            }\n        }\n        return checked;\n    };\n\n    _expressui.grid.getCheckedOne = function (grid) {\n        var checked = _expressui.grid.getChecked(grid);\n        if (checked && checked.length > 0) {\n            return checked[0];\n        }\n    };\n\n    _expressui.grid.getCheckedHasMessage = function (grid) {\n        var checked;\n        if (grid.type) {\n            checked = _expressui.grid.getChecked(grid);\n            if (!checked) {\n                $.messager.alert('信息', '请勾选要操作项', 'warning');\n                return;\n            }\n        }\n        return checked;\n    };\n\n    _expressui.grid.getCheckedOneHasMessage = function (grid) {\n        var checked = _expressui.grid.getCheckedHasMessage(grid);\n        if (checked) {\n            if (checked.length === 1) {\n                return checked[0];\n            } else {\n                if (checked.length <= 0) {\n                    $.messager.alert('信息', '请勾选要操作项', 'warning');\n                } else {\n                    $.messager.alert('信息', '最多只能勾选一项操作', 'warning');\n                }\n            }\n        }\n    };\n\n    _expressui.grid.appendToolbar = function (grid) {\n        if (!grid.toolbar && grid.selector) {\n            grid.toolbar = grid.selector + 'Toolbar';\n        }\n    };\n\n    /**\n     * express.grid.formatter(\n     * value,\n     * [{value:0,valueName:'未知'},{value:1,valueName:'男'}],\n     * function() {}\n     * );\n     *\n     * @param value\n     * @param values\n     * @param callback\n     * @returns {undefined}\n     */\n    _expressui.grid.formatter = function (value, values, callback) {\n\n        var valueName = undefined;\n\n        function f(v, vs) {\n            for (var i = 0; i < vs.length; i++) {\n                if ((vs[i].value + \"\") === (v + \"\")) {\n                    return vs[i].valueName;\n                }\n            }\n\n        }\n\n        if (typeof values === 'object') {\n            valueName = f(value, values);\n            if (!valueName) {\n                var defaultValue = f('default', values);\n                valueName = f(defaultValue, values);\n            }\n        }\n\n        if (typeof callback === 'function') {\n            valueName = callback(valueName, value, values);\n        }\n\n        return valueName;\n    };\n\n    _expressui.dialog._replacePlaceHolder = function (options, grid) {\n        var checked;\n        checked = _expressui.grid.getCheckedOne(grid);\n        if (grid.prefix) {\n            if (options.get) {\n                if (typeof options.get === 'string') {\n                    options.get.url = _expressui.replaceUrlPlaceholder(options.get, checked);\n                    options.get.method = 'get';\n                }\n                if (typeof options.get === 'object') {\n                    if (options.get.url) {\n                        options.get.url = _expressui.replaceUrlPlaceholder(options.get.url, checked);\n                    }\n                    options.get.method = options.get.method ? options.get.method : 'get';\n                }\n            }\n            if (options.save) {\n                if (typeof options.save === 'string') {\n                    options.save = _expressui.replaceUrlPlaceholder(options.save, checked, grid.prefix);\n                }\n                if (typeof options.save === 'object') {\n                    if (options.save.url) {\n                        options.save.url = _expressui.replaceUrlPlaceholder(options.save.url, checked, grid.prefix);\n                    }\n                    if (options.save.data) {\n                        params = options.save.data;\n                        paramArray = [];\n                        for (var i = 0; i < params.length; i++) {\n                            paramArray.push(_expressui.replaceUrlPlaceholder(params[i], checked, grid.prefix));\n                        }\n                        options.save.data = paramArray;\n                    }\n                }\n\n                options.url = options.save.url;\n            }\n            if (options.href) {\n                options.href = _expressui.replaceUrlPlaceholder(options.href, checked, grid.prefix);\n            }\n        } else {\n\n            if (options.get) {\n                if (typeof options.get === 'string') {\n                    options.get.url = _expressui.replaceUrlPlaceholder(options.get, checked);\n                    options.get.method = 'get';\n                }\n\n                if (typeof options.get === 'object') {\n                    options.get.url = options.get.url ? _expressui.replaceUrlPlaceholder(options.get.url, checked) : '';\n                    options.get.method = options.get.method ? options.get.method : 'get';\n                }\n            }\n\n            if (options.save) {\n                if (typeof options.save === 'string') {\n                    options.save.url = _expressui.replaceUrlPlaceholder(options.save, checked);\n                    options.save.method = 'post';\n                }\n\n                if (typeof options.save === 'object') {\n\n                    options.save.url = options.save.url ? _expressui.replaceUrlPlaceholder(options.save.url, checked) : '';\n                    options.save.method = options.save.method ? options.save.method : 'post';\n\n                    if (options.save.data) {\n\n                        // var params = Object.keys(options.save.data);\n                        var params = Object.getOwnPropertyNames(options.save.data);\n                        var paramArray = [];\n                        for (i = 0; i < params.length; i++) {\n                            if (options.save.data.hasOwnProperty(params[i])) {\n                                var temp = {};\n                                temp['name'] = params[i];\n                                temp['value'] = _expressui.replaceUrlPlaceholder(options.save.data[params[i]], checked);\n                                paramArray.push(temp);\n                            }\n                        }\n                        options.save.data = paramArray;\n                    }\n                }\n\n                options.url = options.save.url;\n            }\n\n            if (options.href) {\n                options.href = _expressui.replaceUrlPlaceholder(options.href, checked);\n            }\n        }\n\n    };\n\n    _expressui.form = {};\n\n    _expressui.form.submit = function (selector, url, method) {\n        var defaultOptions = {type: 'post'};\n        if (typeof selector === 'object') {\n            $.extend(defaultOptions, selector);\n        } else {\n            defaultOptions.selector = selector || undefined;\n            defaultOptions.url = url || undefined;\n            defaultOptions.method = method || 'post';\n        }\n        var isValid = $(defaultOptions.selector).form('validate');\n        if (isValid) {\n            $.messager.progress({title: '请稍等', msg: '正在操作...'});\n            var serializeArray = $(defaultOptions.selector).find('form').serializeArray();\n            var paramArray = defaultOptions.data || [];\n            for (var i = 0; i < paramArray.length; i++) {\n                serializeArray.push(paramArray[i]);\n            }\n            try {\n                expressui.ajax({\n                    beforeSend: function () {\n                        if (typeof defaultOptions.beforeSend === 'function') {\n                            defaultOptions.beforeSend();\n                        }\n                    },\n                    complete: function () {\n                        if (typeof defaultOptions.complete === 'function') {\n                            defaultOptions.complete();\n                        }\n                    },\n                    url: defaultOptions.url || undefined,\n                    type: defaultOptions.method || 'post',\n                    data: serializeArray,\n                    success: function (res, statusText, XMLHttpRequest) {\n                        if (typeof defaultOptions.success === 'function') {\n                            defaultOptions.success(res, statusText, XMLHttpRequest);\n                        } else {\n                            if (typeof defaultOptions.reset === 'string') {\n                                $(defaultOptions.reset).form('clear');\n                            }\n                        }\n                        if (typeof defaultOptions.success === 'string') {\n                            $.messager.show({title: '信息', msg: defaultOptions.success});\n                            if (typeof defaultOptions.reset === 'string') {\n                                $(defaultOptions.reset).form('clear');\n                            }\n                        }\n                        $.messager.progress('close');\n                    },\n                    error: function (XMLHttpRequest, statusText, errorThrown) {\n                        if (defaultOptions.error) {\n                            if (typeof defaultOptions.error === 'function') {\n                                defaultOptions.error(XMLHttpRequest, statusText, errorThrown);\n                            }\n                            if (typeof defaultOptions.error === 'string') {\n                                $.messager.alert('信息', defaultOptions.error, 'error');\n                            }\n                        } else {\n                            $.messager.alert('信息', XMLHttpRequest.responseJSON.message, 'error');\n                        }\n                        $.messager.progress('close');\n                    }\n                })\n            } catch (e) {\n                $.messager.alert('信息', e.message, 'error');\n            } finally {\n                $.messager.progress('close');\n            }\n        }\n    };\n\n    _expressui.form.reset = function (selector) {\n        return $(selector).form('clear');\n    };\n\n\n    /**\n     * 避免组件移除窗口外\n     * @param left\n     * @param top\n     */\n    _expressui.onMove = function (left, top) {\n        if (left < 1) {\n            left = 1;\n        }\n        if (top < 1) {\n            top = 1;\n        }\n        var width = parseInt($(this).parent().css('width')) + 14;\n        var height = parseInt($(this).parent().css('height')) + 14;\n        var right = left + width;\n        var bottom = top + height;\n        var browserWidth = $(window).width();\n        var browserHeight = $(window).height();\n        if (right > browserWidth) {\n            left = browserWidth - width;\n        }\n        if (bottom > browserHeight) {\n            top = browserHeight - height;\n        }\n        // 修正面板位置\n        $(this).parent().css({\n            left: left,\n            top: top\n        });\n    };\n\n})(expressui);\n\n$.extend($.fn.dialog.defaults, {onMove: expressui.onMove});\n$.extend($.fn.window.defaults, {onMove: expressui.onMove});\n$.extend($.fn.panel.defaults, {onMove: expressui.onMove});\n\n$.extend($.fn.panel.defaults, {\n    /**\n     * panel关闭时回收内存\n     * tabs 引用 iframe，关闭 tab 时 iframe 不会被销毁从而导致内存不能释放，大量使用 tab、iframe 容易导致内存溢出\n     */\n    onBeforeDestroy: function () {\n        var iframe = $('iframe', this);\n        try {\n            if (iframe.length > 0) {\n                for (var i = 0; i < iframe.length; i++) {\n                    iframe[i].src = '';\n                    iframe[i].contentWindow.document.write('');\n                    iframe[i].contentWindow.close();\n                }\n                iframe.remove();\n\n                // IE 特有内存回收方法\n                if (navigator.userAgent.indexOf('MSIE') > 0) {\n                    try {\n                        CollectGarbage();\n                    } catch (e) {\n                    }\n                }\n            }\n        } catch (e) {\n\n        }\n    }\n});\n\n$.extend($.fn.calendar.defaults, {\n    // 设置周一为一周开始日\n    firstDay: 1\n});\n\n$.extend($.fn.dialog.defaults, {\n    // dialog\n    // title: '对话框',\n    collapsible: true,\n    minimizable: false,\n    maximizable: true,\n    resizable: true,\n    toolbar: null,\n    width: 400,\n    height: 311,\n\n    // window\n    closable: true,\n    closed: false,\n    zIndex: 9000,\n    draggable: true,\n    shadow: true,\n    inline: false,\n    modal: true,\n    border: true, // true,false,'thin','thick'\n    constrain: false,\n    // panel\n    // id\tnull,\n    iconCls: null,\n    fit: false,\n    content: null,\n    halign: 'top', // top/left/right\n    titleDirection: 'down', // up/down\n    header: null,\n    openAnimation: 'show',//  'slide','fade','show'\n    openDuration: 0,\n    closeAnimation: 'show', // 'slide','fade','show'\n    closeDuration: 0,\n    href: null,\n    loadingMessage: '加载中…',\n    method: 'get',\n    queryParams: null,\n    onLoad: function () {\n        var _this = this;\n        var options = $(this).dialog('options');\n        $(this).wrapInner('<form method=\"' + (options.formMethod || 'post') + '\"></form>');\n\n        if (options.data) {\n\n            if (typeof options.data === 'object') {\n                $(_this).form('load', options.data);\n            }\n\n            if (typeof options.data === 'function') {\n                $(_this).form('load', options.data());\n            }\n\n        } else {\n            if (options.get) {\n                $.ajax({\n                    url: options.get.url,\n                    type: options.get.method,\n                    dataType: 'json',\n                    success: function (data) {\n                        $(_this).form('load', data);\n                    }\n                });\n            }\n        }\n    },\n    onClose: function () {\n        // 由系统自动生成(带有：data-create=\"auto\")的关闭后即时销毁\n        if ($(this).data('create') === 'auto') {\n            return $(this).dialog('destroy');\n        }\n    }\n\n});\n\n$.extend($.fn.dialog.methods, {\n\n    /**\n     * dialog.create\n     * 创建并打开一个 dialog 对话框实例\n     * @param jq\n     * @param options\n     * @returns {jQuery|*}\n     */\n    create: function (jq, options) {\n        options.selector = expressui.util.initSelector(jq);\n        if (!options.buttons) {\n            options.buttons = [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.save\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }];\n        }\n\n        if (options.buttons) {\n            var _buttons = options.buttons;\n            for (var i = 0; i < _buttons.length; i++) {\n                var _button = _buttons[i];\n                if (typeof _button.handler === 'string') {\n                    switch (_button.handler) {\n                        case 'add':\n                            var _buttonOptions = {\n                                success: _button.success || undefined,\n                                error: _button.error || undefined,\n                                reload: _button.reload || undefined\n                            };\n                            options.buttons[i].handler = function () {\n                                $(options.selector).dialog(expressui.dialog.add, _buttonOptions);\n                            };\n                            break;\n                        case 'save':\n                            _buttonOptions = {\n                                success: _button.success || undefined,\n                                error: _button.error || undefined,\n                                reload: _button.reload || undefined\n                            };\n                            options.buttons[i].handler = function () {\n                                $(options.selector).dialog(expressui.dialog.save, _buttonOptions);\n                            };\n                            break;\n                        case 'close':\n                            var _reload = _button.reload || undefined;\n                            options.buttons[i].handler = function () {\n                                $(options.selector).dialog(expressui.dialog.close, function () {\n                                    // 按钮回调刷新表\n                                    if (_reload) {\n                                        expressui.grid.reload(_reload);\n                                    }\n                                });\n                            };\n                            break;\n                    }\n\n                }\n            }\n        }\n\n        if (options.grid) {\n            expressui.dialog._replacePlaceHolder(options, options.grid);\n        }\n\n        return $(options.selector).dialog(options);\n    },\n\n    /**\n     * dialog.add\n     * @param jq\n     * @param options\n     */\n    add: function (jq, options) {\n        var selector = expressui.util.initSelector(jq);\n        var dialogOptions = $(selector).dialog('options');\n        var isValid = $(selector).form('validate');\n        if (isValid) {\n            $.messager.progress({title: '请稍等', msg: '正在操作...'});\n            var serializeArray = $(selector).find('form').serializeArray();\n            var paramArray = typeof dialogOptions.save === 'object' ?\n                (dialogOptions.save.data || []) : [];\n            for (var i = 0; i < paramArray.length; i++) {\n                serializeArray.push(paramArray[i]);\n            }\n\n            if (typeof dialogOptions.save === 'function') {\n\n                try {\n                    var sA = {};\n                    for (i = 0; i < serializeArray.length; i++) {\n                        sA[serializeArray[i].name] = serializeArray[i].value;\n                    }\n\n                    if (dialogOptions.save(sA) !== true) {\n                        if (typeof options.success === 'function') {\n                            options.success(data);\n                        }\n\n                        if (typeof options.success === 'string') {\n                            $.messager.show({title: '信息', msg: options.success});\n                            if (typeof options.reload === 'object') {\n                                expressui.grid.reload(options.reload);\n                            }\n                        } else {\n                            if (typeof options.reload === 'object') {\n                                expressui.grid.reload(options.reload);\n                            }\n                        }\n                        $(selector).dialog('close');\n                    }\n                } catch (e) {\n                    console.error(e);\n                } finally {\n                    $.messager.progress('close');\n                }\n\n            } else {\n\n                try {\n                    expressui.ajax({\n                        beforeSend: function () {\n                        },\n                        url: typeof dialogOptions.save === 'string' ? dialogOptions.save : dialogOptions.save.url,\n                        type: dialogOptions.save.method || 'post',\n                        data: serializeArray,\n\n                        success: function (data, statusText, XMLHttpRequest) {\n                            if (typeof options.success === 'function') {\n                                options.success(data);\n                            }\n\n                            // 此处 bug 会出现多次 reload\n                            // } else {\n                            //     if (typeof options.reload === 'object') {\n                            //         expressui.grid.reload(options.reload);\n                            //     }\n                            // }\n\n                            if (typeof options.success === 'string') {\n                                $.messager.show({title: '信息', msg: options.success});\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            } else {\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            }\n                            $(selector).dialog('close');\n                            $.messager.progress('close');\n                        },\n                        error: function (XMLHttpRequest, statusText, errorThrown) {\n                            if (options.error) {\n                                if (typeof options.error === 'function') {\n                                    options.error(XMLHttpRequest, statusText, errorThrown);\n                                }\n                                if (typeof options.error === 'string') {\n                                    $.messager.alert('信息', options.error, 'error');\n                                }\n                            } else {\n                                $.messager.alert('信息', XMLHttpRequest.responseJSON.message, 'error');\n                            }\n                            $.messager.progress('close');\n                        }\n                    })\n                } catch (e) {\n                    $.messager.alert('信息', e.message, 'error');\n                } finally {\n                    $.messager.progress('close');\n                }\n            }\n\n        }\n    },\n\n    /**\n     * dialog.save\n     * @param jq\n     * @param options\n     */\n    save: function (jq, options) {\n        var selector = expressui.util.initSelector(jq);\n        var dialogOptions = $(selector).dialog('options');\n        var isValid = $(selector).form('validate');\n        if (isValid) {\n            $.messager.progress({title: '请稍等', msg: '正在操作...'});\n            var serializeArray = $(selector).find('form').serializeArray();\n            var paramArray = typeof dialogOptions.save === 'object' ?\n                dialogOptions.save.data || [] : [];\n            for (var i = 0; i < paramArray.length; i++) {\n                serializeArray.push(paramArray[i]);\n            }\n\n            if (typeof dialogOptions.save === 'function') {\n\n                try {\n                    var sA = {};\n                    for (i = 0; i < serializeArray.length; i++) {\n                        sA[serializeArray[i].name] = serializeArray[i].value;\n                    }\n\n                    if (dialogOptions.save(sA) !== true) {\n                        if (typeof options.success === 'function') {\n                            options.success(data);\n                        }\n                        if (typeof options.success === 'string') {\n                            $.messager.show({title: '信息', msg: options.success});\n                            if (typeof options.reload === 'object') {\n                                expressui.grid.reload(options.reload);\n                            }\n                        } else {\n                            if (typeof options.reload === 'object') {\n                                expressui.grid.reload(options.reload);\n                            }\n                        }\n\n                        $(selector).dialog('close');\n                    }\n                } catch (e) {\n                    console.error(e);\n                } finally {\n                    $.messager.progress('close');\n                }\n\n            } else {\n\n                try {\n                    expressui.ajax({\n                        beforeSend: function () {\n                        },\n                        url: (typeof dialogOptions.save) === 'string' ? dialogOptions.save : (dialogOptions.save.url || ''),\n                        type: dialogOptions.save.method || 'post',\n                        data: serializeArray,\n                        success: function (data, statusText, XMLHttpRequest) {\n                            if (typeof options.success === 'function') {\n                                options.success(data);\n                            }\n                            if (typeof options.success === 'string') {\n                                $.messager.show({title: '信息', msg: options.success});\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            } else {\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            }\n\n                            $(selector).dialog('close');\n                            $.messager.progress('close');\n                        },\n                        error: function (XMLHttpRequest, statusText, errorThrown) {\n                            if (options.error) {\n                                if (typeof options.error === 'function') {\n                                    options.error(XMLHttpRequest, statusText, errorThrown);\n                                }\n                                if (typeof options.error === 'string') {\n                                    $.messager.alert('信息', options.error, 'error');\n                                }\n                            } else {\n                                $.messager.alert('信息', XMLHttpRequest.responseJSON.message, 'error');\n                            }\n                            $.messager.progress('close');\n                        }\n                    })\n                } catch (e) {\n                    $.messager.alert('信息', e.message, 'error');\n                } finally {\n                    $.messager.progress('close');\n                }\n            }\n        }\n    }\n});\n\n$.extend($.fn.datagrid.defaults, {\n    idField: 'id',\n    fit: true,\n    fitColumns: true,\n    autoRowHeight: true,\n    selectOnCheck: false, // 单独 select\n    checkOnSelect: true, // 单独 select\n    checkbox: true,\n    method: 'get',\n    pagination: true,\n    pageNumber: 1,\n    pageList: [10, 20, 50, 100],\n    pageSize: 10,\n    loadMsg: '正在加载，请稍等...',\n    emptyMsg: '暂无记录',\n    onLoadSuccess: function (data) {\n        $(this).datagrid('clearSelections');\n        $(this).datagrid('clearChecked');\n    },\n    onLoadError: function () {\n        $(this).datagrid('clearSelections');\n        $(this).datagrid('clearChecked');\n    },\n    loadFilter: function (data) {\n        return data ? data : [];\n    },\n    /**\n     * 单独 select\n     * @param row\n     */\n    onBeforeSelect: function (index, row) {\n        $(this).datagrid('clearSelections');\n    },\n});\n\n$.extend($.fn.datagrid.methods, {\n    // 创建一个 datagrid 实例\n    create: function (jq, options) {\n        // 初始 selector\n        options.selector = expressui.util.initSelector(jq);\n        // 追加工具栏\n        expressui.grid.appendToolbar(options);\n        return $(options.selector).datagrid(options);\n    },\n\n    // 获取必须一个勾选项，否则弹出警告信息\n    getCheckedOneOrShowAlert: function (jq, alertMessage) {\n        var selector = expressui.util.initSelector(jq);\n        var checked = expressui.grid.getCheckedHasMessage({type: 'datagrid', selector: selector});\n\n        var options = {alertMessage: '请勾选要操作项'};\n        if (typeof alertMessage === 'string') {\n            options.alertMessage = alertMessage;\n        }\n        if (typeof alertMessage === 'object') {\n            options = alertMessage;\n        }\n\n        if (checked) {\n            if (checked.length === 1) {\n                return checked[0];\n            } else {\n                if (checked.length <= 0) {\n                    $.messager.alert('信息', options.alertMessage, 'warning');\n                } else {\n                    $.messager.alert('信息', '最多只能勾选一项操作', 'warning');\n                }\n            }\n        }\n    },\n\n    // 获取至少勾选一项，否则弹出警告信息\n    getCheckedLessOneOrShowAlert: function (jq) {\n        var selector = expressui.util.initSelector(jq);\n        var selections = expressui.grid.getCheckedHasMessage({type: 'datagrid', selector: selector});\n        if (selections) {\n            if (selections.length <= 0) {\n                $.messager.alert('信息', '请勾选要操作项', 'warning');\n            } else {\n                return selections;\n            }\n        }\n    },\n\n    // 勾选一项或不勾选项都不弹出警告信息，否则弹出警告信息\n    getCheckedOneNoCheckedOrShowAlert: function (jq) {\n        var selector = expressui.util.initSelector(jq);\n        var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector});\n        if (selections) {\n            if (selections.length > 1) {\n                $.messager.alert('信息', '最多只能勾选一项操作', 'warning');\n                return false;\n            } else {\n                if (selections.length === 1) {\n                    return selections[0];\n                } else {\n                    return true;\n                }\n            }\n        } else {\n            return true;\n        }\n    },\n\n    // 获取勾选的一项\n    getCheckedOne: function (jq) {\n        var selector = expressui.util.initSelector(jq);\n        var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector});\n        if (selections) {\n            return selections[0];\n        }\n    },\n\n    // // 删除多项\n    // ajax: function (jq, url) {\n    //     $.messager.progress({title:'请稍等', msg:'正在操作...'});\n    //     var selector = expressui.util.initSelector(jq);\n    //     var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector});\n    //     if (!selections || selections.length <= 0) {\n    //         $.messager.progress('close');\n    //         $.messager.alert('信息', '请勾选要操作项', 'warning');\n    //         return;\n    //     }\n    //\n    //     var options = {url: '', method:'post', paramName: $(selector).datagrid('options').idField, paramData: [], confirmMessage: '确定要操作勾选项吗'};\n    //     if (typeof url === 'string') {\n    //         options.url = url;\n    //     }\n    //     if (typeof url === 'object') {\n    //         $.extend(options, url);\n    //     }\n    //\n    //     var data = {};\n    //     for (var i = 0; i < selections.length; i++) {\n    //         var idField = $(selector).datagrid('options').idField;\n    //         options.paramData.push(selections[i][idField]);\n    //     }\n    //     data[options.paramName] = options.paramData;\n    //\n    //     try {\n    //         $.messager.confirm('信息', options.confirmMessage, function (ok) {\n    //             if(ok) {\n    //                 expressui.ajax({\n    //                     url: options.url,\n    //                     type: options.method,\n    //                     data: options.data || data,\n    //                     success: function (data) {\n    //\n    //                         if (typeof options.success === 'function') {\n    //                             options.success(data);\n    //                         } else {\n    //                             if(typeof options.reload === 'object') {\n    //                                 expressui.grid.reload(options.reload);\n    //                             }\n    //                         }\n    //\n    //                         if (typeof options.success === 'string') {\n    //                             $.messager.show({title:'信息', msg:options.success});\n    //                             if(typeof options.reload === 'object') {\n    //                                 expressui.grid.reload(options.reload);\n    //                             }\n    //                         }\n    //\n    //                         $(selector).datagrid('clearSelections');\n    //                         $(selector).datagrid('clearChecked');\n    //\n    //                     },\n    //                     error: function (XMLHttpRequest, textStatus, errorThrown) {\n    //\n    //                         if (typeof options.error === 'function') {\n    //                             options.error(XMLHttpRequest, textStatus, errorThrown);\n    //                         }\n    //\n    //                         if (typeof options.error === 'string') {\n    //                             $.messager.show({title:'信息', msg:options.error});\n    //                         }\n    //\n    //                         if(!options.error) {\n    //                             $.messager.show({title:'信息', msg:XMLHttpRequest.responseJSON.message});\n    //                         }\n    //\n    //                         $.messager.progress('close');\n    //                     }\n    //                 });\n    //             }\n    //         });\n    //\n    //     } catch (e) {\n    //         $.messager.show({title: '信息', msg: '发生错误，操作失败'});\n    //     } finally {\n    //         $.messager.progress('close');\n    //     }\n    // },\n\n    // 删除多项\n    deleteChecked: function (jq, url) {\n        $.messager.progress({title: '请稍等', msg: '正在操作...'});\n        var selector = expressui.util.initSelector(jq);\n        var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector});\n        if (!selections || selections.length <= 0) {\n            $.messager.progress('close');\n            $.messager.alert('信息', '请勾选要操作项', 'warning');\n            return;\n        }\n\n        var options = {\n            url: '',\n            method: 'post',\n            paramName: $(selector).datagrid('options').idField,\n            paramData: [],\n            confirmMessage: '确定要删除勾选项吗'\n        };\n        if (typeof url === 'string') {\n            options.url = url;\n        }\n        if (typeof url === 'object') {\n            $.extend(options, url);\n        }\n\n        var data = {};\n        for (var i = 0; i < selections.length; i++) {\n            var idField = $(selector).datagrid('options').idField;\n            options.paramData.push(selections[i][idField]);\n        }\n        data[options.paramName] = options.paramData;\n\n        try {\n            $.messager.confirm('信息', options.confirmMessage, function (ok) {\n                if (ok) {\n                    expressui.ajax({\n                        url: options.url,\n                        type: options.method,\n                        data: options.data || data,\n                        success: function (data) {\n\n                            if (typeof options.success === 'function') {\n                                options.success(data);\n                            }\n\n                            if (typeof options.success === 'string') {\n                                $.messager.show({title: '信息', msg: options.success});\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            } else {\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            }\n\n                            $(selector).datagrid('clearSelections');\n                            $(selector).datagrid('clearChecked');\n\n                        },\n                        error: function (XMLHttpRequest, textStatus, errorThrown) {\n                            if (typeof options.error === 'function') {\n                                options.error(XMLHttpRequest, textStatus, errorThrown);\n                            }\n\n                            if (typeof options.error === 'string') {\n                                $.messager.show({title: '信息', msg: options.error});\n                            }\n\n                            if (!options.error) {\n                                $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                            }\n\n                            $.messager.progress('close');\n                        }\n                    });\n                }\n            });\n\n        } catch (e) {\n            $.messager.show({title: '信息', msg: '发生错误，操作失败'});\n        } finally {\n            $.messager.progress('close');\n        }\n    },\n\n    // post 不管多少项\n    post: function (jq, url) {\n        $.messager.progress({title: '请稍等', msg: '正在操作...'});\n        var selector = expressui.util.initSelector(jq);\n        var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector});\n        // if (!selections || selections.length <= 0) {\n        //     $.messager.progress('close');\n        //     $.messager.alert('信息', '请勾选要操作项', 'warning');\n        //     return;\n        // }\n        var options = {\n            url: '',\n            method: 'post',\n            paramName: $(selector).datagrid('options').idField,\n            paramData: [],\n            confirmMessage: '确定要操作吗'\n        };\n        if (typeof url === 'string') {\n            options.url = url;\n        }\n        if (typeof url === 'object') {\n            $.extend(options, url);\n        }\n        var data = {};\n        for (var i = 0; i < selections.length; i++) {\n            var idField = $(selector).datagrid('options').idField;\n            options.paramData.push(selections[i][idField]);\n        }\n        data[options.paramName] = options.paramData;\n        try {\n            $.messager.confirm('信息', options.confirmMessage, function (ok) {\n                if (ok) {\n                    expressui.ajax({\n                        url: options.url,\n                        type: options.method,\n                        data: options.data || data,\n                        success: function (data) {\n                            if (typeof options.success === 'function') {\n                                options.success(data);\n                            }\n                            if (typeof options.success === 'string') {\n                                $.messager.show({title: '信息', msg: options.success});\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            } else {\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            }\n                            $(selector).datagrid('clearSelections');\n                            $(selector).datagrid('clearChecked');\n                        },\n                        error: function (XMLHttpRequest, textStatus, errorThrown) {\n                            if (typeof options.error === 'function') {\n                                options.error(XMLHttpRequest, textStatus, errorThrown);\n                            }\n                            if (typeof options.error === 'string') {\n                                $.messager.show({title: '信息', msg: options.error});\n                            }\n                            if (!options.error) {\n                                $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                            }\n                            $.messager.progress('close');\n                        }\n                    });\n                }\n            });\n        } catch (e) {\n            $.messager.show({title: '信息', msg: '发生错误，操作失败'});\n        } finally {\n            $.messager.progress('close');\n        }\n    },\n\n    // post 必须勾选一项或一项以上，否则弹出警告\n    postCheckedLessOneOrShowAlert: function (jq, url) {\n        $.messager.progress({title: '请稍等', msg: '正在操作...'});\n        var selector = expressui.util.initSelector(jq);\n        var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector});\n        if (!selections || selections.length <= 0) {\n            $.messager.progress('close');\n            $.messager.alert('信息', '请勾选要操作项', 'warning');\n            return;\n        }\n        var options = {\n            url: '',\n            method: 'post',\n            paramName: $(selector).datagrid('options').idField,\n            paramData: [],\n            confirmMessage: '确定要操作勾选项吗'\n        };\n        if (typeof url === 'string') {\n            options.url = url;\n        }\n        if (typeof url === 'object') {\n            $.extend(options, url);\n        }\n        var data = {};\n        for (var i = 0; i < selections.length; i++) {\n            var idField = $(selector).datagrid('options').idField;\n            options.paramData.push(selections[i][idField]);\n        }\n        data[options.paramName] = options.paramData;\n        try {\n            $.messager.confirm('信息', options.confirmMessage, function (ok) {\n                if (ok) {\n                    expressui.ajax({\n                        url: options.url,\n                        type: options.method,\n                        data: options.data || data,\n                        success: function (data) {\n                            if (typeof options.success === 'function') {\n                                options.success(data);\n                            }\n                            if (typeof options.success === 'string') {\n                                $.messager.show({title: '信息', msg: options.success});\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            } else {\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            }\n                            $(selector).datagrid('clearSelections');\n                            $(selector).datagrid('clearChecked');\n                        },\n                        error: function (XMLHttpRequest, textStatus, errorThrown) {\n                            if (typeof options.error === 'function') {\n                                options.error(XMLHttpRequest, textStatus, errorThrown);\n                            }\n                            if (typeof options.error === 'string') {\n                                $.messager.show({title: '信息', msg: options.error});\n                            }\n                            if (!options.error) {\n                                $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                            }\n                            $.messager.progress('close');\n                        }\n                    });\n                }\n            });\n        } catch (e) {\n            $.messager.show({title: '信息', msg: '发生错误，操作失败'});\n        } finally {\n            $.messager.progress('close');\n        }\n    },\n\n    // post 必须只勾选一项，否则弹出警告\n    postCheckedMustOneOrShowAlert: function (jq, url) {\n        $.messager.progress({title: '请稍等', msg: '正在操作...'});\n        var selector = expressui.util.initSelector(jq);\n        var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector});\n        if (!selections || selections.length <= 0) {\n            $.messager.progress('close');\n            $.messager.alert('信息', '请勾选要操作项', 'warning');\n            return;\n        }\n        if (!selections || selections.length > 1) {\n            $.messager.progress('close');\n            $.messager.alert('信息', '最多只允许勾选一项操作', 'warning');\n            return;\n        }\n        var options = {url: '', method: 'post', paramName: $(selector).datagrid('options').idField, paramData: []};\n        if (typeof url === 'string') {\n            options.url = url;\n        }\n        if (typeof url === 'object') {\n            $.extend(options, url);\n        }\n        var data = {};\n        var idField = $(selector).datagrid('options').idField;\n        var paramName = options.paramName;\n        data[paramName] = selections[0][idField];\n\n        try {\n            $.messager.confirm('信息', '确定要操作勾选项吗？', function (ok) {\n                if (ok) {\n                    expressui.ajax({\n                        url: options.url,\n                        type: options.method,\n                        data: options.data || data,\n                        success: function (data) {\n                            if (typeof options.success === 'function') {\n                                options.success(data);\n                            } else {\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            }\n                            if (typeof options.success === 'string') {\n                                $.messager.show({title: '信息', msg: options.success});\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            }\n                            $(selector).datagrid('clearSelections');\n                            $(selector).datagrid('clearChecked');\n                        },\n                        error: function (XMLHttpRequest, textStatus, errorThrown) {\n                            if (typeof options.error === 'function') {\n                                options.error(XMLHttpRequest, textStatus, errorThrown);\n                            }\n                            if (typeof options.error === 'string') {\n                                $.messager.show({title: '信息', msg: options.error});\n                            }\n                            if (!options.error) {\n                                $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                            }\n                            $.messager.progress('close');\n                        }\n                    });\n                }\n                $.messager.progress('close');\n\n            });\n        } catch (e) {\n            $.messager.show({title: '请稍等', msg: '发生错误，操作失败'});\n        } finally {\n            $.messager.progress('close');\n        }\n    }\n});\n\n$.extend($.fn.treegrid.defaults, {\n    idField: 'id',\n    treeField: 'name',\n    fit: true,\n    fitColumns: true,\n    autoRowHeight: true,\n    onlyLeafCheck: true,\n    selectOnCheck: false, // 单独 select\n    checkOnSelect: true, // 单独 select\n    checkbox: false,\n    pagination: false,\n    scrollbarSize: 0,\n    method: 'get',\n    pageNumber: 1,\n    pageList: [10, 20, 50, 100],\n    pageSize: 10,\n    loadMsg: '正在加载，请稍等...',\n    emptyMsg: '暂无记录',\n    queryParams: {},\n    onLoadSuccess: function (data) {\n        $(this).treegrid('options').url = $(this).treegrid('options')._url;\n        $(this).treegrid('clearSelections');\n        $(this).treegrid('clearChecked');\n    },\n    onLoadError: function () {\n        $(this).treegrid('clearSelections');\n        $(this).treegrid('clearChecked');\n    },\n    onBeforeExpand: function (row) {\n        var options = $(this).treegrid('options');\n        if (options.expandUrl) {\n            options.url = expressui.replaceUrlPlaceholder(options.expandUrl, row);\n        }\n        return true;\n    },\n    // 单独 select\n    onBeforeSelect: function (row) {\n        $(this).treegrid('clearSelections');\n    }\n});\n\n$.extend($.fn.treegrid.methods, {\n    // 创建一个 treegrid 实例\n    create: function (jq, options) {\n        // 初始 selector\n        options.selector = expressui.util.initSelector(jq);\n        // 追加工具栏\n        expressui.grid.appendToolbar(options);\n        if (options.url) {\n            options._url = options.url;\n        }\n        return $(options.selector).treegrid(options);\n    },\n\n    // 获取至少勾选一项，否则弹出警告信息\n    getCheckedLessOneOrShowAlert: function (jq) {\n        var selector = expressui.util.initSelector(jq);\n        var selections = expressui.grid.getCheckedHasMessage({type: 'treegrid', selector: selector});\n        if (selections) {\n            if (selections.length <= 0) {\n                $.messager.alert('信息', '请勾选要操作项', 'warning');\n            } else {\n                return selections;\n            }\n        }\n    },\n\n    // // 不勾选项或勾选一项都不弹出警告信息，否则弹出警告信息\n    // getSelectOneOrMoreShowAlert: function (jq) {\n    //     var selector = expressui.util.initSelector(jq);\n    //     var selections = expressui.grid.getSelections({type: 'treegrid', selector: selector});\n    //     if(selections){\n    //         if(selections.length >1 ){\n    //             $.messager.alert('信息', '最多只能勾选一项操作', 'warning');\n    //             return false;\n    //         } else{\n    //             if(selections.length === 1){\n    //                 return selections[0];\n    //             } else {\n    //                 return true;\n    //             }\n    //         }\n    //     } else{\n    //         return true;\n    //     }\n    // },\n    //\n    // // 获取勾选的一项\n    // getSelectOne: function (jq) {\n    //     var selector = expressui.util.initSelector(jq);\n    //     var selections = expressui.grid.getChecked({type: 'treegrid', selector: selector});\n    //     if(selections){\n    //         return selections[0];\n    //     }\n    // },\n\n    ajax: function (jq, url) {\n        $.messager.progress({title: '请稍等', msg: '正在操作...'});\n        var selector = expressui.util.initSelector(jq);\n        var selections = expressui.grid.getChecked({type: 'treegrid', selector: selector});\n        if (!selections || selections.length <= 0) {\n            $.messager.progress('close');\n            $.messager.alert('信息', '请勾选要操作项', 'warning');\n            return;\n        }\n\n        var options = {\n            url: '',\n            method: 'post',\n            paramName: $(selector).treegrid('options').idField,\n            paramData: [],\n            confirmMessage: '确定要操作勾选项吗？'\n        };\n        if (typeof url === 'string') {\n            options.url = url;\n        }\n        if (typeof url === 'object') {\n            $.extend(options, url);\n        }\n\n        var data = {};\n        for (var i = 0; i < selections.length; i++) {\n            var idField = $(selector).treegrid('options').idField;\n            options.paramData.push(selections[i][idField]);\n        }\n        data[options.paramName] = options.paramData;\n        try {\n            $.messager.confirm('信息', options.confirmMessage, function (ok) {\n                if (ok) {\n                    expressui.ajax({\n                        url: options.url,\n                        type: options.method,\n                        data: options.data || data,\n                        success: function (data) {\n\n                            if (typeof options.success === 'function') {\n                                options.success(data);\n                            } else {\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            }\n\n                            if (typeof options.success === 'string') {\n                                $.messager.show({title: '信息', msg: options.success});\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            }\n\n                            $(selector).treegrid('clearSelections');\n                            $(selector).treegrid('clearChecked');\n\n                        },\n                        error: function (XMLHttpRequest, textStatus, errorThrown) {\n\n                            if (typeof options.error === 'function') {\n                                options.error(XMLHttpRequest, textStatus, errorThrown);\n                            }\n\n                            if (typeof options.error === 'string') {\n                                $.messager.show({title: '信息', msg: options.error});\n                            }\n\n                            if (!options.error) {\n                                $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                            }\n\n                            $.messager.progress('close');\n                        }\n                    });\n                }\n            });\n        } catch (e) {\n            $.messager.show({title: '请稍等', msg: '发生错误，操作失败'});\n        } finally {\n            $.messager.progress('close');\n        }\n    },\n\n    // 删除多项\n    deleteChecked: function (jq, url) {\n        $.messager.progress({title: '请稍等', msg: '正在操作...'});\n        var selector = expressui.util.initSelector(jq);\n        var selections = expressui.grid.getChecked({type: 'treegrid', selector: selector});\n        if (!selections || selections.length <= 0) {\n            $.messager.progress('close');\n            $.messager.alert('信息', '请勾选要操作项', 'warning');\n            return;\n        }\n\n        var options = {\n            url: '',\n            method: 'post',\n            paramName: $(selector).treegrid('options').idField,\n            paramData: [],\n            confirmMessage: '确定要删除勾选项吗？'\n        };\n        if (typeof url === 'string') {\n            options.url = url;\n        }\n        if (typeof url === 'object') {\n            $.extend(options, url);\n        }\n\n        var data = {};\n        for (var i = 0; i < selections.length; i++) {\n            var idField = $(selector).treegrid('options').idField;\n            options.paramData.push(selections[i][idField]);\n        }\n        data[options.paramName] = options.paramData;\n\n        try {\n            $.messager.confirm('信息', options.confirmMessage, function (ok) {\n                if (ok) {\n                    expressui.ajax({\n                        url: options.url,\n                        type: options.method,\n                        data: options.data || data,\n                        success: function (data) {\n\n                            if (typeof options.success === 'function') {\n                                options.success(data);\n                            }\n\n                            // 此处会出现多次 reload 的代码，已经注释并移动到下方 string 判断的 reload\n                            // } else {\n                            //     if(typeof options.reload === 'object') {\n                            //         expressui.grid.reload(options.reload);\n                            //     }\n                            // }\n\n                            if (typeof options.success === 'string') {\n                                $.messager.show({title: '信息', msg: options.success});\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            } else {\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            }\n\n                            $(selector).treegrid('clearSelections');\n                            $(selector).treegrid('clearChecked');\n\n                        },\n                        error: function (XMLHttpRequest, textStatus, errorThrown) {\n\n                            if (typeof options.error === 'function') {\n                                options.error(XMLHttpRequest, textStatus, errorThrown);\n                            }\n\n                            if (typeof options.error === 'string') {\n                                $.messager.show({title: '信息', msg: options.error});\n                            }\n\n                            if (!options.error) {\n                                $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                            }\n\n                            $.messager.progress('close');\n                        }\n                    });\n                }\n            });\n        } catch (e) {\n            $.messager.show({title: '请稍等', msg: '发生错误，操作失败'});\n        } finally {\n            $.messager.progress('close');\n        }\n    },\n\n    // 删除一项\n    deleteCheckedOne: function (jq, url) {\n        $.messager.progress({title: '请稍等', msg: '正在操作...'});\n        var selector = expressui.util.initSelector(jq);\n        var selections = expressui.grid.getChecked({type: 'treegrid', selector: selector});\n        if (!selections || selections.length <= 0) {\n            $.messager.progress('close');\n            $.messager.alert('信息', '请勾选要操作项', 'warning');\n            return;\n        }\n\n        if (!selections || selections.length > 1) {\n            $.messager.progress('close');\n            $.messager.alert('信息', '最多只允许勾选一项操作', 'warning');\n            return;\n        }\n\n        var options = {url: '', method: 'post', paramName: $(selector).treegrid('options').idField, paramData: []};\n        if (typeof url === 'string') {\n            options.url = url;\n        }\n        if (typeof url === 'object') {\n            $.extend(options, url);\n        }\n\n        var data = {};\n        var idField = $(selector).treegrid('options').idField;\n        var paramName = options.paramName;\n        data[paramName] = selections[0][idField];\n\n        try {\n            $.messager.confirm('信息', '确定要删除勾选项吗？', function (ok) {\n                if (ok) {\n                    expressui.ajax({\n                        url: options.url,\n                        type: options.method,\n                        data: options.data || data,\n                        success: function (data) {\n\n                            if (typeof options.success === 'function') {\n                                options.success(data);\n                            } else {\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            }\n\n                            if (typeof options.success === 'string') {\n                                $.messager.show({title: '信息', msg: options.success});\n                                if (typeof options.reload === 'object') {\n                                    expressui.grid.reload(options.reload);\n                                }\n                            }\n\n                            $(selector).treegrid('clearSelections');\n                            $(selector).treegrid('clearChecked');\n\n                        },\n                        error: function (XMLHttpRequest, textStatus, errorThrown) {\n\n                            if (typeof options.error === 'function') {\n                                options.error(XMLHttpRequest, textStatus, errorThrown);\n                            }\n\n                            if (typeof options.error === 'string') {\n                                $.messager.show({title: '信息', msg: options.error});\n                            }\n\n                            if (!options.error) {\n                                $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                            }\n\n                            $.messager.progress('close');\n                        }\n                    });\n                }\n                $.messager.progress('close');\n\n            });\n        } catch (e) {\n            $.messager.show({title: '信息', msg: '发生错误，操作失败'});\n        } finally {\n            $.messager.progress('close');\n        }\n    }\n});\n\n$.extend($.fn.combobox.defaults, {\n    valueField: 'id',\n    textField: 'text',\n    method: 'get',\n    editable: false,\n    panelHeight: '180px',\n    // onBeforeLoad: function(param){\n    //     if(param && param.q) {\n    //         var value = param.q.replace('/ /g','');\n    //         if(value!=='') {\n    //             return true;\n    //         }\n    //     }\n    //     return false;\n    // }\n});\n\n$.extend($.fn.combotree.defaults, {\n    panelHeight: '180px',\n    method: 'get',\n});\n\n$.extend($.fn.form.methods, {\n    submit: function (jq, selector) {\n        selector.selector = jq.selector;\n        return expressui.form.submit(selector);\n    }\n});"
  },
  {
    "path": "src/main/resources/static/assets/vendor/easyui-plus-1.0.0/themes/angular.css",
    "content": "*{\n\tbox-sizing: border-box;\n}\n.f-block{\n\tdisplay: block;\n\tposition: relative;\n}\n.f-row{\n\tdisplay: -webkit-box;\n\tdisplay: -webkit-flex;\n\tdisplay: -moz-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\tposition: relative;\n}\n.f-column{\n\tdisplay: -webkit-box;\n\tdisplay: -webkit-flex;\n\tdisplay: -moz-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-direction: normal;\n\t-webkit-box-orient: vertical;\n\t-webkit-flex-direction: column;\n\t-moz-flex-direction: column;\n\t-ms-flex-direction: column;\n\tflex-direction: column;\n\tposition: relative;\n}\n.f-inline-row{\n\twhite-space: nowrap;\n\tdisplay: -webkit-inline-box;\n\tdisplay: -ms-inline-box;\n\tdisplay: inline-flex;\n\tvertical-align: middle;\n\tposition: relative;\n\talign-items: stretch;\n\t-webkit-tap-highlight-color: transparent;\n}\n.f-content-center{\n\t-webkit-box-pack: center;\n\t-ms-flex-pack: center;\n\t-webkit-justify-content: center;\n\t-moz-justify-content: center;\n\tjustify-content: center;\n\t-webkit-box-align: center;\n\t-ms-flex-align: center;\n\t-webkit-align-items: center;\n\t-moz-align-items: center;\n\talign-items: center;\n}\n.f-full{\n\t-webkit-box-flex: 1 1 auto;\n\t-ms-flex: 1 1 auto;\n\tflex: 1 1 auto;\n}\n.f-hide{\n\tdisplay: none;\n}\n.f-order0{\n\torder: 0;\n}\n.f-order1{\n\torder: 1;\n}\n.f-order2{\n\torder: 2;\n}\n.f-order3{\n\torder: 3;\n}\n.f-order4{\n\torder: 4;\n}\n.f-order5{\n\torder: 5;\n}\n.f-order6{\n\torder: 6;\n}\n.f-order7{\n\torder: 7;\n}\n.f-order8{\n\torder: 8;\n}\n.f-noshrink{\n\t-webkit-flex-shrink: 0;\n\t-moz-flex-shrink: 0;\n\t-ms-flex-negative: 0;\n\tflex-shrink: 0;\n}\n.f-animate{\n    transition: all .3s;\n}\n\n.scroll-body{\n\toverflow: auto;\n\tposition: relative;\n}\n\n.textbox .textbox-text{\n\twidth: 100%;\n\theight: auto;\n\toverflow: hidden;\n}\n.textbox-addon{\n\talign-items: center;\n}\n.textbox-disabled>.textbox-addon .textbox-icon,\n.textbox-readonly>.textbox-addon .textbox-icon{\n\tcursor: default;\n}\n.textbox-disabled>.textbox-addon .textbox-icon:hover,\n.textbox-readonly>.textbox-addon .textbox-icon:hover{\n\topacity: 0.6;\n\tcursor: default;\n}\n.textbox-addon .textbox-icon{\n\twidth: 26px;\n\theight: 18px;\n}\n\n.spinner .textbox-text{\n\theight: auto;\n}\n.spinner-button-left,.spinner-button-right{\n\twidth: 26px;\n}\n.spinner-button-updown{\n\twidth: 26px;\n}\n.spinner-button-top,.spinner-button-bottom{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 26px;\n}\n.spinner-button-top{\n\ttop: 0;\n}\n.spinner-button-bottom{\n\ttop: auto;\n\tbottom: 0;\n}\n.spinner-button{\n\tdisplay: inline-block;\n\tposition: absolute;\n\twidth: 16px;\n\theight: 16px;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.spinner-arrow{\n\tcursor: pointer;\n\topacity: 0.6;\n}\n\n.textbox-disabled .spinner-arrow:hover,\n.textbox-readonly .spinner-arrow:hover\n{\n\topacity: 0.6;\n\tcursor: default;\n}\n.textbox-readonly .spinner-arrow .spinner-arrow-up:hover,\n.textbox-disabled .spinner-arrow .spinner-arrow-up:hover,\n.textbox-readonly .spinner-arrow .spinner-arrow-down:hover,\n.textbox-disabled .spinner-arrow .spinner-arrow-down:hover\n{\n\tcursor: default;\n}\n\n.l-btn{\n\twidth: 100%;\n}\n.l-btn-empty{\n\theight: 28px;\n}\n.l-btn-large .l-btn-empty{\n\theight: 44px;\n}\n.l-btn-left{\n\toverflow: visible;\n}\n.m-btn .l-btn-left .m-btn-line{\n\ttop: -100px;\n\twidth: 36px;\n\tright: -20px;\n}\neui-button-group eui-linkbutton.f-inline-row{\n\tmargin-left: -1px;\n}\neui-button-group .l-btn:hover{\n\tz-index: 99;\n}\neui-button-group eui-linkbutton:not(:first-child):not(:last-child) .l-btn{\n\tborder-radius: 0;\n}\neui-button-group eui-linkbutton:first-child .l-btn{\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\neui-button-group eui-linkbutton:last-child .l-btn{\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n}\n\n.switchbutton-on,.switchbutton-off{\n\tposition: absolute;\n\tleft: 0;\n\twidth: calc(100% - 15px);\n\theight: 100%;\n}\n.switchbutton-on span,.switchbutton-off span,.switchbutton-handle span{\n\theight: 100%;\n}\n.switchbutton-on span{\n\ttext-indent: -15px;\n}\n.switchbutton-off span{\n\ttext-indent: 15px;\n}\n.switchbutton-off{\n\tleft: calc(100% - 15px);\n}\n.switchbutton-handle{\n\twidth: 30px;\n\tleft: auto;\n\tright: 0;\n\tz-index: 9;\n}\n.switchbutton-inner{\n\ttransition: all 200ms ease-out;\n\toverflow: visible;\n\tposition: absolute;\n\twidth: 100%;\n\ttop: -1px;\n\tbottom: -1px;\n\tleft: calc(-100% + 30px);\n\tright: auto;\n}\n.switchbutton-checked .switchbutton-inner{\n\tleft: 0;\n}\n.draggable-reverting{\n\ttransition: all 200ms ease-out;\n}\n.slider-h .slider-tip{\n\ttransform: translateX(-50%);\n}\n.slider-h .slider-rulelabel span{\n\ttransform: translateX(-50%);\n}\n.slider-v .slider-tip{\n\tmargin-top: 0;\n\ttransform: translate(-100%,-50%);\n}\n.slider-v .slider-rulelabel span{\n\ttransform: translateY(-50%);\n}\n.slider-v .slider-inner{\n\theight: auto;\n}\n\n\n.panel{\n\tposition:relative;\n}\n.panel-title{\n\theight: 20px;\n\tline-height: 20px;\n}\n.panel-footer-fixed{\n\tposition:absolute;\n\twidth:100%;\n\tbottom:0;\n}\n.window{\n\tposition: absolute;\n}\n.window-mask{\n\tposition: fixed;\n}\n.window .window-footer{\n\ttop: 0;\n}\n.dialog-toolbar{\n\tborder-width: 0 0 1px 0;\n}\n.dialog-button{\n\tborder-width: 1px 0 0 0;\n\ttop: 0;\n}\n\n.tabs{\n\twidth: 100%;\n\theight: auto;\n}\n.tabs-scrollable{\n\ttransition: left 400ms, right 400ms;\n\tposition: absolute;\n\twidth: auto;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.tabs li{\n\tdisplay: inherit;\n}\n.tabs li a.tabs-inner{\n\theight: auto;\n\tline-height: normal;\n\tdisplay: inherit;\n\toverflow: hidden;\n}\n.tabs-title{\n\tdisplay: inherit;\n\talign-items: center;\n\tline-height: normal;\n}\n.tabs-close{\n\toutline: none;\n}\n.tabs-scroller-left,.tabs-scroller-right{\n\tposition: relative;\n\tdisplay: block;\n\twidth: 21px;\n\theight: 100%;\n}\n.tabs-header-left .tabs li{\n\tright: -1px;\n}\n.tabs-header-left .tabs li,.tabs-header-right .tabs li,\n.tabs-header-left .tabs li a.tabs-inner,\n.tabs-header-right .tabs li a.tabs-inner{\n\tdisplay: inherit;\n}\n\n.combo-panel{\n\tposition: absolute;\n\theight: 200px;\n\tz-index: 9999;\n}\n.combo-panel eui-virtual-scroll,\n.combo-panel eui-datagrid,\n.combo-panel eui-treegrid{\n\twidth: 100%;\n\theight: 100%;\n}\n.combobox-item{\n\tpadding: 6px 4px;\n\tline-height: 20px;\n}\n.tagbox-labels{\n\tpadding-bottom: 4px;\n}\n.tagbox-label{\n\theight: 20px;\n\tline-height: 20px;\n}\n.tagbox .textbox-text{\n\twidth: 50px;\n\tmax-width: 100%;\n\tmargin-top: 4px;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n\theight: 20px;\n\tline-height: 20px;\n}\n\n.datagrid,eui-datagrid,\neui-datagrid-view,eui-datagrid-body,\neui-treegrid-view,eui-treegrid-body{\n\toverflow: hidden;\n}\n.datagrid-view,.datagrid-view1,.datagrid-view2{\n\tposition: relative;\n}\n.datagrid-vbody{\n\toverflow: hidden;\n}\n.datagrid-view3{\n\tmargin-left: -1px;\n}\n.datagrid-view3 .datagrid-body{\n\toverflow: hidden;\n}\n.datagrid-view3 .datagrid-body-inner{\n\tpadding-bottom: 20px;\n}\n.datagrid-view3 .datagrid-header td,\n.datagrid-view3 .datagrid-body td,\n.datagrid-view3 .datagrid-footer td {\n\tborder-width: 0 0 1px 1px;\n}\n.datagrid-htable,.datagrid-btable,.datagrid-ftable{\n\ttable-layout: fixed;\n\twidth: 100%;\n}\n.datagrid-htable{\n\theight: 100%;\n}\n.datagrid-header .datagrid-header,\n.datagrid-footer .datagrid-header{\n\tborder-width: 0 0 0 1px;\n}\n.datagrid-header-inner,.datagrid-footer-inner{\n\toverflow: hidden;\n}\n.datagrid-header-row, .datagrid-row{\n\theight: 32px;\n}\n.datagrid-cell{\n\ttext-align: left;\n\theight: auto;\n\tfont-size: inherit;\n}\n.datagrid-cell-group{\n\ttext-align: center;\n}\n.datagrid .datagrid-pager{\n\tpadding: 2px 4px;\n\tdisplay: inherit;\n}\n.datagrid-loading{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\tjustify-content: center;\n\talign-items: center;\n}\n.datagrid-mask{\n\tdisplay: block;\n}\n.datagrid-mask-msg{\n\tdisplay: block;\n\tposition: static;\n\tline-height: 36px;\n\theight: 40px;\n\tmargin: 0;\n\tpadding: 0 5px 0 30px;\n\tz-index: 9;\n}\n.datagrid-body .datagrid-td-group{\n\tborder-left-color: transparent;\n\tborder-right-color: transparent;\n}\n.datagrid-group-expander{\n\tcursor: pointer;\n}\n.datagrid-row-expander{\n\tdisplay: inline-block;\n\twidth: 16px;\n\theight: 18px;\n\tcursor: pointer;\n}\n.datagrid-group-title{\n\talign-self: center;\n\tpadding: 0 4px;\n\twhite-space: nowrap;\n\tword-break: normal;\n\tposition: relative;\n}\n.datagrid-editable> .f-field,\n.datagrid-editable> *{\n\twidth: 100%;\n\theight: 31px;\n}\n.datagrid-editable .textbox, .datagrid-editable .textbox-text{\n\tborder-radius: 0;\n}\n.datagrid-filter-row .textbox{\n\tborder-radius: 0;\n}\n.datagrid-filter-c{\n\tpadding: 4px;\n\theight: 38px;\n}\n.datagrid-filter-c> .f-field,\n.datagrid-filter-c> *{\n\theight: 30px;\n}\n.datagrid-filter-c .datagrid-editable-input{\n\twidth: 100%;\n}\n.datagrid-filter-btn{\n\twidth: 30px;\n}\n.datagrid-filter-btn .textbox-icon{\n\twidth: 28px;\n}\n.datagrid-filter-btn .textbox{\n\tbackground-color: transparent;\n}\n.datagrid-filter-btn-left{\n\tmargin-right: 4px;\n}\n.datagrid-filter-btn-right{\n\tmargin-left: 4px;\n}\n\neui-menu.menu-inline{\n\tposition: relative;\n\tdisplay: inline;\n\tmargin: 0;\n\tpadding: 0;\n}\neui-menu> .menu-container{\n\tposition: relative;\n}\n.menu-container{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tmin-width: 200px;\n}\n.menu{\n\toverflow: visible;\n}\n.menu-shadow{\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.menu-item{\n\toverflow: visible;\n}\n.menu-text{\n\theight: 32px;\n\tline-height: 32px;\n\tfloat: none;\n}\n.menu-line{\n\tz-index: 9999999;\n\theight: 100%;\n}\n.menu-active{\n\tz-index: 99999999;\n}\n\n.progressbar-value{\n\toverflow: visible;\n}\n\n.searchbox .textbox-button,\n.searchbox .textbox-button:hover{\n\tposition: inherit;\n}\n\n.calendar-content{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.calendar-menu{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n}\n.calendar-menu-month-inner{\n\tposition: relative;\n}\n\n.f-field{\n\twidth: 12em;\n\theight: 30px;\n}\neui-tagbox{\n\twidth: 12em;\n\theight: auto;\n\tmin-height: 30px;\n}\neui-switchbutton{\n\twidth: 70px;\n\theight: 30px;\n}\neui-radiobutton{\n\twidth: 20px;\n\theight: 20px;\n}\neui-checkbox{\n\twidth: 20px;\n\theight: 20px;\n}\neui-progressbar{\n\theight: 24px;\n}\neui-pagination{\n\theight: 34px;\n\tpadding: 2px;\n}\neui-layout{\n\tdisplay: block;\n}\n.layout{\n\theight: 100%;\n}\n.layout-animate{\n\ttransition: transform 400ms;\n}\n.layout-panel-north,.layout-panel-south{\n\tposition: absolute;\n\twidth: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.layout-panel-south{\n\ttop: auto;\n\tbottom: 0;\n}\n.layout-panel-west,.layout-panel-east{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tbottom: 0;\n}\n.layout-panel-east{\n\tleft: auto;\n\tright: 0;\n}\n.layout-panel-west.layout-collapsed{\n\ttransform: translate3d(-100%, 0, 0);\n}\n.layout-panel-east.layout-collapsed{\n\ttransform: translate3d(100%, 0, 0)\n}\n.layout-panel-north.layout-collapsed{\n\ttransform: translate3d(0, -100%, 0)\n}\n.layout-panel-south.layout-collapsed{\n\ttransform: translate3d(0, 100%, 0)\n}\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/easyui-plus-1.0.0/themes/blue/easyui.css",
    "content": ".f-row {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    position: relative;\n}\n.f-column {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-direction: normal;\n    -webkit-box-orient: vertical;\n    -webkit-flex-direction: column;\n    -moz-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    position: relative;\n}\n.f-full {\n    -webkit-box-flex: 1 1 auto;\n    -ms-flex: 1 1 auto;\n    flex: 1 1 auto;\n}\n.f-noshrink {\n    -webkit-flex-shrink: 0;\n    -moz-flex-shrink: 0;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n}\n.f-content-center {\n    -webkit-box-pack: center;\n    -ms-flex-pack: center;\n    -webkit-justify-content: center;\n    -moz-justify-content: center;\n    justify-content: center;\n    -webkit-box-align: center;\n    -ms-flex-align: center;\n    -webkit-align-items: center;\n    -moz-align-items: center;\n    align-items: center;\n}\n.f-vcenter {\n    -webkit-box-align: center;\n    -ms-flex-align: center;\n    -webkit-align-items: center;\n    -moz-align-items: center;\n    align-items: center;\n}\n* {\n    -moz-box-sizing: border-box;\n    -webkit-box-sizing: border-box;\n    -o-box-sizing: border-box;\n    -ms-box-sizing: border-box;\n    box-sizing: border-box;\n}\n.panel {\n    overflow: hidden;\n    text-align: left;\n    margin: 0;\n    border: 0;\n    -moz-border-radius: 0 0 0 0;\n    -webkit-border-radius: 0 0 0 0;\n    border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n    border-width: 1px;\n    border-style: solid;\n}\n.panel-header {\n    padding: 5px;\n    position: relative;\n}\n.panel-title {\n    background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n    border-width: 0 0 1px 0;\n}\n.panel-body {\n    overflow: auto;\n    border-top-width: 0;\n    padding: 0;\n}\n.panel-body-noheader {\n    border-top-width: 1px;\n}\n.panel-body-noborder {\n    border-width: 0px;\n}\n.panel-body-nobottom {\n    border-bottom-width: 0;\n}\n.panel-with-icon {\n    padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n    position: absolute;\n    top: 50%;\n    margin-top: -8px;\n    height: 16px;\n    overflow: hidden;\n}\n.panel-icon {\n    left: 5px;\n    width: 16px;\n}\n.panel-tool {\n    right: 5px;\n    width: auto;\n}\n.panel-tool a {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n    margin: 0 0 0 2px;\n    vertical-align: top;\n}\n.panel-tool a:hover {\n    opacity: 1;\n    filter: alpha(opacity=100);\n    background-color: #e2e2e2;\n    -moz-border-radius: 3px 3px 3px 3px;\n    -webkit-border-radius: 3px 3px 3px 3px;\n    border-radius: 3px 3px 3px 3px;\n}\n.panel-loading {\n    padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n    overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    border: 0;\n    overflow: hidden;\n}\n.panel-loading {\n    /*background: url('images/loading.gif') no-repeat 10px 10px;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0;\n    color: #444444;\n}\n.panel-loading :before {\n    content: \"\\eb00\";\n}\n.panel-tool-close {\n    /*background: url('images/panel_tools.png') no-repeat -16px 0px;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 14px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0;\n    color: #444444;\n}\n.panel-tool-close:before {\n    content: \"\\e6a2\";\n}\n.panel-tool-min {\n    /*background: url('images/panel_tools.png') no-repeat 0px 0px;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;\n    text-decoration: none;\n    padding: 0;\n    color: #444444;\n}\n.panel-tool-min:before {\n    content: \"\\ea5c\";\n}\n.panel-tool-max {\n    /*background: url('images/panel_tools.png') no-repeat 0px -16px;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 12px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 2px;\n    color: #444444;\n}\n.panel-tool-max:before {\n    content: \"\\e8fc\";\n}\n.panel-tool-restore {\n    /*background: url('images/panel_tools.png') no-repeat -16px -16px;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 12px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    line-height: 12px;\n    color: #444444;\n}\n.panel-tool-restore:before {\n    content: \"\\e8fe\";\n}\n.panel-tool-collapse {\n    /*background: url('images/panel_tools.png') no-repeat -32px 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;\n    text-decoration: none;\n    line-height: 23px;\n    color: #444444;\n}\n.panel-tool-collapse:before {\n    content: \"\\e863\";\n}\n.panel-tool-expand {\n    /*background: url('images/panel_tools.png') no-repeat -32px -16px;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    line-height: 10px;\n    color: #444444;\n}\n.panel-tool-expand:before {\n    content: \"\\e85e\";\n}\n.panel-header,\n.panel-body {\n    border-color: #D3D3D3;\n}\n.panel-header {\n    background-color: #f3f3f3;\n    background: #f3f3f3;\n    background-repeat: repeat-x;\n    filter: none;\n    color: #575765;\n}\n.panel-body {\n    background-color: #ffffff;\n    color: #000000;\n    font-size: 12px;\n}\n.panel-title {\n    font-size: 12px;\n    font-weight: bold;\n    color: #575765;\n    height: 20px;\n    line-height: 20px;\n}\n.panel-footer {\n    border: 1px solid #D3D3D3;\n    overflow: hidden;\n    background: #fafafa;\n    color: #000000;\n}\n.panel-footer-noborder {\n    border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n    position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n    position: absolute;\n}\n.panel-hleft>.panel-header {\n    float: left;\n}\n.panel-hright>.panel-header {\n    float: right;\n}\n.panel-hleft>.panel-body {\n    border-top-width: 1px;\n    border-left-width: 0;\n}\n.panel-hright>.panel-body {\n    border-top-width: 1px;\n    border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n    border-bottom-width: 1px;\n    border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n    border-bottom-width: 1px;\n    border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n    position: absolute;\n    right: 0;\n}\n.panel-hright>.panel-footer {\n    position: absolute;\n    left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n    border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n    border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n    border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n    border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n    border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n    border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n    border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n    border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n    margin-top: 0;\n    top: 5px;\n    left: 50%;\n    margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n    position: absolute;\n    min-width: 16px;\n    left: 25px;\n    top: 5px;\n    bottom: auto;\n    white-space: nowrap;\n    word-wrap: normal;\n    -webkit-transform: rotate(90deg);\n    -webkit-transform-origin: 0 0;\n    -moz-transform: rotate(90deg);\n    -moz-transform-origin: 0 0;\n    -o-transform: rotate(90deg);\n    -o-transform-origin: 0 0;\n    transform: rotate(90deg);\n    transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n    position: absolute;\n    min-width: 16px;\n    left: 21px;\n    top: auto;\n    bottom: 0px;\n    text-align: right;\n    white-space: nowrap;\n    word-wrap: normal;\n    -webkit-transform: rotate(-90deg);\n    -webkit-transform-origin: 0 0;\n    -moz-transform: rotate(-90deg);\n    -moz-transform-origin: 0 0;\n    -o-transform: rotate(-90deg);\n    -o-transform-origin: 0 0;\n    transform: rotate(-90deg);\n    transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n    padding-left: 0;\n    padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n    top: auto;\n    bottom: 5px;\n    width: 16px;\n    height: auto;\n    left: 50%;\n    margin-left: -8px;\n    margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n    margin: 2px 0 0 0;\n}\n.accordion {\n    overflow: hidden;\n    border-width: 1px;\n    border-style: solid;\n}\n.accordion .accordion-header {\n    border-width: 0 0 1px;\n    cursor: pointer;\n}\n.accordion .accordion-body {\n    border-width: 0 0 1px;\n}\n.accordion-noborder {\n    border-width: 0;\n}\n.accordion-noborder .accordion-header {\n    border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n    border-width: 0 0 1px;\n}\n.accordion-collapse {\n    /*background: url('images/accordion_arrows.png') no-repeat 0 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0px;\n    color: #444444;\n}\n.accordion-collapse:before {\n    content: \"\\e699\";\n}\n.accordion-expand {\n    /*background: url('images/accordion_arrows.png') no-repeat -16px 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0px;\n    color: #444444;\n}\n.accordion-expand:before {\n    content: \"\\e695\";\n}\n.accordion {\n    background: #ffffff;\n    border-color: #D3D3D3;\n}\n.accordion .accordion-header {\n    background: #f3f3f3;\n    filter: none;\n}\n.accordion .accordion-header-selected {\n    background: #0092DC;\n}\n.accordion .accordion-header-selected .panel-title {\n    color: #fff;\n}\n.accordion .panel-last > .accordion-header {\n    border-bottom-color: #f3f3f3;\n}\n.accordion .panel-last > .accordion-body {\n    border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n    border-bottom-color: #D3D3D3;\n}\n.accordion> .panel-hleft {\n    float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n    border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n    border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n    border-right-color: #f3f3f3;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n    border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n    border-right-color: #D3D3D3;\n}\n.accordion> .panel-hright {\n    float: right;\n}\n.accordion> .panel-hright>.panel-header {\n    border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n    border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n    border-left-color: #f3f3f3;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n    border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n    border-left-color: #D3D3D3;\n}\n.window {\n    overflow: hidden;\n    padding: 5px;\n    border-width: 1px;\n    border-style: solid;\n}\n.window .window-header {\n    background: transparent;\n    padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n    border-width: 1px;\n    border-style: solid;\n    border-top-width: 0px;\n}\n.window .window-body-noheader {\n    border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n    border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n    top: 50%;\n    margin-top: -11px;\n}\n.window .window-header .panel-icon {\n    left: 1px;\n}\n.window .window-header .panel-tool {\n    right: 1px;\n}\n.window .window-header .panel-with-icon {\n    padding-left: 18px;\n}\n.window-proxy {\n    position: absolute;\n    overflow: hidden;\n}\n.window-proxy-mask {\n    position: absolute;\n    filter: alpha(opacity=5);\n    opacity: 0.05;\n}\n.window-mask {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    filter: alpha(opacity=40);\n    opacity: 0.40;\n    font-size: 1px;\n    overflow: hidden;\n}\n.window,\n.window-shadow {\n    position: absolute;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.window-shadow {\n    background: #ccc;\n    -moz-box-shadow: 2px 2px 3px #cccccc;\n    -webkit-box-shadow: 2px 2px 3px #cccccc;\n    box-shadow: 2px 2px 3px #cccccc;\n    filter: none;\n}\n.window,\n.window .window-body {\n    border-color: #D3D3D3;\n}\n.window {\n    background-color: #f3f3f3;\n    background: #f3f3f3;\n    background-repeat: repeat-x;\n    filter: none;\n}\n.window-proxy {\n    border: 1px dashed #D3D3D3;\n}\n.window-proxy-mask,\n.window-mask {\n    background: #ccc;\n}\n.window .panel-footer {\n    border: 1px solid #D3D3D3;\n    position: relative;\n    top: -1px;\n}\n.window-thinborder {\n    padding: 0;\n}\n.window-thinborder .window-header {\n    padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n    border-width: 0px;\n}\n.window-thinborder .window-footer {\n    border-left: transparent;\n    border-right: transparent;\n    border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n    margin-top: -9px;\n    margin-left: 5px;\n    margin-right: 5px;\n}\n.window-noborder {\n    border: 0;\n}\n.window.panel-hleft .window-header {\n    padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n    padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n    top: auto;\n    left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n    top: auto;\n    right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n    bottom: 0;\n}\n.window.panel-hleft .window-body {\n    border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n    border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n    top: 1px;\n    margin-top: 0;\n    left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n    top: 1px;\n    margin-top: 0;\n    left: auto;\n    right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n    margin-top: 0;\n    top: auto;\n    bottom: 1px;\n    right: auto;\n    margin-right: 0;\n    left: 50%;\n    margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n    left: auto;\n    right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n    padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n    padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n    left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n    bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n    margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n    left: 16px;\n    bottom: 5px;\n}\n.dialog-content {\n    overflow: auto;\n}\n.dialog-toolbar {\n    position: relative;\n    padding: 2px 5px;\n}\n.dialog-tool-separator {\n    float: left;\n    height: 24px;\n    border-left: 1px solid #ccc;\n    border-right: 1px solid #fff;\n    margin: 2px 1px;\n}\n.dialog-button {\n    position: relative;\n    top: -1px;\n    padding: 5px;\n    text-align: right;\n}\n.dialog-button .l-btn {\n    margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n    background: #fafafa;\n    border-width: 1px;\n    border-style: solid;\n}\n.dialog-toolbar {\n    border-color: #D3D3D3 #D3D3D3 #ddd #D3D3D3;\n}\n.dialog-button {\n    border-color: #ddd #D3D3D3 #D3D3D3 #D3D3D3;\n}\n.window-thinborder .dialog-toolbar {\n    border-left: transparent;\n    border-right: transparent;\n    border-top-color: #fafafa;\n}\n.window-thinborder .dialog-button {\n    top: 0px;\n    padding: 5px 8px 8px 8px;\n    border-left: transparent;\n    border-right: transparent;\n    border-bottom: transparent;\n}\n.l-btn {\n    text-decoration: none;\n    display: inline-block;\n    overflow: hidden;\n    margin: 0;\n    padding: 0;\n    cursor: pointer;\n    outline: none;\n    text-align: center;\n    vertical-align: middle;\n    line-height: normal;\n}\n.l-btn-plain {\n    border-width: 0;\n    padding: 1px;\n}\n.l-btn-left {\n    display: inline-block;\n    position: relative;\n    overflow: hidden;\n    margin: 0;\n    padding: 0;\n    vertical-align: top;\n}\n.l-btn-text {\n    display: inline-block;\n    vertical-align: top;\n    width: auto;\n    line-height: 28px;\n    font-size: 12px;\n    padding: 0;\n    margin: 0 6px;\n}\n.l-btn-icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    line-height: 16px;\n    position: absolute;\n    top: 50%;\n    margin-top: -8px;\n    font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n    display: inline-block;\n    margin: 0;\n    width: 16px;\n    height: 24px;\n    font-size: 1px;\n    vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n    padding: 0 0 0 20px;\n    background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n    padding: 0 20px 0 0;\n    background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n    margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n    left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n    margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n    right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n    margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n    top: 4px;\n    left: 50%;\n    margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n    margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n    top: auto;\n    bottom: 4px;\n    left: 50%;\n    margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n    margin: 0 6px;\n    width: 16px;\n}\n.l-btn-plain:hover {\n    padding: 0;\n}\n.l-btn-focus {\n    outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n    line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n    width: 32px;\n    height: 32px;\n    line-height: 32px;\n    margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n    margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n    margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n    margin-top: 36px;\n    line-height: 24px;\n    min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n    margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n    margin-bottom: 36px;\n    line-height: 24px;\n    min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n    margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n    margin: 0 6px;\n    width: 32px;\n}\n.l-btn {\n    color: #444;\n    background: #fafafa;\n    background-repeat: repeat-x;\n    border: 1px solid #bbb;\n    background-repeat: repeat-x;\n    filter: none;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.l-btn:hover {\n    background: #e2e2e2;\n    color: #000000;\n    border: 1px solid #ccc;\n    filter: none;\n}\n.l-btn-plain {\n    background: transparent;\n    border-width: 0;\n    filter: none;\n}\n.l-btn-outline {\n    border-width: 1px;\n    border-color: #ccc;\n    padding: 0;\n}\n.l-btn-plain:hover {\n    background: #e2e2e2;\n    color: #000000;\n    border: 1px solid #ccc;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n    opacity: 0.5;\n    cursor: default;\n    background: #fafafa;\n    color: #444;\n    background-repeat: repeat-x;\n    filter: none;\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n    filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n    background: transparent;\n    filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n    background: #ddd;\n    filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n    background: #ddd;\n}\n.textbox {\n    position: relative;\n    border: 1px solid #D3D3D3;\n    background-color: #fff;\n    vertical-align: middle;\n    display: inline-block;\n    overflow: hidden;\n    white-space: nowrap;\n    margin: 0;\n    padding: 0;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.textbox .textbox-text {\n    font-size: 12px;\n    border: 0;\n    margin: 0;\n    padding: 0 4px;\n    white-space: normal;\n    vertical-align: top;\n    outline-style: none;\n    resize: none;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n    height: 28px;\n    line-height: 28px;\n}\n.textbox textarea.textbox-text {\n    line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n    display: none;\n}\n.textbox textarea.textbox-text {\n    white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n    font-size: 12px;\n    color: #aaa;\n}\n.textbox .textbox-bgicon {\n    background-position: 3px center;\n    padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n    position: absolute;\n    top: 0;\n    padding: 0;\n    vertical-align: top;\n    -moz-border-radius: 0 0 0 0;\n    -webkit-border-radius: 0 0 0 0;\n    border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n    right: 0;\n    border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n    left: 0;\n    border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n    left: 0;\n    border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n    top: auto;\n    bottom: 0;\n    left: 0;\n    border-width: 1px 0 0 0;\n}\n.textbox-addon {\n    position: absolute;\n    top: 0;\n}\n.textbox-label {\n    display: inline-block;\n    width: 80px;\n    height: 30px;\n    line-height: 30px;\n    vertical-align: middle;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    margin: 0;\n    padding-right: 5px;\n}\n.textbox-label-after {\n    padding-left: 5px;\n    padding-right: 0;\n}\n.textbox-label-top {\n    display: block;\n    width: auto;\n    padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n.textbox-icon {\n    display: inline-block;\n    width: 18px;\n    height: 20px;\n    overflow: hidden;\n    vertical-align: top;\n    background-position: center center;\n    cursor: pointer;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n    text-decoration: none;\n    outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n    cursor: default;\n}\n.textbox-icon:hover {\n    opacity: 1.0;\n    filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n.textbox-focused {\n    border-color: #bababa;\n    -moz-box-shadow: 0 0 3px 0 #D3D3D3;\n    -webkit-box-shadow: 0 0 3px 0 #D3D3D3;\n    box-shadow: 0 0 3px 0 #D3D3D3;\n}\n.textbox-invalid {\n    border-color: #ffa8a8;\n    background-color: #fff3f3;\n}\n.form-floating-label.form-field .textbox-text {\n    padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n    position: relative;\n    height: 20px;\n    line-height: 20px;\n    transition: all .3s;\n    font-size: 12px;\n    z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n    cursor: text;\n    font-size: 14px;\n    transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n    cursor: default;\n    font-size: 12px;\n    transform: translate(0,0);\n}\n.passwordbox-open {\n    background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n    background: url('images/passwordbox_close.png') no-repeat center center;\n}\n.filebox .textbox-value {\n    vertical-align: top;\n    position: absolute;\n    top: 0;\n    left: -5000px;\n}\n.filebox-label {\n    display: inline-block;\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    cursor: pointer;\n    left: 0;\n    top: 0;\n    z-index: 10;\n    background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n    cursor: default;\n}\n.combo-arrow {\n    width: 18px;\n    height: 20px;\n    overflow: hidden;\n    display: inline-block;\n    vertical-align: top;\n    cursor: pointer;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n    opacity: 1.0;\n    filter: alpha(opacity=100);\n}\n.combo-panel {\n    overflow: auto;\n}\n.combo-arrow {\n    /*background: url('images/combo_arrow.png') no-repeat center center;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 5px;\n    color: #444444;\n}\n.combo-arrow:before {\n    content: \"\\e677\";\n}\n.combo-panel {\n    background-color: #ffffff;\n}\n.combo-arrow {\n    background-color: #f3f3f3;\n}\n.combo-arrow-hover {\n    background-color: #e2e2e2;\n}\n.combo-arrow:hover {\n    background-color: #e2e2e2;\n}\n.combo .textbox-icon-disabled:hover {\n    cursor: default;\n}\n.combobox-item,\n.combobox-group,\n.combobox-stick {\n    font-size: 14px;\n    padding: 6px 4px;\n    line-height: 20px;\n}\n.combobox-item-disabled {\n    opacity: 0.5;\n    filter: alpha(opacity=50);\n}\n.combobox-gitem {\n    padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n    font-weight: bold;\n}\n.combobox-stick {\n    position: absolute;\n    top: 1px;\n    left: 1px;\n    right: 1px;\n    background: inherit;\n}\n.combobox-item-hover {\n    background-color: #e2e2e2;\n    color: #000000;\n}\n.combobox-item-selected {\n    background-color: #0092DC;\n    color: #fff;\n}\n.combobox-icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    vertical-align: middle;\n    margin-right: 2px;\n}\n.tagbox {\n    cursor: text;\n}\n.tagbox .textbox-text {\n    float: left;\n}\n.tagbox-label {\n    position: relative;\n    display: block;\n    margin: 4px 0 0 4px;\n    padding: 0 20px 0 4px;\n    float: left;\n    vertical-align: top;\n    text-decoration: none;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n    background: #e2e2e2;\n    color: #000000;\n}\n.tagbox-remove {\n    background: url('images/tagbox_icons.png') no-repeat -16px center;\n    position: absolute;\n    display: block;\n    width: 16px;\n    height: 16px;\n    right: 2px;\n    top: 50%;\n    margin-top: -8px;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n    opacity: 1;\n    filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n    cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n    cursor: default;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n.layout {\n    position: relative;\n    overflow: hidden;\n    margin: 0;\n    padding: 0;\n    z-index: 0;\n}\n.layout-panel {\n    position: absolute;\n    overflow: hidden;\n}\n.layout-body {\n    min-width: 1px;\n    min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n    z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n    z-index: 3;\n}\n.layout-expand {\n    position: absolute;\n    padding: 0px;\n    font-size: 1px;\n    cursor: pointer;\n    z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n    background: transparent;\n    filter: none;\n    overflow: hidden;\n}\n.layout-expand .panel-header {\n    border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n    position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n    margin-top: 0;\n    top: 0;\n    left: 50%;\n    margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n    display: none;\n}\n.layout-expand-title {\n    position: absolute;\n    top: 0;\n    left: 21px;\n    white-space: nowrap;\n    word-wrap: normal;\n    -webkit-transform: rotate(90deg);\n    -webkit-transform-origin: 0 0;\n    -moz-transform: rotate(90deg);\n    -moz-transform-origin: 0 0;\n    -o-transform: rotate(90deg);\n    -o-transform-origin: 0 0;\n    transform: rotate(90deg);\n    transform-origin: 0 0;\n}\n.layout-expand-title-up {\n    position: absolute;\n    top: 0;\n    left: 0;\n    text-align: right;\n    padding-left: 5px;\n    white-space: nowrap;\n    word-wrap: normal;\n    -webkit-transform: rotate(-90deg);\n    -webkit-transform-origin: 0 0;\n    -moz-transform: rotate(-90deg);\n    -moz-transform-origin: 0 0;\n    -o-transform: rotate(-90deg);\n    -o-transform-origin: 0 0;\n    transform: rotate(-90deg);\n    transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n    top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n    top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n    top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n    position: absolute;\n    font-size: 1px;\n    display: none;\n    z-index: 5;\n}\n.layout-split-proxy-h {\n    width: 5px;\n    cursor: e-resize;\n}\n.layout-split-proxy-v {\n    height: 5px;\n    cursor: n-resize;\n}\n.layout-mask {\n    position: absolute;\n    background: #fafafa;\n    filter: alpha(opacity=10);\n    opacity: 0.10;\n    z-index: 4;\n}\n.layout-button-up {\n    background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n    background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n    background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n    background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n    background-color: #bfbfbf;\n}\n.layout-split-north {\n    border-bottom: 5px solid #efefef;\n}\n.layout-split-south {\n    border-top: 5px solid #efefef;\n}\n.layout-split-east {\n    border-left: 5px solid #efefef;\n}\n.layout-split-west {\n    border-right: 5px solid #efefef;\n}\n.layout-expand {\n    background-color: #f3f3f3;\n}\n.layout-expand-over {\n    background-color: #f3f3f3;\n}\n.tabs-container {\n    overflow: hidden;\n}\n.tabs-header {\n    border-width: 1px;\n    border-style: solid;\n    border-bottom-width: 0;\n    position: relative;\n    padding: 0;\n    padding-top: 2px;\n    overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n    position: absolute;\n    top: auto;\n    bottom: 0;\n    width: 18px;\n    font-size: 1px;\n    display: none;\n    cursor: pointer;\n    border-width: 1px;\n    border-style: solid;\n}\n.tabs-scroller-left {\n    left: 0;\n}\n.tabs-scroller-right {\n    right: 0;\n}\n.tabs-tool {\n    position: absolute;\n    bottom: 0;\n    padding: 1px;\n    overflow: hidden;\n    border-width: 1px;\n    border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n    padding: 0 1px;\n}\n.tabs-wrap {\n    position: relative;\n    left: 0;\n    overflow: hidden;\n    width: 100%;\n    margin: 0;\n    padding: 0;\n}\n.tabs-scrolling {\n    margin-left: 18px;\n    margin-right: 18px;\n}\n.tabs-disabled {\n    opacity: 0.3;\n    filter: alpha(opacity=30);\n}\n.tabs {\n    list-style-type: none;\n    height: 26px;\n    margin: 0px;\n    padding: 0px;\n    padding-left: 4px;\n    width: 50000px;\n    border-style: solid;\n    border-width: 0 0 1px 0;\n}\n.tabs li {\n    float: left;\n    display: inline-block;\n    margin: 0 4px -1px 0;\n    padding: 0;\n    position: relative;\n    border: 0;\n}\n.tabs li .tabs-inner {\n    display: inline-block;\n    text-decoration: none;\n    cursor: hand;\n    cursor: pointer;\n    margin: 0;\n    padding: 0 10px;\n    height: 25px;\n    line-height: 25px;\n    text-align: center;\n    white-space: nowrap;\n    border-width: 1px;\n    border-style: solid;\n    -moz-border-radius: 5px 5px 0 0;\n    -webkit-border-radius: 5px 5px 0 0;\n    border-radius: 5px 5px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n    font-weight: bold;\n    outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n    cursor: default;\n    pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n    position: absolute;\n    font-size: 1px;\n    display: block;\n    height: 12px;\n    padding: 0;\n    top: 50%;\n    margin-top: -6px;\n    overflow: hidden;\n}\n.tabs li a.tabs-close {\n    width: 12px;\n    right: 5px;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n    right: 16px;\n}\n.tabs-p-tool a {\n    display: inline-block;\n    font-size: 1px;\n    width: 12px;\n    height: 12px;\n    margin: 0;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n    opacity: 1;\n    filter: alpha(opacity=100);\n    cursor: hand;\n    cursor: pointer;\n}\n.tabs-with-icon {\n    padding-left: 18px;\n}\n.tabs-icon {\n    position: absolute;\n    width: 16px;\n    height: 16px;\n    left: 10px;\n    top: 50%;\n    margin-top: -8px;\n}\n.tabs-title {\n    font-size: 14px;\n}\n.tabs-closable {\n    padding-right: 8px;\n}\n.tabs-panels {\n    margin: 0px;\n    padding: 0px;\n    border-width: 1px;\n    border-style: solid;\n    border-top-width: 0;\n    overflow: hidden;\n}\n.tabs-header-bottom {\n    border-width: 0 1px 1px 1px;\n    padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n    border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n    margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n    -moz-border-radius: 0 0 5px 5px;\n    -webkit-border-radius: 0 0 5px 5px;\n    border-radius: 0 0 5px 5px;\n}\n.tabs-header-bottom .tabs-tool {\n    top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n    top: 0;\n    bottom: auto;\n}\n.tabs-panels-top {\n    border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n    float: left;\n    border-width: 1px 0 1px 1px;\n    padding: 0;\n}\n.tabs-header-right {\n    float: right;\n    border-width: 1px 1px 1px 0;\n    padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n    height: 100%;\n}\n.tabs-header-left .tabs {\n    height: 100%;\n    padding: 4px 0 0 2px;\n    border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n    height: 100%;\n    padding: 4px 2px 0 0;\n    border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n    display: block;\n    width: 100%;\n    position: relative;\n}\n.tabs-header-left .tabs li {\n    left: auto;\n    right: 0;\n    margin: 0 -1px 4px 0;\n    float: right;\n}\n.tabs-header-right .tabs li {\n    left: 0;\n    right: auto;\n    margin: 0 0 4px -1px;\n    float: left;\n}\n.tabs-justified li .tabs-inner {\n    padding-left: 0;\n    padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n    display: block;\n    text-align: left;\n    padding-left: 10px;\n    padding-right: 10px;\n    -moz-border-radius: 5px 0 0 5px;\n    -webkit-border-radius: 5px 0 0 5px;\n    border-radius: 5px 0 0 5px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n    display: block;\n    text-align: left;\n    padding-left: 10px;\n    padding-right: 10px;\n    -moz-border-radius: 0 5px 5px 0;\n    -webkit-border-radius: 0 5px 5px 0;\n    border-radius: 0 5px 5px 0;\n}\n.tabs-panels-right {\n    float: right;\n    border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n    float: left;\n    border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n    border: 0px;\n}\n.tabs-header-plain {\n    border: 0px;\n    background: transparent;\n}\n.tabs-pill {\n    padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n    padding-top: 3px;\n    padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n    padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n    padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n    padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n    margin-left: 0;\n    margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n    margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n    padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n    margin-bottom: -1px;\n    margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n    margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n    margin-bottom: -1px;\n    margin-left: -1px;\n}\n.tabs-scroller-left {\n    background: #f3f3f3 url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n    background: #f3f3f3 url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n    background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n    background: #e2e2e2;\n    color: #000000;\n    filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n    background-color: #ffffff;\n    color: #575765;\n    background: #ffffff;\n    background-repeat: repeat-x;\n    filter: none;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n    background: -webkit-linear-gradient(top,#ffffff 0,#F8F8F8 100%);\n    background: -moz-linear-gradient(top,#ffffff 0,#F8F8F8 100%);\n    background: -o-linear-gradient(top,#ffffff 0,#F8F8F8 100%);\n    background: linear-gradient(to bottom,#ffffff 0,#F8F8F8 100%);\n    background-repeat: repeat-x;\n    filter: none;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n    background: -webkit-linear-gradient(left,#F8F8F8 0,#ffffff 100%);\n    background: -moz-linear-gradient(left,#F8F8F8 0,#ffffff 100%);\n    background: -o-linear-gradient(left,#F8F8F8 0,#ffffff 100%);\n    background: linear-gradient(to right,#F8F8F8 0,#ffffff 100%);\n    background-repeat: repeat-y;\n    filter: none;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n    background: -webkit-linear-gradient(left,#ffffff 0,#F8F8F8 100%);\n    background: -moz-linear-gradient(left,#ffffff 0,#F8F8F8 100%);\n    background: -o-linear-gradient(left,#ffffff 0,#F8F8F8 100%);\n    background: linear-gradient(to right,#ffffff 0,#F8F8F8 100%);\n    background-repeat: repeat-y;\n    filter: none;\n}\n.tabs li .tabs-inner {\n    color: #575765;\n    background-color: #f3f3f3;\n    background: #f3f3f3;\n    background-repeat: repeat-x;\n    filter: none;\n}\n.tabs-header,\n.tabs-tool {\n    background-color: #f3f3f3;\n}\n.tabs-header-plain {\n    background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n    border-color: #D3D3D3;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n    background-color: #e2e2e2;\n}\n.tabs li.tabs-selected .tabs-inner {\n    border-bottom: 1px solid #ffffff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n    border-top: 1px solid #ffffff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n    border-right: 1px solid #ffffff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n    border-left: 1px solid #ffffff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n    background: #0092DC;\n    color: #fff;\n    filter: none;\n    border-color: #D3D3D3;\n}\n.datagrid .panel-body {\n    overflow: hidden;\n    position: relative;\n}\n.datagrid-view {\n    position: relative;\n    overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n    position: absolute;\n    overflow: hidden;\n    top: 0;\n}\n.datagrid-view1 {\n    left: 0;\n}\n.datagrid-view2 {\n    right: 0;\n}\n.datagrid-mask {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    opacity: 0.3;\n    filter: alpha(opacity=30);\n    display: none;\n}\n.datagrid-mask-msg {\n    position: absolute;\n    top: 50%;\n    margin-top: -20px;\n    padding: 10px 5px 10px 30px;\n    width: auto;\n    height: 16px;\n    border-width: 2px;\n    border-style: solid;\n    display: none;\n}\n.datagrid-empty {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 25px;\n    line-height: 25px;\n    text-align: center;\n}\n.datagrid-sort-icon {\n    padding: 0;\n    display: none;\n}\n.datagrid-toolbar {\n    height: auto;\n    padding: 1px 2px;\n    border-width: 0 0 1px 0;\n    border-style: solid;\n}\n.datagrid-btn-separator {\n    float: left;\n    height: 24px;\n    border-left: 1px solid #ccc;\n    border-right: 1px solid #fff;\n    margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n    display: block;\n    margin: 0;\n    border-width: 1px 0 0 0;\n    border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n    border-width: 0 0 1px 0;\n}\n.datagrid-header {\n    overflow: hidden;\n    cursor: default;\n    border-width: 0 0 1px 0;\n    border-style: solid;\n}\n.datagrid-header-inner {\n    float: left;\n    width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n    height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n    border-width: 0 1px 1px 0;\n    border-style: dotted;\n    margin: 0;\n    padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n    margin: 0;\n    padding: 0 4px;\n    white-space: nowrap;\n    word-wrap: normal;\n    overflow: hidden;\n    height: 18px;\n    line-height: 18px;\n    font-size: 12px;\n}\n.datagrid-header .datagrid-cell {\n    height: auto;\n}\n.datagrid-header .datagrid-cell span {\n    font-size: 12px;\n}\n.datagrid-cell-group {\n    text-align: center;\n    text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n    width: 30px;\n    text-align: center;\n    margin: 0;\n    padding: 0;\n}\n.datagrid-body {\n    margin: 0;\n    padding: 0;\n    overflow: auto;\n    zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n    padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n    overflow: hidden;\n}\n.datagrid-footer {\n    overflow: hidden;\n}\n.datagrid-footer-inner {\n    border-width: 1px 0 0 0;\n    border-style: solid;\n    width: 10000px;\n    float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n    height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n    padding: 0;\n    width: 27px;\n    height: 18px;\n    font-size: 1px;\n    text-align: center;\n    overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n    margin: 0;\n    padding: 0;\n    width: 15px;\n    height: 18px;\n}\n.datagrid-resize-proxy {\n    position: absolute;\n    width: 1px;\n    height: 10000px;\n    top: 0;\n    cursor: e-resize;\n    display: none;\n}\n.datagrid-body .datagrid-editable {\n    margin: 0;\n    padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n    width: 100%;\n    height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n    border: 0;\n    margin: 0;\n    padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n    margin: 0;\n    padding: 2px 4px;\n    border: 1px solid #D3D3D3;\n    font-size: 14px;\n    outline-style: none;\n    -moz-border-radius: 0 0 0 0;\n    -webkit-border-radius: 0 0 0 0;\n    border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n    border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n    display: inline;\n    padding: 0 13px 0 0;\n    background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n    display: inline;\n    padding: 0 13px 0 0;\n    background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n    display: inline;\n    padding: 0 13px 0 0;\n    background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n    background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n    background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n    /*background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 12px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 5px;\n    color: #444444;\n}\n\n.datagrid-mask-msg:before {\n    content: \"\\e867\";\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n    background-color: #fafafa;\n    background: #fafafa;\n    background-repeat: repeat-x;\n    filter: none;\n}\n.datagrid-cell-rownumber {\n    color: #000000;\n}\n.datagrid-resize-proxy {\n    background: #bfbfbf;\n}\n.datagrid-mask {\n    background: #ccc;\n}\n.datagrid-mask-msg {\n    border-color: #D3D3D3;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n    background: #fafafa;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n    border-color: #ddd;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n    border-color: #ccc;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n    color: #000000;\n    border-collapse: separate;\n}\n.datagrid-row-alt {\n    background: #fafafa;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n    background: #e2e2e2;\n    color: #000000;\n    cursor: default;\n}\n.datagrid-row-selected {\n    background: #0092DC;\n    color: #fff;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n    -moz-border-radius: 0 0 0 0;\n    -webkit-border-radius: 0 0 0 0;\n    border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n    background: inherit;\n}\n.datagrid-split-proxy {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 1px;\n    height: 100%;\n    border-left: 1px solid #0070a9;\n}\n.datagrid-moving-proxy {\n    border: 1px solid #0070a9;\n    height: 32px;\n    line-height: 32px;\n    padding: 0 4px;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n    padding-bottom: 1px;\n    border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n    overflow: hidden;\n    border-width: 0 0 1px 0;\n    border-style: solid;\n}\n.propertygrid .datagrid-group span {\n    font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n    border-color: #ddd;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n    border-color: #f3f3f3;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n    border-color: #ddd;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n    background: #f3f3f3;\n}\n.datalist .datagrid-header {\n    border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n    height: 25px;\n    line-height: 25px;\n    font-weight: bold;\n    overflow: hidden;\n    background-color: #fafafa;\n    border-style: solid;\n    border-width: 0 0 1px 0;\n    border-color: #ccc;\n}\n.datalist .datagrid-group-expander {\n    display: none;\n}\n.datalist .datagrid-group-title {\n    padding: 0 4px;\n}\n.datalist .datagrid-btable {\n    width: 100%;\n    table-layout: fixed;\n}\n.datalist .datagrid-row td {\n    border-style: solid;\n    border-left-color: transparent;\n    border-right-color: transparent;\n    border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n    border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n    width: auto;\n    height: auto;\n    padding: 2px 4px;\n    line-height: 18px;\n    position: relative;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n    display: block;\n    position: relative;\n    cursor: pointer;\n    color: #000000;\n    text-decoration: none;\n    overflow: hidden;\n    margin: -2px -4px;\n    padding: 2px 4px;\n    padding-right: 16px;\n    line-height: 18px;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n    position: absolute;\n    display: block;\n    width: 8px;\n    height: 8px;\n    content: '';\n    right: 6px;\n    top: 50%;\n    margin-top: -4px;\n    border-style: solid;\n    border-width: 1px 1px 0 0;\n    -ms-transform: rotate(45deg);\n    -moz-transform: rotate(45deg);\n    -webkit-transform: rotate(45deg);\n    -o-transform: rotate(45deg);\n    transform: rotate(45deg);\n}\n.m-list {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n}\n.m-list li {\n    border-style: solid;\n    border-width: 0 0 1px 0;\n    border-color: #ccc;\n}\n.m-list li>a:hover {\n    background: #e2e2e2;\n    color: #000000;\n}\n.m-list .m-list-group {\n    padding: 0 4px;\n}\n.pagination {\n    zoom: 1;\n    padding: 2px;\n}\n.pagination table {\n    float: left;\n    height: 30px;\n}\n.pagination td {\n    border: 0;\n}\n.pagination-btn-separator {\n    float: left;\n    height: 24px;\n    border-left: 1px solid #ccc;\n    border-right: 1px solid #fff;\n    margin: 3px 1px;\n}\n.pagination .pagination-num {\n    border-width: 1px;\n    border-style: solid;\n    margin: 0 2px;\n    padding: 2px;\n    width: 3em;\n    height: auto;\n    text-align: center;\n    font-size: 14px;\n}\n.pagination-page-list {\n    margin: 0px 6px;\n    padding: 1px 2px;\n    width: auto;\n    height: auto;\n    border-width: 1px;\n    border-style: solid;\n}\n.pagination-info {\n    float: right;\n    margin: 0 6px;\n    padding: 0;\n    height: 30px;\n    line-height: 30px;\n    font-size: 12px;\n}\n.pagination span {\n    font-size: 12px;\n}\n.pagination-link .l-btn-text {\n    box-sizing: border-box;\n    text-align: center;\n    margin: 0;\n    padding: 0 .5em;\n    width: auto;\n    min-width: 28px;\n}\n.pagination-first {\n    /*background: url('images/pagination_icons.png') no-repeat 0 center;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 12px !important;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0px;\n    color: #444444;\n}\n.pagination-first:before {\n    content: \"\\e879\";\n}\n.pagination-prev {\n    /*background: url('images/pagination_icons.png') no-repeat -16px center;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px !important;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0px;\n    color: #444444;\n}\n.pagination-prev:before {\n    content: \"\\e678\";\n}\n.pagination-next {\n    /*background: url('images/pagination_icons.png') no-repeat -32px center;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px !important;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0px;\n    color: #444444;\n}\n.pagination-next:before {\n    content: \"\\e67b\";\n}\n\n.pagination-last {\n    /*background: url('images/pagination_icons.png') no-repeat -48px center;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 12px !important;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0px;\n    color: #444444;\n}\n.pagination-last:before {\n    content: \"\\e875\";\n}\n.pagination-load {\n    /*background: url('images/pagination_icons.png') no-repeat -64px center;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 12px !important;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0px;\n    color: #444444;\n}\n.pagination-load:before {\n    content: \"\\e81a\";\n}\n.pagination-loading {\n    /*background: url('images/loading.gif') no-repeat center center;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 12px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0px;\n    color: #444444;\n}\n\n.pagination-loading:before {\n    content: \"\\e867\";\n}\n.pagination-page-list,\n.pagination .pagination-num {\n    border-color: #D3D3D3;\n}\n.calendar {\n    border-width: 1px;\n    border-style: solid;\n    padding: 1px;\n    overflow: hidden;\n}\n.calendar table {\n    table-layout: fixed;\n    border-collapse: separate;\n    font-size: 14px;\n    width: 100%;\n    height: 100%;\n}\n.calendar table td,\n.calendar table th {\n    font-size: 14px;\n}\n.calendar-noborder {\n    border: 0;\n}\n.calendar-header {\n    position: relative;\n    height: 36px;\n}\n.calendar-title {\n    text-align: center;\n    height: 36px;\n    line-height: 36px;\n}\n.calendar-title span {\n    position: relative;\n    display: inline-block;\n    top: 0px;\n    padding: 0 3px;\n    height: 28px;\n    line-height: 28px;\n    font-size: 14px;\n    cursor: pointer;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n    position: absolute;\n    top: 50%;\n    margin-top: -8px;\n    width: 16px;\n    height: 16px;\n    cursor: pointer;\n    font-size: 1px;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.calendar-prevmonth {\n    left: 30px;\n    /*background: url('images/calendar_arrows.png') no-repeat -16px 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0;\n    color: #444444;\n}\n.calendar-prevmonth:before {\n    content: \"\\e678\";\n}\n.calendar-nextmonth {\n    right: 30px;\n    /*background: url('images/calendar_arrows.png') no-repeat -32px 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0;\n    color: #444444;\n}\n.calendar-nextmonth:before {\n    content: \"\\e67b\";\n}\n.calendar-prevyear {\n    left: 10px;\n    /*background: url('images/calendar_arrows.png') no-repeat 0px 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 12px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 2px;\n    color: #444444;\n}\n.calendar-prevyear:before {\n    content: \"\\e639\";\n}\n.calendar-nextyear {\n    right: 10px;\n    /*background: url('images/calendar_arrows.png') no-repeat -48px 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 12px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 2px;\n    color: #444444;\n}\n.calendar-nextyear:before {\n    content: \"\\e729\";\n}\n\n.calendar-body {\n    position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n    text-align: center;\n}\n.calendar-day {\n    border: 0;\n    padding: 1px;\n    cursor: pointer;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.calendar-other-month {\n    opacity: 0.3;\n    filter: alpha(opacity=30);\n}\n.calendar-disabled {\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n    cursor: default;\n}\n.calendar-menu {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 180px;\n    height: 150px;\n    padding: 5px;\n    font-size: 14px;\n    display: none;\n    overflow: hidden;\n}\n.calendar-menu-year-inner {\n    text-align: center;\n    padding-bottom: 5px;\n}\n.calendar-menu-year {\n    width: 80px;\n    line-height: 26px;\n    text-align: center;\n    border-width: 1px;\n    border-style: solid;\n    outline-style: none;\n    resize: none;\n    margin: 0;\n    padding: 0;\n    font-weight: bold;\n    font-size: 14px;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n    display: inline-block;\n    width: 25px;\n    height: 28px;\n    vertical-align: top;\n    cursor: pointer;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.calendar-menu-prev {\n    margin-right: 10px;\n    background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n    margin-left: 10px;\n    background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n    text-align: center;\n    cursor: pointer;\n    font-weight: bold;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.calendar-body th,\n.calendar-menu-month {\n    color: #4d4d4d;\n}\n.calendar-day {\n    color: #000000;\n}\n.calendar-sunday {\n    color: #CC2222;\n}\n.calendar-saturday {\n    color: #00ee00;\n}\n.calendar-today {\n    color: #0000ff;\n}\n.calendar-menu-year {\n    border-color: #D3D3D3;\n}\n.calendar {\n    border-color: #D3D3D3;\n}\n.calendar-header {\n    background: #f3f3f3;\n}\n.calendar-body,\n.calendar-menu {\n    background: #ffffff;\n}\n.calendar-body th {\n    background: #fafafa;\n    padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n    background-color: #e2e2e2;\n    color: #000000;\n}\n.calendar-hover {\n    border: 1px solid #ccc;\n    padding: 0;\n}\n.calendar-selected {\n    background-color: #0092DC;\n    color: #fff;\n    border: 1px solid #0070a9;\n    padding: 0;\n}\n.calendar-info {\n    background-color: #f3f3f3;\n    font-size: 28px;\n    height: 70px;\n    padding: 10px 20px;\n}\n.calendar-info .year {\n    font-size: 16px;\n}\n.datebox-calendar-inner {\n    height: 250px;\n}\n.datebox-button {\n    padding: 4px 0;\n    text-align: center;\n}\n.datebox-button a {\n    line-height: 22px;\n    font-size: 14px;\n    font-weight: bold;\n    text-decoration: none;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n    opacity: 1.0;\n    filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n    float: left;\n}\n.datebox-close {\n    float: right;\n}\n.datebox .combo-arrow {\n    background-image: url('images/datebox_arrow.png');\n    background-position: center center;\n}\n.datebox-button {\n    background-color: #fafafa;\n}\n.datebox-button a {\n    color: #444;\n}\n.spinner-arrow {\n    display: inline-block;\n    overflow: hidden;\n    vertical-align: top;\n    margin: 0;\n    padding: 0;\n    opacity: 1.0;\n    filter: alpha(opacity=100);\n    width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n    background-color: #f3f3f3;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n    display: block;\n    font-size: 1px;\n    width: 18px;\n    height: 10px;\n    width: 100%;\n    height: 50%;\n    color: #444;\n    outline-style: none;\n    background-color: #f3f3f3;\n}\n.spinner-button-updown {\n    opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n    position: relative;\n    display: block;\n    width: 100%;\n    height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n    opacity: 1.0;\n    filter: alpha(opacity=100);\n    cursor: pointer;\n    width: 16px;\n    height: 16px;\n    top: 50%;\n    left: 50%;\n    margin-top: -8px;\n    margin-left: -8px;\n    position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n    cursor: pointer;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n    opacity: 1.0;\n    filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n    background-color: transparent;\n}\n.spinner-arrow-hover {\n    background-color: #e2e2e2;\n    opacity: 1.0;\n    filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n    opacity: 1.0;\n    filter: alpha(opacity=100);\n    background-color: #e2e2e2;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n    background-color: #f3f3f3;\n    cursor: default;\n}\n.spinner .textbox-icon-disabled {\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n    background: url('images/spinner_arrows.png') no-repeat 1px center;\n    background-color: #f3f3f3;\n}\n.spinner-arrow-down {\n    background: url('images/spinner_arrows.png') no-repeat -15px center;\n    background-color: #f3f3f3;\n}\n.spinner-button-up {\n    background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n    background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n.progressbar {\n    border-width: 1px;\n    border-style: solid;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n    overflow: hidden;\n    position: relative;\n}\n.progressbar-text {\n    text-align: center;\n    position: absolute;\n}\n.progressbar-value {\n    position: relative;\n    overflow: hidden;\n    width: 0;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.progressbar {\n    border-color: #D3D3D3;\n}\n.progressbar-text {\n    color: #000000;\n    font-size: 12px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n    background-color: #0092DC;\n    color: #fff;\n}\n.searchbox-button {\n    width: 18px;\n    height: 20px;\n    overflow: hidden;\n    display: inline-block;\n    vertical-align: top;\n    cursor: pointer;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n    opacity: 1.0;\n    filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n    border: 0;\n    padding: 0;\n    vertical-align: top;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n    -moz-border-radius: 0 0 0 0;\n    -webkit-border-radius: 0 0 0 0;\n    border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n    border: 0;\n    padding: 0;\n    opacity: 1.0;\n    filter: alpha(opacity=100);\n    -moz-border-radius: 0 0 0 0;\n    -webkit-border-radius: 0 0 0 0;\n    border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n    -moz-border-radius: 0 0 0 0;\n    -webkit-border-radius: 0 0 0 0;\n    border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n    border-width: 0 1px 0 0;\n    -moz-border-radius: 0 0 0 0;\n    -webkit-border-radius: 0 0 0 0;\n    border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n    border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n    border-width: 0 1px 0 0;\n}\n.searchbox-button {\n    background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n    background: #f3f3f3;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n    opacity: 0.5;\n    filter: alpha(opacity=50);\n}\n.slider-disabled {\n    opacity: 0.5;\n    filter: alpha(opacity=50);\n}\n.slider-h {\n    height: 22px;\n}\n.slider-v {\n    width: 22px;\n}\n.slider-inner {\n    position: relative;\n    height: 6px;\n    top: 7px;\n    border-width: 1px;\n    border-style: solid;\n    border-radius: 5px;\n}\n.slider-handle {\n    position: absolute;\n    display: block;\n    outline: none;\n    width: 20px;\n    height: 20px;\n    top: 50%;\n    margin-top: -10px;\n    margin-left: -10px;\n}\n.slider-tip {\n    position: absolute;\n    display: inline-block;\n    line-height: 12px;\n    font-size: 14px;\n    white-space: nowrap;\n    top: -22px;\n}\n.slider-rule {\n    position: relative;\n    top: 15px;\n}\n.slider-rule span {\n    position: absolute;\n    display: inline-block;\n    font-size: 0;\n    height: 5px;\n    border-width: 0 0 0 1px;\n    border-style: solid;\n}\n.slider-rulelabel {\n    position: relative;\n    top: 20px;\n}\n.slider-rulelabel span {\n    position: absolute;\n    display: inline-block;\n    font-size: 14px;\n}\n.slider-v .slider-inner {\n    width: 6px;\n    left: 7px;\n    top: 0;\n    float: left;\n}\n.slider-v .slider-handle {\n    left: 50%;\n    margin-top: -10px;\n}\n.slider-v .slider-tip {\n    left: -10px;\n    margin-top: -6px;\n}\n.slider-v .slider-rule {\n    float: left;\n    top: 0;\n    left: 16px;\n}\n.slider-v .slider-rule span {\n    width: 5px;\n    height: 'auto';\n    border-left: 0;\n    border-width: 1px 0 0 0;\n    border-style: solid;\n}\n.slider-v .slider-rulelabel {\n    float: left;\n    top: 0;\n    left: 23px;\n}\n.slider-handle {\n    background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n    border-color: #D3D3D3;\n    background: #f3f3f3;\n}\n.slider-rule span {\n    border-color: #D3D3D3;\n}\n.slider-rulelabel span {\n    color: #000000;\n}\n.menu {\n    position: absolute;\n    margin: 0;\n    padding: 2px;\n    border-width: 1px;\n    border-style: solid;\n    overflow: hidden;\n}\n.menu-inline {\n    position: relative;\n}\n.menu-item {\n    position: relative;\n    margin: 0;\n    padding: 0;\n    overflow: hidden;\n    white-space: nowrap;\n    cursor: pointer;\n    border-width: 1px;\n    border-style: solid;\n}\n.menu-text {\n    height: 20px;\n    line-height: 20px;\n    float: left;\n    padding-left: 28px;\n}\n.menu-icon {\n    position: absolute;\n    width: 16px;\n    height: 16px;\n    left: 2px;\n    top: 50%;\n    margin-top: -8px;\n}\n.menu-rightarrow {\n    position: absolute;\n    width: 16px;\n    height: 16px;\n    right: 0;\n    top: 50%;\n    margin-top: -8px;\n}\n.menu-line {\n    position: absolute;\n    left: 26px;\n    top: 0;\n    height: 2000px;\n    font-size: 1px;\n}\n.menu-sep {\n    margin: 3px 0px 3px 25px;\n    font-size: 1px;\n}\n.menu-noline .menu-line {\n    display: none;\n}\n.menu-noline .menu-sep {\n    margin-left: 0;\n    margin-right: 0;\n}\n.menu-active {\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.menu-item-disabled {\n    opacity: 0.5;\n    filter: alpha(opacity=50);\n    cursor: default;\n}\n.menu-text,\n.menu-text span {\n    font-size: 14px;\n}\n.menu-shadow {\n    position: absolute;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n    background: #ccc;\n    -moz-box-shadow: 2px 2px 3px #cccccc;\n    -webkit-box-shadow: 2px 2px 3px #cccccc;\n    box-shadow: 2px 2px 3px #cccccc;\n    filter: none;\n}\n.menu-rightarrow {\n    background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n    border-left: 1px solid #ccc;\n    border-right: 1px solid #fff;\n}\n.menu-sep {\n    border-top: 1px solid #ccc;\n    border-bottom: 1px solid #fff;\n}\n.menu {\n    background-color: #f3f3f3;\n    border-color: #D3D3D3;\n    color: #444;\n}\n.menu-content {\n    background: #ffffff;\n}\n.menu-item {\n    border-color: transparent;\n    _border-color: #f3f3f3;\n}\n.menu-active {\n    border-color: #ccc;\n    color: #000000;\n    background: #e2e2e2;\n}\n.menu-active-disabled {\n    border-color: transparent;\n    background: transparent;\n    color: #444;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n    display: inline-block;\n    position: absolute;\n    width: 16px;\n    height: 16px;\n    font-size: 1px;\n    right: 0;\n    top: 50%;\n    margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n    background: #e2e2e2;\n    color: #000000;\n    border: 1px solid #ccc;\n    filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n    background: transparent;\n    padding: 0;\n    border-width: 1px;\n    border-style: solid;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.m-btn .l-btn-left .l-btn-text {\n    margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n    margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n    right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n    margin-right: 4px;\n    margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n    margin-right: 4px;\n    margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n    top: auto;\n    bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n    top: auto;\n    bottom: 0px;\n    left: 50%;\n    margin-left: -8px;\n}\n.m-btn-line {\n    display: inline-block;\n    position: absolute;\n    font-size: 1px;\n    display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n    right: 0;\n    width: 16px;\n    height: 500px;\n    border-style: solid;\n    border-color: #bfbfbf;\n    border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n    left: 0;\n    bottom: 0;\n    width: 500px;\n    height: 16px;\n    border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n    margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n    margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n    background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n    border-color: #ccc;\n    background-color: #e2e2e2;\n    color: #000000;\n}\n.s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n    display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n    border-style: solid;\n    border-color: #bfbfbf;\n    border-width: 0 0 0 1px;\n}\n.messager-body {\n    padding: 10px 10px 30px 10px;\n    overflow: auto;\n}\n.messager-button {\n    text-align: center;\n    padding: 5px;\n}\n.messager-button .l-btn {\n    width: 70px;\n}\n.messager-icon {\n    float: left;\n    width: 32px;\n    height: 32px;\n    margin: 0 10px 10px 0;\n}\n.messager-error {\n    /*background: url('images/messager_icons.png') no-repeat scroll -64px 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 40px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0;\n    color: #B6271F;\n}\n.messager-info {\n    /*background: url('images/messager_icons.png') no-repeat scroll 0 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 40px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0;\n    color: #F3C432;\n}\n.messager-info:before {\n    content: \"\\e780\";\n}\n.messager-question {\n    /*background: url('images/messager_icons.png') no-repeat scroll -32px 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 40px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0;\n    color: #E16F25;\n}\n.messager-question:before {\n    content: \"\\e80e\";\n}\n.messager-warning {\n    /*background: url('images/messager_icons.png') no-repeat scroll -96px 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 40px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0;\n    color: #F4D837;\n}\n.messager-warning:before {\n    content: \"\\e6ee\";\n}\n.messager-progress {\n    padding: 10px;\n}\n.messager-p-msg {\n    margin-bottom: 5px;\n}\n.messager-body .messager-input {\n    width: 100%;\n    padding: 4px 0;\n    outline-style: none;\n    border: 1px solid #D3D3D3;\n}\n.window-thinborder .messager-button {\n    padding-bottom: 8px;\n}\n.tree {\n    margin: 0;\n    padding: 0;\n    list-style-type: none;\n}\n.tree li {\n    white-space: nowrap;\n}\n.tree li ul {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n}\n.tree-node {\n    height: 26px;\n    white-space: nowrap;\n    cursor: pointer;\n}\n.tree-hit {\n    cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n    display: inline-block;\n    width: 16px;\n    height: 18px;\n    margin: 4px 0;\n    vertical-align: middle;\n    overflow: hidden;\n}\n.tree-expanded {\n    /*background: url('images/tree_icons.png') no-repeat -18px 0px;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;\n}\n.tree-expanded:before {\n    content: \"\\e677\";\n}\n.tree-expanded-hover {\n    background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n    /*background: url('images/tree_icons.png') no-repeat 0px 0px;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;\n}\n.tree-collapsed:before {\n    content: \"\\e67b\";\n}\n.tree-collapsed-hover {\n    background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n    background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n    background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n    background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n    background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n    background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n    background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n    background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n    /*background: url('images/tree_icons.png') no-repeat -208px 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0;\n    color: #444444;\n}\n.tree-folder:before {\n    content: \"\\e722\";\n}\n.tree-folder-open {\n    /*background: url('images/tree_icons.png') no-repeat -224px 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0;\n    /*color: #444444;*/\n}\n.tree-folder-open:before {\n    content: \"\\e71f\";\n}\n.tree-file {\n    /*background: url('images/tree_icons.png') no-repeat -240px 0;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0;\n    color: #444444;\n}\n.tree-file:before {\n    content: \"\\e70e\";\n}\n\n.tree-loading {\n    /*background: url('images/loading.gif') no-repeat center center;*/\n    background: none;font-family: \"iconfont\" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none;\n    padding: 0;\n    color: #444444;\n}\n.tree-loading:before {\n    content: \"\\e867\";\n}\n.tree-checkbox0 {\n    background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n    background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n    background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n    font-size: 12px;\n    display: inline-block;\n    text-decoration: none;\n    vertical-align: middle;\n    white-space: nowrap;\n    padding: 0 2px;\n    margin: 4px 0;\n    height: 18px;\n    line-height: 18px;\n}\n.tree-node-proxy {\n    font-size: 14px;\n    line-height: 20px;\n    padding: 0 2px 0 20px;\n    border-width: 1px;\n    border-style: solid;\n    z-index: 9900000;\n}\n.tree-dnd-icon {\n    display: inline-block;\n    position: absolute;\n    width: 16px;\n    height: 18px;\n    left: 2px;\n    top: 50%;\n    margin-top: -9px;\n}\n.tree-dnd-yes {\n    background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n    background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n    border-top: 1px dotted red;\n}\n.tree-node-bottom {\n    border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n    border: 1px dotted red;\n}\n.tree-editor {\n    border: 1px solid #D3D3D3;\n    font-size: 14px;\n    height: 26px;\n    line-height: 26px;\n    padding: 0 4px;\n    margin: 0;\n    width: 80px;\n    outline-style: none;\n    vertical-align: middle;\n    position: absolute;\n    top: 0;\n}\n.tree-node-proxy {\n    background-color: #ffffff;\n    color: #000000;\n    border-color: #D3D3D3;\n}\n.tree-node-hover {\n    background: #e2e2e2;\n    color: #000000;\n}\n.tree-node-selected {\n    background: #0092DC;\n    color: #fff;\n}\n.tree-node-disabled {\n    opacity: 0.5;\n    cursor: default;\n}\n.tree-node-hidden {\n    display: none;\n}\n.inputbox {\n    display: inline-block;\n    vertical-align: middle;\n    overflow: hidden;\n    white-space: nowrap;\n    margin: 0;\n    padding: 0;\n}\n.validatebox-invalid {\n    border-color: #ffa8a8;\n    background-color: #fff3f3;\n    color: #000;\n}\n.tooltip {\n    position: absolute;\n    display: none;\n    z-index: 9900000;\n    outline: none;\n    opacity: 1;\n    filter: alpha(opacity=100);\n    padding: 5px;\n    border-width: 1px;\n    border-style: solid;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.tooltip-content {\n    font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n    position: absolute;\n    width: 0;\n    height: 0;\n    line-height: 0;\n    font-size: 0;\n    border-style: solid;\n    border-width: 6px;\n    border-color: transparent;\n}\n.tooltip-arrow {\n    display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n    left: 0;\n    top: 50%;\n    margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n    left: 0;\n    top: 50%;\n    margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n    right: 0;\n    top: 50%;\n    margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n    right: 0;\n    top: 50%;\n    margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n    bottom: 0;\n    left: 50%;\n    margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n    bottom: 0;\n    left: 50%;\n    margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n    top: 0;\n    left: 50%;\n    margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n    top: 0;\n    left: 50%;\n    margin: -12px 0 0 -6px;\n}\n.tooltip {\n    background-color: #ffffff;\n    border-color: #D3D3D3;\n    color: #000000;\n}\n.tooltip-right .tooltip-arrow-outer {\n    border-right-color: #D3D3D3;\n}\n.tooltip-right .tooltip-arrow {\n    border-right-color: #ffffff;\n}\n.tooltip-left .tooltip-arrow-outer {\n    border-left-color: #D3D3D3;\n}\n.tooltip-left .tooltip-arrow {\n    border-left-color: #ffffff;\n}\n.tooltip-top .tooltip-arrow-outer {\n    border-top-color: #D3D3D3;\n}\n.tooltip-top .tooltip-arrow {\n    border-top-color: #ffffff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n    border-bottom-color: #D3D3D3;\n}\n.tooltip-bottom .tooltip-arrow {\n    border-bottom-color: #ffffff;\n}\n.switchbutton {\n    text-decoration: none;\n    display: inline-block;\n    overflow: hidden;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    cursor: pointer;\n    background: #bbb;\n    border: 1px solid #bbb;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.switchbutton-inner {\n    display: inline-block;\n    overflow: hidden;\n    position: relative;\n    top: -1px;\n    left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n    display: inline-block;\n    text-align: center;\n    height: 100%;\n    float: left;\n    font-size: 14px;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.switchbutton-on {\n    background: #0092DC;\n    color: #fff;\n}\n.switchbutton-off {\n    background-color: #ffffff;\n    color: #000000;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n    -moz-border-radius: 5px 0 0 5px;\n    -webkit-border-radius: 5px 0 0 5px;\n    border-radius: 5px 0 0 5px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n    -moz-border-radius: 0 5px 5px 0;\n    -webkit-border-radius: 0 5px 5px 0;\n    border-radius: 0 5px 5px 0;\n}\n.switchbutton-handle {\n    position: absolute;\n    top: 0;\n    left: 50%;\n    background-color: #ffffff;\n    color: #000000;\n    border: 1px solid #bbb;\n    -moz-box-shadow: 0 0 3px 0 #bbb;\n    -webkit-box-shadow: 0 0 3px 0 #bbb;\n    box-shadow: 0 0 3px 0 #bbb;\n}\n.switchbutton-value {\n    position: absolute;\n    top: 0;\n    left: -5000px;\n}\n.switchbutton-disabled {\n    opacity: 0.5;\n    filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n    cursor: default;\n}\n.switchbutton:focus {\n    -moz-box-shadow: 0 0 3px 0 #bbb;\n    -webkit-box-shadow: 0 0 3px 0 #bbb;\n    box-shadow: 0 0 3px 0 #bbb;\n    outline: none;\n}\n.radiobutton {\n    position: relative;\n    border: 2px solid #0070a9;\n    border-radius: 50%;\n}\n.radiobutton-inner {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    background: #0070a9;\n    border-radius: 50%;\n    transform: scale(.6);\n}\n.radiobutton-disabled {\n    opacity: 0.6;\n}\n.radiobutton-value {\n    position: absolute;\n    overflow: hidden;\n    width: 1px;\n    height: 1px;\n    left: -999px;\n}\n.checkbox {\n    position: relative;\n    border: 2px solid #0070a9;\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n}\n.checkbox-checked {\n    border: 0;\n    background: #0070a9;\n}\n.checkbox-inner {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n}\n.checkbox path {\n    stroke-width: 2px;\n}\n.checkbox-disabled {\n    opacity: 0.6;\n}\n.checkbox-value {\n    position: absolute;\n    overflow: hidden;\n    width: 1px;\n    height: 1px;\n    left: -999px;\n}\n.sidemenu .tree-hit {\n    background-image: none;\n}\n.sidemenu-default-icon {\n    background-image: none;\n    width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n    border-bottom-color: transparent;\n    background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n    color: #575765;\n}\n.sidemenu .accordion-header .panel-title {\n    height: 30px;\n    line-height: 30px;\n    color: #575765;\n}\n.sidemenu .accordion-header:hover {\n    background: #e2e2e2;\n    color: #575765;\n}\n.sidemenu .tree-node-hover {\n    background: #e2e2e2;\n    color: #575765;\n}\n.sidemenu .tree-node-selected {\n    border-right: 2px solid #0070a9;\n    color: #fff;\n    background: #0092DC;\n}\n.sidemenu .tree-node {\n    height: 40px;\n}\n.sidemenu .tree-title {\n    margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n    position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n    display: inline-block;\n    content: '';\n    position: absolute;\n    top: 50%;\n    margin-top: -8px;\n    background: url('images/accordion_arrows.png') no-repeat 0 0;\n    width: 16px;\n    height: 16px;\n    right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n    background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n    left: 50%;\n    margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n    position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n    text-align: center;\n}\n.sidemenu-tooltip {\n    padding: 0;\n    margin: 0 -12px;\n    border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n    margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n    display: none;\n}\n.timepicker-panel .clock-wrap {\n    position: relative;\n}\n.timepicker-panel .clock {\n    position: relative;\n    background: #f3f3f3;\n    color: #575765;\n    border-radius: 50%;\n    position: absolute;\n    left: 50%;\n    top: 50%;\n}\n.timepicker-panel .clock .item {\n    width: 32px;\n    height: 32px;\n    left: 50%;\n    top: 50%;\n    margin-left: -16px;\n    margin-top: -16px;\n    position: absolute;\n    user-select: none;\n    border-radius: 50%;\n    z-index: 9;\n    cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n    background: #0070a9;\n    color: #fff;\n}\n.timepicker-panel .clock .hand {\n    width: 2px;\n    bottom: 50%;\n    left: 50%;\n    margin-left: -1px;\n    top: 20px;\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n    position: absolute;\n    will-change: transform;\n    z-index: 1;\n    background-color: #0070a9;\n}\n.timepicker-panel .clock .hand .drag {\n    top: -16px;\n    left: -15px;\n    width: 4px;\n    height: 4px;\n    border: 14px solid #0070a9;\n    position: absolute;\n    box-sizing: content-box;\n    border-radius: 100%;\n    background-color: #fff;\n}\n.timepicker-panel .clock .center {\n    top: 50%;\n    left: 50%;\n    width: 6px;\n    height: 6px;\n    position: absolute;\n    transform: translate(-50%,-50%);\n    border-radius: 50%;\n    background-color: #0070a9;\n}\n.timepicker-panel .panel-header {\n    height: 70px;\n    border: 0;\n    font-size: 36px;\n    position: relative;\n}\n.timepicker-panel .body {\n    position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n    font-size: 16px;\n    padding-left: 10px;\n    position: absolute;\n    right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n    opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n    cursor: pointer;\n    opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n    opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n    cursor: default;\n    opacity: 1.0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/easyui-plus-1.0.0/themes/color.css",
    "content": ".c1,.c1:hover,.c1>.panel-header{\r\n\tcolor: #fff;\r\n\tborder-color: #3c8b3c;\r\n\tbackground: #4cae4c;\r\n\tbackground: -webkit-linear-gradient(top,#4cae4c 0,#449d44 100%);\r\n\tbackground: -moz-linear-gradient(top,#4cae4c 0,#449d44 100%);\r\n\tbackground: -o-linear-gradient(top,#4cae4c 0,#449d44 100%);\r\n\tbackground: linear-gradient(to bottom,#4cae4c 0,#449d44 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4cae4c,endColorstr=#449d44,GradientType=0);\r\n}\r\na.c1:hover{\r\n\tbackground: #449d44;\r\n\tfilter: none;\r\n}\r\n.c1>.panel-body{\r\n\tborder-color: #3c8b3c;\r\n}\r\n.c1>.dialog-toolbar,.c1>.dialog-button{\r\n\tborder-left-color: #3c8b3c;\r\n\tborder-right-color: #3c8b3c;\r\n}\r\n.c1>.dialog-button{\r\n\tborder-bottom-color: #3c8b3c;\r\n}\r\n.c2,.c2:hover,.c2>.panel-header{\r\n\tcolor: #fff;\r\n\tborder-color: #5f5f5f;\r\n\tbackground: #747474;\r\n\tbackground: -webkit-linear-gradient(top,#747474 0,#676767 100%);\r\n\tbackground: -moz-linear-gradient(top,#747474 0,#676767 100%);\r\n\tbackground: -o-linear-gradient(top,#747474 0,#676767 100%);\r\n\tbackground: linear-gradient(to bottom,#747474 0,#676767 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#747474,endColorstr=#676767,GradientType=0);\r\n}\r\na.c2:hover{\r\n\tbackground: #676767;\r\n\tfilter: none;\r\n}\r\n.c2>.panel-body{\r\n\tborder-color: #5f5f5f;\r\n}\r\n.c2>.dialog-toolbar,.c2>.dialog-button{\r\n\tborder-left-color: #5f5f5f;\r\n\tborder-right-color: #5f5f5f;\r\n}\r\n.c2>.dialog-button{\r\n\tborder-bottom-color: #5f5f5f;\r\n}\r\n.c3,.c3:hover,.c3>.panel-header{\r\n\tcolor: #333;\r\n\tborder-color: #ff8080;\r\n\tbackground: #ffb3b3;\r\n\tbackground: -webkit-linear-gradient(top,#ffb3b3 0,#ff9999 100%);\r\n\tbackground: -moz-linear-gradient(top,#ffb3b3 0,#ff9999 100%);\r\n\tbackground: -o-linear-gradient(top,#ffb3b3 0,#ff9999 100%);\r\n\tbackground: linear-gradient(to bottom,#ffb3b3 0,#ff9999 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffb3b3,endColorstr=#ff9999,GradientType=0);\r\n}\r\na.c3:hover{\r\n\tbackground: #ff9999;\r\n\tfilter: none;\r\n}\r\n.c3>.panel-body{\r\n\tborder-color: #ff8080;\r\n}\r\n.c3>.dialog-toolbar,.c3>.dialog-button{\r\n\tborder-left-color: #ff8080;\r\n\tborder-right-color: #ff8080;\r\n}\r\n.c3>.dialog-button{\r\n\tborder-bottom-color: #ff8080;\r\n}\r\n.c4,.c4:hover,.c4>.panel-header{\r\n\tcolor: #333;\r\n\tborder-color: #52d689;\r\n\tbackground: #b8eecf;\r\n\tbackground: -webkit-linear-gradient(top,#b8eecf 0,#a4e9c1 100%);\r\n\tbackground: -moz-linear-gradient(top,#b8eecf 0,#a4e9c1 100%);\r\n\tbackground: -o-linear-gradient(top,#b8eecf 0,#a4e9c1 100%);\r\n\tbackground: linear-gradient(to bottom,#b8eecf 0,#a4e9c1 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#b8eecf,endColorstr=#a4e9c1,GradientType=0);\r\n}\r\na.c4:hover{\r\n\tbackground: #a4e9c1;\r\n\tfilter: none;\r\n}\r\n.c4>.panel-body{\r\n\tborder-color: #52d689;\r\n}\r\n.c4>.dialog-toolbar,.c4>.dialog-button{\r\n\tborder-left-color: #52d689;\r\n\tborder-right-color: #52d689;\r\n}\r\n.c4>.dialog-button{\r\n\tborder-bottom-color: #52d689;\r\n}\r\n.c5,.c5:hover,.c5>.panel-header{\r\n\tcolor: #fff;\r\n\tborder-color: #b52b27;\r\n\tbackground: #d84f4b;\r\n\tbackground: -webkit-linear-gradient(top,#d84f4b 0,#c9302c 100%);\r\n\tbackground: -moz-linear-gradient(top,#d84f4b 0,#c9302c 100%);\r\n\tbackground: -o-linear-gradient(top,#d84f4b 0,#c9302c 100%);\r\n\tbackground: linear-gradient(to bottom,#d84f4b 0,#c9302c 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d84f4b,endColorstr=#c9302c,GradientType=0);\r\n}\r\na.c5:hover{\r\n\tbackground: #c9302c;\r\n\tfilter: none;\r\n}\r\n.c5>.panel-body{\r\n\tborder-color: #b52b27;\r\n}\r\n.c5>.dialog-toolbar,.c5>.dialog-button{\r\n\tborder-left-color: #b52b27;\r\n\tborder-right-color: #b52b27;\r\n}\r\n.c5>.dialog-button{\r\n\tborder-bottom-color: #b52b27;\r\n}\r\n.c6,.c6:hover,.c6>.panel-header{\r\n\tcolor: #fff;\r\n\tborder-color: #1f637b;\r\n\tbackground: #2984a4;\r\n\tbackground: -webkit-linear-gradient(top,#2984a4 0,#24748f 100%);\r\n\tbackground: -moz-linear-gradient(top,#2984a4 0,#24748f 100%);\r\n\tbackground: -o-linear-gradient(top,#2984a4 0,#24748f 100%);\r\n\tbackground: linear-gradient(to bottom,#2984a4 0,#24748f 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#2984a4,endColorstr=#24748f,GradientType=0);\r\n}\r\na.c6:hover{\r\n\tbackground: #24748f;\r\n\tfilter: none;\r\n}\r\n.c6>.panel-body{\r\n\tborder-color: #1f637b;\r\n}\r\n.c6>.dialog-toolbar,.c6>.dialog-button{\r\n\tborder-left-color: #1f637b;\r\n\tborder-right-color: #1f637b;\r\n}\r\n.c6>.dialog-button{\r\n\tborder-bottom-color: #1f637b;\r\n}\r\n.c7,.c7:hover,.c7>.panel-header{\r\n\tcolor: #333;\r\n\tborder-color: #e68900;\r\n\tbackground: #ffab2e;\r\n\tbackground: -webkit-linear-gradient(top,#ffab2e 0,#ff9900 100%);\r\n\tbackground: -moz-linear-gradient(top,#ffab2e 0,#ff9900 100%);\r\n\tbackground: -o-linear-gradient(top,#ffab2e 0,#ff9900 100%);\r\n\tbackground: linear-gradient(to bottom,#ffab2e 0,#ff9900 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffab2e,endColorstr=#ff9900,GradientType=0);\r\n}\r\na.c7:hover{\r\n\tbackground: #ff9900;\r\n\tfilter: none;\r\n}\r\n.c7>.panel-body{\r\n\tborder-color: #e68900;\r\n}\r\n.c7>.dialog-toolbar,.c7>.dialog-button{\r\n\tborder-left-color: #e68900;\r\n\tborder-right-color: #e68900;\r\n}\r\n.c7>.dialog-button{\r\n\tborder-bottom-color: #e68900;\r\n}\r\n.c8,.c8:hover,.c8>.panel-header{\r\n\tcolor: #fff;\r\n\tborder-color: #4b72a4;\r\n\tbackground: #698cba;\r\n\tbackground: -webkit-linear-gradient(top,#698cba 0,#577eb2 100%);\r\n\tbackground: -moz-linear-gradient(top,#698cba 0,#577eb2 100%);\r\n\tbackground: -o-linear-gradient(top,#698cba 0,#577eb2 100%);\r\n\tbackground: linear-gradient(to bottom,#698cba 0,#577eb2 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#698cba,endColorstr=#577eb2,GradientType=0);\r\n}\r\na.c8:hover{\r\n\tbackground: #577eb2;\r\n\tfilter: none;\r\n}\r\n.c8>.panel-body{\r\n\tborder-color: #4b72a4;\r\n}\r\n.c8>.dialog-toolbar,.c8>.dialog-button{\r\n\tborder-left-color: #4b72a4;\r\n\tborder-right-color: #4b72a4;\r\n}\r\n.c8>.dialog-button{\r\n\tborder-bottom-color: #4b72a4;\r\n}\r\n.c1>.panel-header>.panel-title,.c2>.panel-header>.panel-title,\r\n.c5>.panel-header>.panel-title,.c6>.panel-header>.panel-title,.c8>.panel-header>.panel-title{\r\n\tcolor: #fff;\r\n}\r\n.c-plain{\r\n\tborder-color: #fff;\r\n\tbackground: #fff;\r\n}\r\n.c-plain>.panel-header,\r\n.c-plain>.panel-body,\r\n.c-plain>.dialog-button,\r\n.c-plain>.dialog-toolbar{\r\n\tborder-color: transparent;\r\n\tbackground: transparent;\r\n}\r\n.c-raised{\r\n\tbox-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\r\n}\r\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/easyui-plus-1.0.0/themes/icon.css",
    "content": ".icon-blank{\r\n\tbackground:url('icons/blank.gif') no-repeat center center;\r\n}\r\n.icon-add{\r\n\tbackground:url('icons/edit_add.png') no-repeat center center;\r\n}\r\n.icon-edit{\r\n\tbackground:url('icons/pencil.png') no-repeat center center;\r\n}\r\n.icon-clear{\r\n\tbackground:url('icons/clear.png') no-repeat center center;\r\n}\r\n.icon-remove{\r\n\tbackground:url('icons/edit_remove.png') no-repeat center center;\r\n}\r\n.icon-save{\r\n\tbackground:url('icons/filesave.png') no-repeat center center;\r\n}\r\n.icon-cut{\r\n\tbackground:url('icons/cut.png') no-repeat center center;\r\n}\r\n.icon-ok{\r\n\tbackground:url('icons/ok.png') no-repeat center center;\r\n}\r\n.icon-no{\r\n\tbackground:url('icons/no.png') no-repeat center center;\r\n}\r\n.icon-cancel{\r\n\tbackground:url('icons/cancel.png') no-repeat center center;\r\n}\r\n.icon-reload{\r\n\tbackground:url('icons/reload.png') no-repeat center center;\r\n}\r\n.icon-search{\r\n\tbackground:url('icons/search.png') no-repeat center center;\r\n}\r\n.icon-print{\r\n\tbackground:url('icons/print.png') no-repeat center center;\r\n}\r\n.icon-help{\r\n\tbackground:url('icons/help.png') no-repeat center center;\r\n}\r\n.icon-undo{\r\n\tbackground:url('icons/undo.png') no-repeat center center;\r\n}\r\n.icon-redo{\r\n\tbackground:url('icons/redo.png') no-repeat center center;\r\n}\r\n.icon-back{\r\n\tbackground:url('icons/back.png') no-repeat center center;\r\n}\r\n.icon-sum{\r\n\tbackground:url('icons/sum.png') no-repeat center center;\r\n}\r\n.icon-tip{\r\n\tbackground:url('icons/tip.png') no-repeat center center;\r\n}\r\n.icon-filter{\r\n\tbackground:url('icons/filter.png') no-repeat center center;\r\n}\r\n.icon-man{\r\n\tbackground:url('icons/man.png') no-repeat center center;\r\n}\r\n.icon-lock{\r\n\tbackground:url('icons/lock.png') no-repeat center center;\r\n}\r\n.icon-more{\r\n\tbackground:url('icons/more.png') no-repeat center center;\r\n}\r\n\r\n\r\n.icon-mini-add{\r\n\tbackground:url('icons/mini_add.png') no-repeat center center;\r\n}\r\n.icon-mini-edit{\r\n\tbackground:url('icons/mini_edit.png') no-repeat center center;\r\n}\r\n.icon-mini-refresh{\r\n\tbackground:url('icons/mini_refresh.png') no-repeat center center;\r\n}\r\n\r\n.icon-large-picture{\r\n\tbackground:url('icons/large_picture.png') no-repeat center center;\r\n}\r\n.icon-large-clipart{\r\n\tbackground:url('icons/large_clipart.png') no-repeat center center;\r\n}\r\n.icon-large-shapes{\r\n\tbackground:url('icons/large_shapes.png') no-repeat center center;\r\n}\r\n.icon-large-smartart{\r\n\tbackground:url('icons/large_smartart.png') no-repeat center center;\r\n}\r\n.icon-large-chart{\r\n\tbackground:url('icons/large_chart.png') no-repeat center center;\r\n}\r\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/easyui-plus-1.0.0/themes/mobile.css",
    "content": "*{\n\tbox-sizing: border-box;\n}\n.m-toolbar{\n\tposition: relative;\n\ttext-align: center;\n\tmin-height: 34px;\n}\n.m-toolbar .m-title{\n\tline-height: 34px;\n\tfont-size: 16px;\n\tfont-weight: bold;\n\ttext-align: center;\n}\n.m-left{\n\tposition: absolute;\n\theight: 100%;\n\tvertical-align: middle;\n\ttop:0;\n\tleft:0;\n\tz-index: 1;\n}\n.m-right{\n\tposition: absolute;\n\theight: 100%;\n\tvertical-align: middle;\n\ttop:0;\n\tright:0;\n\tz-index: 1;\n}\n.m-left>.l-btn,.m-right>.l-btn,\n.m-left>.switchbutton,.m-right>.switchbutton{\n\tposition: relative;\n\tvertical-align: top;\n\ttop: 50%;\n\tmargin-top: -15px;\n}\n.m-back::before,.m-next::after{\n\tdisplay: inline-block;\n\tbox-sizing: border-box;\n\tvertical-align: top;\n\tborder-style: solid;\n\t-webkit-transform:rotate(45deg);\n\ttransform:rotate(45deg);\n\twidth: 12px;\n\theight: 12px;\n\tcontent: '';\n\tposition: absolute;\n\ttop: 50%;\n\tmargin-top: -6px;\n}\n.m-back::before{\n\tborder-width: 0 0 1px 1px;\n\tleft: 8px;\n}\n.m-next::after{\n\tborder-width: 1px 1px 0 0;\n\tright: 8px;\n}\n.m-back .l-btn-text{\n\tpadding-left: 12px;\n}\n.m-next .l-btn-text{\n\tpadding-right: 12px;\n}\n.m-buttongroup{\n\tdisplay: inline-block;\n\tmargin: 0;\n\tpadding: 0;\n\toverflow: hidden;\n\tvertical-align: middle;\n}\n.m-buttongroup .l-btn{\n\tfloat: left;\n\tmargin-left: -1px;\n}\n.m-buttongroup .l-btn:last-child::after{\n\tcontent: '';\n\tclear: both;\n}\n.m-buttongroup .l-btn:not(:first-child):not(:last-child){\n\tborder-radius: 0;\n}\n.m-buttongroup .l-btn:first-child{\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n\tmargin-left: 0;\n}\n.m-buttongroup .l-btn:last-child{\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n}\n.m-buttongroup-justified{\n\tdisplay: table;\n\ttable-layout: fixed;\n}\n.m-buttongroup-justified .l-btn{\n\tfloat: none;\n\tdisplay: table-cell;\n}\n.m-badge:not(.l-btn),\n.l-btn.m-badge::after{\n\tdisplay: inline-block;\n\tmin-width: 10px;\n\tline-height: 1;\n\tfont-size: 12px;\n\ttext-align: center;\n\twhite-space: nowrap;\n\tborder-radius: 10px;\n\tpadding: 2px 4px;\n\tborder-style: solid;\n\tborder-width: 0px;\n\tbackground-color: #d9534f;\n\tcolor: #fff;\n\tz-index: 99999;\n}\n.l-btn.m-badge::after,\n.l-btn .m-badge{\n\tposition: absolute;\n\ttop: -10px;\n\tright: -10px;\n}\n.tabs-inner .m-badge{\n\tposition: absolute;\n\ttop: 1px;\n\tright: -10px;\n}\n.tabs-inner>.tabs-title>.m-badge{\n\ttop: 0;\n\tright: 0;\n}\n.tabs-header-bottom .tabs-inner>.tabs-title>.m-badge{\n\ttop: auto;\n\tbottom: 0;\n\tright: 0;\n}\n.panel-footer .l-btn .l-btn-icon-top .m-badge,\n.panel-footer .l-btn .l-btn-icon-bottom .m-badge{\n\ttop: 0;\n\tright: -10px;\n}\n.l-btn.m-badge::after{\n\tcontent: attr(data-badge);\n}\n.l-btn,.l-btn-left{\n\toverflow: visible;\n\tposition: relative;\n}\n\n.m-in{\n\t-webkit-animation-timing-function: ease-out;\n\t-webkit-animation-duration: 250ms;\n}\n.m-out{\n\t-webkit-animation-timing-function: ease-in;\n\t-webkit-animation-duration: 250ms;\n}\n.m-slide-left.m-in{\n\t-webkit-animation-name: slideLeftIn;\n}\n.m-slide-left.m-out{\n\t-webkit-animation-name: slideLeftOut;\n}\n.m-slide-right.m-in{\n\t-webkit-animation-name: slideRightIn;\n}\n.m-slide-right.m-out{\n\t-webkit-animation-name: slideRightOut;\n}\n.m-slide-up.m-in{\n\t-webkit-animation-name: slideUpIn;\n}\n.m-slide-up.m-out{\n\t-webkit-animation-name: slideUpOut;\n}\n.m-slide-down.m-in{\n\t-webkit-animation-name: slideDownIn;\n}\n.m-slide-down.m-out{\n\t-webkit-animation-name: slideDownOut;\n}\n\n@-webkit-keyframes slideLeftIn{\n\tfrom {-webkit-transform: translateX(100%);}\n\tto {-webkit-transform: translateX(0);}\n}\n@-webkit-keyframes slideLeftOut{\n\tfrom {-webkit-transform: translateX(0);}\n\tto {-webkit-transform: translateX(-100%);}\n}\n@-webkit-keyframes slideRightIn{\n\tfrom {-webkit-transform: translateX(-100%);}\n\tto {-webkit-transform: translateX(0);}\n}\n@-webkit-keyframes slideRightOut{\n\tfrom {-webkit-transform: translateX(0);}\n\tto {-webkit-transform: translateX(100%);}\n}\n@-webkit-keyframes slideUpIn{\n\tfrom {-webkit-transform: translateY(100%);}\n\tto {-webkit-transform: translateY(0);}\n}\n@-webkit-keyframes slideUpOut{\n\tfrom {-webkit-transform: translateY(0);}\n\tto {-webkit-transform: translateY(-100%);}\n}\n@-webkit-keyframes slideDownIn{\n\tfrom {-webkit-transform: translateY(-100%);}\n\tto {-webkit-transform: translateY(0);}\n}\n@-webkit-keyframes slideDownOut{\n\tfrom {-webkit-transform: translateY(0);}\n\tto {-webkit-transform: translateY(100%);}\n}\n\n.m-fade.m-in{\n\t-webkit-animation-name: fadeIn;\n}\n.m-fade.m-out{\n\t-webkit-animation-name: fadeOut;\n}\n\n@-webkit-keyframes fadeIn{\n\tfrom {opacity: 0;}\n\tto {opacity: 1}\n}\n@-webkit-keyframes fadeOut{\n\tfrom {opacity: 1;}\n\tto {opacity: 0;}\n}\n\n.m-pop.m-in{\n\t-webkit-animation-name: popIn;\n}\n.m-pop.m-out{\n\t-webkit-animation-name: popOut;\n}\n@-webkit-keyframes popIn{\n\tfrom {\n\t\topacity: 0;\n\t\t-webkit-transform: scale(.2);\n\t}\n\tto {\n\t\topacity: 1;\n\t\t-webkit-transform: scale(1);\n\t}\n}\n@-webkit-keyframes popOut{\n\tfrom {\n\t\topacity: 1;\n\t\t-webkit-transform: scale(1);\n\t}\n\tto {\n\t\topacity: 0;\n\t\t-webkit-transform: scale(0);\n\t}\n}\n\n.navpanel{\n\tposition: absolute;\n}\n.textbox .textbox-text{\n\tpadding: 0 4px;\n\theight: 30px;\n\tline-height: 30px;\n}\n.calendar-header,.calendar-title{\n\theight: 30px;\n}\n.calendar-title span{\n\theight: 30px;\n\tline-height: 30px\n}\n.datebox-button{\n\theight: 24px;\n}\n.datebox-button a{\n\tline-height: 24px;\n}\n.tree-node{\n\tbox-sizing: border-box;\n\theight: 32px;\n\tpadding: 3px 0;\n}\n\n.panel-title{\n\theight: 26px;\n\tline-height: 26px;\n}\n.window{\n\tpadding: 5px 0 0 0;\n}\n.window-shadow{\n\t-moz-box-shadow: 0 0 30px 0 #D3D3D3;\n\t-webkit-box-shadow: 0 0 30px 0 #D3D3D3;\n\tbox-shadow: 0 0 30px 0 #D3D3D3;\t\n}\n.window-header .panel-title{\n\theight: 26px;\n\tline-height: 26px;\n\ttext-align: center;\n}\n.window-header .panel-tool{\n\tdisplay: none;\n}\n.window .window-body{\n\tborder: 0;\n}\n.dialog-button{\n\tborder-color: transparent;\n\toverflow: hidden;\n}\n.dialog-button .l-btn{\n\tmargin: 0;\n}\n\n.tabs-justified,\n.tabs-justified .l-btn,\n.tabs-justified li a.tabs-inner,\n.tabs-justified li.tabs-selected a.tabs-inner,\n.tabs-header-bottom .tabs-justified li.tabs-selected a.tabs-inner,\n.tabs-header-bottom .tabs-justified li a.tabs-inner{\n\t-moz-border-radius:0;\n\t-webkit-border-radius:0;\n\tborder-radius:0;\n}\n\n.datagrid-row,.datagrid-header-row{\n\theight: 32px;\n}\n.datalist .datagrid-group-title,\n.m-list .m-list-group{\n\tpadding: 0 10px;\n}\n.datalist .datagrid-cell,\n.m-list li{\n\tpadding: 10px;\n}\n.m-list li .m-right{\n\tright: 10px;\n}\n.datalist .datalist-link,\n.m-list li>a{\n\tmargin: -10px;\n\tpadding: 10px;\n\tpadding-right: 24px;\n}\n.m-list li>a .m-right{\n\tright: 24px;\n}\n.datalist .datalist-link::after,\n.m-list li>a::after{\n\tright: 12px;\n}\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/easyui-plus-1.0.0/themes/vue.css",
    "content": "*{\n\tbox-sizing: border-box;\n}\n.f-block{\n\tdisplay: block;\n\tposition: relative;\n}\n.f-row{\n\tdisplay: -webkit-box;\n\tdisplay: -webkit-flex;\n\tdisplay: -moz-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\tposition: relative;\n}\n.f-column{\n\tdisplay: -webkit-box;\n\tdisplay: -webkit-flex;\n\tdisplay: -moz-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-direction: normal;\n\t-webkit-box-orient: vertical;\n\t-webkit-flex-direction: column;\n\t-moz-flex-direction: column;\n\t-ms-flex-direction: column;\n\tflex-direction: column;\n\tposition: relative;\n}\n.f-inline-row{\n\twhite-space: nowrap;\n\tdisplay: -webkit-inline-box;\n\tdisplay: -ms-inline-box;\n\tdisplay: inline-flex;\n\tvertical-align: middle;\n\tposition: relative;\n\talign-items: stretch;\n\t-webkit-tap-highlight-color: transparent;\n}\n.f-content-center{\n\t-webkit-box-pack: center;\n\t-ms-flex-pack: center;\n\t-webkit-justify-content: center;\n\t-moz-justify-content: center;\n\tjustify-content: center;\n\t-webkit-box-align: center;\n\t-ms-flex-align: center;\n\t-webkit-align-items: center;\n\t-moz-align-items: center;\n\talign-items: center;\n}\n.f-full{\n\t-webkit-box-flex: 1 1 auto;\n\t-ms-flex: 1 1 auto;\n\tflex: 1 1 auto;\n}\n.f-hide{\n\tdisplay: none;\n}\n.f-order0{\n\torder: 0;\n}\n.f-order1{\n\torder: 1;\n}\n.f-order2{\n\torder: 2;\n}\n.f-order3{\n\torder: 3;\n}\n.f-order4{\n\torder: 4;\n}\n.f-order5{\n\torder: 5;\n}\n.f-order6{\n\torder: 6;\n}\n.f-order7{\n\torder: 7;\n}\n.f-order8{\n\torder: 8;\n}\n.f-noshrink{\n\t-webkit-flex-shrink: 0;\n\t-moz-flex-shrink: 0;\n\t-ms-flex-negative: 0;\n\tflex-shrink: 0;\n}\n.f-animate{\n    transition: all .3s;\n}\n.f-field{\n\twidth: 12em;\n\theight: 30px;\n}\n\n.scroll-body{\n\toverflow: auto;\n\tposition: relative;\n}\n\n.textbox .textbox-text{\n\twidth: 100%;\n\theight: auto;\n\toverflow: hidden;\n}\n.textbox-addon{\n\talign-items: center;\n}\n.textbox textarea.textbox-text{\n\theight: auto;\n\toverflow: auto;\n}\n.textbox-disabled>.textbox-addon .textbox-icon,\n.textbox-readonly>.textbox-addon .textbox-icon{\n\tcursor: default;\n}\n.textbox-disabled>.textbox-addon .textbox-icon:hover,\n.textbox-readonly>.textbox-addon .textbox-icon:hover{\n\topacity: 0.6;\n\tcursor: default;\n}\n.textbox-addon .textbox-icon{\n\twidth: 26px;\n\theight: 18px;\n}\n\n.spinner .textbox-text{\n\theight: auto;\n}\n.spinner-button-left,.spinner-button-right{\n\twidth: 26px;\n}\n.spinner-button-updown{\n\twidth: 26px;\n}\n.spinner-button-top,.spinner-button-bottom{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 26px;\n}\n.spinner-button-top{\n\ttop: 0;\n}\n.spinner-button-bottom{\n\ttop: auto;\n\tbottom: 0;\n}\n.spinner-button{\n\tdisplay: inline-block;\n\tposition: absolute;\n\twidth: 16px;\n\theight: 16px;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.spinner-arrow{\n\tcursor: pointer;\n\topacity: 0.6;\n}\n\n.textbox-disabled .spinner-arrow:hover,\n.textbox-readonly .spinner-arrow:hover\n{\n\topacity: 0.6;\n\tcursor: default;\n}\n.textbox-readonly .spinner-arrow .spinner-arrow-up:hover,\n.textbox-disabled .spinner-arrow .spinner-arrow-up:hover,\n.textbox-readonly .spinner-arrow .spinner-arrow-down:hover,\n.textbox-disabled .spinner-arrow .spinner-arrow-down:hover\n{\n\tcursor: default;\n}\n\n.l-btn{\n\twidth1: 100%;\n}\n.l-btn-empty{\n\theight: 28px;\n}\n.l-btn-large .l-btn-empty{\n\theight: 44px;\n}\n.l-btn-left{\n\toverflow: visible;\n}\n.m-btn .l-btn-left .m-btn-line{\n\ttop: -100px;\n\twidth: 36px;\n\tright: -20px;\n}\n.button-group .l-btn.f-inline-row{\n\tmargin-left: -1px;\n}\n.button-group .l-btn:hover{\n\tz-index: 99;\n}\n.button-group .l-btn:not(:first-child):not(:last-child){\n\tborder-radius: 0;\n}\n.button-group .l-btn:first-child{\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n.button-group .l-btn:last-child{\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n}\n\n.switchbutton{\n\twidth: 70px;\n\theight: 30px;\n}\n.switchbutton-on,.switchbutton-off{\n\tposition: absolute;\n\tleft: 0;\n\twidth: calc(100% - 15px);\n\theight: 100%;\n}\n.switchbutton-on span,.switchbutton-off span,.switchbutton-handle span{\n\theight: 100%;\n}\n.switchbutton-on span{\n\ttext-indent: -15px;\n}\n.switchbutton-off span{\n\ttext-indent: 15px;\n}\n.switchbutton-off{\n\tleft: calc(100% - 15px);\n}\n.switchbutton-handle{\n\twidth: 30px;\n\tleft: auto;\n\tright: 0;\n\tz-index: 9;\n}\n.switchbutton-inner{\n\ttransition: all 200ms ease-out;\n\toverflow: visible;\n\tposition: absolute;\n\twidth: 100%;\n\ttop: -1px;\n\tbottom: -1px;\n\tleft: calc(-100% + 30px);\n\tright: auto;\n}\n.switchbutton-checked .switchbutton-inner{\n\tleft: 0;\n}\n.draggable-reverting{\n\ttransition: all 200ms ease-out;\n}\n.slider-h .slider-tip{\n\ttransform: translateX(-50%);\n}\n.slider-h .slider-rulelabel span{\n\ttransform: translateX(-50%);\n}\n.slider-v .slider-tip{\n\tmargin-top: 0;\n\ttransform: translate(-100%,-50%);\n}\n.slider-v .slider-rulelabel span{\n\ttransform: translateY(-50%);\n}\n.slider-v .slider-inner{\n\theight: auto;\n}\n\n\n.panel{\n\tposition:relative;\n}\n.panel-title{\n\theight: 20px;\n\tline-height: 20px;\n}\n.panel-footer-fixed{\n\tposition:absolute;\n\twidth:100%;\n\tbottom:0;\n}\n.window{\n\tposition: absolute;\n}\n.window-mask{\n\tposition: fixed;\n}\n.window .window-footer{\n\ttop: 0;\n}\n.dialog-toolbar{\n\tborder-width: 0 0 1px 0;\n}\n.dialog-button{\n\tborder-width: 1px 0 0 0;\n\ttop: 0;\n}\n\n.tabs{\n\twidth: 100%;\n\theight: auto;\n}\n.tabs-scrollable{\n\ttransition: left 400ms, right 400ms;\n\tposition: absolute;\n\twidth: auto;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.tabs li{\n\tdisplay: inherit;\n}\n.tabs li a.tabs-inner{\n\theight: auto;\n\tline-height: normal;\n\tdisplay: inherit;\n\toverflow: hidden;\n}\n.tabs-title{\n\tdisplay: inherit;\n\talign-items: center;\n\tline-height: normal;\n}\n.tabs-close{\n\toutline: none;\n}\n.tabs-scroller-left,.tabs-scroller-right{\n\tposition: relative;\n\tdisplay: block;\n\twidth: 21px;\n\theight: 100%;\n}\n.tabs-header-left .tabs li{\n\tright: -1px;\n}\n.tabs-header-left .tabs li,.tabs-header-right .tabs li,\n.tabs-header-left .tabs li a.tabs-inner,\n.tabs-header-right .tabs li a.tabs-inner{\n\tdisplay: inherit;\n}\n\n.combo-panel{\n\tposition: absolute;\n\theight: 200px;\n\tz-index: 9999;\n}\n.combo-panel .tree,\n.combo-panel eui-datagrid,\n.combo-panel eui-treegrid{\n\twidth: 100%;\n\theight: 100%;\n}\n.combobox-item{\n\tpadding: 6px 4px;\n\tline-height: 20px;\n}\n.tagbox-labels{\n\tpadding-bottom: 4px;\n}\n.tagbox-label{\n\theight: 20px;\n\tline-height: 20px;\n}\n.tagbox .textbox-text{\n\twidth: 50px;\n\tmax-width: 100%;\n\tmargin-top: 4px;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n\theight: 20px;\n\tline-height: 20px;\n}\n\n.datagrid,\n.datagrid-view,.datagrid-view1,.datagrid-view2{\n\tposition: relative;\n}\n.datagrid-vbody{\n\toverflow: hidden;\n}\n.datagrid-view3{\n\tmargin-left: -1px;\n}\n.datagrid-view3 .datagrid-body{\n\toverflow: hidden;\n}\n.datagrid-view3 .datagrid-body-inner{\n\tpadding-bottom: 20px;\n}\n.datagrid-view3 .datagrid-header td,\n.datagrid-view3 .datagrid-body td,\n.datagrid-view3 .datagrid-footer td {\n\tborder-width: 0 0 1px 1px;\n}\n.datagrid-htable,.datagrid-btable,.datagrid-ftable{\n\ttable-layout: fixed;\n\twidth: 100%;\n}\n.datagrid-htable{\n\theight: 100%;\n}\n.datagrid-header .datagrid-header,\n.datagrid-footer .datagrid-header{\n\tborder-width: 0 0 0 1px;\n}\n.datagrid-header-inner,.datagrid-footer-inner{\n\toverflow: hidden;\n}\n.datagrid-header-row, .datagrid-row{\n\theight: 32px;\n}\n.datagrid-header td.datagrid-field-td{\n\tborder-bottom: 0;\n}\n.datagrid-cell{\n\ttext-align: left;\n\theight: auto;\n\tfont-size: inherit;\n}\n.datagrid-cell-group{\n\ttext-align: center;\n}\n.datagrid .datagrid-pager{\n\tpadding: 2px 4px;\n\tdisplay: inherit;\n}\n.datagrid-loading{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\tjustify-content: center;\n\talign-items: center;\n}\n.datagrid-mask{\n\tdisplay: block;\n}\n.datagrid-mask-msg{\n\tdisplay: block;\n\tposition: static;\n\tline-height: 36px;\n\theight: 40px;\n\tmargin: 0;\n\tpadding: 0 5px 0 30px;\n\tz-index: 9;\n}\n.datagrid-body .datagrid-td-group{\n\tborder-left-color: transparent;\n\tborder-right-color: transparent;\n}\n.datagrid-group-expander{\n\tcursor: pointer;\n}\n.datagrid-row-expander{\n\tdisplay: inline-block;\n\twidth: 16px;\n\theight: 18px;\n\tcursor: pointer;\n}\n.datagrid-group-title{\n\talign-self: center;\n\tpadding: 0 4px;\n\twhite-space: nowrap;\n\tword-break: normal;\n\tposition: relative;\n}\n.datagrid-editable> .f-field,\n.datagrid-editable> *{\n\twidth: 100%;\n\theight: 31px;\n}\n.datagrid-editable .textbox, .datagrid-editable .textbox-text{\n\tborder-radius: 0;\n}\n.datagrid-filter-row .textbox{\n\tborder-radius: 0;\n}\n.datagrid-filter-c{\n\tpadding: 4px;\n\theight: 38px;\n}\n.datagrid-filter-c> .f-field,\n.datagrid-filter-c> *{\n\theight: 30px;\n}\n.datagrid-filter-c .datagrid-editable-input{\n\twidth: 100%;\n}\n.datagrid-filter-btn{\n\twidth: 30px;\n}\n.datagrid-filter-btn .textbox-icon{\n\twidth: 28px;\n}\n.datagrid-filter-btn .textbox{\n\tbackground-color: transparent;\n}\n.datagrid-filter-btn-left{\n\tmargin-right: 4px;\n}\n.datagrid-filter-btn-right{\n\tmargin-left: 4px;\n}\n\n.menu-inline{\n\tposition: relative;\n\tdisplay: inline;\n\tmargin: 0;\n\tpadding: 0;\n}\n.menu-inline> .menu-container{\n\tposition: relative;\n}\n.menu-container{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tmin-width: 200px;\n}\n.menu{\n\toverflow: visible;\n}\n.menu-shadow{\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.menu-item{\n\toverflow: visible;\n}\n.menu-text{\n\theight: 32px;\n\tline-height: 32px;\n\tfloat: none;\n}\n.menu-line{\n\tz-index: 9999999;\n\theight: 100%;\n}\n.menu-active{\n\tz-index: 99999999;\n}\n\n.progressbar-value{\n\toverflow: visible;\n}\n\n.searchbox .textbox-button,\n.searchbox .textbox-button:hover{\n\tposition: inherit;\n}\n\n.calendar-content{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.calendar-menu{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n}\n.calendar-menu-month-inner{\n\tposition: relative;\n}\n\n.radiobutton{\n\twidth: 20px;\n\theight: 20px;\n}\n.checkbox{\n\twidth: 20px;\n\theight: 20px;\n}\n.progressbar{\n\theight: 24px;\n}\n.pagination1{\n\theight: 34px;\n\tpadding: 2px;\n}\n.layout{\n\theight: 100%;\n}\n.layout-animate{\n\ttransition: transform 400ms;\n}\n.layout-panel-north,.layout-panel-south{\n\tposition: absolute;\n\twidth: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.layout-panel-south{\n\ttop: auto;\n\tbottom: 0;\n}\n.layout-panel-west,.layout-panel-east{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tbottom: 0;\n}\n.layout-panel-east{\n\tleft: auto;\n\tright: 0;\n}\n.layout-panel-west.layout-collapsed{\n\ttransform: translate3d(-100%, 0, 0);\n}\n.layout-panel-east.layout-collapsed{\n\ttransform: translate3d(100%, 0, 0)\n}\n.layout-panel-north.layout-collapsed{\n\ttransform: translate3d(0, -100%, 0)\n}\n.layout-panel-south.layout-collapsed{\n\ttransform: translate3d(0, 100%, 0)\n}\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/echarts.min.js",
    "content": "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],e):e(t.echarts={})}(this,function(t){\"use strict\";function e(t,e){ey[t]=e}function i(t){if(null==t||\"object\"!=typeof t)return t;var e=t,n=qv.call(t);if(\"[object Array]\"===n){e=[];for(var o=0,a=t.length;o<a;o++)e[o]=i(t[o])}else if(jv[n]){var r=t.constructor;if(t.constructor.from)e=r.from(t);else{e=new r(t.length);for(var o=0,a=t.length;o<a;o++)e[o]=i(t[o])}}else if(!Xv[n]&&!P(t)&&!S(t)){e={};for(var s in t)t.hasOwnProperty(s)&&(e[s]=i(t[s]))}return e}function n(t,e,o){if(!b(e)||!b(t))return o?i(e):t;for(var a in e)if(e.hasOwnProperty(a)){var r=t[a],s=e[a];!b(s)||!b(r)||y(s)||y(r)||S(s)||S(r)||w(s)||w(r)||P(s)||P(r)?!o&&a in t||(t[a]=i(e[a],!0)):n(r,s,o)}return t}function o(t,e){for(var i=t[0],o=1,a=t.length;o<a;o++)i=n(i,t[o],e);return i}function a(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function r(t,e,i){for(var n in e)e.hasOwnProperty(n)&&(i?null!=e[n]:null==t[n])&&(t[n]=e[n]);return t}function s(){return ny||(ny=iy().getContext(\"2d\")),ny}function l(t,e){if(t){if(t.indexOf)return t.indexOf(e);for(var i=0,n=t.length;i<n;i++)if(t[i]===e)return i}return-1}function h(t,e){function i(){}var n=t.prototype;i.prototype=e.prototype,t.prototype=new i;for(var o in n)t.prototype[o]=n[o];t.prototype.constructor=t,t.superClass=e}function u(t,e,i){r(t=\"prototype\"in t?t.prototype:t,e=\"prototype\"in e?e.prototype:e,i)}function c(t){if(t)return\"string\"!=typeof t&&\"number\"==typeof t.length}function d(t,e,i){if(t&&e)if(t.forEach&&t.forEach===$v)t.forEach(e,i);else if(t.length===+t.length)for(var n=0,o=t.length;n<o;n++)e.call(i,t[n],n,t);else for(var a in t)t.hasOwnProperty(a)&&e.call(i,t[a],a,t)}function f(t,e,i){if(t&&e){if(t.map&&t.map===Qv)return t.map(e,i);for(var n=[],o=0,a=t.length;o<a;o++)n.push(e.call(i,t[o],o,t));return n}}function g(t,e,i,n){if(t&&e){if(t.reduce&&t.reduce===ty)return t.reduce(e,i,n);for(var o=0,a=t.length;o<a;o++)i=e.call(n,i,t[o],o,t);return i}}function p(t,e,i){if(t&&e){if(t.filter&&t.filter===Kv)return t.filter(e,i);for(var n=[],o=0,a=t.length;o<a;o++)e.call(i,t[o],o,t)&&n.push(t[o]);return n}}function m(t,e){var i=Jv.call(arguments,2);return function(){return t.apply(e,i.concat(Jv.call(arguments)))}}function v(t){var e=Jv.call(arguments,1);return function(){return t.apply(this,e.concat(Jv.call(arguments)))}}function y(t){return\"[object Array]\"===qv.call(t)}function x(t){return\"function\"==typeof t}function _(t){return\"[object String]\"===qv.call(t)}function b(t){var e=typeof t;return\"function\"===e||!!t&&\"object\"==e}function w(t){return!!Xv[qv.call(t)]}function S(t){return\"object\"==typeof t&&\"number\"==typeof t.nodeType&&\"object\"==typeof t.ownerDocument}function M(t){return t!==t}function I(t){for(var e=0,i=arguments.length;e<i;e++)if(null!=arguments[e])return arguments[e]}function T(t,e){return null!=t?t:e}function A(t,e,i){return null!=t?t:null!=e?e:i}function C(){return Function.call.apply(Jv,arguments)}function D(t){if(\"number\"==typeof t)return[t,t,t,t];var e=t.length;return 2===e?[t[0],t[1],t[0],t[1]]:3===e?[t[0],t[1],t[2],t[1]]:t}function L(t,e){if(!t)throw new Error(e)}function k(t){t[oy]=!0}function P(t){return t[oy]}function O(t){t&&d(t,function(t,e){this.set(e,t)},this)}function z(t){return new O(t)}function N(){}function E(t,e){var i=new ry(2);return null==t&&(t=0),null==e&&(e=0),i[0]=t,i[1]=e,i}function R(t,e){return t[0]=e[0],t[1]=e[1],t}function V(t){var e=new ry(2);return e[0]=t[0],e[1]=t[1],e}function B(t,e,i){return t[0]=e,t[1]=i,t}function G(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t}function W(t,e,i,n){return t[0]=e[0]+i[0]*n,t[1]=e[1]+i[1]*n,t}function H(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t}function F(t){return Math.sqrt(Z(t))}function Z(t){return t[0]*t[0]+t[1]*t[1]}function U(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t}function X(t,e){var i=F(e);return 0===i?(t[0]=0,t[1]=0):(t[0]=e[0]/i,t[1]=e[1]/i),t}function j(t,e){return Math.sqrt((t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t[1]-e[1]))}function q(t,e){return(t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t[1]-e[1])}function Y(t,e,i,n){return t[0]=e[0]+n*(i[0]-e[0]),t[1]=e[1]+n*(i[1]-e[1]),t}function $(t,e,i){var n=e[0],o=e[1];return t[0]=i[0]*n+i[2]*o+i[4],t[1]=i[1]*n+i[3]*o+i[5],t}function K(t,e,i){return t[0]=Math.min(e[0],i[0]),t[1]=Math.min(e[1],i[1]),t}function J(t,e,i){return t[0]=Math.max(e[0],i[0]),t[1]=Math.max(e[1],i[1]),t}function Q(){this.on(\"mousedown\",this._dragStart,this),this.on(\"mousemove\",this._drag,this),this.on(\"mouseup\",this._dragEnd,this),this.on(\"globalout\",this._dragEnd,this)}function tt(t,e){return{target:t,topTarget:e&&e.topTarget}}function et(t,e,i){return{type:t,event:i,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:i.zrX,offsetY:i.zrY,gestureEvent:i.gestureEvent,pinchX:i.pinchX,pinchY:i.pinchY,pinchScale:i.pinchScale,wheelDelta:i.zrDelta,zrByTouch:i.zrByTouch,which:i.which}}function it(){}function nt(t,e,i){if(t[t.rectHover?\"rectContain\":\"contain\"](e,i)){for(var n,o=t;o;){if(o.clipPath&&!o.clipPath.contain(e,i))return!1;o.silent&&(n=!0),o=o.parent}return!n||gy}return!1}function ot(){var t=new vy(6);return at(t),t}function at(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function rt(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function st(t,e,i){var n=e[0]*i[0]+e[2]*i[1],o=e[1]*i[0]+e[3]*i[1],a=e[0]*i[2]+e[2]*i[3],r=e[1]*i[2]+e[3]*i[3],s=e[0]*i[4]+e[2]*i[5]+e[4],l=e[1]*i[4]+e[3]*i[5]+e[5];return t[0]=n,t[1]=o,t[2]=a,t[3]=r,t[4]=s,t[5]=l,t}function lt(t,e,i){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+i[0],t[5]=e[5]+i[1],t}function ht(t,e,i){var n=e[0],o=e[2],a=e[4],r=e[1],s=e[3],l=e[5],h=Math.sin(i),u=Math.cos(i);return t[0]=n*u+r*h,t[1]=-n*h+r*u,t[2]=o*u+s*h,t[3]=-o*h+u*s,t[4]=u*a+h*l,t[5]=u*l-h*a,t}function ut(t,e,i){var n=i[0],o=i[1];return t[0]=e[0]*n,t[1]=e[1]*o,t[2]=e[2]*n,t[3]=e[3]*o,t[4]=e[4]*n,t[5]=e[5]*o,t}function ct(t,e){var i=e[0],n=e[2],o=e[4],a=e[1],r=e[3],s=e[5],l=i*r-a*n;return l?(l=1/l,t[0]=r*l,t[1]=-a*l,t[2]=-n*l,t[3]=i*l,t[4]=(n*s-r*o)*l,t[5]=(a*o-i*s)*l,t):null}function dt(t){return t>_y||t<-_y}function ft(t){this._target=t.target,this._life=t.life||1e3,this._delay=t.delay||0,this._initialized=!1,this.loop=null!=t.loop&&t.loop,this.gap=t.gap||0,this.easing=t.easing||\"Linear\",this.onframe=t.onframe,this.ondestroy=t.ondestroy,this.onrestart=t.onrestart,this._pausedTime=0,this._paused=!1}function gt(t){return(t=Math.round(t))<0?0:t>255?255:t}function pt(t){return(t=Math.round(t))<0?0:t>360?360:t}function mt(t){return t<0?0:t>1?1:t}function vt(t){return gt(t.length&&\"%\"===t.charAt(t.length-1)?parseFloat(t)/100*255:parseInt(t,10))}function yt(t){return mt(t.length&&\"%\"===t.charAt(t.length-1)?parseFloat(t)/100:parseFloat(t))}function xt(t,e,i){return i<0?i+=1:i>1&&(i-=1),6*i<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}function _t(t,e,i){return t+(e-t)*i}function bt(t,e,i,n,o){return t[0]=e,t[1]=i,t[2]=n,t[3]=o,t}function wt(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function St(t,e){Py&&wt(Py,e),Py=ky.put(t,Py||e.slice())}function Mt(t,e){if(t){e=e||[];var i=ky.get(t);if(i)return wt(e,i);var n=(t+=\"\").replace(/ /g,\"\").toLowerCase();if(n in Ly)return wt(e,Ly[n]),St(t,e),e;if(\"#\"!==n.charAt(0)){var o=n.indexOf(\"(\"),a=n.indexOf(\")\");if(-1!==o&&a+1===n.length){var r=n.substr(0,o),s=n.substr(o+1,a-(o+1)).split(\",\"),l=1;switch(r){case\"rgba\":if(4!==s.length)return void bt(e,0,0,0,1);l=yt(s.pop());case\"rgb\":return 3!==s.length?void bt(e,0,0,0,1):(bt(e,vt(s[0]),vt(s[1]),vt(s[2]),l),St(t,e),e);case\"hsla\":return 4!==s.length?void bt(e,0,0,0,1):(s[3]=yt(s[3]),It(s,e),St(t,e),e);case\"hsl\":return 3!==s.length?void bt(e,0,0,0,1):(It(s,e),St(t,e),e);default:return}}bt(e,0,0,0,1)}else{if(4===n.length)return(h=parseInt(n.substr(1),16))>=0&&h<=4095?(bt(e,(3840&h)>>4|(3840&h)>>8,240&h|(240&h)>>4,15&h|(15&h)<<4,1),St(t,e),e):void bt(e,0,0,0,1);if(7===n.length){var h=parseInt(n.substr(1),16);return h>=0&&h<=16777215?(bt(e,(16711680&h)>>16,(65280&h)>>8,255&h,1),St(t,e),e):void bt(e,0,0,0,1)}}}}function It(t,e){var i=(parseFloat(t[0])%360+360)%360/360,n=yt(t[1]),o=yt(t[2]),a=o<=.5?o*(n+1):o+n-o*n,r=2*o-a;return e=e||[],bt(e,gt(255*xt(r,a,i+1/3)),gt(255*xt(r,a,i)),gt(255*xt(r,a,i-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Tt(t){if(t){var e,i,n=t[0]/255,o=t[1]/255,a=t[2]/255,r=Math.min(n,o,a),s=Math.max(n,o,a),l=s-r,h=(s+r)/2;if(0===l)e=0,i=0;else{i=h<.5?l/(s+r):l/(2-s-r);var u=((s-n)/6+l/2)/l,c=((s-o)/6+l/2)/l,d=((s-a)/6+l/2)/l;n===s?e=d-c:o===s?e=1/3+u-d:a===s&&(e=2/3+c-u),e<0&&(e+=1),e>1&&(e-=1)}var f=[360*e,i,h];return null!=t[3]&&f.push(t[3]),f}}function At(t,e){var i=Mt(t);if(i){for(var n=0;n<3;n++)i[n]=e<0?i[n]*(1-e)|0:(255-i[n])*e+i[n]|0;return Ot(i,4===i.length?\"rgba\":\"rgb\")}}function Ct(t){var e=Mt(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)}function Dt(t,e,i){if(e&&e.length&&t>=0&&t<=1){i=i||[];var n=t*(e.length-1),o=Math.floor(n),a=Math.ceil(n),r=e[o],s=e[a],l=n-o;return i[0]=gt(_t(r[0],s[0],l)),i[1]=gt(_t(r[1],s[1],l)),i[2]=gt(_t(r[2],s[2],l)),i[3]=mt(_t(r[3],s[3],l)),i}}function Lt(t,e,i){if(e&&e.length&&t>=0&&t<=1){var n=t*(e.length-1),o=Math.floor(n),a=Math.ceil(n),r=Mt(e[o]),s=Mt(e[a]),l=n-o,h=Ot([gt(_t(r[0],s[0],l)),gt(_t(r[1],s[1],l)),gt(_t(r[2],s[2],l)),mt(_t(r[3],s[3],l))],\"rgba\");return i?{color:h,leftIndex:o,rightIndex:a,value:n}:h}}function kt(t,e,i,n){if(t=Mt(t))return t=Tt(t),null!=e&&(t[0]=pt(e)),null!=i&&(t[1]=yt(i)),null!=n&&(t[2]=yt(n)),Ot(It(t),\"rgba\")}function Pt(t,e){if((t=Mt(t))&&null!=e)return t[3]=mt(e),Ot(t,\"rgba\")}function Ot(t,e){if(t&&t.length){var i=t[0]+\",\"+t[1]+\",\"+t[2];return\"rgba\"!==e&&\"hsva\"!==e&&\"hsla\"!==e||(i+=\",\"+t[3]),e+\"(\"+i+\")\"}}function zt(t,e){return t[e]}function Nt(t,e,i){t[e]=i}function Et(t,e,i){return(e-t)*i+t}function Rt(t,e,i){return i>.5?e:t}function Vt(t,e,i,n,o){var a=t.length;if(1==o)for(s=0;s<a;s++)n[s]=Et(t[s],e[s],i);else for(var r=a&&t[0].length,s=0;s<a;s++)for(var l=0;l<r;l++)n[s][l]=Et(t[s][l],e[s][l],i)}function Bt(t,e,i){var n=t.length,o=e.length;if(n!==o)if(n>o)t.length=o;else for(r=n;r<o;r++)t.push(1===i?e[r]:Ey.call(e[r]));for(var a=t[0]&&t[0].length,r=0;r<t.length;r++)if(1===i)isNaN(t[r])&&(t[r]=e[r]);else for(var s=0;s<a;s++)isNaN(t[r][s])&&(t[r][s]=e[r][s])}function Gt(t,e,i){if(t===e)return!0;var n=t.length;if(n!==e.length)return!1;if(1===i){for(a=0;a<n;a++)if(t[a]!==e[a])return!1}else for(var o=t[0].length,a=0;a<n;a++)for(var r=0;r<o;r++)if(t[a][r]!==e[a][r])return!1;return!0}function Wt(t,e,i,n,o,a,r,s,l){var h=t.length;if(1==l)for(c=0;c<h;c++)s[c]=Ht(t[c],e[c],i[c],n[c],o,a,r);else for(var u=t[0].length,c=0;c<h;c++)for(var d=0;d<u;d++)s[c][d]=Ht(t[c][d],e[c][d],i[c][d],n[c][d],o,a,r)}function Ht(t,e,i,n,o,a,r){var s=.5*(i-t),l=.5*(n-e);return(2*(e-i)+s+l)*r+(-3*(e-i)-2*s-l)*a+s*o+e}function Ft(t){if(c(t)){var e=t.length;if(c(t[0])){for(var i=[],n=0;n<e;n++)i.push(Ey.call(t[n]));return i}return Ey.call(t)}return t}function Zt(t){return t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.floor(t[2]),\"rgba(\"+t.join(\",\")+\")\"}function Ut(t){var e=t[t.length-1].value;return c(e&&e[0])?2:1}function Xt(t,e,i,n,o,a){var r=t._getter,s=t._setter,l=\"spline\"===e,h=n.length;if(h){var u,d=c(n[0].value),f=!1,g=!1,p=d?Ut(n):0;n.sort(function(t,e){return t.time-e.time}),u=n[h-1].time;for(var m=[],v=[],y=n[0].value,x=!0,_=0;_<h;_++){m.push(n[_].time/u);var b=n[_].value;if(d&&Gt(b,y,p)||!d&&b===y||(x=!1),y=b,\"string\"==typeof b){var w=Mt(b);w?(b=w,f=!0):g=!0}v.push(b)}if(a||!x){for(var S=v[h-1],_=0;_<h-1;_++)d?Bt(v[_],S,p):!isNaN(v[_])||isNaN(S)||g||f||(v[_]=S);d&&Bt(r(t._target,o),S,p);var M,I,T,A,C,D,L=0,k=0;if(f)var P=[0,0,0,0];var O=new ft({target:t._target,life:u,loop:t._loop,delay:t._delay,onframe:function(t,e){var i;if(e<0)i=0;else if(e<k){for(i=M=Math.min(L+1,h-1);i>=0&&!(m[i]<=e);i--);i=Math.min(i,h-2)}else{for(i=L;i<h&&!(m[i]>e);i++);i=Math.min(i-1,h-2)}L=i,k=e;var n=m[i+1]-m[i];if(0!==n)if(I=(e-m[i])/n,l)if(A=v[i],T=v[0===i?i:i-1],C=v[i>h-2?h-1:i+1],D=v[i>h-3?h-1:i+2],d)Wt(T,A,C,D,I,I*I,I*I*I,r(t,o),p);else{if(f)a=Wt(T,A,C,D,I,I*I,I*I*I,P,1),a=Zt(P);else{if(g)return Rt(A,C,I);a=Ht(T,A,C,D,I,I*I,I*I*I)}s(t,o,a)}else if(d)Vt(v[i],v[i+1],I,r(t,o),p);else{var a;if(f)Vt(v[i],v[i+1],I,P,1),a=Zt(P);else{if(g)return Rt(v[i],v[i+1],I);a=Et(v[i],v[i+1],I)}s(t,o,a)}},ondestroy:i});return e&&\"spline\"!==e&&(O.easing=e),O}}}function jt(t,e,i,n){i<0&&(t+=i,i=-i),n<0&&(e+=n,n=-n),this.x=t,this.y=e,this.width=i,this.height=n}function qt(t){for(var e=0;t>=qy;)e|=1&t,t>>=1;return t+e}function Yt(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o<i&&n(t[o],t[o-1])<0;)o++;$t(t,e,o)}else for(;o<i&&n(t[o],t[o-1])>=0;)o++;return o-e}function $t(t,e,i){for(i--;e<i;){var n=t[e];t[e++]=t[i],t[i--]=n}}function Kt(t,e,i,n,o){for(n===e&&n++;n<i;n++){for(var a,r=t[n],s=e,l=n;s<l;)o(r,t[a=s+l>>>1])<0?l=a:s=a+1;var h=n-s;switch(h){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;h>0;)t[s+h]=t[s+h-1],h--}t[s]=r}}function Jt(t,e,i,n,o,a){var r=0,s=0,l=1;if(a(t,e[i+o])>0){for(s=n-o;l<s&&a(t,e[i+o+l])>0;)r=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),r+=o,l+=o}else{for(s=o+1;l<s&&a(t,e[i+o-l])<=0;)r=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s);var h=r;r=o-l,l=o-h}for(r++;r<l;){var u=r+(l-r>>>1);a(t,e[i+u])>0?r=u+1:l=u}return l}function Qt(t,e,i,n,o,a){var r=0,s=0,l=1;if(a(t,e[i+o])<0){for(s=o+1;l<s&&a(t,e[i+o-l])<0;)r=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s);var h=r;r=o-l,l=o-h}else{for(s=n-o;l<s&&a(t,e[i+o+l])>=0;)r=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),r+=o,l+=o}for(r++;r<l;){var u=r+(l-r>>>1);a(t,e[i+u])<0?l=u:r=u+1}return l}function te(t,e){function i(i){var s=a[i],h=r[i],u=a[i+1],c=r[i+1];r[i]=h+c,i===l-3&&(a[i+1]=a[i+2],r[i+1]=r[i+2]),l--;var d=Qt(t[u],t,s,h,0,e);s+=d,0!==(h-=d)&&0!==(c=Jt(t[s+h-1],t,u,c,c-1,e))&&(h<=c?n(s,h,u,c):o(s,h,u,c))}function n(i,n,o,a){var r=0;for(r=0;r<n;r++)h[r]=t[i+r];var l=0,u=o,c=i;if(t[c++]=t[u++],0!=--a)if(1!==n){for(var d,f,g,p=s;;){d=0,f=0,g=!1;do{if(e(t[u],h[l])<0){if(t[c++]=t[u++],f++,d=0,0==--a){g=!0;break}}else if(t[c++]=h[l++],d++,f=0,1==--n){g=!0;break}}while((d|f)<p);if(g)break;do{if(0!==(d=Qt(t[u],h,l,n,0,e))){for(r=0;r<d;r++)t[c+r]=h[l+r];if(c+=d,l+=d,(n-=d)<=1){g=!0;break}}if(t[c++]=t[u++],0==--a){g=!0;break}if(0!==(f=Jt(h[l],t,u,a,0,e))){for(r=0;r<f;r++)t[c+r]=t[u+r];if(c+=f,u+=f,0===(a-=f)){g=!0;break}}if(t[c++]=h[l++],1==--n){g=!0;break}p--}while(d>=Yy||f>=Yy);if(g)break;p<0&&(p=0),p+=2}if((s=p)<1&&(s=1),1===n){for(r=0;r<a;r++)t[c+r]=t[u+r];t[c+a]=h[l]}else{if(0===n)throw new Error;for(r=0;r<n;r++)t[c+r]=h[l+r]}}else{for(r=0;r<a;r++)t[c+r]=t[u+r];t[c+a]=h[l]}else for(r=0;r<n;r++)t[c+r]=h[l+r]}function o(i,n,o,a){var r=0;for(r=0;r<a;r++)h[r]=t[o+r];var l=i+n-1,u=a-1,c=o+a-1,d=0,f=0;if(t[c--]=t[l--],0!=--n)if(1!==a){for(var g=s;;){var p=0,m=0,v=!1;do{if(e(h[u],t[l])<0){if(t[c--]=t[l--],p++,m=0,0==--n){v=!0;break}}else if(t[c--]=h[u--],m++,p=0,1==--a){v=!0;break}}while((p|m)<g);if(v)break;do{if(0!=(p=n-Qt(h[u],t,i,n,n-1,e))){for(n-=p,f=(c-=p)+1,d=(l-=p)+1,r=p-1;r>=0;r--)t[f+r]=t[d+r];if(0===n){v=!0;break}}if(t[c--]=h[u--],1==--a){v=!0;break}if(0!=(m=a-Jt(t[l],h,0,a,a-1,e))){for(a-=m,f=(c-=m)+1,d=(u-=m)+1,r=0;r<m;r++)t[f+r]=h[d+r];if(a<=1){v=!0;break}}if(t[c--]=t[l--],0==--n){v=!0;break}g--}while(p>=Yy||m>=Yy);if(v)break;g<0&&(g=0),g+=2}if((s=g)<1&&(s=1),1===a){for(f=(c-=n)+1,d=(l-=n)+1,r=n-1;r>=0;r--)t[f+r]=t[d+r];t[c]=h[u]}else{if(0===a)throw new Error;for(d=c-(a-1),r=0;r<a;r++)t[d+r]=h[r]}}else{for(f=(c-=n)+1,d=(l-=n)+1,r=n-1;r>=0;r--)t[f+r]=t[d+r];t[c]=h[u]}else for(d=c-(a-1),r=0;r<a;r++)t[d+r]=h[r]}var a,r,s=Yy,l=0,h=[];a=[],r=[],this.mergeRuns=function(){for(;l>1;){var t=l-2;if(t>=1&&r[t-1]<=r[t]+r[t+1]||t>=2&&r[t-2]<=r[t]+r[t-1])r[t-1]<r[t+1]&&t--;else if(r[t]>r[t+1])break;i(t)}},this.forceMergeRuns=function(){for(;l>1;){var t=l-2;t>0&&r[t-1]<r[t+1]&&t--,i(t)}},this.pushRun=function(t,e){a[l]=t,r[l]=e,l+=1}}function ee(t,e,i,n){i||(i=0),n||(n=t.length);var o=n-i;if(!(o<2)){var a=0;if(o<qy)return a=Yt(t,i,n,e),void Kt(t,i,n,i+a,e);var r=new te(t,e),s=qt(o);do{if((a=Yt(t,i,n,e))<s){var l=o;l>s&&(l=s),Kt(t,i,i+l,i+a,e),a=l}r.pushRun(i,a),r.mergeRuns(),o-=a,i+=a}while(0!==o);r.forceMergeRuns()}}function ie(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}function ne(t,e,i){var n=null==e.x?0:e.x,o=null==e.x2?1:e.x2,a=null==e.y?0:e.y,r=null==e.y2?0:e.y2;return e.global||(n=n*i.width+i.x,o=o*i.width+i.x,a=a*i.height+i.y,r=r*i.height+i.y),t.createLinearGradient(n,a,o,r)}function oe(t,e,i){var n=i.width,o=i.height,a=Math.min(n,o),r=null==e.x?.5:e.x,s=null==e.y?.5:e.y,l=null==e.r?.5:e.r;return e.global||(r=r*n+i.x,s=s*o+i.y,l*=a),t.createRadialGradient(r,s,0,r,s,l)}function ae(){return!1}function re(t,e,i){var n=iy(),o=e.getWidth(),a=e.getHeight(),r=n.style;return r.position=\"absolute\",r.left=0,r.top=0,r.width=o+\"px\",r.height=a+\"px\",n.width=o*i,n.height=a*i,n.setAttribute(\"data-zr-dom-id\",t),n}function se(t){if(\"string\"==typeof t){var e=ax.get(t);return e&&e.image}return t}function le(t,e,i,n,o){if(t){if(\"string\"==typeof t){if(e&&e.__zrImageSrc===t||!i)return e;var a=ax.get(t),r={hostEl:i,cb:n,cbPayload:o};return a?!ue(e=a.image)&&a.pending.push(r):(!e&&(e=new Image),e.onload=he,ax.put(t,e.__cachedImgObj={image:e,pending:[r]}),e.src=e.__zrImageSrc=t),e}return t}return e}function he(){var t=this.__cachedImgObj;this.onload=this.__cachedImgObj=null;for(var e=0;e<t.pending.length;e++){var i=t.pending[e],n=i.cb;n&&n(this,i.cbPayload),i.hostEl.dirty()}t.pending.length=0}function ue(t){return t&&t.width&&t.height}function ce(t,e){var i=t+\":\"+(e=e||ux);if(rx[i])return rx[i];for(var n=(t+\"\").split(\"\\n\"),o=0,a=0,r=n.length;a<r;a++)o=Math.max(Se(n[a],e).width,o);return sx>lx&&(sx=0,rx={}),sx++,rx[i]=o,o}function de(t,e,i,n,o,a,r){return a?ge(t,e,i,n,o,a,r):fe(t,e,i,n,o,r)}function fe(t,e,i,n,o,a){var r=Me(t,e,o,a),s=ce(t,e);o&&(s+=o[1]+o[3]);var l=r.outerHeight,h=new jt(pe(0,s,i),me(0,l,n),s,l);return h.lineHeight=r.lineHeight,h}function ge(t,e,i,n,o,a,r){var s=Ie(t,{rich:a,truncate:r,font:e,textAlign:i,textPadding:o}),l=s.outerWidth,h=s.outerHeight;return new jt(pe(0,l,i),me(0,h,n),l,h)}function pe(t,e,i){return\"right\"===i?t-=e:\"center\"===i&&(t-=e/2),t}function me(t,e,i){return\"middle\"===i?t-=e/2:\"bottom\"===i&&(t-=e),t}function ve(t,e,i){var n=e.x,o=e.y,a=e.height,r=e.width,s=a/2,l=\"left\",h=\"top\";switch(t){case\"left\":n-=i,o+=s,l=\"right\",h=\"middle\";break;case\"right\":n+=i+r,o+=s,h=\"middle\";break;case\"top\":n+=r/2,o-=i,l=\"center\",h=\"bottom\";break;case\"bottom\":n+=r/2,o+=a+i,l=\"center\";break;case\"inside\":n+=r/2,o+=s,l=\"center\",h=\"middle\";break;case\"insideLeft\":n+=i,o+=s,h=\"middle\";break;case\"insideRight\":n+=r-i,o+=s,l=\"right\",h=\"middle\";break;case\"insideTop\":n+=r/2,o+=i,l=\"center\";break;case\"insideBottom\":n+=r/2,o+=a-i,l=\"center\",h=\"bottom\";break;case\"insideTopLeft\":n+=i,o+=i;break;case\"insideTopRight\":n+=r-i,o+=i,l=\"right\";break;case\"insideBottomLeft\":n+=i,o+=a-i,h=\"bottom\";break;case\"insideBottomRight\":n+=r-i,o+=a-i,l=\"right\",h=\"bottom\"}return{x:n,y:o,textAlign:l,textVerticalAlign:h}}function ye(t,e,i,n,o){if(!e)return\"\";var a=(t+\"\").split(\"\\n\");o=xe(e,i,n,o);for(var r=0,s=a.length;r<s;r++)a[r]=_e(a[r],o);return a.join(\"\\n\")}function xe(t,e,i,n){(n=a({},n)).font=e;var i=T(i,\"...\");n.maxIterations=T(n.maxIterations,2);var o=n.minChar=T(n.minChar,0);n.cnCharWidth=ce(\"国\",e);var r=n.ascCharWidth=ce(\"a\",e);n.placeholder=T(n.placeholder,\"\");for(var s=t=Math.max(0,t-1),l=0;l<o&&s>=r;l++)s-=r;var h=ce(i);return h>s&&(i=\"\",h=0),s=t-h,n.ellipsis=i,n.ellipsisWidth=h,n.contentWidth=s,n.containerWidth=t,n}function _e(t,e){var i=e.containerWidth,n=e.font,o=e.contentWidth;if(!i)return\"\";var a=ce(t,n);if(a<=i)return t;for(var r=0;;r++){if(a<=o||r>=e.maxIterations){t+=e.ellipsis;break}var s=0===r?be(t,o,e.ascCharWidth,e.cnCharWidth):a>0?Math.floor(t.length*o/a):0;a=ce(t=t.substr(0,s),n)}return\"\"===t&&(t=e.placeholder),t}function be(t,e,i,n){for(var o=0,a=0,r=t.length;a<r&&o<e;a++){var s=t.charCodeAt(a);o+=0<=s&&s<=127?i:n}return a}function we(t){return ce(\"国\",t)}function Se(t,e){return cx.measureText(t,e)}function Me(t,e,i,n){null!=t&&(t+=\"\");var o=we(e),a=t?t.split(\"\\n\"):[],r=a.length*o,s=r;if(i&&(s+=i[0]+i[2]),t&&n){var l=n.outerHeight,h=n.outerWidth;if(null!=l&&s>l)t=\"\",a=[];else if(null!=h)for(var u=xe(h-(i?i[1]+i[3]:0),e,n.ellipsis,{minChar:n.minChar,placeholder:n.placeholder}),c=0,d=a.length;c<d;c++)a[c]=_e(a[c],u)}return{lines:a,height:r,outerHeight:s,lineHeight:o}}function Ie(t,e){var i={lines:[],width:0,height:0};if(null!=t&&(t+=\"\"),!t)return i;for(var n,o=hx.lastIndex=0;null!=(n=hx.exec(t));){var a=n.index;a>o&&Te(i,t.substring(o,a)),Te(i,n[2],n[1]),o=hx.lastIndex}o<t.length&&Te(i,t.substring(o,t.length));var r=i.lines,s=0,l=0,h=[],u=e.textPadding,c=e.truncate,d=c&&c.outerWidth,f=c&&c.outerHeight;u&&(null!=d&&(d-=u[1]+u[3]),null!=f&&(f-=u[0]+u[2]));for(L=0;L<r.length;L++){for(var g=r[L],p=0,m=0,v=0;v<g.tokens.length;v++){var y=(k=g.tokens[v]).styleName&&e.rich[k.styleName]||{},x=k.textPadding=y.textPadding,_=k.font=y.font||e.font,b=k.textHeight=T(y.textHeight,we(_));if(x&&(b+=x[0]+x[2]),k.height=b,k.lineHeight=A(y.textLineHeight,e.textLineHeight,b),k.textAlign=y&&y.textAlign||e.textAlign,k.textVerticalAlign=y&&y.textVerticalAlign||\"middle\",null!=f&&s+k.lineHeight>f)return{lines:[],width:0,height:0};k.textWidth=ce(k.text,_);var w=y.textWidth,S=null==w||\"auto\"===w;if(\"string\"==typeof w&&\"%\"===w.charAt(w.length-1))k.percentWidth=w,h.push(k),w=0;else{if(S){w=k.textWidth;var M=y.textBackgroundColor,I=M&&M.image;I&&ue(I=se(I))&&(w=Math.max(w,I.width*b/I.height))}var C=x?x[1]+x[3]:0;w+=C;var D=null!=d?d-m:null;null!=D&&D<w&&(!S||D<C?(k.text=\"\",k.textWidth=w=0):(k.text=ye(k.text,D-C,_,c.ellipsis,{minChar:c.minChar}),k.textWidth=ce(k.text,_),w=k.textWidth+C))}m+=k.width=w,y&&(p=Math.max(p,k.lineHeight))}g.width=m,g.lineHeight=p,s+=p,l=Math.max(l,m)}i.outerWidth=i.width=T(e.textWidth,l),i.outerHeight=i.height=T(e.textHeight,s),u&&(i.outerWidth+=u[1]+u[3],i.outerHeight+=u[0]+u[2]);for(var L=0;L<h.length;L++){var k=h[L],P=k.percentWidth;k.width=parseInt(P,10)/100*l}return i}function Te(t,e,i){for(var n=\"\"===e,o=e.split(\"\\n\"),a=t.lines,r=0;r<o.length;r++){var s=o[r],l={styleName:i,text:s,isLineHolder:!s&&!n};if(r)a.push({tokens:[l]});else{var h=(a[a.length-1]||(a[0]={tokens:[]})).tokens,u=h.length;1===u&&h[0].isLineHolder?h[0]=l:(s||!u||n)&&h.push(l)}}}function Ae(t){return(t.fontSize||t.fontFamily)&&[t.fontStyle,t.fontWeight,(t.fontSize||12)+\"px\",t.fontFamily||\"sans-serif\"].join(\" \")||t.textFont||t.font}function Ce(t,e){var i,n,o,a,r=e.x,s=e.y,l=e.width,h=e.height,u=e.r;l<0&&(r+=l,l=-l),h<0&&(s+=h,h=-h),\"number\"==typeof u?i=n=o=a=u:u instanceof Array?1===u.length?i=n=o=a=u[0]:2===u.length?(i=o=u[0],n=a=u[1]):3===u.length?(i=u[0],n=a=u[1],o=u[2]):(i=u[0],n=u[1],o=u[2],a=u[3]):i=n=o=a=0;var c;i+n>l&&(i*=l/(c=i+n),n*=l/c),o+a>l&&(o*=l/(c=o+a),a*=l/c),n+o>h&&(n*=h/(c=n+o),o*=h/c),i+a>h&&(i*=h/(c=i+a),a*=h/c),t.moveTo(r+i,s),t.lineTo(r+l-n,s),0!==n&&t.quadraticCurveTo(r+l,s,r+l,s+n),t.lineTo(r+l,s+h-o),0!==o&&t.quadraticCurveTo(r+l,s+h,r+l-o,s+h),t.lineTo(r+a,s+h),0!==a&&t.quadraticCurveTo(r,s+h,r,s+h-a),t.lineTo(r,s+i),0!==i&&t.quadraticCurveTo(r,s,r+i,s)}function De(t){return Le(t),d(t.rich,Le),t}function Le(t){if(t){t.font=Ae(t);var e=t.textAlign;\"middle\"===e&&(e=\"center\"),t.textAlign=null==e||dx[e]?e:\"left\";var i=t.textVerticalAlign||t.textBaseline;\"center\"===i&&(i=\"middle\"),t.textVerticalAlign=null==i||fx[i]?i:\"top\",t.textPadding&&(t.textPadding=D(t.textPadding))}}function ke(t,e,i,n,o){n.rich?Oe(t,e,i,n,o):Pe(t,e,i,n,o)}function Pe(t,e,i,n,o){var a=We(e,\"font\",n.font||ux),r=n.textPadding,s=t.__textCotentBlock;s&&!t.__dirty||(s=t.__textCotentBlock=Me(i,a,r,n.truncate));var l=s.outerHeight,h=s.lines,u=s.lineHeight,c=Ge(l,n,o),d=c.baseX,f=c.baseY,g=c.textAlign,p=c.textVerticalAlign;Ne(e,n,o,d,f);var m=me(f,l,p),v=d,y=m,x=Re(n);if(x||r){var _=ce(i,a);r&&(_+=r[1]+r[3]);var b=pe(d,_,g);x&&Ve(t,e,n,b,m,_,l),r&&(v=Ue(d,g,r),y+=r[0])}We(e,\"textAlign\",g||\"left\"),We(e,\"textBaseline\",\"middle\"),We(e,\"shadowBlur\",n.textShadowBlur||0),We(e,\"shadowColor\",n.textShadowColor||\"transparent\"),We(e,\"shadowOffsetX\",n.textShadowOffsetX||0),We(e,\"shadowOffsetY\",n.textShadowOffsetY||0),y+=u/2;var w=n.textStrokeWidth,S=He(n.textStroke,w),M=Fe(n.textFill);S&&(We(e,\"lineWidth\",w),We(e,\"strokeStyle\",S)),M&&We(e,\"fillStyle\",M);for(var I=0;I<h.length;I++)S&&e.strokeText(h[I],v,y),M&&e.fillText(h[I],v,y),y+=u}function Oe(t,e,i,n,o){var a=t.__textCotentBlock;a&&!t.__dirty||(a=t.__textCotentBlock=Ie(i,n)),ze(t,e,a,n,o)}function ze(t,e,i,n,o){var a=i.width,r=i.outerWidth,s=i.outerHeight,l=n.textPadding,h=Ge(s,n,o),u=h.baseX,c=h.baseY,d=h.textAlign,f=h.textVerticalAlign;Ne(e,n,o,u,c);var g=pe(u,r,d),p=me(c,s,f),m=g,v=p;l&&(m+=l[3],v+=l[0]);var y=m+a;Re(n)&&Ve(t,e,n,g,p,r,s);for(var x=0;x<i.lines.length;x++){for(var _,b=i.lines[x],w=b.tokens,S=w.length,M=b.lineHeight,I=b.width,T=0,A=m,C=y,D=S-1;T<S&&(!(_=w[T]).textAlign||\"left\"===_.textAlign);)Ee(t,e,_,n,M,v,A,\"left\"),I-=_.width,A+=_.width,T++;for(;D>=0&&\"right\"===(_=w[D]).textAlign;)Ee(t,e,_,n,M,v,C,\"right\"),I-=_.width,C-=_.width,D--;for(A+=(a-(A-m)-(y-C)-I)/2;T<=D;)Ee(t,e,_=w[T],n,M,v,A+_.width/2,\"center\"),A+=_.width,T++;v+=M}}function Ne(t,e,i,n,o){if(i&&e.textRotation){var a=e.textOrigin;\"center\"===a?(n=i.width/2+i.x,o=i.height/2+i.y):a&&(n=a[0]+i.x,o=a[1]+i.y),t.translate(n,o),t.rotate(-e.textRotation),t.translate(-n,-o)}}function Ee(t,e,i,n,o,a,r,s){var l=n.rich[i.styleName]||{},h=i.textVerticalAlign,u=a+o/2;\"top\"===h?u=a+i.height/2:\"bottom\"===h&&(u=a+o-i.height/2),!i.isLineHolder&&Re(l)&&Ve(t,e,l,\"right\"===s?r-i.width:\"center\"===s?r-i.width/2:r,u-i.height/2,i.width,i.height);var c=i.textPadding;c&&(r=Ue(r,s,c),u-=i.height/2-c[2]-i.textHeight/2),We(e,\"shadowBlur\",A(l.textShadowBlur,n.textShadowBlur,0)),We(e,\"shadowColor\",l.textShadowColor||n.textShadowColor||\"transparent\"),We(e,\"shadowOffsetX\",A(l.textShadowOffsetX,n.textShadowOffsetX,0)),We(e,\"shadowOffsetY\",A(l.textShadowOffsetY,n.textShadowOffsetY,0)),We(e,\"textAlign\",s),We(e,\"textBaseline\",\"middle\"),We(e,\"font\",i.font||ux);var d=He(l.textStroke||n.textStroke,g),f=Fe(l.textFill||n.textFill),g=T(l.textStrokeWidth,n.textStrokeWidth);d&&(We(e,\"lineWidth\",g),We(e,\"strokeStyle\",d),e.strokeText(i.text,r,u)),f&&(We(e,\"fillStyle\",f),e.fillText(i.text,r,u))}function Re(t){return t.textBackgroundColor||t.textBorderWidth&&t.textBorderColor}function Ve(t,e,i,n,o,a,r){var s=i.textBackgroundColor,l=i.textBorderWidth,h=i.textBorderColor,u=_(s);if(We(e,\"shadowBlur\",i.textBoxShadowBlur||0),We(e,\"shadowColor\",i.textBoxShadowColor||\"transparent\"),We(e,\"shadowOffsetX\",i.textBoxShadowOffsetX||0),We(e,\"shadowOffsetY\",i.textBoxShadowOffsetY||0),u||l&&h){e.beginPath();var c=i.textBorderRadius;c?Ce(e,{x:n,y:o,width:a,height:r,r:c}):e.rect(n,o,a,r),e.closePath()}if(u)We(e,\"fillStyle\",s),e.fill();else if(b(s)){var d=s.image;(d=le(d,null,t,Be,s))&&ue(d)&&e.drawImage(d,n,o,a,r)}l&&h&&(We(e,\"lineWidth\",l),We(e,\"strokeStyle\",h),e.stroke())}function Be(t,e){e.image=t}function Ge(t,e,i){var n=e.x||0,o=e.y||0,a=e.textAlign,r=e.textVerticalAlign;if(i){var s=e.textPosition;if(s instanceof Array)n=i.x+Ze(s[0],i.width),o=i.y+Ze(s[1],i.height);else{var l=ve(s,i,e.textDistance);n=l.x,o=l.y,a=a||l.textAlign,r=r||l.textVerticalAlign}var h=e.textOffset;h&&(n+=h[0],o+=h[1])}return{baseX:n,baseY:o,textAlign:a,textVerticalAlign:r}}function We(t,e,i){return t[e]=i,t[e]}function He(t,e){return null==t||e<=0||\"transparent\"===t||\"none\"===t?null:t.image||t.colorStops?\"#000\":t}function Fe(t){return null==t||\"none\"===t?null:t.image||t.colorStops?\"#000\":t}function Ze(t,e){return\"string\"==typeof t?t.lastIndexOf(\"%\")>=0?parseFloat(t)/100*e:parseFloat(t):t}function Ue(t,e,i){return\"right\"===e?t-i[1]:\"center\"===e?t+i[3]/2-i[1]/2:t+i[3]}function Xe(t,e){return null!=t&&(t||e.textBackgroundColor||e.textBorderWidth&&e.textBorderColor||e.textPadding)}function je(t){t=t||{},Fy.call(this,t);for(var e in t)t.hasOwnProperty(e)&&\"style\"!==e&&(this[e]=t[e]);this.style=new Jy(t.style,this),this._rect=null,this.__clipPaths=[]}function qe(t){je.call(this,t)}function Ye(t){return parseInt(t,10)}function $e(t){return!!t&&(!!t.__builtin__||\"function\"==typeof t.resize&&\"function\"==typeof t.refresh)}function Ke(t){t.__unusedCount++}function Je(t){1==t.__unusedCount&&t.clear()}function Qe(t,e,i){return mx.copy(t.getBoundingRect()),t.transform&&mx.applyTransform(t.transform),vx.width=e,vx.height=i,!mx.intersect(vx)}function ti(t,e){if(t==e)return!1;if(!t||!e||t.length!==e.length)return!0;for(var i=0;i<t.length;i++)if(t[i]!==e[i])return!0}function ei(t,e){for(var i=0;i<t.length;i++){var n=t[i];n.setTransform(e),e.beginPath(),n.buildPath(e,n.shape),e.clip(),n.restoreTransform(e)}}function ii(t,e){var i=document.createElement(\"div\");return i.style.cssText=[\"position:relative\",\"overflow:hidden\",\"width:\"+t+\"px\",\"height:\"+e+\"px\",\"padding:0\",\"margin:0\",\"border-width:0\"].join(\";\")+\";\",i}function ni(t){return t.getBoundingClientRect?t.getBoundingClientRect():{left:0,top:0}}function oi(t,e,i,n){return i=i||{},n||!Uv.canvasSupported?ai(t,e,i):Uv.browser.firefox&&null!=e.layerX&&e.layerX!==e.offsetX?(i.zrX=e.layerX,i.zrY=e.layerY):null!=e.offsetX?(i.zrX=e.offsetX,i.zrY=e.offsetY):ai(t,e,i),i}function ai(t,e,i){var n=ni(t);i.zrX=e.clientX-n.left,i.zrY=e.clientY-n.top}function ri(t,e,i){if(null!=(e=e||window.event).zrX)return e;var n=e.type;if(n&&n.indexOf(\"touch\")>=0){var o=\"touchend\"!=n?e.targetTouches[0]:e.changedTouches[0];o&&oi(t,o,e,i)}else oi(t,e,e,i),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;var a=e.button;return null==e.which&&void 0!==a&&_x.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function si(t,e,i){xx?t.addEventListener(e,i):t.attachEvent(\"on\"+e,i)}function li(t,e,i){xx?t.removeEventListener(e,i):t.detachEvent(\"on\"+e,i)}function hi(t){return t.which>1}function ui(t){var e=t[1][0]-t[0][0],i=t[1][1]-t[0][1];return Math.sqrt(e*e+i*i)}function ci(t){return[(t[0][0]+t[1][0])/2,(t[0][1]+t[1][1])/2]}function di(t){return\"mousewheel\"===t&&Uv.browser.firefox?\"DOMMouseScroll\":t}function fi(t,e,i){var n=t._gestureMgr;\"start\"===i&&n.clear();var o=n.recognize(e,t.handler.findHover(e.zrX,e.zrY,null).target,t.dom);if(\"end\"===i&&n.clear(),o){var a=o.type;e.gestureEvent=a,t.handler.dispatchToElement({target:o.target},a,o.event)}}function gi(t){t._touching=!0,clearTimeout(t._touchTimer),t._touchTimer=setTimeout(function(){t._touching=!1},700)}function pi(t){var e=t.pointerType;return\"pen\"===e||\"touch\"===e}function mi(t){function e(t,e){return function(){if(!e._touching)return t.apply(e,arguments)}}d(Tx,function(e){t._handlers[e]=m(Dx[e],t)}),d(Cx,function(e){t._handlers[e]=m(Dx[e],t)}),d(Ix,function(i){t._handlers[i]=e(Dx[i],t)})}function vi(t){function e(e,i){d(e,function(e){si(t,di(e),i._handlers[e])},i)}fy.call(this),this.dom=t,this._touching=!1,this._touchTimer,this._gestureMgr=new Sx,this._handlers={},mi(this),Uv.pointerEventsSupported?e(Cx,this):(Uv.touchEventsSupported&&e(Tx,this),e(Ix,this))}function yi(t,e){var i=new zx(Fv(),t,e);return Ox[i.id]=i,i}function xi(t,e){Px[t]=e}function _i(t){delete Ox[t]}function bi(t){return t.replace(/^\\s+/,\"\").replace(/\\s+$/,\"\")}function wi(t,e,i,n){var o=e[1]-e[0],a=i[1]-i[0];if(0===o)return 0===a?i[0]:(i[0]+i[1])/2;if(n)if(o>0){if(t<=e[0])return i[0];if(t>=e[1])return i[1]}else{if(t>=e[0])return i[0];if(t<=e[1])return i[1]}else{if(t===e[0])return i[0];if(t===e[1])return i[1]}return(t-e[0])/o*a+i[0]}function Si(t,e){switch(t){case\"center\":case\"middle\":t=\"50%\";break;case\"left\":case\"top\":t=\"0%\";break;case\"right\":case\"bottom\":t=\"100%\"}return\"string\"==typeof t?bi(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t}function Mi(t,e,i){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),i?t:+t}function Ii(t){return t.sort(function(t,e){return t-e}),t}function Ti(t){if(t=+t,isNaN(t))return 0;for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i}function Ai(t){var e=t.toString(),i=e.indexOf(\"e\");if(i>0){var n=+e.slice(i+1);return n<0?-n:0}var o=e.indexOf(\".\");return o<0?0:e.length-1-o}function Ci(t,e){var i=Math.log,n=Math.LN10,o=Math.floor(i(t[1]-t[0])/n),a=Math.round(i(Math.abs(e[1]-e[0]))/n),r=Math.min(Math.max(-o+a,0),20);return isFinite(r)?r:20}function Di(t,e,i){if(!t[e])return 0;var n=g(t,function(t,e){return t+(isNaN(e)?0:e)},0);if(0===n)return 0;for(var o=Math.pow(10,i),a=f(t,function(t){return(isNaN(t)?0:t)/n*o*100}),r=100*o,s=f(a,function(t){return Math.floor(t)}),l=g(s,function(t,e){return t+e},0),h=f(a,function(t,e){return t-s[e]});l<r;){for(var u=Number.NEGATIVE_INFINITY,c=null,d=0,p=h.length;d<p;++d)h[d]>u&&(u=h[d],c=d);++s[c],h[c]=0,++l}return s[e]/o}function Li(t){var e=2*Math.PI;return(t%e+e)%e}function ki(t){return t>-Ex&&t<Ex}function Pi(t){if(t instanceof Date)return t;if(\"string\"==typeof t){var e=Vx.exec(t);if(!e)return new Date(NaN);if(e[8]){var i=+e[4]||0;return\"Z\"!==e[8].toUpperCase()&&(i-=e[8].slice(0,3)),new Date(Date.UTC(+e[1],+(e[2]||1)-1,+e[3]||1,i,+(e[5]||0),+e[6]||0,+e[7]||0))}return new Date(+e[1],+(e[2]||1)-1,+e[3]||1,+e[4]||0,+(e[5]||0),+e[6]||0,+e[7]||0)}return null==t?new Date(NaN):new Date(Math.round(t))}function Oi(t){return Math.pow(10,zi(t))}function zi(t){return Math.floor(Math.log(t)/Math.LN10)}function Ni(t,e){var i,n=zi(t),o=Math.pow(10,n),a=t/o;return i=e?a<1.5?1:a<2.5?2:a<4?3:a<7?5:10:a<1?1:a<2?2:a<3?3:a<5?5:10,t=i*o,n>=-20?+t.toFixed(n<0?-n:0):t}function Ei(t){function e(t,i,n){return t.interval[n]<i.interval[n]||t.interval[n]===i.interval[n]&&(t.close[n]-i.close[n]==(n?-1:1)||!n&&e(t,i,1))}t.sort(function(t,i){return e(t,i,0)?-1:1});for(var i=-1/0,n=1,o=0;o<t.length;){for(var a=t[o].interval,r=t[o].close,s=0;s<2;s++)a[s]<=i&&(a[s]=i,r[s]=s?1:1-n),i=a[s],n=r[s];a[0]===a[1]&&r[0]*r[1]!=1?t.splice(o,1):o++}return t}function Ri(t){return t-parseFloat(t)>=0}function Vi(t){return isNaN(t)?\"-\":(t=(t+\"\").split(\".\"))[0].replace(/(\\d{1,3})(?=(?:\\d{3})+(?!\\d))/g,\"$1,\")+(t.length>1?\".\"+t[1]:\"\")}function Bi(t,e){return t=(t||\"\").toLowerCase().replace(/-(.)/g,function(t,e){return e.toUpperCase()}),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}function Gi(t){return String(t).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#39;\")}function Wi(t,e,i){y(e)||(e=[e]);var n=e.length;if(!n)return\"\";for(var o=e[0].$vars||[],a=0;a<o.length;a++){var r=Wx[a],s=Hx(r,0);t=t.replace(Hx(r),i?Gi(s):s)}for(var l=0;l<n;l++)for(var h=0;h<o.length;h++){s=e[l][o[h]];t=t.replace(Hx(Wx[h],l),i?Gi(s):s)}return t}function Hi(t,e,i){return d(e,function(e,n){t=t.replace(\"{\"+n+\"}\",i?Gi(e):e)}),t}function Fi(t,e){return t?'<span style=\"display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:'+Gi(t)+\";\"+(e||\"\")+'\"></span>':\"\"}function Zi(t,e,i){\"week\"!==t&&\"month\"!==t&&\"quarter\"!==t&&\"half-year\"!==t&&\"year\"!==t||(t=\"MM-dd\\nyyyy\");var n=Pi(e),o=i?\"UTC\":\"\",a=n[\"get\"+o+\"FullYear\"](),r=n[\"get\"+o+\"Month\"]()+1,s=n[\"get\"+o+\"Date\"](),l=n[\"get\"+o+\"Hours\"](),h=n[\"get\"+o+\"Minutes\"](),u=n[\"get\"+o+\"Seconds\"]();return t=t.replace(\"MM\",Fx(r)).replace(\"M\",r).replace(\"yyyy\",a).replace(\"yy\",a%100).replace(\"dd\",Fx(s)).replace(\"d\",s).replace(\"hh\",Fx(l)).replace(\"h\",l).replace(\"mm\",Fx(h)).replace(\"m\",h).replace(\"ss\",Fx(u)).replace(\"s\",u)}function Ui(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t}function Xi(t,e,i){return t[Yx+e]=i}function ji(t,e){return t[Yx+e]}function qi(t,e){return t.hasOwnProperty(Yx+e)}function Yi(t){var e={main:\"\",sub:\"\"};return t&&(t=t.split(jx),e.main=t[0]||\"\",e.sub=t[1]||\"\"),e}function $i(t){L(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t),'componentType \"'+t+'\" illegal')}function Ki(t,e){t.$constructor=t,t.extend=function(t){var e=this,i=function(){t.$constructor?t.$constructor.apply(this,arguments):e.apply(this,arguments)};return a(i.prototype,t),i.extend=this.extend,i.superCall=Ji,i.superApply=Qi,h(i,this),i.superClass=e,i}}function Ji(t,e){var i=C(arguments,2);return this.superClass.prototype[e].apply(t,i)}function Qi(t,e,i){return this.superClass.prototype[e].apply(t,i)}function tn(t,e){function i(t){var e=n[t.main];return e&&e[qx]||((e=n[t.main]={})[qx]=!0),e}e=e||{};var n={};if(t.registerClass=function(t,e){return e&&($i(e),(e=Yi(e)).sub?e.sub!==qx&&(i(e)[e.sub]=t):n[e.main]=t),t},t.getClass=function(t,e,i){var o=n[t];if(o&&o[qx]&&(o=e?o[e]:null),i&&!o)throw new Error(e?\"Component \"+t+\".\"+(e||\"\")+\" not exists. Load it first.\":t+\".type should be specified.\");return o},t.getClassesByMainType=function(t){t=Yi(t);var e=[],i=n[t.main];return i&&i[qx]?d(i,function(t,i){i!==qx&&e.push(t)}):e.push(i),e},t.hasClass=function(t){return t=Yi(t),!!n[t.main]},t.getAllClassMainTypes=function(){var t=[];return d(n,function(e,i){t.push(i)}),t},t.hasSubTypes=function(t){t=Yi(t);var e=n[t.main];return e&&e[qx]},t.parseClassType=Yi,e.registerWhenExtend){var o=t.extend;o&&(t.extend=function(e){var i=o.call(this,e);return t.registerClass(i,e.type)})}return t}function en(t){return t>-n_&&t<n_}function nn(t){return t>n_||t<-n_}function on(t,e,i,n,o){var a=1-o;return a*a*(a*t+3*o*e)+o*o*(o*n+3*a*i)}function an(t,e,i,n,o){var a=1-o;return 3*(((e-t)*a+2*(i-e)*o)*a+(n-i)*o*o)}function rn(t,e,i,n,o,a){var r=n+3*(e-i)-t,s=3*(i-2*e+t),l=3*(e-t),h=t-o,u=s*s-3*r*l,c=s*l-9*r*h,d=l*l-3*s*h,f=0;if(en(u)&&en(c))en(s)?a[0]=0:(M=-l/s)>=0&&M<=1&&(a[f++]=M);else{var g=c*c-4*u*d;if(en(g)){var p=c/u,m=-p/2;(M=-s/r+p)>=0&&M<=1&&(a[f++]=M),m>=0&&m<=1&&(a[f++]=m)}else if(g>0){var v=i_(g),y=u*s+1.5*r*(-c+v),x=u*s+1.5*r*(-c-v);(M=(-s-((y=y<0?-e_(-y,r_):e_(y,r_))+(x=x<0?-e_(-x,r_):e_(x,r_))))/(3*r))>=0&&M<=1&&(a[f++]=M)}else{var _=(2*u*s-3*r*c)/(2*i_(u*u*u)),b=Math.acos(_)/3,w=i_(u),S=Math.cos(b),M=(-s-2*w*S)/(3*r),m=(-s+w*(S+a_*Math.sin(b)))/(3*r),I=(-s+w*(S-a_*Math.sin(b)))/(3*r);M>=0&&M<=1&&(a[f++]=M),m>=0&&m<=1&&(a[f++]=m),I>=0&&I<=1&&(a[f++]=I)}}return f}function sn(t,e,i,n,o){var a=6*i-12*e+6*t,r=9*e+3*n-3*t-9*i,s=3*e-3*t,l=0;if(en(r))nn(a)&&(c=-s/a)>=0&&c<=1&&(o[l++]=c);else{var h=a*a-4*r*s;if(en(h))o[0]=-a/(2*r);else if(h>0){var u=i_(h),c=(-a+u)/(2*r),d=(-a-u)/(2*r);c>=0&&c<=1&&(o[l++]=c),d>=0&&d<=1&&(o[l++]=d)}}return l}function ln(t,e,i,n,o,a){var r=(e-t)*o+t,s=(i-e)*o+e,l=(n-i)*o+i,h=(s-r)*o+r,u=(l-s)*o+s,c=(u-h)*o+h;a[0]=t,a[1]=r,a[2]=h,a[3]=c,a[4]=c,a[5]=u,a[6]=l,a[7]=n}function hn(t,e,i,n,o,a,r,s,l,h,u){var c,d,f,g,p,m=.005,v=1/0;s_[0]=l,s_[1]=h;for(var y=0;y<1;y+=.05)l_[0]=on(t,i,o,r,y),l_[1]=on(e,n,a,s,y),(g=uy(s_,l_))<v&&(c=y,v=g);v=1/0;for(var x=0;x<32&&!(m<o_);x++)d=c-m,f=c+m,l_[0]=on(t,i,o,r,d),l_[1]=on(e,n,a,s,d),g=uy(l_,s_),d>=0&&g<v?(c=d,v=g):(h_[0]=on(t,i,o,r,f),h_[1]=on(e,n,a,s,f),p=uy(h_,s_),f<=1&&p<v?(c=f,v=p):m*=.5);return u&&(u[0]=on(t,i,o,r,c),u[1]=on(e,n,a,s,c)),i_(v)}function un(t,e,i,n){var o=1-n;return o*(o*t+2*n*e)+n*n*i}function cn(t,e,i,n){return 2*((1-n)*(e-t)+n*(i-e))}function dn(t,e,i,n,o){var a=t-2*e+i,r=2*(e-t),s=t-n,l=0;if(en(a))nn(r)&&(c=-s/r)>=0&&c<=1&&(o[l++]=c);else{var h=r*r-4*a*s;if(en(h))(c=-r/(2*a))>=0&&c<=1&&(o[l++]=c);else if(h>0){var u=i_(h),c=(-r+u)/(2*a),d=(-r-u)/(2*a);c>=0&&c<=1&&(o[l++]=c),d>=0&&d<=1&&(o[l++]=d)}}return l}function fn(t,e,i){var n=t+i-2*e;return 0===n?.5:(t-e)/n}function gn(t,e,i,n,o){var a=(e-t)*n+t,r=(i-e)*n+e,s=(r-a)*n+a;o[0]=t,o[1]=a,o[2]=s,o[3]=s,o[4]=r,o[5]=i}function pn(t,e,i,n,o,a,r,s,l){var h,u=.005,c=1/0;s_[0]=r,s_[1]=s;for(var d=0;d<1;d+=.05)l_[0]=un(t,i,o,d),l_[1]=un(e,n,a,d),(m=uy(s_,l_))<c&&(h=d,c=m);c=1/0;for(var f=0;f<32&&!(u<o_);f++){var g=h-u,p=h+u;l_[0]=un(t,i,o,g),l_[1]=un(e,n,a,g);var m=uy(l_,s_);if(g>=0&&m<c)h=g,c=m;else{h_[0]=un(t,i,o,p),h_[1]=un(e,n,a,p);var v=uy(h_,s_);p<=1&&v<c?(h=p,c=v):u*=.5}}return l&&(l[0]=un(t,i,o,h),l[1]=un(e,n,a,h)),i_(c)}function mn(t,e,i){if(0!==t.length){var n,o=t[0],a=o[0],r=o[0],s=o[1],l=o[1];for(n=1;n<t.length;n++)o=t[n],a=u_(a,o[0]),r=c_(r,o[0]),s=u_(s,o[1]),l=c_(l,o[1]);e[0]=a,e[1]=s,i[0]=r,i[1]=l}}function vn(t,e,i,n,o,a){o[0]=u_(t,i),o[1]=u_(e,n),a[0]=c_(t,i),a[1]=c_(e,n)}function yn(t,e,i,n,o,a,r,s,l,h){var u,c=sn,d=on,f=c(t,i,o,r,y_);for(l[0]=1/0,l[1]=1/0,h[0]=-1/0,h[1]=-1/0,u=0;u<f;u++){var g=d(t,i,o,r,y_[u]);l[0]=u_(g,l[0]),h[0]=c_(g,h[0])}for(f=c(e,n,a,s,x_),u=0;u<f;u++){var p=d(e,n,a,s,x_[u]);l[1]=u_(p,l[1]),h[1]=c_(p,h[1])}l[0]=u_(t,l[0]),h[0]=c_(t,h[0]),l[0]=u_(r,l[0]),h[0]=c_(r,h[0]),l[1]=u_(e,l[1]),h[1]=c_(e,h[1]),l[1]=u_(s,l[1]),h[1]=c_(s,h[1])}function xn(t,e,i,n,o,a,r,s){var l=fn,h=un,u=c_(u_(l(t,i,o),1),0),c=c_(u_(l(e,n,a),1),0),d=h(t,i,o,u),f=h(e,n,a,c);r[0]=u_(t,o,d),r[1]=u_(e,a,f),s[0]=c_(t,o,d),s[1]=c_(e,a,f)}function _n(t,e,i,n,o,a,r,s,l){var h=K,u=J,c=Math.abs(o-a);if(c%g_<1e-4&&c>1e-4)return s[0]=t-i,s[1]=e-n,l[0]=t+i,void(l[1]=e+n);if(p_[0]=f_(o)*i+t,p_[1]=d_(o)*n+e,m_[0]=f_(a)*i+t,m_[1]=d_(a)*n+e,h(s,p_,m_),u(l,p_,m_),(o%=g_)<0&&(o+=g_),(a%=g_)<0&&(a+=g_),o>a&&!r?a+=g_:o<a&&r&&(o+=g_),r){var d=a;a=o,o=d}for(var f=0;f<a;f+=Math.PI/2)f>o&&(v_[0]=f_(f)*i+t,v_[1]=d_(f)*n+e,h(s,v_,s),u(l,v_,l))}function bn(t,e,i,n,o,a,r){if(0===o)return!1;var s=o,l=0,h=t;if(r>e+s&&r>n+s||r<e-s&&r<n-s||a>t+s&&a>i+s||a<t-s&&a<i-s)return!1;if(t===i)return Math.abs(a-t)<=s/2;var u=(l=(e-n)/(t-i))*a-r+(h=(t*n-i*e)/(t-i));return u*u/(l*l+1)<=s/2*s/2}function wn(t,e,i,n,o,a,r,s,l,h,u){if(0===l)return!1;var c=l;return!(u>e+c&&u>n+c&&u>a+c&&u>s+c||u<e-c&&u<n-c&&u<a-c&&u<s-c||h>t+c&&h>i+c&&h>o+c&&h>r+c||h<t-c&&h<i-c&&h<o-c&&h<r-c)&&hn(t,e,i,n,o,a,r,s,h,u,null)<=c/2}function Sn(t,e,i,n,o,a,r,s,l){if(0===r)return!1;var h=r;return!(l>e+h&&l>n+h&&l>a+h||l<e-h&&l<n-h&&l<a-h||s>t+h&&s>i+h&&s>o+h||s<t-h&&s<i-h&&s<o-h)&&pn(t,e,i,n,o,a,s,l,null)<=h/2}function Mn(t){return(t%=O_)<0&&(t+=O_),t}function In(t,e,i,n,o,a,r,s,l){if(0===r)return!1;var h=r;s-=t,l-=e;var u=Math.sqrt(s*s+l*l);if(u-h>i||u+h<i)return!1;if(Math.abs(n-o)%z_<1e-4)return!0;if(a){var c=n;n=Mn(o),o=Mn(c)}else n=Mn(n),o=Mn(o);n>o&&(o+=z_);var d=Math.atan2(l,s);return d<0&&(d+=z_),d>=n&&d<=o||d+z_>=n&&d+z_<=o}function Tn(t,e,i,n,o,a){if(a>e&&a>n||a<e&&a<n)return 0;if(n===e)return 0;var r=n<e?1:-1,s=(a-e)/(n-e);return 1!==s&&0!==s||(r=n<e?.5:-.5),s*(i-t)+t>o?r:0}function An(t,e){return Math.abs(t-e)<R_}function Cn(){var t=B_[0];B_[0]=B_[1],B_[1]=t}function Dn(t,e,i,n,o,a,r,s,l,h){if(h>e&&h>n&&h>a&&h>s||h<e&&h<n&&h<a&&h<s)return 0;var u=rn(e,n,a,s,h,V_);if(0===u)return 0;for(var c,d,f=0,g=-1,p=0;p<u;p++){var m=V_[p],v=0===m||1===m?.5:1;on(t,i,o,r,m)<l||(g<0&&(g=sn(e,n,a,s,B_),B_[1]<B_[0]&&g>1&&Cn(),c=on(e,n,a,s,B_[0]),g>1&&(d=on(e,n,a,s,B_[1]))),2==g?m<B_[0]?f+=c<e?v:-v:m<B_[1]?f+=d<c?v:-v:f+=s<d?v:-v:m<B_[0]?f+=c<e?v:-v:f+=s<c?v:-v)}return f}function Ln(t,e,i,n,o,a,r,s){if(s>e&&s>n&&s>a||s<e&&s<n&&s<a)return 0;var l=dn(e,n,a,s,V_);if(0===l)return 0;var h=fn(e,n,a);if(h>=0&&h<=1){for(var u=0,c=un(e,n,a,h),d=0;d<l;d++){f=0===V_[d]||1===V_[d]?.5:1;(g=un(t,i,o,V_[d]))<r||(V_[d]<h?u+=c<e?f:-f:u+=a<c?f:-f)}return u}var f=0===V_[0]||1===V_[0]?.5:1,g=un(t,i,o,V_[0]);return g<r?0:a<e?f:-f}function kn(t,e,i,n,o,a,r,s){if((s-=e)>i||s<-i)return 0;h=Math.sqrt(i*i-s*s);V_[0]=-h,V_[1]=h;var l=Math.abs(n-o);if(l<1e-4)return 0;if(l%E_<1e-4){n=0,o=E_;g=a?1:-1;return r>=V_[0]+t&&r<=V_[1]+t?g:0}if(a){var h=n;n=Mn(o),o=Mn(h)}else n=Mn(n),o=Mn(o);n>o&&(o+=E_);for(var u=0,c=0;c<2;c++){var d=V_[c];if(d+t>r){var f=Math.atan2(s,d),g=a?1:-1;f<0&&(f=E_+f),(f>=n&&f<=o||f+E_>=n&&f+E_<=o)&&(f>Math.PI/2&&f<1.5*Math.PI&&(g=-g),u+=g)}}return u}function Pn(t,e,i,n,o){for(var a=0,r=0,s=0,l=0,h=0,u=0;u<t.length;){var c=t[u++];switch(c===N_.M&&u>1&&(i||(a+=Tn(r,s,l,h,n,o))),1==u&&(l=r=t[u],h=s=t[u+1]),c){case N_.M:r=l=t[u++],s=h=t[u++];break;case N_.L:if(i){if(bn(r,s,t[u],t[u+1],e,n,o))return!0}else a+=Tn(r,s,t[u],t[u+1],n,o)||0;r=t[u++],s=t[u++];break;case N_.C:if(i){if(wn(r,s,t[u++],t[u++],t[u++],t[u++],t[u],t[u+1],e,n,o))return!0}else a+=Dn(r,s,t[u++],t[u++],t[u++],t[u++],t[u],t[u+1],n,o)||0;r=t[u++],s=t[u++];break;case N_.Q:if(i){if(Sn(r,s,t[u++],t[u++],t[u],t[u+1],e,n,o))return!0}else a+=Ln(r,s,t[u++],t[u++],t[u],t[u+1],n,o)||0;r=t[u++],s=t[u++];break;case N_.A:var d=t[u++],f=t[u++],g=t[u++],p=t[u++],m=t[u++],v=t[u++],y=(t[u++],1-t[u++]),x=Math.cos(m)*g+d,_=Math.sin(m)*p+f;u>1?a+=Tn(r,s,x,_,n,o):(l=x,h=_);var b=(n-d)*p/g+d;if(i){if(In(d,f,p,m,m+v,y,e,b,o))return!0}else a+=kn(d,f,p,m,m+v,y,b,o);r=Math.cos(m+v)*g+d,s=Math.sin(m+v)*p+f;break;case N_.R:l=r=t[u++],h=s=t[u++];var x=l+t[u++],_=h+t[u++];if(i){if(bn(l,h,x,h,e,n,o)||bn(x,h,x,_,e,n,o)||bn(x,_,l,_,e,n,o)||bn(l,_,l,h,e,n,o))return!0}else a+=Tn(x,h,x,_,n,o),a+=Tn(l,_,l,h,n,o);break;case N_.Z:if(i){if(bn(r,s,l,h,e,n,o))return!0}else a+=Tn(r,s,l,h,n,o);r=l,s=h}}return i||An(s,h)||(a+=Tn(r,s,l,h,n,o)||0),0!==a}function On(t,e,i){return Pn(t,0,!1,e,i)}function zn(t,e,i,n){return Pn(t,e,!0,i,n)}function Nn(t){je.call(this,t),this.path=null}function En(t,e,i,n,o,a,r,s,l,h,u){var c=l*(J_/180),d=K_(c)*(t-i)/2+$_(c)*(e-n)/2,f=-1*$_(c)*(t-i)/2+K_(c)*(e-n)/2,g=d*d/(r*r)+f*f/(s*s);g>1&&(r*=Y_(g),s*=Y_(g));var p=(o===a?-1:1)*Y_((r*r*(s*s)-r*r*(f*f)-s*s*(d*d))/(r*r*(f*f)+s*s*(d*d)))||0,m=p*r*f/s,v=p*-s*d/r,y=(t+i)/2+K_(c)*m-$_(c)*v,x=(e+n)/2+$_(c)*m+K_(c)*v,_=eb([1,0],[(d-m)/r,(f-v)/s]),b=[(d-m)/r,(f-v)/s],w=[(-1*d-m)/r,(-1*f-v)/s],S=eb(b,w);tb(b,w)<=-1&&(S=J_),tb(b,w)>=1&&(S=0),0===a&&S>0&&(S-=2*J_),1===a&&S<0&&(S+=2*J_),u.addData(h,y,x,r,s,_,S,c,a)}function Rn(t){if(!t)return[];var e,i=t.replace(/-/g,\" -\").replace(/  /g,\" \").replace(/ /g,\",\").replace(/,,/g,\",\");for(e=0;e<q_.length;e++)i=i.replace(new RegExp(q_[e],\"g\"),\"|\"+q_[e]);var n,o=i.split(\"|\"),a=0,r=0,s=new P_,l=P_.CMD;for(e=1;e<o.length;e++){var h,u=o[e],c=u.charAt(0),d=0,f=u.slice(1).replace(/e,-/g,\"e-\").split(\",\");f.length>0&&\"\"===f[0]&&f.shift();for(var g=0;g<f.length;g++)f[g]=parseFloat(f[g]);for(;d<f.length&&!isNaN(f[d])&&!isNaN(f[0]);){var p,m,v,y,x,_,b,w=a,S=r;switch(c){case\"l\":a+=f[d++],r+=f[d++],h=l.L,s.addData(h,a,r);break;case\"L\":a=f[d++],r=f[d++],h=l.L,s.addData(h,a,r);break;case\"m\":a+=f[d++],r+=f[d++],h=l.M,s.addData(h,a,r),c=\"l\";break;case\"M\":a=f[d++],r=f[d++],h=l.M,s.addData(h,a,r),c=\"L\";break;case\"h\":a+=f[d++],h=l.L,s.addData(h,a,r);break;case\"H\":a=f[d++],h=l.L,s.addData(h,a,r);break;case\"v\":r+=f[d++],h=l.L,s.addData(h,a,r);break;case\"V\":r=f[d++],h=l.L,s.addData(h,a,r);break;case\"C\":h=l.C,s.addData(h,f[d++],f[d++],f[d++],f[d++],f[d++],f[d++]),a=f[d-2],r=f[d-1];break;case\"c\":h=l.C,s.addData(h,f[d++]+a,f[d++]+r,f[d++]+a,f[d++]+r,f[d++]+a,f[d++]+r),a+=f[d-2],r+=f[d-1];break;case\"S\":p=a,m=r;var M=s.len(),I=s.data;n===l.C&&(p+=a-I[M-4],m+=r-I[M-3]),h=l.C,w=f[d++],S=f[d++],a=f[d++],r=f[d++],s.addData(h,p,m,w,S,a,r);break;case\"s\":p=a,m=r;var M=s.len(),I=s.data;n===l.C&&(p+=a-I[M-4],m+=r-I[M-3]),h=l.C,w=a+f[d++],S=r+f[d++],a+=f[d++],r+=f[d++],s.addData(h,p,m,w,S,a,r);break;case\"Q\":w=f[d++],S=f[d++],a=f[d++],r=f[d++],h=l.Q,s.addData(h,w,S,a,r);break;case\"q\":w=f[d++]+a,S=f[d++]+r,a+=f[d++],r+=f[d++],h=l.Q,s.addData(h,w,S,a,r);break;case\"T\":p=a,m=r;var M=s.len(),I=s.data;n===l.Q&&(p+=a-I[M-4],m+=r-I[M-3]),a=f[d++],r=f[d++],h=l.Q,s.addData(h,p,m,a,r);break;case\"t\":p=a,m=r;var M=s.len(),I=s.data;n===l.Q&&(p+=a-I[M-4],m+=r-I[M-3]),a+=f[d++],r+=f[d++],h=l.Q,s.addData(h,p,m,a,r);break;case\"A\":v=f[d++],y=f[d++],x=f[d++],_=f[d++],b=f[d++],En(w=a,S=r,a=f[d++],r=f[d++],_,b,v,y,x,h=l.A,s);break;case\"a\":v=f[d++],y=f[d++],x=f[d++],_=f[d++],b=f[d++],En(w=a,S=r,a+=f[d++],r+=f[d++],_,b,v,y,x,h=l.A,s)}}\"z\"!==c&&\"Z\"!==c||(h=l.Z,s.addData(h)),n=h}return s.toStatic(),s}function Vn(t,e){var i=Rn(t);return e=e||{},e.buildPath=function(t){if(t.setData)t.setData(i.data),(e=t.getContext())&&t.rebuildPath(e);else{var e=t;i.rebuildPath(e)}},e.applyTransform=function(t){j_(i,t),this.dirty(!0)},e}function Bn(t,e){return new Nn(Vn(t,e))}function Gn(t,e){return Nn.extend(Vn(t,e))}function Wn(t,e,i,n,o,a,r){var s=.5*(i-t),l=.5*(n-e);return(2*(e-i)+s+l)*r+(-3*(e-i)-2*s-l)*a+s*o+e}function Hn(t,e,i){var n=e.points,o=e.smooth;if(n&&n.length>=2){if(o&&\"spline\"!==o){var a=hb(n,o,i,e.smoothConstraint);t.moveTo(n[0][0],n[0][1]);for(var r=n.length,s=0;s<(i?r:r-1);s++){var l=a[2*s],h=a[2*s+1],u=n[(s+1)%r];t.bezierCurveTo(l[0],l[1],h[0],h[1],u[0],u[1])}}else{\"spline\"===o&&(n=lb(n,i)),t.moveTo(n[0][0],n[0][1]);for(var s=1,c=n.length;s<c;s++)t.lineTo(n[s][0],n[s][1])}i&&t.closePath()}}function Fn(t,e,i){var n=t.cpx2,o=t.cpy2;return null===n||null===o?[(i?an:on)(t.x1,t.cpx1,t.cpx2,t.x2,e),(i?an:on)(t.y1,t.cpy1,t.cpy2,t.y2,e)]:[(i?cn:un)(t.x1,t.cpx1,t.x2,e),(i?cn:un)(t.y1,t.cpy1,t.y2,e)]}function Zn(t){return Nn.extend(t)}function Un(t,e,i,n){var o=Bn(t,e),a=o.getBoundingRect();return i&&(\"center\"===n&&(i=jn(i,a)),qn(o,i)),o}function Xn(t,e,i){var n=new qe({style:{image:t,x:e.x,y:e.y,width:e.width,height:e.height},onload:function(t){if(\"center\"===i){var o={width:t.width,height:t.height};n.setStyle(jn(e,o))}}});return n}function jn(t,e){var i,n=e.width/e.height,o=t.height*n;return i=o<=t.width?t.height:(o=t.width)/n,{x:t.x+t.width/2-o/2,y:t.y+t.height/2-i/2,width:o,height:i}}function qn(t,e){if(t.applyTransform){var i=t.getBoundingRect().calculateTransform(e);t.applyTransform(i)}}function Yn(t){var e=t.shape,i=t.style.lineWidth;return bb(2*e.x1)===bb(2*e.x2)&&(e.x1=e.x2=Kn(e.x1,i,!0)),bb(2*e.y1)===bb(2*e.y2)&&(e.y1=e.y2=Kn(e.y1,i,!0)),t}function $n(t){var e=t.shape,i=t.style.lineWidth,n=e.x,o=e.y,a=e.width,r=e.height;return e.x=Kn(e.x,i,!0),e.y=Kn(e.y,i,!0),e.width=Math.max(Kn(n+a,i,!1)-e.x,0===a?0:1),e.height=Math.max(Kn(o+r,i,!1)-e.y,0===r?0:1),t}function Kn(t,e,i){var n=bb(2*t);return(n+bb(e))%2==0?n/2:(n+(i?1:-1))/2}function Jn(t){return null!=t&&\"none\"!=t}function Qn(t){return\"string\"==typeof t?At(t,-.1):t}function to(t){if(t.__hoverStlDirty){var e=t.style.stroke,i=t.style.fill,n=t.__hoverStl;n.fill=n.fill||(Jn(i)?Qn(i):null),n.stroke=n.stroke||(Jn(e)?Qn(e):null);var o={};for(var a in n)null!=n[a]&&(o[a]=t.style[a]);t.__normalStl=o,t.__hoverStlDirty=!1}}function eo(t){if(!t.__isHover){if(to(t),t.useHoverLayer)t.__zr&&t.__zr.addHover(t,t.__hoverStl);else{var e=t.style,i=e.insideRollbackOpt;i&&xo(e),e.extendFrom(t.__hoverStl),i&&(yo(e,e.insideOriginalTextPosition,i),null==e.textFill&&(e.textFill=i.autoColor)),t.dirty(!1),t.z2+=1}t.__isHover=!0}}function io(t){if(t.__isHover){var e=t.__normalStl;t.useHoverLayer?t.__zr&&t.__zr.removeHover(t):(e&&t.setStyle(e),t.z2-=1),t.__isHover=!1}}function no(t){\"group\"===t.type?t.traverse(function(t){\"group\"!==t.type&&eo(t)}):eo(t)}function oo(t){\"group\"===t.type?t.traverse(function(t){\"group\"!==t.type&&io(t)}):io(t)}function ao(t,e){t.__hoverStl=t.hoverStyle||e||{},t.__hoverStlDirty=!0,t.__isHover&&to(t)}function ro(t){this.__hoverSilentOnTouch&&t.zrByTouch||!this.__isEmphasis&&no(this)}function so(t){this.__hoverSilentOnTouch&&t.zrByTouch||!this.__isEmphasis&&oo(this)}function lo(){this.__isEmphasis=!0,no(this)}function ho(){this.__isEmphasis=!1,oo(this)}function uo(t,e,i){t.__hoverSilentOnTouch=i&&i.hoverSilentOnTouch,\"group\"===t.type?t.traverse(function(t){\"group\"!==t.type&&ao(t,e)}):ao(t,e),t.on(\"mouseover\",ro).on(\"mouseout\",so),t.on(\"emphasis\",lo).on(\"normal\",ho)}function co(t,e,i,n,o,a,r){var s=(o=o||Mb).labelFetcher,l=o.labelDataIndex,h=o.labelDimIndex,u=i.getShallow(\"show\"),c=n.getShallow(\"show\"),d=u||c?T(s?s.getFormattedLabel(l,\"normal\",null,h):null,o.defaultText):null,f=u?d:null,g=c?T(s?s.getFormattedLabel(l,\"emphasis\",null,h):null,d):null;null==f&&null==g||(fo(t,i,a,o),fo(e,n,r,o,!0)),t.text=f,e.text=g}function fo(t,e,i,n,o){return go(t,e,n,o),i&&a(t,i),t.host&&t.host.dirty&&t.host.dirty(!1),t}function go(t,e,i,n){if((i=i||Mb).isRectText){var o=e.getShallow(\"position\")||(n?null:\"inside\");\"outside\"===o&&(o=\"top\"),t.textPosition=o,t.textOffset=e.getShallow(\"offset\");var a=e.getShallow(\"rotate\");null!=a&&(a*=Math.PI/180),t.textRotation=a,t.textDistance=T(e.getShallow(\"distance\"),n?null:5)}var r,s=e.ecModel,l=s&&s.option.textStyle,h=po(e);if(h){r={};for(var u in h)if(h.hasOwnProperty(u)){var c=e.getModel([\"rich\",u]);mo(r[u]={},c,l,i,n)}}return t.rich=r,mo(t,e,l,i,n,!0),i.forceRich&&!i.textStyle&&(i.textStyle={}),t}function po(t){for(var e;t&&t!==t.ecModel;){var i=(t.option||Mb).rich;if(i){e=e||{};for(var n in i)i.hasOwnProperty(n)&&(e[n]=1)}t=t.parentModel}return e}function mo(t,e,i,n,o,a){if(i=!o&&i||Mb,t.textFill=vo(e.getShallow(\"color\"),n)||i.color,t.textStroke=vo(e.getShallow(\"textBorderColor\"),n)||i.textBorderColor,t.textStrokeWidth=T(e.getShallow(\"textBorderWidth\"),i.textBorderWidth),!o){if(a){var r=t.textPosition;t.insideRollback=yo(t,r,n),t.insideOriginalTextPosition=r,t.insideRollbackOpt=n}null==t.textFill&&(t.textFill=n.autoColor)}t.fontStyle=e.getShallow(\"fontStyle\")||i.fontStyle,t.fontWeight=e.getShallow(\"fontWeight\")||i.fontWeight,t.fontSize=e.getShallow(\"fontSize\")||i.fontSize,t.fontFamily=e.getShallow(\"fontFamily\")||i.fontFamily,t.textAlign=e.getShallow(\"align\"),t.textVerticalAlign=e.getShallow(\"verticalAlign\")||e.getShallow(\"baseline\"),t.textLineHeight=e.getShallow(\"lineHeight\"),t.textWidth=e.getShallow(\"width\"),t.textHeight=e.getShallow(\"height\"),t.textTag=e.getShallow(\"tag\"),a&&n.disableBox||(t.textBackgroundColor=vo(e.getShallow(\"backgroundColor\"),n),t.textPadding=e.getShallow(\"padding\"),t.textBorderColor=vo(e.getShallow(\"borderColor\"),n),t.textBorderWidth=e.getShallow(\"borderWidth\"),t.textBorderRadius=e.getShallow(\"borderRadius\"),t.textBoxShadowColor=e.getShallow(\"shadowColor\"),t.textBoxShadowBlur=e.getShallow(\"shadowBlur\"),t.textBoxShadowOffsetX=e.getShallow(\"shadowOffsetX\"),t.textBoxShadowOffsetY=e.getShallow(\"shadowOffsetY\")),t.textShadowColor=e.getShallow(\"textShadowColor\")||i.textShadowColor,t.textShadowBlur=e.getShallow(\"textShadowBlur\")||i.textShadowBlur,t.textShadowOffsetX=e.getShallow(\"textShadowOffsetX\")||i.textShadowOffsetX,t.textShadowOffsetY=e.getShallow(\"textShadowOffsetY\")||i.textShadowOffsetY}function vo(t,e){return\"auto\"!==t?t:e&&e.autoColor?e.autoColor:null}function yo(t,e,i){var n,o=i.useInsideStyle;return null==t.textFill&&!1!==o&&(!0===o||i.isRectText&&e&&\"string\"==typeof e&&e.indexOf(\"inside\")>=0)&&(n={textFill:null,textStroke:t.textStroke,textStrokeWidth:t.textStrokeWidth},t.textFill=\"#fff\",null==t.textStroke&&(t.textStroke=i.autoColor,null==t.textStrokeWidth&&(t.textStrokeWidth=2))),n}function xo(t){var e=t.insideRollback;e&&(t.textFill=e.textFill,t.textStroke=e.textStroke,t.textStrokeWidth=e.textStrokeWidth)}function _o(t,e){var i=e||e.getModel(\"textStyle\");return[t.fontStyle||i&&i.getShallow(\"fontStyle\")||\"\",t.fontWeight||i&&i.getShallow(\"fontWeight\")||\"\",(t.fontSize||i&&i.getShallow(\"fontSize\")||12)+\"px\",t.fontFamily||i&&i.getShallow(\"fontFamily\")||\"sans-serif\"].join(\" \")}function bo(t,e,i,n,o,a){if(\"function\"==typeof o&&(a=o,o=null),n&&n.isAnimationEnabled()){var r=t?\"Update\":\"\",s=n.getShallow(\"animationDuration\"+r),l=n.getShallow(\"animationEasing\"+r),h=n.getShallow(\"animationDelay\"+r);\"function\"==typeof h&&(h=h(o,n.getAnimationDelayParams?n.getAnimationDelayParams(e,o):null)),\"function\"==typeof s&&(s=s(o)),s>0?e.animateTo(i,s,h||0,l,a,!!a):(e.stopAnimation(),e.attr(i),a&&a())}else e.stopAnimation(),e.attr(i),a&&a()}function wo(t,e,i,n,o){bo(!0,t,e,i,n,o)}function So(t,e,i,n,o){bo(!1,t,e,i,n,o)}function Mo(t,e){for(var i=at([]);t&&t!==e;)st(i,t.getLocalTransform(),i),t=t.parent;return i}function Io(t,e,i){return e&&!c(e)&&(e=by.getLocalTransform(e)),i&&(e=ct([],e)),$([],t,e)}function To(t,e,i){var n=0===e[4]||0===e[5]||0===e[0]?1:Math.abs(2*e[4]/e[0]),o=0===e[4]||0===e[5]||0===e[2]?1:Math.abs(2*e[4]/e[2]),a=[\"left\"===t?-n:\"right\"===t?n:0,\"top\"===t?-o:\"bottom\"===t?o:0];return a=Io(a,e,i),Math.abs(a[0])>Math.abs(a[1])?a[0]>0?\"right\":\"left\":a[1]>0?\"bottom\":\"top\"}function Ao(t,e,i,n){function o(t){var e={position:V(t.position),rotation:t.rotation};return t.shape&&(e.shape=a({},t.shape)),e}if(t&&e){var r=function(t){var e={};return t.traverse(function(t){!t.isGroup&&t.anid&&(e[t.anid]=t)}),e}(t);e.traverse(function(t){if(!t.isGroup&&t.anid){var e=r[t.anid];if(e){var n=o(t);t.attr(o(e)),wo(t,n,i,t.dataIndex)}}})}}function Co(t,e){return f(t,function(t){var i=t[0];i=wb(i,e.x),i=Sb(i,e.x+e.width);var n=t[1];return n=wb(n,e.y),n=Sb(n,e.y+e.height),[i,n]})}function Do(t,e,i){var n=(e=a({rectHover:!0},e)).style={strokeNoScale:!0};if(i=i||{x:-1,y:-1,width:2,height:2},t)return 0===t.indexOf(\"image://\")?(n.image=t.slice(8),r(n,i),new qe(e)):Un(t.replace(\"path://\",\"\"),e,i,\"center\")}function Lo(t,e,i){this.parentModel=e,this.ecModel=i,this.option=t}function ko(t,e,i){for(var n=0;n<e.length&&(!e[n]||null!=(t=t&&\"object\"==typeof t?t[e[n]]:null));n++);return null==t&&i&&(t=i.get(e)),t}function Po(t,e){var i=ji(t,\"getParent\");return i?i.call(t,e):t.parentModel}function Oo(t){return t instanceof Array?t:null==t?[]:[t]}function zo(t,e){if(t)for(var i=t.emphasis=t.emphasis||{},n=t.normal=t.normal||{},o=0,a=e.length;o<a;o++){var r=e[o];!i.hasOwnProperty(r)&&n.hasOwnProperty(r)&&(i[r]=n[r])}}function No(t){return t&&(null==t.value?t:t.value)}function Eo(t){return Ob(t)&&!(t instanceof Array)}function Ro(t,e){var i=e&&e.type;return\"ordinal\"===i?t:(\"time\"===i&&\"number\"!=typeof t&&null!=t&&\"-\"!==t&&(t=+Pi(t)),null==t||\"\"===t?NaN:+t)}function Vo(t,e){e=(e||[]).slice();var i=f(t||[],function(t,e){return{exist:t}});return Pb(e,function(t,n){if(Ob(t)){for(o=0;o<i.length;o++)if(!i[o].option&&null!=t.id&&i[o].exist.id===t.id+\"\")return i[o].option=t,void(e[n]=null);for(var o=0;o<i.length;o++){var a=i[o].exist;if(!(i[o].option||null!=a.id&&null!=t.id||null==t.name||Go(t)||Go(a)||a.name!==t.name+\"\"))return i[o].option=t,void(e[n]=null)}}}),Pb(e,function(t,e){if(Ob(t)){for(var n=0;n<i.length;n++){var o=i[n].exist;if(!i[n].option&&!Go(o)&&null==t.id){i[n].option=t;break}}n>=i.length&&i.push({option:t})}}),i}function Bo(t){var e=z();Pb(t,function(t,i){var n=t.exist;n&&e.set(n.id,t)}),Pb(t,function(t,i){var n=t.option;L(!n||null==n.id||!e.get(n.id)||e.get(n.id)===t,\"id duplicates: \"+(n&&n.id)),n&&null!=n.id&&e.set(n.id,t),!t.keyInfo&&(t.keyInfo={})}),Pb(t,function(t,i){var n=t.exist,o=t.option,a=t.keyInfo;if(Ob(o)){if(a.name=null!=o.name?o.name+\"\":n?n.name:\"\\0-\",n)a.id=n.id;else if(null!=o.id)a.id=o.id+\"\";else{var r=0;do{a.id=\"\\0\"+a.name+\"\\0\"+r++}while(e.get(a.id))}e.set(a.id,t)}})}function Go(t){return Ob(t)&&t.id&&0===(t.id+\"\").indexOf(\"\\0_ec_\\0\")}function Wo(t,e){function i(t,e,i){for(var n=0,o=t.length;n<o;n++)for(var a=t[n].seriesId,r=Oo(t[n].dataIndex),s=i&&i[a],l=0,h=r.length;l<h;l++){var u=r[l];s&&s[u]?s[u]=null:(e[a]||(e[a]={}))[u]=1}}function n(t,e){var i=[];for(var o in t)if(t.hasOwnProperty(o)&&null!=t[o])if(e)i.push(+o);else{var a=n(t[o],!0);a.length&&i.push({seriesId:o,dataIndex:a})}return i}var o={},a={};return i(t||[],o),i(e||[],a,o),[n(o),n(a)]}function Ho(t,e){return null!=e.dataIndexInside?e.dataIndexInside:null!=e.dataIndex?y(e.dataIndex)?f(e.dataIndex,function(e){return t.indexOfRawIndex(e)}):t.indexOfRawIndex(e.dataIndex):null!=e.name?y(e.name)?f(e.name,function(e){return t.indexOfName(e)}):t.indexOfName(e.name):void 0}function Fo(t,e,i){if(_(e)){var n={};n[e+\"Index\"]=0,e=n}var o=i&&i.defaultMainType;!o||jo(e,o+\"Index\")||jo(e,o+\"Id\")||jo(e,o+\"Name\")||(e[o+\"Index\"]=0);var a={};return Pb(e,function(n,o){var n=e[o];if(\"dataIndex\"!==o&&\"dataIndexInside\"!==o){var r=o.match(/^(\\w+)(Index|Id|Name)$/)||[],s=r[1],h=(r[2]||\"\").toLowerCase();if(!(!s||!h||null==n||\"index\"===h&&\"none\"===n||i&&i.includeMainTypes&&l(i.includeMainTypes,s)<0)){var u={mainType:s};\"index\"===h&&\"all\"===n||(u[h]=n);var c=t.queryComponents(u);a[s+\"Models\"]=c,a[s+\"Model\"]=c[0]}}else a[o]=n}),a}function Zo(t,e){var i=t.dimensions;e=t.getDimension(e);for(var n=0;n<i.length;n++){var o=t.getDimensionInfo(i[n]);if(o.name===e)return o.coordDim}}function Uo(t,e){var i=[];return Pb(t.dimensions,function(n){var o=t.getDimensionInfo(n);o.coordDim===e&&(i[o.coordDimIndex]=o.name)}),i}function Xo(t,e){var i=[];return Pb(t.dimensions,function(n){var o=t.getDimensionInfo(n),a=o.otherDims[e];null!=a&&!1!==a&&(i[a]=o.name)}),i}function jo(t,e){return t&&t.hasOwnProperty(e)}function qo(t){return[t||\"\",Rb++,Math.random()].join(Vb)}function Yo(t,e,i,n,o){var a=0,r=0;null==n&&(n=1/0),null==o&&(o=1/0);var s=0;e.eachChild(function(l,h){var u,c,d=l.position,f=l.getBoundingRect(),g=e.childAt(h+1),p=g&&g.getBoundingRect();if(\"horizontal\"===t){var m=f.width+(p?-p.x+f.x:0);(u=a+m)>n||l.newline?(a=0,u=m,r+=s+i,s=f.height):s=Math.max(s,f.height)}else{var v=f.height+(p?-p.y+f.y:0);(c=r+v)>o||l.newline?(a+=s+i,r=0,c=v,s=f.width):s=Math.max(s,f.width)}l.newline||(d[0]=a,d[1]=r,\"horizontal\"===t?a=u+i:r=c+i)})}function $o(t,e,i){var n=e.width,o=e.height,a=Si(t.x,n),r=Si(t.y,o),s=Si(t.x2,n),l=Si(t.y2,o);return(isNaN(a)||isNaN(parseFloat(t.x)))&&(a=0),(isNaN(s)||isNaN(parseFloat(t.x2)))&&(s=n),(isNaN(r)||isNaN(parseFloat(t.y)))&&(r=0),(isNaN(l)||isNaN(parseFloat(t.y2)))&&(l=o),i=Gx(i||0),{width:Math.max(s-a-i[1]-i[3],0),height:Math.max(l-r-i[0]-i[2],0)}}function Ko(t,e,i){i=Gx(i||0);var n=e.width,o=e.height,a=Si(t.left,n),r=Si(t.top,o),s=Si(t.right,n),l=Si(t.bottom,o),h=Si(t.width,n),u=Si(t.height,o),c=i[2]+i[0],d=i[1]+i[3],f=t.aspect;switch(isNaN(h)&&(h=n-s-d-a),isNaN(u)&&(u=o-l-c-r),null!=f&&(isNaN(h)&&isNaN(u)&&(f>n/o?h=.8*n:u=.8*o),isNaN(h)&&(h=f*u),isNaN(u)&&(u=h/f)),isNaN(a)&&(a=n-s-h-d),isNaN(r)&&(r=o-l-u-c),t.left||t.right){case\"center\":a=n/2-h/2-i[3];break;case\"right\":a=n-h-d}switch(t.top||t.bottom){case\"middle\":case\"center\":r=o/2-u/2-i[0];break;case\"bottom\":r=o-u-c}a=a||0,r=r||0,isNaN(h)&&(h=n-d-a-(s||0)),isNaN(u)&&(u=o-c-r-(l||0));var g=new jt(a+i[3],r+i[0],h,u);return g.margin=i,g}function Jo(t,e,i,n,o){var a=!o||!o.hv||o.hv[0],s=!o||!o.hv||o.hv[1],l=o&&o.boundingMode||\"all\";if(a||s){var h;if(\"raw\"===l)h=\"group\"===t.type?new jt(0,0,+e.width||0,+e.height||0):t.getBoundingRect();else if(h=t.getBoundingRect(),t.needLocalTransform()){var u=t.getLocalTransform();(h=h.clone()).applyTransform(u)}e=Ko(r({width:h.width,height:h.height},e),i,n);var c=t.position,d=a?e.x-h.x:0,f=s?e.y-h.y:0;t.attr(\"position\",\"raw\"===l?[d,f]:[c[0]+d,c[1]+f])}}function Qo(t,e){return null!=t[Wb[e][0]]||null!=t[Wb[e][1]]&&null!=t[Wb[e][2]]}function ta(t,e,i){function n(i,n){var r={},l=0,h={},u=0;if(Bb(i,function(e){h[e]=t[e]}),Bb(i,function(t){o(e,t)&&(r[t]=h[t]=e[t]),a(r,t)&&l++,a(h,t)&&u++}),s[n])return a(e,i[1])?h[i[2]]=null:a(e,i[2])&&(h[i[1]]=null),h;if(2!==u&&l){if(l>=2)return r;for(var c=0;c<i.length;c++){var d=i[c];if(!o(r,d)&&o(t,d)){r[d]=t[d];break}}return r}return h}function o(t,e){return t.hasOwnProperty(e)}function a(t,e){return null!=t[e]&&\"auto\"!==t[e]}function r(t,e,i){Bb(t,function(t){e[t]=i[t]})}!b(i)&&(i={});var s=i.ignoreSize;!y(s)&&(s=[s,s]);var l=n(Wb[0],0),h=n(Wb[1],1);r(Wb[0],t,l),r(Wb[1],t,h)}function ea(t){return ia({},t)}function ia(t,e){return e&&t&&Bb(Gb,function(i){e.hasOwnProperty(i)&&(t[i]=e[i])}),t}function na(t,e){d(e,function(e,o){Ub.hasClass(o)||(\"object\"==typeof e?t[o]=t[o]?n(t[o],e,!1):i(e):null==t[o]&&(t[o]=e))})}function oa(t){t=t,this.option={},this.option[ew]=1,this._componentsMap=z({series:[]}),this._seriesIndices=null,na(t,this._theme.option),n(t,jb,!1),this.mergeOption(t)}function aa(t,e){y(e)||(e=e?[e]:[]);var i={};return Yb(e,function(e){i[e]=(t.get(e)||[]).slice()}),i}function ra(t,e,i){return e.type?e.type:i?i.subType:Ub.determineSubType(t,e)}function sa(t){return Kb(t,function(t){return t.componentIndex})||[]}function la(t,e){return e.hasOwnProperty(\"subType\")?$b(t,function(t){return t.subType===e.subType}):t}function ha(t){d(nw,function(e){this[e]=m(t[e],t)},this)}function ua(){this._coordinateSystems=[]}function ca(t){this._api=t,this._timelineOptions=[],this._mediaList=[],this._mediaDefault,this._currentMediaIndices=[],this._optionBackup,this._newBaseOption}function da(t,e,i){var n,o,a=[],r=[],s=t.timeline;if(t.baseOption&&(o=t.baseOption),(s||t.options)&&(o=o||{},a=(t.options||[]).slice()),t.media){o=o||{};var l=t.media;aw(l,function(t){t&&t.option&&(t.query?r.push(t):n||(n=t))})}return o||(o=t),o.timeline||(o.timeline=s),aw([o].concat(a).concat(f(r,function(t){return t.option})),function(t){aw(e,function(e){e(t,i)})}),{baseOption:o,timelineOptions:a,mediaDefault:n,mediaList:r}}function fa(t,e,i){var n={width:e,height:i,aspectratio:e/i},o=!0;return d(t,function(t,e){var i=e.match(hw);if(i&&i[1]&&i[2]){var a=i[1],r=i[2].toLowerCase();ga(n[r],t,a)||(o=!1)}}),o}function ga(t,e,i){return\"min\"===i?t>=e:\"max\"===i?t<=e:t===e}function pa(t,e){return t.join(\",\")===e.join(\",\")}function ma(t,e){aw(e=e||{},function(e,i){if(null!=e){var n=t[i];if(Ub.hasClass(i)){e=Oo(e);var o=Vo(n=Oo(n),e);t[i]=sw(o,function(t){return t.option&&t.exist?lw(t.exist,t.option,!0):t.exist||t.option})}else t[i]=lw(n,e,!0)}})}function va(t){var e=t&&t.itemStyle;if(e)for(var i=0,o=dw.length;i<o;i++){var a=dw[i],r=e.normal,s=e.emphasis;r&&r[a]&&(t[a]=t[a]||{},t[a].normal?n(t[a].normal,r[a]):t[a].normal=r[a],r[a]=null),s&&s[a]&&(t[a]=t[a]||{},t[a].emphasis?n(t[a].emphasis,s[a]):t[a].emphasis=s[a],s[a]=null)}}function ya(t,e){var i=cw(t)&&t[e],n=cw(i)&&i.textStyle;if(n)for(var o=0,a=zb.length;o<a;o++){var e=zb[o];n.hasOwnProperty(e)&&(i[e]=n[e])}}function xa(t){cw(t)&&(ya(t,\"normal\"),ya(t,\"emphasis\"))}function _a(t){if(cw(t)){va(t),xa(t.label),xa(t.upperLabel),xa(t.edgeLabel);var e=t.markPoint;va(e),xa(e&&e.label);var i=t.markLine;va(t.markLine),xa(i&&i.label);var n=t.markArea;xa(n&&n.label),ya(t,\"axisLabel\"),ya(t,\"title\"),ya(t,\"detail\");var o=t.data;if(o)for(r=0;r<o.length;r++)va(o[r]),xa(o[r]&&o[r].label);if((e=t.markPoint)&&e.data)for(var a=e.data,r=0;r<a.length;r++)va(a[r]),xa(a[r]&&a[r].label);if((i=t.markLine)&&i.data)for(var s=i.data,r=0;r<s.length;r++)y(s[r])?(va(s[r][0]),xa(s[r][0]&&s[r][0].label),va(s[r][1]),xa(s[r][1]&&s[r][1].label)):(va(s[r]),xa(s[r]&&s[r].label))}}function ba(t){return y(t)?t:t?[t]:[]}function wa(t){return(y(t)?t[0]:t)||{}}function Sa(t,e){e=e.split(\",\");for(var i=t,n=0;n<e.length&&null!=(i=i&&i[e[n]]);n++);return i}function Ma(t,e,i,n){e=e.split(\",\");for(var o,a=t,r=0;r<e.length-1;r++)null==a[o=e[r]]&&(a[o]={}),a=a[o];(n||null==a[e[r]])&&(a[e[r]]=i)}function Ia(t){d(gw,function(e){e[0]in t&&!(e[1]in t)&&(t[e[1]]=t[e[0]])})}function Ta(){this.group=new jy,this.uid=qo(\"viewChart\")}function Aa(t,e){if(t&&(t.trigger(e),\"group\"===t.type))for(var i=0;i<t.childCount();i++)Aa(t.childAt(i),e)}function Ca(t,e,i){var n=Ho(t,e);null!=n?d(Oo(n),function(e){Aa(t.getItemGraphicEl(e),i)}):t.eachItemGraphicEl(function(t){Aa(t,i)})}function Da(t,e,i){function n(){u=(new Date).getTime(),c=null,t.apply(r,s||[])}var o,a,r,s,l,h=0,u=0,c=null;e=e||0;var d=function(){o=(new Date).getTime(),r=this,s=arguments;var t=l||e,d=l||i;l=null,a=o-(d?h:u)-t,clearTimeout(c),d?c=setTimeout(n,t):a>=0?n():c=setTimeout(n,-a),h=o};return d.clear=function(){c&&(clearTimeout(c),c=null)},d.debounceNextCall=function(t){l=t},d}function La(t,e,i,n){var o=t[e];if(o){var a=o[ww]||o,r=o[Mw];if(o[Sw]!==i||r!==n){if(null==i||!n)return t[e]=a;(o=t[e]=Da(a,i,\"debounce\"===n))[ww]=a,o[Mw]=n,o[Sw]=i}return o}}function ka(t,e){var i=t[e];i&&i[ww]&&(t[e]=i[ww])}function Pa(t){return function(e,i,n){e=e&&e.toLowerCase(),fy.prototype[t].call(this,e,i,n)}}function Oa(){fy.call(this)}function za(t,e,n){function o(t,e){return t.prio-e.prio}n=n||{},\"string\"==typeof e&&(e=Uw[e]),this.id,this.group,this._dom=t;var a=this._zr=yi(t,{renderer:n.renderer||\"canvas\",devicePixelRatio:n.devicePixelRatio,width:n.width,height:n.height});this._throttledZrFlush=Da(m(a.flush,a),17),(e=i(e))&&vw(e,!0),this._theme=e,this._chartsViews=[],this._chartsMap={},this._componentsViews=[],this._componentsMap={},this._coordSysMgr=new ua,this._api=$a(this),fy.call(this),this._messageCenter=new Oa,this._initEvents(),this.resize=m(this.resize,this),this._pendingActions=[],ee(Zw,o),ee(Ww,o),a.animation.on(\"frame\",this._onframe,this),k(this)}function Na(t,e,i){var n,o=this._model,a=this._coordSysMgr.getCoordinateSystems();e=Fo(o,e);for(var r=0;r<a.length;r++){var s=a[r];if(s[t]&&null!=(n=s[t](o,e,i)))return n}}function Ea(t,e,i,n,o){function a(n){n&&n.__alive&&n[e]&&n[e](n.__model,r,t._api,i)}var r=t._model;if(n){var s={};s[n+\"Id\"]=i[n+\"Id\"],s[n+\"Index\"]=i[n+\"Index\"],s[n+\"Name\"]=i[n+\"Name\"];var l={mainType:n,query:s};o&&(l.subType=o),r&&r.eachComponent(l,function(e,i){a(t[\"series\"===n?\"_chartsMap\":\"_componentsMap\"][e.__viewId])},t)}else Tw(t._componentsViews.concat(t._chartsViews),a)}function Ra(t,e){var i=t.type,n=t.escapeConnect,o=Bw[i],s=o.actionInfo,l=(s.update||\"update\").split(\":\"),h=l.pop();l=null!=l[0]&&Aw(l[0]),this[Ow]=!0;var u=[t],c=!1;t.batch&&(c=!0,u=f(t.batch,function(e){return e=r(a({},e),t),e.batch=null,e}));var d,g=[],p=\"highlight\"===i||\"downplay\"===i;Tw(u,function(t){d=o.action(t,this._model,this._api),(d=d||a({},t)).type=s.event||d.type,g.push(d),p?Ea(this,h,t,\"series\"):l&&Ea(this,h,t,l.main,l.sub)},this),\"none\"===h||p||l||(this[zw]?(Rw.prepareAndUpdate.call(this,t),this[zw]=!1):Rw[h].call(this,t)),d=c?{type:s.event||i,escapeConnect:n,batch:g}:g[0],this[Ow]=!1,!e&&this._messageCenter.trigger(d.type,d)}function Va(t){for(var e=this._pendingActions;e.length;){var i=e.shift();Ra.call(this,i,t)}}function Ba(t){!t&&this.trigger(\"updated\")}function Ga(t,e,i){var n=this._api;Tw(this._componentsViews,function(o){var a=o.__model;o[t](a,e,n,i),Ya(a,o)},this),e.eachSeries(function(o,a){var r=this._chartsMap[o.__viewId];r[t](o,e,n,i),Ya(o,r),qa(o,r)},this),ja(this._zr,e),Tw(Fw,function(t){t(e,n)})}function Wa(t,e){for(var i=\"component\"===t,n=i?this._componentsViews:this._chartsViews,o=i?this._componentsMap:this._chartsMap,a=this._zr,r=0;r<n.length;r++)n[r].__alive=!1;e[i?\"eachComponent\":\"eachSeries\"](function(t,r){if(i){if(\"series\"===t)return}else r=t;var s=\"_ec_\"+r.id+\"_\"+r.type,l=o[s];if(!l){var h=Aw(r.type),u=i?xw.getClass(h.main,h.sub):Ta.getClass(h.sub);if(!u)return;(l=new u).init(e,this._api),o[s]=l,n.push(l),a.add(l.group)}r.__viewId=l.__id=s,l.__alive=!0,l.__model=r,l.group.__ecComponentInfo={mainType:r.mainType,index:r.componentIndex}},this);for(r=0;r<n.length;){var s=n[r];s.__alive?r++:(a.remove(s.group),s.dispose(e,this._api),n.splice(r,1),delete o[s.__id],s.__id=s.group.__ecComponentInfo=null)}}function Ha(t,e){Tw(Ww,function(i){i.func(t,e)})}function Fa(t){var e={};t.eachSeries(function(t){var i=t.get(\"stack\"),n=t.getData();if(i&&\"list\"===n.type){var o=e[i];e.hasOwnProperty(i)&&o&&(n.stackedOn=o),e[i]=n}})}function Za(t,e){var i=this._api;Tw(Zw,function(n){n.isLayout&&n.func(t,i,e)})}function Ua(t,e,i){var n=this._api;t.clearColorPalette(),t.eachSeries(function(t){t.clearColorPalette()}),Tw(Zw,function(o){(!i||!o.isLayout)&&o.func(t,n,e)})}function Xa(t,e){var i=this._api;Tw(this._componentsViews,function(n){var o=n.__model;n.render(o,t,i,e),Ya(o,n)},this),Tw(this._chartsViews,function(t){t.__alive=!1},this),t.eachSeries(function(n,o){var a=this._chartsMap[n.__viewId];a.__alive=!0,a.render(n,t,i,e),a.group.silent=!!n.get(\"silent\"),Ya(n,a),qa(n,a)},this),ja(this._zr,t),Tw(this._chartsViews,function(e){e.__alive||e.remove(t,i)},this)}function ja(t,e){var i=t.storage,n=0;i.traverse(function(t){t.isGroup||n++}),n>e.get(\"hoverLayerThreshold\")&&!Uv.node&&i.traverse(function(t){t.isGroup||(t.useHoverLayer=!0)})}function qa(t,e){var i=0;e.group.traverse(function(t){\"group\"===t.type||t.ignore||i++});var n=+t.get(\"progressive\"),o=i>t.get(\"progressiveThreshold\")&&n&&!Uv.node;o&&e.group.traverse(function(t){t.isGroup||(t.progressive=o?Math.floor(i++/n):-1,o&&t.stopAnimation(!0))});var a=t.get(\"blendMode\")||null;e.group.traverse(function(t){t.isGroup||t.setStyle(\"blend\",a)})}function Ya(t,e){var i=t.get(\"z\"),n=t.get(\"zlevel\");e.group.traverse(function(t){\"group\"!==t.type&&(null!=i&&(t.z=i),null!=n&&(t.zlevel=n))})}function $a(t){var e=t._coordSysMgr;return a(new ha(t),{getCoordinateSystems:m(e.getCoordinateSystems,e),getComponentByElement:function(e){for(;e;){var i=e.__ecComponentInfo;if(null!=i)return t._model.getComponent(i.mainType,i.index);e=e.parent}}})}function Ka(t){function e(t,e){for(var n=0;n<t.length;n++)t[n][i]=e}var i=\"__connectUpdateStatus\";d(Gw,function(n,o){t._messageCenter.on(o,function(n){if(qw[t.group]&&0!==t[i]){if(n&&n.escapeConnect)return;var o=t.makeActionFromEvent(n),a=[];d(jw,function(e){e!==t&&e.group===t.group&&a.push(e)}),e(a,0),Tw(a,function(t){1!==t[i]&&t.dispatchAction(o)}),e(a,2)}})})}function Ja(t){qw[t]=!1}function Qa(t){var e;return e=t.getAttribute?t.getAttribute(Kw):t[Kw],jw[e]}function tr(t){Hw.push(t)}function er(t,e){\"function\"==typeof t&&(e=t,t=Dw),Ww.push({prio:t,func:e})}function ir(t,e,i){\"function\"==typeof e&&(i=e,e=\"\");var n=b(t)?t.type:[t,t={event:e}][0];t.event=(t.event||n).toLowerCase(),e=t.event,L(Nw.test(n)&&Nw.test(e)),Bw[n]||(Bw[n]={action:i,actionInfo:t}),Gw[e]=n}function nr(t,e){ua.register(t,e)}function or(t,e){\"function\"==typeof t&&(e=t,t=Lw),Zw.push({prio:t,func:e,isLayout:!0})}function ar(t,e){\"function\"==typeof t&&(e=t,t=kw),Zw.push({prio:t,func:e})}function rr(t,e){Xw[t]=e}function sr(t){return Ub.extend(t)}function lr(t){return xw.extend(t)}function hr(t){return yw.extend(t)}function ur(t){return Ta.extend(t)}function cr(t){return Jw[t]}function dr(t){return t}function fr(t,e,i,n,o){this._old=t,this._new=e,this._oldKeyGetter=i||dr,this._newKeyGetter=n||dr,this.context=o}function gr(t,e,i,n,o){for(var a=0;a<t.length;a++){var r=\"_ec_\"+o[n](t[a],a),s=e[r];null==s?(i.push(r),e[r]=a):(s.length||(e[r]=s=[s]),s.push(a))}}function pr(t,e){d(oS.concat(e.__wrappedMethods||[]),function(i){e.hasOwnProperty(i)&&(t[i]=e[i])}),t.__wrappedMethods=e.__wrappedMethods}function mr(t){this._array=t||[]}function vr(t){return y(t)||(t=[t]),t}function yr(t,e){var i=t.dimensions,n=new aS(f(i,t.getDimensionInfo,t),t.hostModel);pr(n,t);for(var o=n._storage={},a=t._storage,r=0;r<i.length;r++){var s=i[r],h=a[s];l(e,s)>=0?o[s]=new h.constructor(a[s].length):o[s]=a[s]}return n}function xr(t,e,n){function o(t,e,i){cS[e]?t.otherDims[e]=i:(t.coordDim=e,t.coordDimIndex=i,h.set(e,!0))}function a(t,e,i){if(i||null!=e.get(t)){for(var n=0;null!=e.get(t+n);)n++;t+=n}return e.set(t,!0),t}e=e||[],n=n||{},t=(t||[]).slice();var r=(n.dimsDef||[]).slice(),s=z(n.encodeDef),l=z(),h=z(),u=[],c=n.dimCount;if(null==c){var d=_r(e[0]);c=Math.max(y(d)&&d.length||1,t.length,r.length),lS(t,function(t){var e=t.dimsDef;e&&(c=Math.max(c,e.length))})}for(var f=0;f<c;f++){var g=hS(r[f])?{name:r[f]}:r[f]||{},p=g.name,m=u[f]={otherDims:{}};null!=p&&null==l.get(p)&&(m.name=m.tooltipName=p,l.set(p,f)),null!=g.type&&(m.type=g.type)}s.each(function(t,e){t=s.set(e,Oo(t).slice()),lS(t,function(i,n){hS(i)&&(i=l.get(i)),null!=i&&i<c&&(t[n]=i,o(u[i],e,n))})});var v=0;lS(t,function(t,e){var n,t,a,r;hS(t)?(n=t,t={}):(n=t.name,t=i(t),a=t.dimsDef,r=t.otherDims,t.name=t.coordDim=t.coordDimIndex=t.dimsDef=t.otherDims=null);var l=Oo(s.get(n));if(!l.length)for(var h=0;h<(a&&a.length||1);h++){for(;v<u.length&&null!=u[v].coordDim;)v++;v<u.length&&l.push(v++)}lS(l,function(e,i){var s=u[e];o(uS(s,t),n,i),null==s.name&&a&&(s.name=s.tooltipName=a[i]),r&&uS(s.otherDims,r)})});for(var x=n.extraPrefix||\"value\",_=0;_<c;_++)null==(m=u[_]=u[_]||{}).coordDim&&(m.coordDim=a(x,h,n.extraFromZero),m.coordDimIndex=0,m.isExtraCoord=!0),null==m.name&&(m.name=a(m.coordDim,l)),null==m.type&&dS(e,_)&&(m.type=\"ordinal\");return u}function _r(t){return y(t)?t:b(t)?t.value:t}function br(t){for(var e=0;e<t.length&&null==t[e];)e++;return t[e]}function wr(t){var e=br(t);return null!=e&&!y(No(e))}function Sr(t,e,i){t=t||[];var n=e.get(\"coordinateSystem\"),o=fS[n],a=ua.get(n),r={encodeDef:e.get(\"encode\"),dimsDef:e.get(\"dimensions\")},s=o&&o(t,e,i,r),h=s&&s.dimensions;h||(h=a&&(a.getDimensionsInfo?a.getDimensionsInfo():a.dimensions.slice())||[\"x\",\"y\"],h=xr(h,t,r));var u=s?s.categoryIndex:-1,c=new aS(h,e),d=Tr(s,t),f={},g=u>=0&&wr(t)?function(t,e,i,n){return Eo(t)&&(c.hasItemOption=!0),n===u?i:Ro(No(t),h[n])}:function(t,e,i,n){var o=No(t),a=Ro(o&&o[n],h[n]);Eo(t)&&(c.hasItemOption=!0);var r=s&&s.categoryAxesModels;return r&&r[e]&&\"string\"==typeof a&&(f[e]=f[e]||r[e].getCategories(),(a=l(f[e],a))<0&&!isNaN(a)&&(a=+a)),a};return c.hasItemOption=!1,c.initData(t,d,g),c}function Mr(t){return\"category\"!==t&&\"time\"!==t}function Ir(t){return\"category\"===t?\"ordinal\":\"time\"===t?\"time\":\"float\"}function Tr(t,e){var i,n=[],o=t&&t.dimensions[t.categoryIndex];if(o&&(i=t.categoryAxesModels[o.name]),i){var a=i.getCategories();if(a){var r=e.length;if(y(e[0])&&e[0].length>1){n=[];for(var s=0;s<r;s++)n[s]=a[e[s][t.categoryIndex||0]]}else n=a.slice(0)}}return n}function Ar(t){this._setting=t||{},this._extent=[1/0,-1/0],this._interval=0,this.init&&this.init.apply(this,arguments)}function Cr(t,e,i,n){var o={},a=t[1]-t[0],r=o.interval=Ni(a/e,!0);null!=i&&r<i&&(r=o.interval=i),null!=n&&r>n&&(r=o.interval=n);var s=o.intervalPrecision=Dr(r);return kr(o.niceTickExtent=[mS(Math.ceil(t[0]/r)*r,s),mS(Math.floor(t[1]/r)*r,s)],t),o}function Dr(t){return Ai(t)+2}function Lr(t,e,i){t[e]=Math.max(Math.min(t[e],i[1]),i[0])}function kr(t,e){!isFinite(t[0])&&(t[0]=e[0]),!isFinite(t[1])&&(t[1]=e[1]),Lr(t,0,e),Lr(t,1,e),t[0]>t[1]&&(t[0]=t[1])}function Pr(t,e,i,n){var o=[];if(!t)return o;e[0]<i[0]&&o.push(e[0]);for(var a=i[0];a<=i[1]&&(o.push(a),(a=mS(a+t,n))!==o[o.length-1]);)if(o.length>1e4)return[];return e[1]>(o.length?o[o.length-1]:i[1])&&o.push(e[1]),o}function Or(t,e){return CS(t,AS(e))}function zr(t,e){var i,n,o,a=t.type,r=e.getMin(),s=e.getMax(),l=null!=r,h=null!=s,u=t.getExtent();return\"ordinal\"===a?i=(e.get(\"data\")||[]).length:(y(n=e.get(\"boundaryGap\"))||(n=[n||0,n||0]),\"boolean\"==typeof n[0]&&(n=[0,0]),n[0]=Si(n[0],1),n[1]=Si(n[1],1),o=u[1]-u[0]||Math.abs(u[0])),null==r&&(r=\"ordinal\"===a?i?0:NaN:u[0]-n[0]*o),null==s&&(s=\"ordinal\"===a?i?i-1:NaN:u[1]+n[1]*o),\"dataMin\"===r?r=u[0]:\"function\"==typeof r&&(r=r({min:u[0],max:u[1]})),\"dataMax\"===s?s=u[1]:\"function\"==typeof s&&(s=s({min:u[0],max:u[1]})),(null==r||!isFinite(r))&&(r=NaN),(null==s||!isFinite(s))&&(s=NaN),t.setBlank(M(r)||M(s)),e.getNeedCrossZero()&&(r>0&&s>0&&!l&&(r=0),r<0&&s<0&&!h&&(s=0)),[r,s]}function Nr(t,e){var i=zr(t,e),n=null!=e.getMin(),o=null!=e.getMax(),a=e.get(\"splitNumber\");\"log\"===t.type&&(t.base=e.get(\"logBase\"));var r=t.type;t.setExtent(i[0],i[1]),t.niceExtent({splitNumber:a,fixMin:n,fixMax:o,minInterval:\"interval\"===r||\"time\"===r?e.get(\"minInterval\"):null,maxInterval:\"interval\"===r||\"time\"===r?e.get(\"maxInterval\"):null});var s=e.get(\"interval\");null!=s&&t.setInterval&&t.setInterval(s)}function Er(t,e){if(e=e||t.get(\"type\"))switch(e){case\"category\":return new pS(t.getCategories(),[1/0,-1/0]);case\"value\":return new yS;default:return(Ar.getClass(e)||yS).create(t)}}function Rr(t,e,i,n,o){var a,r=0,s=0,l=(n-o)/180*Math.PI,h=1;e.length>40&&(h=Math.floor(e.length/40));for(var u=0;u<t.length;u+=h){var c=t[u],d=de(e[u],i,\"center\",\"top\");d.x+=c*Math.cos(l),d.y+=c*Math.sin(l),d.width*=1.3,d.height*=1.3,a?a.intersect(d)?(s++,r=Math.max(r,s)):(a.union(d),s=0):a=d.clone()}return 0===r&&h>1?h:(r+1)*h-1}function Vr(t,e){var i=t.scale,n=i.getTicksLabels(),o=i.getTicks();return\"string\"==typeof e?(e=function(t){return function(e){return t.replace(\"{value}\",null!=e?e:\"\")}}(e),f(n,e)):\"function\"==typeof e?f(o,function(i,n){return e(Br(t,i),n)},this):n}function Br(t,e){return\"category\"===t.type?t.scale.getLabel(e):e}function Gr(t){return b(t)&&null!=t.value?t.value:t+\"\"}function Wr(t,e){if(\"image\"!==this.type){var i=this.style,n=this.shape;n&&\"line\"===n.symbolType?i.stroke=t:this.__isEmptyBrush?(i.stroke=t,i.fill=e||\"#fff\"):(i.fill&&(i.fill=t),i.stroke&&(i.stroke=t)),this.dirty(!1)}}function Hr(t,e,i,n,o,a,r){var s=0===t.indexOf(\"empty\");s&&(t=t.substr(5,1).toLowerCase()+t.substr(6));var l;return l=0===t.indexOf(\"image://\")?Xn(t.slice(8),new jt(e,i,n,o),r?\"center\":\"cover\"):0===t.indexOf(\"path://\")?Un(t.slice(7),{},new jt(e,i,n,o),r?\"center\":\"cover\"):new WS({shape:{symbolType:t,x:e,y:i,width:n,height:o}}),l.__isEmptyBrush=s,l.setColor=Wr,l.setColor(a),l}function Fr(t,e){var i=(t[1]-t[0])/e/2;t[0]+=i,t[1]-=i}function Zr(t,e){return Math.abs(t-e)<XS}function Ur(t,e,i){var n=0,o=t[0];if(!o)return!1;for(var a=1;a<t.length;a++){var r=t[a];n+=Tn(o[0],o[1],r[0],r[1],e,i),o=r}var s=t[0];return Zr(o[0],s[0])&&Zr(o[1],s[1])||(n+=Tn(o[0],o[1],s[0],s[1],e,i)),0!==n}function Xr(t,e,i){if(this.name=t,this.geometries=e,i)i=[i[0],i[1]];else{var n=this.getBoundingRect();i=[n.x+n.width/2,n.y+n.height/2]}this.center=i}function jr(t){if(!t.UTF8Encoding)return t;var e=t.UTF8Scale;null==e&&(e=1024);for(var i=t.features,n=0;n<i.length;n++)for(var o=i[n].geometry,a=o.coordinates,r=o.encodeOffsets,s=0;s<a.length;s++){var l=a[s];if(\"Polygon\"===o.type)a[s]=qr(l,r[s],e);else if(\"MultiPolygon\"===o.type)for(var h=0;h<l.length;h++){var u=l[h];l[h]=qr(u,r[s][h],e)}}return t.UTF8Encoding=!1,t}function qr(t,e,i){for(var n=[],o=e[0],a=e[1],r=0;r<t.length;r+=2){var s=t.charCodeAt(r)-64,l=t.charCodeAt(r+1)-64;s=s>>1^-(1&s),l=l>>1^-(1&l),o=s+=o,a=l+=a,n.push([s/i,l/i])}return n}function Yr(t){var e,i=Xo(t,\"label\");if(i.length)e=i[0];else for(var n,o=t.dimensions.slice();o.length&&(e=o.pop(),\"ordinal\"===(n=t.getDimensionInfo(e).type)||\"time\"===n););return e}function $r(t,e){var i=t.getItemVisual(e,\"symbolSize\");return i instanceof Array?i.slice():[+i,+i]}function Kr(t){return[t[0]/2,t[1]/2]}function Jr(t,e,i){jy.call(this),this.updateData(t,e,i)}function Qr(t,e){this.parent.drift(t,e)}function ts(t){this.group=new jy,this._symbolCtor=t||Jr}function es(t,e,i){var n=t.getItemLayout(e);return n&&!isNaN(n[0])&&!isNaN(n[1])&&!(i&&i(e))&&\"none\"!==t.getItemVisual(e,\"symbol\")}function is(t){return t>=0?1:-1}function ns(t,e,i){for(var n,o=t.getBaseAxis(),a=t.getOtherAxis(o),r=o.onZero?0:a.scale.getExtent()[0],s=a.dim,l=\"x\"===s||\"radius\"===s?1:0,h=e.stackedOn,u=e.get(s,i);h&&is(h.get(s,i))===is(u);){n=h;break}var c=[];return c[l]=e.get(o.dim,i),c[1-l]=n?n.get(s,i,!0):r,t.dataToPoint(c)}function os(t,e){var i=[];return e.diff(t).add(function(t){i.push({cmd:\"+\",idx:t})}).update(function(t,e){i.push({cmd:\"=\",idx:e,idx1:t})}).remove(function(t){i.push({cmd:\"-\",idx:t})}).execute(),i}function as(t){return isNaN(t[0])||isNaN(t[1])}function rs(t,e,i,n,o,a,r,s,l,h,u){for(var c=0,d=i,f=0;f<n;f++){var g=e[d];if(d>=o||d<0)break;if(as(g)){if(u){d+=a;continue}break}if(d===i)t[a>0?\"moveTo\":\"lineTo\"](g[0],g[1]),aM(sM,g);else if(l>0){var p=d+a,m=e[p];if(u)for(;m&&as(e[p]);)m=e[p+=a];var v=.5,y=e[c];if(!(m=e[p])||as(m))aM(lM,g);else{as(m)&&!u&&(m=g),H(rM,m,y);var x,_;if(\"x\"===h||\"y\"===h){var b=\"x\"===h?0:1;x=Math.abs(g[b]-y[b]),_=Math.abs(g[b]-m[b])}else x=hy(g,y),_=hy(g,m);oM(lM,g,rM,-l*(1-(v=_/(_+x))))}iM(sM,sM,s),nM(sM,sM,r),iM(lM,lM,s),nM(lM,lM,r),t.bezierCurveTo(sM[0],sM[1],lM[0],lM[1],g[0],g[1]),oM(sM,g,rM,l*v)}else t.lineTo(g[0],g[1]);c=d,d+=a}return f}function ss(t,e){var i=[1/0,1/0],n=[-1/0,-1/0];if(e)for(var o=0;o<t.length;o++){var a=t[o];a[0]<i[0]&&(i[0]=a[0]),a[1]<i[1]&&(i[1]=a[1]),a[0]>n[0]&&(n[0]=a[0]),a[1]>n[1]&&(n[1]=a[1])}return{min:e?i:n,max:e?n:i}}function ls(t,e){if(t.length===e.length){for(var i=0;i<t.length;i++){var n=t[i],o=e[i];if(n[0]!==o[0]||n[1]!==o[1])return}return!0}}function hs(t){return\"number\"==typeof t?t:t?.3:0}function us(t){var e=t.getGlobalExtent();if(t.onBand){var i=t.getBandWidth()/2-1,n=e[1]>e[0]?1:-1;e[0]+=n*i,e[1]-=n*i}return e}function cs(t){return t>=0?1:-1}function ds(t,e){var i=t.getBaseAxis(),n=t.getOtherAxis(i),o=0;if(!i.onZero){var a=n.scale.getExtent();a[0]>0?o=a[0]:a[1]<0&&(o=a[1])}var r=n.dim,s=\"x\"===r||\"radius\"===r?1:0;return e.mapArray([r],function(n,a){for(var l,h=e.stackedOn;h&&cs(h.get(r,a))===cs(n);){l=h;break}var u=[];return u[s]=e.get(i.dim,a),u[1-s]=l?l.get(r,a,!0):o,t.dataToPoint(u)},!0)}function fs(t,e,i){var n=us(t.getAxis(\"x\")),o=us(t.getAxis(\"y\")),a=t.getBaseAxis().isHorizontal(),r=Math.min(n[0],n[1]),s=Math.min(o[0],o[1]),l=Math.max(n[0],n[1])-r,h=Math.max(o[0],o[1])-s,u=i.get(\"lineStyle.normal.width\")||2,c=i.get(\"clipOverflow\")?u/2:Math.max(l,h);a?(s-=c,h+=2*c):(r-=c,l+=2*c);var d=new db({shape:{x:r,y:s,width:l,height:h}});return e&&(d.shape[a?\"width\":\"height\"]=0,So(d,{shape:{width:l,height:h}},i)),d}function gs(t,e,i){var n=t.getAngleAxis(),o=t.getRadiusAxis().getExtent(),a=n.getExtent(),r=Math.PI/180,s=new rb({shape:{cx:t.cx,cy:t.cy,r0:o[0],r:o[1],startAngle:-a[0]*r,endAngle:-a[1]*r,clockwise:n.inverse}});return e&&(s.shape.endAngle=-a[0]*r,So(s,{shape:{endAngle:-a[1]*r}},i)),s}function ps(t,e,i){return\"polar\"===t.type?gs(t,e,i):fs(t,e,i)}function ms(t,e,i){for(var n=e.getBaseAxis(),o=\"x\"===n.dim||\"radius\"===n.dim?0:1,a=[],r=0;r<t.length-1;r++){var s=t[r+1],l=t[r];a.push(l);var h=[];switch(i){case\"end\":h[o]=s[o],h[1-o]=l[1-o],a.push(h);break;case\"middle\":var u=(l[o]+s[o])/2,c=[];h[o]=c[o]=u,h[1-o]=l[1-o],c[1-o]=s[1-o],a.push(h),a.push(c);break;default:h[o]=l[o],h[1-o]=s[1-o],a.push(h)}}return t[r]&&a.push(t[r]),a}function vs(t,e){var i=t.getVisual(\"visualMeta\");if(i&&i.length&&t.count()){for(var n,o=i.length-1;o>=0;o--)if(i[o].dimension<2){n=i[o];break}if(n&&\"cartesian2d\"===e.type){var a=n.dimension,r=t.dimensions[a],s=e.getAxis(r),l=f(n.stops,function(t){return{coord:s.toGlobalCoord(s.dataToCoord(t.value)),color:t.color}}),h=l.length,u=n.outerColors.slice();h&&l[0].coord>l[h-1].coord&&(l.reverse(),u.reverse());var c=l[0].coord-10,g=l[h-1].coord+10,p=g-c;if(p<.001)return\"transparent\";d(l,function(t){t.offset=(t.coord-c)/p}),l.push({offset:h?l[h-1].offset:.5,color:u[1]||\"transparent\"}),l.unshift({offset:h?l[0].offset:.5,color:u[0]||\"transparent\"});var m=new xb(0,0,0,0,l,!0);return m[r]=c,m[r+\"2\"]=g,m}}}function ys(t){return this._axes[t]}function xs(t){pM.call(this,t)}function _s(t,e){return e.type||(e.data?\"category\":\"value\")}function bs(t,e,i){return t.getCoordSysModel()===e}function ws(t,e){var i=e*Math.PI/180,n=t.plain(),o=n.width,a=n.height,r=o*Math.cos(i)+a*Math.sin(i),s=o*Math.sin(i)+a*Math.cos(i);return new jt(n.x,n.y,r,s)}function Ss(t){var e,i=t.model,n=i.getFormattedLabels(),o=i.getModel(\"axisLabel\"),a=1,r=n.length;r>40&&(a=Math.ceil(r/40));for(var s=0;s<r;s+=a)if(!t.isLabelIgnored(s)){var l=ws(o.getTextRect(n[s]),o.get(\"rotate\")||0);e?e.union(l):e=l}return e}function Ms(t,e,i){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(t,e,i),this.model=t}function Is(t,e,i){var n=t[e];if(i.onZero){var o=i.onZeroAxisIndex;if(null==o){for(var a in n)if(n.hasOwnProperty(a)){var r=n[a];if(r&&!Ts(r)){o=+a;break}}null==o&&(i.onZero=!1),i.onZeroAxisIndex=o}else(r=n[o])&&Ts(r)&&(i.onZero=!1)}}function Ts(t){return\"category\"===t.type||\"time\"===t.type||!MM(t)}function As(t,e){var i=t.getExtent(),n=i[0]+i[1];t.toGlobalCoord=\"x\"===t.dim?function(t){return t+e}:function(t){return n-t+e},t.toLocalCoord=\"x\"===t.dim?function(t){return t-e}:function(t){return n-t+e}}function Cs(t,e){return f(AM,function(e){return t.getReferringComponents(e)[0]})}function Ds(t){return\"cartesian2d\"===t.get(\"coordinateSystem\")}function Ls(t){var e={componentType:t.mainType};return e[t.mainType+\"Index\"]=t.componentIndex,e}function ks(t,e,i,n){var o,a,r=Li(i-t.rotation),s=n[0]>n[1],l=\"start\"===e&&!s||\"start\"!==e&&s;return ki(r-CM/2)?(a=l?\"bottom\":\"top\",o=\"center\"):ki(r-1.5*CM)?(a=l?\"top\":\"bottom\",o=\"center\"):(a=\"middle\",o=r<1.5*CM&&r>CM/2?l?\"left\":\"right\":l?\"right\":\"left\"),{rotation:r,textAlign:o,textVerticalAlign:a}}function Ps(t){var e=t.get(\"tooltip\");return t.get(\"silent\")||!(t.get(\"triggerEvent\")||e&&e.show)}function Os(t,e,i){var n=t.get(\"axisLabel.showMinLabel\"),o=t.get(\"axisLabel.showMaxLabel\");e=e||[],i=i||[];var a=e[0],r=e[1],s=e[e.length-1],l=e[e.length-2],h=i[0],u=i[1],c=i[i.length-1],d=i[i.length-2];!1===n?(zs(a),zs(h)):Ns(a,r)&&(n?(zs(r),zs(u)):(zs(a),zs(h))),!1===o?(zs(s),zs(c)):Ns(l,s)&&(o?(zs(l),zs(d)):(zs(s),zs(c)))}function zs(t){t&&(t.ignore=!0)}function Ns(t,e,i){var n=t&&t.getBoundingRect().clone(),o=e&&e.getBoundingRect().clone();if(n&&o){var a=at([]);return ht(a,a,-t.rotation),n.applyTransform(st([],a,t.getLocalTransform())),o.applyTransform(st([],a,e.getLocalTransform())),n.intersect(o)}}function Es(t){return\"middle\"===t||\"center\"===t}function Rs(t,e,i){var n=e.axis;if(e.get(\"axisTick.show\")&&!n.scale.isBlank()){for(var o=e.getModel(\"axisTick\"),a=o.getModel(\"lineStyle\"),s=o.get(\"length\"),l=OM(o,i.labelInterval),h=n.getTicksCoords(o.get(\"alignWithLabel\")),u=n.scale.getTicks(),c=e.get(\"axisLabel.showMinLabel\"),d=e.get(\"axisLabel.showMaxLabel\"),f=[],g=[],p=t._transform,m=[],v=h.length,y=0;y<v;y++)if(!PM(n,y,l,v,c,d)){var x=h[y];f[0]=x,f[1]=0,g[0]=x,g[1]=i.tickDirection*s,p&&($(f,f,p),$(g,g,p));var _=new fb(Yn({anid:\"tick_\"+u[y],shape:{x1:f[0],y1:f[1],x2:g[0],y2:g[1]},style:r(a.getLineStyle(),{stroke:e.get(\"axisLine.lineStyle.color\")}),z2:2,silent:!0}));t.group.add(_),m.push(_)}return m}}function Vs(t,e,i){var n=e.axis;if(I(i.axisLabelShow,e.get(\"axisLabel.show\"))&&!n.scale.isBlank()){var o=e.getModel(\"axisLabel\"),a=o.get(\"margin\"),r=n.scale.getTicks(),s=e.getFormattedLabels(),l=(I(i.labelRotate,o.get(\"rotate\"))||0)*CM/180,h=kM(i.rotation,l,i.labelDirection),u=e.get(\"data\"),c=[],f=Ps(e),g=e.get(\"triggerEvent\"),p=e.get(\"axisLabel.showMinLabel\"),m=e.get(\"axisLabel.showMaxLabel\");return d(r,function(l,d){if(!PM(n,d,i.labelInterval,r.length,p,m)){var v=o;u&&u[l]&&u[l].textStyle&&(v=new Lo(u[l].textStyle,o,e.ecModel));var y=v.getTextColor()||e.get(\"axisLine.lineStyle.color\"),x=[n.dataToCoord(l),i.labelOffset+i.labelDirection*a],_=n.scale.getLabel(l),b=new ib({anid:\"label_\"+l,position:x,rotation:h.rotation,silent:f,z2:10});fo(b.style,v,{text:s[d],textAlign:v.getShallow(\"align\",!0)||h.textAlign,textVerticalAlign:v.getShallow(\"verticalAlign\",!0)||v.getShallow(\"baseline\",!0)||h.textVerticalAlign,textFill:\"function\"==typeof y?y(\"category\"===n.type?_:\"value\"===n.type?l+\"\":l,d):y}),g&&(b.eventData=Ls(e),b.eventData.targetType=\"axisLabel\",b.eventData.value=_),t._dumbGroup.add(b),b.updateTransform(),c.push(b),t.group.add(b),b.decomposeTransform()}}),c}}function Bs(t,e){var i={axesInfo:{},seriesInvolved:!1,coordSysAxesInfo:{},coordSysMap:{}};return Gs(i,t,e),i.seriesInvolved&&Hs(i,t),i}function Gs(t,e,i){var n=e.getComponent(\"tooltip\"),o=e.getComponent(\"axisPointer\"),a=o.get(\"link\",!0)||[],r=[];zM(i.getCoordinateSystems(),function(i){function s(n,s,l){var c=l.model.getModel(\"axisPointer\",o),d=c.get(\"show\");if(d&&(\"auto\"!==d||n||qs(c))){null==s&&(s=c.get(\"triggerTooltip\"));var f=(c=n?Ws(l,u,o,e,n,s):c).get(\"snap\"),g=Ys(l.model),p=s||f||\"category\"===l.type,m=t.axesInfo[g]={key:g,axis:l,coordSys:i,axisPointerModel:c,triggerTooltip:s,involveSeries:p,snap:f,useHandle:qs(c),seriesModels:[]};h[g]=m,t.seriesInvolved|=p;var v=Fs(a,l);if(null!=v){var y=r[v]||(r[v]={axesInfo:{}});y.axesInfo[g]=m,y.mapper=a[v].mapper,m.linkGroup=y}}}if(i.axisPointerEnabled){var l=Ys(i.model),h=t.coordSysAxesInfo[l]={};t.coordSysMap[l]=i;var u=i.model.getModel(\"tooltip\",n);if(zM(i.getAxes(),NM(s,!1,null)),i.getTooltipAxes&&n&&u.get(\"show\")){var c=\"axis\"===u.get(\"trigger\"),d=\"cross\"===u.get(\"axisPointer.type\"),f=i.getTooltipAxes(u.get(\"axisPointer.axis\"));(c||d)&&zM(f.baseAxes,NM(s,!d||\"cross\",c)),d&&zM(f.otherAxes,NM(s,\"cross\",!1))}}})}function Ws(t,e,n,o,a,s){var l=e.getModel(\"axisPointer\"),h={};zM([\"type\",\"snap\",\"lineStyle\",\"shadowStyle\",\"label\",\"animation\",\"animationDurationUpdate\",\"animationEasingUpdate\",\"z\"],function(t){h[t]=i(l.get(t))}),h.snap=\"category\"!==t.type&&!!s,\"cross\"===l.get(\"type\")&&(h.type=\"line\");var u=h.label||(h.label={});if(null==u.show&&(u.show=!1),\"cross\"===a&&(u.show=!0,!s)){var c=h.lineStyle=l.get(\"crossStyle\");c&&r(u,c.textStyle)}return t.model.getModel(\"axisPointer\",new Lo(h,n,o))}function Hs(t,e){e.eachSeries(function(e){var i=e.coordinateSystem,n=e.get(\"tooltip.trigger\",!0),o=e.get(\"tooltip.show\",!0);i&&\"none\"!==n&&!1!==n&&\"item\"!==n&&!1!==o&&!1!==e.get(\"axisPointer.show\",!0)&&zM(t.coordSysAxesInfo[Ys(i.model)],function(t){var n=t.axis;i.getAxis(n.dim)===n&&(t.seriesModels.push(e),null==t.seriesDataCount&&(t.seriesDataCount=0),t.seriesDataCount+=e.getData().count())})},this)}function Fs(t,e){for(var i=e.model,n=e.dim,o=0;o<t.length;o++){var a=t[o]||{};if(Zs(a[n+\"AxisId\"],i.id)||Zs(a[n+\"AxisIndex\"],i.componentIndex)||Zs(a[n+\"AxisName\"],i.name))return o}}function Zs(t,e){return\"all\"===t||y(t)&&l(t,e)>=0||t===e}function Us(t){var e=Xs(t);if(e){var i=e.axisPointerModel,n=e.axis.scale,o=i.option,a=i.get(\"status\"),r=i.get(\"value\");null!=r&&(r=n.parse(r));var s=qs(i);null==a&&(o.status=s?\"show\":\"hide\");var l=n.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==r||r>l[1])&&(r=l[1]),r<l[0]&&(r=l[0]),o.value=r,s&&(o.status=e.axis.scale.isBlank()?\"hide\":\"show\")}}function Xs(t){var e=(t.ecModel.getComponent(\"axisPointer\")||{}).coordSysAxesInfo;return e&&e.axesInfo[Ys(t)]}function js(t){var e=Xs(t);return e&&e.axisPointerModel}function qs(t){return!!t.get(\"handle.show\")}function Ys(t){return t.type+\"||\"+t.id}function $s(t,e,i,n,o,a){var r=EM.getAxisPointerClass(t.axisPointerClass);if(r){var s=js(e);s?(t._axisPointer||(t._axisPointer=new r)).render(e,s,n,a):Ks(t,n)}}function Ks(t,e,i){var n=t._axisPointer;n&&n.dispose(e,i),t._axisPointer=null}function Js(t,e,i){i=i||{};var n=t.coordinateSystem,o=e.axis,a={},r=o.position,s=o.onZero?\"onZero\":r,l=o.dim,h=n.getRect(),u=[h.x,h.x+h.width,h.y,h.y+h.height],c={left:0,right:1,top:0,bottom:1,onZero:2},d=e.get(\"offset\")||0,f=\"x\"===l?[u[2]-d,u[3]+d]:[u[0]-d,u[1]+d];if(o.onZero){var g=n.getAxis(\"x\"===l?\"y\":\"x\",o.onZeroAxisIndex),p=g.toGlobalCoord(g.dataToCoord(0));f[c.onZero]=Math.max(Math.min(p,f[1]),f[0])}a.position=[\"y\"===l?f[c[s]]:u[0],\"x\"===l?f[c[s]]:u[3]],a.rotation=Math.PI/2*(\"x\"===l?0:1);var m={top:-1,bottom:1,left:-1,right:1};a.labelDirection=a.tickDirection=a.nameDirection=m[r],a.labelOffset=o.onZero?f[c[r]]-f[c.onZero]:0,e.get(\"axisTick.inside\")&&(a.tickDirection=-a.tickDirection),I(i.labelInside,e.get(\"axisLabel.inside\"))&&(a.labelDirection=-a.labelDirection);var v=e.get(\"axisLabel.rotate\");return a.labelRotate=\"top\"===s?-v:v,a.labelInterval=o.getLabelInterval(),a.z2=1,a}function Qs(t){return t.get(\"stack\")||FM+t.seriesIndex}function tl(t){return t.dim+t.index}function el(t,e){return il(f(t,function(t){var e=t.getData(),i=t.coordinateSystem.getBaseAxis(),n=i.getExtent(),o=\"category\"===i.type?i.getBandWidth():Math.abs(n[1]-n[0])/e.count();return{bandWidth:o,barWidth:Si(t.get(\"barWidth\"),o),barMaxWidth:Si(t.get(\"barMaxWidth\"),o),barGap:t.get(\"barGap\"),barCategoryGap:t.get(\"barCategoryGap\"),axisKey:tl(i),stackId:Qs(t)}}),e)}function il(t,e){var i={};d(t,function(t,e){var n=t.axisKey,o=t.bandWidth,a=i[n]||{bandWidth:o,remainedWidth:o,autoWidthCount:0,categoryGap:\"20%\",gap:\"30%\",stacks:{}},r=a.stacks;i[n]=a;var s=t.stackId;r[s]||a.autoWidthCount++,r[s]=r[s]||{width:0,maxWidth:0};var l=t.barWidth;l&&!r[s].width&&(r[s].width=l,l=Math.min(a.remainedWidth,l),a.remainedWidth-=l);var h=t.barMaxWidth;h&&(r[s].maxWidth=h);var u=t.barGap;null!=u&&(a.gap=u);var c=t.barCategoryGap;null!=c&&(a.categoryGap=c)});var n={};return d(i,function(t,e){n[e]={};var i=t.stacks,o=t.bandWidth,a=Si(t.categoryGap,o),r=Si(t.gap,1),s=t.remainedWidth,l=t.autoWidthCount,h=(s-a)/(l+(l-1)*r);h=Math.max(h,0),d(i,function(t,e){var i=t.maxWidth;i&&i<h&&(i=Math.min(i,s),t.width&&(i=Math.min(i,t.width)),s-=i,t.width=i,l--)}),h=(s-a)/(l+(l-1)*r),h=Math.max(h,0);var u,c=0;d(i,function(t,e){t.width||(t.width=h),u=t,c+=t.width*(1+r)}),u&&(c-=u.width*r);var f=-c/2;d(i,function(t,i){n[e][i]=n[e][i]||{offset:f,width:t.width},f+=t.width*(1+r)})}),n}function nl(t,e,i){var n=el(p(e.getSeriesByType(t),function(t){return!e.isSeriesFiltered(t)&&t.coordinateSystem&&\"cartesian2d\"===t.coordinateSystem.type})),o={},a={};e.eachSeriesByType(t,function(t){if(\"cartesian2d\"===t.coordinateSystem.type){var e=t.getData(),i=t.coordinateSystem,r=i.getBaseAxis(),s=Qs(t),l=n[tl(r)][s],h=l.offset,u=l.width,c=i.getOtherAxis(r),d=t.get(\"barMinHeight\")||0,f=r.onZero?c.toGlobalCoord(c.dataToCoord(0)):c.getGlobalExtent()[0],g=[t.coordDimToDataDim(\"x\")[0],t.coordDimToDataDim(\"y\")[0]],p=e.mapArray(g,function(t,e){return i.dataToPoint([t,e])},!0);o[s]=o[s]||[],a[s]=a[s]||[],e.setLayout({offset:h,size:u}),e.each(t.coordDimToDataDim(c.dim)[0],function(t,i){if(!isNaN(t)){o[s][i]||(o[s][i]={p:f,n:f},a[s][i]={p:f,n:f});var n,r,l,g,m=t>=0?\"p\":\"n\",v=p[i],y=o[s][i][m],x=a[s][i][m];c.isHorizontal()?(n=y,r=v[1]+h,l=v[0]-x,g=u,a[s][i][m]+=l,Math.abs(l)<d&&(l=(l<0?-1:1)*d),o[s][i][m]+=l):(n=v[0]+h,r=y,l=u,g=v[1]-x,a[s][i][m]+=g,Math.abs(g)<d&&(g=(g<=0?-1:1)*d),o[s][i][m]+=g),e.setItemLayout(i,{x:n,y:r,width:l,height:g})}},!0)}},this)}function ol(t,e,i,n,o,a,r){co(t,e,i.getModel(\"label.normal\"),i.getModel(\"label.emphasis\"),{labelFetcher:o,labelDataIndex:a,defaultText:o.getRawValue(a),isRectText:!0,autoColor:n}),al(t),al(e)}function al(t,e){\"outside\"===t.textPosition&&(t.textPosition=e)}function rl(t,e,i){i.style.text=null,wo(i,{shape:{width:0}},e,t,function(){i.parent&&i.parent.remove(i)})}function sl(t,e,i){i.style.text=null,wo(i,{shape:{r:i.shape.r0}},e,t,function(){i.parent&&i.parent.remove(i)})}function ll(t,e,i,n,o,a,s,l){var h=e.getItemVisual(i,\"color\"),u=e.getItemVisual(i,\"opacity\"),c=n.getModel(\"itemStyle.normal\"),d=n.getModel(\"itemStyle.emphasis\").getBarItemStyle();l||t.setShape(\"r\",c.get(\"barBorderRadius\")||0),t.useStyle(r({fill:h,opacity:u},c.getBarItemStyle()));var f=n.getShallow(\"cursor\");f&&t.attr(\"cursor\",f);var g=s?o.height>0?\"bottom\":\"top\":o.width>0?\"left\":\"right\";l||ol(t.style,d,n,h,a,i,g),uo(t,d)}function hl(t,e){var i=t.get(jM)||0;return Math.min(i,Math.abs(e.width),Math.abs(e.height))}function ul(t,e,i,n){var o=e.getData(),a=this.dataIndex,r=o.getName(a),s=e.get(\"selectedOffset\");n.dispatchAction({type:\"pieToggleSelect\",from:t,name:r,seriesId:e.id}),o.each(function(t){cl(o.getItemGraphicEl(t),o.getItemLayout(t),e.isSelected(o.getName(t)),s,i)})}function cl(t,e,i,n,o){var a=(e.startAngle+e.endAngle)/2,r=Math.cos(a),s=Math.sin(a),l=i?n:0,h=[r*l,s*l];o?t.animate().when(200,{position:h}).start(\"bounceOut\"):t.attr(\"position\",h)}function dl(t,e){function i(){a.ignore=a.hoverIgnore,r.ignore=r.hoverIgnore}function n(){a.ignore=a.normalIgnore,r.ignore=r.normalIgnore}jy.call(this);var o=new rb({z2:2}),a=new cb,r=new ib;this.add(o),this.add(a),this.add(r),this.updateData(t,e,!0),this.on(\"emphasis\",i).on(\"normal\",n).on(\"mouseover\",i).on(\"mouseout\",n)}function fl(t,e,i,n,o,a,r){function s(e,i){for(var n=e;n>=0&&(t[n].y-=i,!(n>0&&t[n].y>t[n-1].y+t[n-1].height));n--);}function l(t,e,i,n,o,a){for(var r=e?Number.MAX_VALUE:0,s=0,l=t.length;s<l;s++)if(\"center\"!==t[s].position){var h=Math.abs(t[s].y-n),u=t[s].len,c=t[s].len2,d=h<o+u?Math.sqrt((o+u+c)*(o+u+c)-h*h):Math.abs(t[s].x-i);e&&d>=r&&(d=r-10),!e&&d<=r&&(d=r+10),t[s].x=i+d*a,r=d}}t.sort(function(t,e){return t.y-e.y});for(var h,u=0,c=t.length,d=[],f=[],g=0;g<c;g++)(h=t[g].y-u)<0&&function(e,i,n,o){for(var a=e;a<i;a++)if(t[a].y+=n,a>e&&a+1<i&&t[a+1].y>t[a].y+t[a].height)return void s(a,n/2);s(i-1,n/2)}(g,c,-h),u=t[g].y+t[g].height;r-u<0&&s(c-1,u-r);for(g=0;g<c;g++)t[g].y>=i?f.push(t[g]):d.push(t[g]);l(d,!1,e,i,n,o),l(f,!0,e,i,n,o)}function gl(t,e,i,n,o,a){for(var r=[],s=[],l=0;l<t.length;l++)t[l].x<e?r.push(t[l]):s.push(t[l]);fl(s,e,i,n,1,o,a),fl(r,e,i,n,-1,o,a);for(l=0;l<t.length;l++){var h=t[l].linePoints;if(h){var u=h[1][0]-h[2][0];t[l].x<e?h[2][0]=t[l].x+3:h[2][0]=t[l].x-3,h[1][1]=h[2][1]=t[l].y,h[1][0]=h[2][0]+u}}}function pl(){this.group=new jy,this._symbolEl=new aI({})}function ml(t,e,i){US.call(this,t,e,i),this.type=\"value\",this.angle=0,this.name=\"\",this.model}function vl(t,e,i){this._model=t,this.dimensions=[],this._indicatorAxes=f(t.getIndicatorModels(),function(t,e){var i=\"indicator_\"+e,n=new ml(i,new yS);return n.name=t.get(\"name\"),n.model=t,t.axis=n,this.dimensions.push(i),n},this),this.resize(t,i),this.cx,this.cy,this.r,this.startAngle}function yl(t,e){return r({show:e},t)}function xl(t){return y(t)||(t=[+t,+t]),t}function _l(){by.call(this)}function bl(t){this.name=t,this.zoomLimit,by.call(this),this._roamTransform=new _l,this._viewTransform=new _l,this._center,this._zoom}function wl(t,e,i,n){var o=i.seriesModel,a=o?o.coordinateSystem:null;return a===this?a[t](n):null}function Sl(t,e,i,n,o){bl.call(this,t),this.map=e,this._nameCoordMap=z(),this.loadGeoJson(i,n,o)}function Ml(t,e,i,n){var o=i.geoModel,a=i.seriesModel,r=o?o.coordinateSystem:a?a.coordinateSystem||(a.getReferringComponents(\"geo\")[0]||{}).coordinateSystem:null;return r===this?r[t](n):null}function Il(t,e){var i=t.get(\"boundingCoords\");if(null!=i){var n=i[0],o=i[1];isNaN(n[0])||isNaN(n[1])||isNaN(o[0])||isNaN(o[1])||this.setBoundingRect(n[0],n[1],o[0]-n[0],o[1]-n[1])}var a,r=this.getBoundingRect(),s=t.get(\"layoutCenter\"),l=t.get(\"layoutSize\"),h=e.getWidth(),u=e.getHeight(),c=t.get(\"aspectScale\")||.75,d=r.width/r.height*c,f=!1;s&&l&&(s=[Si(s[0],h),Si(s[1],u)],l=Si(l,Math.min(h,u)),isNaN(s[0])||isNaN(s[1])||isNaN(l)||(f=!0));if(f){var g={};d>1?(g.width=l,g.height=l/d):(g.height=l,g.width=l*d),g.y=s[1]-g.height/2,g.x=s[0]-g.width/2}else(a=t.getBoxLayoutParams()).aspect=d,g=Ko(a,{width:h,height:u});this.setViewRect(g.x,g.y,g.width,g.height),this.setCenter(t.get(\"center\")),this.setZoom(t.get(\"zoom\"))}function Tl(t,e){d(e.get(\"geoCoord\"),function(e,i){t.addGeoCoord(i,e)})}function Al(t,e,i){Ll(t)[e]=i}function Cl(t,e,i){var n=Ll(t);n[e]===i&&(n[e]=null)}function Dl(t,e){return!!Ll(t)[e]}function Ll(t){return t[bI]||(t[bI]={})}function kl(t){this.pointerChecker,this._zr=t,this._opt={};var e=m,n=e(Pl,this),o=e(Ol,this),a=e(zl,this),s=e(Nl,this),l=e(El,this);fy.call(this),this.setPointerChecker=function(t){this.pointerChecker=t},this.enable=function(e,h){this.disable(),this._opt=r(i(h)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,preventDefaultMouseMove:!0}),null==e&&(e=!0),!0!==e&&\"move\"!==e&&\"pan\"!==e||(t.on(\"mousedown\",n),t.on(\"mousemove\",o),t.on(\"mouseup\",a)),!0!==e&&\"scale\"!==e&&\"zoom\"!==e||(t.on(\"mousewheel\",s),t.on(\"pinch\",l))},this.disable=function(){t.off(\"mousedown\",n),t.off(\"mousemove\",o),t.off(\"mouseup\",a),t.off(\"mousewheel\",s),t.off(\"pinch\",l)},this.dispose=this.disable,this.isDragging=function(){return this._dragging},this.isPinching=function(){return this._pinching}}function Pl(t){if(!(hi(t)||t.target&&t.target.draggable)){var e=t.offsetX,i=t.offsetY;this.pointerChecker&&this.pointerChecker(t,e,i)&&(this._x=e,this._y=i,this._dragging=!0)}}function Ol(t){if(!hi(t)&&Vl(this,\"moveOnMouseMove\",t)&&this._dragging&&\"pinch\"!==t.gestureEvent&&!Dl(this._zr,\"globalPan\")){var e=t.offsetX,i=t.offsetY,n=this._x,o=this._y,a=e-n,r=i-o;this._x=e,this._y=i,this._opt.preventDefaultMouseMove&&bx(t.event),this.trigger(\"pan\",a,r,n,o,e,i)}}function zl(t){hi(t)||(this._dragging=!1)}function Nl(t){if(Vl(this,\"zoomOnMouseWheel\",t)&&0!==t.wheelDelta){var e=t.wheelDelta>0?1.1:1/1.1;Rl.call(this,t,e,t.offsetX,t.offsetY)}}function El(t){if(!Dl(this._zr,\"globalPan\")){var e=t.pinchScale>1?1.1:1/1.1;Rl.call(this,t,e,t.pinchX,t.pinchY)}}function Rl(t,e,i,n){this.pointerChecker&&this.pointerChecker(t,i,n)&&(bx(t.event),this.trigger(\"zoom\",e,i,n))}function Vl(t,e,i){var n=t._opt[e];return n&&(!_(n)||i.event[n+\"Key\"])}function Bl(t,e,i){var n=t.target,o=n.position;o[0]+=e,o[1]+=i,n.dirty()}function Gl(t,e,i,n){var o=t.target,a=t.zoomLimit,r=o.position,s=o.scale,l=t.zoom=t.zoom||1;if(l*=e,a){var h=a.min||0,u=a.max||1/0;l=Math.max(Math.min(u,l),h)}var c=l/t.zoom;t.zoom=l,r[0]-=(i-r[0])*(c-1),r[1]-=(n-r[1])*(c-1),s[0]*=c,s[1]*=c,o.dirty()}function Wl(t,e,i){var n=e.getComponentByElement(t.topTarget),o=n&&n.coordinateSystem;return n&&n!==i&&!wI[n.mainType]&&o&&o.model!==i}function Hl(t,e){var i=t.getItemStyle(),n=t.get(\"areaColor\");return null!=n&&(i.fill=n),i}function Fl(t,e,i,n,o){i.off(\"click\"),i.off(\"mousedown\"),e.get(\"selectedMode\")&&(i.on(\"mousedown\",function(){t._mouseDownFlag=!0}),i.on(\"click\",function(a){if(t._mouseDownFlag){t._mouseDownFlag=!1;for(var r=a.target;!r.__regions;)r=r.parent;if(r){var s={type:(\"geo\"===e.mainType?\"geo\":\"map\")+\"ToggleSelect\",batch:f(r.__regions,function(t){return{name:t.name,from:o.uid}})};s[e.mainType+\"Id\"]=e.id,n.dispatchAction(s),Zl(e,i)}}}))}function Zl(t,e){e.eachChild(function(e){d(e.__regions,function(i){e.trigger(t.isSelected(i.name)?\"emphasis\":\"normal\")})})}function Ul(t,e){var i=new jy;this._controller=new kl(t.getZr()),this._controllerHost={target:e?i:null},this.group=i,this._updateGroup=e,this._mouseDownFlag}function Xl(t,e,i){var n=t.getZoom(),o=t.getCenter(),a=e.zoom,r=t.dataToPoint(o);if(null!=e.dx&&null!=e.dy){r[0]-=e.dx,r[1]-=e.dy;o=t.pointToData(r);t.setCenter(o)}if(null!=a){if(i){var s=i.min||0,l=i.max||1/0;a=Math.max(Math.min(n*a,l),s)/n}t.scale[0]*=a,t.scale[1]*=a;var h=t.position,u=(e.originX-h[0])*(a-1),c=(e.originY-h[1])*(a-1);h[0]-=u,h[1]-=c,t.updateTransform();o=t.pointToData(r);t.setCenter(o),t.setZoom(a*n)}return{center:t.getCenter(),zoom:t.getZoom()}}function jl(t,e){var i={},n=[\"value\"];return d(t,function(t){t.each(n,function(e,n){var o=\"ec-\"+t.getName(n);i[o]=i[o]||[],isNaN(e)||i[o].push(e)})}),t[0].map(n,function(n,o){for(var a=\"ec-\"+t[0].getName(o),r=0,s=1/0,l=-1/0,h=i[a].length,u=0;u<h;u++)s=Math.min(s,i[a][u]),l=Math.max(l,i[a][u]),r+=i[a][u];var c;return c=\"min\"===e?s:\"max\"===e?l:\"average\"===e?r/h:r,0===h?NaN:c})}function ql(t){var e=t.mainData,i=t.datas;i||(i={main:e},t.datasAttr={main:\"data\"}),t.datas=t.mainData=null,th(e,i,t),SI(i,function(i){SI(e.TRANSFERABLE_METHODS,function(e){i.wrapMethod(e,v(Yl,t))})}),e.wrapMethod(\"cloneShallow\",v(Kl,t)),SI(e.CHANGABLE_METHODS,function(i){e.wrapMethod(i,v($l,t))}),L(i[e.dataType]===e)}function Yl(t,e){if(Ql(this)){var i=a({},this[MI]);i[this.dataType]=e,th(e,i,t)}else eh(e,this.dataType,this[II],t);return e}function $l(t,e){return t.struct&&t.struct.update(this),e}function Kl(t,e){return SI(e[MI],function(i,n){i!==e&&eh(i.cloneShallow(),n,e,t)}),e}function Jl(t){var e=this[II];return null==t||null==e?e:e[MI][t]}function Ql(t){return t[II]===t}function th(t,e,i){t[MI]={},SI(e,function(e,n){eh(e,n,t,i)})}function eh(t,e,i,n){i[MI][e]=t,t[II]=i,t.dataType=e,n.struct&&(t[n.structAttr]=n.struct,n.struct[n.datasAttr[e]]=t),t.getLinkedData=Jl}function ih(t,e,i){this.root,this.data,this._nodes=[],this.hostModel=t,this.levelModels=f(e||[],function(e){return new Lo(e,t,t.ecModel)}),this.leavesModel=new Lo(i||{},t,t.ecModel)}function nh(t,e){var i=e.children;t.parentNode!==e&&(i.push(t),t.parentNode=e)}function oh(t){t.hierNode={defaultAncestor:null,ancestor:t,prelim:0,modifier:0,change:0,shift:0,i:0,thread:null};for(var e,i,n=[t];e=n.pop();)if(i=e.children,e.isExpand&&i.length)for(var o=i.length-1;o>=0;o--){var a=i[o];a.hierNode={defaultAncestor:null,ancestor:a,prelim:0,modifier:0,change:0,shift:0,i:o,thread:null},n.push(a)}}function ah(t,e){var i=t.isExpand?t.children:[],n=t.parentNode.children,o=t.hierNode.i?n[t.hierNode.i-1]:null;if(i.length){uh(t);var a=(i[0].hierNode.prelim+i[i.length-1].hierNode.prelim)/2;o?(t.hierNode.prelim=o.hierNode.prelim+e(t,o),t.hierNode.modifier=t.hierNode.prelim-a):t.hierNode.prelim=a}else o&&(t.hierNode.prelim=o.hierNode.prelim+e(t,o));t.parentNode.hierNode.defaultAncestor=ch(t,o,t.parentNode.hierNode.defaultAncestor||n[0],e)}function rh(t){var e=t.hierNode.prelim+t.parentNode.hierNode.modifier;t.setLayout({x:e},!0),t.hierNode.modifier+=t.parentNode.hierNode.modifier}function sh(t){return arguments.length?t:mh}function lh(t,e){var i={};return t-=Math.PI/2,i.x=e*Math.cos(t),i.y=e*Math.sin(t),i}function hh(t,e){return Ko(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function uh(t){for(var e=t.children,i=e.length,n=0,o=0;--i>=0;){var a=e[i];a.hierNode.prelim+=n,a.hierNode.modifier+=n,o+=a.hierNode.change,n+=a.hierNode.shift+o}}function ch(t,e,i,n){if(e){for(var o=t,a=t,r=a.parentNode.children[0],s=e,l=o.hierNode.modifier,h=a.hierNode.modifier,u=r.hierNode.modifier,c=s.hierNode.modifier;s=dh(s),a=fh(a),s&&a;){o=dh(o),r=fh(r),o.hierNode.ancestor=t;var d=s.hierNode.prelim+c-a.hierNode.prelim-h+n(s,a);d>0&&(ph(gh(s,t,i),t,d),h+=d,l+=d),c+=s.hierNode.modifier,h+=a.hierNode.modifier,l+=o.hierNode.modifier,u+=r.hierNode.modifier}s&&!dh(o)&&(o.hierNode.thread=s,o.hierNode.modifier+=c-l),a&&!fh(r)&&(r.hierNode.thread=a,r.hierNode.modifier+=h-u,i=t)}return i}function dh(t){var e=t.children;return e.length&&t.isExpand?e[e.length-1]:t.hierNode.thread}function fh(t){var e=t.children;return e.length&&t.isExpand?e[0]:t.hierNode.thread}function gh(t,e,i){return t.hierNode.ancestor.parentNode===e.parentNode?t.hierNode.ancestor:i}function ph(t,e,i){var n=i/(e.hierNode.i-t.hierNode.i);e.hierNode.change-=n,e.hierNode.shift+=i,e.hierNode.modifier+=i,e.hierNode.prelim+=i,t.hierNode.change+=n}function mh(t,e){return t.parentNode===e.parentNode?1:2}function vh(t,e){var i=t.getItemLayout(e);return i&&!isNaN(i.x)&&!isNaN(i.y)&&\"none\"!==t.getItemVisual(e,\"symbol\")}function yh(t,e,i){return i.itemModel=e,i.itemStyle=e.getModel(\"itemStyle.normal\").getItemStyle(),i.hoverItemStyle=e.getModel(\"itemStyle.emphasis\").getItemStyle(),i.lineStyle=e.getModel(\"lineStyle.normal\").getLineStyle(),i.labelModel=e.getModel(\"label.normal\"),i.hoverLabelModel=e.getModel(\"label.emphasis\"),!1===t.isExpand&&0!==t.children.length?i.symbolInnerColor=i.itemStyle.fill:i.symbolInnerColor=\"#fff\",i}function xh(t,e,i,n,o,a){var s=!i,l=t.tree.getNodeByDataIndex(e),a=yh(l,l.getModel(),a),h=t.tree.root,u=l.parentNode===h?l:l.parentNode||l,c=t.getItemGraphicEl(u.dataIndex),d=u.getLayout(),f=c?{x:c.position[0],y:c.position[1],rawX:c.__radialOldRawX,rawY:c.__radialOldRawY}:d,g=l.getLayout();s?(i=new Jr(t,e,a)).attr(\"position\",[f.x,f.y]):i.updateData(t,e,a),i.__radialOldRawX=i.__radialRawX,i.__radialOldRawY=i.__radialRawY,i.__radialRawX=g.rawX,i.__radialRawY=g.rawY,n.add(i),t.setItemGraphicEl(e,i),wo(i,{position:[g.x,g.y]},o);var p=i.getSymbolPath();if(\"radial\"===a.layout){var m,v,y=h.children[0],x=y.getLayout(),_=y.children.length;if(g.x===x.x&&!0===l.isExpand){var b={};b.x=(y.children[0].getLayout().x+y.children[_-1].getLayout().x)/2,b.y=(y.children[0].getLayout().y+y.children[_-1].getLayout().y)/2,(m=Math.atan2(b.y-x.y,b.x-x.x))<0&&(m=2*Math.PI+m),(v=b.x<x.x)&&(m-=Math.PI)}else(m=Math.atan2(g.y-x.y,g.x-x.x))<0&&(m=2*Math.PI+m),0===l.children.length||0!==l.children.length&&!1===l.isExpand?(v=g.x<x.x)&&(m-=Math.PI):(v=g.x>x.x)||(m-=Math.PI);var w=v?\"left\":\"right\";p.setStyle({textPosition:w,textRotation:-m,textOrigin:\"center\",verticalAlign:\"middle\"})}if(l.parentNode&&l.parentNode!==h){var S=i.__edge;S||(S=i.__edge=new pb({shape:bh(a,f,f),style:r({opacity:0},a.lineStyle)})),wo(S,{shape:bh(a,d,g),style:{opacity:1}},o),n.add(S)}}function _h(t,e,i,n,o,a){for(var r,s=t.tree.getNodeByDataIndex(e),l=t.tree.root,a=yh(s,s.getModel(),a),h=s.parentNode===l?s:s.parentNode||s;null==(r=h.getLayout());)h=h.parentNode===l?h:h.parentNode||h;wo(i,{position:[r.x+1,r.y+1]},o,function(){n.remove(i),t.setItemGraphicEl(e,null)}),i.fadeOut(null,{keepLabel:!0});var u=i.__edge;u&&wo(u,{shape:bh(a,r,r),style:{opacity:0}},o,function(){n.remove(u)})}function bh(t,e,i){var n,o,a,r,s=t.orient;if(\"radial\"===t.layout){var l=e.rawX,h=e.rawY,u=i.rawX,c=i.rawY,d=lh(l,h),f=lh(l,h+(c-h)*t.curvature),g=lh(u,c+(h-c)*t.curvature),p=lh(u,c);return{x1:d.x,y1:d.y,x2:p.x,y2:p.y,cpx1:f.x,cpy1:f.y,cpx2:g.x,cpy2:g.y}}var l=e.x,h=e.y,u=i.x,c=i.y;return\"horizontal\"===s&&(n=l+(u-l)*t.curvature,o=h,a=u+(l-u)*t.curvature,r=c),\"vertical\"===s&&(n=l,o=h+(c-h)*t.curvature,a=u,r=c+(h-c)*t.curvature),{x1:l,y1:h,x2:u,y2:c,cpx1:n,cpy1:o,cpx2:a,cpy2:r}}function wh(t,e,i){for(var n,o=[t],a=[];n=o.pop();)if(a.push(n),n.isExpand){var r=n.children;if(r.length)for(var s=0;s<r.length;s++)o.push(r[s])}for(;n=a.pop();)e(n,i)}function Sh(t,e){for(var i,n=[t];i=n.pop();)if(e(i),i.isExpand){var o=i.children;if(o.length)for(var a=o.length-1;a>=0;a--)n.push(o[a])}}function Mh(t,e){if(t&&(\"treemapZoomToNode\"===t.type||\"treemapRootToNode\"===t.type)){var i=e.getData().tree.root,n=t.targetNode;if(n&&i.contains(n))return{node:n};var o=t.targetNodeId;if(null!=o&&(n=i.getNodeById(o)))return{node:n}}}function Ih(t){for(var e=[];t;)(t=t.parentNode)&&e.push(t);return e.reverse()}function Th(t,e){return l(Ih(t),e)>=0}function Ah(t,e){for(var i=[];t;){var n=t.dataIndex;i.push({name:t.name,dataIndex:n,value:e.getRawValue(n)}),t=t.parentNode}return i.reverse(),i}function Ch(t){var e=0;d(t.children,function(t){Ch(t);var i=t.value;y(i)&&(i=i[0]),e+=i});var i=t.value;y(i)&&(i=i[0]),(null==i||isNaN(i))&&(i=e),i<0&&(i=0),y(t.value)?t.value[0]=i:t.value=i}function Dh(t,e){var i=e.get(\"color\");if(i){var n;return d(t=t||[],function(t){var e=new Lo(t),i=e.get(\"color\");(e.get(\"itemStyle.normal.color\")||i&&\"none\"!==i)&&(n=!0)}),n||((t[0]||(t[0]={})).color=i.slice()),t}}function Lh(t){this.group=new jy,t.add(this.group)}function kh(t,e,i,n,o,a){var r=[[o?t:t-CI,e],[t+i,e],[t+i,e+n],[o?t:t-CI,e+n]];return!a&&r.splice(2,0,[t+i+CI,e+n/2]),!o&&r.push([t,e+n/2]),r}function Ph(t,e,i){t.eventData={componentType:\"series\",componentSubType:\"treemap\",seriesIndex:e.componentIndex,seriesName:e.name,seriesType:\"treemap\",selfType:\"breadcrumb\",nodeData:{dataIndex:i&&i.dataIndex,name:i&&i.name},treePathInfo:i&&Ah(i,e)}}function Oh(){var t,e=[],i={};return{add:function(t,n,o,a,r){return _(a)&&(r=a,a=0),!i[t.id]&&(i[t.id]=1,e.push({el:t,target:n,time:o,delay:a,easing:r}),!0)},done:function(e){return t=e,this},start:function(){for(var n=e.length,o=0,a=e.length;o<a;o++){var r=e[o];r.el.animateTo(r.target,r.time,r.delay,r.easing,function(){--n||(e.length=0,i={},t&&t())})}return this}}}function zh(t,e,n,o,r,s,l,h,u,c){function d(t,e){b?!t.invisible&&s.push(t):(e(),t.__tmWillVisible||(t.invisible=!1))}function f(e,n,o,a,r,s){var h=l.getModel(),u=I(t.getFormattedLabel(l.dataIndex,\"normal\",null,null,s?\"upperLabel\":\"label\"),h.get(\"name\"));if(!s&&v.isLeafRoot){var c=t.get(\"drillDownIcon\",!0);u=c?c+\" \"+u:u}var d=h.getModel(s?NI:OI),f=h.getModel(s?EI:zI),g=d.getShallow(\"show\");co(e,n,d,f,{defaultText:g?u:null,autoColor:o,isRectText:!0}),s&&(e.textRect=i(s)),e.truncate=g&&d.get(\"ellipsis\")?{outerWidth:a,outerHeight:r,minChar:2}:null}function g(t,i,o,a){var s=null!=S&&n[t][S],l=r[t];return s?(n[t][S]=null,p(l,s,t)):b||((s=new i({z:Nh(o,a)})).__tmDepth=o,s.__tmStorageName=t,m(l,s,t)),e[t][w]=s}function p(t,e,i){(t[w]={}).old=\"nodeGroup\"===i?e.position.slice():a({},e.shape)}function m(t,e,i){var n=t[w]={},a=l.parentNode;if(a&&(!o||\"drillDown\"===o.direction)){var s=0,h=0,u=r.background[a.getRawIndex()];!o&&u&&u.old&&(s=u.old.width,h=u.old.height),n.old=\"nodeGroup\"===i?[0,h]:{x:s,y:h,width:0,height:0}}n.fadein=\"nodeGroup\"!==i}if(l){var v=l.getLayout();if(v&&v.isInView){var y=v.width,x=v.height,_=v.borderWidth,b=v.invisible,w=l.getRawIndex(),S=h&&h.getRawIndex(),M=l.viewChildren,T=v.upperHeight,A=M&&M.length,C=l.getModel(\"itemStyle.normal\"),D=l.getModel(\"itemStyle.emphasis\"),L=g(\"nodeGroup\",LI);if(L){if(u.add(L),L.attr(\"position\",[v.x||0,v.y||0]),L.__tmNodeWidth=y,L.__tmNodeHeight=x,v.isAboveViewRoot)return L;var k=g(\"background\",kI,c,VI);if(k&&function(e,i,n){i.dataIndex=l.dataIndex,i.seriesIndex=t.seriesIndex,i.setShape({x:0,y:0,width:y,height:x});var o=l.getVisual(\"borderColor\",!0),a=D.get(\"borderColor\");d(i,function(){var t=WI(C);t.fill=o;var e=GI(D);if(e.fill=a,n){var r=y-2*_;f(t,e,o,r,T,{x:_,y:0,width:r,height:T})}else t.text=e.text=null;i.setStyle(t),uo(i,e)}),e.add(i)}(L,k,A&&v.upperHeight),!A){var P=g(\"content\",kI,c,BI);P&&function(e,i){i.dataIndex=l.dataIndex,i.seriesIndex=t.seriesIndex;var n=Math.max(y-2*_,0),o=Math.max(x-2*_,0);i.culling=!0,i.setShape({x:_,y:_,width:n,height:o});var a=l.getVisual(\"color\",!0);d(i,function(){var t=WI(C);t.fill=a;var e=GI(D);f(t,e,a,n,o),i.setStyle(t),uo(i,e)}),e.add(i)}(L,P)}return L}}}}function Nh(t,e){var i=t*RI+e;return(i-1)/i}function Eh(t){var e=t.pieceList;t.hasSpecialVisual=!1,d(e,function(e,i){e.originIndex=i,null!=e.visual&&(t.hasSpecialVisual=!0)})}function Rh(t){var e=t.categories,i=t.visual,n=t.categoryMap={};if(ZI(e,function(t,e){n[t]=e}),!y(i)){var o=[];b(i)?ZI(i,function(t,e){var i=n[e];o[null!=i?i:XI]=t}):o[XI]=i,i=Xh(t,o)}for(var a=e.length-1;a>=0;a--)null==i[a]&&(delete n[e[a]],e.pop())}function Vh(t,e){var i=t.visual,n=[];b(i)?ZI(i,function(t){n.push(t)}):null!=i&&n.push(i);var o={color:1,symbol:1};e||1!==n.length||o.hasOwnProperty(t.type)||(n[1]=n[0]),Xh(t,n)}function Bh(t){return{applyVisual:function(e,i,n){e=this.mapValueToVisual(e),n(\"color\",t(i(\"color\"),e))},_doMap:Zh([0,1])}}function Gh(t){var e=this.option.visual;return e[Math.round(wi(t,[0,1],[0,e.length-1],!0))]||{}}function Wh(t){return function(e,i,n){n(t,this.mapValueToVisual(e))}}function Hh(t){var e=this.option.visual;return e[this.option.loop&&t!==XI?t%e.length:t]}function Fh(){return this.option.visual[0]}function Zh(t){return{linear:function(e){return wi(e,t,this.option.visual,!0)},category:Hh,piecewise:function(e,i){var n=Uh.call(this,i);return null==n&&(n=wi(e,t,this.option.visual,!0)),n},fixed:Fh}}function Uh(t){var e=this.option,i=e.pieceList;if(e.hasSpecialVisual){var n=i[jI.findPieceIndex(t,i)];if(n&&n.visual)return n.visual[this.type]}}function Xh(t,e){return t.visual=e,\"color\"===t.type&&(t.parsedVisual=f(e,function(t){return Mt(t)})),e}function jh(t,e,i){return t?e<=i:e<i}function qh(t,e,i,n,o,a){var r=t.getModel(),s=t.getLayout();if(s&&!s.invisible&&s.isInView){var l,h=t.getModel(KI),u=Yh(h,e,i[t.depth],n),c=h.get(\"borderColor\"),f=h.get(\"borderColorSaturation\");null!=f&&(c=Kh(f,l=$h(u))),t.setVisual(\"borderColor\",c);var g=t.viewChildren;if(g&&g.length){var p=Qh(t,r,s,h,u,g);d(g,function(t,e){(t.depth>=o.length||t===o[t.depth])&&qh(t,eu(r,u,t,e,p,a),i,n,o,a)})}else l=$h(u),t.setVisual(\"color\",l)}}function Yh(t,e,i,n){var o=a({},e);return d([\"color\",\"colorAlpha\",\"colorSaturation\"],function(a){var r=t.get(a,!0);null==r&&i&&(r=i[a]),null==r&&(r=e[a]),null==r&&(r=n.get(a)),null!=r&&(o[a]=r)}),o}function $h(t){var e=Jh(t,\"color\");if(e){var i=Jh(t,\"colorAlpha\"),n=Jh(t,\"colorSaturation\");return n&&(e=kt(e,null,null,n)),i&&(e=Pt(e,i)),e}}function Kh(t,e){return null!=e?kt(e,null,null,t):null}function Jh(t,e){var i=t[e];if(null!=i&&\"none\"!==i)return i}function Qh(t,e,i,n,o,a){if(a&&a.length){var r=tu(e,\"color\")||null!=o.color&&\"none\"!==o.color&&(tu(e,\"colorAlpha\")||tu(e,\"colorSaturation\"));if(r){var s=e.get(\"visualMin\"),l=e.get(\"visualMax\"),h=i.dataExtent.slice();null!=s&&s<h[0]&&(h[0]=s),null!=l&&l>h[1]&&(h[1]=l);var u=e.get(\"colorMappingBy\"),c={type:r.name,dataExtent:h,visual:r.range};\"color\"!==c.type||\"index\"!==u&&\"id\"!==u?c.mappingMethod=\"linear\":(c.mappingMethod=\"category\",c.loop=!0);var d=new jI(c);return d.__drColorMappingBy=u,d}}}function tu(t,e){var i=t.get(e);return $I(i)&&i.length?{name:e,range:i}:null}function eu(t,e,i,n,o,r){var s=a({},e);if(o){var l=o.type,h=\"color\"===l&&o.__drColorMappingBy,u=\"index\"===h?n:\"id\"===h?r.mapIdToIndex(i.getId()):i.getValue(t.get(\"visualDimension\"));s[l]=o.mapValueToVisual(u)}return s}function iu(t,e,i,n){var o,a;if(!t.isRemoved()){var r=t.getLayout();o=r.width,a=r.height;var s=(f=t.getModel()).get(iT),l=f.get(nT)/2,h=du(f),u=Math.max(s,h),c=s-l,d=u-l,f=t.getModel();t.setLayout({borderWidth:s,upperHeight:u,upperLabelHeight:h},!0);var g=(o=JI(o-2*c,0))*(a=JI(a-c-d,0)),p=nu(t,f,g,e,i,n);if(p.length){var m={x:c,y:d,width:o,height:a},v=QI(o,a),y=1/0,x=[];x.area=0;for(var _=0,b=p.length;_<b;){var w=p[_];x.push(w),x.area+=w.getLayout().area;var S=su(x,v,e.squareRatio);S<=y?(_++,y=S):(x.area-=x.pop().getLayout().area,lu(x,v,m,l,!1),v=QI(m.width,m.height),x.length=x.area=0,y=1/0)}if(x.length&&lu(x,v,m,l,!0),!i){var M=f.get(\"childrenVisibleMin\");null!=M&&g<M&&(i=!0)}for(var _=0,b=p.length;_<b;_++)iu(p[_],e,i,n+1)}}}function nu(t,e,i,n,o,a){var r=t.children||[],s=n.sort;\"asc\"!==s&&\"desc\"!==s&&(s=null);var l=null!=n.leafDepth&&n.leafDepth<=a;if(o&&!l)return t.viewChildren=[];au(r=p(r,function(t){return!t.isRemoved()}),s);var h=ru(e,r,s);if(0===h.sum)return t.viewChildren=[];if(h.sum=ou(e,i,h.sum,s,r),0===h.sum)return t.viewChildren=[];for(var u=0,c=r.length;u<c;u++){var d=r[u].getValue()/h.sum*i;r[u].setLayout({area:d})}return l&&(r.length&&t.setLayout({isLeafRoot:!0},!0),r.length=0),t.viewChildren=r,t.setLayout({dataExtent:h.dataExtent},!0),r}function ou(t,e,i,n,o){if(!n)return i;for(var a=t.get(\"visibleMin\"),r=o.length,s=r,l=r-1;l>=0;l--){var h=o[\"asc\"===n?r-l-1:l].getValue();h/i*e<a&&(s=l,i-=h)}return\"asc\"===n?o.splice(0,r-s):o.splice(s,r-s),i}function au(t,e){return e&&t.sort(function(t,i){var n=\"asc\"===e?t.getValue()-i.getValue():i.getValue()-t.getValue();return 0===n?\"asc\"===e?t.dataIndex-i.dataIndex:i.dataIndex-t.dataIndex:n}),t}function ru(t,e,i){for(var n=0,o=0,a=e.length;o<a;o++)n+=e[o].getValue();var r=t.get(\"visualDimension\");if(e&&e.length)if(\"value\"===r&&i)s=[e[e.length-1].getValue(),e[0].getValue()],\"asc\"===i&&s.reverse();else{var s=[1/0,-1/0];eT(e,function(t){var e=t.getValue(r);e<s[0]&&(s[0]=e),e>s[1]&&(s[1]=e)})}else s=[NaN,NaN];return{sum:n,dataExtent:s}}function su(t,e,i){for(var n,o=0,a=1/0,r=0,s=t.length;r<s;r++)(n=t[r].getLayout().area)&&(n<a&&(a=n),n>o&&(o=n));var l=t.area*t.area,h=e*e*i;return l?JI(h*o/l,l/(h*a)):1/0}function lu(t,e,i,n,o){var a=e===i.width?0:1,r=1-a,s=[\"x\",\"y\"],l=[\"width\",\"height\"],h=i[s[a]],u=e?t.area/e:0;(o||u>i[l[r]])&&(u=i[l[r]]);for(var c=0,d=t.length;c<d;c++){var f=t[c],g={},p=u?f.getLayout().area/u:0,m=g[l[r]]=JI(u-2*n,0),v=i[s[a]]+i[l[a]]-h,y=c===d-1||v<p?v:p,x=g[l[a]]=JI(y-2*n,0);g[s[r]]=i[s[r]]+QI(n,m/2),g[s[a]]=h+QI(n,x/2),h+=y,f.setLayout(g,!0)}i[s[r]]+=u,i[l[r]]-=u}function hu(t,e,i,n,o){var a=(e||{}).node,r=[n,o];if(!a||a===i)return r;for(var s,l=n*o,h=l*t.option.zoomToNodeRatio;s=a.parentNode;){for(var u=0,c=s.children,d=0,f=c.length;d<f;d++)u+=c[d].getValue();var g=a.getValue();if(0===g)return r;h*=u/g;var p=s.getModel(),m=p.get(iT);(h+=4*m*m+(3*m+Math.max(m,du(p)))*Math.pow(h,.5))>Rx&&(h=Rx),a=s}h<l&&(h=l);var v=Math.pow(h/l,.5);return[n*v,o*v]}function uu(t,e,i){if(e)return{x:e.x,y:e.y};var n={x:0,y:0};if(!i)return n;var o=i.node,a=o.getLayout();if(!a)return n;for(var r=[a.width/2,a.height/2],s=o;s;){var l=s.getLayout();r[0]+=l.x,r[1]+=l.y,s=s.parentNode}return{x:t.width/2-r[0],y:t.height/2-r[1]}}function cu(t,e,i,n,o){var a=t.getLayout(),r=i[o],s=r&&r===t;if(!(r&&!s||o===i.length&&t!==n)){t.setLayout({isInView:!0,invisible:!s&&!e.intersect(a),isAboveViewRoot:s},!0);var l=new jt(e.x-a.x,e.y-a.y,e.width,e.height);eT(t.viewChildren||[],function(t){cu(t,l,i,n,o+1)})}}function du(t){return t.get(oT)?t.get(aT):0}function fu(t){return\"_EC_\"+t}function gu(t,e){this.id=null==t?\"\":t,this.inEdges=[],this.outEdges=[],this.edges=[],this.hostGraph,this.dataIndex=null==e?-1:e}function pu(t,e,i){this.node1=t,this.node2=e,this.dataIndex=null==i?-1:i}function mu(t){return isNaN(+t.cpx1)||isNaN(+t.cpy1)}function vu(t){return\"_\"+t+\"Type\"}function yu(t,e,i){var n=e.getItemVisual(i,\"color\"),o=e.getItemVisual(i,t),a=e.getItemVisual(i,t+\"Size\");if(o&&\"none\"!==o){y(a)||(a=[a,a]);var r=Hr(o,-a[0]/2,-a[1]/2,a[0],a[1],n);return r.name=t,r}}function xu(t){var e=new fT({name:\"line\"});return _u(e.shape,t),e}function _u(t,e){var i=e[0],n=e[1],o=e[2];t.x1=i[0],t.y1=i[1],t.x2=n[0],t.y2=n[1],t.percent=1,o?(t.cpx1=o[0],t.cpy1=o[1]):(t.cpx1=NaN,t.cpy1=NaN)}function bu(t,e,i){jy.call(this),this._createLine(t,e,i)}function wu(t){return isNaN(t[0])||isNaN(t[1])}function Su(t){return!wu(t[0])&&!wu(t[1])}function Mu(t){this._ctor=t||bu,this.group=new jy}function Iu(t,e,i){for(var n,o=t[0],a=t[1],r=t[2],s=1/0,l=i*i,h=.1,u=.1;u<=.9;u+=.1)vT[0]=_T(o[0],a[0],r[0],u),vT[1]=_T(o[1],a[1],r[1],u),(f=wT(bT(vT,e)-l))<s&&(s=f,n=u);for(var c=0;c<32;c++){var d=n+h;yT[0]=_T(o[0],a[0],r[0],n),yT[1]=_T(o[1],a[1],r[1],n),xT[0]=_T(o[0],a[0],r[0],d),xT[1]=_T(o[1],a[1],r[1],d);var f=bT(yT,e)-l;if(wT(f)<.01)break;var g=bT(xT,e)-l;h/=2,f<0?g>=0?n+=h:n-=h:g>=0?n-=h:n+=h}return n}function Tu(t,e){return t.getVisual(\"opacity\")||t.getModel().get(e)}function Au(t,e,i){var n=t.getGraphicEl(),o=Tu(t,e);null!=i&&(null==o&&(o=1),o*=i),n.downplay&&n.downplay(),n.traverse(function(t){\"group\"!==t.type&&t.setStyle(\"opacity\",o)})}function Cu(t,e){var i=Tu(t,e),n=t.getGraphicEl();n.highlight&&n.highlight(),n.traverse(function(t){\"group\"!==t.type&&t.setStyle(\"opacity\",i)})}function Du(t){return t instanceof Array||(t=[t,t]),t}function Lu(t){var e=t.coordinateSystem;if(!e||\"view\"===e.type){var i=t.getGraph();i.eachNode(function(t){var e=t.getModel();t.setLayout([+e.get(\"x\"),+e.get(\"y\")])}),ku(i)}}function ku(t){t.eachEdge(function(t){var e=t.getModel().get(\"lineStyle.normal.curveness\")||0,i=V(t.node1.getLayout()),n=V(t.node2.getLayout()),o=[i,n];+e&&o.push([(i[0]+n[0])/2-(i[1]-n[1])*e,(i[1]+n[1])/2-(n[0]-i[0])*e]),t.setLayout(o)})}function Pu(t){var e=t.coordinateSystem;if(!e||\"view\"===e.type){var i=e.getBoundingRect(),n=t.getData(),o=n.graph,a=0,r=n.getSum(\"value\"),s=2*Math.PI/(r||n.count()),l=i.width/2+i.x,h=i.height/2+i.y,u=Math.min(i.width,i.height)/2;o.eachNode(function(t){var e=t.getValue(\"value\");a+=s*(r?e:1)/2,t.setLayout([u*Math.cos(a)+l,u*Math.sin(a)+h]),a+=s*(r?e:1)/2}),n.setLayout({cx:l,cy:h}),o.eachEdge(function(t){var e,i=t.getModel().get(\"lineStyle.normal.curveness\")||0,n=V(t.node1.getLayout()),o=V(t.node2.getLayout()),a=(n[0]+o[0])/2,r=(n[1]+o[1])/2;+i&&(e=[l*(i*=3)+a*(1-i),h*i+r*(1-i)]),t.setLayout([n,o,e])})}}function Ou(t,e,i){for(var n=i.rect,o=n.width,a=n.height,r=[n.x+o/2,n.y+a/2],s=null==i.gravity?.1:i.gravity,l=0;l<t.length;l++){var h=t[l];h.p||(h.p=E(o*(Math.random()-.5)+r[0],a*(Math.random()-.5)+r[1])),h.pp=V(h.p),h.edges=null}var u=.6;return{warmUp:function(){u=.5},setFixed:function(e){t[e].fixed=!0},setUnfixed:function(e){t[e].fixed=!1},step:function(i){for(var n=[],o=t.length,a=0;a<e.length;a++){var l=e[a],h=l.n1;H(n,(g=l.n2).p,h.p);var c=F(n)-l.d,d=g.w/(h.w+g.w);isNaN(d)&&(d=0),X(n,n),!h.fixed&&TT(h.p,h.p,n,d*c*u),!g.fixed&&TT(g.p,g.p,n,-(1-d)*c*u)}for(a=0;a<o;a++)(v=t[a]).fixed||(H(n,r,v.p),TT(v.p,v.p,n,s*u));for(a=0;a<o;a++)for(var h=t[a],f=a+1;f<o;f++){var g=t[f];H(n,g.p,h.p),0===(c=F(n))&&(B(n,Math.random()-.5,Math.random()-.5),c=1);var p=(h.rep+g.rep)/c/c;!h.fixed&&TT(h.pp,h.pp,n,p),!g.fixed&&TT(g.pp,g.pp,n,-p)}for(var m=[],a=0;a<o;a++){var v=t[a];v.fixed||(H(m,v.p,v.pp),TT(v.p,v.p,m,u),R(v.pp,v.p))}u*=.992,i&&i(t,e,u<.01)}}}function zu(t,e,i){var n=t.getBoxLayoutParams();return n.aspect=i,Ko(n,{width:e.getWidth(),height:e.getHeight()})}function Nu(t,e){var i=t.get(\"center\"),n=e.getWidth(),o=e.getHeight(),a=Math.min(n,o);return{cx:Si(i[0],e.getWidth()),cy:Si(i[1],e.getHeight()),r:Si(t.get(\"radius\"),a/2)}}function Eu(t,e){return e&&(\"string\"==typeof e?t=e.replace(\"{value}\",null!=t?t:\"\"):\"function\"==typeof e&&(t=e(t))),t}function Ru(t,e){function i(){a.ignore=a.hoverIgnore,r.ignore=r.hoverIgnore}function n(){a.ignore=a.normalIgnore,r.ignore=r.normalIgnore}jy.call(this);var o=new ub,a=new cb,r=new ib;this.add(o),this.add(a),this.add(r),this.updateData(t,e,!0),this.on(\"emphasis\",i).on(\"normal\",n).on(\"mouseover\",i).on(\"mouseout\",n)}function Vu(t,e){return Ko(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function Bu(t,e){for(var i=t.mapArray(\"value\",function(t){return t}),n=[],o=\"ascending\"===e,a=0,r=t.count();a<r;a++)n[a]=a;return\"function\"==typeof e?n.sort(e):\"none\"!==e&&n.sort(function(t,e){return o?i[t]-i[e]:i[e]-i[t]}),n}function Gu(t){t.each(function(e){var i,n,o,a,r=t.getItemModel(e),s=r.getModel(\"label.normal\").get(\"position\"),l=r.getModel(\"labelLine.normal\"),h=t.getItemLayout(e),u=h.points,c=\"inner\"===s||\"inside\"===s||\"center\"===s;if(c)i=\"center\",a=[[n=(u[0][0]+u[1][0]+u[2][0]+u[3][0])/4,o=(u[0][1]+u[1][1]+u[2][1]+u[3][1])/4],[n,o]];else{var d,f,g,p=l.get(\"length\");\"left\"===s?(d=(u[3][0]+u[0][0])/2,f=(u[3][1]+u[0][1])/2,n=(g=d-p)-5,i=\"right\"):(d=(u[1][0]+u[2][0])/2,f=(u[1][1]+u[2][1])/2,n=(g=d+p)+5,i=\"left\");var m=f;a=[[d,f],[g,m]],o=m}h.label={linePoints:a,x:n,y:o,verticalAlign:\"middle\",textAlign:i,inside:c}})}function Wu(t){if(!t.parallel){var e=!1;d(t.series,function(t){t&&\"parallel\"===t.type&&(e=!0)}),e&&(t.parallel=[{}])}}function Hu(t){d(Oo(t.parallelAxis),function(e){if(b(e)){var i=e.parallelIndex||0,o=Oo(t.parallel)[i];o&&o.parallelAxisDefault&&n(e,o.parallelAxisDefault,!1)}})}function Fu(t,e){var i=t[e]-t[1-e];return{span:Math.abs(i),sign:i>0?-1:i<0?1:e?-1:1}}function Zu(t,e){return Math.min(e[1],Math.max(e[0],t))}function Uu(t,e,i){this._axesMap=z(),this._axesLayout={},this.dimensions=t.dimensions,this._rect,this._model=t,this._init(t,e,i)}function Xu(t,e){return NT(ET(t,e[0]),e[1])}function ju(t,e){var i=e.layoutLength/(e.axisCount-1);return{position:i*t,axisNameAvailableWidth:i,axisLabelShow:!0}}function qu(t,e){var i,n,o=e.layoutLength,a=e.axisExpandWidth,r=e.axisCount,s=e.axisCollapseWidth,l=e.winInnerIndices,h=s,u=!1;return t<l[0]?(i=t*s,n=s):t<=l[1]?(i=e.axisExpandWindow0Pos+t*a-e.axisExpandWindow[0],h=a,u=!0):(i=o-(r-1-t)*s,n=s),{position:i,axisNameAvailableWidth:h,axisLabelShow:u,nameTruncateMaxWidth:n}}function Yu(t){fy.call(this),this._zr=t,this.group=new jy,this._brushType,this._brushOption,this._panels,this._track=[],this._dragging,this._covers=[],this._creatingCover,this._creatingPanel,this._enableGlobalPan,this._uid=\"brushController_\"+iA++,this._handlers={},ZT(nA,function(t,e){this._handlers[e]=m(t,this)},this)}function $u(t,e){var o=t._zr;t._enableGlobalPan||Al(o,JT,t._uid),ZT(t._handlers,function(t,e){o.on(e,t)}),t._brushType=e.brushType,t._brushOption=n(i(eA),e,!0)}function Ku(t){var e=t._zr;Cl(e,JT,t._uid),ZT(t._handlers,function(t,i){e.off(i,t)}),t._brushType=t._brushOption=null}function Ju(t,e){var i=oA[e.brushType].createCover(t,e);return i.__brushOption=e,ec(i,e),t.group.add(i),i}function Qu(t,e){var i=nc(e);return i.endCreating&&(i.endCreating(t,e),ec(e,e.__brushOption)),e}function tc(t,e){var i=e.__brushOption;nc(e).updateCoverShape(t,e,i.range,i)}function ec(t,e){var i=e.z;null==i&&(i=YT),t.traverse(function(t){t.z=i,t.z2=i})}function ic(t,e){nc(e).updateCommon(t,e),tc(t,e)}function nc(t){return oA[t.__brushOption.brushType]}function oc(t,e,i){var n=t._panels;if(!n)return!0;var o,a=t._transform;return ZT(n,function(t){t.isTargetByCursor(e,i,a)&&(o=t)}),o}function ac(t,e){var i=t._panels;if(!i)return!0;var n=e.__brushOption.panelId;return null==n||i[n]}function rc(t){var e=t._covers,i=e.length;return ZT(e,function(e){t.group.remove(e)},t),e.length=0,!!i}function sc(t,e){var n=UT(t._covers,function(t){var e=t.__brushOption,n=i(e.range);return{brushType:e.brushType,panelId:e.panelId,range:n}});t.trigger(\"brush\",n,{isEnd:!!e.isEnd,removeOnClick:!!e.removeOnClick})}function lc(t){var e=t._track;if(!e.length)return!1;var i=e[e.length-1],n=e[0],o=i[0]-n[0],a=i[1]-n[1];return qT(o*o+a*a,.5)>$T}function hc(t){var e=t.length-1;return e<0&&(e=0),[t[0],t[e]]}function uc(t,e,i,n){var o=new jy;return o.add(new db({name:\"main\",style:gc(i),silent:!0,draggable:!0,cursor:\"move\",drift:FT(t,e,o,\"nswe\"),ondragend:FT(sc,e,{isEnd:!0})})),ZT(n,function(i){o.add(new db({name:i,style:{opacity:0},draggable:!0,silent:!0,invisible:!0,drift:FT(t,e,o,i),ondragend:FT(sc,e,{isEnd:!0})}))}),o}function cc(t,e,i,n){var o=n.brushStyle.lineWidth||0,a=jT(o,KT),r=i[0][0],s=i[1][0],l=r-o/2,h=s-o/2,u=i[0][1],c=i[1][1],d=u-a+o/2,f=c-a+o/2,g=u-r,p=c-s,m=g+o,v=p+o;fc(t,e,\"main\",r,s,g,p),n.transformable&&(fc(t,e,\"w\",l,h,a,v),fc(t,e,\"e\",d,h,a,v),fc(t,e,\"n\",l,h,m,a),fc(t,e,\"s\",l,f,m,a),fc(t,e,\"nw\",l,h,a,a),fc(t,e,\"ne\",d,h,a,a),fc(t,e,\"sw\",l,f,a,a),fc(t,e,\"se\",d,f,a,a))}function dc(t,e){var i=e.__brushOption,n=i.transformable,o=e.childAt(0);o.useStyle(gc(i)),o.attr({silent:!n,cursor:n?\"move\":\"default\"}),ZT([\"w\",\"e\",\"n\",\"s\",\"se\",\"sw\",\"ne\",\"nw\"],function(i){var o=e.childOfName(i),a=vc(t,i);o&&o.attr({silent:!n,invisible:!n,cursor:n?tA[a]+\"-resize\":null})})}function fc(t,e,i,n,o,a,r){var s=e.childOfName(i);s&&s.setShape(wc(bc(t,e,[[n,o],[n+a,o+r]])))}function gc(t){return r({strokeNoScale:!0},t.brushStyle)}function pc(t,e,i,n){var o=[XT(t,i),XT(e,n)],a=[jT(t,i),jT(e,n)];return[[o[0],a[0]],[o[1],a[1]]]}function mc(t){return Mo(t.group)}function vc(t,e){if(e.length>1)return(\"e\"===(n=[vc(t,(e=e.split(\"\"))[0]),vc(t,e[1])])[0]||\"w\"===n[0])&&n.reverse(),n.join(\"\");var i={left:\"w\",right:\"e\",top:\"n\",bottom:\"s\"},n=To({w:\"left\",e:\"right\",n:\"top\",s:\"bottom\"}[e],mc(t));return i[n]}function yc(t,e,i,n,o,a,r,s){var l=n.__brushOption,h=t(l.range),u=_c(i,a,r);ZT(o.split(\"\"),function(t){var e=QT[t];h[e[0]][e[1]]+=u[e[0]]}),l.range=e(pc(h[0][0],h[1][0],h[0][1],h[1][1])),ic(i,n),sc(i,{isEnd:!1})}function xc(t,e,i,n,o){var a=e.__brushOption.range,r=_c(t,i,n);ZT(a,function(t){t[0]+=r[0],t[1]+=r[1]}),ic(t,e),sc(t,{isEnd:!1})}function _c(t,e,i){var n=t.group,o=n.transformCoordToLocal(e,i),a=n.transformCoordToLocal(0,0);return[o[0]-a[0],o[1]-a[1]]}function bc(t,e,n){var o=ac(t,e);return o&&!0!==o?o.clipPath(n,t._transform):i(n)}function wc(t){var e=XT(t[0][0],t[1][0]),i=XT(t[0][1],t[1][1]);return{x:e,y:i,width:jT(t[0][0],t[1][0])-e,height:jT(t[0][1],t[1][1])-i}}function Sc(t,e,i){if(t._brushType){var n=t._zr,o=t._covers,a=oc(t,e,i);if(!t._dragging)for(var r=0;r<o.length;r++){var s=o[r].__brushOption;if(a&&(!0===a||s.panelId===a.panelId)&&oA[s.brushType].contain(o[r],i[0],i[1]))return}a&&n.setCursorStyle(\"crosshair\")}}function Mc(t){var e=t.event;e.preventDefault&&e.preventDefault()}function Ic(t,e,i){return t.childOfName(\"main\").contain(e,i)}function Tc(t,e,n,o){var a,r=t._creatingCover,s=t._creatingPanel,l=t._brushOption;if(t._track.push(n.slice()),lc(t)||r){if(s&&!r){\"single\"===l.brushMode&&rc(t);var h=i(l);h.brushType=Ac(h.brushType,s),h.panelId=!0===s?null:s.panelId,r=t._creatingCover=Ju(t,h),t._covers.push(r)}if(r){var u=oA[Ac(t._brushType,s)];r.__brushOption.range=u.getCreatingRange(bc(t,r,t._track)),o&&(Qu(t,r),u.updateCommon(t,r)),tc(t,r),a={isEnd:o}}}else o&&\"single\"===l.brushMode&&l.removeOnClick&&oc(t,e,n)&&rc(t)&&(a={isEnd:o,removeOnClick:!0});return a}function Ac(t,e){return\"auto\"===t?e.defaultBrushType:t}function Cc(t){if(this._dragging){Mc(t);var e=Tc(this,t,this.group.transformCoordToLocal(t.offsetX,t.offsetY),!0);this._dragging=!1,this._track=[],this._creatingCover=null,e&&sc(this,e)}}function Dc(t){return{createCover:function(e,i){return uc(FT(yc,function(e){var i=[e,[0,100]];return t&&i.reverse(),i},function(e){return e[t]}),e,i,[[\"w\",\"e\"],[\"n\",\"s\"]][t])},getCreatingRange:function(e){var i=hc(e);return[XT(i[0][t],i[1][t]),jT(i[0][t],i[1][t])]},updateCoverShape:function(e,i,n,o){var a,r=ac(e,i);if(!0!==r&&r.getLinearBrushOtherExtent)a=r.getLinearBrushOtherExtent(t,e._transform);else{var s=e._zr;a=[0,[s.getWidth(),s.getHeight()][1-t]]}var l=[n,a];t&&l.reverse(),cc(e,i,l,o)},updateCommon:dc,contain:Ic}}function Lc(t){return t=Oc(t),function(e,i){return Co(e,t)}}function kc(t,e){return t=Oc(t),function(i){var n=null!=e?e:i,o=n?t.width:t.height,a=n?t.x:t.y;return[a,a+(o||0)]}}function Pc(t,e,i){return t=Oc(t),function(n,o,a){return t.contain(o[0],o[1])&&!Wl(n,e,i)}}function Oc(t){return jt.create(t)}function zc(t,e,i){return i&&\"axisAreaSelect\"===i.type&&e.findComponents({mainType:\"parallelAxis\",query:i})[0]===t}function Nc(t){var e=t.axis;return f(t.activeIntervals,function(t){return{brushType:\"lineX\",panelId:\"pl\",range:[e.dataToCoord(t[0],!0),e.dataToCoord(t[1],!0)]}})}function Ec(t,e){return e.getComponent(\"parallel\",t.get(\"parallelIndex\"))}function Rc(t,e){var i=t._model;return i.get(\"axisExpandable\")&&i.get(\"axisExpandTriggerOn\")===e}function Vc(t,e,i){var n=t.get(\"data\"),o=Bc(e);n&&n.length&&d(i,function(t){if(t){var e=l(n,t[o]);t[o]=e>=0?e:NaN}})}function Bc(t){return+t.replace(\"dim\",\"\")}function Gc(t,e){var i=0;d(t,function(t){var e=Bc(t);e>i&&(i=e)});var n=e[0];n&&n.length-1>i&&(i=n.length-1);for(var o=[],a=0;a<=i;a++)o.push(\"dim\"+a);return o}function Wc(t,e,i){var n=t.model,o=t.getRect(),a=new db({shape:{x:o.x,y:o.y,width:o.width,height:o.height}}),r=\"horizontal\"===n.get(\"layout\")?\"width\":\"height\";return a.setShape(r,0),So(a,{shape:{width:o.width,height:o.height}},e,i),a}function Hc(t,e,i,n){for(var o=[],a=0;a<i.length;a++){var r=i[a],s=t.get(r,e);Uc(s,n.getAxis(r).type)||o.push(n.dataToPoint(s,r))}return o}function Fc(t,e,i,n,o){var a=Hc(t,i,n,o),r=new cb({shape:{points:a},silent:!0,z2:10});e.add(r),t.setItemGraphicEl(i,r)}function Zc(t,e){var i=t.hostModel.getModel(\"lineStyle.normal\"),n=i.getLineStyle();t.eachItemGraphicEl(function(o,r){if(t.hasItemOption){var s=t.getItemModel(r).getModel(\"lineStyle.normal\",i);n=s.getLineStyle([\"color\",\"stroke\"])}o.useStyle(a(n,{fill:null,stroke:t.getItemVisual(r,\"color\"),opacity:t.getItemVisual(r,\"opacity\")})),o.shape.smooth=e})}function Uc(t,e){return\"category\"===e?null==t:null==t||isNaN(t)}function Xc(t,e,i){var n=new db({shape:{x:t.x-10,y:t.y-10,width:0,height:t.height+20}});return So(n,{shape:{width:t.width+20,height:t.height+20}},e,i),n}function jc(){function t(e,n){if(n>=i.length)return e;for(var o=-1,a=e.length,r=i[n++],s={},l={};++o<a;){var h=r(e[o]),u=l[h];u?u.push(e[o]):l[h]=[e[o]]}return d(l,function(e,i){s[i]=t(e,n)}),s}function e(t,o){if(o>=i.length)return t;var a=[],r=n[o++];return d(t,function(t,i){a.push({key:i,values:e(t,o)})}),r?a.sort(function(t,e){return r(t.key,e.key)}):a}var i=[],n=[];return{key:function(t){return i.push(t),this},sortKeys:function(t){return n[i.length-1]=t,this},entries:function(i){return e(t(i,0),0)}}}function qc(t,e){return Ko(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function Yc(t,e,i,n,o,a,r){Kc(t,i,o),td(t,e,a,n,r),sd(t)}function $c(t){d(t,function(t){var e=ud(t.outEdges,gd),i=ud(t.inEdges,gd),n=Math.max(e,i);t.setLayout({value:n},!0)})}function Kc(t,e,i){for(var n=t,o=null,a=0;n.length;){o=[];for(var r=0,s=n.length;r<s;r++){var l=n[r];l.setLayout({x:a},!0),l.setLayout({dx:e},!0);for(var h=0,u=l.outEdges.length;h<u;h++)o.push(l.outEdges[h].node2)}n=o,++a}Jc(t,a),Qc(t,(i-e)/(a-1))}function Jc(t,e){d(t,function(t){t.outEdges.length||t.setLayout({x:e-1},!0)})}function Qc(t,e){d(t,function(t){var i=t.getLayout().x*e;t.setLayout({x:i},!0)})}function td(t,e,i,n,o){var a=jc().key(function(t){return t.getLayout().x}).sortKeys(fd).entries(t).map(function(t){return t.values});ed(t,a,e,i,n),id(a,n,i);for(var r=1;o>0;o--)nd(a,r*=.99),id(a,n,i),ad(a,r),id(a,n,i)}function ed(t,e,i,n,o){var a=[];d(e,function(t){var e=t.length,i=0;d(t,function(t){i+=t.getLayout().value});var r=(n-(e-1)*o)/i;a.push(r)}),a.sort(function(t,e){return t-e});var r=a[0];d(e,function(t){d(t,function(t,e){t.setLayout({y:e},!0);var i=t.getLayout().value*r;t.setLayout({dy:i},!0)})}),d(i,function(t){var e=+t.getValue()*r;t.setLayout({dy:e},!0)})}function id(t,e,i){d(t,function(t){var n,o,a,r=0,s=t.length;for(t.sort(dd),a=0;a<s;a++){if(n=t[a],(o=r-n.getLayout().y)>0){l=n.getLayout().y+o;n.setLayout({y:l},!0)}r=n.getLayout().y+n.getLayout().dy+e}if((o=r-e-i)>0){var l=n.getLayout().y-o;for(n.setLayout({y:l},!0),r=n.getLayout().y,a=s-2;a>=0;--a)(o=(n=t[a]).getLayout().y+n.getLayout().dy+e-r)>0&&(l=n.getLayout().y-o,n.setLayout({y:l},!0)),r=n.getLayout().y}})}function nd(t,e){d(t.slice().reverse(),function(t){d(t,function(t){if(t.outEdges.length){var i=ud(t.outEdges,od)/ud(t.outEdges,gd),n=t.getLayout().y+(i-cd(t))*e;t.setLayout({y:n},!0)}})})}function od(t){return cd(t.node2)*t.getValue()}function ad(t,e){d(t,function(t){d(t,function(t){if(t.inEdges.length){var i=ud(t.inEdges,rd)/ud(t.inEdges,gd),n=t.getLayout().y+(i-cd(t))*e;t.setLayout({y:n},!0)}})})}function rd(t){return cd(t.node1)*t.getValue()}function sd(t){d(t,function(t){t.outEdges.sort(ld),t.inEdges.sort(hd)}),d(t,function(t){var e=0,i=0;d(t.outEdges,function(t){t.setLayout({sy:e},!0),e+=t.getLayout().dy}),d(t.inEdges,function(t){t.setLayout({ty:i},!0),i+=t.getLayout().dy})})}function ld(t,e){return t.node2.getLayout().y-e.node2.getLayout().y}function hd(t,e){return t.node1.getLayout().y-e.node1.getLayout().y}function ud(t,e){for(var i=0,n=t.length,o=-1;++o<n;){var a=+e.call(t,t[o],o);isNaN(a)||(i+=a)}return i}function cd(t){return t.getLayout().y+t.getLayout().dy/2}function dd(t,e){return t.getLayout().y-e.getLayout().y}function fd(t,e){return t<e?-1:t>e?1:t===e?0:NaN}function gd(t){return t.getValue()}function pd(t,e,i,n){jy.call(this),this.bodyIndex,this.whiskerIndex,this.styleUpdater=i,this._createContent(t,e,n),this.updateData(t,e,n),this._seriesModel}function md(t,e,i){return f(t,function(t){return t=t.slice(),t[e]=i.initBaseline,t})}function vd(t){var e={};return d(t,function(t,i){e[\"ends\"+i]=t}),e}function yd(t){this.group=new jy,this.styleUpdater=t}function xd(t,e,i){var n=e.getItemModel(i),o=n.getModel(mA),a=e.getItemVisual(i,\"color\"),r=o.getItemStyle([\"borderColor\"]),s=t.childAt(t.whiskerIndex);s.style.set(r),s.style.stroke=a,s.dirty();var l=t.childAt(t.bodyIndex);l.style.set(r),l.style.stroke=a,l.dirty(),uo(t,n.getModel(vA).getItemStyle())}function _d(t){var e=[],i=[];return t.eachSeriesByType(\"boxplot\",function(t){var n=t.getBaseAxis(),o=l(i,n);o<0&&(o=i.length,i[o]=n,e[o]={axis:n,seriesModels:[]}),e[o].seriesModels.push(t)}),e}function bd(t){var e,i,n=t.axis,o=t.seriesModels,a=o.length,r=t.boxWidthList=[],s=t.boxOffsetList=[],l=[];if(\"category\"===n.type)i=n.getBandWidth();else{var h=0;xA(o,function(t){h=Math.max(h,t.getData().count())}),e=n.getExtent(),Math.abs(e[1]-e[0])}xA(o,function(t){var e=t.get(\"boxWidth\");y(e)||(e=[e,e]),l.push([Si(e[0],i)||0,Si(e[1],i)||0])});var u=.8*i-2,c=u/a*.3,d=(u-c*(a-1))/a,f=d/2-u/2;xA(o,function(t,e){s.push(f),f+=c+d,r.push(Math.min(Math.max(d,l[e][0]),l[e][1]))})}function wd(t,e,i){var n,o=t.coordinateSystem,a=t.getData(),r=i/2,s=t.get(\"layout\"),l=\"horizontal\"===s?0:1,h=1-l,u=[\"x\",\"y\"],c=[];d(a.dimensions,function(t){var e=a.getDimensionInfo(t).coordDim;e===u[h]?c.push(t):e===u[l]&&(n=t)}),null==n||c.length<5||a.each([n].concat(c),function(){function t(t){var i=[];i[l]=d,i[h]=t;var n;return isNaN(d)||isNaN(t)?n=[NaN,NaN]:(n=o.dataToPoint(i))[l]+=e,n}function i(t,e){var i=t.slice(),n=t.slice();i[l]+=r,n[l]-=r,e?y.push(i,n):y.push(n,i)}function n(t){var e=[t.slice(),t.slice()];e[0][l]-=r,e[1][l]+=r,v.push(e)}var u=arguments,d=u[0],f=u[c.length+1],g=t(u[3]),p=t(u[1]),m=t(u[5]),v=[[p,t(u[2])],[m,t(u[4])]];n(p),n(m),n(g);var y=[];i(v[0][1],0),i(v[1][1],1),a.setItemLayout(f,{chartLayout:s,initBaseline:g[h],median:g,bodyEnds:y,whiskerEnds:v})})}function Sd(t,e,i){var n=e.getItemModel(i),o=n.getModel(_A),a=e.getItemVisual(i,\"color\"),r=e.getItemVisual(i,\"borderColor\")||a,s=o.getItemStyle([\"color\",\"color0\",\"borderColor\",\"borderColor0\"]),l=t.childAt(t.whiskerIndex);l.useStyle(s),l.style.stroke=r;var h=t.childAt(t.bodyIndex);h.useStyle(s),h.style.fill=a,h.style.stroke=r,uo(t,n.getModel(bA).getItemStyle())}function Md(t,e){var i,n=t.getBaseAxis(),o=\"category\"===n.type?n.getBandWidth():(i=n.getExtent(),Math.abs(i[1]-i[0])/e.count()),a=Si(TA(t.get(\"barMaxWidth\"),o),o),r=Si(TA(t.get(\"barMinWidth\"),1),o),s=t.get(\"barWidth\");return null!=s?Si(s,o):Math.max(Math.min(o/2,a),r)}function Id(t){return y(t)||(t=[+t,+t]),t}function Td(t,e){t.eachChild(function(t){t.attr({z:e.z,zlevel:e.zlevel,style:{stroke:\"stroke\"===e.brushType?e.color:null,fill:\"fill\"===e.brushType?e.color:null}})})}function Ad(t,e){jy.call(this);var i=new Jr(t,e),n=new jy;this.add(i),this.add(n),n.beforeUpdate=function(){this.attr(i.getScale())},this.updateData(t,e)}function Cd(t){var e=t.data;e&&e[0]&&e[0][0]&&e[0][0].coord&&(t.data=f(e,function(t){var e={coords:[t[0].coord,t[1].coord]};return t[0].name&&(e.fromName=t[0].name),t[1].name&&(e.toName=t[1].name),o([e,t[0],t[1]])}))}function Dd(t,e,i){jy.call(this),this.add(this.createLine(t,e,i)),this._updateEffectSymbol(t,e)}function Ld(t,e,i){jy.call(this),this._createPolyline(t,e,i)}function kd(t,e,i){Dd.call(this,t,e,i),this._lastFrame=0,this._lastFramePercent=0}function Pd(){this.group=new jy,this._lineEl=new PA}function Od(t){return t instanceof Array||(t=[t,t]),t}function zd(){var t=iy();this.canvas=t,this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.minOpacity=0,this._gradientPixels={}}function Nd(t,e,i){var n=t[1]-t[0],o=(e=f(e,function(e){return{interval:[(e.interval[0]-t[0])/n,(e.interval[1]-t[0])/n]}})).length,a=0;return function(t){for(n=a;n<o;n++)if((r=e[n].interval)[0]<=t&&t<=r[1]){a=n;break}if(n===o)for(var n=a-1;n>=0;n--){var r=e[n].interval;if(r[0]<=t&&t<=r[1]){a=n;break}}return n>=0&&n<o&&i[n]}}function Ed(t,e){var i=t[1]-t[0];return e=[(e[0]-t[0])/i,(e[1]-t[0])/i],function(t){return t>=e[0]&&t<=e[1]}}function Rd(t){var e=t.dimensions;return\"lng\"===e[0]&&\"lat\"===e[1]}function Vd(t,e,i,n){var o=t.getItemLayout(e),a=i.get(\"symbolRepeat\"),r=i.get(\"symbolClip\"),s=i.get(\"symbolPosition\")||\"start\",l=(i.get(\"symbolRotate\")||0)*Math.PI/180||0,h=i.get(\"symbolPatternSize\")||2,u=i.isAnimationEnabled(),c={dataIndex:e,layout:o,itemModel:i,symbolType:t.getItemVisual(e,\"symbol\")||\"circle\",color:t.getItemVisual(e,\"color\"),symbolClip:r,symbolRepeat:a,symbolRepeatDirection:i.get(\"symbolRepeatDirection\"),symbolPatternSize:h,rotation:l,animationModel:u?i:null,hoverAnimation:u&&i.get(\"hoverAnimation\"),z2:i.getShallow(\"z\",!0)||0};Bd(i,a,o,n,c),Wd(t,e,o,a,r,c.boundingLength,c.pxSign,h,n,c),Hd(i,c.symbolScale,l,n,c);var d=c.symbolSize,f=i.get(\"symbolOffset\");return y(f)&&(f=[Si(f[0],d[0]),Si(f[1],d[1])]),Fd(i,d,o,a,r,f,s,c.valueLineWidth,c.boundingLength,c.repeatCutLength,n,c),c}function Bd(t,e,i,n,o){var a,r=n.valueDim,s=t.get(\"symbolBoundingData\"),l=n.coordSys.getOtherAxis(n.coordSys.getBaseAxis()),h=l.toGlobalCoord(l.dataToCoord(0)),u=1-+(i[r.wh]<=0);if(y(s)){var c=[Gd(l,s[0])-h,Gd(l,s[1])-h];c[1]<c[0]&&c.reverse(),a=c[u]}else a=null!=s?Gd(l,s)-h:e?n.coordSysExtent[r.index][u]-h:i[r.wh];o.boundingLength=a,e&&(o.repeatCutLength=i[r.wh]),o.pxSign=a>0?1:a<0?-1:0}function Gd(t,e){return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e)))}function Wd(t,e,i,n,o,a,r,s,l,h){var u=l.valueDim,c=l.categoryDim,d=Math.abs(i[c.wh]),f=t.getItemVisual(e,\"symbolSize\");y(f)?f=f.slice():(null==f&&(f=\"100%\"),f=[f,f]),f[c.index]=Si(f[c.index],d),f[u.index]=Si(f[u.index],n?d:Math.abs(a)),h.symbolSize=f,(h.symbolScale=[f[0]/s,f[1]/s])[u.index]*=(l.isHorizontal?-1:1)*r}function Hd(t,e,i,n,o){var a=t.get(NA)||0;a&&(RA.attr({scale:e.slice(),rotation:i}),RA.updateTransform(),a/=RA.getLineScale(),a*=e[n.valueDim.index]),o.valueLineWidth=a}function Fd(t,e,i,n,o,r,s,l,h,u,c,d){var f=c.categoryDim,g=c.valueDim,p=d.pxSign,m=Math.max(e[g.index]+l,0),v=m;if(n){var y=Math.abs(h),x=I(t.get(\"symbolMargin\"),\"15%\")+\"\",_=!1;x.lastIndexOf(\"!\")===x.length-1&&(_=!0,x=x.slice(0,x.length-1)),x=Si(x,e[g.index]);var b=Math.max(m+2*x,0),w=_?0:2*x,S=Ri(n),M=S?n:sf((y+w)/b);b=m+2*(x=(y-M*m)/2/(_?M:M-1)),w=_?0:2*x,S||\"fixed\"===n||(M=u?sf((Math.abs(u)+w)/b):0),v=M*b-w,d.repeatTimes=M,d.symbolMargin=x}var T=p*(v/2),A=d.pathPosition=[];A[f.index]=i[f.wh]/2,A[g.index]=\"start\"===s?T:\"end\"===s?h-T:h/2,r&&(A[0]+=r[0],A[1]+=r[1]);var C=d.bundlePosition=[];C[f.index]=i[f.xy],C[g.index]=i[g.xy];var D=d.barRectShape=a({},i);D[g.wh]=p*Math.max(Math.abs(i[g.wh]),Math.abs(A[g.index]+T)),D[f.wh]=i[f.wh];var L=d.clipShape={};L[f.xy]=-i[f.xy],L[f.wh]=c.ecSize[f.wh],L[g.xy]=0,L[g.wh]=i[g.wh]}function Zd(t){var e=t.symbolPatternSize,i=Hr(t.symbolType,-e/2,-e/2,e,e,t.color);return i.attr({culling:!0}),\"image\"!==i.type&&i.setStyle({strokeNoScale:!0}),i}function Ud(t,e,i,n){function o(t){var e=l.slice(),n=i.pxSign,o=t;return(\"start\"===i.symbolRepeatDirection?n>0:n<0)&&(o=u-1-t),e[h.index]=d*(o-u/2+.5)+l[h.index],{position:e,scale:i.symbolScale.slice(),rotation:i.rotation}}var a=t.__pictorialBundle,r=i.symbolSize,s=i.valueLineWidth,l=i.pathPosition,h=e.valueDim,u=i.repeatTimes||0,c=0,d=r[e.valueDim.index]+s+2*i.symbolMargin;for(of(t,function(t){t.__pictorialAnimationIndex=c,t.__pictorialRepeatTimes=u,c<u?af(t,null,o(c),i,n):af(t,null,{scale:[0,0]},i,n,function(){a.remove(t)}),Jd(t,i),c++});c<u;c++){var f=Zd(i);f.__pictorialAnimationIndex=c,f.__pictorialRepeatTimes=u,a.add(f);var g=o(c);af(f,{position:g.position,scale:[0,0]},{scale:g.scale,rotation:g.rotation},i,n),f.on(\"mouseover\",function(){of(t,function(t){t.trigger(\"emphasis\")})}).on(\"mouseout\",function(){of(t,function(t){t.trigger(\"normal\")})}),Jd(f,i)}}function Xd(t,e,i,n){var o=t.__pictorialBundle,a=t.__pictorialMainPath;a?af(a,null,{position:i.pathPosition.slice(),scale:i.symbolScale.slice(),rotation:i.rotation},i,n):(a=t.__pictorialMainPath=Zd(i),o.add(a),af(a,{position:i.pathPosition.slice(),scale:[0,0],rotation:i.rotation},{scale:i.symbolScale.slice()},i,n),a.on(\"mouseover\",function(){this.trigger(\"emphasis\")}).on(\"mouseout\",function(){this.trigger(\"normal\")})),Jd(a,i)}function jd(t,e,i){var n=a({},e.barRectShape),o=t.__pictorialBarRect;o?af(o,null,{shape:n},e,i):(o=t.__pictorialBarRect=new db({z2:2,shape:n,silent:!0,style:{stroke:\"transparent\",fill:\"transparent\",lineWidth:0}}),t.add(o))}function qd(t,e,i,n){if(i.symbolClip){var o=t.__pictorialClipPath,r=a({},i.clipShape),s=e.valueDim,l=i.animationModel,h=i.dataIndex;if(o)wo(o,{shape:r},l,h);else{r[s.wh]=0,o=new db({shape:r}),t.__pictorialBundle.setClipPath(o),t.__pictorialClipPath=o;var u={};u[s.wh]=i.clipShape[s.wh],Tb[n?\"updateProps\":\"initProps\"](o,{shape:u},l,h)}}}function Yd(t,e){var i=t.getItemModel(e);return i.getAnimationDelayParams=$d,i.isAnimationEnabled=Kd,i}function $d(t){return{index:t.__pictorialAnimationIndex,count:t.__pictorialRepeatTimes}}function Kd(){return this.parentModel.isAnimationEnabled()&&!!this.getShallow(\"animation\")}function Jd(t,e){t.off(\"emphasis\").off(\"normal\");var i=e.symbolScale.slice();e.hoverAnimation&&t.on(\"emphasis\",function(){this.animateTo({scale:[1.1*i[0],1.1*i[1]]},400,\"elasticOut\")}).on(\"normal\",function(){this.animateTo({scale:i.slice()},400,\"elasticOut\")})}function Qd(t,e,i,n){var o=new jy,a=new jy;return o.add(a),o.__pictorialBundle=a,a.attr(\"position\",i.bundlePosition.slice()),i.symbolRepeat?Ud(o,e,i):Xd(o,e,i),jd(o,i,n),qd(o,e,i,n),o.__pictorialShapeStr=nf(t,i),o.__pictorialSymbolMeta=i,o}function tf(t,e,i){var n=i.animationModel,o=i.dataIndex;wo(t.__pictorialBundle,{position:i.bundlePosition.slice()},n,o),i.symbolRepeat?Ud(t,e,i,!0):Xd(t,e,i,!0),jd(t,i,!0),qd(t,e,i,!0)}function ef(t,e,i,n){var o=n.__pictorialBarRect;o&&(o.style.text=null);var a=[];of(n,function(t){a.push(t)}),n.__pictorialMainPath&&a.push(n.__pictorialMainPath),n.__pictorialClipPath&&(i=null),d(a,function(t){wo(t,{scale:[0,0]},i,e,function(){n.parent&&n.parent.remove(n)})}),t.setItemGraphicEl(e,null)}function nf(t,e){return[t.getItemVisual(e.dataIndex,\"symbol\")||\"none\",!!e.symbolRepeat,!!e.symbolClip].join(\":\")}function of(t,e,i){d(t.__pictorialBundle.children(),function(n){n!==t.__pictorialBarRect&&e.call(i,n)})}function af(t,e,i,n,o,a){e&&t.attr(e),n.symbolClip&&!o?i&&t.attr(i):i&&Tb[o?\"updateProps\":\"initProps\"](t,i,n.animationModel,n.dataIndex,a)}function rf(t,e,i){var n=i.color,o=i.dataIndex,a=i.itemModel,s=a.getModel(\"itemStyle.normal\").getItemStyle([\"color\"]),l=a.getModel(\"itemStyle.emphasis\").getItemStyle(),h=a.getShallow(\"cursor\");of(t,function(t){t.setColor(n),t.setStyle(r({fill:n,opacity:i.opacity},s)),uo(t,l),h&&(t.cursor=h),t.z2=i.z2});var u={},c=e.valueDim.posDesc[+(i.boundingLength>0)],d=t.__pictorialBarRect;ol(d.style,u,a,n,e.seriesModel,o,c),uo(d,u)}function sf(t){var e=Math.round(t);return Math.abs(t-e)<1e-4?e:Math.ceil(t)}function lf(t,e,i){this.dimension=\"single\",this.dimensions=[\"single\"],this._axis=null,this._rect,this._init(t,e,i),this.model=t}function hf(t,e){e=e||{};var i=t.coordinateSystem,n=t.axis,o={},a=n.position,r=n.orient,s=i.getRect(),l=[s.x,s.x+s.width,s.y,s.y+s.height],h={horizontal:{top:l[2],bottom:l[3]},vertical:{left:l[0],right:l[1]}};o.position=[\"vertical\"===r?h.vertical[a]:l[0],\"horizontal\"===r?h.horizontal[a]:l[3]];var u={horizontal:0,vertical:1};o.rotation=Math.PI/2*u[r];var c={top:-1,bottom:1,right:1,left:-1};o.labelDirection=o.tickDirection=o.nameDirection=c[a],t.get(\"axisTick.inside\")&&(o.tickDirection=-o.tickDirection),I(e.labelInside,t.get(\"axisLabel.inside\"))&&(o.labelDirection=-o.labelDirection);var d=e.rotate;return null==d&&(d=t.get(\"axisLabel.rotate\")),o.labelRotation=\"top\"===a?-d:d,o.labelInterval=n.getLabelInterval(),o.z2=1,o}function uf(t,e,i,n,o){var r=t.axis;if(!r.scale.isBlank()&&r.containData(e))if(t.involveSeries){var s=cf(e,t),l=s.payloadBatch,h=s.snapToValue;l[0]&&null==o.seriesIndex&&a(o,l[0]),!n&&t.snap&&r.containData(h)&&null!=h&&(e=h),i.showPointer(t,e,l,o),i.showTooltip(t,s,h)}else i.showPointer(t,e)}function cf(t,e){var i=e.axis,n=i.dim,o=t,a=[],r=Number.MAX_VALUE,s=-1;return XA(e.seriesModels,function(e,l){var h,u,c=e.coordDimToDataDim(n);if(e.getAxisTooltipData){var d=e.getAxisTooltipData(c,t,i);u=d.dataIndices,h=d.nestestValue}else{if(!(u=e.getData().indicesOfNearest(c[0],t,!1,\"category\"===i.type?.5:null)).length)return;h=e.getData().get(c[0],u[0])}if(null!=h&&isFinite(h)){var f=t-h,g=Math.abs(f);g<=r&&((g<r||f>=0&&s<0)&&(r=g,s=f,o=h,a.length=0),XA(u,function(t){a.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})}))}}),{payloadBatch:a,snapToValue:o}}function df(t,e,i,n){t[e.key]={value:i,payloadBatch:n}}function ff(t,e,i,n){var o=i.payloadBatch,a=e.axis,r=a.model,s=e.axisPointerModel;if(e.triggerTooltip&&o.length){var l=e.coordSys.model,h=Ys(l),u=t.map[h];u||(u=t.map[h]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},t.list.push(u)),u.dataByAxis.push({axisDim:a.dim,axisIndex:r.componentIndex,axisType:r.type,axisId:r.id,value:n,valueLabelOpt:{precision:s.get(\"label.precision\"),formatter:s.get(\"label.formatter\")},seriesDataIndices:o.slice()})}}function gf(t,e,i){var n=i.axesInfo=[];XA(e,function(e,i){var o=e.axisPointerModel.option,a=t[i];a?(!e.useHandle&&(o.status=\"show\"),o.value=a.value,o.seriesDataIndices=(a.payloadBatch||[]).slice()):!e.useHandle&&(o.status=\"hide\"),\"show\"===o.status&&n.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:o.value})})}function pf(t,e,i,n){if(!xf(e)&&t.list.length){var o=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};n({type:\"showTip\",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:i.tooltipOption,position:i.position,dataIndexInside:o.dataIndexInside,dataIndex:o.dataIndex,seriesIndex:o.seriesIndex,dataByCoordSys:t.list})}else n({type:\"hideTip\"})}function mf(t,e,i){var n=i.getZr(),o=qA(n).axisPointerLastHighlights||{},a=qA(n).axisPointerLastHighlights={};XA(t,function(t,e){var i=t.axisPointerModel.option;\"show\"===i.status&&XA(i.seriesDataIndices,function(t){var e=t.seriesIndex+\" | \"+t.dataIndex;a[e]=t})});var r=[],s=[];d(o,function(t,e){!a[e]&&s.push(t)}),d(a,function(t,e){!o[e]&&r.push(t)}),s.length&&i.dispatchAction({type:\"downplay\",escapeConnect:!0,batch:s}),r.length&&i.dispatchAction({type:\"highlight\",escapeConnect:!0,batch:r})}function vf(t,e){for(var i=0;i<(t||[]).length;i++){var n=t[i];if(e.axis.dim===n.axisDim&&e.axis.model.componentIndex===n.axisIndex)return n}}function yf(t){var e=t.axis.model,i={},n=i.axisDim=t.axis.dim;return i.axisIndex=i[n+\"AxisIndex\"]=e.componentIndex,i.axisName=i[n+\"AxisName\"]=e.name,i.axisId=i[n+\"AxisId\"]=e.id,i}function xf(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}function _f(t,e,i){if(!Uv.node){var n=e.getZr();YA(n).records||(YA(n).records={}),bf(n,e),(YA(n).records[t]||(YA(n).records[t]={})).handler=i}}function bf(t,e){function i(i,n){t.on(i,function(i){var o=If(e);$A(YA(t).records,function(t){t&&n(t,i,o.dispatchAction)}),wf(o.pendings,e)})}YA(t).initialized||(YA(t).initialized=!0,i(\"click\",v(Mf,\"click\")),i(\"mousemove\",v(Mf,\"mousemove\")),i(\"globalout\",Sf))}function wf(t,e){var i,n=t.showTip.length,o=t.hideTip.length;n?i=t.showTip[n-1]:o&&(i=t.hideTip[o-1]),i&&(i.dispatchAction=null,e.dispatchAction(i))}function Sf(t,e,i){t.handler(\"leave\",null,i)}function Mf(t,e,i,n){e.handler(t,i,n)}function If(t){var e={showTip:[],hideTip:[]},i=function(n){var o=e[n.type];o?o.push(n):(n.dispatchAction=i,t.dispatchAction(n))};return{dispatchAction:i,pendings:e}}function Tf(t,e){if(!Uv.node){var i=e.getZr();(YA(i).records||{})[t]&&(YA(i).records[t]=null)}}function Af(){}function Cf(t,e,i,n){Df(JA(i).lastProp,n)||(JA(i).lastProp=n,e?wo(i,n,t):(i.stopAnimation(),i.attr(n)))}function Df(t,e){if(b(t)&&b(e)){var i=!0;return d(e,function(e,n){i=i&&Df(t[n],e)}),!!i}return t===e}function Lf(t,e){t[e.get(\"label.show\")?\"show\":\"hide\"]()}function kf(t){return{position:t.position.slice(),rotation:t.rotation||0}}function Pf(t,e,i){var n=e.get(\"z\"),o=e.get(\"zlevel\");t&&t.traverse(function(t){\"group\"!==t.type&&(null!=n&&(t.z=n),null!=o&&(t.zlevel=o),t.silent=i)})}function Of(t){var e,i=t.get(\"type\"),n=t.getModel(i+\"Style\");return\"line\"===i?(e=n.getLineStyle()).fill=null:\"shadow\"===i&&((e=n.getAreaStyle()).stroke=null),e}function zf(t,e,i,n,o){var a=Ef(i.get(\"value\"),e.axis,e.ecModel,i.get(\"seriesDataIndices\"),{precision:i.get(\"label.precision\"),formatter:i.get(\"label.formatter\")}),r=i.getModel(\"label\"),s=Gx(r.get(\"padding\")||0),l=r.getFont(),h=de(a,l),u=o.position,c=h.width+s[1]+s[3],d=h.height+s[0]+s[2],f=o.align;\"right\"===f&&(u[0]-=c),\"center\"===f&&(u[0]-=c/2);var g=o.verticalAlign;\"bottom\"===g&&(u[1]-=d),\"middle\"===g&&(u[1]-=d/2),Nf(u,c,d,n);var p=r.get(\"backgroundColor\");p&&\"auto\"!==p||(p=e.get(\"axisLine.lineStyle.color\")),t.label={shape:{x:0,y:0,width:c,height:d,r:r.get(\"borderRadius\")},position:u.slice(),style:{text:a,textFont:l,textFill:r.getTextColor(),textPosition:\"inside\",fill:p,stroke:r.get(\"borderColor\")||\"transparent\",lineWidth:r.get(\"borderWidth\")||0,shadowBlur:r.get(\"shadowBlur\"),shadowColor:r.get(\"shadowColor\"),shadowOffsetX:r.get(\"shadowOffsetX\"),shadowOffsetY:r.get(\"shadowOffsetY\")},z2:10}}function Nf(t,e,i,n){var o=n.getWidth(),a=n.getHeight();t[0]=Math.min(t[0]+e,o)-e,t[1]=Math.min(t[1]+i,a)-i,t[0]=Math.max(t[0],0),t[1]=Math.max(t[1],0)}function Ef(t,e,i,n,o){var a=e.scale.getLabel(t,{precision:o.precision}),r=o.formatter;if(r){var s={value:Br(e,t),seriesData:[]};d(n,function(t){var e=i.getSeriesByIndex(t.seriesIndex),n=t.dataIndexInside,o=e&&e.getDataParams(n);o&&s.seriesData.push(o)}),_(r)?a=r.replace(\"{value}\",a):x(r)&&(a=r(s))}return a}function Rf(t,e,i){var n=ot();return ht(n,n,i.rotation),lt(n,n,i.position),Io([t.dataToCoord(e),(i.labelOffset||0)+(i.labelDirection||1)*(i.labelMargin||0)],n)}function Vf(t,e,i,n,o,a){var r=DM.innerTextLayout(i.rotation,0,i.labelDirection);i.labelMargin=o.get(\"label.margin\"),zf(e,n,o,a,{position:Rf(n.axis,t,i),align:r.textAlign,verticalAlign:r.textVerticalAlign})}function Bf(t,e,i){return i=i||0,{x1:t[i],y1:t[1-i],x2:e[i],y2:e[1-i]}}function Gf(t,e,i){return i=i||0,{x:t[i],y:t[1-i],width:e[i],height:e[1-i]}}function Wf(t,e,i,n,o,a){return{cx:t,cy:e,r0:i,r:n,startAngle:o,endAngle:a,clockwise:!0}}function Hf(t,e){var i={};return i[e.dim+\"AxisIndex\"]=e.index,t.getCartesian(i)}function Ff(t){return\"x\"===t.dim?0:1}function Zf(t){return t.isHorizontal()?0:1}function Uf(t,e){var i=t.getRect();return[i[nC[e]],i[nC[e]]+i[oC[e]]]}function Xf(t,e,i){var n=new db({shape:{x:t.x-10,y:t.y-10,width:0,height:t.height+20}});return So(n,{shape:{width:t.width+20,height:t.height+20}},e,i),n}function jf(t,e,i){if(t.count())for(var n,o=e.coordinateSystem,a=e.getLayerSeries(),r=f(a,function(e){return f(e.indices,function(e){var i=o.dataToPoint(t.get(\"time\",e));return i[1]=t.get(\"value\",e),i})}),s=qf(r),l=s.y0,h=i/s.max,u=a.length,c=a[0].indices.length,d=0;d<c;++d){n=l[d]*h,t.setItemLayout(a[0].indices[d],{layerIndex:0,x:r[0][d][0],y0:n,y:r[0][d][1]*h});for(var g=1;g<u;++g)n+=r[g-1][d][1]*h,t.setItemLayout(a[g].indices[d],{layerIndex:g,x:r[g][d][0],y0:n,y:r[g][d][1]*h})}}function qf(t){for(var e=t.length,i=t[0].length,n=[],o=[],a=0,r={},s=0;s<i;++s){for(var l=0,h=0;l<e;++l)h+=t[l][s][1];h>a&&(a=h),n.push(h)}for(var u=0;u<i;++u)o[u]=(a-n[u])/2;a=0;for(var c=0;c<i;++c){var d=n[c]+o[c];d>a&&(a=d)}return r.y0=o,r.max=a,r}function Yf(t,e){return e=e||[0,0],f([\"x\",\"y\"],function(i,n){var o=this.getAxis(i),a=e[n],r=t[n]/2;return\"category\"===o.type?o.getBandWidth():Math.abs(o.dataToCoord(a-r)-o.dataToCoord(a+r))},this)}function $f(t,e){return e=e||[0,0],f([0,1],function(i){var n=e[i],o=t[i]/2,a=[],r=[];return a[i]=n-o,r[i]=n+o,a[1-i]=r[1-i]=e[1-i],Math.abs(this.dataToPoint(a)[i]-this.dataToPoint(r)[i])},this)}function Kf(t,e){var i=this.getAxis(),n=e instanceof Array?e[0]:e,o=(t instanceof Array?t[0]:t)/2;return\"category\"===i.type?i.getBandWidth():Math.abs(i.dataToCoord(n-o)-i.dataToCoord(n+o))}function Jf(t,e){return f([\"Radius\",\"Angle\"],function(i,n){var o=this[\"get\"+i+\"Axis\"](),a=e[n],r=t[n]/2,s=\"dataTo\"+i,l=\"category\"===o.type?o.getBandWidth():Math.abs(o[s](a-r)-o[s](a+r));return\"Angle\"===i&&(l=l*Math.PI/180),l},this)}function Qf(t){var e,i=t.type;if(\"path\"===i){var n=t.shape;(e=Un(n.pathData,null,{x:n.x||0,y:n.y||0,width:n.width||0,height:n.height||0},\"center\")).__customPathData=t.pathData}else\"image\"===i?(e=new qe({})).__customImagePath=t.style.image:\"text\"===i?(e=new ib({})).__customText=t.style.text:e=new(0,Tb[i.charAt(0).toUpperCase()+i.slice(1)]);return e.__customGraphicType=i,e.name=t.name,e}function tg(t,e,n,o,a,r){var s={},l=n.style||{};if(n.shape&&(s.shape=i(n.shape)),n.position&&(s.position=n.position.slice()),n.scale&&(s.scale=n.scale.slice()),n.origin&&(s.origin=n.origin.slice()),n.rotation&&(s.rotation=n.rotation),\"image\"===t.type&&n.style){h=s.style={};d([\"x\",\"y\",\"width\",\"height\"],function(e){eg(e,h,l,t.style,r)})}if(\"text\"===t.type&&n.style){var h=s.style={};d([\"x\",\"y\"],function(e){eg(e,h,l,t.style,r)}),!l.hasOwnProperty(\"textFill\")&&l.fill&&(l.textFill=l.fill),!l.hasOwnProperty(\"textStroke\")&&l.stroke&&(l.textStroke=l.stroke)}if(\"group\"!==t.type&&(t.useStyle(l),r)){t.style.opacity=0;var u=l.opacity;null==u&&(u=1),So(t,{style:{opacity:u}},o,e)}r?t.attr(s):wo(t,s,o,e),t.attr({z2:n.z2||0,silent:n.silent}),!1!==n.styleEmphasis&&uo(t,n.styleEmphasis)}function eg(t,e,i,n,o){null==i[t]||o||(e[t]=i[t],i[t]=n[t])}function ig(t,e,i,n){function o(t){null==t&&(t=u),y&&(c=e.getItemModel(t),d=c.getModel(uC),f=c.getModel(cC),g=Yr(e),p=e.getItemVisual(t,\"color\"),y=!1)}var s=t.get(\"renderItem\"),l=t.coordinateSystem,h={};l&&(h=l.prepareCustoms?l.prepareCustoms():fC[l.type](l));var u,c,d,f,g,p,m=r({getWidth:n.getWidth,getHeight:n.getHeight,getZr:n.getZr,getDevicePixelRatio:n.getDevicePixelRatio,value:function(t,i){return null==i&&(i=u),e.get(e.getDimension(t||0),i)},style:function(i,n){null==n&&(n=u),o(n);var r=c.getModel(lC).getItemStyle();null!=p&&(r.fill=p);var s=e.getItemVisual(n,\"opacity\");return null!=s&&(r.opacity=s),null!=g&&(fo(r,d,null,{autoColor:p,isRectText:!0}),r.text=d.getShallow(\"show\")?T(t.getFormattedLabel(n,\"normal\"),e.get(g,n)):null),i&&a(r,i),r},styleEmphasis:function(i,n){null==n&&(n=u),o(n);var r=c.getModel(hC).getItemStyle();return null!=g&&(fo(r,f,null,{isRectText:!0},!0),r.text=f.getShallow(\"show\")?A(t.getFormattedLabel(n,\"emphasis\"),t.getFormattedLabel(n,\"normal\"),e.get(g,n)):null),i&&a(r,i),r},visual:function(t,i){return null==i&&(i=u),e.getItemVisual(i,t)},barLayout:function(t){if(l.getBaseAxis){var e=l.getBaseAxis();return nl.getLayoutOnAxis(r({axis:e},t),n)}},currentSeriesIndices:function(){return i.getCurrentSeriesIndices()},font:function(t){return _o(t,i)}},h.api||{}),v={context:{},seriesId:t.id,seriesName:t.name,seriesIndex:t.seriesIndex,coordSys:h.coordSys,dataInsideLength:e.count(),encode:ng(t.getData())},y=!0;return function(t){return u=t,y=!0,s&&s(r({dataIndexInside:t,dataIndex:e.getRawIndex(t)},v),m)||{}}}function ng(t){var e={};return d(t.dimensions,function(i,n){var o=t.getDimensionInfo(i);if(!o.isExtraCoord){var a=o.coordDim;(e[a]=e[a]||[])[o.coordDimIndex]=n}}),e}function og(t,e,i,n,o,a){(t=ag(t,e,i,n,o,a))&&a.setItemGraphicEl(e,t)}function ag(t,e,i,n,o,a){var r=i.type;if(!t||r===t.__customGraphicType||\"path\"===r&&i.pathData===t.__customPathData||\"image\"===r&&i.style.image===t.__customImagePath||\"text\"===r&&i.style.text===t.__customText||(o.remove(t),t=null),null!=r){var s=!t;if(!t&&(t=Qf(i)),tg(t,e,i,n,a,s),\"group\"===r){var l=t.children()||[],h=i.children||[];if(i.diffChildrenByName)rg({oldChildren:l,newChildren:h,dataIndex:e,animatableModel:n,group:t,data:a});else{for(var u=0;u<h.length;u++)ag(t.childAt(u),e,h[u],n,t,a);for(;u<l.length;u++)l[u]&&t.remove(l[u])}}return o.add(t),t}}function rg(t){new fr(t.oldChildren,t.newChildren,sg,sg,t).add(lg).update(lg).remove(hg).execute()}function sg(t,e){var i=t&&t.name;return null!=i?i:dC+e}function lg(t,e){var i=this.context,n=null!=t?i.newChildren[t]:null;ag(null!=e?i.oldChildren[e]:null,i.dataIndex,n,i.animatableModel,i.group,i.data)}function hg(t){var e=this.context,i=e.oldChildren[t];i&&e.group.remove(i)}function ug(t,e,i,n){var o=i.type,a=new(0,Tb[o.charAt(0).toUpperCase()+o.slice(1)])(i);e.add(a),n.set(t,a),a.__ecGraphicId=t}function cg(t,e){var i=t&&t.parent;i&&(\"group\"===t.type&&t.traverse(function(t){cg(t,e)}),e.removeKey(t.__ecGraphicId),i.remove(t))}function dg(t){return t=a({},t),d([\"id\",\"parentId\",\"$action\",\"hv\",\"bounding\"].concat(Gb),function(e){delete t[e]}),t}function fg(t,e){var i;return d(e,function(e){null!=t[e]&&\"auto\"!==t[e]&&(i=!0)}),i}function gg(t,e){var i=t.exist;if(e.id=t.keyInfo.id,!e.type&&i&&(e.type=i.type),null==e.parentId){var n=e.parentOption;n?e.parentId=n.id:i&&(e.parentId=i.parentId)}e.parentOption=null}function pg(t,e,i){var o=a({},i),r=t[e],s=i.$action||\"merge\";\"merge\"===s?r?(n(r,o,!0),ta(r,o,{ignoreSize:!0}),ia(i,r)):t[e]=o:\"replace\"===s?t[e]=o:\"remove\"===s&&r&&(t[e]=null)}function mg(t,e){t&&(t.hv=e.hv=[fg(e,[\"left\",\"right\"]),fg(e,[\"top\",\"bottom\"])],\"group\"===t.type&&(null==t.width&&(t.width=e.width=0),null==t.height&&(t.height=e.height=0)))}function vg(t,e,i){var n,o={},a=\"toggleSelected\"===t;return i.eachComponent(\"legend\",function(i){a&&null!=n?i[n?\"select\":\"unSelect\"](e.name):(i[t](e.name),n=i.isSelected(e.name)),d(i.getData(),function(t){var e=t.get(\"name\");if(\"\\n\"!==e&&\"\"!==e){var n=i.isSelected(e);o.hasOwnProperty(e)?o[e]=o[e]&&n:o[e]=n}})}),{name:e.name,selected:o}}function yg(t,e,i){var n=e.getBoxLayoutParams(),o=e.get(\"padding\"),a={width:i.getWidth(),height:i.getHeight()},r=Ko(n,a,o);Hb(e.get(\"orient\"),t,e.get(\"itemGap\"),r.width,r.height),Jo(t,n,a,o)}function xg(t,e){var i=Gx(e.get(\"padding\")),n=e.getItemStyle([\"color\",\"opacity\"]);return n.fill=e.get(\"backgroundColor\"),t=new db({shape:{x:t.x-i[3],y:t.y-i[0],width:t.width+i[1]+i[3],height:t.height+i[0]+i[2],r:e.get(\"borderRadius\")},style:n,silent:!0,z2:-1})}function _g(t,e){e.dispatchAction({type:\"legendToggleSelect\",name:t})}function bg(t,e,i){var n=i.getZr().storage.getDisplayList()[0];n&&n.useHoverLayer||t.get(\"legendHoverLink\")&&i.dispatchAction({type:\"highlight\",seriesName:t.name,name:e})}function wg(t,e,i){var n=i.getZr().storage.getDisplayList()[0];n&&n.useHoverLayer||t.get(\"legendHoverLink\")&&i.dispatchAction({type:\"downplay\",seriesName:t.name,name:e})}function Sg(t,e,i){var n=[1,1];n[t.getOrient().index]=0,ta(e,i,{type:\"box\",ignoreSize:n})}function Mg(t){var e=\"left \"+t+\"s cubic-bezier(0.23, 1, 0.32, 1),top \"+t+\"s cubic-bezier(0.23, 1, 0.32, 1)\";return f(AC,function(t){return t+\"transition:\"+e}).join(\";\")}function Ig(t){var e=[],i=t.get(\"fontSize\"),n=t.getTextColor();return n&&e.push(\"color:\"+n),e.push(\"font:\"+t.getFont()),i&&e.push(\"line-height:\"+Math.round(3*i/2)+\"px\"),IC([\"decoration\",\"align\"],function(i){var n=t.get(i);n&&e.push(\"text-\"+i+\":\"+n)}),e.join(\";\")}function Tg(t){var e=[],i=t.get(\"transitionDuration\"),n=t.get(\"backgroundColor\"),o=t.getModel(\"textStyle\"),a=t.get(\"padding\");return i&&e.push(Mg(i)),n&&(Uv.canvasSupported?e.push(\"background-Color:\"+n):(e.push(\"background-Color:#\"+Ct(n)),e.push(\"filter:alpha(opacity=70)\"))),IC([\"width\",\"color\",\"radius\"],function(i){var n=\"border-\"+i,o=TC(n),a=t.get(o);null!=a&&e.push(n+\":\"+a+(\"color\"===i?\"\":\"px\"))}),e.push(Ig(o)),null!=a&&e.push(\"padding:\"+Gx(a).join(\"px \")+\"px\"),e.join(\";\")+\";\"}function Ag(t,e){var i=document.createElement(\"div\"),n=this._zr=e.getZr();this.el=i,this._x=e.getWidth()/2,this._y=e.getHeight()/2,t.appendChild(i),this._container=t,this._show=!1,this._hideTimeout;var o=this;i.onmouseenter=function(){o._enterable&&(clearTimeout(o._hideTimeout),o._show=!0),o._inContent=!0},i.onmousemove=function(e){if(e=e||window.event,!o._enterable){var i=n.handler;ri(t,e,!0),i.dispatch(\"mousemove\",e)}},i.onmouseleave=function(){o._enterable&&o._show&&o.hideLater(o._hideDelay),o._inContent=!1}}function Cg(t){for(var e=t.pop();t.length;){var i=t.pop();i&&(i instanceof Lo&&(i=i.get(\"tooltip\",!0)),\"string\"==typeof i&&(i={formatter:i}),e=new Lo(i,e,e.ecModel))}return e}function Dg(t,e){return t.dispatchAction||m(e.dispatchAction,e)}function Lg(t,e,i,n,o,a,r){var s=Pg(i),l=s.width,h=s.height;return null!=a&&(t+l+a>n?t-=l+a:t+=a),null!=r&&(e+h+r>o?e-=h+r:e+=r),[t,e]}function kg(t,e,i,n,o){var a=Pg(i),r=a.width,s=a.height;return t=Math.min(t+r,n)-r,e=Math.min(e+s,o)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}function Pg(t){var e=t.clientWidth,i=t.clientHeight;if(document.defaultView&&document.defaultView.getComputedStyle){var n=document.defaultView.getComputedStyle(t);n&&(e+=parseInt(n.paddingLeft,10)+parseInt(n.paddingRight,10)+parseInt(n.borderLeftWidth,10)+parseInt(n.borderRightWidth,10),i+=parseInt(n.paddingTop,10)+parseInt(n.paddingBottom,10)+parseInt(n.borderTopWidth,10)+parseInt(n.borderBottomWidth,10))}return{width:e,height:i}}function Og(t,e,i){var n=i[0],o=i[1],a=0,r=0,s=e.width,l=e.height;switch(t){case\"inside\":a=e.x+s/2-n/2,r=e.y+l/2-o/2;break;case\"top\":a=e.x+s/2-n/2,r=e.y-o-5;break;case\"bottom\":a=e.x+s/2-n/2,r=e.y+l+5;break;case\"left\":a=e.x-n-5,r=e.y+l/2-o/2;break;case\"right\":a=e.x+s+5,r=e.y+l/2-o/2}return[a,r]}function zg(t){return\"center\"===t||\"middle\"===t}function Ng(t){return t.get(\"stack\")||\"__ec_stack_\"+t.seriesIndex}function Eg(t){return t.dim}function Rg(t,e){var i={};d(t,function(t,e){var n=t.getData(),o=t.coordinateSystem.getBaseAxis(),a=o.getExtent(),r=\"category\"===o.type?o.getBandWidth():Math.abs(a[1]-a[0])/n.count(),s=i[Eg(o)]||{bandWidth:r,remainedWidth:r,autoWidthCount:0,categoryGap:\"20%\",gap:\"30%\",stacks:{}},l=s.stacks;i[Eg(o)]=s;var h=Ng(t);l[h]||s.autoWidthCount++,l[h]=l[h]||{width:0,maxWidth:0};var u=Si(t.get(\"barWidth\"),r),c=Si(t.get(\"barMaxWidth\"),r),d=t.get(\"barGap\"),f=t.get(\"barCategoryGap\");u&&!l[h].width&&(u=Math.min(s.remainedWidth,u),l[h].width=u,s.remainedWidth-=u),c&&(l[h].maxWidth=c),null!=d&&(s.gap=d),null!=f&&(s.categoryGap=f)});var n={};return d(i,function(t,e){n[e]={};var i=t.stacks,o=t.bandWidth,a=Si(t.categoryGap,o),r=Si(t.gap,1),s=t.remainedWidth,l=t.autoWidthCount,h=(s-a)/(l+(l-1)*r);h=Math.max(h,0),d(i,function(t,e){var i=t.maxWidth;i&&i<h&&(i=Math.min(i,s),t.width&&(i=Math.min(i,t.width)),s-=i,t.width=i,l--)}),h=(s-a)/(l+(l-1)*r),h=Math.max(h,0);var u,c=0;d(i,function(t,e){t.width||(t.width=h),u=t,c+=t.width*(1+r)}),u&&(c-=u.width*r);var f=-c/2;d(i,function(t,i){n[e][i]=n[e][i]||{offset:f,width:t.width},f+=t.width*(1+r)})}),n}function Vg(t,e){US.call(this,\"radius\",t,e),this.type=\"category\"}function Bg(t,e){e=e||[0,360],US.call(this,\"angle\",t,e),this.type=\"category\"}function Gg(t,e){return e.type||(e.data?\"category\":\"value\")}function Wg(t,e,i){var n=e.get(\"center\"),o=i.getWidth(),a=i.getHeight();t.cx=Si(n[0],o),t.cy=Si(n[1],a);var r=t.getRadiusAxis(),s=Math.min(o,a)/2,l=Si(e.get(\"radius\"),s);r.inverse?r.setExtent(l,0):r.setExtent(0,l)}function Hg(t,e){var i=this,n=i.getAngleAxis(),o=i.getRadiusAxis();if(n.scale.setExtent(1/0,-1/0),o.scale.setExtent(1/0,-1/0),t.eachSeries(function(t){if(t.coordinateSystem===i){var e=t.getData();o.scale.unionExtentFromData(e,\"radius\"),n.scale.unionExtentFromData(e,\"angle\")}}),Nr(n.scale,n.model),Nr(o.scale,o.model),\"category\"===n.type&&!n.onBand){var a=n.getExtent(),r=360/n.scale.count();n.inverse?a[1]+=r:a[1]-=r,n.setExtent(a[0],a[1])}}function Fg(t,e){if(t.type=e.get(\"type\"),t.scale=Er(e),t.onBand=e.get(\"boundaryGap\")&&\"category\"===t.type,t.inverse=e.get(\"inverse\"),\"angleAxis\"===e.mainType){t.inverse^=e.get(\"clockwise\");var i=e.get(\"startAngle\");t.setExtent(i,i+(t.inverse?-360:360))}e.axis=t,t.model=e}function Zg(t,e,i){e[1]>e[0]&&(e=e.slice().reverse());var n=t.coordToPoint([e[0],i]),o=t.coordToPoint([e[1],i]);return{x1:n[0],y1:n[1],x2:o[0],y2:o[1]}}function Ug(t){return t.getRadiusAxis().inverse?0:1}function Xg(t,e,i){return{position:[t.cx,t.cy],rotation:i/180*Math.PI,labelDirection:-1,tickDirection:-1,nameDirection:1,labelRotate:e.getModel(\"axisLabel\").get(\"rotate\"),z2:1}}function jg(t,e,i,n,o){var a=e.axis,r=a.dataToCoord(t),s=n.getAngleAxis().getExtent()[0];s=s/180*Math.PI;var l,h,u,c=n.getRadiusAxis().getExtent();if(\"radius\"===a.dim){var d=ot();ht(d,d,s),lt(d,d,[n.cx,n.cy]),l=Io([r,-o],d);var f=e.getModel(\"axisLabel\").get(\"rotate\")||0,g=DM.innerTextLayout(s,f*Math.PI/180,-1);h=g.textAlign,u=g.textVerticalAlign}else{var p=c[1];l=n.coordToPoint([p+o,r]);var m=n.cx,v=n.cy;h=Math.abs(l[0]-m)/p<.3?\"center\":l[0]>m?\"left\":\"right\",u=Math.abs(l[1]-v)/p<.3?\"middle\":l[1]>v?\"top\":\"bottom\"}return{position:l,align:h,verticalAlign:u}}function qg(t,e){e.update=\"updateView\",ir(e,function(e,i){var n={};return i.eachComponent({mainType:\"geo\",query:e},function(i){i[t](e.name),d(i.coordinateSystem.regions,function(t){n[t.name]=i.isSelected(t.name)||!1})}),{selected:n,name:e.name}})}function Yg(t){var e={};d(t,function(t){e[t]=1}),t.length=0,d(e,function(e,i){t.push(i)})}function $g(t){if(t)for(var e in t)if(t.hasOwnProperty(e))return!0}function Kg(t,e,n){function o(){var t=function(){};return t.prototype.__hidden=t.prototype,new t}var a={};return HC(e,function(e){var r=a[e]=o();HC(t[e],function(t,o){if(jI.isValidType(o)){var a={type:o,visual:t};n&&n(a,e),r[o]=new jI(a),\"opacity\"===o&&((a=i(a)).type=\"colorAlpha\",r.__hidden.__alphaForOpacity=new jI(a))}})}),a}function Jg(t,e,n){var o;d(n,function(t){e.hasOwnProperty(t)&&$g(e[t])&&(o=!0)}),o&&d(n,function(n){e.hasOwnProperty(n)&&$g(e[n])?t[n]=i(e[n]):delete t[n]})}function Qg(t,e,i,n,o,a){function r(t){return i.getItemVisual(u,t)}function s(t,e){i.setItemVisual(u,t,e)}function l(t,l){u=null==a?t:l;var c=i.getRawDataItem(u);if(!c||!1!==c.visualMap)for(var d=n.call(o,t),f=e[d],g=h[d],p=0,m=g.length;p<m;p++){var v=g[p];f[v]&&f[v].applyVisual(t,r,s)}}var h={};d(t,function(t){var i=jI.prepareVisualTypes(e[t]);h[t]=i});var u;null==a?i.each(l,!0):i.each([a],l,!0)}function tp(t){var e=[\"x\",\"y\"],i=[\"width\",\"height\"];return{point:function(e,i,n){if(e){var o=n.range;return ep(e[t],o)}},rect:function(n,o,a){if(n){var r=a.range,s=[n[e[t]],n[e[t]]+n[i[t]]];return s[1]<s[0]&&s.reverse(),ep(s[0],r)||ep(s[1],r)||ep(r[0],s)||ep(r[1],s)}}}}function ep(t,e){return e[0]<=t&&t<=e[1]}function ip(t,e,i,n,o){for(var a=0,r=o[o.length-1];a<o.length;a++){var s=o[a];if(np(t,e,i,n,s[0],s[1],r[0],r[1]))return!0;r=s}}function np(t,e,i,n,o,a,r,s){var l=ap(i-t,o-r,n-e,a-s);if(op(l))return!1;var h=ap(o-t,o-r,a-e,a-s)/l;if(h<0||h>1)return!1;var u=ap(i-t,o-t,n-e,a-e)/l;return!(u<0||u>1)}function op(t){return t<=1e-6&&t>=-1e-6}function ap(t,e,i,n){return t*n-e*i}function rp(t,e,i){var n=this._targetInfoList=[],o={},a=lp(e,t);ZC($C,function(t,e){(!i||!i.include||UC(i.include,e)>=0)&&t(a,n,o)})}function sp(t){return t[0]>t[1]&&t.reverse(),t}function lp(t,e){return Fo(t,e,{includeMainTypes:qC})}function hp(t,e,i,n){var o=i.getAxis([\"x\",\"y\"][t]),a=sp(f([0,1],function(t){return e?o.coordToData(o.toLocalCoord(n[t])):o.toGlobalCoord(o.dataToCoord(n[t]))})),r=[];return r[t]=a,r[1-t]=[NaN,NaN],{values:a,xyMinMax:r}}function up(t,e,i,n){return[e[0]-n[t]*i[0],e[1]-n[t]*i[1]]}function cp(t,e){var i=dp(t),n=dp(e),o=[i[0]/n[0],i[1]/n[1]];return isNaN(o[0])&&(o[0]=1),isNaN(o[1])&&(o[1]=1),o}function dp(t){return t?[t[0][1]-t[0][0],t[1][1]-t[1][0]]:[NaN,NaN]}function fp(t,e,i,n,o){if(o){var a=t.getZr();a[nD]||(a[iD]||(a[iD]=gp),La(a,iD,i,e)(t,n))}}function gp(t,e){if(!t.isDisposed()){var i=t.getZr();i[nD]=!0,t.dispatchAction({type:\"brushSelect\",batch:e}),i[nD]=!1}}function pp(t,e,i,n){for(var o=0,a=e.length;o<a;o++){var r=e[o];if(t[r.brushType](n,i,r.selectors,r))return!0}}function mp(t){var e=t.brushSelector;if(_(e)){var i=[];return d(FC,function(t,n){i[n]=function(i,n,o,a){var r=n.getItemLayout(i);return t[e](r,o,a)}}),i}if(x(e)){var n={};return d(FC,function(t,i){n[i]=e}),n}return e}function vp(t,e){var i=t.option.seriesIndex;return null!=i&&\"all\"!==i&&(y(i)?l(i,e)<0:e!==i)}function yp(t){var e=t.selectors={};return d(FC[t.brushType],function(i,n){e[n]=function(n){return i(n,e,t)}}),t}function xp(t){return new jt(t[0][0],t[1][0],t[0][1]-t[0][0],t[1][1]-t[1][0])}function _p(t,e){return n({brushType:t.brushType,brushMode:t.brushMode,transformable:t.transformable,brushStyle:new Lo(t.brushStyle).getItemStyle(),removeOnClick:t.removeOnClick,z:t.z},e,!0)}function bp(t,e,i,n){(!n||n.$from!==t.id)&&this._brushController.setPanels(t.brushTargetManager.makePanelOpts(i)).enableBrush(t.brushOption).updateCovers(t.areas.slice())}function wp(t,e){sD[t]=e}function Sp(t){return sD[t]}function Mp(t,e,i){this.model=t,this.ecModel=e,this.api=i,this._brushType,this._brushMode}function Ip(t,e,i){this._model=t}function Tp(t,e,i,n){var o=i.calendarModel,a=i.seriesModel,r=o?o.coordinateSystem:a?a.coordinateSystem:null;return r===this?r[t](n):null}function Ap(t,e){var i=t.cellSize;y(i)?1===i.length&&(i[1]=i[0]):i=t.cellSize=[i,i];var n=f([0,1],function(t){return Qo(e,t)&&(i[t]=\"auto\"),null!=i[t]&&\"auto\"!==i[t]});ta(t,e,{type:\"box\",ignoreSize:n})}function Cp(t){return l(gD,t)>=0}function Dp(t,e,i){function n(t,e){return l(e.nodes,t)>=0}function o(t,n){var o=!1;return e(function(e){d(i(t,e)||[],function(t){n.records[e.name][t]&&(o=!0)})}),o}function a(t,n){n.nodes.push(t),e(function(e){d(i(t,e)||[],function(t){n.records[e.name][t]=!0})})}return function(i){var r={nodes:[],records:{}};if(e(function(t){r.records[t.name]={}}),!i)return r;a(i,r);var s;do{s=!1,t(function(t){!n(t,r)&&o(t,r)&&(a(t,r),s=!0)})}while(s);return r}}function Lp(t,e,i){var n=[1/0,-1/0];return mD(i,function(t){var i=t.getData();i&&mD(t.coordDimToDataDim(e),function(t){var e=i.getDataExtent(t);e[0]<n[0]&&(n[0]=e[0]),e[1]>n[1]&&(n[1]=e[1])})}),n[1]<n[0]&&(n=[NaN,NaN]),kp(t,n),n}function kp(t,e){var i=t.getAxisModel(),n=i.getMin(!0),o=\"category\"===i.get(\"type\"),a=o&&(i.get(\"data\")||[]).length;null!=n&&\"dataMin\"!==n&&\"function\"!=typeof n?e[0]=n:o&&(e[0]=a>0?0:NaN);var r=i.getMax(!0);return null!=r&&\"dataMax\"!==r&&\"function\"!=typeof r?e[1]=r:o&&(e[1]=a>0?a-1:NaN),i.get(\"scale\",!0)||(e[0]>0&&(e[0]=0),e[1]<0&&(e[1]=0)),e}function Pp(t,e){var i=t.getAxisModel(),n=t._percentWindow,o=t._valueWindow;if(n){var a=Ci(o,[0,500]);a=Math.min(a,20);var r=e||0===n[0]&&100===n[1];i.setRange(r?null:+o[0].toFixed(a),r?null:+o[1].toFixed(a))}}function Op(t){var e=t._minMaxSpan={},i=t._dataZoomModel;mD([\"min\",\"max\"],function(n){e[n+\"Span\"]=i.get(n+\"Span\");var o=i.get(n+\"ValueSpan\");if(null!=o&&(e[n+\"ValueSpan\"]=o,null!=(o=t.getAxisModel().axis.scale.parse(o)))){var a=t._dataExtent;e[n+\"Span\"]=wi(a[0]+o,a,[0,100],!0)}})}function zp(t){var e={};return xD([\"start\",\"end\",\"startValue\",\"endValue\",\"throttle\"],function(i){t.hasOwnProperty(i)&&(e[i]=t[i])}),e}function Np(t,e){var i=t._rangePropMode,n=t.get(\"rangeMode\");xD([[\"start\",\"startValue\"],[\"end\",\"endValue\"]],function(t,o){var a=null!=e[t[0]],r=null!=e[t[1]];a&&!r?i[o]=\"percent\":!a&&r?i[o]=\"value\":n?i[o]=n[o]:a&&(i[o]=\"percent\")})}function Ep(t){return{x:\"y\",y:\"x\",radius:\"angle\",angle:\"radius\"}[t]}function Rp(t){return\"vertical\"===t?\"ns-resize\":\"ew-resize\"}function Vp(t,e){var i=Hp(t),n=e.dataZoomId,o=e.coordId;d(i,function(t,i){var a=t.dataZoomInfos;a[n]&&l(e.allCoordIds,o)<0&&(delete a[n],t.count--)}),Zp(i);var a=i[o];a||((a=i[o]={coordId:o,dataZoomInfos:{},count:0}).controller=Fp(t,a),a.dispatchAction=v(qp,t)),!a.dataZoomInfos[n]&&a.count++,a.dataZoomInfos[n]=e;var r=Yp(a.dataZoomInfos);a.controller.enable(r.controlType,r.opt),a.controller.setPointerChecker(e.containsPoint),La(a,\"dispatchAction\",e.throttleRate,\"fixRate\")}function Bp(t,e){var i=Hp(t);d(i,function(t){t.controller.dispose();var i=t.dataZoomInfos;i[e]&&(delete i[e],t.count--)}),Zp(i)}function Gp(t,e){if(t&&\"dataZoom\"===t.type&&t.batch)for(var i=0,n=t.batch.length;i<n;i++)if(t.batch[i].dataZoomId===e)return!1;return!0}function Wp(t){return t.type+\"\\0_\"+t.id}function Hp(t){var e=t.getZr();return e[OD]||(e[OD]={})}function Fp(t,e){var i=new kl(t.getZr());return i.on(\"pan\",PD(Up,e)),i.on(\"zoom\",PD(Xp,e)),i}function Zp(t){d(t,function(e,i){e.count||(e.controller.dispose(),delete t[i])})}function Up(t,e,i,n,o,a,r){jp(t,function(s){return s.panGetRange(t.controller,e,i,n,o,a,r)})}function Xp(t,e,i,n){jp(t,function(o){return o.zoomGetRange(t.controller,e,i,n)})}function jp(t,e){var i=[];d(t.dataZoomInfos,function(t){var n=e(t);!t.disabled&&n&&i.push({dataZoomId:t.dataZoomId,start:n[0],end:n[1]})}),t.dispatchAction(i)}function qp(t,e){t.dispatchAction({type:\"dataZoom\",batch:e})}function Yp(t){var e,i={},n={true:2,move:1,false:0,undefined:-1};return d(t,function(t){var o=!t.disabled&&(!t.zoomLock||\"move\");n[o]>n[e]&&(e=o),a(i,t.roamControllerOpt)}),{controlType:e,opt:i}}function $p(t,e,i){i.getAxisProxy(t.name,e).reset(i)}function Kp(t,e,i){i.getAxisProxy(t.name,e).filterData(i)}function Jp(t,e){return t&&t.hasOwnProperty&&t.hasOwnProperty(e)}function Qp(t,e){t.eachTargetSeries(function(e){var i=e.getData();Qg(t.stateList,t.targetVisuals,i,t.getValueState,t,t.getDataDimension(i))})}function tm(t){t.eachSeries(function(e){var i=e.getData(),n=[];t.eachComponent(\"visualMap\",function(t){if(t.isTargetSeries(e)){var o=t.getVisualMeta(m(em,null,e,t))||{stops:[],outerColors:[]};o.dimension=t.getDataDimension(i),n.push(o)}}),e.getData().setVisual(\"visualMeta\",n)})}function em(t,e,i,n){for(var o=e.targetVisuals[n],a=jI.prepareVisualTypes(o),r={color:t.getData().getVisual(\"color\")},s=0,l=a.length;s<l;s++){var h=a[s],u=o[\"opacity\"===h?\"__alphaForOpacity\":h];u&&u.applyVisual(i,function(t){return r[t]},function(t,e){r[t]=e})}return r.color}function im(t,e,i){if(i[0]===i[1])return i.slice();for(var n=(i[1]-i[0])/200,o=i[0],a=[],r=0;r<=200&&o<i[1];r++)a.push(o),o+=n;return a.push(i[1]),a}function nm(t,e,i){var n=t.option,o=n.align;if(null!=o&&\"auto\"!==o)return o;for(var a={width:e.getWidth(),height:e.getHeight()},r=\"horizontal\"===n.orient?1:0,s=[[\"left\",\"right\",\"width\"],[\"top\",\"bottom\",\"height\"]],l=s[r],h=[0,null,10],u={},c=0;c<3;c++)u[s[1-r][c]]=h[c],u[l[c]]=2===c?i[0]:n[l[c]];var d=[[\"x\",\"width\",3],[\"y\",\"height\",0]][r],f=Ko(u,a,n.padding);return l[(f.margin[d[2]]||0)+f[d[0]]+.5*f[d[1]]<.5*a[d[1]]?0:1]}function om(t){return d(t||[],function(e){null!=t.dataIndex&&(t.dataIndexInside=t.dataIndex,t.dataIndex=null)}),t}function am(t,e,i,n){return new ub({shape:{points:t},draggable:!!i,cursor:e,drift:i,onmousemove:function(t){bx(t.event)},ondragend:n})}function rm(t,e){return 0===t?[[0,0],[e,0],[e,-e]]:[[0,0],[e,0],[e,e]]}function sm(t,e,i,n){return t?[[0,-eL(e,iL(i,0))],[oL,0],[0,eL(e,iL(n-i,0))]]:[[0,0],[5,-5],[5,5]]}function lm(t,e,i){var n=nL/2,o=t.get(\"hoverLinkDataSize\");return o&&(n=QD(o,e,i,!0)/2),n}function hm(t){var e=t.get(\"hoverLinkOnHandle\");return!!(null==e?t.get(\"realtime\"):e)}function um(t){return\"vertical\"===t?\"ns-resize\":\"ew-resize\"}function cm(t,e){var i=t.inverse;(\"vertical\"===t.orient?!i:i)&&e.reverse()}function dm(t){zo(t.label,[\"show\"])}function fm(t){return!(isNaN(parseFloat(t.x))&&isNaN(parseFloat(t.y)))}function gm(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}function pm(t,e,i){var n=-1;do{n=Math.max(Ti(t.get(e,i)),n),t=t.stackedOn}while(t);return n}function mm(t,e,i,n,o,a){var r=[],s=bm(e,n,t),l=e.indicesOfNearest(n,s,!0)[0];r[o]=e.get(i,l,!0),r[a]=e.get(n,l,!0);var h=pm(e,n,l);return(h=Math.min(h,20))>=0&&(r[a]=+r[a].toFixed(h)),r}function vm(t,e){var n=t.getData(),o=t.coordinateSystem;if(e&&!gm(e)&&!y(e.coord)&&o){var a=o.dimensions,r=ym(e,n,o,t);if((e=i(e)).type&&fL[e.type]&&r.baseAxis&&r.valueAxis){var s=cL(a,r.baseAxis.dim),l=cL(a,r.valueAxis.dim);e.coord=fL[e.type](n,r.baseDataDim,r.valueDataDim,s,l),e.value=e.coord[l]}else{for(var h=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],u=0;u<2;u++)if(fL[h[u]]){var c=t.coordDimToDataDim(a[u])[0];h[u]=bm(n,c,h[u])}e.coord=h}}return e}function ym(t,e,i,n){var o={};return null!=t.valueIndex||null!=t.valueDim?(o.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,o.valueAxis=i.getAxis(n.dataDimToCoordDim(o.valueDataDim)),o.baseAxis=i.getOtherAxis(o.valueAxis),o.baseDataDim=n.coordDimToDataDim(o.baseAxis.dim)[0]):(o.baseAxis=n.getBaseAxis(),o.valueAxis=i.getOtherAxis(o.baseAxis),o.baseDataDim=n.coordDimToDataDim(o.baseAxis.dim)[0],o.valueDataDim=n.coordDimToDataDim(o.valueAxis.dim)[0]),o}function xm(t,e){return!(t&&t.containData&&e.coord&&!fm(e))||t.containData(e.coord)}function _m(t,e,i,n){return n<2?t.coord&&t.coord[n]:t.value}function bm(t,e,i){if(\"average\"===i){var n=0,o=0;return t.each(e,function(t,e){isNaN(t)||(n+=t,o++)},!0),n/o}return t.getDataExtent(e,!0)[\"max\"===i?1:0]}function wm(t,e,i){var n=e.coordinateSystem;t.each(function(o){var a,r=t.getItemModel(o),s=Si(r.get(\"x\"),i.getWidth()),l=Si(r.get(\"y\"),i.getHeight());if(isNaN(s)||isNaN(l)){if(e.getMarkerPosition)a=e.getMarkerPosition(t.getValues(t.dimensions,o));else if(n){var h=t.get(n.dimensions[0],o),u=t.get(n.dimensions[1],o);a=n.dataToPoint([h,u])}}else a=[s,l];isNaN(s)||(a[0]=s),isNaN(l)||(a[1]=l),t.setItemLayout(o,a)})}function Sm(t,e,i){var n;n=t?f(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.coordDimToDataDim(t)[0])||{};return i.name=t,i}):[{name:\"value\",type:\"float\"}];var o=new aS(n,i),a=f(i.get(\"data\"),v(vm,e));return t&&(a=p(a,v(xm,t))),o.initData(a,null,t?_m:function(t){return t.value}),o}function Mm(t){return!isNaN(t)&&!isFinite(t)}function Im(t,e,i,n){var o=1-t,a=n.dimensions[t];return Mm(e[o])&&Mm(i[o])&&e[t]===i[t]&&n.getAxis(a).containData(e[t])}function Tm(t,e){if(\"cartesian2d\"===t.type){var i=e[0].coord,n=e[1].coord;if(i&&n&&(Im(1,i,n,t)||Im(0,i,n,t)))return!0}return xm(t,e[0])&&xm(t,e[1])}function Am(t,e,i,n,o){var a,r=n.coordinateSystem,s=t.getItemModel(e),l=Si(s.get(\"x\"),o.getWidth()),h=Si(s.get(\"y\"),o.getHeight());if(isNaN(l)||isNaN(h)){if(n.getMarkerPosition)a=n.getMarkerPosition(t.getValues(t.dimensions,e));else{var u=r.dimensions,c=t.get(u[0],e),d=t.get(u[1],e);a=r.dataToPoint([c,d])}if(\"cartesian2d\"===r.type){var f=r.getAxis(\"x\"),g=r.getAxis(\"y\"),u=r.dimensions;Mm(t.get(u[0],e))?a[0]=f.toGlobalCoord(f.getExtent()[i?0:1]):Mm(t.get(u[1],e))&&(a[1]=g.toGlobalCoord(g.getExtent()[i?0:1]))}isNaN(l)||(a[0]=l),isNaN(h)||(a[1]=h)}else a=[l,h];t.setItemLayout(e,a)}function Cm(t,e,i){var n;n=t?f(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.coordDimToDataDim(t)[0])||{};return i.name=t,i}):[{name:\"value\",type:\"float\"}];var o=new aS(n,i),a=new aS(n,i),r=new aS([],i),s=f(i.get(\"data\"),v(pL,e,t,i));t&&(s=p(s,v(Tm,t)));var l=t?_m:function(t){return t.value};return o.initData(f(s,function(t){return t[0]}),null,l),a.initData(f(s,function(t){return t[1]}),null,l),r.initData(f(s,function(t){return t[2]})),r.hasItemOption=!0,{from:o,to:a,line:r}}function Dm(t){return!isNaN(t)&&!isFinite(t)}function Lm(t,e,i,n){var o=1-t;return Dm(e[o])&&Dm(i[o])}function km(t,e){var i=e.coord[0],n=e.coord[1];return!(\"cartesian2d\"!==t.type||!i||!n||!Lm(1,i,n,t)&&!Lm(0,i,n,t))||(xm(t,{coord:i,x:e.x0,y:e.y0})||xm(t,{coord:n,x:e.x1,y:e.y1}))}function Pm(t,e,i,n,o){var a,r=n.coordinateSystem,s=t.getItemModel(e),l=Si(s.get(i[0]),o.getWidth()),h=Si(s.get(i[1]),o.getHeight());if(isNaN(l)||isNaN(h)){if(n.getMarkerPosition)a=n.getMarkerPosition(t.getValues(i,e));else{var u=t.get(i[0],e),c=t.get(i[1],e);a=r.dataToPoint([u,c],!0)}if(\"cartesian2d\"===r.type){var d=r.getAxis(\"x\"),f=r.getAxis(\"y\"),u=t.get(i[0],e),c=t.get(i[1],e);Dm(u)?a[0]=d.toGlobalCoord(d.getExtent()[\"x0\"===i[0]?0:1]):Dm(c)&&(a[1]=f.toGlobalCoord(f.getExtent()[\"y0\"===i[1]?0:1]))}isNaN(l)||(a[0]=l),isNaN(h)||(a[1]=h)}else a=[l,h];return a}function Om(t,e,i){var n,o,a=[\"x0\",\"y0\",\"x1\",\"y1\"];t?(n=f(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.coordDimToDataDim(t)[0])||{};return i.name=t,i}),o=new aS(f(a,function(t,e){return{name:t,type:n[e%2].type}}),i)):o=new aS(n=[{name:\"value\",type:\"float\"}],i);var r=f(i.get(\"data\"),v(mL,e,t,i));t&&(r=p(r,v(km,t)));var s=t?function(t,e,i,n){return t.coord[Math.floor(n/2)][n%2]}:function(t){return t.value};return o.initData(r,null,s),o.hasItemOption=!0,o}function zm(t){var e=t.type,i={number:\"value\",time:\"time\"};if(i[e]&&(t.axisType=i[e],delete t.type),Nm(t),Em(t,\"controlPosition\")){var n=t.controlStyle||(t.controlStyle={});Em(n,\"position\")||(n.position=t.controlPosition),\"none\"!==n.position||Em(n,\"show\")||(n.show=!1,delete n.position),delete t.controlPosition}d(t.data||[],function(t){b(t)&&!y(t)&&(!Em(t,\"value\")&&Em(t,\"name\")&&(t.value=t.name),Nm(t))})}function Nm(t){var e=t.itemStyle||(t.itemStyle={}),i=e.emphasis||(e.emphasis={}),n=t.label||t.label||{},o=n.normal||(n.normal={}),a={normal:1,emphasis:1};d(n,function(t,e){a[e]||Em(o,e)||(o[e]=t)}),i.label&&!Em(n,\"emphasis\")&&(n.emphasis=i.label,delete i.label)}function Em(t,e){return t.hasOwnProperty(e)}function Rm(t,e){return Ko(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()},t.get(\"padding\"))}function Vm(t,e,n,o){return Un(t.get(e).replace(/^path:\\/\\//,\"\"),i(o||{}),new jt(n[0],n[1],n[2],n[3]),\"center\")}function Bm(t,e,i,o,a,r){var s=e.get(\"color\");a?(a.setColor(s),i.add(a),r&&r.onUpdate(a)):((a=Hr(t.get(\"symbol\"),-1,-1,2,2,s)).setStyle(\"strokeNoScale\",!0),i.add(a),r&&r.onCreate(a));var l=e.getItemStyle([\"color\",\"symbol\",\"symbolSize\"]);a.setStyle(l),o=n({rectHover:!0,z2:100},o,!0);var h=t.get(\"symbolSize\");(h=h instanceof Array?h.slice():[+h,+h])[0]/=2,h[1]/=2,o.scale=h;var u=t.get(\"symbolOffset\");if(u){var c=o.position=o.position||[0,0];c[0]+=Si(u[0],h[0]),c[1]+=Si(u[1],h[1])}var d=t.get(\"symbolRotate\");return o.rotation=(d||0)*Math.PI/180||0,a.attr(o),a.updateTransform(),a}function Gm(t,e,i,n,o){if(!t.dragging){var a=n.getModel(\"checkpointStyle\"),r=i.dataToCoord(n.getData().get([\"value\"],e));o||!a.get(\"animation\",!0)?t.attr({position:[r,0]}):(t.stopAnimation(!0),t.animateTo({position:[r,0]},a.get(\"animationDuration\",!0),a.get(\"animationEasing\",!0)))}}function Wm(t){return 0===t.indexOf(\"my\")}function Hm(t){this.model=t}function Fm(t){this.model=t}function Zm(t){var e={},i=[],n=[];return t.eachRawSeries(function(t){var o=t.coordinateSystem;if(!o||\"cartesian2d\"!==o.type&&\"polar\"!==o.type)i.push(t);else{var a=o.getBaseAxis();if(\"category\"===a.type){var r=a.dim+\"_\"+a.index;e[r]||(e[r]={categoryAxis:a,valueAxis:o.getOtherAxis(a),series:[]},n.push({axisDim:a.dim,axisIndex:a.index})),e[r].series.push(t)}else i.push(t)}}),{seriesGroupByCategoryAxis:e,other:i,meta:n}}function Um(t){var e=[];return d(t,function(t,i){var n=t.categoryAxis,o=t.valueAxis.dim,a=[\" \"].concat(f(t.series,function(t){return t.name})),r=[n.model.getCategories()];d(t.series,function(t){r.push(t.getRawData().mapArray(o,function(t){return t}))});for(var s=[a.join(PL)],l=0;l<r[0].length;l++){for(var h=[],u=0;u<r.length;u++)h.push(r[u][l]);s.push(h.join(PL))}e.push(s.join(\"\\n\"))}),e.join(\"\\n\\n\"+kL+\"\\n\\n\")}function Xm(t){return f(t,function(t){var e=t.getRawData(),i=[t.name],n=[];return e.each(e.dimensions,function(){for(var t=arguments.length,o=arguments[t-1],a=e.getName(o),r=0;r<t-1;r++)n[r]=arguments[r];i.push((a?a+PL:\"\")+n.join(PL))}),i.join(\"\\n\")}).join(\"\\n\\n\"+kL+\"\\n\\n\")}function jm(t){var e=Zm(t);return{value:p([Um(e.seriesGroupByCategoryAxis),Xm(e.other)],function(t){return t.replace(/[\\n\\t\\s]/g,\"\")}).join(\"\\n\\n\"+kL+\"\\n\\n\"),meta:e.meta}}function qm(t){return t.replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\")}function Ym(t){if(t.slice(0,t.indexOf(\"\\n\")).indexOf(PL)>=0)return!0}function $m(t){for(var e=t.split(/\\n+/g),i=[],n=f(qm(e.shift()).split(OL),function(t){return{name:t,data:[]}}),o=0;o<e.length;o++){var a=qm(e[o]).split(OL);i.push(a.shift());for(var r=0;r<a.length;r++)n[r]&&(n[r].data[o]=a[r])}return{series:n,categories:i}}function Km(t){for(var e=t.split(/\\n+/g),i=qm(e.shift()),n=[],o=0;o<e.length;o++){var a,r=qm(e[o]).split(OL),s=\"\",l=!1;isNaN(r[0])?(l=!0,s=r[0],r=r.slice(1),n[o]={name:s,value:[]},a=n[o].value):a=n[o]=[];for(var h=0;h<r.length;h++)a.push(+r[h]);1===a.length&&(l?n[o].value=a[0]:n[o]=a[0])}return{name:i,data:n}}function Jm(t,e){var i={series:[]};return d(t.split(new RegExp(\"\\n*\"+kL+\"\\n*\",\"g\")),function(t,n){if(Ym(t)){var o=$m(t),a=e[n],r=a.axisDim+\"Axis\";a&&(i[r]=i[r]||[],i[r][a.axisIndex]={data:o.categories},i.series=i.series.concat(o.series))}else{o=Km(t);i.series.push(o)}}),i}function Qm(t){this._dom=null,this.model=t}function tv(t,e){return f(t,function(t,i){var n=e&&e[i];return b(n)&&!y(n)?(b(t)&&!y(t)&&(t=t.value),r({value:t},n)):t})}function ev(t,e){var i=av(t);zL(e,function(e,n){for(var o=i.length-1;o>=0&&!i[o][n];o--);if(o<0){var a=t.queryComponents({mainType:\"dataZoom\",subType:\"select\",id:n})[0];if(a){var r=a.getPercentRange();i[0][n]={dataZoomId:n,start:r[0],end:r[1]}}}}),i.push(e)}function iv(t){var e=av(t),i=e[e.length-1];e.length>1&&e.pop();var n={};return zL(i,function(t,i){for(var o=e.length-1;o>=0;o--)if(t=e[o][i]){n[i]=t;break}}),n}function nv(t){t[NL]=null}function ov(t){return av(t).length}function av(t){var e=t[NL];return e||(e=t[NL]=[{}]),e}function rv(t,e,i){(this._brushController=new Yu(i.getZr())).on(\"brush\",m(this._onBrush,this)).mount(),this._isZoomActive}function sv(t){var e={};return d([\"xAxisIndex\",\"yAxisIndex\"],function(i){e[i]=t[i],null==e[i]&&(e[i]=\"all\"),(!1===e[i]||\"none\"===e[i])&&(e[i]=[])}),e}function lv(t,e){t.setIconStatus(\"back\",ov(e)>1?\"emphasis\":\"normal\")}function hv(t,e,i,n,o){var a=i._isZoomActive;n&&\"takeGlobalCursor\"===n.type&&(a=\"dataZoomSelect\"===n.key&&n.dataZoomSelectActive),i._isZoomActive=a,t.setIconStatus(\"zoom\",a?\"emphasis\":\"normal\");var r=new rp(sv(t.option),e,{include:[\"grid\"]});i._brushController.setPanels(r.makePanelOpts(o,function(t){return t.xAxisDeclared&&!t.yAxisDeclared?\"lineX\":!t.xAxisDeclared&&t.yAxisDeclared?\"lineY\":\"rect\"})).enableBrush(!!a&&{brushType:\"auto\",brushStyle:{lineWidth:0,fill:\"rgba(0,0,0,0.2)\"}})}function uv(t){this.model=t}function cv(t){return HL(t)}function dv(){if(!UL&&XL){UL=!0;var t=XL.styleSheets;t.length<31?XL.createStyleSheet().addRule(\".zrvml\",\"behavior:url(#default#VML)\"):t[0].addRule(\".zrvml\",\"behavior:url(#default#VML)\")}}function fv(t){return parseInt(t,10)}function gv(t,e){dv(),this.root=t,this.storage=e;var i=document.createElement(\"div\"),n=document.createElement(\"div\");i.style.cssText=\"display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;\",n.style.cssText=\"position:absolute;left:0;top:0;\",t.appendChild(i),this._vmlRoot=n,this._vmlViewport=i,this.resize();var o=e.delFromStorage,a=e.addToStorage;e.delFromStorage=function(t){o.call(e,t),t&&t.onRemove&&t.onRemove(n)},e.addToStorage=function(t){t.onAdd&&t.onAdd(n),a.call(e,t)},this._firstPaint=!0}function pv(t){return function(){Wy('In IE8.0 VML mode painter not support method \"'+t+'\"')}}function mv(t){return document.createElementNS(Tk,t)}function vv(t){return Lk(1e4*t)/1e4}function yv(t){return t<Ek&&t>-Ek}function xv(t,e){var i=e?t.textFill:t.fill;return null!=i&&i!==Dk}function _v(t,e){var i=e?t.textStroke:t.stroke;return null!=i&&i!==Dk}function bv(t,e){e&&wv(t,\"transform\",\"matrix(\"+Ck.call(e,\",\")+\")\")}function wv(t,e,i){(!i||\"linear\"!==i.type&&\"radial\"!==i.type)&&t.setAttribute(e,i)}function Sv(t,e,i){t.setAttributeNS(\"http://www.w3.org/1999/xlink\",e,i)}function Mv(t,e,i){if(xv(e,i)){var n=i?e.textFill:e.fill;n=\"transparent\"===n?Dk:n,\"none\"!==t.getAttribute(\"clip-path\")&&n===Dk&&(n=\"rgba(0, 0, 0, 0.002)\"),wv(t,\"fill\",n),wv(t,\"fill-opacity\",e.opacity)}else wv(t,\"fill\",Dk);if(_v(e,i)){var o=i?e.textStroke:e.stroke;wv(t,\"stroke\",o=\"transparent\"===o?Dk:o),wv(t,\"stroke-width\",(i?e.textStrokeWidth:e.lineWidth)/(e.strokeNoScale?e.host.getLineScale():1)),wv(t,\"paint-order\",\"stroke\"),wv(t,\"stroke-opacity\",e.opacity),e.lineDash?(wv(t,\"stroke-dasharray\",e.lineDash.join(\",\")),wv(t,\"stroke-dashoffset\",Lk(e.lineDashOffset||0))):wv(t,\"stroke-dasharray\",\"\"),e.lineCap&&wv(t,\"stroke-linecap\",e.lineCap),e.lineJoin&&wv(t,\"stroke-linejoin\",e.lineJoin),e.miterLimit&&wv(t,\"stroke-miterlimit\",e.miterLimit)}else wv(t,\"stroke\",Dk)}function Iv(t){for(var e=[],i=t.data,n=t.len(),o=0;o<n;){var a=\"\",r=0;switch(i[o++]){case Ak.M:a=\"M\",r=2;break;case Ak.L:a=\"L\",r=2;break;case Ak.Q:a=\"Q\",r=4;break;case Ak.C:a=\"C\",r=6;break;case Ak.A:var s=i[o++],l=i[o++],h=i[o++],u=i[o++],c=i[o++],d=i[o++],f=i[o++],g=i[o++],p=Math.abs(d),m=yv(p%zk)&&!yv(p),v=!1;v=p>=zk||!yv(p)&&(d>-Ok&&d<0||d>Ok)==!!g;var y=vv(s+h*Pk(c)),x=vv(l+u*kk(c));m&&(d=g?zk-1e-4:1e-4-zk,v=!0,9===o&&e.push(\"M\",y,x));var _=vv(s+h*Pk(c+d)),b=vv(l+u*kk(c+d));e.push(\"A\",vv(h),vv(u),Lk(f*Nk),+v,+g,_,b);break;case Ak.Z:a=\"Z\";break;case Ak.R:var _=vv(i[o++]),b=vv(i[o++]),w=vv(i[o++]),S=vv(i[o++]);e.push(\"M\",_,b,\"L\",_+w,b,\"L\",_+w,b+S,\"L\",_,b+S,\"L\",_,b)}a&&e.push(a);for(var M=0;M<r;M++)e.push(vv(i[o++]))}return e.join(\" \")}function Tv(t){return\"middle\"===t?\"middle\":\"bottom\"===t?\"baseline\":\"hanging\"}function Av(){}function Cv(t,e,i,n){for(var o=0,a=e.length,r=0,s=0;o<a;o++){var l=e[o];if(l.removed){for(var h=[],u=s;u<s+l.count;u++)h.push(u);l.indices=h,s+=l.count}else{for(var h=[],u=r;u<r+l.count;u++)h.push(u);l.indices=h,r+=l.count,l.added||(s+=l.count)}}return e}function Dv(t){return{newPos:t.newPos,components:t.components.slice(0)}}function Lv(t,e,i){this._svgRoot=t,this._tagNames=\"string\"==typeof e?[e]:e,this._markLabel=i,this.nextId=0}function kv(t){Lv.call(this,t,[\"linearGradient\",\"radialGradient\"],\"__gradient_in_use__\")}function Pv(t){Lv.call(this,t,\"clipPath\",\"__clippath_in_use__\")}function Ov(t){return parseInt(t,10)}function zv(t){return t instanceof Nn?Rk:t instanceof qe?Vk:t instanceof ib?Bk:Rk}function Nv(t,e){return e&&t&&e.parentNode!==t}function Ev(t,e,i){if(Nv(t,e)&&i){var n=i.nextSibling;n?t.insertBefore(e,n):t.appendChild(e)}}function Rv(t,e){if(Nv(t,e)){var i=t.firstChild;i?t.insertBefore(e,i):t.appendChild(e)}}function Vv(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)}function Bv(t){return t.__textSvgEl}function Gv(t){return t.__svgEl}function Wv(t){return function(){Wy('In SVG mode painter not support method \"'+t+'\"')}}var Hv=2311,Fv=function(){return Hv++},Zv={},Uv=Zv=\"undefined\"==typeof navigator?{browser:{},os:{},node:!0,canvasSupported:!0,svgSupported:!0}:function(t){var e={},i={},n=t.match(/Firefox\\/([\\d.]+)/),o=t.match(/MSIE\\s([\\d.]+)/)||t.match(/Trident\\/.+?rv:(([\\d.]+))/),a=t.match(/Edge\\/([\\d.]+)/),r=/micromessenger/i.test(t);return n&&(i.firefox=!0,i.version=n[1]),o&&(i.ie=!0,i.version=o[1]),a&&(i.edge=!0,i.version=a[1]),r&&(i.weChat=!0),{browser:i,os:e,node:!1,canvasSupported:!!document.createElement(\"canvas\").getContext,svgSupported:\"undefined\"!=typeof SVGRect,touchEventsSupported:\"ontouchstart\"in window&&!i.ie&&!i.edge,pointerEventsSupported:\"onpointerdown\"in window&&(i.edge||i.ie&&i.version>=11)}}(navigator.userAgent),Xv={\"[object Function]\":1,\"[object RegExp]\":1,\"[object Date]\":1,\"[object Error]\":1,\"[object CanvasGradient]\":1,\"[object CanvasPattern]\":1,\"[object Image]\":1,\"[object Canvas]\":1},jv={\"[object Int8Array]\":1,\"[object Uint8Array]\":1,\"[object Uint8ClampedArray]\":1,\"[object Int16Array]\":1,\"[object Uint16Array]\":1,\"[object Int32Array]\":1,\"[object Uint32Array]\":1,\"[object Float32Array]\":1,\"[object Float64Array]\":1},qv=Object.prototype.toString,Yv=Array.prototype,$v=Yv.forEach,Kv=Yv.filter,Jv=Yv.slice,Qv=Yv.map,ty=Yv.reduce,ey={},iy=function(){return ey.createCanvas()};ey.createCanvas=function(){return document.createElement(\"canvas\")};var ny,oy=\"__ec_primitive__\";O.prototype={constructor:O,get:function(t){return this[\"_ec_\"+t]},set:function(t,e){return this[\"_ec_\"+t]=e,e},each:function(t,e){void 0!==e&&(t=m(t,e));for(var i in this)this.hasOwnProperty(i)&&t(this[i],i.slice(4))},removeKey:function(t){delete this[\"_ec_\"+t]}};var ay=(Object.freeze||Object)({$override:e,clone:i,merge:n,mergeAll:o,extend:a,defaults:r,createCanvas:iy,getContext:s,indexOf:l,inherits:h,mixin:u,isArrayLike:c,each:d,map:f,reduce:g,filter:p,find:function(t,e,i){if(t&&e)for(var n=0,o=t.length;n<o;n++)if(e.call(i,t[n],n,t))return t[n]},bind:m,curry:v,isArray:y,isFunction:x,isString:_,isObject:b,isBuiltInObject:w,isDom:S,eqNaN:M,retrieve:I,retrieve2:T,retrieve3:A,slice:C,normalizeCssArray:D,assert:L,setAsPrimitive:k,isPrimitive:P,createHashMap:z,noop:N}),ry=\"undefined\"==typeof Float32Array?Array:Float32Array,sy=F,ly=Z,hy=j,uy=q,cy=(Object.freeze||Object)({create:E,copy:R,clone:V,set:B,add:G,scaleAndAdd:W,sub:H,len:F,length:sy,lenSquare:Z,lengthSquare:ly,mul:function(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t},div:function(t,e,i){return t[0]=e[0]/i[0],t[1]=e[1]/i[1],t},dot:function(t,e){return t[0]*e[0]+t[1]*e[1]},scale:U,normalize:X,distance:j,dist:hy,distanceSquare:q,distSquare:uy,negate:function(t,e){return t[0]=-e[0],t[1]=-e[1],t},lerp:Y,applyTransform:$,min:K,max:J});Q.prototype={constructor:Q,_dragStart:function(t){var e=t.target;e&&e.draggable&&(this._draggingTarget=e,e.dragging=!0,this._x=t.offsetX,this._y=t.offsetY,this.dispatchToElement(tt(e,t),\"dragstart\",t.event))},_drag:function(t){var e=this._draggingTarget;if(e){var i=t.offsetX,n=t.offsetY,o=i-this._x,a=n-this._y;this._x=i,this._y=n,e.drift(o,a,t),this.dispatchToElement(tt(e,t),\"drag\",t.event);var r=this.findHover(i,n,e).target,s=this._dropTarget;this._dropTarget=r,e!==r&&(s&&r!==s&&this.dispatchToElement(tt(s,t),\"dragleave\",t.event),r&&r!==s&&this.dispatchToElement(tt(r,t),\"dragenter\",t.event))}},_dragEnd:function(t){var e=this._draggingTarget;e&&(e.dragging=!1),this.dispatchToElement(tt(e,t),\"dragend\",t.event),this._dropTarget&&this.dispatchToElement(tt(this._dropTarget,t),\"drop\",t.event),this._draggingTarget=null,this._dropTarget=null}};var dy=Array.prototype.slice,fy=function(){this._$handlers={}};fy.prototype={constructor:fy,one:function(t,e,i){var n=this._$handlers;if(!e||!t)return this;n[t]||(n[t]=[]);for(var o=0;o<n[t].length;o++)if(n[t][o].h===e)return this;return n[t].push({h:e,one:!0,ctx:i||this}),this},on:function(t,e,i){var n=this._$handlers;if(!e||!t)return this;n[t]||(n[t]=[]);for(var o=0;o<n[t].length;o++)if(n[t][o].h===e)return this;return n[t].push({h:e,one:!1,ctx:i||this}),this},isSilent:function(t){var e=this._$handlers;return e[t]&&e[t].length},off:function(t,e){var i=this._$handlers;if(!t)return this._$handlers={},this;if(e){if(i[t]){for(var n=[],o=0,a=i[t].length;o<a;o++)i[t][o].h!=e&&n.push(i[t][o]);i[t]=n}i[t]&&0===i[t].length&&delete i[t]}else delete i[t];return this},trigger:function(t){if(this._$handlers[t]){var e=arguments,i=e.length;i>3&&(e=dy.call(e,1));for(var n=this._$handlers[t],o=n.length,a=0;a<o;){switch(i){case 1:n[a].h.call(n[a].ctx);break;case 2:n[a].h.call(n[a].ctx,e[1]);break;case 3:n[a].h.call(n[a].ctx,e[1],e[2]);break;default:n[a].h.apply(n[a].ctx,e)}n[a].one?(n.splice(a,1),o--):a++}}return this},triggerWithContext:function(t){if(this._$handlers[t]){var e=arguments,i=e.length;i>4&&(e=dy.call(e,1,e.length-1));for(var n=e[e.length-1],o=this._$handlers[t],a=o.length,r=0;r<a;){switch(i){case 1:o[r].h.call(n);break;case 2:o[r].h.call(n,e[1]);break;case 3:o[r].h.call(n,e[1],e[2]);break;default:o[r].h.apply(n,e)}o[r].one?(o.splice(r,1),a--):r++}}return this}};var gy=\"silent\";it.prototype.dispose=function(){};var py=[\"click\",\"dblclick\",\"mousewheel\",\"mouseout\",\"mouseup\",\"mousedown\",\"mousemove\",\"contextmenu\"],my=function(t,e,i,n){fy.call(this),this.storage=t,this.painter=e,this.painterRoot=n,i=i||new it,this.proxy=i,i.handler=this,this._hovered={},this._lastTouchMoment,this._lastX,this._lastY,Q.call(this),d(py,function(t){i.on&&i.on(t,this[t],this)},this)};my.prototype={constructor:my,mousemove:function(t){var e=t.zrX,i=t.zrY,n=this._hovered,o=n.target;o&&!o.__zr&&(o=(n=this.findHover(n.x,n.y)).target);var a=this._hovered=this.findHover(e,i),r=a.target,s=this.proxy;s.setCursor&&s.setCursor(r?r.cursor:\"default\"),o&&r!==o&&this.dispatchToElement(n,\"mouseout\",t),this.dispatchToElement(a,\"mousemove\",t),r&&r!==o&&this.dispatchToElement(a,\"mouseover\",t)},mouseout:function(t){this.dispatchToElement(this._hovered,\"mouseout\",t);var e,i=t.toElement||t.relatedTarget;do{i=i&&i.parentNode}while(i&&9!=i.nodeType&&!(e=i===this.painterRoot));!e&&this.trigger(\"globalout\",{event:t})},resize:function(t){this._hovered={}},dispatch:function(t,e){var i=this[t];i&&i.call(this,e)},dispose:function(){this.proxy.dispose(),this.storage=this.proxy=this.painter=null},setCursorStyle:function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},dispatchToElement:function(t,e,i){var n=(t=t||{}).target;if(!n||!n.silent){for(var o=\"on\"+e,a=et(e,t,i);n&&(n[o]&&(a.cancelBubble=n[o].call(n,a)),n.trigger(e,a),n=n.parent,!a.cancelBubble););a.cancelBubble||(this.trigger(e,a),this.painter&&this.painter.eachOtherLayer(function(t){\"function\"==typeof t[o]&&t[o].call(t,a),t.trigger&&t.trigger(e,a)}))}},findHover:function(t,e,i){for(var n=this.storage.getDisplayList(),o={x:t,y:e},a=n.length-1;a>=0;a--){var r;if(n[a]!==i&&!n[a].ignore&&(r=nt(n[a],t,e))&&(!o.topTarget&&(o.topTarget=n[a]),r!==gy)){o.target=n[a];break}}return o}},d([\"click\",\"mousedown\",\"mouseup\",\"mousewheel\",\"dblclick\",\"contextmenu\"],function(t){my.prototype[t]=function(e){var i=this.findHover(e.zrX,e.zrY),n=i.target;if(\"mousedown\"===t)this._downEl=n,this._downPoint=[e.zrX,e.zrY],this._upEl=n;else if(\"mosueup\"===t)this._upEl=n;else if(\"click\"===t){if(this._downEl!==this._upEl||!this._downPoint||hy(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(i,t,e)}}),u(my,fy),u(my,Q);var vy=\"undefined\"==typeof Float32Array?Array:Float32Array,yy=(Object.freeze||Object)({create:ot,identity:at,copy:rt,mul:st,translate:lt,rotate:ht,scale:ut,invert:ct}),xy=at,_y=5e-5,by=function(t){(t=t||{}).position||(this.position=[0,0]),null==t.rotation&&(this.rotation=0),t.scale||(this.scale=[1,1]),this.origin=this.origin||null},wy=by.prototype;wy.transform=null,wy.needLocalTransform=function(){return dt(this.rotation)||dt(this.position[0])||dt(this.position[1])||dt(this.scale[0]-1)||dt(this.scale[1]-1)},wy.updateTransform=function(){var t=this.parent,e=t&&t.transform,i=this.needLocalTransform(),n=this.transform;i||e?(n=n||ot(),i?this.getLocalTransform(n):xy(n),e&&(i?st(n,t.transform,n):rt(n,t.transform)),this.transform=n,this.invTransform=this.invTransform||ot(),ct(this.invTransform,n)):n&&xy(n)},wy.getLocalTransform=function(t){return by.getLocalTransform(this,t)},wy.setTransform=function(t){var e=this.transform,i=t.dpr||1;e?t.setTransform(i*e[0],i*e[1],i*e[2],i*e[3],i*e[4],i*e[5]):t.setTransform(i,0,0,i,0,0)},wy.restoreTransform=function(t){var e=t.dpr||1;t.setTransform(e,0,0,e,0,0)};var Sy=[];wy.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(st(Sy,t.invTransform,e),e=Sy);var i=e[0]*e[0]+e[1]*e[1],n=e[2]*e[2]+e[3]*e[3],o=this.position,a=this.scale;dt(i-1)&&(i=Math.sqrt(i)),dt(n-1)&&(n=Math.sqrt(n)),e[0]<0&&(i=-i),e[3]<0&&(n=-n),o[0]=e[4],o[1]=e[5],a[0]=i,a[1]=n,this.rotation=Math.atan2(-e[1]/n,e[0]/i)}},wy.getGlobalScale=function(){var t=this.transform;if(!t)return[1,1];var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]),i=Math.sqrt(t[2]*t[2]+t[3]*t[3]);return t[0]<0&&(e=-e),t[3]<0&&(i=-i),[e,i]},wy.transformCoordToLocal=function(t,e){var i=[t,e],n=this.invTransform;return n&&$(i,i,n),i},wy.transformCoordToGlobal=function(t,e){var i=[t,e],n=this.transform;return n&&$(i,i,n),i},by.getLocalTransform=function(t,e){xy(e=e||[]);var i=t.origin,n=t.scale||[1,1],o=t.rotation||0,a=t.position||[0,0];return i&&(e[4]-=i[0],e[5]-=i[1]),ut(e,e,n),o&&ht(e,e,o),i&&(e[4]+=i[0],e[5]+=i[1]),e[4]+=a[0],e[5]+=a[1],e};var My={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4))},elasticOut:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/.4)+1)},elasticInOut:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),(t*=2)<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-My.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*My.bounceIn(2*t):.5*My.bounceOut(2*t-1)+.5}};ft.prototype={constructor:ft,step:function(t,e){if(this._initialized||(this._startTime=t+this._delay,this._initialized=!0),this._paused)this._pausedTime+=e;else{var i=(t-this._startTime-this._pausedTime)/this._life;if(!(i<0)){i=Math.min(i,1);var n=this.easing,o=\"string\"==typeof n?My[n]:n,a=\"function\"==typeof o?o(i):i;return this.fire(\"frame\",a),1==i?this.loop?(this.restart(t),\"restart\"):(this._needsRemove=!0,\"destroy\"):null}}},restart:function(t){var e=(t-this._startTime-this._pausedTime)%this._life;this._startTime=t-e+this.gap,this._pausedTime=0,this._needsRemove=!1},fire:function(t,e){this[t=\"on\"+t]&&this[t](this._target,e)},pause:function(){this._paused=!0},resume:function(){this._paused=!1}};var Iy=function(){this.head=null,this.tail=null,this._len=0},Ty=Iy.prototype;Ty.insert=function(t){var e=new Ay(t);return this.insertEntry(e),e},Ty.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},Ty.remove=function(t){var e=t.prev,i=t.next;e?e.next=i:this.head=i,i?i.prev=e:this.tail=e,t.next=t.prev=null,this._len--},Ty.len=function(){return this._len},Ty.clear=function(){this.head=this.tail=null,this._len=0};var Ay=function(t){this.value=t,this.next,this.prev},Cy=function(t){this._list=new Iy,this._map={},this._maxSize=t||10,this._lastRemovedEntry=null},Dy=Cy.prototype;Dy.put=function(t,e){var i=this._list,n=this._map,o=null;if(null==n[t]){var a=i.len(),r=this._lastRemovedEntry;if(a>=this._maxSize&&a>0){var s=i.head;i.remove(s),delete n[s.key],o=s.value,this._lastRemovedEntry=s}r?r.value=e:r=new Ay(e),r.key=t,i.insertEntry(r),n[t]=r}return o},Dy.get=function(t){var e=this._map[t],i=this._list;if(null!=e)return e!==i.tail&&(i.remove(e),i.insertEntry(e)),e.value},Dy.clear=function(){this._list.clear(),this._map={}};var Ly={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]},ky=new Cy(20),Py=null,Oy=Dt,zy=Lt,Ny=(Object.freeze||Object)({parse:Mt,lift:At,toHex:Ct,fastLerp:Dt,fastMapToColor:Oy,lerp:Lt,mapToColor:zy,modifyHSL:kt,modifyAlpha:Pt,stringify:Ot}),Ey=Array.prototype.slice,Ry=function(t,e,i,n){this._tracks={},this._target=t,this._loop=e||!1,this._getter=i||zt,this._setter=n||Nt,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};Ry.prototype={when:function(t,e){var i=this._tracks;for(var n in e)if(e.hasOwnProperty(n)){if(!i[n]){i[n]=[];var o=this._getter(this._target,n);if(null==o)continue;0!==t&&i[n].push({time:0,value:Ft(o)})}i[n].push({time:t,value:e[n]})}return this},during:function(t){return this._onframeList.push(t),this},pause:function(){for(var t=0;t<this._clipList.length;t++)this._clipList[t].pause();this._paused=!0},resume:function(){for(var t=0;t<this._clipList.length;t++)this._clipList[t].resume();this._paused=!1},isPaused:function(){return!!this._paused},_doneCallback:function(){this._tracks={},this._clipList.length=0;for(var t=this._doneList,e=t.length,i=0;i<e;i++)t[i].call(this)},start:function(t,e){var i,n=this,o=0;for(var a in this._tracks)if(this._tracks.hasOwnProperty(a)){var r=Xt(this,t,function(){--o||n._doneCallback()},this._tracks[a],a,e);r&&(this._clipList.push(r),o++,this.animation&&this.animation.addClip(r),i=r)}if(i){var s=i.onframe;i.onframe=function(t,e){s(t,e);for(var i=0;i<n._onframeList.length;i++)n._onframeList[i](t,e)}}return o||this._doneCallback(),this},stop:function(t){for(var e=this._clipList,i=this.animation,n=0;n<e.length;n++){var o=e[n];t&&o.onframe(this._target,1),i&&i.removeClip(o)}e.length=0},delay:function(t){return this._delay=t,this},done:function(t){return t&&this._doneList.push(t),this},getClips:function(){return this._clipList}};var Vy=1;\"undefined\"!=typeof window&&(Vy=Math.max(window.devicePixelRatio||1,1));var By=Vy,Gy=function(){},Wy=Gy,Hy=function(){this.animators=[]};Hy.prototype={constructor:Hy,animate:function(t,e){var i,n=!1,o=this,a=this.__zr;if(t){var r=t.split(\".\"),s=o;n=\"shape\"===r[0];for(var h=0,u=r.length;h<u;h++)s&&(s=s[r[h]]);s&&(i=s)}else i=o;if(i){var c=o.animators,d=new Ry(i,e);return d.during(function(t){o.dirty(n)}).done(function(){c.splice(l(c,d),1)}),c.push(d),a&&a.animation.addAnimator(d),d}Wy('Property \"'+t+'\" is not existed in element '+o.id)},stopAnimation:function(t){for(var e=this.animators,i=e.length,n=0;n<i;n++)e[n].stop(t);return e.length=0,this},animateTo:function(t,e,i,n,o,a){_(i)?(o=n,n=i,i=0):x(n)?(o=n,n=\"linear\",i=0):x(i)?(o=i,i=0):x(e)?(o=e,e=500):e||(e=500),this.stopAnimation(),this._animateToShallow(\"\",this,t,e,i);var r=this.animators.slice(),s=r.length;s||o&&o();for(var l=0;l<r.length;l++)r[l].done(function(){--s||o&&o()}).start(n,a)},_animateToShallow:function(t,e,i,n,o){var a={},r=0;for(var s in i)if(i.hasOwnProperty(s))if(null!=e[s])b(i[s])&&!c(i[s])?this._animateToShallow(t?t+\".\"+s:s,e[s],i[s],n,o):(a[s]=i[s],r++);else if(null!=i[s])if(t){var l={};l[t]={},l[t][s]=i[s],this.attr(l)}else this.attr(s,i[s]);return r>0&&this.animate(t,!1).when(null==n?500:n,a).delay(o||0),this}};var Fy=function(t){by.call(this,t),fy.call(this,t),Hy.call(this,t),this.id=t.id||Fv()};Fy.prototype={type:\"element\",name:\"\",__zr:null,ignore:!1,clipPath:null,drift:function(t,e){switch(this.draggable){case\"horizontal\":e=0;break;case\"vertical\":t=0}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=t,i[5]+=e,this.decomposeTransform(),this.dirty(!1)},beforeUpdate:function(){},afterUpdate:function(){},update:function(){this.updateTransform()},traverse:function(t,e){},attrKV:function(t,e){if(\"position\"===t||\"scale\"===t||\"origin\"===t){if(e){var i=this[t];i||(i=this[t]=[]),i[0]=e[0],i[1]=e[1]}}else this[t]=e},hide:function(){this.ignore=!0,this.__zr&&this.__zr.refresh()},show:function(){this.ignore=!1,this.__zr&&this.__zr.refresh()},attr:function(t,e){if(\"string\"==typeof t)this.attrKV(t,e);else if(b(t))for(var i in t)t.hasOwnProperty(i)&&this.attrKV(i,t[i]);return this.dirty(!1),this},setClipPath:function(t){var e=this.__zr;e&&t.addSelfToZr(e),this.clipPath&&this.clipPath!==t&&this.removeClipPath(),this.clipPath=t,t.__zr=e,t.__clipTarget=this,this.dirty(!1)},removeClipPath:function(){var t=this.clipPath;t&&(t.__zr&&t.removeSelfFromZr(t.__zr),t.__zr=null,t.__clipTarget=null,this.clipPath=null,this.dirty(!1))},addSelfToZr:function(t){this.__zr=t;var e=this.animators;if(e)for(var i=0;i<e.length;i++)t.animation.addAnimator(e[i]);this.clipPath&&this.clipPath.addSelfToZr(t)},removeSelfFromZr:function(t){this.__zr=null;var e=this.animators;if(e)for(var i=0;i<e.length;i++)t.animation.removeAnimator(e[i]);this.clipPath&&this.clipPath.removeSelfFromZr(t)}},u(Fy,Hy),u(Fy,by),u(Fy,fy);var Zy=$,Uy=Math.min,Xy=Math.max;jt.prototype={constructor:jt,union:function(t){var e=Uy(t.x,this.x),i=Uy(t.y,this.y);this.width=Xy(t.x+t.width,this.x+this.width)-e,this.height=Xy(t.y+t.height,this.y+this.height)-i,this.x=e,this.y=i},applyTransform:function(){var t=[],e=[],i=[],n=[];return function(o){if(o){t[0]=i[0]=this.x,t[1]=n[1]=this.y,e[0]=n[0]=this.x+this.width,e[1]=i[1]=this.y+this.height,Zy(t,t,o),Zy(e,e,o),Zy(i,i,o),Zy(n,n,o),this.x=Uy(t[0],e[0],i[0],n[0]),this.y=Uy(t[1],e[1],i[1],n[1]);var a=Xy(t[0],e[0],i[0],n[0]),r=Xy(t[1],e[1],i[1],n[1]);this.width=a-this.x,this.height=r-this.y}}}(),calculateTransform:function(t){var e=this,i=t.width/e.width,n=t.height/e.height,o=ot();return lt(o,o,[-e.x,-e.y]),ut(o,o,[i,n]),lt(o,o,[t.x,t.y]),o},intersect:function(t){if(!t)return!1;t instanceof jt||(t=jt.create(t));var e=this,i=e.x,n=e.x+e.width,o=e.y,a=e.y+e.height,r=t.x,s=t.x+t.width,l=t.y,h=t.y+t.height;return!(n<r||s<i||a<l||h<o)},contain:function(t,e){var i=this;return t>=i.x&&t<=i.x+i.width&&e>=i.y&&e<=i.y+i.height},clone:function(){return new jt(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},jt.create=function(t){return new jt(t.x,t.y,t.width,t.height)};var jy=function(t){t=t||{},Fy.call(this,t);for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};jy.prototype={constructor:jy,isGroup:!0,type:\"group\",silent:!1,children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,i=0;i<e.length;i++)if(e[i].name===t)return e[i]},childCount:function(){return this._children.length},add:function(t){return t&&t!==this&&t.parent!==this&&(this._children.push(t),this._doAdd(t)),this},addBefore:function(t,e){if(t&&t!==this&&t.parent!==this&&e&&e.parent===this){var i=this._children,n=i.indexOf(e);n>=0&&(i.splice(n,0,t),this._doAdd(t))}return this},_doAdd:function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__storage,i=this.__zr;e&&e!==t.__storage&&(e.addToStorage(t),t instanceof jy&&t.addChildrenToStorage(e)),i&&i.refresh()},remove:function(t){var e=this.__zr,i=this.__storage,n=this._children,o=l(n,t);return o<0?this:(n.splice(o,1),t.parent=null,i&&(i.delFromStorage(t),t instanceof jy&&t.delChildrenFromStorage(i)),e&&e.refresh(),this)},removeAll:function(){var t,e,i=this._children,n=this.__storage;for(e=0;e<i.length;e++)t=i[e],n&&(n.delFromStorage(t),t instanceof jy&&t.delChildrenFromStorage(n)),t.parent=null;return i.length=0,this},eachChild:function(t,e){for(var i=this._children,n=0;n<i.length;n++){var o=i[n];t.call(e,o,n)}return this},traverse:function(t,e){for(var i=0;i<this._children.length;i++){var n=this._children[i];t.call(e,n),\"group\"===n.type&&n.traverse(t,e)}return this},addChildrenToStorage:function(t){for(var e=0;e<this._children.length;e++){var i=this._children[e];t.addToStorage(i),i instanceof jy&&i.addChildrenToStorage(t)}},delChildrenFromStorage:function(t){for(var e=0;e<this._children.length;e++){var i=this._children[e];t.delFromStorage(i),i instanceof jy&&i.delChildrenFromStorage(t)}},dirty:function(){return this.__dirty=!0,this.__zr&&this.__zr.refresh(),this},getBoundingRect:function(t){for(var e=null,i=new jt(0,0,0,0),n=t||this._children,o=[],a=0;a<n.length;a++){var r=n[a];if(!r.ignore&&!r.invisible){var s=r.getBoundingRect(),l=r.getLocalTransform(o);l?(i.copy(s),i.applyTransform(l),(e=e||i.clone()).union(i)):(e=e||s.clone()).union(s)}}return e||i}},h(jy,Fy);var qy=32,Yy=7,$y=function(){this._roots=[],this._displayList=[],this._displayListLen=0};$y.prototype={constructor:$y,traverse:function(t,e){for(var i=0;i<this._roots.length;i++)this._roots[i].traverse(t,e)},getDisplayList:function(t,e){return e=e||!1,t&&this.updateDisplayList(e),this._displayList},updateDisplayList:function(t){this._displayListLen=0;for(var e=this._roots,i=this._displayList,n=0,o=e.length;n<o;n++)this._updateAndAddDisplayable(e[n],null,t);i.length=this._displayListLen,Uv.canvasSupported&&ee(i,ie)},_updateAndAddDisplayable:function(t,e,i){if(!t.ignore||i){t.beforeUpdate(),t.__dirty&&t.update(),t.afterUpdate();var n=t.clipPath;if(n){e=e?e.slice():[];for(var o=n,a=t;o;)o.parent=a,o.updateTransform(),e.push(o),a=o,o=o.clipPath}if(t.isGroup){for(var r=t._children,s=0;s<r.length;s++){var l=r[s];t.__dirty&&(l.__dirty=!0),this._updateAndAddDisplayable(l,e,i)}t.__dirty=!1}else t.__clipPaths=e,this._displayList[this._displayListLen++]=t}},addRoot:function(t){t.__storage!==this&&(t instanceof jy&&t.addChildrenToStorage(this),this.addToStorage(t),this._roots.push(t))},delRoot:function(t){if(null==t){for(i=0;i<this._roots.length;i++){var e=this._roots[i];e instanceof jy&&e.delChildrenFromStorage(this)}return this._roots=[],this._displayList=[],void(this._displayListLen=0)}if(t instanceof Array)for(var i=0,n=t.length;i<n;i++)this.delRoot(t[i]);else{var o=l(this._roots,t);o>=0&&(this.delFromStorage(t),this._roots.splice(o,1),t instanceof jy&&t.delChildrenFromStorage(this))}},addToStorage:function(t){return t.__storage=this,t.dirty(!1),this},delFromStorage:function(t){return t&&(t.__storage=null),this},dispose:function(){this._renderList=this._roots=null},displayableSortFunc:ie};var Ky=[[\"shadowBlur\",0],[\"shadowOffsetX\",0],[\"shadowOffsetY\",0],[\"shadowColor\",\"#000\"],[\"lineCap\",\"butt\"],[\"lineJoin\",\"miter\"],[\"miterLimit\",10]],Jy=function(t,e){this.extendFrom(t,!1),this.host=e};Jy.prototype={constructor:Jy,host:null,fill:\"#000\",stroke:null,opacity:1,lineDash:null,lineDashOffset:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,lineWidth:1,strokeNoScale:!1,text:null,font:null,textFont:null,fontStyle:null,fontWeight:null,fontSize:null,fontFamily:null,textTag:null,textFill:\"#000\",textStroke:null,textWidth:null,textHeight:null,textStrokeWidth:0,textLineHeight:null,textPosition:\"inside\",textRect:null,textOffset:null,textAlign:null,textVerticalAlign:null,textDistance:5,textShadowColor:\"transparent\",textShadowBlur:0,textShadowOffsetX:0,textShadowOffsetY:0,textBoxShadowColor:\"transparent\",textBoxShadowBlur:0,textBoxShadowOffsetX:0,textBoxShadowOffsetY:0,transformText:!1,textRotation:0,textOrigin:null,textBackgroundColor:null,textBorderColor:null,textBorderWidth:0,textBorderRadius:0,textPadding:null,rich:null,truncate:null,blend:null,bind:function(t,e,i){for(var n=this,o=i&&i.style,a=!o,r=0;r<Ky.length;r++){var s=Ky[r],l=s[0];(a||n[l]!==o[l])&&(t[l]=n[l]||s[1])}if((a||n.fill!==o.fill)&&(t.fillStyle=n.fill),(a||n.stroke!==o.stroke)&&(t.strokeStyle=n.stroke),(a||n.opacity!==o.opacity)&&(t.globalAlpha=null==n.opacity?1:n.opacity),(a||n.blend!==o.blend)&&(t.globalCompositeOperation=n.blend||\"source-over\"),this.hasStroke()){var h=n.lineWidth;t.lineWidth=h/(this.strokeNoScale&&e&&e.getLineScale?e.getLineScale():1)}},hasFill:function(){var t=this.fill;return null!=t&&\"none\"!==t},hasStroke:function(){var t=this.stroke;return null!=t&&\"none\"!==t&&this.lineWidth>0},extendFrom:function(t,e){if(t)for(var i in t)!t.hasOwnProperty(i)||!0!==e&&(!1===e?this.hasOwnProperty(i):null==t[i])||(this[i]=t[i])},set:function(t,e){\"string\"==typeof t?this[t]=e:this.extendFrom(t,!0)},clone:function(){var t=new this.constructor;return t.extendFrom(this,!0),t},getGradient:function(t,e,i){for(var n=(\"radial\"===e.type?oe:ne)(t,e,i),o=e.colorStops,a=0;a<o.length;a++)n.addColorStop(o[a].offset,o[a].color);return n}};for(var Qy=Jy.prototype,tx=0;tx<Ky.length;tx++){var ex=Ky[tx];ex[0]in Qy||(Qy[ex[0]]=ex[1])}Jy.getGradient=Qy.getGradient;var ix=function(t,e){this.image=t,this.repeat=e,this.type=\"pattern\"};ix.prototype.getCanvasPattern=function(t){return t.createPattern(this.image,this.repeat||\"repeat\")};var nx=function(t,e,i){var n;i=i||By,\"string\"==typeof t?n=re(t,e,i):b(t)&&(t=(n=t).id),this.id=t,this.dom=n;var o=n.style;o&&(n.onselectstart=ae,o[\"-webkit-user-select\"]=\"none\",o[\"user-select\"]=\"none\",o[\"-webkit-touch-callout\"]=\"none\",o[\"-webkit-tap-highlight-color\"]=\"rgba(0,0,0,0)\",o.padding=0,o.margin=0,o[\"border-width\"]=0),this.domBack=null,this.ctxBack=null,this.painter=e,this.config=null,this.clearColor=0,this.motionBlur=!1,this.lastFrameAlpha=.7,this.dpr=i};nx.prototype={constructor:nx,elCount:0,__dirty:!0,initContext:function(){this.ctx=this.dom.getContext(\"2d\"),this.ctx.__currentValues={},this.ctx.dpr=this.dpr},createBackBuffer:function(){var t=this.dpr;this.domBack=re(\"back-\"+this.id,this.painter,t),this.ctxBack=this.domBack.getContext(\"2d\"),this.ctxBack.__currentValues={},1!=t&&this.ctxBack.scale(t,t)},resize:function(t,e){var i=this.dpr,n=this.dom,o=n.style,a=this.domBack;o.width=t+\"px\",o.height=e+\"px\",n.width=t*i,n.height=e*i,a&&(a.width=t*i,a.height=e*i,1!=i&&this.ctxBack.scale(i,i))},clear:function(t){var e=this.dom,i=this.ctx,n=e.width,o=e.height,a=this.clearColor,r=this.motionBlur&&!t,s=this.lastFrameAlpha,l=this.dpr;if(r&&(this.domBack||this.createBackBuffer(),this.ctxBack.globalCompositeOperation=\"copy\",this.ctxBack.drawImage(e,0,0,n/l,o/l)),i.clearRect(0,0,n,o),a){var h;a.colorStops?(h=a.__canvasGradient||Jy.getGradient(i,a,{x:0,y:0,width:n,height:o}),a.__canvasGradient=h):a.image&&(h=ix.prototype.getCanvasPattern.call(a,i)),i.save(),i.fillStyle=h||a,i.fillRect(0,0,n,o),i.restore()}if(r){var u=this.domBack;i.save(),i.globalAlpha=s,i.drawImage(u,0,0,n,o),i.restore()}}};var ox=\"undefined\"!=typeof window&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){setTimeout(t,16)},ax=new Cy(50),rx={},sx=0,lx=5e3,hx=/\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g,ux=\"12px sans-serif\",cx={};cx.measureText=function(t,e){var i=s();return i.font=e||ux,i.measureText(t)};var dx={left:1,right:1,center:1},fx={top:1,bottom:1,middle:1},gx=new jt,px=function(){};px.prototype={constructor:px,drawRectText:function(t,e){var i=this.style;e=i.textRect||e,this.__dirty&&De(i);var n=i.text;if(null!=n&&(n+=\"\"),Xe(n,i)){t.save();var o=this.transform;i.transformText?this.setTransform(t):o&&(gx.copy(e),gx.applyTransform(o),e=gx),ke(this,t,n,i,e),t.restore()}}},je.prototype={constructor:je,type:\"displayable\",__dirty:!0,invisible:!1,z:0,z2:0,zlevel:0,draggable:!1,dragging:!1,silent:!1,culling:!1,cursor:\"pointer\",rectHover:!1,progressive:-1,beforeBrush:function(t){},afterBrush:function(t){},brush:function(t,e){},getBoundingRect:function(){},contain:function(t,e){return this.rectContain(t,e)},traverse:function(t,e){t.call(e,this)},rectContain:function(t,e){var i=this.transformCoordToLocal(t,e);return this.getBoundingRect().contain(i[0],i[1])},dirty:function(){this.__dirty=!0,this._rect=null,this.__zr&&this.__zr.refresh()},animateStyle:function(t){return this.animate(\"style\",t)},attrKV:function(t,e){\"style\"!==t?Fy.prototype.attrKV.call(this,t,e):this.style.set(e)},setStyle:function(t,e){return this.style.set(t,e),this.dirty(!1),this},useStyle:function(t){return this.style=new Jy(t,this),this.dirty(!1),this}},h(je,Fy),u(je,px),qe.prototype={constructor:qe,type:\"image\",brush:function(t,e){var i=this.style,n=i.image;i.bind(t,this,e);var o=this._image=le(n,this._image,this,this.onload);if(o&&ue(o)){var a=i.x||0,r=i.y||0,s=i.width,l=i.height,h=o.width/o.height;if(null==s&&null!=l?s=l*h:null==l&&null!=s?l=s/h:null==s&&null==l&&(s=o.width,l=o.height),this.setTransform(t),i.sWidth&&i.sHeight){var u=i.sx||0,c=i.sy||0;t.drawImage(o,u,c,i.sWidth,i.sHeight,a,r,s,l)}else if(i.sx&&i.sy){var d=s-(u=i.sx),f=l-(c=i.sy);t.drawImage(o,u,c,d,f,a,r,s,l)}else t.drawImage(o,a,r,s,l);this.restoreTransform(t),null!=i.text&&this.drawRectText(t,this.getBoundingRect())}},getBoundingRect:function(){var t=this.style;return this._rect||(this._rect=new jt(t.x||0,t.y||0,t.width||0,t.height||0)),this._rect}},h(qe,je);var mx=new jt(0,0,0,0),vx=new jt(0,0,0,0),yx=function(t,e,i){this.type=\"canvas\";var n=!t.nodeName||\"CANVAS\"===t.nodeName.toUpperCase();this._opts=i=a({},i||{}),this.dpr=i.devicePixelRatio||By,this._singleCanvas=n,this.root=t;var o=t.style;o&&(o[\"-webkit-tap-highlight-color\"]=\"transparent\",o[\"-webkit-user-select\"]=o[\"user-select\"]=o[\"-webkit-touch-callout\"]=\"none\",t.innerHTML=\"\"),this.storage=e;var r=this._zlevelList=[],s=this._layers={};if(this._layerConfig={},n){null!=i.width&&(t.width=i.width),null!=i.height&&(t.height=i.height);var l=t.width,h=t.height;this._width=l,this._height=h;var u=new nx(t,this,1);u.initContext(),s[0]=u,r.push(0),this._domRoot=t}else{this._width=this._getSize(0),this._height=this._getSize(1);var c=this._domRoot=ii(this._width,this._height);t.appendChild(c)}this._progressiveLayers=[],this._hoverlayer,this._hoverElements=[]};yx.prototype={constructor:yx,getType:function(){return\"canvas\"},isSingleCanvas:function(){return this._singleCanvas},getViewportRoot:function(){return this._domRoot},getViewportRootOffset:function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},refresh:function(t){var e=this.storage.getDisplayList(!0),i=this._zlevelList;this._paintList(e,t);for(var n=0;n<i.length;n++){var o=i[n],a=this._layers[o];!a.__builtin__&&a.refresh&&a.refresh()}return this.refreshHover(),this._progressiveLayers.length&&this._startProgessive(),this},addHover:function(t,e){if(!t.__hoverMir){var i=new t.constructor({style:t.style,shape:t.shape});i.__from=t,t.__hoverMir=i,i.setStyle(e),this._hoverElements.push(i)}},removeHover:function(t){var e=t.__hoverMir,i=this._hoverElements,n=l(i,e);n>=0&&i.splice(n,1),t.__hoverMir=null},clearHover:function(t){for(var e=this._hoverElements,i=0;i<e.length;i++){var n=e[i].__from;n&&(n.__hoverMir=null)}e.length=0},refreshHover:function(){var t=this._hoverElements,e=t.length,i=this._hoverlayer;if(i&&i.clear(),e){ee(t,this.storage.displayableSortFunc),i||(i=this._hoverlayer=this.getLayer(1e5));var n={};i.ctx.save();for(var o=0;o<e;){var a=t[o],r=a.__from;r&&r.__zr?(o++,r.invisible||(a.transform=r.transform,a.invTransform=r.invTransform,a.__clipPaths=r.__clipPaths,this._doPaintEl(a,i,!0,n))):(t.splice(o,1),r.__hoverMir=null,e--)}i.ctx.restore()}},_startProgessive:function(){function t(){i===e._progressiveToken&&e.storage&&(e._doPaintList(e.storage.getDisplayList()),e._furtherProgressive?(e._progress++,ox(t)):e._progressiveToken=-1)}var e=this;if(e._furtherProgressive){var i=e._progressiveToken=+new Date;e._progress++,ox(t)}},_clearProgressive:function(){this._progressiveToken=-1,this._progress=0,d(this._progressiveLayers,function(t){t.__dirty&&t.clear()})},_paintList:function(t,e){null==e&&(e=!1),this._updateLayerStatus(t),this._clearProgressive(),this.eachBuiltinLayer(Ke),this._doPaintList(t,e),this.eachBuiltinLayer(Je)},_doPaintList:function(t,e){function i(t){var e=a.dpr||1;a.save(),a.globalAlpha=1,a.shadowBlur=0,n.__dirty=!0,a.setTransform(1,0,0,1,0,0),a.drawImage(t.dom,0,0,u*e,c*e),a.restore()}for(var n,o,a,r,s,l,h=0,u=this._width,c=this._height,f=this._progress,g=0,p=t.length;g<p;g++){var m=t[g],v=this._singleCanvas?0:m.zlevel,y=m.__frame;if(y<0&&s&&(i(s),s=null),o!==v&&(a&&a.restore(),r={},o=v,(n=this.getLayer(o)).__builtin__||Wy(\"ZLevel \"+o+\" has been used by unkown layer \"+n.id),(a=n.ctx).save(),n.__unusedCount=0,(n.__dirty||e)&&n.clear()),n.__dirty||e){if(y>=0){if(!s){if((s=this._progressiveLayers[Math.min(h++,4)]).ctx.save(),s.renderScope={},s&&s.__progress>s.__maxProgress){g=s.__nextIdxNotProg-1;continue}l=s.__progress,s.__dirty||(f=l),s.__progress=f+1}y===f&&this._doPaintEl(m,s,!0,s.renderScope)}else this._doPaintEl(m,n,e,r);m.__dirty=!1}}s&&i(s),a&&a.restore(),this._furtherProgressive=!1,d(this._progressiveLayers,function(t){t.__maxProgress>=t.__progress&&(this._furtherProgressive=!0)},this)},_doPaintEl:function(t,e,i,n){var o=e.ctx,a=t.transform;if((e.__dirty||i)&&!t.invisible&&0!==t.style.opacity&&(!a||a[0]||a[3])&&(!t.culling||!Qe(t,this._width,this._height))){var r=t.__clipPaths;(n.prevClipLayer!==e||ti(r,n.prevElClipPaths))&&(n.prevElClipPaths&&(n.prevClipLayer.ctx.restore(),n.prevClipLayer=n.prevElClipPaths=null,n.prevEl=null),r&&(o.save(),ei(r,o),n.prevClipLayer=e,n.prevElClipPaths=r)),t.beforeBrush&&t.beforeBrush(o),t.brush(o,n.prevEl||null),n.prevEl=t,t.afterBrush&&t.afterBrush(o)}},getLayer:function(t){if(this._singleCanvas)return this._layers[0];var e=this._layers[t];return e||((e=new nx(\"zr_\"+t,this,this.dpr)).__builtin__=!0,this._layerConfig[t]&&n(e,this._layerConfig[t],!0),this.insertLayer(t,e),e.initContext()),e},insertLayer:function(t,e){var i=this._layers,n=this._zlevelList,o=n.length,a=null,r=-1,s=this._domRoot;if(i[t])Wy(\"ZLevel \"+t+\" has been used already\");else if($e(e)){if(o>0&&t>n[0]){for(r=0;r<o-1&&!(n[r]<t&&n[r+1]>t);r++);a=i[n[r]]}if(n.splice(r+1,0,t),i[t]=e,!e.virtual)if(a){var l=a.dom;l.nextSibling?s.insertBefore(e.dom,l.nextSibling):s.appendChild(e.dom)}else s.firstChild?s.insertBefore(e.dom,s.firstChild):s.appendChild(e.dom)}else Wy(\"Layer of zlevel \"+t+\" is not valid\")},eachLayer:function(t,e){var i,n,o=this._zlevelList;for(n=0;n<o.length;n++)i=o[n],t.call(e,this._layers[i],i)},eachBuiltinLayer:function(t,e){var i,n,o,a=this._zlevelList;for(o=0;o<a.length;o++)n=a[o],(i=this._layers[n]).__builtin__&&t.call(e,i,n)},eachOtherLayer:function(t,e){var i,n,o,a=this._zlevelList;for(o=0;o<a.length;o++)n=a[o],(i=this._layers[n]).__builtin__||t.call(e,i,n)},getLayers:function(){return this._layers},_updateLayerStatus:function(t){var e=this._layers,i=this._progressiveLayers,n={},o={};this.eachBuiltinLayer(function(t,e){n[e]=t.elCount,t.elCount=0,t.__dirty=!1}),d(i,function(t,e){o[e]=t.elCount,t.elCount=0,t.__dirty=!1});for(var a,r,s=0,l=0,h=0,u=t.length;h<u;h++){var c=t[h],f=e[this._singleCanvas?0:c.zlevel],g=c.progressive;if(f&&(f.elCount++,f.__dirty=f.__dirty||c.__dirty),g>=0){r!==g&&(r=g,l++);var p=c.__frame=l-1;if(!a){var m=Math.min(s,4);(a=i[m])||(a=i[m]=new nx(\"progressive\",this,this.dpr)).initContext(),a.__maxProgress=0}a.__dirty=a.__dirty||c.__dirty,a.elCount++,a.__maxProgress=Math.max(a.__maxProgress,p),a.__maxProgress>=a.__progress&&(f.__dirty=!0)}else c.__frame=-1,a&&(a.__nextIdxNotProg=h,s++,a=null)}a&&(s++,a.__nextIdxNotProg=h),this.eachBuiltinLayer(function(t,e){n[e]!==t.elCount&&(t.__dirty=!0)}),i.length=Math.min(s,5),d(i,function(t,e){o[e]!==t.elCount&&(c.__dirty=!0),t.__dirty&&(t.__progress=0)})},clear:function(){return this.eachBuiltinLayer(this._clearLayer),this},_clearLayer:function(t){t.clear()},configLayer:function(t,e){if(e){var i=this._layerConfig;i[t]?n(i[t],e,!0):i[t]=e;var o=this._layers[t];o&&n(o,i[t],!0)}},delLayer:function(t){var e=this._layers,i=this._zlevelList,n=e[t];n&&(n.dom.parentNode.removeChild(n.dom),delete e[t],i.splice(l(i,t),1))},resize:function(t,e){var i=this._domRoot;i.style.display=\"none\";var n=this._opts;if(null!=t&&(n.width=t),null!=e&&(n.height=e),t=this._getSize(0),e=this._getSize(1),i.style.display=\"\",this._width!=t||e!=this._height){i.style.width=t+\"px\",i.style.height=e+\"px\";for(var o in this._layers)this._layers.hasOwnProperty(o)&&this._layers[o].resize(t,e);d(this._progressiveLayers,function(i){i.resize(t,e)}),this.refresh(!0)}return this._width=t,this._height=e,this},clearLayer:function(t){var e=this._layers[t];e&&e.clear()},dispose:function(){this.root.innerHTML=\"\",this.root=this.storage=this._domRoot=this._layers=null},getRenderedCanvas:function(t){function e(t,e){var n=r._zlevelList;null==t&&(t=-1/0);for(var o,a=0;a<n.length;a++){var s=n[a],l=r._layers[s];if(!l.__builtin__&&s>t&&s<e){o=l;break}}o&&o.renderToCanvas&&(i.ctx.save(),o.renderToCanvas(i.ctx),i.ctx.restore())}if(t=t||{},this._singleCanvas)return this._layers[0].dom;var i=new nx(\"image\",this,t.pixelRatio||this.dpr);i.initContext(),i.clearColor=t.backgroundColor,i.clear();for(var n,o=this.storage.getDisplayList(!0),a={},r=this,s=0;s<o.length;s++){var l=o[s];l.zlevel!==n&&(e(n,l.zlevel),n=l.zlevel),this._doPaintEl(l,i,!0,a)}return e(n,1/0),i.dom},getWidth:function(){return this._width},getHeight:function(){return this._height},_getSize:function(t){var e=this._opts,i=[\"width\",\"height\"][t],n=[\"clientWidth\",\"clientHeight\"][t],o=[\"paddingLeft\",\"paddingTop\"][t],a=[\"paddingRight\",\"paddingBottom\"][t];if(null!=e[i]&&\"auto\"!==e[i])return parseFloat(e[i]);var r=this.root,s=document.defaultView.getComputedStyle(r);return(r[n]||Ye(s[i])||Ye(r.style[i]))-(Ye(s[o])||0)-(Ye(s[a])||0)|0},pathToImage:function(t,e){e=e||this.dpr;var i=document.createElement(\"canvas\"),n=i.getContext(\"2d\"),o=t.getBoundingRect(),a=t.style,r=a.shadowBlur,s=a.shadowOffsetX,l=a.shadowOffsetY,h=a.hasStroke()?a.lineWidth:0,u=Math.max(h/2,-s+r),c=Math.max(h/2,s+r),d=Math.max(h/2,-l+r),f=Math.max(h/2,l+r),g=o.width+u+c,p=o.height+d+f;i.width=g*e,i.height=p*e,n.scale(e,e),n.clearRect(0,0,g,p),n.dpr=e;var m={position:t.position,rotation:t.rotation,scale:t.scale};t.position=[u-o.x,d-o.y],t.rotation=0,t.scale=[1,1],t.updateTransform(),t&&t.brush(n);var v=new qe({style:{x:0,y:0,image:i}});return null!=m.position&&(v.position=t.position=m.position),null!=m.rotation&&(v.rotation=t.rotation=m.rotation),null!=m.scale&&(v.scale=t.scale=m.scale),v}};var xx=\"undefined\"!=typeof window&&!!window.addEventListener,_x=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,bx=xx?function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0}:function(t){t.returnValue=!1,t.cancelBubble=!0},wx=function(t){t=t||{},this.stage=t.stage||{},this.onframe=t.onframe||function(){},this._clips=[],this._running=!1,this._time,this._pausedTime,this._pauseStart,this._paused=!1,fy.call(this)};wx.prototype={constructor:wx,addClip:function(t){this._clips.push(t)},addAnimator:function(t){t.animation=this;for(var e=t.getClips(),i=0;i<e.length;i++)this.addClip(e[i])},removeClip:function(t){var e=l(this._clips,t);e>=0&&this._clips.splice(e,1)},removeAnimator:function(t){for(var e=t.getClips(),i=0;i<e.length;i++)this.removeClip(e[i]);t.animation=null},_update:function(){for(var t=(new Date).getTime()-this._pausedTime,e=t-this._time,i=this._clips,n=i.length,o=[],a=[],r=0;r<n;r++){var s=i[r],l=s.step(t,e);l&&(o.push(l),a.push(s))}for(r=0;r<n;)i[r]._needsRemove?(i[r]=i[n-1],i.pop(),n--):r++;n=o.length;for(r=0;r<n;r++)a[r].fire(o[r]);this._time=t,this.onframe(e),this.trigger(\"frame\",e),this.stage.update&&this.stage.update()},_startLoop:function(){function t(){e._running&&(ox(t),!e._paused&&e._update())}var e=this;this._running=!0,ox(t)},start:function(){this._time=(new Date).getTime(),this._pausedTime=0,this._startLoop()},stop:function(){this._running=!1},pause:function(){this._paused||(this._pauseStart=(new Date).getTime(),this._paused=!0)},resume:function(){this._paused&&(this._pausedTime+=(new Date).getTime()-this._pauseStart,this._paused=!1)},clear:function(){this._clips=[]},animate:function(t,e){var i=new Ry(t,(e=e||{}).loop,e.getter,e.setter);return this.addAnimator(i),i}},u(wx,fy);var Sx=function(){this._track=[]};Sx.prototype={constructor:Sx,recognize:function(t,e,i){return this._doTrack(t,e,i),this._recognize(t)},clear:function(){return this._track.length=0,this},_doTrack:function(t,e,i){var n=t.touches;if(n){for(var o={points:[],touches:[],target:e,event:t},a=0,r=n.length;a<r;a++){var s=n[a],l=oi(i,s,{});o.points.push([l.zrX,l.zrY]),o.touches.push(s)}this._track.push(o)}},_recognize:function(t){for(var e in Mx)if(Mx.hasOwnProperty(e)){var i=Mx[e](this._track,t);if(i)return i}}};var Mx={pinch:function(t,e){var i=t.length;if(i){var n=(t[i-1]||{}).points,o=(t[i-2]||{}).points||n;if(o&&o.length>1&&n&&n.length>1){var a=ui(n)/ui(o);!isFinite(a)&&(a=1),e.pinchScale=a;var r=ci(n);return e.pinchX=r[0],e.pinchY=r[1],{type:\"pinch\",target:t[0].target,event:e}}}}},Ix=[\"click\",\"dblclick\",\"mousewheel\",\"mouseout\",\"mouseup\",\"mousedown\",\"mousemove\",\"contextmenu\"],Tx=[\"touchstart\",\"touchend\",\"touchmove\"],Ax={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},Cx=f(Ix,function(t){var e=t.replace(\"mouse\",\"pointer\");return Ax[e]?e:t}),Dx={mousemove:function(t){t=ri(this.dom,t),this.trigger(\"mousemove\",t)},mouseout:function(t){var e=(t=ri(this.dom,t)).toElement||t.relatedTarget;if(e!=this.dom)for(;e&&9!=e.nodeType;){if(e===this.dom)return;e=e.parentNode}this.trigger(\"mouseout\",t)},touchstart:function(t){(t=ri(this.dom,t)).zrByTouch=!0,this._lastTouchMoment=new Date,fi(this,t,\"start\"),Dx.mousemove.call(this,t),Dx.mousedown.call(this,t),gi(this)},touchmove:function(t){(t=ri(this.dom,t)).zrByTouch=!0,fi(this,t,\"change\"),Dx.mousemove.call(this,t),gi(this)},touchend:function(t){(t=ri(this.dom,t)).zrByTouch=!0,fi(this,t,\"end\"),Dx.mouseup.call(this,t),+new Date-this._lastTouchMoment<300&&Dx.click.call(this,t),gi(this)},pointerdown:function(t){Dx.mousedown.call(this,t)},pointermove:function(t){pi(t)||Dx.mousemove.call(this,t)},pointerup:function(t){Dx.mouseup.call(this,t)},pointerout:function(t){pi(t)||Dx.mouseout.call(this,t)}};d([\"click\",\"mousedown\",\"mouseup\",\"mousewheel\",\"dblclick\",\"contextmenu\"],function(t){Dx[t]=function(e){e=ri(this.dom,e),this.trigger(t,e)}});var Lx=vi.prototype;Lx.dispose=function(){for(var t=Ix.concat(Tx),e=0;e<t.length;e++){var i=t[e];li(this.dom,di(i),this._handlers[i])}},Lx.setCursor=function(t){this.dom.style.cursor=t||\"default\"},u(vi,fy);var kx=!Uv.canvasSupported,Px={canvas:yx},Ox={},zx=function(t,e,i){i=i||{},this.dom=e,this.id=t;var n=this,o=new $y,a=i.renderer;if(kx){if(!Px.vml)throw new Error(\"You need to require 'zrender/vml/vml' to support IE8\");a=\"vml\"}else a&&Px[a]||(a=\"canvas\");var r=new Px[a](e,o,i);this.storage=o,this.painter=r;var s=Uv.node?null:new vi(r.getViewportRoot());this.handler=new my(o,r,s,r.root),this.animation=new wx({stage:{update:m(this.flush,this)}}),this.animation.start(),this._needsRefresh;var l=o.delFromStorage,h=o.addToStorage;o.delFromStorage=function(t){l.call(o,t),t&&t.removeSelfFromZr(n)},o.addToStorage=function(t){h.call(o,t),t.addSelfToZr(n)}};zx.prototype={constructor:zx,getId:function(){return this.id},add:function(t){this.storage.addRoot(t),this._needsRefresh=!0},remove:function(t){this.storage.delRoot(t),this._needsRefresh=!0},configLayer:function(t,e){this.painter.configLayer(t,e),this._needsRefresh=!0},refreshImmediately:function(){this._needsRefresh=!1,this.painter.refresh(),this._needsRefresh=!1},refresh:function(){this._needsRefresh=!0},flush:function(){this._needsRefresh&&this.refreshImmediately(),this._needsRefreshHover&&this.refreshHoverImmediately()},addHover:function(t,e){this.painter.addHover&&(this.painter.addHover(t,e),this.refreshHover())},removeHover:function(t){this.painter.removeHover&&(this.painter.removeHover(t),this.refreshHover())},clearHover:function(){this.painter.clearHover&&(this.painter.clearHover(),this.refreshHover())},refreshHover:function(){this._needsRefreshHover=!0},refreshHoverImmediately:function(){this._needsRefreshHover=!1,this.painter.refreshHover&&this.painter.refreshHover()},resize:function(t){t=t||{},this.painter.resize(t.width,t.height),this.handler.resize()},clearAnimation:function(){this.animation.clear()},getWidth:function(){return this.painter.getWidth()},getHeight:function(){return this.painter.getHeight()},pathToImage:function(t,e){return this.painter.pathToImage(t,e)},setCursorStyle:function(t){this.handler.setCursorStyle(t)},findHover:function(t,e){return this.handler.findHover(t,e)},on:function(t,e,i){this.handler.on(t,e,i)},off:function(t,e){this.handler.off(t,e)},trigger:function(t,e){this.handler.trigger(t,e)},clear:function(){this.storage.delRoot(),this.painter.clear()},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,_i(this.id)}};var Nx=(Object.freeze||Object)({version:\"3.7.3\",init:yi,dispose:function(t){if(t)t.dispose();else{for(var e in Ox)Ox.hasOwnProperty(e)&&Ox[e].dispose();Ox={}}return this},getInstance:function(t){return Ox[t]},registerPainter:xi}),Ex=1e-4,Rx=9007199254740991,Vx=/^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d\\d)(?::(\\d\\d)(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/,Bx=(Object.freeze||Object)({linearMap:wi,parsePercent:Si,round:Mi,asc:Ii,getPrecision:Ti,getPrecisionSafe:Ai,getPixelPrecision:Ci,getPercentWithPrecision:Di,MAX_SAFE_INTEGER:Rx,remRadian:Li,isRadianAroundZero:ki,parseDate:Pi,quantity:Oi,nice:Ni,reformIntervals:Ei,isNumeric:Ri}),Gx=D,Wx=[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\"],Hx=function(t,e){return\"{\"+t+(null==e?\"\":e)+\"}\"},Fx=function(t){return t<10?\"0\"+t:t},Zx=ye,Ux=de,Xx=(Object.freeze||Object)({addCommas:Vi,toCamelCase:Bi,normalizeCssArray:Gx,encodeHTML:Gi,formatTpl:Wi,formatTplSimple:Hi,getTooltipMarker:Fi,formatTime:Zi,capitalFirst:Ui,truncateText:Zx,getTextRect:Ux}),jx=\".\",qx=\"___EC__COMPONENT__CONTAINER___\",Yx=\"\\0ec_\\0\",$x=function(t){for(var e=0;e<t.length;e++)t[e][1]||(t[e][1]=t[e][0]);return function(e,i,n){for(var o={},a=0;a<t.length;a++){var r=t[a][1];if(!(i&&l(i,r)>=0||n&&l(n,r)<0)){var s=e.getShallow(r);null!=s&&(o[t[a][0]]=s)}}return o}},Kx=$x([[\"lineWidth\",\"width\"],[\"stroke\",\"color\"],[\"opacity\"],[\"shadowBlur\"],[\"shadowOffsetX\"],[\"shadowOffsetY\"],[\"shadowColor\"]]),Jx={getLineStyle:function(t){var e=Kx(this,t),i=this.getLineDash(e.lineWidth);return i&&(e.lineDash=i),e},getLineDash:function(t){null==t&&(t=1);var e=this.get(\"type\"),i=Math.max(t,2),n=4*t;return\"solid\"===e||null==e?null:\"dashed\"===e?[n,n]:[i,i]}},Qx=$x([[\"fill\",\"color\"],[\"shadowBlur\"],[\"shadowOffsetX\"],[\"shadowOffsetY\"],[\"opacity\"],[\"shadowColor\"]]),t_={getAreaStyle:function(t,e){return Qx(this,t,e)}},e_=Math.pow,i_=Math.sqrt,n_=1e-8,o_=1e-4,a_=i_(3),r_=1/3,s_=E(),l_=E(),h_=E(),u_=Math.min,c_=Math.max,d_=Math.sin,f_=Math.cos,g_=2*Math.PI,p_=E(),m_=E(),v_=E(),y_=[],x_=[],__={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},b_=[],w_=[],S_=[],M_=[],I_=Math.min,T_=Math.max,A_=Math.cos,C_=Math.sin,D_=Math.sqrt,L_=Math.abs,k_=\"undefined\"!=typeof Float32Array,P_=function(t){this._saveData=!t,this._saveData&&(this.data=[]),this._ctx=null};P_.prototype={constructor:P_,_xi:0,_yi:0,_x0:0,_y0:0,_ux:0,_uy:0,_len:0,_lineDash:null,_dashOffset:0,_dashIdx:0,_dashSum:0,setScale:function(t,e){this._ux=L_(1/By/t)||0,this._uy=L_(1/By/e)||0},getContext:function(){return this._ctx},beginPath:function(t){return this._ctx=t,t&&t.beginPath(),t&&(this.dpr=t.dpr),this._saveData&&(this._len=0),this._lineDash&&(this._lineDash=null,this._dashOffset=0),this},moveTo:function(t,e){return this.addData(__.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},lineTo:function(t,e){var i=L_(t-this._xi)>this._ux||L_(e-this._yi)>this._uy||this._len<5;return this.addData(__.L,t,e),this._ctx&&i&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),i&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,i,n,o,a){return this.addData(__.C,t,e,i,n,o,a),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,i,n,o,a):this._ctx.bezierCurveTo(t,e,i,n,o,a)),this._xi=o,this._yi=a,this},quadraticCurveTo:function(t,e,i,n){return this.addData(__.Q,t,e,i,n),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,i,n):this._ctx.quadraticCurveTo(t,e,i,n)),this._xi=i,this._yi=n,this},arc:function(t,e,i,n,o,a){return this.addData(__.A,t,e,i,i,n,o-n,0,a?0:1),this._ctx&&this._ctx.arc(t,e,i,n,o,a),this._xi=A_(o)*i+t,this._yi=C_(o)*i+t,this},arcTo:function(t,e,i,n,o){return this._ctx&&this._ctx.arcTo(t,e,i,n,o),this},rect:function(t,e,i,n){return this._ctx&&this._ctx.rect(t,e,i,n),this.addData(__.R,t,e,i,n),this},closePath:function(){this.addData(__.Z);var t=this._ctx,e=this._x0,i=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,i),t.closePath()),this._xi=e,this._yi=i,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t,this._dashIdx=0;for(var e=0,i=0;i<t.length;i++)e+=t[i];this._dashSum=e}return this},setLineDashOffset:function(t){return this._dashOffset=t,this},len:function(){return this._len},setData:function(t){var e=t.length;this.data&&this.data.length==e||!k_||(this.data=new Float32Array(e));for(var i=0;i<e;i++)this.data[i]=t[i];this._len=e},appendPath:function(t){t instanceof Array||(t=[t]);for(var e=t.length,i=0,n=this._len,o=0;o<e;o++)i+=t[o].len();k_&&this.data instanceof Float32Array&&(this.data=new Float32Array(n+i));for(o=0;o<e;o++)for(var a=t[o].data,r=0;r<a.length;r++)this.data[n++]=a[r];this._len=n},addData:function(t){if(this._saveData){var e=this.data;this._len+arguments.length>e.length&&(this._expandData(),e=this.data);for(var i=0;i<arguments.length;i++)e[this._len++]=arguments[i];this._prevCmd=t}},_expandData:function(){if(!(this.data instanceof Array)){for(var t=[],e=0;e<this._len;e++)t[e]=this.data[e];this.data=t}},_needsDash:function(){return this._lineDash},_dashedLineTo:function(t,e){var i,n,o=this._dashSum,a=this._dashOffset,r=this._lineDash,s=this._ctx,l=this._xi,h=this._yi,u=t-l,c=e-h,d=D_(u*u+c*c),f=l,g=h,p=r.length;for(u/=d,c/=d,a<0&&(a=o+a),f-=(a%=o)*u,g-=a*c;u>0&&f<=t||u<0&&f>=t||0==u&&(c>0&&g<=e||c<0&&g>=e);)f+=u*(i=r[n=this._dashIdx]),g+=c*i,this._dashIdx=(n+1)%p,u>0&&f<l||u<0&&f>l||c>0&&g<h||c<0&&g>h||s[n%2?\"moveTo\":\"lineTo\"](u>=0?I_(f,t):T_(f,t),c>=0?I_(g,e):T_(g,e));u=f-t,c=g-e,this._dashOffset=-D_(u*u+c*c)},_dashedBezierTo:function(t,e,i,n,o,a){var r,s,l,h,u,c=this._dashSum,d=this._dashOffset,f=this._lineDash,g=this._ctx,p=this._xi,m=this._yi,v=on,y=0,x=this._dashIdx,_=f.length,b=0;for(d<0&&(d=c+d),d%=c,r=0;r<1;r+=.1)s=v(p,t,i,o,r+.1)-v(p,t,i,o,r),l=v(m,e,n,a,r+.1)-v(m,e,n,a,r),y+=D_(s*s+l*l);for(;x<_&&!((b+=f[x])>d);x++);for(r=(b-d)/y;r<=1;)h=v(p,t,i,o,r),u=v(m,e,n,a,r),x%2?g.moveTo(h,u):g.lineTo(h,u),r+=f[x]/y,x=(x+1)%_;x%2!=0&&g.lineTo(o,a),s=o-h,l=a-u,this._dashOffset=-D_(s*s+l*l)},_dashedQuadraticTo:function(t,e,i,n){var o=i,a=n;i=(i+2*t)/3,n=(n+2*e)/3,t=(this._xi+2*t)/3,e=(this._yi+2*e)/3,this._dashedBezierTo(t,e,i,n,o,a)},toStatic:function(){var t=this.data;t instanceof Array&&(t.length=this._len,k_&&(this.data=new Float32Array(t)))},getBoundingRect:function(){b_[0]=b_[1]=S_[0]=S_[1]=Number.MAX_VALUE,w_[0]=w_[1]=M_[0]=M_[1]=-Number.MAX_VALUE;for(var t=this.data,e=0,i=0,n=0,o=0,a=0;a<t.length;){var r=t[a++];switch(1==a&&(n=e=t[a],o=i=t[a+1]),r){case __.M:e=n=t[a++],i=o=t[a++],S_[0]=n,S_[1]=o,M_[0]=n,M_[1]=o;break;case __.L:vn(e,i,t[a],t[a+1],S_,M_),e=t[a++],i=t[a++];break;case __.C:yn(e,i,t[a++],t[a++],t[a++],t[a++],t[a],t[a+1],S_,M_),e=t[a++],i=t[a++];break;case __.Q:xn(e,i,t[a++],t[a++],t[a],t[a+1],S_,M_),e=t[a++],i=t[a++];break;case __.A:var s=t[a++],l=t[a++],h=t[a++],u=t[a++],c=t[a++],d=t[a++]+c,f=(t[a++],1-t[a++]);1==a&&(n=A_(c)*h+s,o=C_(c)*u+l),_n(s,l,h,u,c,d,f,S_,M_),e=A_(d)*h+s,i=C_(d)*u+l;break;case __.R:vn(n=e=t[a++],o=i=t[a++],n+t[a++],o+t[a++],S_,M_);break;case __.Z:e=n,i=o}K(b_,b_,S_),J(w_,w_,M_)}return 0===a&&(b_[0]=b_[1]=w_[0]=w_[1]=0),new jt(b_[0],b_[1],w_[0]-b_[0],w_[1]-b_[1])},rebuildPath:function(t){for(var e,i,n,o,a,r,s=this.data,l=this._ux,h=this._uy,u=this._len,c=0;c<u;){var d=s[c++];switch(1==c&&(e=n=s[c],i=o=s[c+1]),d){case __.M:e=n=s[c++],i=o=s[c++],t.moveTo(n,o);break;case __.L:a=s[c++],r=s[c++],(L_(a-n)>l||L_(r-o)>h||c===u-1)&&(t.lineTo(a,r),n=a,o=r);break;case __.C:t.bezierCurveTo(s[c++],s[c++],s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case __.Q:t.quadraticCurveTo(s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case __.A:var f=s[c++],g=s[c++],p=s[c++],m=s[c++],v=s[c++],y=s[c++],x=s[c++],_=s[c++],b=p>m?p:m,w=p>m?1:p/m,S=p>m?m/p:1,M=v+y;Math.abs(p-m)>.001?(t.translate(f,g),t.rotate(x),t.scale(w,S),t.arc(0,0,b,v,M,1-_),t.scale(1/w,1/S),t.rotate(-x),t.translate(-f,-g)):t.arc(f,g,b,v,M,1-_),1==c&&(e=A_(v)*p+f,i=C_(v)*m+g),n=A_(M)*p+f,o=C_(M)*m+g;break;case __.R:e=n=s[c],i=o=s[c+1],t.rect(s[c++],s[c++],s[c++],s[c++]);break;case __.Z:t.closePath(),n=e,o=i}}}},P_.CMD=__;var O_=2*Math.PI,z_=2*Math.PI,N_=P_.CMD,E_=2*Math.PI,R_=1e-4,V_=[-1,-1,-1],B_=[-1,-1],G_=ix.prototype.getCanvasPattern,W_=Math.abs,H_=new P_(!0);Nn.prototype={constructor:Nn,type:\"path\",__dirtyPath:!0,strokeContainThreshold:5,brush:function(t,e){var i=this.style,n=this.path||H_,o=i.hasStroke(),a=i.hasFill(),r=i.fill,s=i.stroke,l=a&&!!r.colorStops,h=o&&!!s.colorStops,u=a&&!!r.image,c=o&&!!s.image;if(i.bind(t,this,e),this.setTransform(t),this.__dirty){var d;l&&(d=d||this.getBoundingRect(),this._fillGradient=i.getGradient(t,r,d)),h&&(d=d||this.getBoundingRect(),this._strokeGradient=i.getGradient(t,s,d))}l?t.fillStyle=this._fillGradient:u&&(t.fillStyle=G_.call(r,t)),h?t.strokeStyle=this._strokeGradient:c&&(t.strokeStyle=G_.call(s,t));var f=i.lineDash,g=i.lineDashOffset,p=!!t.setLineDash,m=this.getGlobalScale();n.setScale(m[0],m[1]),this.__dirtyPath||f&&!p&&o?(n.beginPath(t),f&&!p&&(n.setLineDash(f),n.setLineDashOffset(g)),this.buildPath(n,this.shape,!1),this.path&&(this.__dirtyPath=!1)):(t.beginPath(),this.path.rebuildPath(t)),a&&n.fill(t),f&&p&&(t.setLineDash(f),t.lineDashOffset=g),o&&n.stroke(t),f&&p&&t.setLineDash([]),this.restoreTransform(t),null!=i.text&&this.drawRectText(t,this.getBoundingRect())},buildPath:function(t,e,i){},createPathProxy:function(){this.path=new P_},getBoundingRect:function(){var t=this._rect,e=this.style,i=!t;if(i){var n=this.path;n||(n=this.path=new P_),this.__dirtyPath&&(n.beginPath(),this.buildPath(n,this.shape,!1)),t=n.getBoundingRect()}if(this._rect=t,e.hasStroke()){var o=this._rectWithStroke||(this._rectWithStroke=t.clone());if(this.__dirty||i){o.copy(t);var a=e.lineWidth,r=e.strokeNoScale?this.getLineScale():1;e.hasFill()||(a=Math.max(a,this.strokeContainThreshold||4)),r>1e-10&&(o.width+=a/r,o.height+=a/r,o.x-=a/r/2,o.y-=a/r/2)}return o}return t},contain:function(t,e){var i=this.transformCoordToLocal(t,e),n=this.getBoundingRect(),o=this.style;if(t=i[0],e=i[1],n.contain(t,e)){var a=this.path.data;if(o.hasStroke()){var r=o.lineWidth,s=o.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(o.hasFill()||(r=Math.max(r,this.strokeContainThreshold)),zn(a,r/s,t,e)))return!0}if(o.hasFill())return On(a,t,e)}return!1},dirty:function(t){null==t&&(t=!0),t&&(this.__dirtyPath=t,this._rect=null),this.__dirty=!0,this.__zr&&this.__zr.refresh(),this.__clipTarget&&this.__clipTarget.dirty()},animateShape:function(t){return this.animate(\"shape\",t)},attrKV:function(t,e){\"shape\"===t?(this.setShape(e),this.__dirtyPath=!0,this._rect=null):je.prototype.attrKV.call(this,t,e)},setShape:function(t,e){var i=this.shape;if(i){if(b(t))for(var n in t)t.hasOwnProperty(n)&&(i[n]=t[n]);else i[t]=e;this.dirty(!0)}return this},getLineScale:function(){var t=this.transform;return t&&W_(t[0]-1)>1e-10&&W_(t[3]-1)>1e-10?Math.sqrt(W_(t[0]*t[3]-t[2]*t[1])):1}},Nn.extend=function(t){var e=function(e){Nn.call(this,e),t.style&&this.style.extendFrom(t.style,!1);var i=t.shape;if(i){this.shape=this.shape||{};var n=this.shape;for(var o in i)!n.hasOwnProperty(o)&&i.hasOwnProperty(o)&&(n[o]=i[o])}t.init&&t.init.call(this,e)};h(e,Nn);for(var i in t)\"style\"!==i&&\"shape\"!==i&&(e.prototype[i]=t[i]);return e},h(Nn,je);var F_=P_.CMD,Z_=[[],[],[]],U_=Math.sqrt,X_=Math.atan2,j_=function(t,e){var i,n,o,a,r,s,l=t.data,h=F_.M,u=F_.C,c=F_.L,d=F_.R,f=F_.A,g=F_.Q;for(o=0,a=0;o<l.length;){switch(i=l[o++],a=o,n=0,i){case h:case c:n=1;break;case u:n=3;break;case g:n=2;break;case f:var p=e[4],m=e[5],v=U_(e[0]*e[0]+e[1]*e[1]),y=U_(e[2]*e[2]+e[3]*e[3]),x=X_(-e[1]/y,e[0]/v);l[o]*=v,l[o++]+=p,l[o]*=y,l[o++]+=m,l[o++]*=v,l[o++]*=y,l[o++]+=x,l[o++]+=x,a=o+=2;break;case d:s[0]=l[o++],s[1]=l[o++],$(s,s,e),l[a++]=s[0],l[a++]=s[1],s[0]+=l[o++],s[1]+=l[o++],$(s,s,e),l[a++]=s[0],l[a++]=s[1]}for(r=0;r<n;r++)(s=Z_[r])[0]=l[o++],s[1]=l[o++],$(s,s,e),l[a++]=s[0],l[a++]=s[1]}},q_=[\"m\",\"M\",\"l\",\"L\",\"v\",\"V\",\"h\",\"H\",\"z\",\"Z\",\"c\",\"C\",\"q\",\"Q\",\"t\",\"T\",\"s\",\"S\",\"a\",\"A\"],Y_=Math.sqrt,$_=Math.sin,K_=Math.cos,J_=Math.PI,Q_=function(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])},tb=function(t,e){return(t[0]*e[0]+t[1]*e[1])/(Q_(t)*Q_(e))},eb=function(t,e){return(t[0]*e[1]<t[1]*e[0]?-1:1)*Math.acos(tb(t,e))},ib=function(t){je.call(this,t)};ib.prototype={constructor:ib,type:\"text\",brush:function(t,e){var i=this.style;this.__dirty&&De(i),i.fill=i.stroke=i.shadowBlur=i.shadowColor=i.shadowOffsetX=i.shadowOffsetY=null;var n=i.text;null!=n&&(n+=\"\"),i.bind(t,this,e),Xe(n,i)&&(this.setTransform(t),ke(this,t,n,i),this.restoreTransform(t))},getBoundingRect:function(){var t=this.style;if(this.__dirty&&De(t),!this._rect){var e=t.text;null!=e?e+=\"\":e=\"\";var i=de(t.text+\"\",t.font,t.textAlign,t.textVerticalAlign,t.textPadding,t.rich);if(i.x+=t.x||0,i.y+=t.y||0,He(t.textStroke,t.textStrokeWidth)){var n=t.textStrokeWidth;i.x-=n/2,i.y-=n/2,i.width+=n,i.height+=n}this._rect=i}return this._rect}},h(ib,je);var nb=Nn.extend({type:\"circle\",shape:{cx:0,cy:0,r:0},buildPath:function(t,e,i){i&&t.moveTo(e.cx+e.r,e.cy),t.arc(e.cx,e.cy,e.r,0,2*Math.PI,!0)}}),ob=[[\"shadowBlur\",0],[\"shadowColor\",\"#000\"],[\"shadowOffsetX\",0],[\"shadowOffsetY\",0]],ab=function(t){return Uv.browser.ie&&Uv.browser.version>=11?function(){var e,i=this.__clipPaths,n=this.style;if(i)for(var o=0;o<i.length;o++){var a=i[o],r=a&&a.shape,s=a&&a.type;if(r&&(\"sector\"===s&&r.startAngle===r.endAngle||\"rect\"===s&&(!r.width||!r.height))){for(l=0;l<ob.length;l++)ob[l][2]=n[ob[l][0]],n[ob[l][0]]=ob[l][1];e=!0;break}}if(t.apply(this,arguments),e)for(var l=0;l<ob.length;l++)n[ob[l][0]]=ob[l][2]}:t},rb=Nn.extend({type:\"sector\",shape:{cx:0,cy:0,r0:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},brush:ab(Nn.prototype.brush),buildPath:function(t,e){var i=e.cx,n=e.cy,o=Math.max(e.r0||0,0),a=Math.max(e.r,0),r=e.startAngle,s=e.endAngle,l=e.clockwise,h=Math.cos(r),u=Math.sin(r);t.moveTo(h*o+i,u*o+n),t.lineTo(h*a+i,u*a+n),t.arc(i,n,a,r,s,!l),t.lineTo(Math.cos(s)*o+i,Math.sin(s)*o+n),0!==o&&t.arc(i,n,o,s,r,l),t.closePath()}}),sb=Nn.extend({type:\"ring\",shape:{cx:0,cy:0,r:0,r0:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=2*Math.PI;t.moveTo(i+e.r,n),t.arc(i,n,e.r,0,o,!1),t.moveTo(i+e.r0,n),t.arc(i,n,e.r0,0,o,!0)}}),lb=function(t,e){for(var i=t.length,n=[],o=0,a=1;a<i;a++)o+=j(t[a-1],t[a]);var r=o/2;r=r<i?i:r;for(a=0;a<r;a++){var s,l,h,u=a/(r-1)*(e?i:i-1),c=Math.floor(u),d=u-c,f=t[c%i];e?(s=t[(c-1+i)%i],l=t[(c+1)%i],h=t[(c+2)%i]):(s=t[0===c?c:c-1],l=t[c>i-2?i-1:c+1],h=t[c>i-3?i-1:c+2]);var g=d*d,p=d*g;n.push([Wn(s[0],f[0],l[0],h[0],d,g,p),Wn(s[1],f[1],l[1],h[1],d,g,p)])}return n},hb=function(t,e,i,n){var o,a,r,s,l=[],h=[],u=[],c=[];if(n){r=[1/0,1/0],s=[-1/0,-1/0];for(var d=0,f=t.length;d<f;d++)K(r,r,t[d]),J(s,s,t[d]);K(r,r,n[0]),J(s,s,n[1])}for(var d=0,f=t.length;d<f;d++){var g=t[d];if(i)o=t[d?d-1:f-1],a=t[(d+1)%f];else{if(0===d||d===f-1){l.push(V(t[d]));continue}o=t[d-1],a=t[d+1]}H(h,a,o),U(h,h,e);var p=j(g,o),m=j(g,a),v=p+m;0!==v&&(p/=v,m/=v),U(u,h,-p),U(c,h,m);var y=G([],g,u),x=G([],g,c);n&&(J(y,y,r),K(y,y,s),J(x,x,r),K(x,x,s)),l.push(y),l.push(x)}return i&&l.push(l.shift()),l},ub=Nn.extend({type:\"polygon\",shape:{points:null,smooth:!1,smoothConstraint:null},buildPath:function(t,e){Hn(t,e,!0)}}),cb=Nn.extend({type:\"polyline\",shape:{points:null,smooth:!1,smoothConstraint:null},style:{stroke:\"#000\",fill:null},buildPath:function(t,e){Hn(t,e,!1)}}),db=Nn.extend({type:\"rect\",shape:{r:0,x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.x,n=e.y,o=e.width,a=e.height;e.r?Ce(t,e):t.rect(i,n,o,a),t.closePath()}}),fb=Nn.extend({type:\"line\",shape:{x1:0,y1:0,x2:0,y2:0,percent:1},style:{stroke:\"#000\",fill:null},buildPath:function(t,e){var i=e.x1,n=e.y1,o=e.x2,a=e.y2,r=e.percent;0!==r&&(t.moveTo(i,n),r<1&&(o=i*(1-r)+o*r,a=n*(1-r)+a*r),t.lineTo(o,a))},pointAt:function(t){var e=this.shape;return[e.x1*(1-t)+e.x2*t,e.y1*(1-t)+e.y2*t]}}),gb=[],pb=Nn.extend({type:\"bezier-curve\",shape:{x1:0,y1:0,x2:0,y2:0,cpx1:0,cpy1:0,percent:1},style:{stroke:\"#000\",fill:null},buildPath:function(t,e){var i=e.x1,n=e.y1,o=e.x2,a=e.y2,r=e.cpx1,s=e.cpy1,l=e.cpx2,h=e.cpy2,u=e.percent;0!==u&&(t.moveTo(i,n),null==l||null==h?(u<1&&(gn(i,r,o,u,gb),r=gb[1],o=gb[2],gn(n,s,a,u,gb),s=gb[1],a=gb[2]),t.quadraticCurveTo(r,s,o,a)):(u<1&&(ln(i,r,l,o,u,gb),r=gb[1],l=gb[2],o=gb[3],ln(n,s,h,a,u,gb),s=gb[1],h=gb[2],a=gb[3]),t.bezierCurveTo(r,s,l,h,o,a)))},pointAt:function(t){return Fn(this.shape,t,!1)},tangentAt:function(t){var e=Fn(this.shape,t,!0);return X(e,e)}}),mb=Nn.extend({type:\"arc\",shape:{cx:0,cy:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},style:{stroke:\"#000\",fill:null},buildPath:function(t,e){var i=e.cx,n=e.cy,o=Math.max(e.r,0),a=e.startAngle,r=e.endAngle,s=e.clockwise,l=Math.cos(a),h=Math.sin(a);t.moveTo(l*o+i,h*o+n),t.arc(i,n,o,a,r,!s)}}),vb=Nn.extend({type:\"compound\",shape:{paths:null},_updatePathDirty:function(){for(var t=this.__dirtyPath,e=this.shape.paths,i=0;i<e.length;i++)t=t||e[i].__dirtyPath;this.__dirtyPath=t,this.__dirty=this.__dirty||t},beforeBrush:function(){this._updatePathDirty();for(var t=this.shape.paths||[],e=this.getGlobalScale(),i=0;i<t.length;i++)t[i].path||t[i].createPathProxy(),t[i].path.setScale(e[0],e[1])},buildPath:function(t,e){for(var i=e.paths||[],n=0;n<i.length;n++)i[n].buildPath(t,i[n].shape,!0)},afterBrush:function(){for(var t=this.shape.paths||[],e=0;e<t.length;e++)t[e].__dirtyPath=!1},getBoundingRect:function(){return this._updatePathDirty(),Nn.prototype.getBoundingRect.call(this)}}),yb=function(t){this.colorStops=t||[]};yb.prototype={constructor:yb,addColorStop:function(t,e){this.colorStops.push({offset:t,color:e})}};var xb=function(t,e,i,n,o,a){this.x=null==t?0:t,this.y=null==e?0:e,this.x2=null==i?1:i,this.y2=null==n?0:n,this.type=\"linear\",this.global=a||!1,yb.call(this,o)};xb.prototype={constructor:xb},h(xb,yb);var _b=function(t,e,i,n,o){this.x=null==t?.5:t,this.y=null==e?.5:e,this.r=null==i?.5:i,this.type=\"radial\",this.global=o||!1,yb.call(this,n)};_b.prototype={constructor:_b},h(_b,yb);var bb=Math.round,wb=Math.max,Sb=Math.min,Mb={},Ib=function(t,e){for(var i=[],n=t.length,o=0;o<n;o++){var a=t[o];a.path||a.createPathProxy(),a.__dirtyPath&&a.buildPath(a.path,a.shape,!0),i.push(a.path)}var r=new Nn(e);return r.createPathProxy(),r.buildPath=function(t){t.appendPath(i);var e=t.getContext();e&&t.rebuildPath(e)},r},Tb=(Object.freeze||Object)({extendShape:Zn,extendPath:function(t,e){return Gn(t,e)},makePath:Un,makeImage:Xn,mergePath:Ib,resizePath:qn,subPixelOptimizeLine:Yn,subPixelOptimizeRect:$n,subPixelOptimize:Kn,setHoverStyle:uo,setLabelStyle:co,setTextStyle:fo,setText:function(t,e,i){var n,o={isRectText:!0};!1===i?n=!0:o.autoColor=i,go(t,e,o,n),t.host&&t.host.dirty&&t.host.dirty(!1)},getFont:_o,updateProps:wo,initProps:So,getTransform:Mo,applyTransform:Io,transformDirection:To,groupTransition:Ao,clipPointsByRect:Co,clipRectByRect:function(t,e){var i=wb(t.x,e.x),n=Sb(t.x+t.width,e.x+e.width),o=wb(t.y,e.y),a=Sb(t.y+t.height,e.y+e.height);if(n>=i&&a>=o)return{x:i,y:o,width:n-i,height:a-o}},createIcon:Do,Group:jy,Image:qe,Text:ib,Circle:nb,Sector:rb,Ring:sb,Polygon:ub,Polyline:cb,Rect:db,Line:fb,BezierCurve:pb,Arc:mb,CompoundPath:vb,LinearGradient:xb,RadialGradient:_b,BoundingRect:jt}),Ab=[\"textStyle\",\"color\"],Cb={getTextColor:function(t){var e=this.ecModel;return this.getShallow(\"color\")||(!t&&e?e.get(Ab):null)},getFont:function(){return _o({fontStyle:this.getShallow(\"fontStyle\"),fontWeight:this.getShallow(\"fontWeight\"),fontSize:this.getShallow(\"fontSize\"),fontFamily:this.getShallow(\"fontFamily\")},this.ecModel)},getTextRect:function(t){return de(t,this.getFont(),this.getShallow(\"align\"),this.getShallow(\"verticalAlign\")||this.getShallow(\"baseline\"),this.getShallow(\"padding\"),this.getShallow(\"rich\"),this.getShallow(\"truncateText\"))}},Db=$x([[\"fill\",\"color\"],[\"stroke\",\"borderColor\"],[\"lineWidth\",\"borderWidth\"],[\"opacity\"],[\"shadowBlur\"],[\"shadowOffsetX\"],[\"shadowOffsetY\"],[\"shadowColor\"],[\"textPosition\"],[\"textAlign\"]]),Lb={getItemStyle:function(t,e){var i=Db(this,t,e),n=this.getBorderLineDash();return n&&(i.lineDash=n),i},getBorderLineDash:function(){var t=this.get(\"borderType\");return\"solid\"===t||null==t?null:\"dashed\"===t?[5,5]:[1,1]}},kb=u;Lo.prototype={constructor:Lo,init:null,mergeOption:function(t){n(this.option,t,!0)},get:function(t,e){return null==t?this.option:ko(this.option,this.parsePath(t),!e&&Po(this,t))},getShallow:function(t,e){var i=this.option,n=null==i?i:i[t],o=!e&&Po(this,t);return null==n&&o&&(n=o.getShallow(t)),n},getModel:function(t,e){var i,n=null==t?this.option:ko(this.option,t=this.parsePath(t));return e=e||(i=Po(this,t))&&i.getModel(t),new Lo(n,e,this.ecModel)},isEmpty:function(){return null==this.option},restoreData:function(){},clone:function(){return new(0,this.constructor)(i(this.option))},setReadOnly:function(t){},parsePath:function(t){return\"string\"==typeof t&&(t=t.split(\".\")),t},customizeGetParent:function(t){Xi(this,\"getParent\",t)},isAnimationEnabled:function(){if(!Uv.node){if(null!=this.option.animation)return!!this.option.animation;if(this.parentModel)return this.parentModel.isAnimationEnabled()}}},Ki(Lo),kb(Lo,Jx),kb(Lo,t_),kb(Lo,Cb),kb(Lo,Lb);var Pb=d,Ob=b,zb=[\"fontStyle\",\"fontWeight\",\"fontSize\",\"fontFamily\",\"rich\",\"tag\",\"color\",\"textBorderColor\",\"textBorderWidth\",\"width\",\"height\",\"lineHeight\",\"align\",\"verticalAlign\",\"baseline\",\"shadowColor\",\"shadowBlur\",\"shadowOffsetX\",\"shadowOffsetY\",\"textShadowColor\",\"textShadowBlur\",\"textShadowOffsetX\",\"textShadowOffsetY\",\"backgroundColor\",\"borderColor\",\"borderWidth\",\"borderRadius\",\"padding\"],Nb={getDataParams:function(t,e){var i=this.getData(e),n=this.getRawValue(t,e),o=i.getRawIndex(t),a=i.getName(t,!0),r=i.getRawDataItem(t),s=i.getItemVisual(t,\"color\");return{componentType:this.mainType,componentSubType:this.subType,seriesType:\"series\"===this.mainType?this.subType:null,seriesIndex:this.seriesIndex,seriesId:this.id,seriesName:this.name,name:a,dataIndex:o,data:r,dataType:e,value:n,color:s,marker:Fi(s),$vars:[\"seriesName\",\"name\",\"value\"]}},getFormattedLabel:function(t,e,i,n,o){e=e||\"normal\";var a=this.getData(i).getItemModel(t),r=this.getDataParams(t,i);null!=n&&r.value instanceof Array&&(r.value=r.value[n]);var s=a.get([o||\"label\",e,\"formatter\"]);return\"function\"==typeof s?(r.status=e,s(r)):\"string\"==typeof s?Wi(s,r):void 0},getRawValue:function(t,e){var i=this.getData(e).getRawDataItem(t);if(null!=i)return!Ob(i)||i instanceof Array?i:i.value},formatTooltip:N},Eb=function(){var t=0;return function(){var e=\"\\0__ec_prop_getter_\"+t++;return function(t){return t[e]||(t[e]={})}}}(),Rb=0,Vb=\"_\",Bb=d,Gb=[\"left\",\"right\",\"top\",\"bottom\",\"width\",\"height\"],Wb=[[\"width\",\"left\",\"right\"],[\"height\",\"top\",\"bottom\"]],Hb=Yo,Fb=(v(Yo,\"vertical\"),v(Yo,\"horizontal\"),{getBoxLayoutParams:function(){return{left:this.get(\"left\"),top:this.get(\"top\"),right:this.get(\"right\"),bottom:this.get(\"bottom\"),width:this.get(\"width\"),height:this.get(\"height\")}}}),Zb=Array.prototype.push,Ub=Lo.extend({type:\"component\",id:\"\",name:\"\",mainType:\"\",subType:\"\",componentIndex:0,defaultOption:null,ecModel:null,dependentModels:[],uid:null,layoutMode:null,$constructor:function(t,e,i,n){Lo.call(this,t,e,i,n),this.uid=qo(\"componentModel\")},init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i)},mergeDefaultAndTheme:function(t,e){var i=this.layoutMode,o=i?ea(t):{};n(t,e.getTheme().get(this.mainType)),n(t,this.getDefaultOption()),i&&ta(t,o,i)},mergeOption:function(t,e){n(this.option,t,!0);var i=this.layoutMode;i&&ta(this.option,t,i)},optionUpdated:function(t,e){},getDefaultOption:function(){if(!qi(this,\"__defaultOption\")){for(var t=[],e=this.constructor;e;){var i=e.prototype.defaultOption;i&&t.push(i),e=e.superClass}for(var o={},a=t.length-1;a>=0;a--)o=n(o,t[a],!0);Xi(this,\"__defaultOption\",o)}return ji(this,\"__defaultOption\")},getReferringComponents:function(t){return this.ecModel.queryComponents({mainType:t,index:this.get(t+\"Index\",!0),id:this.get(t+\"Id\",!0)})}});tn(Ub,{registerWhenExtend:!0}),function(t){var e={};t.registerSubTypeDefaulter=function(t,i){t=Yi(t),e[t.main]=i},t.determineSubType=function(i,n){var o=n.type;if(!o){var a=Yi(i).main;t.hasSubTypes(i)&&e[a]&&(o=e[a](n))}return o}}(Ub),function(t,e){function i(t){var i={},a=[];return d(t,function(r){var s=n(i,r),h=o(s.originalDeps=e(r),t);s.entryCount=h.length,0===s.entryCount&&a.push(r),d(h,function(t){l(s.predecessor,t)<0&&s.predecessor.push(t);var e=n(i,t);l(e.successor,t)<0&&e.successor.push(r)})}),{graph:i,noEntryList:a}}function n(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}function o(t,e){var i=[];return d(t,function(t){l(e,t)>=0&&i.push(t)}),i}t.topologicalTravel=function(t,e,n,o){function a(t){s[t].entryCount--,0===s[t].entryCount&&l.push(t)}if(t.length){var r=i(e),s=r.graph,l=r.noEntryList,h={};for(d(t,function(t){h[t]=!0});l.length;){var u=l.pop(),c=s[u],f=!!h[u];f&&(n.call(o,u,c.originalDeps.slice()),delete h[u]),d(c.successor,f?function(t){h[t]=!0,a(t)}:a)}d(h,function(){throw new Error(\"Circle dependency may exists\")})}}}(Ub,function(t){var e=[];return d(Ub.getClassesByMainType(t),function(t){Zb.apply(e,t.prototype.dependencies||[])}),f(e,function(t){return Yi(t).main})}),u(Ub,Fb);var Xb=\"\";\"undefined\"!=typeof navigator&&(Xb=navigator.platform||\"\");var jb={color:[\"#c23531\",\"#2f4554\",\"#61a0a8\",\"#d48265\",\"#91c7ae\",\"#749f83\",\"#ca8622\",\"#bda29a\",\"#6e7074\",\"#546570\",\"#c4ccd3\"],textStyle:{fontFamily:Xb.match(/^Win/)?\"Microsoft YaHei\":\"sans-serif\",fontSize:12,fontStyle:\"normal\",fontWeight:\"normal\"},blendMode:null,animation:\"auto\",animationDuration:1e3,animationDurationUpdate:300,animationEasing:\"exponentialOut\",animationEasingUpdate:\"cubicOut\",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1},qb={clearColorPalette:function(){Xi(this,\"colorIdx\",0),Xi(this,\"colorNameMap\",{})},getColorFromPalette:function(t,e){var i=ji(e=e||this,\"colorIdx\")||0,n=ji(e,\"colorNameMap\")||Xi(e,\"colorNameMap\",{});if(n.hasOwnProperty(t))return n[t];var o=this.get(\"color\",!0)||[];if(o.length){var a=o[i];return t&&(n[t]=a),Xi(e,\"colorIdx\",(i+1)%o.length),a}}},Yb=d,$b=p,Kb=f,Jb=y,Qb=l,tw=b,ew=\"\\0_ec_inner\",iw=Lo.extend({constructor:iw,init:function(t,e,i,n){i=i||{},this.option=null,this._theme=new Lo(i),this._optionManager=n},setOption:function(t,e){L(!(ew in t),\"please use chart.getOption()\"),this._optionManager.setOption(t,e),this.resetOption(null)},resetOption:function(t){var e=!1,i=this._optionManager;if(!t||\"recreate\"===t){var n=i.mountOption(\"recreate\"===t);this.option&&\"recreate\"!==t?(this.restoreData(),this.mergeOption(n)):oa.call(this,n),e=!0}if(\"timeline\"!==t&&\"media\"!==t||this.restoreData(),!t||\"recreate\"===t||\"timeline\"===t){var o=i.getTimelineOption(this);o&&(this.mergeOption(o),e=!0)}if(!t||\"recreate\"===t||\"media\"===t){var a=i.getMediaOption(this,this._api);a.length&&Yb(a,function(t){this.mergeOption(t,e=!0)},this)}return e},mergeOption:function(t){var e=this.option,o=this._componentsMap,r=[];Yb(t,function(t,o){null!=t&&(Ub.hasClass(o)?r.push(o):e[o]=null==e[o]?i(t):n(e[o],t,!0))}),Ub.topologicalTravel(r,Ub.getAllClassMainTypes(),function(i,n){var r=Oo(t[i]),s=Vo(o.get(i),r);Bo(s),Yb(s,function(t,e){var n=t.option;tw(n)&&(t.keyInfo.mainType=i,t.keyInfo.subType=ra(i,n,t.exist))});var l=aa(o,n);e[i]=[],o.set(i,[]),Yb(s,function(t,n){var r=t.exist,s=t.option;if(L(tw(s)||r,\"Empty component definition\"),s){var h=Ub.getClass(i,t.keyInfo.subType,!0);if(r&&r instanceof h)r.name=t.keyInfo.name,r.mergeOption(s,this),r.optionUpdated(s,!1);else{var u=a({dependentModels:l,componentIndex:n},t.keyInfo);a(r=new h(s,this,this,u),u),r.init(s,this,this,u),r.optionUpdated(null,!0)}}else r.mergeOption({},this),r.optionUpdated({},!1);o.get(i)[n]=r,e[i][n]=r.option},this),\"series\"===i&&(this._seriesIndices=sa(o.get(\"series\")))},this),this._seriesIndices=this._seriesIndices||[]},getOption:function(){var t=i(this.option);return Yb(t,function(e,i){if(Ub.hasClass(i)){for(var n=(e=Oo(e)).length-1;n>=0;n--)Go(e[n])&&e.splice(n,1);t[i]=e}}),delete t[ew],t},getTheme:function(){return this._theme},getComponent:function(t,e){var i=this._componentsMap.get(t);if(i)return i[e||0]},queryComponents:function(t){var e=t.mainType;if(!e)return[];var i=t.index,n=t.id,o=t.name,a=this._componentsMap.get(e);if(!a||!a.length)return[];var r;if(null!=i)Jb(i)||(i=[i]),r=$b(Kb(i,function(t){return a[t]}),function(t){return!!t});else if(null!=n){var s=Jb(n);r=$b(a,function(t){return s&&Qb(n,t.id)>=0||!s&&t.id===n})}else if(null!=o){var l=Jb(o);r=$b(a,function(t){return l&&Qb(o,t.name)>=0||!l&&t.name===o})}else r=a.slice();return la(r,t)},findComponents:function(t){var e=t.query,i=t.mainType,n=function(t){var e=i+\"Index\",n=i+\"Id\",o=i+\"Name\";return!t||null==t[e]&&null==t[n]&&null==t[o]?null:{mainType:i,index:t[e],id:t[n],name:t[o]}}(e);return function(e){return t.filter?$b(e,t.filter):e}(la(n?this.queryComponents(n):this._componentsMap.get(i),t))},eachComponent:function(t,e,i){var n=this._componentsMap;if(\"function\"==typeof t)i=e,e=t,n.each(function(t,n){Yb(t,function(t,o){e.call(i,n,t,o)})});else if(_(t))Yb(n.get(t),e,i);else if(tw(t)){var o=this.findComponents(t);Yb(o,e,i)}},getSeriesByName:function(t){var e=this._componentsMap.get(\"series\");return $b(e,function(e){return e.name===t})},getSeriesByIndex:function(t){return this._componentsMap.get(\"series\")[t]},getSeriesByType:function(t){var e=this._componentsMap.get(\"series\");return $b(e,function(e){return e.subType===t})},getSeries:function(){return this._componentsMap.get(\"series\").slice()},eachSeries:function(t,e){Yb(this._seriesIndices,function(i){var n=this._componentsMap.get(\"series\")[i];t.call(e,n,i)},this)},eachRawSeries:function(t,e){Yb(this._componentsMap.get(\"series\"),t,e)},eachSeriesByType:function(t,e,i){Yb(this._seriesIndices,function(n){var o=this._componentsMap.get(\"series\")[n];o.subType===t&&e.call(i,o,n)},this)},eachRawSeriesByType:function(t,e,i){return Yb(this.getSeriesByType(t),e,i)},isSeriesFiltered:function(t){return l(this._seriesIndices,t.componentIndex)<0},getCurrentSeriesIndices:function(){return(this._seriesIndices||[]).slice()},filterSeries:function(t,e){var i=$b(this._componentsMap.get(\"series\"),t,e);this._seriesIndices=sa(i)},restoreData:function(){var t=this._componentsMap;this._seriesIndices=sa(t.get(\"series\"));var e=[];t.each(function(t,i){e.push(i)}),Ub.topologicalTravel(e,Ub.getAllClassMainTypes(),function(e,i){Yb(t.get(e),function(t){t.restoreData()})})}});u(iw,qb);var nw=[\"getDom\",\"getZr\",\"getWidth\",\"getHeight\",\"getDevicePixelRatio\",\"dispatchAction\",\"isDisposed\",\"on\",\"off\",\"getDataURL\",\"getConnectedDataURL\",\"getModel\",\"getOption\",\"getViewOfComponentModel\",\"getViewOfSeriesModel\"],ow={};ua.prototype={constructor:ua,create:function(t,e){var i=[];d(ow,function(n,o){var a=n.create(t,e);i=i.concat(a||[])}),this._coordinateSystems=i},update:function(t,e){d(this._coordinateSystems,function(i){i.update&&i.update(t,e)})},getCoordinateSystems:function(){return this._coordinateSystems.slice()}},ua.register=function(t,e){ow[t]=e},ua.get=function(t){return ow[t]};var aw=d,rw=i,sw=f,lw=n,hw=/^(min|max)?(.+)$/;ca.prototype={constructor:ca,setOption:function(t,e){t=rw(t,!0);var i=this._optionBackup,n=da.call(this,t,e,!i);this._newBaseOption=n.baseOption,i?(ma(i.baseOption,n.baseOption),n.timelineOptions.length&&(i.timelineOptions=n.timelineOptions),n.mediaList.length&&(i.mediaList=n.mediaList),n.mediaDefault&&(i.mediaDefault=n.mediaDefault)):this._optionBackup=n},mountOption:function(t){var e=this._optionBackup;return this._timelineOptions=sw(e.timelineOptions,rw),this._mediaList=sw(e.mediaList,rw),this._mediaDefault=rw(e.mediaDefault),this._currentMediaIndices=[],rw(t?e.baseOption:this._newBaseOption)},getTimelineOption:function(t){var e,i=this._timelineOptions;if(i.length){var n=t.getComponent(\"timeline\");n&&(e=rw(i[n.getCurrentIndex()],!0))}return e},getMediaOption:function(t){var e=this._api.getWidth(),i=this._api.getHeight(),n=this._mediaList,o=this._mediaDefault,a=[],r=[];if(!n.length&&!o)return r;for(var s=0,l=n.length;s<l;s++)fa(n[s].query,e,i)&&a.push(s);return!a.length&&o&&(a=[-1]),a.length&&!pa(a,this._currentMediaIndices)&&(r=sw(a,function(t){return rw(-1===t?o.option:n[t].option)})),this._currentMediaIndices=a,r}};var uw=d,cw=b,dw=[\"areaStyle\",\"lineStyle\",\"nodeStyle\",\"linkStyle\",\"chordStyle\",\"label\",\"labelLine\"],fw=function(t,e){uw(ba(t.series),function(t){cw(t)&&_a(t)});var i=[\"xAxis\",\"yAxis\",\"radiusAxis\",\"angleAxis\",\"singleAxis\",\"parallelAxis\",\"radar\"];e&&i.push(\"valueAxis\",\"categoryAxis\",\"logAxis\",\"timeAxis\"),uw(i,function(e){uw(ba(t[e]),function(t){t&&(ya(t,\"axisLabel\"),ya(t.axisPointer,\"label\"))})}),uw(ba(t.parallel),function(t){var e=t&&t.parallelAxisDefault;ya(e,\"axisLabel\"),ya(e&&e.axisPointer,\"label\")}),uw(ba(t.calendar),function(t){ya(t,\"dayLabel\"),ya(t,\"monthLabel\"),ya(t,\"yearLabel\")}),uw(ba(t.radar),function(t){ya(t,\"name\")}),uw(ba(t.geo),function(t){cw(t)&&(xa(t.label),uw(ba(t.regions),function(t){xa(t.label)}))}),xa(wa(t.timeline).label),ya(wa(t.axisPointer),\"label\"),ya(wa(t.tooltip).axisPointer,\"label\")},gw=[[\"x\",\"left\"],[\"y\",\"top\"],[\"x2\",\"right\"],[\"y2\",\"bottom\"]],pw=[\"grid\",\"geo\",\"parallel\",\"legend\",\"toolbox\",\"title\",\"visualMap\",\"dataZoom\",\"timeline\"],mw=[\"bar\",\"boxplot\",\"candlestick\",\"chord\",\"effectScatter\",\"funnel\",\"gauge\",\"lines\",\"graph\",\"heatmap\",\"line\",\"map\",\"parallel\",\"pie\",\"radar\",\"sankey\",\"scatter\",\"treemap\"],vw=function(t,e){fw(t,e),t.series=Oo(t.series),d(t.series,function(t){if(b(t)){var e=t.type;if(\"pie\"!==e&&\"gauge\"!==e||null!=t.clockWise&&(t.clockwise=t.clockWise),\"gauge\"===e){var i=Sa(t,\"pointer.color\");null!=i&&Ma(t,\"itemStyle.normal.color\",i)}for(var n=0;n<mw.length;n++)if(mw[n]===t.type){Ia(t);break}}}),t.dataRange&&(t.visualMap=t.dataRange),d(pw,function(e){var i=t[e];i&&(y(i)||(i=[i]),d(i,function(t){Ia(t)}))})},yw=Ub.extend({type:\"series.__base__\",seriesIndex:0,coordinateSystem:null,defaultOption:null,legendDataProvider:null,visualColorAccessPath:\"itemStyle.normal.color\",layoutMode:null,init:function(t,e,i,n){this.seriesIndex=this.componentIndex,this.mergeDefaultAndTheme(t,i),Xi(this,\"dataBeforeProcessed\",this.getInitialData(t,i)),this.restoreData()},mergeDefaultAndTheme:function(t,e){var i=this.layoutMode,o=i?ea(t):{},a=this.subType;Ub.hasClass(a)&&(a+=\"Series\"),n(t,e.getTheme().get(this.subType)),n(t,this.getDefaultOption()),zo(t.label,[\"show\"]),this.fillDataTextStyle(t.data),i&&ta(t,o,i)},mergeOption:function(t,e){t=n(this.option,t,!0),this.fillDataTextStyle(t.data);var i=this.layoutMode;i&&ta(this.option,t,i);var o=this.getInitialData(t,e);o&&(Xi(this,\"data\",o),Xi(this,\"dataBeforeProcessed\",o.cloneShallow()))},fillDataTextStyle:function(t){if(t)for(var e=[\"show\"],i=0;i<t.length;i++)t[i]&&t[i].label&&zo(t[i].label,e)},getInitialData:function(){},getData:function(t){var e=ji(this,\"data\");return null==t?e:e.getLinkedData(t)},setData:function(t){Xi(this,\"data\",t)},getRawData:function(){return ji(this,\"dataBeforeProcessed\")},coordDimToDataDim:function(t){return Uo(this.getData(),t)},dataDimToCoordDim:function(t){return Zo(this.getData(),t)},getBaseAxis:function(){var t=this.coordinateSystem;return t&&t.getBaseAxis&&t.getBaseAxis()},formatTooltip:function(t,e,i){var n=ji(this,\"data\"),o=this.getRawValue(t),a=y(o)?function(i){function o(t,i){var o=n.getDimensionInfo(i);if(o&&!1!==o.otherDims.tooltip){var s=o.type,l=(a?\"- \"+(o.tooltipName||o.name)+\": \":\"\")+(\"ordinal\"===s?t+\"\":\"time\"===s?e?\"\":Zi(\"yyyy/MM/dd hh:mm:ss\",t):Vi(t));l&&r.push(Gi(l))}}var a=g(i,function(t,e,i){var o=n.getDimensionInfo(i);return t|=o&&!1!==o.tooltip&&null!=o.tooltipName},0),r=[],s=Xo(n,\"tooltip\");return s.length?d(s,function(e){o(n.get(e,t),e)}):d(i,o),(a?\"<br/>\":\"\")+r.join(a?\"<br/>\":\", \")}(o):Gi(Vi(o)),r=n.getName(t),s=n.getItemVisual(t,\"color\");b(s)&&s.colorStops&&(s=(s.colorStops[0]||{}).color);var l=Fi(s=s||\"transparent\"),h=this.name;return\"\\0-\"===h&&(h=\"\"),h=h?Gi(h)+(e?\": \":\"<br/>\"):\"\",e?l+h+a:h+l+(r?Gi(r)+\": \"+a:a)},isAnimationEnabled:function(){if(Uv.node)return!1;var t=this.getShallow(\"animation\");return t&&this.getData().count()>this.getShallow(\"animationThreshold\")&&(t=!1),t},restoreData:function(){Xi(this,\"data\",ji(this,\"dataBeforeProcessed\").cloneShallow())},getColorFromPalette:function(t,e){var i=this.ecModel,n=qb.getColorFromPalette.call(this,t,e);return n||(n=i.getColorFromPalette(t,e)),n},getAxisTooltipData:null,getTooltipPosition:null});u(yw,Nb),u(yw,qb);var xw=function(){this.group=new jy,this.uid=qo(\"viewComponent\")};xw.prototype={constructor:xw,init:function(t,e){},render:function(t,e,i,n){},dispose:function(){}};var _w=xw.prototype;_w.updateView=_w.updateLayout=_w.updateVisual=function(t,e,i,n){},Ki(xw),tn(xw,{registerWhenExtend:!0}),Ta.prototype={type:\"chart\",init:function(t,e){},render:function(t,e,i,n){},highlight:function(t,e,i,n){Ca(t.getData(),n,\"emphasis\")},downplay:function(t,e,i,n){Ca(t.getData(),n,\"normal\")},remove:function(t,e){this.group.removeAll()},dispose:function(){}};var bw=Ta.prototype;bw.updateView=bw.updateLayout=bw.updateVisual=function(t,e,i,n){this.render(t,e,i,n)},Ki(Ta),tn(Ta,{registerWhenExtend:!0});var ww=\"\\0__throttleOriginMethod\",Sw=\"\\0__throttleRate\",Mw=\"\\0__throttleType\",Iw=Math.PI,Tw=d,Aw=Ub.parseClassType,Cw={zrender:\"3.7.3\"},Dw=1e3,Lw=1e3,kw=3e3,Pw={PROCESSOR:{FILTER:Dw,STATISTIC:5e3},VISUAL:{LAYOUT:Lw,GLOBAL:2e3,CHART:kw,COMPONENT:4e3,BRUSH:5e3}},Ow=\"__flagInMainProcess\",zw=\"__optionUpdated\",Nw=/^[a-zA-Z0-9_]+$/;Oa.prototype.on=Pa(\"on\"),Oa.prototype.off=Pa(\"off\"),Oa.prototype.one=Pa(\"one\"),u(Oa,fy);var Ew=za.prototype;Ew._onframe=function(){if(this[zw]){var t=this[zw].silent;this[Ow]=!0,Rw.prepareAndUpdate.call(this),this[Ow]=!1,this[zw]=!1,Va.call(this,t),Ba.call(this,t)}},Ew.getDom=function(){return this._dom},Ew.getZr=function(){return this._zr},Ew.setOption=function(t,e,i){var n;if(b(e)&&(i=e.lazyUpdate,n=e.silent,e=e.notMerge),this[Ow]=!0,!this._model||e){var o=new ca(this._api),a=this._theme;(this._model=new iw(null,null,a,o)).init(null,null,a,o)}this._model.setOption(t,Hw),i?(this[zw]={silent:n},this[Ow]=!1):(Rw.prepareAndUpdate.call(this),this._zr.flush(),this[zw]=!1,this[Ow]=!1,Va.call(this,n),Ba.call(this,n))},Ew.setTheme=function(){console.log(\"ECharts#setTheme() is DEPRECATED in ECharts 3.0\")},Ew.getModel=function(){return this._model},Ew.getOption=function(){return this._model&&this._model.getOption()},Ew.getWidth=function(){return this._zr.getWidth()},Ew.getHeight=function(){return this._zr.getHeight()},Ew.getDevicePixelRatio=function(){return this._zr.painter.dpr||window.devicePixelRatio||1},Ew.getRenderedCanvas=function(t){if(Uv.canvasSupported){(t=t||{}).pixelRatio=t.pixelRatio||1,t.backgroundColor=t.backgroundColor||this._model.get(\"backgroundColor\");var e=this._zr;return d(e.storage.getDisplayList(),function(t){t.stopAnimation(!0)}),e.painter.getRenderedCanvas(t)}},Ew.getSvgDataUrl=function(){if(Uv.svgSupported){var t=this._zr;return d(t.storage.getDisplayList(),function(t){t.stopAnimation(!0)}),t.painter.pathToSvg()}},Ew.getDataURL=function(t){var e=(t=t||{}).excludeComponents,i=this._model,n=[],o=this;Tw(e,function(t){i.eachComponent({mainType:t},function(t){var e=o._componentsMap[t.__viewId];e.group.ignore||(n.push(e),e.group.ignore=!0)})});var a=\"svg\"===this._zr.painter.getType()?this.getSvgDataUrl():this.getRenderedCanvas(t).toDataURL(\"image/\"+(t&&t.type||\"png\"));return Tw(n,function(t){t.group.ignore=!1}),a},Ew.getConnectedDataURL=function(t){if(Uv.canvasSupported){var e=this.group,n=Math.min,o=Math.max;if(qw[e]){var a=1/0,r=1/0,s=-1/0,l=-1/0,h=[],u=t&&t.pixelRatio||1;d(jw,function(u,c){if(u.group===e){var d=u.getRenderedCanvas(i(t)),f=u.getDom().getBoundingClientRect();a=n(f.left,a),r=n(f.top,r),s=o(f.right,s),l=o(f.bottom,l),h.push({dom:d,left:f.left,top:f.top})}});var c=(s*=u)-(a*=u),f=(l*=u)-(r*=u),g=iy();g.width=c,g.height=f;var p=yi(g);return Tw(h,function(t){var e=new qe({style:{x:t.left*u-a,y:t.top*u-r,image:t.dom}});p.add(e)}),p.refreshImmediately(),g.toDataURL(\"image/\"+(t&&t.type||\"png\"))}return this.getDataURL(t)}},Ew.convertToPixel=v(Na,\"convertToPixel\"),Ew.convertFromPixel=v(Na,\"convertFromPixel\"),Ew.containPixel=function(t,e){var i;return t=Fo(this._model,t),d(t,function(t,n){n.indexOf(\"Models\")>=0&&d(t,function(t){var o=t.coordinateSystem;if(o&&o.containPoint)i|=!!o.containPoint(e);else if(\"seriesModels\"===n){var a=this._chartsMap[t.__viewId];a&&a.containPoint&&(i|=a.containPoint(e,t))}},this)},this),!!i},Ew.getVisual=function(t,e){var i=(t=Fo(this._model,t,{defaultMainType:\"series\"})).seriesModel.getData(),n=t.hasOwnProperty(\"dataIndexInside\")?t.dataIndexInside:t.hasOwnProperty(\"dataIndex\")?i.indexOfRawIndex(t.dataIndex):null;return null!=n?i.getItemVisual(n,e):i.getVisual(e)},Ew.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},Ew.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]};var Rw={update:function(t){var e=this._model,i=this._api,n=this._coordSysMgr,o=this._zr;if(e){e.restoreData(),n.create(this._model,this._api),Ha.call(this,e,i),Fa.call(this,e),n.update(e,i),Ua.call(this,e,t),Xa.call(this,e,t);var a=e.get(\"backgroundColor\")||\"transparent\",r=o.painter;if(r.isSingleCanvas&&r.isSingleCanvas())o.configLayer(0,{clearColor:a});else{if(!Uv.canvasSupported){var s=Mt(a);a=Ot(s,\"rgb\"),0===s[3]&&(a=\"transparent\")}a.colorStops||a.image?(o.configLayer(0,{clearColor:a}),this.__hasGradientOrPatternBg=!0,this._dom.style.background=\"transparent\"):(this.__hasGradientOrPatternBg&&o.configLayer(0,{clearColor:null}),this.__hasGradientOrPatternBg=!1,this._dom.style.background=a)}Tw(Fw,function(t){t(e,i)})}},updateView:function(t){var e=this._model;e&&(e.eachSeries(function(t){t.getData().clearAllVisual()}),Ua.call(this,e,t),Ga.call(this,\"updateView\",e,t))},updateVisual:function(t){var e=this._model;e&&(e.eachSeries(function(t){t.getData().clearAllVisual()}),Ua.call(this,e,t,!0),Ga.call(this,\"updateVisual\",e,t))},updateLayout:function(t){var e=this._model;e&&(Za.call(this,e,t),Ga.call(this,\"updateLayout\",e,t))},prepareAndUpdate:function(t){var e=this._model;Wa.call(this,\"component\",e),Wa.call(this,\"chart\",e),Rw.update.call(this,t)}};Ew.resize=function(t){this[Ow]=!0,this._zr.resize(t);var e=this._model&&this._model.resetOption(\"media\");Rw[e?\"prepareAndUpdate\":\"update\"].call(this),this._loadingFX&&this._loadingFX.resize(),this[Ow]=!1;var i=t&&t.silent;Va.call(this,i),Ba.call(this,i)},Ew.showLoading=function(t,e){if(b(t)&&(e=t,t=\"\"),t=t||\"default\",this.hideLoading(),Xw[t]){var i=Xw[t](this._api,e),n=this._zr;this._loadingFX=i,n.add(i)}},Ew.hideLoading=function(){this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},Ew.makeActionFromEvent=function(t){var e=a({},t);return e.type=Gw[t.type],e},Ew.dispatchAction=function(t,e){b(e)||(e={silent:!!e}),Bw[t.type]&&this._model&&(this[Ow]?this._pendingActions.push(t):(Ra.call(this,t,e.silent),e.flush?this._zr.flush(!0):!1!==e.flush&&Uv.browser.weChat&&this._throttledZrFlush(),Va.call(this,e.silent),Ba.call(this,e.silent)))},Ew.on=Pa(\"on\"),Ew.off=Pa(\"off\"),Ew.one=Pa(\"one\");var Vw=[\"click\",\"dblclick\",\"mouseover\",\"mouseout\",\"mousemove\",\"mousedown\",\"mouseup\",\"globalout\",\"contextmenu\"];Ew._initEvents=function(){Tw(Vw,function(t){this._zr.on(t,function(e){var i,n=this.getModel(),o=e.target;if(\"globalout\"===t)i={};else if(o&&null!=o.dataIndex){var r=o.dataModel||n.getSeriesByIndex(o.seriesIndex);i=r&&r.getDataParams(o.dataIndex,o.dataType)||{}}else o&&o.eventData&&(i=a({},o.eventData));i&&(i.event=e,i.type=t,this.trigger(t,i))},this)},this),Tw(Gw,function(t,e){this._messageCenter.on(e,function(t){this.trigger(e,t)},this)},this)},Ew.isDisposed=function(){return this._disposed},Ew.clear=function(){this.setOption({series:[]},!0)},Ew.dispose=function(){if(!this._disposed){this._disposed=!0;var t=this._api,e=this._model;Tw(this._componentsViews,function(i){i.dispose(e,t)}),Tw(this._chartsViews,function(i){i.dispose(e,t)}),this._zr.dispose(),delete jw[this.id]}},u(za,fy);var Bw={},Gw={},Ww=[],Hw=[],Fw=[],Zw=[],Uw={},Xw={},jw={},qw={},Yw=new Date-0,$w=new Date-0,Kw=\"_echarts_instance_\",Jw={},Qw=Ja;ar(2e3,function(t){t.eachRawSeries(function(e){var i=(e.visualColorAccessPath||\"itemStyle.normal.color\").split(\".\"),n=e.getData(),o=e.get(i)||e.getColorFromPalette(e.get(\"name\"));n.setVisual(\"color\",o),t.isSeriesFiltered(e)||(\"function\"!=typeof o||o instanceof yb||n.each(function(t){n.setItemVisual(t,\"color\",o(e.getDataParams(t)))}),n.each(function(t){var e=n.getItemModel(t).get(i,!0);null!=e&&n.setItemVisual(t,\"color\",e)}))})}),tr(vw),rr(\"default\",function(t,e){r(e=e||{},{text:\"loading\",color:\"#c23531\",textColor:\"#000\",maskColor:\"rgba(255, 255, 255, 0.8)\",zlevel:0});var i=new db({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4}),n=new mb({shape:{startAngle:-Iw/2,endAngle:-Iw/2+.1,r:10},style:{stroke:e.color,lineCap:\"round\",lineWidth:5},zlevel:e.zlevel,z:10001}),o=new db({style:{fill:\"none\",text:e.text,textPosition:\"right\",textDistance:10,textFill:e.textColor},zlevel:e.zlevel,z:10001});n.animateShape(!0).when(1e3,{endAngle:3*Iw/2}).start(\"circularInOut\"),n.animateShape(!0).when(1e3,{startAngle:3*Iw/2}).delay(300).start(\"circularInOut\");var a=new jy;return a.add(n),a.add(o),a.add(i),a.resize=function(){var e=t.getWidth()/2,a=t.getHeight()/2;n.setShape({cx:e,cy:a});var r=n.shape.r;o.setShape({x:e-r,y:a-r,width:2*r,height:2*r}),i.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},a.resize(),a}),ir({type:\"highlight\",event:\"highlight\",update:\"highlight\"},N),ir({type:\"downplay\",event:\"downplay\",update:\"downplay\"},N);var tS={};fr.prototype={constructor:fr,add:function(t){return this._add=t,this},update:function(t){return this._update=t,this},remove:function(t){return this._remove=t,this},execute:function(){var t=this._old,e=this._new,i={},n=[],o=[];for(gr(t,{},n,\"_oldKeyGetter\",this),gr(e,i,o,\"_newKeyGetter\",this),a=0;a<t.length;a++)null!=(s=i[r=n[a]])?((h=s.length)?(1===h&&(i[r]=null),s=s.unshift()):i[r]=null,this._update&&this._update(s,a)):this._remove&&this._remove(a);for(var a=0;a<o.length;a++){var r=o[a];if(i.hasOwnProperty(r)){var s=i[r];if(null==s)continue;if(s.length)for(var l=0,h=s.length;l<h;l++)this._add&&this._add(s[l]);else this._add&&this._add(s)}}}};var eS=b,iS=\"undefined\"==typeof window?global:window,nS={float:void 0===iS.Float64Array?Array:iS.Float64Array,int:void 0===iS.Int32Array?Array:iS.Int32Array,ordinal:Array,number:Array,time:Array},oS=[\"stackedOn\",\"hasItemOption\",\"_nameList\",\"_idList\",\"_rawData\"];mr.prototype.pure=!1,mr.prototype.count=function(){return this._array.length},mr.prototype.getItem=function(t){return this._array[t]};var aS=function(t,e){t=t||[\"x\",\"y\"];for(var i={},n=[],o=0;o<t.length;o++){var a,r={};\"string\"==typeof t[o]?r={name:a=t[o],coordDim:a,coordDimIndex:0,stackable:!1,type:\"number\"}:(a=(r=t[o]).name,r.type=r.type||\"number\",r.coordDim||(r.coordDim=a,r.coordDimIndex=0)),r.otherDims=r.otherDims||{},n.push(a),i[a]=r}this.dimensions=n,this._dimensionInfos=i,this.hostModel=e,this.dataType,this.indices=[],this._storage={},this._nameList=[],this._idList=[],this._optionModels=[],this.stackedOn=null,this._visual={},this._layout={},this._itemVisuals=[],this._itemLayouts=[],this._graphicEls=[],this._rawData,this._extent},rS=aS.prototype;rS.type=\"list\",rS.hasItemOption=!0,rS.getDimension=function(t){return isNaN(t)||(t=this.dimensions[t]||t),t},rS.getDimensionInfo=function(t){return i(this._dimensionInfos[this.getDimension(t)])},rS.initData=function(t,e,i){y(t=t||[])&&(t=new mr(t)),this._rawData=t;var n,o=this._storage={},a=this.indices=[],r=this.dimensions,s=this._dimensionInfos,l=t.count(),h=[],u={};e=e||[];for(v=0;v<r.length;v++){var c=s[r[v]];0===c.otherDims.itemName&&(n=v);var d=nS[c.type];o[r[v]]=new d(l)}var f=this;i||(f.hasItemOption=!1),i=i||function(t,e,i,n){var o=No(t);return Eo(t)&&(f.hasItemOption=!0),Ro(o instanceof Array?o[n]:o,s[e])};for(v=0;v<l;v++){for(var g=t.getItem(v),p=0;p<r.length;p++){var m=r[p];o[m][v]=i(g,m,v,p)}a.push(v)}for(var v=0;v<l;v++){g=t.getItem(v);!e[v]&&g&&(null!=g.name?e[v]=g.name:null!=n&&(e[v]=o[r[n]][v]));var x=e[v]||\"\",_=g&&g.id;!_&&x&&(u[x]=u[x]||0,_=x,u[x]>0&&(_+=\"__ec__\"+u[x]),u[x]++),_&&(h[v]=_)}this._nameList=e,this._idList=h},rS.count=function(){return this.indices.length},rS.get=function(t,e,i){var n=this._storage,o=this.indices[e];if(null==o||!n[t])return NaN;var a=n[t][o];if(i){var r=this._dimensionInfos[t];if(r&&r.stackable)for(var s=this.stackedOn;s;){var l=s.get(t,e);(a>=0&&l>0||a<=0&&l<0)&&(a+=l),s=s.stackedOn}}return a},rS.getValues=function(t,e,i){var n=[];y(t)||(i=e,e=t,t=this.dimensions);for(var o=0,a=t.length;o<a;o++)n.push(this.get(t[o],e,i));return n},rS.hasValue=function(t){for(var e=this.dimensions,i=this._dimensionInfos,n=0,o=e.length;n<o;n++)if(\"ordinal\"!==i[e[n]].type&&isNaN(this.get(e[n],t)))return!1;return!0},rS.getDataExtent=function(t,e,i){t=this.getDimension(t);var n=this._storage[t],o=this.getDimensionInfo(t);e=o&&o.stackable&&e;var a,r=(this._extent||(this._extent={}))[t+!!e];if(r)return r;if(n){for(var s=1/0,l=-1/0,h=0,u=this.count();h<u;h++)a=this.get(t,h,e),i&&!i(a,t,h)||(a<s&&(s=a),a>l&&(l=a));return this._extent[t+!!e]=[s,l]}return[1/0,-1/0]},rS.getSum=function(t,e){var i=0;if(this._storage[t])for(var n=0,o=this.count();n<o;n++){var a=this.get(t,n,e);isNaN(a)||(i+=a)}return i},rS.indexOf=function(t,e){var i=this._storage[t],n=this.indices;if(i)for(var o=0,a=n.length;o<a;o++)if(i[n[o]]===e)return o;return-1},rS.indexOfName=function(t){for(var e=this.indices,i=this._nameList,n=0,o=e.length;n<o;n++)if(i[e[n]]===t)return n;return-1},rS.indexOfRawIndex=function(t){var e=this.indices,i=e[t];if(null!=i&&i===t)return t;for(var n=0,o=e.length-1;n<=o;){var a=(n+o)/2|0;if(e[a]<t)n=a+1;else{if(!(e[a]>t))return a;o=a-1}}return-1},rS.indicesOfNearest=function(t,e,i,n){var o=[];if(!this._storage[t])return o;null==n&&(n=1/0);for(var a=Number.MAX_VALUE,r=-1,s=0,l=this.count();s<l;s++){var h=e-this.get(t,s,i),u=Math.abs(h);h<=n&&u<=a&&((u<a||h>=0&&r<0)&&(a=u,r=h,o.length=0),o.push(s))}return o},rS.getRawIndex=function(t){var e=this.indices[t];return null==e?-1:e},rS.getRawDataItem=function(t){return this._rawData.getItem(this.getRawIndex(t))},rS.getName=function(t){return this._nameList[this.indices[t]]||\"\"},rS.getId=function(t){return this._idList[this.indices[t]]||this.getRawIndex(t)+\"\"},rS.each=function(t,e,i,n){\"function\"==typeof t&&(n=i,i=e,e=t,t=[]);var o=[],a=(t=f(vr(t),this.getDimension,this)).length,r=this.indices;n=n||this;for(var s=0;s<r.length;s++)switch(a){case 0:e.call(n,s);break;case 1:e.call(n,this.get(t[0],s,i),s);break;case 2:e.call(n,this.get(t[0],s,i),this.get(t[1],s,i),s);break;default:for(var l=0;l<a;l++)o[l]=this.get(t[l],s,i);o[l]=s,e.apply(n,o)}},rS.filterSelf=function(t,e,i,n){\"function\"==typeof t&&(n=i,i=e,e=t,t=[]);var o=[],a=[],r=(t=f(vr(t),this.getDimension,this)).length,s=this.indices;n=n||this;for(var l=0;l<s.length;l++){var h;if(r)if(1===r)h=e.call(n,this.get(t[0],l,i),l);else{for(var u=0;u<r;u++)a[u]=this.get(t[u],l,i);a[u]=l,h=e.apply(n,a)}else h=e.call(n,l);h&&o.push(s[l])}return this.indices=o,this._extent={},this},rS.mapArray=function(t,e,i,n){\"function\"==typeof t&&(n=i,i=e,e=t,t=[]);var o=[];return this.each(t,function(){o.push(e&&e.apply(this,arguments))},i,n),o},rS.map=function(t,e,i,n){var o=yr(this,t=f(vr(t),this.getDimension,this)),a=o.indices=this.indices,r=o._storage,s=[];return this.each(t,function(){var i=arguments[arguments.length-1],n=e&&e.apply(this,arguments);if(null!=n){\"number\"==typeof n&&(s[0]=n,n=s);for(var o=0;o<n.length;o++){var l=t[o],h=r[l],u=a[i];h&&(h[u]=n[o])}}},i,n),o},rS.downSample=function(t,e,i,n){for(var o=yr(this,[t]),a=this._storage,r=o._storage,s=this.indices,l=o.indices=[],h=[],u=[],c=Math.floor(1/e),d=r[t],f=this.count(),g=0;g<a[t].length;g++)r[t][g]=a[t][g];for(g=0;g<f;g+=c){c>f-g&&(c=f-g,h.length=c);for(var p=0;p<c;p++){var m=s[g+p];h[p]=d[m],u[p]=m}var v=i(h);d[m=u[n(h,v)||0]]=v,l.push(m)}return o},rS.getItemModel=function(t){var e=this.hostModel;return t=this.indices[t],new Lo(this._rawData.getItem(t),e,e&&e.ecModel)},rS.diff=function(t){var e,i=this._idList,n=t&&t._idList;return new fr(t?t.indices:[],this.indices,function(t){return null!=(e=n[t])?e:\"e\\0\\0\"+t},function(t){return null!=(e=i[t])?e:\"e\\0\\0\"+t})},rS.getVisual=function(t){var e=this._visual;return e&&e[t]},rS.setVisual=function(t,e){if(eS(t))for(var i in t)t.hasOwnProperty(i)&&this.setVisual(i,t[i]);else this._visual=this._visual||{},this._visual[t]=e},rS.setLayout=function(t,e){if(eS(t))for(var i in t)t.hasOwnProperty(i)&&this.setLayout(i,t[i]);else this._layout[t]=e},rS.getLayout=function(t){return this._layout[t]},rS.getItemLayout=function(t){return this._itemLayouts[t]},rS.setItemLayout=function(t,e,i){this._itemLayouts[t]=i?a(this._itemLayouts[t]||{},e):e},rS.clearItemLayouts=function(){this._itemLayouts.length=0},rS.getItemVisual=function(t,e,i){var n=this._itemVisuals[t],o=n&&n[e];return null!=o||i?o:this.getVisual(e)},rS.setItemVisual=function(t,e,i){var n=this._itemVisuals[t]||{};if(this._itemVisuals[t]=n,eS(e))for(var o in e)e.hasOwnProperty(o)&&(n[o]=e[o]);else n[e]=i},rS.clearAllVisual=function(){this._visual={},this._itemVisuals=[]};var sS=function(t){t.seriesIndex=this.seriesIndex,t.dataIndex=this.dataIndex,t.dataType=this.dataType};rS.setItemGraphicEl=function(t,e){var i=this.hostModel;e&&(e.dataIndex=t,e.dataType=this.dataType,e.seriesIndex=i&&i.seriesIndex,\"group\"===e.type&&e.traverse(sS,e)),this._graphicEls[t]=e},rS.getItemGraphicEl=function(t){return this._graphicEls[t]},rS.eachItemGraphicEl=function(t,e){d(this._graphicEls,function(i,n){i&&t&&t.call(e,i,n)})},rS.cloneShallow=function(){var t=f(this.dimensions,this.getDimensionInfo,this),e=new aS(t,this.hostModel);return e._storage=this._storage,pr(e,this),e.indices=this.indices.slice(),this._extent&&(e._extent=a({},this._extent)),e},rS.wrapMethod=function(t,e){var i=this[t];\"function\"==typeof i&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=i.apply(this,arguments);return e.apply(this,[t].concat(C(arguments)))})},rS.TRANSFERABLE_METHODS=[\"cloneShallow\",\"downSample\",\"map\"],rS.CHANGABLE_METHODS=[\"filterSelf\"];var lS=d,hS=_,uS=r,cS={tooltip:1,label:1,itemName:1},dS=xr.guessOrdinal=function(t,e){for(var i=0,n=t.length;i<n;i++){var o=_r(t[i]);if(!y(o))return!1;if(null!=(o=o[e])&&isFinite(o)&&\"\"!==o)return!1;if(hS(o)&&\"-\"!==o)return!0}return!1},fS={cartesian2d:function(t,e,i,n){var o=f([\"xAxis\",\"yAxis\"],function(t){return i.queryComponents({mainType:t,index:e.get(t+\"Index\"),id:e.get(t+\"Id\")})[0]}),a=o[0],r=o[1],s=a.get(\"type\"),l=r.get(\"type\"),h=[{name:\"x\",type:Ir(s),stackable:Mr(s)},{name:\"y\",type:Ir(l),stackable:Mr(l)}],u=\"category\"===s,c=\"category\"===l;h=xr(h,t,n);var d={};return u&&(d.x=a),c&&(d.y=r),{dimensions:h,categoryIndex:u?0:c?1:-1,categoryAxesModels:d}},singleAxis:function(t,e,i,n){var o=i.queryComponents({mainType:\"singleAxis\",index:e.get(\"singleAxisIndex\"),id:e.get(\"singleAxisId\")})[0],a=o.get(\"type\"),r=\"category\"===a,s=[{name:\"single\",type:Ir(a),stackable:Mr(a)}];s=xr(s,t,n);var l={};return r&&(l.single=o),{dimensions:s,categoryIndex:r?0:-1,categoryAxesModels:l}},polar:function(t,e,i,n){var o=i.queryComponents({mainType:\"polar\",index:e.get(\"polarIndex\"),id:e.get(\"polarId\")})[0],a=o.findAxisModel(\"angleAxis\"),r=o.findAxisModel(\"radiusAxis\"),s=r.get(\"type\"),l=a.get(\"type\"),h=[{name:\"radius\",type:Ir(s),stackable:Mr(s)},{name:\"angle\",type:Ir(l),stackable:Mr(l)}],u=\"category\"===l,c=\"category\"===s;h=xr(h,t,n);var d={};return c&&(d.radius=r),u&&(d.angle=a),{dimensions:h,categoryIndex:u?1:c?0:-1,categoryAxesModels:d}},geo:function(t,e,i,n){return{dimensions:xr([{name:\"lng\"},{name:\"lat\"}],t,n)}}};Ar.prototype.parse=function(t){return t},Ar.prototype.getSetting=function(t){return this._setting[t]},Ar.prototype.contain=function(t){var e=this._extent;return t>=e[0]&&t<=e[1]},Ar.prototype.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},Ar.prototype.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},Ar.prototype.unionExtent=function(t){var e=this._extent;t[0]<e[0]&&(e[0]=t[0]),t[1]>e[1]&&(e[1]=t[1])},Ar.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getDataExtent(e,!0))},Ar.prototype.getExtent=function(){return this._extent.slice()},Ar.prototype.setExtent=function(t,e){var i=this._extent;isNaN(t)||(i[0]=t),isNaN(e)||(i[1]=e)},Ar.prototype.getTicksLabels=function(){for(var t=[],e=this.getTicks(),i=0;i<e.length;i++)t.push(this.getLabel(e[i]));return t},Ar.prototype.isBlank=function(){return this._isBlank},Ar.prototype.setBlank=function(t){this._isBlank=t},Ki(Ar),tn(Ar,{registerWhenExtend:!0});var gS=Ar.prototype,pS=Ar.extend({type:\"ordinal\",init:function(t,e){this._data=t,this._extent=e||[0,t.length-1]},parse:function(t){return\"string\"==typeof t?l(this._data,t):Math.round(t)},contain:function(t){return t=this.parse(t),gS.contain.call(this,t)&&null!=this._data[t]},normalize:function(t){return gS.normalize.call(this,this.parse(t))},scale:function(t){return Math.round(gS.scale.call(this,t))},getTicks:function(){for(var t=[],e=this._extent,i=e[0];i<=e[1];)t.push(i),i++;return t},getLabel:function(t){return this._data[t]},count:function(){return this._extent[1]-this._extent[0]+1},unionExtentFromData:function(t,e){this.unionExtent(t.getDataExtent(e,!1))},niceTicks:N,niceExtent:N});pS.create=function(){return new pS};var mS=Mi,vS=Mi,yS=Ar.extend({type:\"interval\",_interval:0,_intervalPrecision:2,setExtent:function(t,e){var i=this._extent;isNaN(t)||(i[0]=parseFloat(t)),isNaN(e)||(i[1]=parseFloat(e))},unionExtent:function(t){var e=this._extent;t[0]<e[0]&&(e[0]=t[0]),t[1]>e[1]&&(e[1]=t[1]),yS.prototype.setExtent.call(this,e[0],e[1])},getInterval:function(){return this._interval},setInterval:function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=Dr(t)},getTicks:function(){return Pr(this._interval,this._extent,this._niceExtent,this._intervalPrecision)},getTicksLabels:function(){for(var t=[],e=this.getTicks(),i=0;i<e.length;i++)t.push(this.getLabel(e[i]));return t},getLabel:function(t,e){if(null==t)return\"\";var i=e&&e.precision;return null==i?i=Ai(t)||0:\"auto\"===i&&(i=this._intervalPrecision),t=vS(t,i,!0),Vi(t)},niceTicks:function(t,e,i){t=t||5;var n=this._extent,o=n[1]-n[0];if(isFinite(o)){o<0&&(o=-o,n.reverse());var a=Cr(n,t,e,i);this._intervalPrecision=a.intervalPrecision,this._interval=a.interval,this._niceExtent=a.niceTickExtent}},niceExtent:function(t){var e=this._extent;if(e[0]===e[1])if(0!==e[0]){var i=e[0];t.fixMax?e[0]-=i/2:(e[1]+=i/2,e[0]-=i/2)}else e[1]=1;var n=e[1]-e[0];isFinite(n)||(e[0]=0,e[1]=1),this.niceTicks(t.splitNumber,t.minInterval,t.maxInterval);var o=this._interval;t.fixMin||(e[0]=vS(Math.floor(e[0]/o)*o)),t.fixMax||(e[1]=vS(Math.ceil(e[1]/o)*o))}});yS.create=function(){return new yS};var xS=yS.prototype,_S=Math.ceil,bS=Math.floor,wS=function(t,e,i,n){for(;i<n;){var o=i+n>>>1;t[o][1]<e?i=o+1:n=o}return i},SS=yS.extend({type:\"time\",getLabel:function(t){var e=this._stepLvl,i=new Date(t);return Zi(e[0],i,this.getSetting(\"useUTC\"))},niceExtent:function(t){var e=this._extent;if(e[0]===e[1]&&(e[0]-=864e5,e[1]+=864e5),e[1]===-1/0&&e[0]===1/0){var i=new Date;e[1]=+new Date(i.getFullYear(),i.getMonth(),i.getDate()),e[0]=e[1]-864e5}this.niceTicks(t.splitNumber,t.minInterval,t.maxInterval);var n=this._interval;t.fixMin||(e[0]=Mi(bS(e[0]/n)*n)),t.fixMax||(e[1]=Mi(_S(e[1]/n)*n))},niceTicks:function(t,e,i){t=t||10;var n=this._extent,o=n[1]-n[0],a=o/t;null!=e&&a<e&&(a=e),null!=i&&a>i&&(a=i);var r=MS.length,s=wS(MS,a,0,r),l=MS[Math.min(s,r-1)],h=l[1];\"year\"===l[0]&&(h*=Ni(o/h/t,!0));var u=this.getSetting(\"useUTC\")?0:60*new Date(+n[0]||+n[1]).getTimezoneOffset()*1e3,c=[Math.round(_S((n[0]-u)/h)*h+u),Math.round(bS((n[1]-u)/h)*h+u)];kr(c,n),this._stepLvl=l,this._interval=h,this._niceExtent=c},parse:function(t){return+Pi(t)}});d([\"contain\",\"normalize\"],function(t){SS.prototype[t]=function(e){return xS[t].call(this,this.parse(e))}});var MS=[[\"hh:mm:ss\",1e3],[\"hh:mm:ss\",5e3],[\"hh:mm:ss\",1e4],[\"hh:mm:ss\",15e3],[\"hh:mm:ss\",3e4],[\"hh:mm\\nMM-dd\",6e4],[\"hh:mm\\nMM-dd\",3e5],[\"hh:mm\\nMM-dd\",6e5],[\"hh:mm\\nMM-dd\",9e5],[\"hh:mm\\nMM-dd\",18e5],[\"hh:mm\\nMM-dd\",36e5],[\"hh:mm\\nMM-dd\",72e5],[\"hh:mm\\nMM-dd\",216e5],[\"hh:mm\\nMM-dd\",432e5],[\"MM-dd\\nyyyy\",864e5],[\"MM-dd\\nyyyy\",1728e5],[\"MM-dd\\nyyyy\",2592e5],[\"MM-dd\\nyyyy\",3456e5],[\"MM-dd\\nyyyy\",432e6],[\"MM-dd\\nyyyy\",5184e5],[\"week\",6048e5],[\"MM-dd\\nyyyy\",864e6],[\"week\",12096e5],[\"week\",18144e5],[\"month\",26784e5],[\"week\",36288e5],[\"month\",53568e5],[\"week\",36288e5],[\"quarter\",8208e6],[\"month\",107136e5],[\"month\",13392e6],[\"half-year\",16416e6],[\"month\",214272e5],[\"month\",26784e6],[\"year\",32832e6]];SS.create=function(t){return new SS({useUTC:t.ecModel.get(\"useUTC\")})};var IS=Ar.prototype,TS=yS.prototype,AS=Ai,CS=Mi,DS=Math.floor,LS=Math.ceil,kS=Math.pow,PS=Math.log,OS=Ar.extend({type:\"log\",base:10,$constructor:function(){Ar.apply(this,arguments),this._originalScale=new yS},getTicks:function(){var t=this._originalScale,e=this._extent,i=t.getExtent();return f(TS.getTicks.call(this),function(n){var o=Mi(kS(this.base,n));return o=n===e[0]&&t.__fixMin?Or(o,i[0]):o,o=n===e[1]&&t.__fixMax?Or(o,i[1]):o},this)},getLabel:TS.getLabel,scale:function(t){return t=IS.scale.call(this,t),kS(this.base,t)},setExtent:function(t,e){var i=this.base;t=PS(t)/PS(i),e=PS(e)/PS(i),TS.setExtent.call(this,t,e)},getExtent:function(){var t=this.base,e=IS.getExtent.call(this);e[0]=kS(t,e[0]),e[1]=kS(t,e[1]);var i=this._originalScale,n=i.getExtent();return i.__fixMin&&(e[0]=Or(e[0],n[0])),i.__fixMax&&(e[1]=Or(e[1],n[1])),e},unionExtent:function(t){this._originalScale.unionExtent(t);var e=this.base;t[0]=PS(t[0])/PS(e),t[1]=PS(t[1])/PS(e),IS.unionExtent.call(this,t)},unionExtentFromData:function(t,e){this.unionExtent(t.getDataExtent(e,!0,function(t){return t>0}))},niceTicks:function(t){t=t||10;var e=this._extent,i=e[1]-e[0];if(!(i===1/0||i<=0)){var n=Oi(i);for(t/i*n<=.5&&(n*=10);!isNaN(n)&&Math.abs(n)<1&&Math.abs(n)>0;)n*=10;var o=[Mi(LS(e[0]/n)*n),Mi(DS(e[1]/n)*n)];this._interval=n,this._niceExtent=o}},niceExtent:function(t){TS.niceExtent.call(this,t);var e=this._originalScale;e.__fixMin=t.fixMin,e.__fixMax=t.fixMax}});d([\"contain\",\"normalize\"],function(t){OS.prototype[t]=function(e){return e=PS(e)/PS(this.base),IS[t].call(this,e)}}),OS.create=function(){return new OS};var zS={getFormattedLabels:function(){return Vr(this.axis,this.get(\"axisLabel.formatter\"))},getCategories:function(){return\"category\"===this.get(\"type\")&&f(this.get(\"data\"),Gr)},getMin:function(t){var e=this.option,i=t||null==e.rangeStart?e.min:e.rangeStart;return this.axis&&null!=i&&\"dataMin\"!==i&&\"function\"!=typeof i&&!M(i)&&(i=this.axis.scale.parse(i)),i},getMax:function(t){var e=this.option,i=t||null==e.rangeEnd?e.max:e.rangeEnd;return this.axis&&null!=i&&\"dataMax\"!==i&&\"function\"!=typeof i&&!M(i)&&(i=this.axis.scale.parse(i)),i},getNeedCrossZero:function(){var t=this.option;return null==t.rangeStart&&null==t.rangeEnd&&!t.scale},getCoordSysModel:N,setRange:function(t,e){this.option.rangeStart=t,this.option.rangeEnd=e},resetRange:function(){this.option.rangeStart=this.option.rangeEnd=null}},NS=Zn({type:\"triangle\",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,a=e.height/2;t.moveTo(i,n-a),t.lineTo(i+o,n+a),t.lineTo(i-o,n+a),t.closePath()}}),ES=Zn({type:\"diamond\",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,a=e.height/2;t.moveTo(i,n-a),t.lineTo(i+o,n),t.lineTo(i,n+a),t.lineTo(i-o,n),t.closePath()}}),RS=Zn({type:\"pin\",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.x,n=e.y,o=e.width/5*3,a=Math.max(o,e.height),r=o/2,s=r*r/(a-r),l=n-a+r+s,h=Math.asin(s/r),u=Math.cos(h)*r,c=Math.sin(h),d=Math.cos(h),f=.6*r,g=.7*r;t.moveTo(i-u,l+s),t.arc(i,l,r,Math.PI-h,2*Math.PI+h),t.bezierCurveTo(i+u-c*f,l+s+d*f,i,n-g,i,n),t.bezierCurveTo(i,n-g,i-u+c*f,l+s+d*f,i-u,l+s),t.closePath()}}),VS=Zn({type:\"arrow\",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.height,n=e.width,o=e.x,a=e.y,r=n/3*2;t.moveTo(o,a),t.lineTo(o+r,a+i),t.lineTo(o,a+i/4*3),t.lineTo(o-r,a+i),t.lineTo(o,a),t.closePath()}}),BS={line:function(t,e,i,n,o){o.x1=t,o.y1=e+n/2,o.x2=t+i,o.y2=e+n/2},rect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n},roundRect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n,o.r=Math.min(i,n)/4},square:function(t,e,i,n,o){var a=Math.min(i,n);o.x=t,o.y=e,o.width=a,o.height=a},circle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.r=Math.min(i,n)/2},diamond:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n},pin:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},arrow:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},triangle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n}},GS={};d({line:fb,rect:db,roundRect:db,square:db,circle:nb,diamond:ES,pin:RS,arrow:VS,triangle:NS},function(t,e){GS[e]=new t});var WS=Zn({type:\"symbol\",shape:{symbolType:\"\",x:0,y:0,width:0,height:0},beforeBrush:function(){var t=this.style;\"pin\"===this.shape.symbolType&&\"inside\"===t.textPosition&&(t.textPosition=[\"50%\",\"40%\"],t.textAlign=\"center\",t.textVerticalAlign=\"middle\")},buildPath:function(t,e,i){var n=e.symbolType,o=GS[n];\"none\"!==e.symbolType&&(o||(o=GS[n=\"rect\"]),BS[n](e.x,e.y,e.width,e.height,o.shape),o.buildPath(t,o.shape,i))}}),HS=(Object.freeze||Object)({createList:function(t){return Sr(t.get(\"data\"),t,t.ecModel)},createScale:function(t,e){var i=e;e instanceof Lo||u(i=new Lo(e),zS);var n=Er(i);return n.setExtent(t[0],t[1]),Nr(n,i),n},mixinAxisModelCommonMethods:function(t){u(t,zS)},completeDimensions:xr,createSymbol:Hr}),FS=wi,ZS=[0,1],US=function(t,e,i){this.dim=t,this.scale=e,this._extent=i||[0,0],this.inverse=!1,this.onBand=!1,this._labelInterval};US.prototype={constructor:US,contain:function(t){var e=this._extent,i=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return t>=i&&t<=n},containData:function(t){return this.contain(this.dataToCoord(t))},getExtent:function(){return this._extent.slice()},getPixelPrecision:function(t){return Ci(t||this.scale.getExtent(),this._extent)},setExtent:function(t,e){var i=this._extent;i[0]=t,i[1]=e},dataToCoord:function(t,e){var i=this._extent,n=this.scale;return t=n.normalize(t),this.onBand&&\"ordinal\"===n.type&&Fr(i=i.slice(),n.count()),FS(t,ZS,i,e)},coordToData:function(t,e){var i=this._extent,n=this.scale;this.onBand&&\"ordinal\"===n.type&&Fr(i=i.slice(),n.count());var o=FS(t,i,ZS,e);return this.scale.scale(o)},pointToData:function(t,e){},getTicksCoords:function(t){if(this.onBand&&!t){for(var e=this.getBands(),i=[],n=0;n<e.length;n++)i.push(e[n][0]);return e[n-1]&&i.push(e[n-1][1]),i}return f(this.scale.getTicks(),this.dataToCoord,this)},getLabelsCoords:function(){return f(this.scale.getTicks(),this.dataToCoord,this)},getBands:function(){for(var t=this.getExtent(),e=[],i=this.scale.count(),n=t[0],o=t[1]-n,a=0;a<i;a++)e.push([o*a/i+n,o*(a+1)/i+n]);return e},getBandWidth:function(){var t=this._extent,e=this.scale.getExtent(),i=e[1]-e[0]+(this.onBand?1:0);0===i&&(i=1);var n=Math.abs(t[1]-t[0]);return Math.abs(n)/i},isHorizontal:null,getRotate:null,getLabelInterval:function(){var t=this._labelInterval;if(!t){var e=this.model,i=e.getModel(\"axisLabel\");t=i.get(\"interval\"),\"category\"!==this.type||null!=t&&\"auto\"!==t||(t=Rr(f(this.scale.getTicks(),this.dataToCoord,this),e.getFormattedLabels(),i.getFont(),this.getRotate?this.getRotate():this.isHorizontal&&!this.isHorizontal()?90:0,i.get(\"rotate\"))),this._labelInterval=t}return t}};var XS=1e-8;Xr.prototype={constructor:Xr,properties:null,getBoundingRect:function(){var t=this._rect;if(t)return t;for(var e=Number.MAX_VALUE,i=[e,e],n=[-e,-e],o=[],a=[],r=this.geometries,s=0;s<r.length;s++)\"polygon\"===r[s].type&&(mn(r[s].exterior,o,a),K(i,i,o),J(n,n,a));return 0===s&&(i[0]=i[1]=n[0]=n[1]=0),this._rect=new jt(i[0],i[1],n[0]-i[0],n[1]-i[1])},contain:function(t){var e=this.getBoundingRect(),i=this.geometries;if(!e.contain(t[0],t[1]))return!1;t:for(var n=0,o=i.length;n<o;n++)if(\"polygon\"===i[n].type){var a=i[n].exterior,r=i[n].interiors;if(Ur(a,t[0],t[1])){for(var s=0;s<(r?r.length:0);s++)if(Ur(r[s]))continue t;return!0}}return!1},transformTo:function(t,e,i,n){var o=this.getBoundingRect(),a=o.width/o.height;i?n||(n=i/a):i=a*n;for(var r=new jt(t,e,i,n),s=o.calculateTransform(r),l=this.geometries,h=0;h<l.length;h++)if(\"polygon\"===l[h].type){for(var u=l[h].exterior,c=l[h].interiors,d=0;d<u.length;d++)$(u[d],u[d],s);for(var f=0;f<(c?c.length:0);f++)for(d=0;d<c[f].length;d++)$(c[f][d],c[f][d],s)}(o=this._rect).copy(r),this.center=[o.x+o.width/2,o.y+o.height/2]}};var jS=function(t){return jr(t),f(p(t.features,function(t){return t.geometry&&t.properties&&t.geometry.coordinates.length>0}),function(t){var e=t.properties,i=t.geometry,n=i.coordinates,o=[];\"Polygon\"===i.type&&o.push({type:\"polygon\",exterior:n[0],interiors:n.slice(1)}),\"MultiPolygon\"===i.type&&d(n,function(t){t[0]&&o.push({type:\"polygon\",exterior:t[0],interiors:t.slice(1)})});var a=new Xr(e.name,o,e.cp);return a.properties=e,a})},qS={};d([\"map\",\"each\",\"filter\",\"indexOf\",\"inherits\",\"reduce\",\"filter\",\"bind\",\"curry\",\"isArray\",\"isString\",\"isObject\",\"isFunction\",\"extend\",\"defaults\",\"clone\",\"merge\"],function(t){qS[t]=ay[t]}),yw.extend({type:\"series.line\",dependencies:[\"grid\",\"polar\"],getInitialData:function(t,e){return Sr(t.data,this,e)},defaultOption:{zlevel:0,z:2,coordinateSystem:\"cartesian2d\",legendHoverLink:!0,hoverAnimation:!0,clipOverflow:!0,label:{normal:{position:\"top\"}},lineStyle:{normal:{width:2,type:\"solid\"}},step:!1,smooth:!1,smoothMonotone:null,symbol:\"emptyCircle\",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:!1,connectNulls:!1,sampling:\"none\",animationEasing:\"linear\",progressive:0,hoverLayerThreshold:1/0}});var YS=Jr.prototype;YS._createSymbol=function(t,e,i,n){this.removeAll();var o=Hr(t,-1,-1,2,2,e.getItemVisual(i,\"color\"));o.attr({z2:100,culling:!0,scale:Kr(n)}),o.drift=Qr,this._symbolType=t,this.add(o)},YS.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(t)},YS.getSymbolPath=function(){return this.childAt(0)},YS.getScale=function(){return this.childAt(0).scale},YS.highlight=function(){this.childAt(0).trigger(\"emphasis\")},YS.downplay=function(){this.childAt(0).trigger(\"normal\")},YS.setZ=function(t,e){var i=this.childAt(0);i.zlevel=t,i.z=e},YS.setDraggable=function(t){var e=this.childAt(0);e.draggable=t,e.cursor=t?\"move\":\"pointer\"},YS.updateData=function(t,e,i){this.silent=!1;var n=t.getItemVisual(e,\"symbol\")||\"circle\",o=t.hostModel,a=$r(t,e),r=n!==this._symbolType;if(r?this._createSymbol(n,t,e,a):((s=this.childAt(0)).silent=!1,wo(s,{scale:Kr(a)},o,e)),this._updateCommon(t,e,a,i),r){var s=this.childAt(0),l=i&&i.fadeIn,h={scale:s.scale.slice()};l&&(h.style={opacity:s.style.opacity}),s.scale=[0,0],l&&(s.style.opacity=0),So(s,h,o,e)}this._seriesModel=o};var $S=[\"itemStyle\",\"normal\"],KS=[\"itemStyle\",\"emphasis\"],JS=[\"label\",\"normal\"],QS=[\"label\",\"emphasis\"];YS._updateCommon=function(t,e,i,n){var o=this.childAt(0),r=t.hostModel,s=t.getItemVisual(e,\"color\");\"image\"!==o.type&&o.useStyle({strokeNoScale:!0});var l=n&&n.itemStyle,h=n&&n.hoverItemStyle,u=n&&n.symbolRotate,c=n&&n.symbolOffset,d=n&&n.labelModel,f=n&&n.hoverLabelModel,g=n&&n.hoverAnimation,p=n&&n.cursorStyle;if(!n||t.hasItemOption){var m=n&&n.itemModel?n.itemModel:t.getItemModel(e);l=m.getModel($S).getItemStyle([\"color\"]),h=m.getModel(KS).getItemStyle(),u=m.getShallow(\"symbolRotate\"),c=m.getShallow(\"symbolOffset\"),d=m.getModel(JS),f=m.getModel(QS),g=m.getShallow(\"hoverAnimation\"),p=m.getShallow(\"cursor\")}else h=a({},h);var v=o.style;o.attr(\"rotation\",(u||0)*Math.PI/180||0),c&&o.attr(\"position\",[Si(c[0],i[0]),Si(c[1],i[1])]),p&&o.attr(\"cursor\",p),o.setColor(s,n&&n.symbolInnerColor),o.setStyle(l);var y=t.getItemVisual(e,\"opacity\");null!=y&&(v.opacity=y);var x=n&&n.useNameLabel,_=!x&&Yr(t);(x||null!=_)&&co(v,h,d,f,{labelFetcher:r,labelDataIndex:e,defaultText:x?t.getName(e):t.get(_,e),isRectText:!0,autoColor:s}),o.off(\"mouseover\").off(\"mouseout\").off(\"emphasis\").off(\"normal\"),o.hoverStyle=h,uo(o);var b=Kr(i);if(g&&r.isAnimationEnabled()){var w=function(){var t=b[1]/b[0];this.animateTo({scale:[Math.max(1.1*b[0],b[0]+3),Math.max(1.1*b[1],b[1]+3*t)]},400,\"elasticOut\")},S=function(){this.animateTo({scale:b},400,\"elasticOut\")};o.on(\"mouseover\",w).on(\"mouseout\",S).on(\"emphasis\",w).on(\"normal\",S)}},YS.fadeOut=function(t,e){var i=this.childAt(0);this.silent=i.silent=!0,!(e&&e.keepLabel)&&(i.style.text=null),wo(i,{style:{opacity:0},scale:[0,0]},this._seriesModel,this.dataIndex,t)},h(Jr,jy);var tM=ts.prototype;tM.updateData=function(t,e){var i=this.group,n=t.hostModel,o=this._data,a=this._symbolCtor,r={itemStyle:n.getModel(\"itemStyle.normal\").getItemStyle([\"color\"]),hoverItemStyle:n.getModel(\"itemStyle.emphasis\").getItemStyle(),symbolRotate:n.get(\"symbolRotate\"),symbolOffset:n.get(\"symbolOffset\"),hoverAnimation:n.get(\"hoverAnimation\"),labelModel:n.getModel(\"label.normal\"),hoverLabelModel:n.getModel(\"label.emphasis\"),cursorStyle:n.get(\"cursor\")};t.diff(o).add(function(n){var o=t.getItemLayout(n);if(es(t,n,e)){var s=new a(t,n,r);s.attr(\"position\",o),t.setItemGraphicEl(n,s),i.add(s)}}).update(function(s,l){var h=o.getItemGraphicEl(l),u=t.getItemLayout(s);es(t,s,e)?(h?(h.updateData(t,s,r),wo(h,{position:u},n)):(h=new a(t,s)).attr(\"position\",u),i.add(h),t.setItemGraphicEl(s,h)):i.remove(h)}).remove(function(t){var e=o.getItemGraphicEl(t);e&&e.fadeOut(function(){i.remove(e)})}).execute(),this._data=t},tM.updateLayout=function(){var t=this._data;t&&t.eachItemGraphicEl(function(e,i){var n=t.getItemLayout(i);e.attr(\"position\",n)})},tM.remove=function(t){var e=this.group,i=this._data;i&&(t?i.eachItemGraphicEl(function(t){t.fadeOut(function(){e.remove(t)})}):e.removeAll())};var eM=function(t,e,i,n,o,a){for(var r=os(t,e),s=[],l=[],h=[],u=[],c=[],d=[],f=[],g=a.dimensions,p=0;p<r.length;p++){var m=r[p],v=!0;switch(m.cmd){case\"=\":var y=t.getItemLayout(m.idx),x=e.getItemLayout(m.idx1);(isNaN(y[0])||isNaN(y[1]))&&(y=x.slice()),s.push(y),l.push(x),h.push(i[m.idx]),u.push(n[m.idx1]),f.push(e.getRawIndex(m.idx1));break;case\"+\":_=m.idx;s.push(o.dataToPoint([e.get(g[0],_,!0),e.get(g[1],_,!0)])),l.push(e.getItemLayout(_).slice()),h.push(ns(o,e,_)),u.push(n[_]),f.push(e.getRawIndex(_));break;case\"-\":var _=m.idx,b=t.getRawIndex(_);b!==_?(s.push(t.getItemLayout(_)),l.push(a.dataToPoint([t.get(g[0],_,!0),t.get(g[1],_,!0)])),h.push(i[_]),u.push(ns(a,t,_)),f.push(b)):v=!1}v&&(c.push(m),d.push(d.length))}d.sort(function(t,e){return f[t]-f[e]});for(var w=[],S=[],M=[],I=[],T=[],p=0;p<d.length;p++){_=d[p];w[p]=s[_],S[p]=l[_],M[p]=h[_],I[p]=u[_],T[p]=c[_]}return{current:w,next:S,stackedOnCurrent:M,stackedOnNext:I,status:T}},iM=K,nM=J,oM=W,aM=R,rM=[],sM=[],lM=[],hM=Nn.extend({type:\"ec-polyline\",shape:{points:[],smooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},style:{fill:null,stroke:\"#000\"},brush:ab(Nn.prototype.brush),buildPath:function(t,e){var i=e.points,n=0,o=i.length,a=ss(i,e.smoothConstraint);if(e.connectNulls){for(;o>0&&as(i[o-1]);o--);for(;n<o&&as(i[n]);n++);}for(;n<o;)n+=rs(t,i,n,o,o,1,a.min,a.max,e.smooth,e.smoothMonotone,e.connectNulls)+1}}),uM=Nn.extend({type:\"ec-polygon\",shape:{points:[],stackedOnPoints:[],smooth:0,stackedOnSmooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},brush:ab(Nn.prototype.brush),buildPath:function(t,e){var i=e.points,n=e.stackedOnPoints,o=0,a=i.length,r=e.smoothMonotone,s=ss(i,e.smoothConstraint),l=ss(n,e.smoothConstraint);if(e.connectNulls){for(;a>0&&as(i[a-1]);a--);for(;o<a&&as(i[o]);o++);}for(;o<a;){var h=rs(t,i,o,a,a,1,s.min,s.max,e.smooth,r,e.connectNulls);rs(t,n,o+h-1,h,a,-1,l.min,l.max,e.stackedOnSmooth,r,e.connectNulls),o+=h+1,t.closePath()}}});Ta.extend({type:\"line\",init:function(){var t=new jy,e=new ts;this.group.add(e.group),this._symbolDraw=e,this._lineGroup=t},render:function(t,e,i){var n=t.coordinateSystem,o=this.group,a=t.getData(),s=t.getModel(\"lineStyle.normal\"),l=t.getModel(\"areaStyle.normal\"),h=a.mapArray(a.getItemLayout,!0),u=\"polar\"===n.type,c=this._coordSys,d=this._symbolDraw,f=this._polyline,g=this._polygon,p=this._lineGroup,m=t.get(\"animation\"),v=!l.isEmpty(),y=ds(n,a),x=t.get(\"showSymbol\"),_=x&&!u&&!t.get(\"showAllSymbol\")&&this._getSymbolIgnoreFunc(a,n),b=this._data;b&&b.eachItemGraphicEl(function(t,e){t.__temp&&(o.remove(t),b.setItemGraphicEl(e,null))}),x||d.remove(),o.add(p);var w=!u&&t.get(\"step\");f&&c.type===n.type&&w===this._step?(v&&!g?g=this._newPolygon(h,y,n,m):g&&!v&&(p.remove(g),g=this._polygon=null),p.setClipPath(ps(n,!1,t)),x&&d.updateData(a,_),a.eachItemGraphicEl(function(t){t.stopAnimation(!0)}),ls(this._stackedOnPoints,y)&&ls(this._points,h)||(m?this._updateAnimation(a,y,n,i,w):(w&&(h=ms(h,n,w),y=ms(y,n,w)),f.setShape({points:h}),g&&g.setShape({points:h,stackedOnPoints:y})))):(x&&d.updateData(a,_),w&&(h=ms(h,n,w),y=ms(y,n,w)),f=this._newPolyline(h,n,m),v&&(g=this._newPolygon(h,y,n,m)),p.setClipPath(ps(n,!0,t)));var S=vs(a,n)||a.getVisual(\"color\");f.useStyle(r(s.getLineStyle(),{fill:\"none\",stroke:S,lineJoin:\"bevel\"}));var M=t.get(\"smooth\");if(M=hs(t.get(\"smooth\")),f.setShape({smooth:M,smoothMonotone:t.get(\"smoothMonotone\"),connectNulls:t.get(\"connectNulls\")}),g){var I=a.stackedOn,T=0;g.useStyle(r(l.getAreaStyle(),{fill:S,opacity:.7,lineJoin:\"bevel\"})),I&&(T=hs(I.hostModel.get(\"smooth\"))),g.setShape({smooth:M,stackedOnSmooth:T,smoothMonotone:t.get(\"smoothMonotone\"),connectNulls:t.get(\"connectNulls\")})}this._data=a,this._coordSys=n,this._stackedOnPoints=y,this._points=h,this._step=w},dispose:function(){},highlight:function(t,e,i,n){var o=t.getData(),a=Ho(o,n);if(!(a instanceof Array)&&null!=a&&a>=0){var r=o.getItemGraphicEl(a);if(!r){var s=o.getItemLayout(a);if(!s)return;(r=new Jr(o,a)).position=s,r.setZ(t.get(\"zlevel\"),t.get(\"z\")),r.ignore=isNaN(s[0])||isNaN(s[1]),r.__temp=!0,o.setItemGraphicEl(a,r),r.stopSymbolAnimation(!0),this.group.add(r)}r.highlight()}else Ta.prototype.highlight.call(this,t,e,i,n)},downplay:function(t,e,i,n){var o=t.getData(),a=Ho(o,n);if(null!=a&&a>=0){var r=o.getItemGraphicEl(a);r&&(r.__temp?(o.setItemGraphicEl(a,null),this.group.remove(r)):r.downplay())}else Ta.prototype.downplay.call(this,t,e,i,n)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new hM({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e,e},_newPolygon:function(t,e){var i=this._polygon;return i&&this._lineGroup.remove(i),i=new uM({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(i),this._polygon=i,i},_getSymbolIgnoreFunc:function(t,e){var i=e.getAxesByScale(\"ordinal\")[0];if(i&&i.isLabelIgnored)return m(i.isLabelIgnored,i)},_updateAnimation:function(t,e,i,n,o){var a=this._polyline,r=this._polygon,s=t.hostModel,l=eM(this._data,t,this._stackedOnPoints,e,this._coordSys,i),h=l.current,u=l.stackedOnCurrent,c=l.next,d=l.stackedOnNext;o&&(h=ms(l.current,i,o),u=ms(l.stackedOnCurrent,i,o),c=ms(l.next,i,o),d=ms(l.stackedOnNext,i,o)),a.shape.__points=l.current,a.shape.points=h,wo(a,{shape:{points:c}},s),r&&(r.setShape({points:h,stackedOnPoints:u}),wo(r,{shape:{points:c,stackedOnPoints:d}},s));for(var f=[],g=l.status,p=0;p<g.length;p++)if(\"=\"===g[p].cmd){var m=t.getItemGraphicEl(g[p].idx1);m&&f.push({el:m,ptIdx:p})}a.animators&&a.animators.length&&a.animators[0].during(function(){for(var t=0;t<f.length;t++)f[t].el.attr(\"position\",a.shape.__points[f[t].ptIdx])})},remove:function(t){var e=this.group,i=this._data;this._lineGroup.removeAll(),this._symbolDraw.remove(!0),i&&i.eachItemGraphicEl(function(t,n){t.__temp&&(e.remove(t),i.setItemGraphicEl(n,null))}),this._polyline=this._polygon=this._coordSys=this._points=this._stackedOnPoints=this._data=null}});var cM=function(t,e,i,n,o){n.eachRawSeriesByType(t,function(t){var o=t.getData(),a=t.get(\"symbol\")||e,r=t.get(\"symbolSize\");o.setVisual({legendSymbol:i||a,symbol:a,symbolSize:r}),n.isSeriesFiltered(t)||(\"function\"==typeof r&&o.each(function(e){var i=t.getRawValue(e),n=t.getDataParams(e);o.setItemVisual(e,\"symbolSize\",r(i,n))}),o.each(function(t){var e=o.getItemModel(t),i=e.getShallow(\"symbol\",!0),n=e.getShallow(\"symbolSize\",!0);null!=i&&o.setItemVisual(t,\"symbol\",i),null!=n&&o.setItemVisual(t,\"symbolSize\",n)}))})},dM=function(t,e){e.eachSeriesByType(t,function(t){var e=t.getData(),i=t.coordinateSystem;if(i){for(var n=[],o=i.dimensions,a=0;a<o.length;a++)n.push(t.coordDimToDataDim(i.dimensions[a])[0]);1===n.length?e.each(n[0],function(t,n){e.setItemLayout(n,isNaN(t)?[NaN,NaN]:i.dataToPoint(t))}):2===n.length&&e.each(n,function(t,n,o){e.setItemLayout(o,isNaN(t)||isNaN(n)?[NaN,NaN]:i.dataToPoint([t,n]))},!0)}})},fM={average:function(t){for(var e=0,i=0,n=0;n<t.length;n++)isNaN(t[n])||(e+=t[n],i++);return 0===i?NaN:e/i},sum:function(t){for(var e=0,i=0;i<t.length;i++)e+=t[i]||0;return e},max:function(t){for(var e=-1/0,i=0;i<t.length;i++)t[i]>e&&(e=t[i]);return e},min:function(t){for(var e=1/0,i=0;i<t.length;i++)t[i]<e&&(e=t[i]);return e},nearest:function(t){return t[0]}},gM=function(t,e){return Math.round(t.length/2)},pM=function(t){this._axes={},this._dimList=[],this.name=t||\"\"};pM.prototype={constructor:pM,type:\"cartesian\",getAxis:function(t){return this._axes[t]},getAxes:function(){return f(this._dimList,ys,this)},getAxesByScale:function(t){return t=t.toLowerCase(),p(this.getAxes(),function(e){return e.scale.type===t})},addAxis:function(t){var e=t.dim;this._axes[e]=t,this._dimList.push(e)},dataToCoord:function(t){return this._dataCoordConvert(t,\"dataToCoord\")},coordToData:function(t){return this._dataCoordConvert(t,\"coordToData\")},_dataCoordConvert:function(t,e){for(var i=this._dimList,n=t instanceof Array?[]:{},o=0;o<i.length;o++){var a=i[o],r=this._axes[a];n[a]=r[e](t[a])}return n}},xs.prototype={constructor:xs,type:\"cartesian2d\",dimensions:[\"x\",\"y\"],getBaseAxis:function(){return this.getAxesByScale(\"ordinal\")[0]||this.getAxesByScale(\"time\")[0]||this.getAxis(\"x\")},containPoint:function(t){var e=this.getAxis(\"x\"),i=this.getAxis(\"y\");return e.contain(e.toLocalCoord(t[0]))&&i.contain(i.toLocalCoord(t[1]))},containData:function(t){return this.getAxis(\"x\").containData(t[0])&&this.getAxis(\"y\").containData(t[1])},dataToPoint:function(t,e){var i=this.getAxis(\"x\"),n=this.getAxis(\"y\");return[i.toGlobalCoord(i.dataToCoord(t[0],e)),n.toGlobalCoord(n.dataToCoord(t[1],e))]},pointToData:function(t,e){var i=this.getAxis(\"x\"),n=this.getAxis(\"y\");return[i.coordToData(i.toLocalCoord(t[0]),e),n.coordToData(n.toLocalCoord(t[1]),e)]},getOtherAxis:function(t){return this.getAxis(\"x\"===t.dim?\"y\":\"x\")}},h(xs,pM);var mM=function(t,e,i,n,o){US.call(this,t,e,i),this.type=n||\"value\",this.position=o||\"bottom\"};mM.prototype={constructor:mM,index:0,onZero:!1,model:null,isHorizontal:function(){var t=this.position;return\"top\"===t||\"bottom\"===t},getGlobalExtent:function(t){var e=this.getExtent();return e[0]=this.toGlobalCoord(e[0]),e[1]=this.toGlobalCoord(e[1]),t&&e[0]>e[1]&&e.reverse(),e},getOtherAxis:function(){this.grid.getOtherAxis()},isLabelIgnored:function(t){if(\"category\"===this.type){var e=this.getLabelInterval();return\"function\"==typeof e&&!e(t,this.scale.getLabel(t))||t%(e+1)}},pointToData:function(t,e){return this.coordToData(this.toLocalCoord(t[\"x\"===this.dim?0:1]),e)},toLocalCoord:null,toGlobalCoord:null},h(mM,US);var vM={show:!0,zlevel:0,z:0,inverse:!1,name:\"\",nameLocation:\"end\",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:\"...\",placeholder:\".\"},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:\"#333\",width:1,type:\"solid\"},symbol:[\"none\",\"none\"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},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)\"]}}},yM={};yM.categoryAxis=n({boundaryGap:!0,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:\"auto\"},axisLabel:{interval:\"auto\"}},vM),yM.valueAxis=n({boundaryGap:[0,0],splitNumber:5},vM),yM.timeAxis=r({scale:!0,min:\"dataMin\",max:\"dataMax\"},yM.valueAxis),yM.logAxis=r({scale:!0,logBase:10},yM.valueAxis);var xM=[\"value\",\"category\",\"time\",\"log\"],_M=function(t,e,i,a){d(xM,function(r){e.extend({type:t+\"Axis.\"+r,mergeDefaultAndTheme:function(e,o){var a=this.layoutMode,s=a?ea(e):{};n(e,o.getTheme().get(r+\"Axis\")),n(e,this.getDefaultOption()),e.type=i(t,e),a&&ta(e,s,a)},defaultOption:o([{},yM[r+\"Axis\"],a],!0)})}),Ub.registerSubTypeDefaulter(t+\"Axis\",v(i,t))},bM=Ub.extend({type:\"cartesian2dAxis\",axis:null,init:function(){bM.superApply(this,\"init\",arguments),this.resetRange()},mergeOption:function(){bM.superApply(this,\"mergeOption\",arguments),this.resetRange()},restoreData:function(){bM.superApply(this,\"restoreData\",arguments),this.resetRange()},getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:\"grid\",index:this.option.gridIndex,id:this.option.gridId})[0]}});n(bM.prototype,zS);var wM={offset:0};_M(\"x\",bM,_s,wM),_M(\"y\",bM,_s,wM),Ub.extend({type:\"grid\",dependencies:[\"xAxis\",\"yAxis\"],layoutMode:\"box\",coordinateSystem:null,defaultOption:{show:!1,zlevel:0,z:0,left:\"10%\",top:60,right:\"10%\",bottom:60,containLabel:!1,backgroundColor:\"rgba(0,0,0,0)\",borderWidth:1,borderColor:\"#ccc\"}});var SM=d,MM=function(t){var e=t.scale.getExtent(),i=e[0],n=e[1];return!(i>0&&n>0||i<0&&n<0)},IM=Nr,TM=Ms.prototype;TM.type=\"grid\",TM.axisPointerEnabled=!0,TM.getRect=function(){return this._rect},TM.update=function(t,e){var i=this._axesMap;this._updateScale(t,this.model),SM(i.x,function(t){IM(t.scale,t.model)}),SM(i.y,function(t){IM(t.scale,t.model)}),SM(i.x,function(t){Is(i,\"y\",t)}),SM(i.y,function(t){Is(i,\"x\",t)}),this.resize(this.model,e)},TM.resize=function(t,e,i){function n(){SM(a,function(t){var e=t.isHorizontal(),i=e?[0,o.width]:[0,o.height],n=t.inverse?1:0;t.setExtent(i[n],i[1-n]),As(t,e?o.x:o.y)})}var o=Ko(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()});this._rect=o;var a=this._axesList;n(),!i&&t.get(\"containLabel\")&&(SM(a,function(t){if(!t.model.get(\"axisLabel.inside\")){var e=Ss(t);if(e){var i=t.isHorizontal()?\"height\":\"width\",n=t.model.get(\"axisLabel.margin\");o[i]-=e[i]+n,\"top\"===t.position?o.y+=e.height+n:\"left\"===t.position&&(o.x+=e.width+n)}}}),n())},TM.getAxis=function(t,e){var i=this._axesMap[t];if(null!=i){if(null==e)for(var n in i)if(i.hasOwnProperty(n))return i[n];return i[e]}},TM.getAxes=function(){return this._axesList.slice()},TM.getCartesian=function(t,e){if(null!=t&&null!=e){var i=\"x\"+t+\"y\"+e;return this._coordsMap[i]}b(t)&&(e=t.yAxisIndex,t=t.xAxisIndex);for(var n=0,o=this._coordsList;n<o.length;n++)if(o[n].getAxis(\"x\").index===t||o[n].getAxis(\"y\").index===e)return o[n]},TM.getCartesians=function(){return this._coordsList.slice()},TM.convertToPixel=function(t,e,i){var n=this._findConvertTarget(t,e);return n.cartesian?n.cartesian.dataToPoint(i):n.axis?n.axis.toGlobalCoord(n.axis.dataToCoord(i)):null},TM.convertFromPixel=function(t,e,i){var n=this._findConvertTarget(t,e);return n.cartesian?n.cartesian.pointToData(i):n.axis?n.axis.coordToData(n.axis.toLocalCoord(i)):null},TM._findConvertTarget=function(t,e){var i,n,o=e.seriesModel,a=e.xAxisModel||o&&o.getReferringComponents(\"xAxis\")[0],r=e.yAxisModel||o&&o.getReferringComponents(\"yAxis\")[0],s=e.gridModel,h=this._coordsList;return o?l(h,i=o.coordinateSystem)<0&&(i=null):a&&r?i=this.getCartesian(a.componentIndex,r.componentIndex):a?n=this.getAxis(\"x\",a.componentIndex):r?n=this.getAxis(\"y\",r.componentIndex):s&&s.coordinateSystem===this&&(i=this._coordsList[0]),{cartesian:i,axis:n}},TM.containPoint=function(t){var e=this._coordsList[0];if(e)return e.containPoint(t)},TM._initCartesian=function(t,e,i){function n(i){return function(n,s){if(bs(n,t,e)){var l=n.get(\"position\");\"x\"===i?\"top\"!==l&&\"bottom\"!==l&&o[l=\"bottom\"]&&(l=\"top\"===l?\"bottom\":\"top\"):\"left\"!==l&&\"right\"!==l&&o[l=\"left\"]&&(l=\"left\"===l?\"right\":\"left\"),o[l]=!0;var h=new mM(i,Er(n),[0,0],n.get(\"type\"),l),u=\"category\"===h.type;h.onBand=u&&n.get(\"boundaryGap\"),h.inverse=n.get(\"inverse\"),h.onZero=n.get(\"axisLine.onZero\"),h.onZeroAxisIndex=n.get(\"axisLine.onZeroAxisIndex\"),n.axis=h,h.model=n,h.grid=this,h.index=s,this._axesList.push(h),a[i][s]=h,r[i]++}}}var o={left:!1,right:!1,top:!1,bottom:!1},a={x:{},y:{}},r={x:0,y:0};if(e.eachComponent(\"xAxis\",n(\"x\"),this),e.eachComponent(\"yAxis\",n(\"y\"),this),!r.x||!r.y)return this._axesMap={},void(this._axesList=[]);this._axesMap=a,SM(a.x,function(e,i){SM(a.y,function(n,o){var a=\"x\"+i+\"y\"+o,r=new xs(a);r.grid=this,r.model=t,this._coordsMap[a]=r,this._coordsList.push(r),r.addAxis(e),r.addAxis(n)},this)},this)},TM._updateScale=function(t,e){function i(t,e,i){SM(i.coordDimToDataDim(e.dim),function(i){e.scale.unionExtentFromData(t,i)})}d(this._axesList,function(t){t.scale.setExtent(1/0,-1/0)}),t.eachSeries(function(n){if(Ds(n)){var o=Cs(n),a=o[0],r=o[1];if(!bs(a,e,t)||!bs(r,e,t))return;var s=this.getCartesian(a.componentIndex,r.componentIndex),l=n.getData(),h=s.getAxis(\"x\"),u=s.getAxis(\"y\");\"list\"===l.type&&(i(l,h,n),i(l,u,n))}},this)},TM.getTooltipAxes=function(t){var e=[],i=[];return SM(this.getCartesians(),function(n){var o=null!=t&&\"auto\"!==t?n.getAxis(t):n.getBaseAxis(),a=n.getOtherAxis(o);l(e,o)<0&&e.push(o),l(i,a)<0&&i.push(a)}),{baseAxes:e,otherAxes:i}};var AM=[\"xAxis\",\"yAxis\"];Ms.create=function(t,e){var i=[];return t.eachComponent(\"grid\",function(n,o){var a=new Ms(n,t,e);a.name=\"grid_\"+o,a.resize(n,e,!0),n.coordinateSystem=a,i.push(a)}),t.eachSeries(function(t){if(Ds(t)){var e=Cs(t),i=e[0],n=e[1],o=i.getCoordSysModel().coordinateSystem;t.coordinateSystem=o.getCartesian(i.componentIndex,n.componentIndex)}}),i},Ms.dimensions=Ms.prototype.dimensions=xs.prototype.dimensions,ua.register(\"cartesian2d\",Ms);var CM=Math.PI,DM=function(t,e){this.opt=e,this.axisModel=t,r(e,{labelOffset:0,nameDirection:1,tickDirection:1,labelDirection:1,silent:!0}),this.group=new jy;var i=new jy({position:e.position.slice(),rotation:e.rotation});i.updateTransform(),this._transform=i.transform,this._dumbGroup=i};DM.prototype={constructor:DM,hasBuilder:function(t){return!!LM[t]},add:function(t){LM[t].call(this)},getGroup:function(){return this.group}};var LM={axisLine:function(){var t=this.opt,e=this.axisModel;if(e.get(\"axisLine.show\")){var i=this.axisModel.axis.getExtent(),n=this._transform,o=[i[0],0],r=[i[1],0];n&&($(o,o,n),$(r,r,n));var s=a({lineCap:\"round\"},e.getModel(\"axisLine.lineStyle\").getLineStyle());this.group.add(new fb(Yn({anid:\"line\",shape:{x1:o[0],y1:o[1],x2:r[0],y2:r[1]},style:s,strokeContainThreshold:t.strokeContainThreshold||5,silent:!0,z2:1})));var l=e.get(\"axisLine.symbol\"),h=e.get(\"axisLine.symbolSize\");if(null!=l){\"string\"==typeof l&&(l=[l,l]),\"string\"!=typeof h&&\"number\"!=typeof h||(h=[h,h]);var u=h[0],c=h[1];d([[t.rotation+Math.PI/2,o],[t.rotation-Math.PI/2,r]],function(t,e){if(\"none\"!==l[e]&&null!=l[e]){var i=Hr(l[e],-u/2,-c/2,u,c,s.stroke,!0);i.attr({rotation:t[0],position:t[1],silent:!0}),this.group.add(i)}},this)}}},axisTickLabel:function(){var t=this.axisModel,e=this.opt,i=Rs(this,t,e);Os(t,Vs(this,t,e),i)},axisName:function(){var t=this.opt,e=this.axisModel,i=I(t.axisName,e.get(\"name\"));if(i){var n,o=e.get(\"nameLocation\"),r=t.nameDirection,s=e.getModel(\"nameTextStyle\"),l=e.get(\"nameGap\")||0,h=this.axisModel.axis.getExtent(),u=h[0]>h[1]?-1:1,c=[\"start\"===o?h[0]-u*l:\"end\"===o?h[1]+u*l:(h[0]+h[1])/2,Es(o)?t.labelOffset+r*l:0],d=e.get(\"nameRotate\");null!=d&&(d=d*CM/180);var f;Es(o)?n=kM(t.rotation,null!=d?d:t.rotation,r):(n=ks(t,o,d||0,h),null!=(f=t.axisNameAvailableWidth)&&(f=Math.abs(f/Math.sin(n.rotation)),!isFinite(f)&&(f=null)));var g=s.getFont(),p=e.get(\"nameTruncate\",!0)||{},m=p.ellipsis,v=I(t.nameTruncateMaxWidth,p.maxWidth,f),y=null!=m&&null!=v?Zx(i,v,g,m,{minChar:2,placeholder:p.placeholder}):i,x=e.get(\"tooltip\",!0),_=e.mainType,b={componentType:_,name:i,$vars:[\"name\"]};b[_+\"Index\"]=e.componentIndex;var w=new ib({anid:\"name\",__fullText:i,__truncatedText:y,position:c,rotation:n.rotation,silent:Ps(e),z2:1,tooltip:x&&x.show?a({content:i,formatter:function(){return i},formatterParams:b},x):null});fo(w.style,s,{text:y,textFont:g,textFill:s.getTextColor()||e.get(\"axisLine.lineStyle.color\"),textAlign:n.textAlign,textVerticalAlign:n.textVerticalAlign}),e.get(\"triggerEvent\")&&(w.eventData=Ls(e),w.eventData.targetType=\"axisName\",w.eventData.name=i),this._dumbGroup.add(w),w.updateTransform(),this.group.add(w),w.decomposeTransform()}}},kM=DM.innerTextLayout=function(t,e,i){var n,o,a=Li(e-t);return ki(a)?(o=i>0?\"top\":\"bottom\",n=\"center\"):ki(a-CM)?(o=i>0?\"bottom\":\"top\",n=\"center\"):(o=\"middle\",n=a>0&&a<CM?i>0?\"right\":\"left\":i>0?\"left\":\"right\"),{rotation:a,textAlign:n,textVerticalAlign:o}},PM=DM.ifIgnoreOnTick=function(t,e,i,n,o,a){if(0===e&&o||e===n-1&&a)return!1;var r,s=t.scale;return\"ordinal\"===s.type&&(\"function\"==typeof i?(r=s.getTicks()[e],!i(r,s.getLabel(r))):e%(i+1))},OM=DM.getInterval=function(t,e){var i=t.get(\"interval\");return null!=i&&\"auto\"!=i||(i=e),i},zM=d,NM=v,EM=lr({type:\"axis\",_axisPointer:null,axisPointerClass:null,render:function(t,e,i,n){this.axisPointerClass&&Us(t),EM.superApply(this,\"render\",arguments),$s(this,t,0,i,0,!0)},updateAxisPointer:function(t,e,i,n,o){$s(this,t,0,i,0,!1)},remove:function(t,e){var i=this._axisPointer;i&&i.remove(e),EM.superApply(this,\"remove\",arguments)},dispose:function(t,e){Ks(this,e),EM.superApply(this,\"dispose\",arguments)}}),RM=[];EM.registerAxisPointerClass=function(t,e){RM[t]=e},EM.getAxisPointerClass=function(t){return t&&RM[t]};var VM=DM.ifIgnoreOnTick,BM=DM.getInterval,GM=[\"axisLine\",\"axisTickLabel\",\"axisName\"],WM=[\"splitArea\",\"splitLine\"],HM=EM.extend({type:\"cartesianAxis\",axisPointerClass:\"CartesianAxisPointer\",render:function(t,e,i,n){this.group.removeAll();var o=this._axisGroup;if(this._axisGroup=new jy,this.group.add(this._axisGroup),t.get(\"show\")){var a=t.getCoordSysModel(),r=Js(a,t),s=new DM(t,r);d(GM,s.add,s),this._axisGroup.add(s.getGroup()),d(WM,function(e){t.get(e+\".show\")&&this[\"_\"+e](t,a,r.labelInterval)},this),Ao(o,this._axisGroup,t),HM.superCall(this,\"render\",t,e,i,n)}},_splitLine:function(t,e,i){var n=t.axis;if(!n.scale.isBlank()){var o=t.getModel(\"splitLine\"),a=o.getModel(\"lineStyle\"),s=a.get(\"color\"),l=BM(o,i);s=y(s)?s:[s];for(var h=e.coordinateSystem.getRect(),u=n.isHorizontal(),c=0,d=n.getTicksCoords(),f=n.scale.getTicks(),g=t.get(\"axisLabel.showMinLabel\"),p=t.get(\"axisLabel.showMaxLabel\"),m=[],v=[],x=a.getLineStyle(),_=0;_<d.length;_++)if(!VM(n,_,l,d.length,g,p)){var b=n.toGlobalCoord(d[_]);u?(m[0]=b,m[1]=h.y,v[0]=b,v[1]=h.y+h.height):(m[0]=h.x,m[1]=b,v[0]=h.x+h.width,v[1]=b);var w=c++%s.length;this._axisGroup.add(new fb(Yn({anid:\"line_\"+f[_],shape:{x1:m[0],y1:m[1],x2:v[0],y2:v[1]},style:r({stroke:s[w]},x),silent:!0})))}}},_splitArea:function(t,e,i){var n=t.axis;if(!n.scale.isBlank()){var o=t.getModel(\"splitArea\"),a=o.getModel(\"areaStyle\"),s=a.get(\"color\"),l=e.coordinateSystem.getRect(),h=n.getTicksCoords(),u=n.scale.getTicks(),c=n.toGlobalCoord(h[0]),d=n.toGlobalCoord(h[0]),f=0,g=BM(o,i),p=a.getAreaStyle();s=y(s)?s:[s];for(var m=t.get(\"axisLabel.showMinLabel\"),v=t.get(\"axisLabel.showMaxLabel\"),x=1;x<h.length;x++)if(!VM(n,x,g,h.length,m,v)){var _,b,w,S,M=n.toGlobalCoord(h[x]);n.isHorizontal()?(_=c,b=l.y,w=M-_,S=l.height):(_=l.x,b=d,w=l.width,S=M-b);var I=f++%s.length;this._axisGroup.add(new db({anid:\"area_\"+u[x],shape:{x:_,y:b,width:w,height:S},style:r({fill:s[I]},p),silent:!0})),c=_+w,d=b+S}}}});HM.extend({type:\"xAxis\"}),HM.extend({type:\"yAxis\"}),lr({type:\"grid\",render:function(t,e){this.group.removeAll(),t.get(\"show\")&&this.group.add(new db({shape:t.coordinateSystem.getRect(),style:r({fill:t.get(\"backgroundColor\")},t.getItemStyle()),silent:!0,z2:-1}))}}),tr(function(t){t.xAxis&&t.yAxis&&!t.grid&&(t.grid={})}),ar(v(cM,\"line\",\"circle\",\"line\")),or(v(dM,\"line\")),er(Pw.PROCESSOR.STATISTIC,v(function(t,e,i){e.eachSeriesByType(t,function(t){var e=t.getData(),i=t.get(\"sampling\"),n=t.coordinateSystem;if(\"cartesian2d\"===n.type&&i){var o=n.getBaseAxis(),a=n.getOtherAxis(o),r=o.getExtent(),s=r[1]-r[0],l=Math.round(e.count()/s);if(l>1){var h;\"string\"==typeof i?h=fM[i]:\"function\"==typeof i&&(h=i),h&&(e=e.downSample(a.dim,1/l,h,gM),t.setData(e))}}},this)},\"line\"));var FM=\"__ec_stack_\";nl.getLayoutOnAxis=function(t,e){var i=[],n=t.axis;if(\"category\"===n.type){for(var o=n.getBandWidth(),a=0;a<t.count;a++)i.push(r({bandWidth:o,axisKey:\"axis0\",stackId:FM+a},t));for(var s=il(i),l=[],a=0;a<t.count;a++){var h=s.axis0[FM+a];h.offsetCenter=h.offset+h.width/2,l.push(h)}return l}};var ZM=yw.extend({type:\"series.__base_bar__\",getInitialData:function(t,e){return Sr(t.data,this,e)},getMarkerPosition:function(t){var e=this.coordinateSystem;if(e){var i=e.dataToPoint(t,!0),n=this.getData(),o=n.getLayout(\"offset\"),a=n.getLayout(\"size\");return i[e.getBaseAxis().isHorizontal()?0:1]+=o+a/2,i}return[NaN,NaN]},defaultOption:{zlevel:0,z:2,coordinateSystem:\"cartesian2d\",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,itemStyle:{}}});ZM.extend({type:\"series.bar\",dependencies:[\"grid\",\"polar\"],brushSelector:\"rect\"});var UM=$x([[\"fill\",\"color\"],[\"stroke\",\"borderColor\"],[\"lineWidth\",\"borderWidth\"],[\"stroke\",\"barBorderColor\"],[\"lineWidth\",\"barBorderWidth\"],[\"opacity\"],[\"shadowBlur\"],[\"shadowOffsetX\"],[\"shadowOffsetY\"],[\"shadowColor\"]]),XM={getBarItemStyle:function(t){var e=UM(this,t);if(this.getBorderLineDash){var i=this.getBorderLineDash();i&&(e.lineDash=i)}return e}},jM=[\"itemStyle\",\"normal\",\"barBorderWidth\"];a(Lo.prototype,XM),ur({type:\"bar\",render:function(t,e,i){var n=t.get(\"coordinateSystem\");return\"cartesian2d\"!==n&&\"polar\"!==n||this._render(t,e,i),this.group},dispose:N,_render:function(t,e,i){var n,o=this.group,a=t.getData(),r=this._data,s=t.coordinateSystem,l=s.getBaseAxis();\"cartesian2d\"===s.type?n=l.isHorizontal():\"polar\"===s.type&&(n=\"angle\"===l.dim);var h=t.isAnimationEnabled()?t:null;a.diff(r).add(function(e){if(a.hasValue(e)){var i=a.getItemModel(e),r=YM[s.type](a,e,i),l=qM[s.type](a,e,i,r,n,h);a.setItemGraphicEl(e,l),o.add(l),ll(l,a,e,i,r,t,n,\"polar\"===s.type)}}).update(function(e,i){var l=r.getItemGraphicEl(i);if(a.hasValue(e)){var u=a.getItemModel(e),c=YM[s.type](a,e,u);l?wo(l,{shape:c},h,e):l=qM[s.type](a,e,u,c,n,h,!0),a.setItemGraphicEl(e,l),o.add(l),ll(l,a,e,u,c,t,n,\"polar\"===s.type)}else o.remove(l)}).remove(function(t){var e=r.getItemGraphicEl(t);\"cartesian2d\"===s.type?e&&rl(t,h,e):e&&sl(t,h,e)}).execute(),this._data=a},remove:function(t,e){var i=this.group,n=this._data;t.get(\"animation\")?n&&n.eachItemGraphicEl(function(e){\"sector\"===e.type?sl(e.dataIndex,t,e):rl(e.dataIndex,t,e)}):i.removeAll()}});var qM={cartesian2d:function(t,e,i,n,o,r,s){var l=new db({shape:a({},n)});if(r){var h=l.shape,u=o?\"height\":\"width\",c={};h[u]=0,c[u]=n[u],Tb[s?\"updateProps\":\"initProps\"](l,{shape:c},r,e)}return l},polar:function(t,e,i,n,o,r,s){var l=new rb({shape:a({},n)});if(r){var h=l.shape,u=o?\"r\":\"endAngle\",c={};h[u]=o?0:n.startAngle,c[u]=n[u],Tb[s?\"updateProps\":\"initProps\"](l,{shape:c},r,e)}return l}},YM={cartesian2d:function(t,e,i){var n=t.getItemLayout(e),o=hl(i,n),a=n.width>0?1:-1,r=n.height>0?1:-1;return{x:n.x+a*o/2,y:n.y+r*o/2,width:n.width-a*o,height:n.height-r*o}},polar:function(t,e,i){var n=t.getItemLayout(e);return{cx:n.cx,cy:n.cy,r0:n.r0,r:n.r,startAngle:n.startAngle,endAngle:n.endAngle}}};or(v(nl,\"bar\")),ar(function(t){t.eachSeriesByType(\"bar\",function(t){t.getData().setVisual(\"legendSymbol\",\"roundRect\")})});var $M={updateSelectedMap:function(t){this._targetList=t.slice(),this._selectTargetMap=g(t||[],function(t,e){return t.set(e.name,e),t},z())},select:function(t,e){var i=null!=e?this._targetList[e]:this._selectTargetMap.get(t);\"single\"===this.get(\"selectedMode\")&&this._selectTargetMap.each(function(t){t.selected=!1}),i&&(i.selected=!0)},unSelect:function(t,e){var i=null!=e?this._targetList[e]:this._selectTargetMap.get(t);i&&(i.selected=!1)},toggleSelected:function(t,e){var i=null!=e?this._targetList[e]:this._selectTargetMap.get(t);if(null!=i)return this[i.selected?\"unSelect\":\"select\"](t,e),i.selected},isSelected:function(t,e){var i=null!=e?this._targetList[e]:this._selectTargetMap.get(t);return i&&i.selected}},KM=hr({type:\"series.pie\",init:function(t){KM.superApply(this,\"init\",arguments),this.legendDataProvider=function(){return this.getRawData()},this.updateSelectedMap(t.data),this._defaultLabelLine(t)},mergeOption:function(t){KM.superCall(this,\"mergeOption\",t),this.updateSelectedMap(this.option.data)},getInitialData:function(t,e){var i=xr([\"value\"],t.data),n=new aS(i,this);return n.initData(t.data),n},getDataParams:function(t){var e=this.getData(),i=KM.superCall(this,\"getDataParams\",t),n=[];return e.each(\"value\",function(t){n.push(t)}),i.percent=Di(n,t,e.hostModel.get(\"percentPrecision\")),i.$vars.push(\"percent\"),i},_defaultLabelLine:function(t){zo(t.labelLine,[\"show\"]);var e=t.labelLine.normal,i=t.labelLine.emphasis;e.show=e.show&&t.label.normal.show,i.show=i.show&&t.label.emphasis.show},defaultOption:{zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,center:[\"50%\",\"50%\"],radius:[0,\"75%\"],clockwise:!0,startAngle:90,minAngle:0,selectedOffset:10,hoverOffset:10,avoidLabelOverlap:!0,percentPrecision:2,stillShowZeroSum:!0,label:{normal:{rotate:!1,show:!0,position:\"outer\"},emphasis:{}},labelLine:{normal:{show:!0,length:15,length2:15,smooth:!1,lineStyle:{width:1,type:\"solid\"}}},itemStyle:{normal:{borderWidth:1},emphasis:{}},animationType:\"expansion\",animationEasing:\"cubicOut\",data:[]}});u(KM,$M);var JM=dl.prototype;JM.updateData=function(t,e,i){function n(){s.stopAnimation(!0),s.animateTo({shape:{r:u.r+l.get(\"hoverOffset\")}},300,\"elasticOut\")}function o(){s.stopAnimation(!0),s.animateTo({shape:{r:u.r}},300,\"elasticOut\")}var s=this.childAt(0),l=t.hostModel,h=t.getItemModel(e),u=t.getItemLayout(e),c=a({},u);c.label=null,i?(s.setShape(c),\"scale\"===l.getShallow(\"animationType\")?(s.shape.r=u.r0,So(s,{shape:{r:u.r}},l,e)):(s.shape.endAngle=u.startAngle,wo(s,{shape:{endAngle:u.endAngle}},l,e))):wo(s,{shape:c},l,e);var d=h.getModel(\"itemStyle\"),f=t.getItemVisual(e,\"color\");s.useStyle(r({lineJoin:\"bevel\",fill:f},d.getModel(\"normal\").getItemStyle())),s.hoverStyle=d.getModel(\"emphasis\").getItemStyle();var g=h.getShallow(\"cursor\");g&&s.attr(\"cursor\",g),cl(this,t.getItemLayout(e),h.get(\"selected\"),l.get(\"selectedOffset\"),l.get(\"animation\")),s.off(\"mouseover\").off(\"mouseout\").off(\"emphasis\").off(\"normal\"),h.get(\"hoverAnimation\")&&l.isAnimationEnabled()&&s.on(\"mouseover\",n).on(\"mouseout\",o).on(\"emphasis\",n).on(\"normal\",o),this._updateLabel(t,e),uo(this)},JM._updateLabel=function(t,e){var i=this.childAt(1),n=this.childAt(2),o=t.hostModel,a=t.getItemModel(e),r=t.getItemLayout(e).label,s=t.getItemVisual(e,\"color\");wo(i,{shape:{points:r.linePoints||[[r.x,r.y],[r.x,r.y],[r.x,r.y]]}},o,e),wo(n,{style:{x:r.x,y:r.y}},o,e),n.attr({rotation:r.rotation,origin:[r.x,r.y],z2:10});var l=a.getModel(\"label.normal\"),h=a.getModel(\"label.emphasis\"),u=a.getModel(\"labelLine.normal\"),c=a.getModel(\"labelLine.emphasis\"),s=t.getItemVisual(e,\"color\");co(n.style,n.hoverStyle={},l,h,{labelFetcher:t.hostModel,labelDataIndex:e,defaultText:t.getName(e),autoColor:s,useInsideStyle:!!r.inside},{textAlign:r.textAlign,textVerticalAlign:r.verticalAlign,opacity:t.getItemVisual(e,\"opacity\")}),n.ignore=n.normalIgnore=!l.get(\"show\"),n.hoverIgnore=!h.get(\"show\"),i.ignore=i.normalIgnore=!u.get(\"show\"),i.hoverIgnore=!c.get(\"show\"),i.setStyle({stroke:s,opacity:t.getItemVisual(e,\"opacity\")}),i.setStyle(u.getModel(\"lineStyle\").getLineStyle()),i.hoverStyle=c.getModel(\"lineStyle\").getLineStyle();var d=u.get(\"smooth\");d&&!0===d&&(d=.4),i.setShape({smooth:d})},h(dl,jy);Ta.extend({type:\"pie\",init:function(){var t=new jy;this._sectorGroup=t},render:function(t,e,i,n){if(!n||n.from!==this.uid){var o=t.getData(),a=this._data,r=this.group,s=e.get(\"animation\"),l=!a,h=t.get(\"animationType\"),u=v(ul,this.uid,t,s,i),c=t.get(\"selectedMode\");if(o.diff(a).add(function(t){var e=new dl(o,t);l&&\"scale\"!==h&&e.eachChild(function(t){t.stopAnimation(!0)}),c&&e.on(\"click\",u),o.setItemGraphicEl(t,e),r.add(e)}).update(function(t,e){var i=a.getItemGraphicEl(e);i.updateData(o,t),i.off(\"click\"),c&&i.on(\"click\",u),r.add(i),o.setItemGraphicEl(t,i)}).remove(function(t){var e=a.getItemGraphicEl(t);r.remove(e)}).execute(),s&&l&&o.count()>0&&\"scale\"!==h){var d=o.getItemLayout(0),f=Math.max(i.getWidth(),i.getHeight())/2,g=m(r.removeClipPath,r);r.setClipPath(this._createClipPath(d.cx,d.cy,f,d.startAngle,d.clockwise,g,t))}this._data=o}},dispose:function(){},_createClipPath:function(t,e,i,n,o,a,r){var s=new rb({shape:{cx:t,cy:e,r0:0,r:i,startAngle:n,endAngle:n,clockwise:o}});return So(s,{shape:{endAngle:n+(o?1:-1)*Math.PI*2}},r,a),s},containPoint:function(t,e){var i=e.getData().getItemLayout(0);if(i){var n=t[0]-i.cx,o=t[1]-i.cy,a=Math.sqrt(n*n+o*o);return a<=i.r&&a>=i.r0}}});var QM=function(t,e){d(e,function(e){e.update=\"updateView\",ir(e,function(i,n){var o={};return n.eachComponent({mainType:\"series\",subType:t,query:i},function(t){t[e.method]&&t[e.method](i.name,i.dataIndex);var n=t.getData();n.each(function(e){var i=n.getName(e);o[i]=t.isSelected(i)||!1})}),{name:i.name,selected:o}})})},tI=function(t,e){var i={};e.eachRawSeriesByType(t,function(t){var n=t.getRawData(),o={};if(!e.isSeriesFiltered(t)){var a=t.getData();a.each(function(t){var e=a.getRawIndex(t);o[e]=t}),n.each(function(e){var r=o[e],s=null!=r&&a.getItemVisual(r,\"color\",!0);if(s)n.setItemVisual(e,\"color\",s);else{var l=n.getItemModel(e).get(\"itemStyle.normal.color\")||t.getColorFromPalette(n.getName(e),i);n.setItemVisual(e,\"color\",l),null!=r&&a.setItemVisual(r,\"color\",l)}})}})},eI=function(t,e,i,n){var o,a,r=t.getData(),s=[],l=!1;r.each(function(i){var n,h,u,c,d=r.getItemLayout(i),f=r.getItemModel(i),g=f.getModel(\"label.normal\"),p=g.get(\"position\")||f.get(\"label.emphasis.position\"),m=f.getModel(\"labelLine.normal\"),v=m.get(\"length\"),y=m.get(\"length2\"),x=(d.startAngle+d.endAngle)/2,_=Math.cos(x),b=Math.sin(x);o=d.cx,a=d.cy;var w=\"inside\"===p||\"inner\"===p;if(\"center\"===p)n=d.cx,h=d.cy,c=\"center\";else{var S=(w?(d.r+d.r0)/2*_:d.r*_)+o,M=(w?(d.r+d.r0)/2*b:d.r*b)+a;if(n=S+3*_,h=M+3*b,!w){var I=S+_*(v+e-d.r),T=M+b*(v+e-d.r),A=I+(_<0?-1:1)*y,C=T;n=A+(_<0?-5:5),h=C,u=[[S,M],[I,T],[A,C]]}c=w?\"center\":_>0?\"left\":\"right\"}var D=g.getFont(),L=g.get(\"rotate\")?_<0?-x+Math.PI:-x:0,k=de(t.getFormattedLabel(i,\"normal\")||r.getName(i),D,c,\"top\");l=!!L,d.label={x:n,y:h,position:p,height:k.height,len:v,len2:y,linePoints:u,textAlign:c,verticalAlign:\"middle\",rotation:L,inside:w},w||s.push(d.label)}),!l&&t.get(\"avoidLabelOverlap\")&&gl(s,o,a,e,i,n)},iI=2*Math.PI,nI=Math.PI/180,oI=function(t,e){var i=e.findComponents({mainType:\"legend\"});i&&i.length&&e.eachSeriesByType(t,function(t){var e=t.getData();e.filterSelf(function(t){for(var n=e.getName(t),o=0;o<i.length;o++)if(!i[o].isSelected(n))return!1;return!0},this)},this)};QM(\"pie\",[{type:\"pieToggleSelect\",event:\"pieselectchanged\",method:\"toggleSelected\"},{type:\"pieSelect\",event:\"pieselected\",method:\"select\"},{type:\"pieUnSelect\",event:\"pieunselected\",method:\"unSelect\"}]),ar(v(tI,\"pie\")),or(v(function(t,e,i,n){e.eachSeriesByType(t,function(t){var e=t.get(\"center\"),n=t.get(\"radius\");y(n)||(n=[0,n]),y(e)||(e=[e,e]);var o=i.getWidth(),a=i.getHeight(),r=Math.min(o,a),s=Si(e[0],o),l=Si(e[1],a),h=Si(n[0],r/2),u=Si(n[1],r/2),c=t.getData(),d=-t.get(\"startAngle\")*nI,f=t.get(\"minAngle\")*nI,g=0;c.each(\"value\",function(t){!isNaN(t)&&g++});var p=c.getSum(\"value\"),m=Math.PI/(p||g)*2,v=t.get(\"clockwise\"),x=t.get(\"roseType\"),_=t.get(\"stillShowZeroSum\"),b=c.getDataExtent(\"value\");b[0]=0;var w=iI,S=0,M=d,I=v?1:-1;if(c.each(\"value\",function(t,e){var i;if(isNaN(t))c.setItemLayout(e,{angle:NaN,startAngle:NaN,endAngle:NaN,clockwise:v,cx:s,cy:l,r0:h,r:x?NaN:u});else{(i=\"area\"!==x?0===p&&_?m:t*m:iI/g)<f?(i=f,w-=f):S+=t;var n=M+I*i;c.setItemLayout(e,{angle:i,startAngle:M,endAngle:n,clockwise:v,cx:s,cy:l,r0:h,r:x?wi(t,b,[h,u]):u}),M=n}},!0),w<iI&&g)if(w<=.001){var T=iI/g;c.each(\"value\",function(t,e){if(!isNaN(t)){var i=c.getItemLayout(e);i.angle=T,i.startAngle=d+I*e*T,i.endAngle=d+I*(e+1)*T}})}else m=w/S,M=d,c.each(\"value\",function(t,e){if(!isNaN(t)){var i=c.getItemLayout(e),n=i.angle===f?f:t*m;i.startAngle=M,i.endAngle=M+I*n,M+=I*n}});eI(t,u,o,a)})},\"pie\")),er(v(oI,\"pie\")),yw.extend({type:\"series.scatter\",dependencies:[\"grid\",\"polar\",\"geo\",\"singleAxis\",\"calendar\"],getInitialData:function(t,e){return Sr(t.data,this,e)},brushSelector:\"point\",defaultOption:{coordinateSystem:\"cartesian2d\",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,symbolSize:10,large:!1,largeThreshold:2e3,itemStyle:{normal:{opacity:.8}}}});var aI=Zn({shape:{points:null,sizes:null},symbolProxy:null,buildPath:function(t,e){for(var i=e.points,n=e.sizes,o=this.symbolProxy,a=o.shape,r=0;r<i.length;r++){var s=i[r];if(!isNaN(s[0])&&!isNaN(s[1])){var l=n[r];l[0]<4?t.rect(s[0]-l[0]/2,s[1]-l[1]/2,l[0],l[1]):(a.x=s[0]-l[0]/2,a.y=s[1]-l[1]/2,a.width=l[0],a.height=l[1],o.buildPath(t,a,!0))}}},findDataIndex:function(t,e){for(var i=this.shape,n=i.points,o=i.sizes,a=n.length-1;a>=0;a--){var r=n[a],s=o[a],l=r[0]-s[0]/2,h=r[1]-s[1]/2;if(t>=l&&e>=h&&t<=l+s[0]&&e<=h+s[1])return a}return-1}}),rI=pl.prototype;rI.updateData=function(t){this.group.removeAll();var e=this._symbolEl,i=t.hostModel;e.setShape({points:t.mapArray(t.getItemLayout),sizes:t.mapArray(function(e){var i=t.getItemVisual(e,\"symbolSize\");return i instanceof Array||(i=[i,i]),i})}),e.symbolProxy=Hr(t.getVisual(\"symbol\"),0,0,0,0),e.setColor=e.symbolProxy.setColor,e.useStyle(i.getModel(\"itemStyle.normal\").getItemStyle([\"color\"]));var n=t.getVisual(\"color\");n&&e.setColor(n),e.seriesIndex=i.seriesIndex,e.on(\"mousemove\",function(t){e.dataIndex=null;var i=e.findDataIndex(t.offsetX,t.offsetY);i>=0&&(e.dataIndex=i)}),this.group.add(e)},rI.updateLayout=function(t){var e=t.getData();this._symbolEl.setShape({points:e.mapArray(e.getItemLayout)})},rI.remove=function(){this.group.removeAll()},ur({type:\"scatter\",init:function(){this._normalSymbolDraw=new ts,this._largeSymbolDraw=new pl},render:function(t,e,i){var n=t.getData(),o=this._largeSymbolDraw,a=this._normalSymbolDraw,r=this.group,s=t.get(\"large\")&&n.count()>t.get(\"largeThreshold\")?o:a;this._symbolDraw=s,s.updateData(n),r.add(s.group),r.remove(s===o?a.group:o.group)},updateLayout:function(t){this._symbolDraw.updateLayout(t)},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(e,!0)},dispose:function(){}}),ar(v(cM,\"scatter\",\"circle\",null)),or(v(dM,\"scatter\")),h(ml,US),vl.prototype.getIndicatorAxes=function(){return this._indicatorAxes},vl.prototype.dataToPoint=function(t,e){var i=this._indicatorAxes[e];return this.coordToPoint(i.dataToCoord(t),e)},vl.prototype.coordToPoint=function(t,e){var i=this._indicatorAxes[e].angle;return[this.cx+t*Math.cos(i),this.cy-t*Math.sin(i)]},vl.prototype.pointToData=function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=Math.sqrt(e*e+i*i);e/=n,i/=n;for(var o,a=Math.atan2(-i,e),r=1/0,s=-1,l=0;l<this._indicatorAxes.length;l++){var h=this._indicatorAxes[l],u=Math.abs(a-h.angle);u<r&&(o=h,s=l,r=u)}return[s,+(o&&o.coodToData(n))]},vl.prototype.resize=function(t,e){var i=t.get(\"center\"),n=e.getWidth(),o=e.getHeight(),a=Math.min(n,o)/2;this.cx=Si(i[0],n),this.cy=Si(i[1],o),this.startAngle=t.get(\"startAngle\")*Math.PI/180,this.r=Si(t.get(\"radius\"),a),d(this._indicatorAxes,function(t,e){t.setExtent(0,this.r);var i=this.startAngle+e*Math.PI*2/this._indicatorAxes.length;i=Math.atan2(Math.sin(i),Math.cos(i)),t.angle=i},this)},vl.prototype.update=function(t,e){function i(t){var e=Math.pow(10,Math.floor(Math.log(t)/Math.LN10)),i=t/e;return 2===i?i=5:i*=2,i*e}var n=this._indicatorAxes,o=this._model;d(n,function(t){t.scale.setExtent(1/0,-1/0)}),t.eachSeriesByType(\"radar\",function(e,i){if(\"radar\"===e.get(\"coordinateSystem\")&&t.getComponent(\"radar\",e.get(\"radarIndex\"))===o){var a=e.getData();d(n,function(t){t.scale.unionExtentFromData(a,t.dim)})}},this);var a=o.get(\"splitNumber\");d(n,function(t,e){var n=zr(t.scale,t.model);Nr(t.scale,t.model);var o=t.model,r=t.scale,s=o.getMin(),l=o.getMax(),h=r.getInterval();if(null!=s&&null!=l)r.setExtent(+s,+l),r.setInterval((l-s)/a);else if(null!=s){var u;do{u=s+h*a,r.setExtent(+s,u),r.setInterval(h),h=i(h)}while(u<n[1]&&isFinite(u)&&isFinite(n[1]))}else if(null!=l){var c;do{c=l-h*a,r.setExtent(c,+l),r.setInterval(h),h=i(h)}while(c>n[0]&&isFinite(c)&&isFinite(n[0]))}else{r.getTicks().length-1>a&&(h=i(h));var d=Math.round((n[0]+n[1])/2/h)*h,f=Math.round(a/2);r.setExtent(Mi(d-f*h),Mi(d+(a-f)*h)),r.setInterval(h)}})},vl.dimensions=[],vl.create=function(t,e){var i=[];return t.eachComponent(\"radar\",function(n){var o=new vl(n,t,e);i.push(o),n.coordinateSystem=o}),t.eachSeriesByType(\"radar\",function(t){\"radar\"===t.get(\"coordinateSystem\")&&(t.coordinateSystem=i[t.get(\"radarIndex\")||0])}),i},ua.register(\"radar\",vl);var sI=yM.valueAxis,lI=(sr({type:\"radar\",optionUpdated:function(){var t=this.get(\"boundaryGap\"),e=this.get(\"splitNumber\"),o=this.get(\"scale\"),s=this.get(\"axisLine\"),l=this.get(\"axisTick\"),h=this.get(\"axisLabel\"),u=this.get(\"name\"),c=this.get(\"name.show\"),d=this.get(\"name.formatter\"),g=this.get(\"nameGap\"),p=this.get(\"triggerEvent\"),m=f(this.get(\"indicator\")||[],function(f){null!=f.max&&f.max>0&&!f.min?f.min=0:null!=f.min&&f.min<0&&!f.max&&(f.max=0);var m=u;if(null!=f.color&&(m=r({color:f.color},u)),f=n(i(f),{boundaryGap:t,splitNumber:e,scale:o,axisLine:s,axisTick:l,axisLabel:h,name:f.text,nameLocation:\"end\",nameGap:g,nameTextStyle:m,triggerEvent:p},!1),c||(f.name=\"\"),\"string\"==typeof d){var v=f.name;f.name=d.replace(\"{value}\",null!=v?v:\"\")}else\"function\"==typeof d&&(f.name=d(f.name,f));var y=a(new Lo(f,null,this.ecModel),zS);return y.mainType=\"radar\",y.componentIndex=this.componentIndex,y},this);this.getIndicatorModels=function(){return m}},defaultOption:{zlevel:0,z:0,center:[\"50%\",\"50%\"],radius:\"75%\",startAngle:90,name:{show:!0},boundaryGap:[0,0],splitNumber:5,nameGap:15,scale:!1,shape:\"polygon\",axisLine:n({lineStyle:{color:\"#bbb\"}},sI.axisLine),axisLabel:yl(sI.axisLabel,!1),axisTick:yl(sI.axisTick,!1),splitLine:yl(sI.splitLine,!0),splitArea:yl(sI.splitArea,!0),indicator:[]}}),[\"axisLine\",\"axisTickLabel\",\"axisName\"]);lr({type:\"radar\",render:function(t,e,i){this.group.removeAll(),this._buildAxes(t),this._buildSplitLineAndArea(t)},_buildAxes:function(t){var e=t.coordinateSystem;d(f(e.getIndicatorAxes(),function(t){return new DM(t.model,{position:[e.cx,e.cy],rotation:t.angle,labelDirection:-1,tickDirection:-1,nameDirection:1})}),function(t){d(lI,t.add,t),this.group.add(t.getGroup())},this)},_buildSplitLineAndArea:function(t){function e(t,e,i){var n=i%e.length;return t[n]=t[n]||[],n}var i=t.coordinateSystem,n=i.getIndicatorAxes();if(n.length){var o=t.get(\"shape\"),a=t.getModel(\"splitLine\"),s=t.getModel(\"splitArea\"),l=a.getModel(\"lineStyle\"),h=s.getModel(\"areaStyle\"),u=a.get(\"show\"),c=s.get(\"show\"),g=l.get(\"color\"),p=h.get(\"color\");g=y(g)?g:[g],p=y(p)?p:[p];var m=[],v=[];if(\"circle\"===o)for(var x=n[0].getTicksCoords(),_=i.cx,b=i.cy,w=0;w<x.length;w++)u&&m[C=e(m,g,w)].push(new nb({shape:{cx:_,cy:b,r:x[w]}})),c&&w<x.length-1&&v[C=e(v,p,w)].push(new sb({shape:{cx:_,cy:b,r0:x[w],r:x[w+1]}}));else for(var S,M=f(n,function(t,e){var n=t.getTicksCoords();return S=null==S?n.length-1:Math.min(n.length-1,S),f(n,function(t){return i.coordToPoint(t,e)})}),I=[],w=0;w<=S;w++){for(var T=[],A=0;A<n.length;A++)T.push(M[A][w]);if(T[0]&&T.push(T[0].slice()),u&&m[C=e(m,g,w)].push(new cb({shape:{points:T}})),c&&I){var C=e(v,p,w-1);v[C].push(new ub({shape:{points:T.concat(I)}}))}I=T.slice().reverse()}var D=l.getLineStyle(),L=h.getAreaStyle();d(v,function(t,e){this.group.add(Ib(t,{style:r({stroke:\"none\",fill:p[e%p.length]},L),silent:!0}))},this),d(m,function(t,e){this.group.add(Ib(t,{style:r({fill:\"none\",stroke:g[e%g.length]},D),silent:!0}))},this)}}});var hI=yw.extend({type:\"series.radar\",dependencies:[\"radar\"],init:function(t){hI.superApply(this,\"init\",arguments),this.legendDataProvider=function(){return this.getRawData()}},getInitialData:function(t,e){var i=t.data||[],n=xr([],i,{extraPrefix:\"indicator_\",extraFromZero:!0}),o=new aS(n,this);return o.initData(i),o},formatTooltip:function(t){var e=this.getRawValue(t),i=this.coordinateSystem.getIndicatorAxes(),n=this.getData().getName(t);return Gi(\"\"===n?this.name:n)+\"<br/>\"+f(i,function(t,i){return Gi(t.name+\" : \"+e[i])}).join(\"<br />\")},defaultOption:{zlevel:0,z:2,coordinateSystem:\"radar\",legendHoverLink:!0,radarIndex:0,lineStyle:{normal:{width:2,type:\"solid\"}},label:{normal:{position:\"top\"}},symbol:\"emptyCircle\",symbolSize:4}});ur({type:\"radar\",render:function(t,e,n){function o(t,e){var i=t.getItemVisual(e,\"symbol\")||\"circle\",n=t.getItemVisual(e,\"color\");if(\"none\"!==i){var o=xl(t.getItemVisual(e,\"symbolSize\")),a=Hr(i,-1,-1,2,2,n);return a.attr({style:{strokeNoScale:!0},z2:100,scale:[o[0]/2,o[1]/2]}),a}}function a(e,i,n,a,r,s){n.removeAll();for(var l=0;l<i.length-1;l++){var h=o(a,r);h&&(h.__dimIdx=l,e[l]?(h.attr(\"position\",e[l]),Tb[s?\"initProps\":\"updateProps\"](h,{position:i[l]},t,r)):h.attr(\"position\",i[l]),n.add(h))}}function s(t){return f(t,function(t){return[l.cx,l.cy]})}var l=t.coordinateSystem,h=this.group,u=t.getData(),c=this._data;u.diff(c).add(function(e){var i=u.getItemLayout(e);if(i){var n=new ub,o=new cb,r={shape:{points:i}};n.shape.points=s(i),o.shape.points=s(i),So(n,r,t,e),So(o,r,t,e);var l=new jy,h=new jy;l.add(o),l.add(n),l.add(h),a(o.shape.points,i,h,u,e,!0),u.setItemGraphicEl(e,l)}}).update(function(e,i){var n=c.getItemGraphicEl(i),o=n.childAt(0),r=n.childAt(1),s=n.childAt(2),l={shape:{points:u.getItemLayout(e)}};l.shape.points&&(a(o.shape.points,l.shape.points,s,u,e,!1),wo(o,l,t),wo(r,l,t),u.setItemGraphicEl(e,n))}).remove(function(t){h.remove(c.getItemGraphicEl(t))}).execute(),u.eachItemGraphicEl(function(t,e){function n(){l.attr(\"ignore\",m)}function o(){l.attr(\"ignore\",p)}var a=u.getItemModel(e),s=t.childAt(0),l=t.childAt(1),c=t.childAt(2),d=u.getItemVisual(e,\"color\");h.add(t),s.useStyle(r(a.getModel(\"lineStyle.normal\").getLineStyle(),{fill:\"none\",stroke:d})),s.hoverStyle=a.getModel(\"lineStyle.emphasis\").getLineStyle();var f=a.getModel(\"areaStyle.normal\"),g=a.getModel(\"areaStyle.emphasis\"),p=f.isEmpty()&&f.parentModel.isEmpty(),m=g.isEmpty()&&g.parentModel.isEmpty();m=m&&p,l.ignore=p,l.useStyle(r(f.getAreaStyle(),{fill:d,opacity:.7})),l.hoverStyle=g.getAreaStyle();var v=a.getModel(\"itemStyle.normal\").getItemStyle([\"color\"]),y=a.getModel(\"itemStyle.emphasis\").getItemStyle(),x=a.getModel(\"label.normal\"),_=a.getModel(\"label.emphasis\");c.eachChild(function(t){t.setStyle(v),t.hoverStyle=i(y),co(t.style,t.hoverStyle,x,_,{labelFetcher:u.hostModel,labelDataIndex:e,labelDimIndex:t.__dimIdx,defaultText:u.get(u.dimensions[t.__dimIdx],e),autoColor:d,isRectText:!0})}),t.off(\"mouseover\").off(\"mouseout\").off(\"normal\").off(\"emphasis\"),t.on(\"emphasis\",n).on(\"mouseover\",n).on(\"normal\",o).on(\"mouseout\",o),uo(t)}),this._data=u},remove:function(){this.group.removeAll(),this._data=null},dispose:function(){}});ar(v(tI,\"radar\")),ar(v(cM,\"radar\",\"circle\",null)),or(function(t){t.eachSeriesByType(\"radar\",function(t){var e=t.getData(),i=[],n=t.coordinateSystem;if(n){for(var o=0;o<n.getIndicatorAxes().length;o++){var a=e.dimensions[o];e.each(a,function(t,e){i[e]=i[e]||[],i[e][o]=n.dataToPoint(t,o)})}e.each(function(t){i[t][0]&&i[t].push(i[t][0].slice()),e.setItemLayout(t,i[t])})}})}),er(v(oI,\"radar\")),tr(function(t){var e=t.polar;if(e){y(e)||(e=[e]);var i=[];d(e,function(e,n){e.indicator?(e.type&&!e.shape&&(e.shape=e.type),t.radar=t.radar||[],y(t.radar)||(t.radar=[t.radar]),t.radar.push(e)):i.push(e)}),t.polar=i}d(t.series,function(t){t&&\"radar\"===t.type&&t.polarIndex&&(t.radarIndex=t.polarIndex)})});var uI=$;u(_l,by),bl.prototype={constructor:bl,type:\"view\",dimensions:[\"x\",\"y\"],setBoundingRect:function(t,e,i,n){return this._rect=new jt(t,e,i,n),this._rect},getBoundingRect:function(){return this._rect},setViewRect:function(t,e,i,n){this.transformTo(t,e,i,n),this._viewRect=new jt(t,e,i,n)},transformTo:function(t,e,i,n){var o=this.getBoundingRect(),a=this._viewTransform;a.transform=o.calculateTransform(new jt(t,e,i,n)),a.decomposeTransform(),this._updateTransform()},setCenter:function(t){t&&(this._center=t,this._updateCenterAndZoom())},setZoom:function(t){t=t||1;var e=this.zoomLimit;e&&(null!=e.max&&(t=Math.min(e.max,t)),null!=e.min&&(t=Math.max(e.min,t))),this._zoom=t,this._updateCenterAndZoom()},getDefaultCenter:function(){var t=this.getBoundingRect();return[t.x+t.width/2,t.y+t.height/2]},getCenter:function(){return this._center||this.getDefaultCenter()},getZoom:function(){return this._zoom||1},getRoamTransform:function(){return this._roamTransform},_updateCenterAndZoom:function(){var t=this._viewTransform.getLocalTransform(),e=this._roamTransform,i=this.getDefaultCenter(),n=this.getCenter(),o=this.getZoom();n=$([],n,t),i=$([],i,t),e.origin=n,e.position=[i[0]-n[0],i[1]-n[1]],e.scale=[o,o],this._updateTransform()},_updateTransform:function(){var t=this._roamTransform,e=this._viewTransform;e.parent=t,t.updateTransform(),e.updateTransform(),e.transform&&rt(this.transform||(this.transform=[]),e.transform),this.transform?(this.invTransform=this.invTransform||[],ct(this.invTransform,this.transform)):this.invTransform=null,this.decomposeTransform()},getViewRect:function(){return this._viewRect},getViewRectAfterRoam:function(){var t=this.getBoundingRect().clone();return t.applyTransform(this.transform),t},dataToPoint:function(t){var e=this.transform;return e?uI([],t,e):[t[0],t[1]]},pointToData:function(t){var e=this.invTransform;return e?uI([],t,e):[t[0],t[1]]},convertToPixel:v(wl,\"dataToPoint\"),convertFromPixel:v(wl,\"pointToData\"),containPoint:function(t){return this.getViewRectAfterRoam().contain(t[0],t[1])}},u(bl,by);for(var cI=[126,25],dI=[[[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]]],fI=0;fI<dI.length;fI++)for(var gI=0;gI<dI[fI].length;gI++)dI[fI][gI][0]/=10.5,dI[fI][gI][1]/=-14,dI[fI][gI][0]+=cI[0],dI[fI][gI][1]+=cI[1];var pI={\"南海诸岛\":[32,80],\"广东\":[0,-10],\"香港\":[10,5],\"澳门\":[-10,10],\"天津\":[5,5]},mI={Russia:[100,60],\"United States\":[-99,38],\"United States of America\":[-99,38]},vI=[[[123.45165252685547,25.73527164402261],[123.49731445312499,25.73527164402261],[123.49731445312499,25.750734064600884],[123.45165252685547,25.750734064600884],[123.45165252685547,25.73527164402261]]],yI=[function(t){\"china\"===t.map&&t.regions.push(new Xr(\"南海诸岛\",f(dI,function(t){return{type:\"polygon\",exterior:t}}),cI))},function(t){d(t.regions,function(t){var e=pI[t.name];if(e){var i=t.center;i[0]+=e[0]/10.5,i[1]+=-e[1]/14}})},function(t){d(t.regions,function(t){var e=mI[t.name];if(e){var i=t.center;i[0]=e[0],i[1]=e[1]}})},function(t){if(\"china\"===t.map)for(var e=0,i=t.regions.length;e<i;++e)\"台湾\"===t.regions[e].name&&t.regions[e].geometries.push({type:\"polygon\",exterior:vI[0]})}];Sl.prototype={constructor:Sl,type:\"geo\",dimensions:[\"lng\",\"lat\"],containCoord:function(t){for(var e=this.regions,i=0;i<e.length;i++)if(e[i].contain(t))return!0;return!1},loadGeoJson:function(t,e,i){try{this.regions=t?jS(t):[]}catch(t){throw\"Invalid geoJson format\\n\"+t.message}e=e||{},i=i||{};for(var n=this.regions,o=z(),a=0;a<n.length;a++){var r=n[a].name;r=i.hasOwnProperty(r)?i[r]:r,n[a].name=r,o.set(r,n[a]),this.addGeoCoord(r,n[a].center);var s=e[r];s&&n[a].transformTo(s.left,s.top,s.width,s.height)}this._regionsMap=o,this._rect=null,d(yI,function(t){t(this)},this)},transformTo:function(t,e,i,n){var o=this.getBoundingRect();(o=o.clone()).y=-o.y-o.height;var a=this._viewTransform;a.transform=o.calculateTransform(new jt(t,e,i,n)),a.decomposeTransform();var r=a.scale;r[1]=-r[1],a.updateTransform(),this._updateTransform()},getRegion:function(t){return this._regionsMap.get(t)},getRegionByCoord:function(t){for(var e=this.regions,i=0;i<e.length;i++)if(e[i].contain(t))return e[i]},addGeoCoord:function(t,e){this._nameCoordMap.set(t,e)},getGeoCoord:function(t){return this._nameCoordMap.get(t)},getBoundingRect:function(){if(this._rect)return this._rect;for(var t,e=this.regions,i=0;i<e.length;i++){var n=e[i].getBoundingRect();(t=t||n.clone()).union(n)}return this._rect=t||new jt(0,0,0,0)},dataToPoint:function(t){if(\"string\"==typeof t&&(t=this.getGeoCoord(t)),t)return bl.prototype.dataToPoint.call(this,t)},convertToPixel:v(Ml,\"dataToPoint\"),convertFromPixel:v(Ml,\"pointToData\")},u(Sl,bl);var xI={dimensions:Sl.prototype.dimensions,create:function(t,e){var i=[];t.eachComponent(\"geo\",function(t,n){var o=t.get(\"map\"),a=cr(o),r=new Sl(o+n,o,a&&a.geoJson,a&&a.specialAreas,t.get(\"nameMap\"));r.zoomLimit=t.get(\"scaleLimit\"),i.push(r),Tl(r,t),t.coordinateSystem=r,r.model=t,r.resize=Il,r.resize(t,e)}),t.eachSeries(function(t){if(\"geo\"===t.get(\"coordinateSystem\")){var e=t.get(\"geoIndex\")||0;t.coordinateSystem=i[e]}});var n={};return t.eachSeriesByType(\"map\",function(t){if(!t.getHostGeoModel()){var e=t.getMapType();n[e]=n[e]||[],n[e].push(t)}}),d(n,function(t,n){var a=cr(n),r=f(t,function(t){return t.get(\"nameMap\")}),s=new Sl(n,n,a&&a.geoJson,a&&a.specialAreas,o(r));s.zoomLimit=I.apply(null,f(t,function(t){return t.get(\"scaleLimit\")})),i.push(s),s.resize=Il,s.resize(t[0],e),d(t,function(t){t.coordinateSystem=s,Tl(s,t)})}),i},getFilledRegions:function(t,e,i){var n=(t||[]).slice();i=i||{};var o=cr(e),a=o&&o.geoJson;if(!a)return t;for(var r=z(),s=a.features,l=0;l<n.length;l++)r.set(n[l].name,n[l]);for(l=0;l<s.length;l++){var h=s[l].properties.name;r.get(h)||(i.hasOwnProperty(h)&&(h=i[h]),n.push({name:h}))}return n}};nr(\"geo\",xI);var _I=yw.extend({type:\"series.map\",dependencies:[\"geo\"],layoutMode:\"box\",needsDrawMap:!1,seriesGroup:[],init:function(t){this._fillOption(t,this.getMapType()),_I.superApply(this,\"init\",arguments),this.updateSelectedMap(t.data)},getInitialData:function(t){var e=xr([\"value\"],t.data||[]),i=new aS(e,this);return i.initData(t.data),i},mergeOption:function(t){this._fillOption(t,this.getMapType()),_I.superApply(this,\"mergeOption\",arguments),this.updateSelectedMap(this.option.data)},getHostGeoModel:function(){var t=this.option.geoIndex;return null!=t?this.dependentModels.geo[t]:null},getMapType:function(){return(this.getHostGeoModel()||this).option.map},_fillOption:function(t,e){t.data=xI.getFilledRegions(t.data,e,t.nameMap)},getRawValue:function(t){return this.getData().get(\"value\",t)},getRegionModel:function(t){var e=this.getData();return e.getItemModel(e.indexOfName(t))},formatTooltip:function(t){for(var e=this.getData(),i=Vi(this.getRawValue(t)),n=e.getName(t),o=this.seriesGroup,a=[],r=0;r<o.length;r++){var s=o[r].originalData.indexOfName(n);isNaN(o[r].originalData.get(\"value\",s))||a.push(Gi(o[r].name))}return a.join(\", \")+\"<br />\"+Gi(n+\" : \"+i)},getTooltipPosition:function(t){if(null!=t){var e=this.getData().getName(t),i=this.coordinateSystem,n=i.getRegion(e);return n&&i.dataToPoint(n.center)}},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},defaultOption:{zlevel:0,z:2,coordinateSystem:\"geo\",map:\"\",left:\"center\",top:\"center\",aspectScale:.75,showLegendSymbol:!0,dataRangeHoverLink:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,label:{normal:{show:!1,color:\"#000\"},emphasis:{show:!0,color:\"rgb(100,0,0)\"}},itemStyle:{normal:{borderWidth:.5,borderColor:\"#444\",areaColor:\"#eee\"},emphasis:{areaColor:\"rgba(255,215,0,0.8)\"}}}});u(_I,$M);var bI=\"\\0_ec_interaction_mutex\";ir({type:\"takeGlobalCursor\",event:\"globalCursorTaken\",update:\"update\"},function(){}),u(kl,fy);var wI={axisPointer:1,tooltip:1,brush:1};Ul.prototype={constructor:Ul,draw:function(t,e,i,n,o){var a=\"geo\"===t.mainType,r=t.getData&&t.getData();a&&e.eachComponent({mainType:\"series\",subType:\"map\"},function(e){r||e.getHostGeoModel()!==t||(r=e.getData())});var s=t.coordinateSystem,l=this.group,h=s.scale,u={position:s.position,scale:h};!l.childAt(0)||o?l.attr(u):wo(l,u,t),l.removeAll();var c=[\"itemStyle\",\"normal\"],f=[\"itemStyle\",\"emphasis\"],g=[\"label\",\"normal\"],p=[\"label\",\"emphasis\"],m=z();d(s.regions,function(e){var i=m.get(e.name)||m.set(e.name,new jy),n=new vb({shape:{paths:[]}});i.add(n);var o,s=(D=t.getRegionModel(e.name)||t).getModel(c),u=D.getModel(f),v=Hl(s),y=Hl(u),x=D.getModel(g),_=D.getModel(p);if(r){o=r.indexOfName(e.name);var b=r.getItemVisual(o,\"color\",!0);b&&(v.fill=b)}d(e.geometries,function(t){if(\"polygon\"===t.type){n.shape.paths.push(new ub({shape:{points:t.exterior}}));for(var e=0;e<(t.interiors?t.interiors.length:0);e++)n.shape.paths.push(new ub({shape:{points:t.interiors[e]}}))}}),n.setStyle(v),n.style.strokeNoScale=!0,n.culling=!0;var w=x.get(\"show\"),S=_.get(\"show\"),M=r&&isNaN(r.get(\"value\",o)),I=r&&r.getItemLayout(o);if(a||M&&(w||S)||I&&I.showLabel){var T,A=a?e.name:o;(!r||o>=0)&&(T=t);var C=new ib({position:e.center.slice(),scale:[1/h[0],1/h[1]],z2:10,silent:!0});co(C.style,C.hoverStyle={},x,_,{labelFetcher:T,labelDataIndex:A,defaultText:e.name,useInsideStyle:!1},{textAlign:\"center\",textVerticalAlign:\"middle\"}),i.add(C)}if(r)r.setItemGraphicEl(o,i);else{var D=t.getRegionModel(e.name);n.eventData={componentType:\"geo\",geoIndex:t.componentIndex,name:e.name,region:D&&D.option||{}}}(i.__regions||(i.__regions=[])).push(e),uo(i,y,{hoverSilentOnTouch:!!t.get(\"selectedMode\")}),l.add(i)}),this._updateController(t,e,i),Fl(this,t,l,i,n),Zl(t,l)},remove:function(){this.group.removeAll(),this._controller.dispose(),this._controllerHost={}},_updateController:function(t,e,i){function n(){var e={type:\"geoRoam\",componentType:l};return e[l+\"Id\"]=t.id,e}var o=t.coordinateSystem,r=this._controller,s=this._controllerHost;s.zoomLimit=t.get(\"scaleLimit\"),s.zoom=o.getZoom(),r.enable(t.get(\"roam\")||!1);var l=t.mainType;r.off(\"pan\").on(\"pan\",function(t,e){this._mouseDownFlag=!1,Bl(s,t,e),i.dispatchAction(a(n(),{dx:t,dy:e}))},this),r.off(\"zoom\").on(\"zoom\",function(t,e,o){if(this._mouseDownFlag=!1,Gl(s,t,e,o),i.dispatchAction(a(n(),{zoom:t,originX:e,originY:o})),this._updateGroup){var r=this.group,l=r.scale;r.traverse(function(t){\"text\"===t.type&&t.attr(\"scale\",[1/l[0],1/l[1]])})}},this),r.setPointerChecker(function(e,n,a){return o.getViewRectAfterRoam().contain(n,a)&&!Wl(e,i,t)})}},ur({type:\"map\",render:function(t,e,i,n){if(!n||\"mapToggleSelect\"!==n.type||n.from!==this.uid){var o=this.group;if(o.removeAll(),!t.getHostGeoModel()){if(n&&\"geoRoam\"===n.type&&\"series\"===n.componentType&&n.seriesId===t.id)(a=this._mapDraw)&&o.add(a.group);else if(t.needsDrawMap){var a=this._mapDraw||new Ul(i,!0);o.add(a.group),a.draw(t,e,i,this,n),this._mapDraw=a}else this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null;t.get(\"showLegendSymbol\")&&e.getComponent(\"legend\")&&this._renderSymbols(t,e,i)}}},remove:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null,this.group.removeAll()},dispose:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null},_renderSymbols:function(t,e,i){var n=t.originalData,o=this.group;n.each(\"value\",function(e,i){if(!isNaN(e)){var a=n.getItemLayout(i);if(a&&a.point){var r=a.point,s=a.offset,l=new nb({style:{fill:t.getData().getVisual(\"color\")},shape:{cx:r[0]+9*s,cy:r[1],r:3},silent:!0,z2:s?8:10});if(!s){var h=t.mainSeries.getData(),u=n.getName(i),c=h.indexOfName(u),d=n.getItemModel(i),f=d.getModel(\"label.normal\"),g=d.getModel(\"label.emphasis\"),p=h.getItemGraphicEl(c),m=T(t.getFormattedLabel(i,\"normal\"),u),v=T(t.getFormattedLabel(i,\"emphasis\"),m),y=function(){var t=fo({},g,{text:g.get(\"show\")?v:null},{isRectText:!0,useInsideStyle:!1},!0);l.style.extendFrom(t),l.__mapOriginalZ2=l.z2,l.z2+=1},x=function(){fo(l.style,f,{text:f.get(\"show\")?m:null,textPosition:f.getShallow(\"position\")||\"bottom\"},{isRectText:!0,useInsideStyle:!1}),null!=l.__mapOriginalZ2&&(l.z2=l.__mapOriginalZ2,l.__mapOriginalZ2=null)};p.on(\"mouseover\",y).on(\"mouseout\",x).on(\"emphasis\",y).on(\"normal\",x),x()}o.add(l)}}})}}),ir({type:\"geoRoam\",event:\"geoRoam\",update:\"updateLayout\"},function(t,e){var i=t.componentType||\"series\";e.eachComponent({mainType:i,query:t},function(e){var n=e.coordinateSystem;if(\"geo\"===n.type){var o=Xl(n,t,e.get(\"scaleLimit\"));e.setCenter&&e.setCenter(o.center),e.setZoom&&e.setZoom(o.zoom),\"series\"===i&&d(e.seriesGroup,function(t){t.setCenter(o.center),t.setZoom(o.zoom)})}})});or(function(t){var e={};t.eachSeriesByType(\"map\",function(i){var n=i.getMapType();if(!i.getHostGeoModel()&&!e[n]){var o={};d(i.seriesGroup,function(e){var i=e.coordinateSystem,n=e.originalData;e.get(\"showLegendSymbol\")&&t.getComponent(\"legend\")&&n.each(\"value\",function(t,e){var a=n.getName(e),r=i.getRegion(a);if(r&&!isNaN(t)){var s=o[a]||0,l=i.dataToPoint(r.center);o[a]=s+1,n.setItemLayout(e,{point:l,offset:s})}})});var a=i.getData();a.each(function(t){var e=a.getName(t),i=a.getItemLayout(t)||{};i.showLabel=!o[e],a.setItemLayout(t,i)}),e[n]=!0}})}),ar(function(t){t.eachSeriesByType(\"map\",function(t){var e=t.get(\"color\"),i=t.getModel(\"itemStyle.normal\"),n=i.get(\"areaColor\"),o=i.get(\"color\")||e[t.seriesIndex%e.length];t.getData().setVisual({areaColor:n,color:o})})}),er(Pw.PROCESSOR.STATISTIC,function(t){var e={};t.eachSeriesByType(\"map\",function(t){var i=t.getHostGeoModel(),n=i?\"o\"+i.id:\"i\"+t.getMapType();(e[n]=e[n]||[]).push(t)}),d(e,function(t,e){for(var i=jl(f(t,function(t){return t.getData()}),t[0].get(\"mapValueCalculation\")),n=0;n<t.length;n++)t[n].originalData=t[n].getData();for(n=0;n<t.length;n++)t[n].seriesGroup=t,t[n].needsDrawMap=0===n&&!t[n].getHostGeoModel(),t[n].setData(i.cloneShallow()),t[n].mainSeries=t[0]})}),tr(function(t){var e=[];d(t.series,function(t){t&&\"map\"===t.type&&(e.push(t),t.map=t.map||t.mapType,r(t,t.mapLocation))})}),QM(\"map\",[{type:\"mapToggleSelect\",event:\"mapselectchanged\",method:\"toggleSelected\"},{type:\"mapSelect\",event:\"mapselected\",method:\"select\"},{type:\"mapUnSelect\",event:\"mapunselected\",method:\"unSelect\"}]);var SI=d,MI=\"\\0__link_datas\",II=\"\\0__link_mainData\",TI=function(t,e){this.name=t||\"\",this.depth=0,this.height=0,this.parentNode=null,this.dataIndex=-1,this.children=[],this.viewChildren=[],this.hostTree=e};TI.prototype={constructor:TI,isRemoved:function(){return this.dataIndex<0},eachNode:function(t,e,i){\"function\"==typeof t&&(i=e,e=t,t=null),_(t=t||{})&&(t={order:t});var n,o=t.order||\"preorder\",a=this[t.attr||\"children\"];\"preorder\"===o&&(n=e.call(i,this));for(var r=0;!n&&r<a.length;r++)a[r].eachNode(t,e,i);\"postorder\"===o&&e.call(i,this)},updateDepthAndHeight:function(t){var e=0;this.depth=t;for(var i=0;i<this.children.length;i++){var n=this.children[i];n.updateDepthAndHeight(t+1),n.height>e&&(e=n.height)}this.height=e+1},getNodeById:function(t){if(this.getId()===t)return this;for(var e=0,i=this.children,n=i.length;e<n;e++){var o=i[e].getNodeById(t);if(o)return o}},contains:function(t){if(t===this)return!0;for(var e=0,i=this.children,n=i.length;e<n;e++){var o=i[e].contains(t);if(o)return o}},getAncestors:function(t){for(var e=[],i=t?this:this.parentNode;i;)e.push(i),i=i.parentNode;return e.reverse(),e},getValue:function(t){var e=this.hostTree.data;return e.get(e.getDimension(t||\"value\"),this.dataIndex)},setLayout:function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemLayout(this.dataIndex,t,e)},getLayout:function(){return this.hostTree.data.getItemLayout(this.dataIndex)},getModel:function(t){if(!(this.dataIndex<0)){var e,i=this.hostTree,n=i.data.getItemModel(this.dataIndex),o=this.getLevelModel();return o||0!==this.children.length&&(0===this.children.length||!1!==this.isExpand)||(e=this.getLeavesModel()),n.getModel(t,(o||e||i.hostModel).getModel(t))}},getLevelModel:function(){return(this.hostTree.levelModels||[])[this.depth]},getLeavesModel:function(){return this.hostTree.leavesModel},setVisual:function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,t,e)},getVisual:function(t,e){return this.hostTree.data.getItemVisual(this.dataIndex,t,e)},getRawIndex:function(){return this.hostTree.data.getRawIndex(this.dataIndex)},getId:function(){return this.hostTree.data.getId(this.dataIndex)}},ih.prototype={constructor:ih,type:\"tree\",eachNode:function(t,e,i){this.root.eachNode(t,e,i)},getNodeByDataIndex:function(t){var e=this.data.getRawIndex(t);return this._nodes[e]},getNodeByName:function(t){return this.root.getNodeByName(t)},update:function(){for(var t=this.data,e=this._nodes,i=0,n=e.length;i<n;i++)e[i].dataIndex=-1;for(var i=0,n=t.count();i<n;i++)e[t.getRawIndex(i)].dataIndex=i},clearLayouts:function(){this.data.clearItemLayouts()}},ih.createTree=function(t,e,i){function n(t,e){var i=t.value;r=Math.max(r,y(i)?i.length:1),a.push(t);var s=new TI(t.name,o);e?nh(s,e):o.root=s,o._nodes.push(s);var l=t.children;if(l)for(var h=0;h<l.length;h++)n(l[h],s)}var o=new ih(e,i.levels,i.leaves),a=[],r=1;n(t),o.root.updateDepthAndHeight(0);var s=xr([{name:\"value\"}],a,{dimCount:r}),l=new aS(s,e);return l.initData(a),ql({mainData:l,struct:o,structAttr:\"tree\"}),o.update(),o},yw.extend({type:\"series.tree\",layoutInfo:null,layoutMode:\"box\",getInitialData:function(t){var e={name:t.name,children:t.data},i=t.leaves||{},n={};n.leaves=i;var o=ih.createTree(e,this,n),a=0;o.eachNode(\"preorder\",function(t){t.depth>a&&(a=t.depth)});var r=t.expandAndCollapse&&t.initialTreeDepth>=0?t.initialTreeDepth:a;return o.root.eachNode(\"preorder\",function(t){var e=t.hostTree.data.getRawDataItem(t.dataIndex);t.isExpand=e&&null!=e.collapsed?!e.collapsed:t.depth<=r}),o.data},formatTooltip:function(t){for(var e=this.getData().tree,i=e.root.children[0],n=e.getNodeByDataIndex(t),o=n.getValue(),a=n.name;n&&n!==i;)a=n.parentNode.name+\".\"+a,n=n.parentNode;return Gi(a+(isNaN(o)||null==o?\"\":\" : \"+o))},defaultOption:{zlevel:0,z:2,left:\"12%\",top:\"12%\",right:\"12%\",bottom:\"12%\",layout:\"orthogonal\",orient:\"horizontal\",symbol:\"emptyCircle\",symbolSize:7,expandAndCollapse:!0,initialTreeDepth:2,lineStyle:{normal:{color:\"#ccc\",width:1.5,curveness:.5}},itemStyle:{normal:{color:\"lightsteelblue\",borderColor:\"#c23531\",borderWidth:1.5}},label:{normal:{show:!0,color:\"#555\"}},leaves:{label:{normal:{show:!0}}},animationEasing:\"linear\",animationDuration:700,animationDurationUpdate:1e3}}),ur({type:\"tree\",init:function(t,e){this._oldTree,this._mainGroup=new jy,this.group.add(this._mainGroup)},render:function(t,e,i,n){var o=t.getData(),a=t.layoutInfo,r=this._mainGroup,s=t.get(\"layout\");\"radial\"===s?r.attr(\"position\",[a.x+a.width/2,a.y+a.height/2]):r.attr(\"position\",[a.x,a.y]);var l=this._data,h={expandAndCollapse:t.get(\"expandAndCollapse\"),layout:s,orient:t.get(\"orient\"),curvature:t.get(\"lineStyle.normal.curveness\"),symbolRotate:t.get(\"symbolRotate\"),symbolOffset:t.get(\"symbolOffset\"),hoverAnimation:t.get(\"hoverAnimation\"),useNameLabel:!0,fadeIn:!0};o.diff(l).add(function(e){vh(o,e)&&xh(o,e,null,r,t,h)}).update(function(e,i){var n=l.getItemGraphicEl(i);vh(o,e)?xh(o,e,n,r,t,h):n&&_h(o,e,n,r,t,h)}).remove(function(e){var i=l.getItemGraphicEl(e);_h(o,e,i,r,t,h)}).execute(),!0===h.expandAndCollapse&&o.eachItemGraphicEl(function(e,n){e.off(\"click\").on(\"click\",function(){i.dispatchAction({type:\"treeExpandAndCollapse\",seriesId:t.id,dataIndex:n})})}),this._data=o},dispose:function(){},remove:function(){this._mainGroup.removeAll(),this._data=null}}),ir({type:\"treeExpandAndCollapse\",event:\"treeExpandAndCollapse\",update:\"update\"},function(t,e){e.eachComponent({mainType:\"series\",subType:\"tree\",query:t},function(e){var i=t.dataIndex,n=e.getData().tree.getNodeByDataIndex(i);n.isExpand=!n.isExpand})});var AI=function(t,e){var i=hh(t,e);t.layoutInfo=i;var n=t.get(\"layout\"),o=0,a=0,r=null;\"radial\"===n?(o=2*Math.PI,a=Math.min(i.height,i.width)/2,r=sh(function(t,e){return(t.parentNode===e.parentNode?1:2)/t.depth})):(o=i.width,a=i.height,r=sh());var s=t.getData().tree.root,l=s.children[0];oh(s),wh(l,ah,r),s.hierNode.modifier=-l.hierNode.prelim,Sh(l,rh);var h=l,u=l,c=l;Sh(l,function(t){var e=t.getLayout().x;e<h.getLayout().x&&(h=t),e>u.getLayout().x&&(u=t),t.depth>c.depth&&(c=t)});var d=h===u?1:r(h,u)/2,f=d-h.getLayout().x,g=0,p=0,m=0,v=0;\"radial\"===n?(g=o/(u.getLayout().x+d+f),p=a/(c.depth-1||1),Sh(l,function(t){m=(t.getLayout().x+f)*g,v=(t.depth-1)*p;var e=lh(m,v);t.setLayout({x:e.x,y:e.y,rawX:m,rawY:v},!0)})):\"horizontal\"===t.get(\"orient\")?(p=a/(u.getLayout().x+d+f),g=o/(c.depth-1||1),Sh(l,function(t){v=(t.getLayout().x+f)*p,m=(t.depth-1)*g,t.setLayout({x:m,y:v},!0)})):(g=o/(u.getLayout().x+d+f),p=a/(c.depth-1||1),Sh(l,function(t){m=(t.getLayout().x+f)*g,v=(t.depth-1)*p,t.setLayout({x:m,y:v},!0)}))};ar(v(cM,\"tree\",\"circle\",null)),or(function(t,e){t.eachSeriesByType(\"tree\",function(t){AI(t,e)})}),or(function(t,e){t.eachSeriesByType(\"tree\",function(t){AI(t,e)})}),yw.extend({type:\"series.treemap\",layoutMode:\"box\",dependencies:[\"grid\",\"polar\"],_viewRoot:null,defaultOption:{progressive:0,hoverLayerThreshold:1/0,left:\"center\",top:\"middle\",right:null,bottom:null,width:\"80%\",height:\"80%\",sort:!0,clipWindow:\"origin\",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:\"▶\",zoomToNodeRatio:.1024,roam:!0,nodeClick:\"zoomToNode\",animation:!0,animationDurationUpdate:900,animationEasing:\"quinticInOut\",breadcrumb:{show:!0,height:22,left:\"center\",top:\"bottom\",emptyItemWidth:25,itemStyle:{normal:{color:\"rgba(0,0,0,0.7)\",borderColor:\"rgba(255,255,255,0.7)\",borderWidth:1,shadowColor:\"rgba(150,150,150,1)\",shadowBlur:3,shadowOffsetX:0,shadowOffsetY:0,textStyle:{color:\"#fff\"}},emphasis:{textStyle:{}}}},label:{normal:{show:!0,distance:0,padding:5,position:\"inside\",color:\"#fff\",ellipsis:!0}},upperLabel:{normal:{show:!1,position:[0,\"50%\"],height:20,color:\"#fff\",ellipsis:!0,verticalAlign:\"middle\"},emphasis:{show:!0,position:[0,\"50%\"],color:\"#fff\",ellipsis:!0,verticalAlign:\"middle\"}},itemStyle:{normal:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:\"#fff\",borderColorSaturation:null},emphasis:{}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:\"index\",visibleMin:10,childrenVisibleMin:null,levels:[]},getInitialData:function(t,e){var i={name:t.name,children:t.data};Ch(i);var n=t.levels||[];n=t.levels=Dh(n,e);var o={};return o.levels=n,ih.createTree(i,this,o).data},optionUpdated:function(){this.resetViewRoot()},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=Vi(y(i)?i[0]:i);return Gi(e.getName(t)+\": \"+n)},getDataParams:function(t){var e=yw.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(t);return e.treePathInfo=Ah(i,this),e},setLayoutInfo:function(t){this.layoutInfo=this.layoutInfo||{},a(this.layoutInfo,t)},mapIdToIndex:function(t){var e=this._idIndexMap;e||(e=this._idIndexMap=z(),this._idIndexMapCount=0);var i=e.get(t);return null==i&&e.set(t,i=this._idIndexMapCount++),i},getViewRoot:function(){return this._viewRoot},resetViewRoot:function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)}});var CI=5;Lh.prototype={constructor:Lh,render:function(t,e,i,n){var o=t.getModel(\"breadcrumb\"),a=this.group;if(a.removeAll(),o.get(\"show\")&&i){var r=o.getModel(\"itemStyle.normal\"),s=r.getModel(\"textStyle\"),l={pos:{left:o.get(\"left\"),right:o.get(\"right\"),top:o.get(\"top\"),bottom:o.get(\"bottom\")},box:{width:e.getWidth(),height:e.getHeight()},emptyItemWidth:o.get(\"emptyItemWidth\"),totalWidth:0,renderList:[]};this._prepare(i,l,s),this._renderContent(t,l,r,s,n),Jo(a,l.pos,l.box)}},_prepare:function(t,e,i){for(var n=t;n;n=n.parentNode){var o=n.getModel().get(\"name\"),a=i.getTextRect(o),r=Math.max(a.width+16,e.emptyItemWidth);e.totalWidth+=r+8,e.renderList.push({node:n,text:o,width:r})}},_renderContent:function(t,e,i,n,o){for(var a=0,s=e.emptyItemWidth,l=t.get(\"breadcrumb.height\"),h=$o(e.pos,e.box),u=e.totalWidth,c=e.renderList,d=c.length-1;d>=0;d--){var f=c[d],g=f.node,p=f.width,m=f.text;u>h.width&&(u-=p-s,p=s,m=null);var y=new ub({shape:{points:kh(a,0,p,l,d===c.length-1,0===d)},style:r(i.getItemStyle(),{lineJoin:\"bevel\",text:m,textFill:n.getTextColor(),textFont:n.getFont()}),z:10,onclick:v(o,g)});this.group.add(y),Ph(y,t,g),a+=p+8}},remove:function(){this.group.removeAll()}};var DI=m,LI=jy,kI=db,PI=d,OI=[\"label\",\"normal\"],zI=[\"label\",\"emphasis\"],NI=[\"upperLabel\",\"normal\"],EI=[\"upperLabel\",\"emphasis\"],RI=10,VI=1,BI=2,GI=$x([[\"fill\",\"color\"],[\"stroke\",\"strokeColor\"],[\"lineWidth\",\"strokeWidth\"],[\"shadowBlur\"],[\"shadowOffsetX\"],[\"shadowOffsetY\"],[\"shadowColor\"]]),WI=function(t){var e=GI(t);return e.stroke=e.fill=e.lineWidth=null,e};ur({type:\"treemap\",init:function(t,e){this._containerGroup,this._storage={nodeGroup:[],background:[],content:[]},this._oldTree,this._breadcrumb,this._controller,this._state=\"ready\"},render:function(t,e,i,n){if(!(l(e.findComponents({mainType:\"series\",subType:\"treemap\",query:n}),t)<0)){this.seriesModel=t,this.api=i,this.ecModel=e;var o=Mh(n,t),a=n&&n.type,r=t.layoutInfo,s=!this._oldTree,h=this._storage,u=\"treemapRootToNode\"===a&&o&&h?{rootNodeGroup:h.nodeGroup[o.node.getRawIndex()],direction:n.direction}:null,c=this._giveContainerGroup(r),d=this._doRender(c,t,u);s||a&&\"treemapZoomToNode\"!==a&&\"treemapRootToNode\"!==a?d.renderFinally():this._doAnimation(c,d,t,u),this._resetController(i),this._renderBreadcrumb(t,i,o)}},_giveContainerGroup:function(t){var e=this._containerGroup;return e||(e=this._containerGroup=new LI,this._initEvents(e),this.group.add(e)),e.attr(\"position\",[t.x,t.y]),e},_doRender:function(t,e,i){function n(t,e,i,o,a){function r(t){return t.getId()}function s(r,s){var l=null!=r?t[r]:null,h=null!=s?e[s]:null,c=u(l,h,i,a);c&&n(l&&l.viewChildren||[],h&&h.viewChildren||[],c,o,a+1)}o?(e=t,PI(t,function(t,e){!t.isRemoved()&&s(e,e)})):new fr(e,t,r,r).add(s).update(s).remove(v(s,null)).execute()}var o=e.getData().tree,a=this._oldTree,r={nodeGroup:[],background:[],content:[]},s={nodeGroup:[],background:[],content:[]},l=this._storage,h=[],u=v(zh,e,s,l,i,r,h);n(o.root?[o.root]:[],a&&a.root?[a.root]:[],t,o===a||!a,0);var c=function(t){var e={nodeGroup:[],background:[],content:[]};return t&&PI(t,function(t,i){var n=e[i];PI(t,function(t){t&&(n.push(t),t.__tmWillDelete=1)})}),e}(l);return this._oldTree=o,this._storage=s,{lastsForAnimation:r,willDeleteEls:c,renderFinally:function(){PI(c,function(t){PI(t,function(t){t.parent&&t.parent.remove(t)})}),PI(h,function(t){t.invisible=!0,t.dirty()})}}},_doAnimation:function(t,e,i,n){if(i.get(\"animation\")){var o=i.get(\"animationDurationUpdate\"),r=i.get(\"animationEasing\"),s=Oh();PI(e.willDeleteEls,function(t,e){PI(t,function(t,i){if(!t.invisible){var a,l=t.parent;if(n&&\"drillDown\"===n.direction)a=l===n.rootNodeGroup?{shape:{x:0,y:0,width:l.__tmNodeWidth,height:l.__tmNodeHeight},style:{opacity:0}}:{style:{opacity:0}};else{var h=0,u=0;l.__tmWillDelete||(h=l.__tmNodeWidth/2,u=l.__tmNodeHeight/2),a=\"nodeGroup\"===e?{position:[h,u],style:{opacity:0}}:{shape:{x:h,y:u,width:0,height:0},style:{opacity:0}}}a&&s.add(t,a,o,r)}})}),PI(this._storage,function(t,i){PI(t,function(t,n){var l=e.lastsForAnimation[i][n],h={};l&&(\"nodeGroup\"===i?l.old&&(h.position=t.position.slice(),t.attr(\"position\",l.old)):(l.old&&(h.shape=a({},t.shape),t.setShape(l.old)),l.fadein?(t.setStyle(\"opacity\",0),h.style={opacity:1}):1!==t.style.opacity&&(h.style={opacity:1})),s.add(t,h,o,r))})},this),this._state=\"animating\",s.done(DI(function(){this._state=\"ready\",e.renderFinally()},this)).start()}},_resetController:function(t){var e=this._controller;e||((e=this._controller=new kl(t.getZr())).enable(this.seriesModel.get(\"roam\")),e.on(\"pan\",DI(this._onPan,this)),e.on(\"zoom\",DI(this._onZoom,this)));var i=new jt(0,0,t.getWidth(),t.getHeight());e.setPointerChecker(function(t,e,n){return i.contain(e,n)})},_clearController:function(){var t=this._controller;t&&(t.dispose(),t=null)},_onPan:function(t,e){if(\"animating\"!==this._state&&(Math.abs(t)>3||Math.abs(e)>3)){var i=this.seriesModel.getData().tree.root;if(!i)return;var n=i.getLayout();if(!n)return;this.api.dispatchAction({type:\"treemapMove\",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:n.x+t,y:n.y+e,width:n.width,height:n.height}})}},_onZoom:function(t,e,i){if(\"animating\"!==this._state){var n=this.seriesModel.getData().tree.root;if(!n)return;var o=n.getLayout();if(!o)return;var a=new jt(o.x,o.y,o.width,o.height),r=this.seriesModel.layoutInfo;e-=r.x,i-=r.y;var s=ot();lt(s,s,[-e,-i]),ut(s,s,[t,t]),lt(s,s,[e,i]),a.applyTransform(s),this.api.dispatchAction({type:\"treemapRender\",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:a.x,y:a.y,width:a.width,height:a.height}})}},_initEvents:function(t){t.on(\"click\",function(t){if(\"ready\"===this._state){var e=this.seriesModel.get(\"nodeClick\",!0);if(e){var i=this.findTarget(t.offsetX,t.offsetY);if(i){var n=i.node;if(n.getLayout().isLeafRoot)this._rootToNode(i);else if(\"zoomToNode\"===e)this._zoomToNode(i);else if(\"link\"===e){var o=n.hostTree.data.getItemModel(n.dataIndex),a=o.get(\"link\",!0),r=o.get(\"target\",!0)||\"blank\";a&&window.open(a,r)}}}}},this)},_renderBreadcrumb:function(t,e,i){i||(i=null!=t.get(\"leafDepth\",!0)?{node:t.getViewRoot()}:this.findTarget(e.getWidth()/2,e.getHeight()/2))||(i={node:t.getData().tree.root}),(this._breadcrumb||(this._breadcrumb=new Lh(this.group))).render(t,e,i.node,DI(function(e){\"animating\"!==this._state&&(Th(t.getViewRoot(),e)?this._rootToNode({node:e}):this._zoomToNode({node:e}))},this))},remove:function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage={nodeGroup:[],background:[],content:[]},this._state=\"ready\",this._breadcrumb&&this._breadcrumb.remove()},dispose:function(){this._clearController()},_zoomToNode:function(t){this.api.dispatchAction({type:\"treemapZoomToNode\",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},_rootToNode:function(t){this.api.dispatchAction({type:\"treemapRootToNode\",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},findTarget:function(t,e){var i;return this.seriesModel.getViewRoot().eachNode({attr:\"viewChildren\",order:\"preorder\"},function(n){var o=this._storage.background[n.getRawIndex()];if(o){var a=o.transformCoordToLocal(t,e),r=o.shape;if(!(r.x<=a[0]&&a[0]<=r.x+r.width&&r.y<=a[1]&&a[1]<=r.y+r.height))return!1;i={node:n,offsetX:a[0],offsetY:a[1]}}},this),i}});for(var HI=[\"treemapZoomToNode\",\"treemapRender\",\"treemapMove\"],FI=0;FI<HI.length;FI++)ir({type:HI[FI],update:\"updateView\"},function(){});ir({type:\"treemapRootToNode\",update:\"updateView\"},function(t,e){e.eachComponent({mainType:\"series\",subType:\"treemap\",query:t},function(e,i){var n=Mh(t,e);if(n){var o=e.getViewRoot();o&&(t.direction=Th(o,n.node)?\"rollUp\":\"drillDown\"),e.resetViewRoot(n.node)}})});var ZI=d,UI=b,XI=-1,jI=function(t){var e=t.mappingMethod,n=t.type,o=this.option=i(t);this.type=n,this.mappingMethod=e,this._normalizeData=YI[e];var a=qI[n];this.applyVisual=a.applyVisual,this.getColorMapper=a.getColorMapper,this._doMap=a._doMap[e],\"piecewise\"===e?(Vh(o),Eh(o)):\"category\"===e?o.categories?Rh(o):Vh(o,!0):(L(\"linear\"!==e||o.dataExtent),Vh(o))};jI.prototype={constructor:jI,mapValueToVisual:function(t){var e=this._normalizeData(t);return this._doMap(e,t)},getNormalizer:function(){return m(this._normalizeData,this)}};var qI=jI.visualHandlers={color:{applyVisual:Wh(\"color\"),getColorMapper:function(){var t=this.option;return m(\"category\"===t.mappingMethod?function(t,e){return!e&&(t=this._normalizeData(t)),Hh.call(this,t)}:function(e,i,n){var o=!!n;return!i&&(e=this._normalizeData(e)),n=Dt(e,t.parsedVisual,n),o?n:Ot(n,\"rgba\")},this)},_doMap:{linear:function(t){return Ot(Dt(t,this.option.parsedVisual),\"rgba\")},category:Hh,piecewise:function(t,e){var i=Uh.call(this,e);return null==i&&(i=Ot(Dt(t,this.option.parsedVisual),\"rgba\")),i},fixed:Fh}},colorHue:Bh(function(t,e){return kt(t,e)}),colorSaturation:Bh(function(t,e){return kt(t,null,e)}),colorLightness:Bh(function(t,e){return kt(t,null,null,e)}),colorAlpha:Bh(function(t,e){return Pt(t,e)}),opacity:{applyVisual:Wh(\"opacity\"),_doMap:Zh([0,1])},symbol:{applyVisual:function(t,e,i){var n=this.mapValueToVisual(t);if(_(n))i(\"symbol\",n);else if(UI(n))for(var o in n)n.hasOwnProperty(o)&&i(o,n[o])},_doMap:{linear:Gh,category:Hh,piecewise:function(t,e){var i=Uh.call(this,e);return null==i&&(i=Gh.call(this,t)),i},fixed:Fh}},symbolSize:{applyVisual:Wh(\"symbolSize\"),_doMap:Zh([0,1])}},YI={linear:function(t){return wi(t,this.option.dataExtent,[0,1],!0)},piecewise:function(t){var e=this.option.pieceList,i=jI.findPieceIndex(t,e,!0);if(null!=i)return wi(i,[0,e.length-1],[0,1],!0)},category:function(t){var e=this.option.categories?this.option.categoryMap[t]:t;return null==e?XI:e},fixed:N};jI.listVisualTypes=function(){var t=[];return d(qI,function(e,i){t.push(i)}),t},jI.addVisualHandler=function(t,e){qI[t]=e},jI.isValidType=function(t){return qI.hasOwnProperty(t)},jI.eachVisual=function(t,e,i){b(t)?d(t,e,i):e.call(i,t)},jI.mapVisual=function(t,e,i){var n,o=y(t)?[]:b(t)?{}:(n=!0,null);return jI.eachVisual(t,function(t,a){var r=e.call(i,t,a);n?o=r:o[a]=r}),o},jI.retrieveVisuals=function(t){var e,i={};return t&&ZI(qI,function(n,o){t.hasOwnProperty(o)&&(i[o]=t[o],e=!0)}),e?i:null},jI.prepareVisualTypes=function(t){if(UI(t)){var e=[];ZI(t,function(t,i){e.push(i)}),t=e}else{if(!y(t))return[];t=t.slice()}return t.sort(function(t,e){return\"color\"===e&&\"color\"!==t&&0===t.indexOf(\"color\")?1:-1}),t},jI.dependsOn=function(t,e){return\"color\"===e?!(!t||0!==t.indexOf(e)):t===e},jI.findPieceIndex=function(t,e,i){function n(e,i){var n=Math.abs(e-t);n<a&&(a=n,o=i)}for(var o,a=1/0,r=0,s=e.length;r<s;r++){var l=e[r].value;if(null!=l){if(l===t||\"string\"==typeof l&&l===t+\"\")return r;i&&n(l,r)}}for(var r=0,s=e.length;r<s;r++){var h=e[r],u=h.interval,c=h.close;if(u){if(u[0]===-1/0){if(jh(c[1],t,u[1]))return r}else if(u[1]===1/0){if(jh(c[0],u[0],t))return r}else if(jh(c[0],u[0],t)&&jh(c[1],t,u[1]))return r;i&&n(u[0],r),i&&n(u[1],r)}}if(i)return t===1/0?e.length-1:t===-1/0?0:o};var $I=y,KI=\"itemStyle.normal\",JI=Math.max,QI=Math.min,tT=I,eT=d,iT=[\"itemStyle\",\"normal\",\"borderWidth\"],nT=[\"itemStyle\",\"normal\",\"gapWidth\"],oT=[\"upperLabel\",\"normal\",\"show\"],aT=[\"upperLabel\",\"normal\",\"height\"];ar(function(t,e,i){var n={mainType:\"series\",subType:\"treemap\",query:i};t.eachComponent(n,function(t){var e=t.getData().tree,i=e.root,n=t.getModel(KI);i.isRemoved()||qh(i,{},f(e.levelModels,function(t){return t?t.get(KI):null}),n,t.getViewRoot().getAncestors(),t)})}),or(function(t,e,i){var n={mainType:\"series\",subType:\"treemap\",query:i};t.eachComponent(n,function(t){var n=e.getWidth(),o=e.getHeight(),r=t.option,s=Ko(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),l=r.size||[],h=Si(tT(s.width,l[0]),n),u=Si(tT(s.height,l[1]),o),c=i&&i.type,d=Mh(i,t),f=\"treemapRender\"===c||\"treemapMove\"===c?i.rootRect:null,g=t.getViewRoot(),p=Ih(g);if(\"treemapMove\"!==c){var m=\"treemapZoomToNode\"===c?hu(t,d,g,h,u):f?[f.width,f.height]:[h,u],v=r.sort;v&&\"asc\"!==v&&\"desc\"!==v&&(v=\"desc\");var y={squareRatio:r.squareRatio,sort:v,leafDepth:r.leafDepth};g.hostTree.clearLayouts(),x={x:0,y:0,width:m[0],height:m[1],area:m[0]*m[1]},g.setLayout(x),iu(g,y,!1,0);var x=g.getLayout();eT(p,function(t,e){var i=(p[e+1]||g).getValue();t.setLayout(a({dataExtent:[i,i],borderWidth:0,upperHeight:0},x))})}var _=t.getData().tree.root;_.setLayout(uu(s,f,d),!0),t.setLayoutInfo(s),cu(_,new jt(-s.x,-s.y,n,o),p,g,0)})});var rT=function(t){this._directed=t||!1,this.nodes=[],this.edges=[],this._nodesMap={},this._edgesMap={},this.data,this.edgeData},sT=rT.prototype;sT.type=\"graph\",sT.isDirected=function(){return this._directed},sT.addNode=function(t,e){t=t||\"\"+e;var i=this._nodesMap;if(!i[fu(t)]){var n=new gu(t,e);return n.hostGraph=this,this.nodes.push(n),i[fu(t)]=n,n}},sT.getNodeByIndex=function(t){var e=this.data.getRawIndex(t);return this.nodes[e]},sT.getNodeById=function(t){return this._nodesMap[fu(t)]},sT.addEdge=function(t,e,i){var n=this._nodesMap,o=this._edgesMap;if(\"number\"==typeof t&&(t=this.nodes[t]),\"number\"==typeof e&&(e=this.nodes[e]),t instanceof gu||(t=n[fu(t)]),e instanceof gu||(e=n[fu(e)]),t&&e){var a=t.id+\"-\"+e.id;if(!o[a]){var r=new pu(t,e,i);return r.hostGraph=this,this._directed&&(t.outEdges.push(r),e.inEdges.push(r)),t.edges.push(r),t!==e&&e.edges.push(r),this.edges.push(r),o[a]=r,r}}},sT.getEdgeByIndex=function(t){var e=this.edgeData.getRawIndex(t);return this.edges[e]},sT.getEdge=function(t,e){t instanceof gu&&(t=t.id),e instanceof gu&&(e=e.id);var i=this._edgesMap;return this._directed?i[t+\"-\"+e]:i[t+\"-\"+e]||i[e+\"-\"+t]},sT.eachNode=function(t,e){for(var i=this.nodes,n=i.length,o=0;o<n;o++)i[o].dataIndex>=0&&t.call(e,i[o],o)},sT.eachEdge=function(t,e){for(var i=this.edges,n=i.length,o=0;o<n;o++)i[o].dataIndex>=0&&i[o].node1.dataIndex>=0&&i[o].node2.dataIndex>=0&&t.call(e,i[o],o)},sT.breadthFirstTraverse=function(t,e,i,n){if(e instanceof gu||(e=this._nodesMap[fu(e)]),e){for(var o=\"out\"===i?\"outEdges\":\"in\"===i?\"inEdges\":\"edges\",a=0;a<this.nodes.length;a++)this.nodes[a].__visited=!1;if(!t.call(n,e,null))for(var r=[e];r.length;)for(var s=r.shift(),l=s[o],a=0;a<l.length;a++){var h=l[a],u=h.node1===s?h.node2:h.node1;if(!u.__visited){if(t.call(n,u,s))return;r.push(u),u.__visited=!0}}}},sT.update=function(){for(var t=this.data,e=this.edgeData,i=this.nodes,n=this.edges,o=0,a=i.length;o<a;o++)i[o].dataIndex=-1;for(var o=0,a=t.count();o<a;o++)i[t.getRawIndex(o)].dataIndex=o;e.filterSelf(function(t){var i=n[e.getRawIndex(t)];return i.node1.dataIndex>=0&&i.node2.dataIndex>=0});for(var o=0,a=n.length;o<a;o++)n[o].dataIndex=-1;for(var o=0,a=e.count();o<a;o++)n[e.getRawIndex(o)].dataIndex=o},sT.clone=function(){for(var t=new rT(this._directed),e=this.nodes,i=this.edges,n=0;n<e.length;n++)t.addNode(e[n].id,e[n].dataIndex);for(n=0;n<i.length;n++){var o=i[n];t.addEdge(o.node1.id,o.node2.id,o.dataIndex)}return t},gu.prototype={constructor:gu,degree:function(){return this.edges.length},inDegree:function(){return this.inEdges.length},outDegree:function(){return this.outEdges.length},getModel:function(t){if(!(this.dataIndex<0))return this.hostGraph.data.getItemModel(this.dataIndex).getModel(t)}},pu.prototype.getModel=function(t){if(!(this.dataIndex<0))return this.hostGraph.edgeData.getItemModel(this.dataIndex).getModel(t)};var lT=function(t,e){return{getValue:function(i){var n=this[t][e];return n.get(n.getDimension(i||\"value\"),this.dataIndex)},setVisual:function(i,n){this.dataIndex>=0&&this[t][e].setItemVisual(this.dataIndex,i,n)},getVisual:function(i,n){return this[t][e].getItemVisual(this.dataIndex,i,n)},setLayout:function(i,n){this.dataIndex>=0&&this[t][e].setItemLayout(this.dataIndex,i,n)},getLayout:function(){return this[t][e].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[t][e].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[t][e].getRawIndex(this.dataIndex)}}};u(gu,lT(\"hostGraph\",\"data\")),u(pu,lT(\"hostGraph\",\"edgeData\")),rT.Node=gu,rT.Edge=pu;var hT=function(t,e,i,n,o){for(var a=new rT(n),r=0;r<t.length;r++)a.addNode(I(t[r].id,t[r].name,r),r);for(var s=[],l=[],h=0,r=0;r<e.length;r++){var u=e[r],c=u.source,d=u.target;a.addEdge(c,d,h)&&(l.push(u),s.push(I(u.id,c+\" > \"+d)),h++)}var f,g=i.get(\"coordinateSystem\");if(\"cartesian2d\"===g||\"polar\"===g)f=Sr(t,i,i.ecModel);else{var p=ua.get(g),m=xr((p&&\"view\"!==p.type?p.dimensions||[]:[]).concat([\"value\"]),t);(f=new aS(m,i)).initData(t)}var v=new aS([\"value\"],i);return v.initData(l,s),o&&o(f,v),ql({mainData:f,struct:a,structAttr:\"graph\",datas:{node:f,edge:v},datasAttr:{node:\"data\",edge:\"edgeData\"}}),a.update(),a},uT=hr({type:\"series.graph\",init:function(t){uT.superApply(this,\"init\",arguments),this.legendDataProvider=function(){return this._categoriesData},this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeOption:function(t){uT.superApply(this,\"mergeOption\",arguments),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeDefaultAndTheme:function(t){uT.superApply(this,\"mergeDefaultAndTheme\",arguments),zo(t.edgeLabel,[\"show\"])},getInitialData:function(t,e){var i=t.edges||t.links||[],n=t.data||t.nodes||[],o=this;if(n&&i)return hT(n,i,this,!0,function(t,i){function n(t){return(t=this.parsePath(t))&&\"label\"===t[0]?r:this.parentModel}t.wrapMethod(\"getItemModel\",function(t){var e=o._categoriesModels[t.getShallow(\"category\")];return e&&(e.parentModel=t.parentModel,t.parentModel=e),t});var a=o.getModel(\"edgeLabel\"),r=new Lo({label:a.option},a.parentModel,e);i.wrapMethod(\"getItemModel\",function(t){return t.customizeGetParent(n),t})}).data},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},getCategoriesData:function(){return this._categoriesData},formatTooltip:function(t,e,i){if(\"edge\"===i){var n=this.getData(),o=this.getDataParams(t,i),a=n.graph.getEdgeByIndex(t),r=n.getName(a.node1.dataIndex),s=n.getName(a.node2.dataIndex),l=[];return null!=r&&l.push(r),null!=s&&l.push(s),l=Gi(l.join(\" > \")),o.value&&(l+=\" : \"+Gi(o.value)),l}return uT.superApply(this,\"formatTooltip\",arguments)},_updateCategoriesData:function(){var t=f(this.option.categories||[],function(t){return null!=t.value?t:a({value:0},t)}),e=new aS([\"value\"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray(function(t){return e.getItemModel(t,!0)})},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},isAnimationEnabled:function(){return uT.superCall(this,\"isAnimationEnabled\")&&!(\"force\"===this.get(\"layout\")&&this.get(\"force.layoutAnimation\"))},defaultOption:{zlevel:0,z:2,coordinateSystem:\"view\",legendHoverLink:!0,hoverAnimation:!0,layout:null,focusNodeAdjacency:!1,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,edgeLength:30,layoutAnimation:!0},left:\"center\",top:\"center\",symbol:\"circle\",symbolSize:10,edgeSymbol:[\"none\",\"none\"],edgeSymbolSize:10,edgeLabel:{normal:{position:\"middle\"},emphasis:{}},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{normal:{show:!1,formatter:\"{b}\"},emphasis:{show:!0}},itemStyle:{normal:{},emphasis:{}},lineStyle:{normal:{color:\"#aaa\",width:1,curveness:0,opacity:.5},emphasis:{}}}}),cT=fb.prototype,dT=pb.prototype,fT=Zn({type:\"ec-line\",style:{stroke:\"#000\",fill:null},shape:{x1:0,y1:0,x2:0,y2:0,percent:1,cpx1:null,cpy1:null},buildPath:function(t,e){(mu(e)?cT:dT).buildPath(t,e)},pointAt:function(t){return mu(this.shape)?cT.pointAt.call(this,t):dT.pointAt.call(this,t)},tangentAt:function(t){var e=this.shape,i=mu(e)?[e.x2-e.x1,e.y2-e.y1]:dT.tangentAt.call(this,t);return X(i,i)}}),gT=[\"fromSymbol\",\"toSymbol\"],pT=bu.prototype;pT.beforeUpdate=function(){var t=this,e=t.childOfName(\"fromSymbol\"),i=t.childOfName(\"toSymbol\"),n=t.childOfName(\"label\");if(e||i||!n.ignore){for(var o=1,a=this.parent;a;)a.scale&&(o/=a.scale[0]),a=a.parent;var r=t.childOfName(\"line\");if(this.__dirty||r.__dirty){var s=r.shape.percent,l=r.pointAt(0),h=r.pointAt(s),u=H([],h,l);if(X(u,u),e&&(e.attr(\"position\",l),c=r.tangentAt(0),e.attr(\"rotation\",Math.PI/2-Math.atan2(c[1],c[0])),e.attr(\"scale\",[o*s,o*s])),i){i.attr(\"position\",h);var c=r.tangentAt(1);i.attr(\"rotation\",-Math.PI/2-Math.atan2(c[1],c[0])),i.attr(\"scale\",[o*s,o*s])}if(!n.ignore){n.attr(\"position\",h);var d,f,g,p=5*o;if(\"end\"===n.__position)d=[u[0]*p+h[0],u[1]*p+h[1]],f=u[0]>.8?\"left\":u[0]<-.8?\"right\":\"center\",g=u[1]>.8?\"top\":u[1]<-.8?\"bottom\":\"middle\";else if(\"middle\"===n.__position){var m=s/2,v=[(c=r.tangentAt(m))[1],-c[0]],y=r.pointAt(m);v[1]>0&&(v[0]=-v[0],v[1]=-v[1]),d=[y[0]+v[0]*p,y[1]+v[1]*p],f=\"center\",g=\"bottom\";var x=-Math.atan2(c[1],c[0]);h[0]<l[0]&&(x=Math.PI+x),n.attr(\"rotation\",x)}else d=[-u[0]*p+l[0],-u[1]*p+l[1]],f=u[0]>.8?\"right\":u[0]<-.8?\"left\":\"center\",g=u[1]>.8?\"bottom\":u[1]<-.8?\"top\":\"middle\";n.attr({style:{textVerticalAlign:n.__verticalAlign||g,textAlign:n.__textAlign||f},position:d,scale:[o,o]})}}}},pT._createLine=function(t,e,i){var n=t.hostModel,o=xu(t.getItemLayout(e));o.shape.percent=0,So(o,{shape:{percent:1}},n,e),this.add(o);var a=new ib({name:\"label\"});this.add(a),d(gT,function(i){var n=yu(i,t,e);this.add(n),this[vu(i)]=t.getItemVisual(e,i)},this),this._updateCommonStl(t,e,i)},pT.updateData=function(t,e,i){var n=t.hostModel,o=this.childOfName(\"line\"),a=t.getItemLayout(e),r={shape:{}};_u(r.shape,a),wo(o,r,n,e),d(gT,function(i){var n=t.getItemVisual(e,i),o=vu(i);if(this[o]!==n){this.remove(this.childOfName(i));var a=yu(i,t,e);this.add(a)}this[o]=n},this),this._updateCommonStl(t,e,i)},pT._updateCommonStl=function(t,e,i){var n=t.hostModel,o=this.childOfName(\"line\"),a=i&&i.lineStyle,s=i&&i.hoverLineStyle,l=i&&i.labelModel,h=i&&i.hoverLabelModel;if(!i||t.hasItemOption){var u=t.getItemModel(e);a=u.getModel(\"lineStyle.normal\").getLineStyle(),s=u.getModel(\"lineStyle.emphasis\").getLineStyle(),l=u.getModel(\"label.normal\"),h=u.getModel(\"label.emphasis\")}var c=t.getItemVisual(e,\"color\"),f=A(t.getItemVisual(e,\"opacity\"),a.opacity,1);o.useStyle(r({strokeNoScale:!0,fill:\"none\",stroke:c,opacity:f},a)),o.hoverStyle=s,d(gT,function(t){var e=this.childOfName(t);e&&(e.setColor(c),e.setStyle({opacity:f}))},this);var g,p,m,v,y=l.getShallow(\"show\"),x=h.getShallow(\"show\"),_=this.childOfName(\"label\");if(y||x){var b=n.getRawValue(e);p=null==b?p=t.getName(e):isFinite(b)?Mi(b):b,g=c||\"#000\",m=T(n.getFormattedLabel(e,\"normal\",t.dataType),p),v=T(n.getFormattedLabel(e,\"emphasis\",t.dataType),m)}if(y){var w=fo(_.style,l,{text:m},{autoColor:g});_.__textAlign=w.textAlign,_.__verticalAlign=w.textVerticalAlign,_.__position=l.get(\"position\")||\"middle\"}else _.setStyle(\"text\",null);_.hoverStyle=x?{text:v,textFill:h.getTextColor(!0),fontStyle:h.getShallow(\"fontStyle\"),fontWeight:h.getShallow(\"fontWeight\"),fontSize:h.getShallow(\"fontSize\"),fontFamily:h.getShallow(\"fontFamily\")}:{text:null},_.ignore=!y&&!x,uo(this)},pT.highlight=function(){this.trigger(\"emphasis\")},pT.downplay=function(){this.trigger(\"normal\")},pT.updateLayout=function(t,e){this.setLinePoints(t.getItemLayout(e))},pT.setLinePoints=function(t){var e=this.childOfName(\"line\");_u(e.shape,t),e.dirty()},h(bu,jy);var mT=Mu.prototype;mT.updateData=function(t){var e=this._lineData,i=this.group,n=this._ctor,o=t.hostModel,a={lineStyle:o.getModel(\"lineStyle.normal\").getLineStyle(),hoverLineStyle:o.getModel(\"lineStyle.emphasis\").getLineStyle(),labelModel:o.getModel(\"label.normal\"),hoverLabelModel:o.getModel(\"label.emphasis\")};t.diff(e).add(function(e){if(Su(t.getItemLayout(e))){var o=new n(t,e,a);t.setItemGraphicEl(e,o),i.add(o)}}).update(function(o,r){var s=e.getItemGraphicEl(r);Su(t.getItemLayout(o))?(s?s.updateData(t,o,a):s=new n(t,o,a),t.setItemGraphicEl(o,s),i.add(s)):i.remove(s)}).remove(function(t){i.remove(e.getItemGraphicEl(t))}).execute(),this._lineData=t},mT.updateLayout=function(){var t=this._lineData;t.eachItemGraphicEl(function(e,i){e.updateLayout(t,i)},this)},mT.remove=function(){this.group.removeAll()};var vT=[],yT=[],xT=[],_T=un,bT=uy,wT=Math.abs,ST=function(t,e){function i(t){var e=t.getVisual(\"symbolSize\");return e instanceof Array&&(e=(e[0]+e[1])/2),e}var n=[],o=gn,a=[[],[],[]],r=[[],[]],s=[];e/=2,t.eachEdge(function(t,l){var h=t.getLayout(),u=t.getVisual(\"fromSymbol\"),c=t.getVisual(\"toSymbol\");h.__original||(h.__original=[V(h[0]),V(h[1])],h[2]&&h.__original.push(V(h[2])));var d=h.__original;if(null!=h[2]){if(R(a[0],d[0]),R(a[1],d[2]),R(a[2],d[1]),u&&\"none\"!=u){var f=i(t.node1),g=Iu(a,d[0],f*e);o(a[0][0],a[1][0],a[2][0],g,n),a[0][0]=n[3],a[1][0]=n[4],o(a[0][1],a[1][1],a[2][1],g,n),a[0][1]=n[3],a[1][1]=n[4]}if(c&&\"none\"!=c){var f=i(t.node2),g=Iu(a,d[1],f*e);o(a[0][0],a[1][0],a[2][0],g,n),a[1][0]=n[1],a[2][0]=n[2],o(a[0][1],a[1][1],a[2][1],g,n),a[1][1]=n[1],a[2][1]=n[2]}R(h[0],a[0]),R(h[1],a[2]),R(h[2],a[1])}else{if(R(r[0],d[0]),R(r[1],d[1]),H(s,r[1],r[0]),X(s,s),u&&\"none\"!=u){f=i(t.node1);W(r[0],r[0],s,f*e)}if(c&&\"none\"!=c){f=i(t.node2);W(r[1],r[1],s,-f*e)}R(h[0],r[0]),R(h[1],r[1])}})},MT=[\"itemStyle\",\"normal\",\"opacity\"],IT=[\"lineStyle\",\"normal\",\"opacity\"];ur({type:\"graph\",init:function(t,e){var i=new ts,n=new Mu,o=this.group;this._controller=new kl(e.getZr()),this._controllerHost={target:o},o.add(i.group),o.add(n.group),this._symbolDraw=i,this._lineDraw=n,this._firstRender=!0},render:function(t,e,i){var n=t.coordinateSystem;this._model=t,this._nodeScaleRatio=t.get(\"nodeScaleRatio\");var o=this._symbolDraw,a=this._lineDraw,r=this.group;if(\"view\"===n.type){var s={position:n.position,scale:n.scale};this._firstRender?r.attr(s):wo(r,s,t)}ST(t.getGraph(),this._getNodeGlobalScale(t));var l=t.getData();o.updateData(l);var h=t.getEdgeData();a.updateData(h),this._updateNodeAndLinkScale(),this._updateController(t,e,i),clearTimeout(this._layoutTimeout);var u=t.forceLayout,c=t.get(\"force.layoutAnimation\");u&&this._startForceLayoutIteration(u,c),l.eachItemGraphicEl(function(e,n){var o=l.getItemModel(n);e.off(\"drag\").off(\"dragend\");var a=l.getItemModel(n).get(\"draggable\");a&&e.on(\"drag\",function(){u&&(u.warmUp(),!this._layouting&&this._startForceLayoutIteration(u,c),u.setFixed(n),l.setItemLayout(n,e.position))},this).on(\"dragend\",function(){u&&u.setUnfixed(n)},this),e.setDraggable(a&&u),e.off(\"mouseover\",e.__focusNodeAdjacency),e.off(\"mouseout\",e.__unfocusNodeAdjacency),o.get(\"focusNodeAdjacency\")&&(e.on(\"mouseover\",e.__focusNodeAdjacency=function(){i.dispatchAction({type:\"focusNodeAdjacency\",seriesId:t.id,dataIndex:e.dataIndex})}),e.on(\"mouseout\",e.__unfocusNodeAdjacency=function(){i.dispatchAction({type:\"unfocusNodeAdjacency\",seriesId:t.id})}))},this),l.graph.eachEdge(function(e){var n=e.getGraphicEl();n.off(\"mouseover\",n.__focusNodeAdjacency),n.off(\"mouseout\",n.__unfocusNodeAdjacency),e.getModel().get(\"focusNodeAdjacency\")&&(n.on(\"mouseover\",n.__focusNodeAdjacency=function(){i.dispatchAction({type:\"focusNodeAdjacency\",seriesId:t.id,edgeDataIndex:e.dataIndex})}),n.on(\"mouseout\",n.__unfocusNodeAdjacency=function(){i.dispatchAction({type:\"unfocusNodeAdjacency\",seriesId:t.id})}))});var d=\"circular\"===t.get(\"layout\")&&t.get(\"circular.rotateLabel\"),f=l.getLayout(\"cx\"),g=l.getLayout(\"cy\");l.eachItemGraphicEl(function(t,e){var i=t.getSymbolPath();if(d){var n=l.getItemLayout(e),o=Math.atan2(n[1]-g,n[0]-f);o<0&&(o=2*Math.PI+o);var a=n[0]<f;a&&(o-=Math.PI);var r=a?\"left\":\"right\";i.setStyle({textRotation:-o,textPosition:r,textOrigin:\"center\"}),i.hoverStyle&&(i.hoverStyle.textPosition=r)}else i.setStyle({textRotation:0})}),this._firstRender=!1},dispose:function(){this._controller&&this._controller.dispose(),this._controllerHost={}},focusNodeAdjacency:function(t,e,i,n){var o=this._model.getData().graph,a=n.dataIndex,r=n.edgeDataIndex,s=o.getNodeByIndex(a),l=o.getEdgeByIndex(r);(s||l)&&(o.eachNode(function(t){Au(t,MT,.1)}),o.eachEdge(function(t){Au(t,IT,.1)}),s&&(Cu(s,MT),d(s.edges,function(t){t.dataIndex<0||(Cu(t,IT),Cu(t.node1,MT),Cu(t.node2,MT))})),l&&(Cu(l,IT),Cu(l.node1,MT),Cu(l.node2,MT)))},unfocusNodeAdjacency:function(t,e,i,n){var o=this._model.getData().graph;o.eachNode(function(t){Au(t,MT)}),o.eachEdge(function(t){Au(t,IT)})},_startForceLayoutIteration:function(t,e){var i=this;!function n(){t.step(function(t){i.updateLayout(i._model),(i._layouting=!t)&&(e?i._layoutTimeout=setTimeout(n,16):n())})}()},_updateController:function(t,e,i){var n=this._controller,o=this._controllerHost,a=this.group;n.setPointerChecker(function(e,n,o){var r=a.getBoundingRect();return r.applyTransform(a.transform),r.contain(n,o)&&!Wl(e,i,t)}),\"view\"===t.coordinateSystem.type?(n.enable(t.get(\"roam\")),o.zoomLimit=t.get(\"scaleLimit\"),o.zoom=t.coordinateSystem.getZoom(),n.off(\"pan\").off(\"zoom\").on(\"pan\",function(e,n){Bl(o,e,n),i.dispatchAction({seriesId:t.id,type:\"graphRoam\",dx:e,dy:n})}).on(\"zoom\",function(e,n,a){Gl(o,e,n,a),i.dispatchAction({seriesId:t.id,type:\"graphRoam\",zoom:e,originX:n,originY:a}),this._updateNodeAndLinkScale(),ST(t.getGraph(),this._getNodeGlobalScale(t)),this._lineDraw.updateLayout()},this)):n.disable()},_updateNodeAndLinkScale:function(){var t=this._model,e=t.getData(),i=this._getNodeGlobalScale(t),n=[i,i];e.eachItemGraphicEl(function(t,e){t.attr(\"scale\",n)})},_getNodeGlobalScale:function(t){var e=t.coordinateSystem;if(\"view\"!==e.type)return 1;var i=this._nodeScaleRatio,n=e.scale,o=n&&n[0]||1;return((e.getZoom()-1)*i+1)/o},updateLayout:function(t){ST(t.getGraph(),this._getNodeGlobalScale(t)),this._symbolDraw.updateLayout(),this._lineDraw.updateLayout()},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(),this._lineDraw&&this._lineDraw.remove()}}),ir({type:\"graphRoam\",event:\"graphRoam\",update:\"none\"},function(t,e){e.eachComponent({mainType:\"series\",query:t},function(e){var i=Xl(e.coordinateSystem,t);e.setCenter&&e.setCenter(i.center),e.setZoom&&e.setZoom(i.zoom)})}),ir({type:\"focusNodeAdjacency\",event:\"focusNodeAdjacency\",update:\"series.graph:focusNodeAdjacency\"},function(){}),ir({type:\"unfocusNodeAdjacency\",event:\"unfocusNodeAdjacency\",update:\"series.graph:unfocusNodeAdjacency\"},function(){});var TT=W;er(function(t){var e=t.findComponents({mainType:\"legend\"});e&&e.length&&t.eachSeriesByType(\"graph\",function(t){var i=t.getCategoriesData(),n=t.getGraph().data,o=i.mapArray(i.getName);n.filterSelf(function(t){var i=n.getItemModel(t).getShallow(\"category\");if(null!=i){\"number\"==typeof i&&(i=o[i]);for(var a=0;a<e.length;a++)if(!e[a].isSelected(i))return!1}return!0})},this)}),ar(v(cM,\"graph\",\"circle\",null)),ar(function(t){var e={};t.eachSeriesByType(\"graph\",function(t){var i=t.getCategoriesData(),n=t.getData(),o={};i.each(function(n){var a=i.getName(n);o[\"ec-\"+a]=n;var r=i.getItemModel(n).get(\"itemStyle.normal.color\")||t.getColorFromPalette(a,e);i.setItemVisual(n,\"color\",r)}),i.count()&&n.each(function(t){var e=n.getItemModel(t).getShallow(\"category\");null!=e&&(\"string\"==typeof e&&(e=o[\"ec-\"+e]),n.getItemVisual(t,\"color\",!0)||n.setItemVisual(t,\"color\",i.getItemVisual(e,\"color\")))})})}),ar(function(t){t.eachSeriesByType(\"graph\",function(t){var e=t.getGraph(),i=t.getEdgeData(),n=Du(t.get(\"edgeSymbol\")),o=Du(t.get(\"edgeSymbolSize\")),a=\"lineStyle.normal.color\".split(\".\"),r=\"lineStyle.normal.opacity\".split(\".\");i.setVisual(\"fromSymbol\",n&&n[0]),i.setVisual(\"toSymbol\",n&&n[1]),i.setVisual(\"fromSymbolSize\",o&&o[0]),i.setVisual(\"toSymbolSize\",o&&o[1]),i.setVisual(\"color\",t.get(a)),i.setVisual(\"opacity\",t.get(r)),i.each(function(t){var n=i.getItemModel(t),o=e.getEdgeByIndex(t),s=Du(n.getShallow(\"symbol\",!0)),l=Du(n.getShallow(\"symbolSize\",!0)),h=n.get(a),u=n.get(r);switch(h){case\"source\":h=o.node1.getVisual(\"color\");break;case\"target\":h=o.node2.getVisual(\"color\")}s[0]&&o.setVisual(\"fromSymbol\",s[0]),s[1]&&o.setVisual(\"toSymbol\",s[1]),l[0]&&o.setVisual(\"fromSymbolSize\",l[0]),l[1]&&o.setVisual(\"toSymbolSize\",l[1]),o.setVisual(\"color\",h),o.setVisual(\"opacity\",u)})})}),or(function(t,e){t.eachSeriesByType(\"graph\",function(t){var e=t.get(\"layout\"),i=t.coordinateSystem;if(i&&\"view\"!==i.type){var n=t.getData(),o=i.dimensions;n.each(o,function(){for(var t,e=arguments,a=[],r=0;r<o.length;r++)isNaN(e[r])||(t=!0),a.push(e[r]);var s=e[e.length-1];t?n.setItemLayout(s,i.dataToPoint(a)):n.setItemLayout(s,[NaN,NaN])}),ku(n.graph)}else e&&\"none\"!==e||Lu(t)})}),or(function(t){t.eachSeriesByType(\"graph\",function(t){\"circular\"===t.get(\"layout\")&&Pu(t)})}),or(function(t){t.eachSeriesByType(\"graph\",function(t){var e=t.coordinateSystem;if(!e||\"view\"===e.type)if(\"force\"===t.get(\"layout\")){var i=t.preservedPoints||{},n=t.getGraph(),o=n.data,a=n.edgeData,r=t.getModel(\"force\"),s=r.get(\"initLayout\");t.preservedPoints?o.each(function(t){var e=o.getId(t);o.setItemLayout(t,i[e]||[NaN,NaN])}):s&&\"none\"!==s?\"circular\"===s&&Pu(t):Lu(t);var l=o.getDataExtent(\"value\"),h=a.getDataExtent(\"value\"),u=r.get(\"repulsion\"),c=r.get(\"edgeLength\");y(u)||(u=[u,u]),y(c)||(c=[c,c]),c=[c[1],c[0]];var d=o.mapArray(\"value\",function(t,e){var i=o.getItemLayout(e),n=wi(t,l,u);return isNaN(n)&&(n=(u[0]+u[1])/2),{w:n,rep:n,fixed:o.getItemModel(e).get(\"fixed\"),p:!i||isNaN(i[0])||isNaN(i[1])?null:i}}),f=a.mapArray(\"value\",function(t,e){var i=n.getEdgeByIndex(e),o=wi(t,h,c);return isNaN(o)&&(o=(c[0]+c[1])/2),{n1:d[i.node1.dataIndex],n2:d[i.node2.dataIndex],d:o,curveness:i.getModel().get(\"lineStyle.normal.curveness\")||0}}),g=(e=t.coordinateSystem).getBoundingRect(),p=Ou(d,f,{rect:g,gravity:r.get(\"gravity\")}),m=p.step;p.step=function(t){for(var e=0,a=d.length;e<a;e++)d[e].fixed&&R(d[e].p,n.getNodeByIndex(e).getLayout());m(function(e,a,r){for(var s=0,l=e.length;s<l;s++)e[s].fixed||n.getNodeByIndex(s).setLayout(e[s].p),i[o.getId(s)]=e[s].p;for(var s=0,l=a.length;s<l;s++){var h=a[s],u=n.getEdgeByIndex(s),c=h.n1.p,d=h.n2.p,f=u.getLayout();(f=f?f.slice():[])[0]=f[0]||[],f[1]=f[1]||[],R(f[0],c),R(f[1],d),+h.curveness&&(f[2]=[(c[0]+d[0])/2-(c[1]-d[1])*h.curveness,(c[1]+d[1])/2-(d[0]-c[0])*h.curveness]),u.setLayout(f)}t&&t(r)})},t.forceLayout=p,t.preservedPoints=i,p.step()}else t.forceLayout=null})}),nr(\"graphView\",{create:function(t,e){var i=[];return t.eachSeriesByType(\"graph\",function(t){var n=t.get(\"coordinateSystem\");if(!n||\"view\"===n){var o=t.getData(),a=[],r=[];mn(o.mapArray(function(t){var e=o.getItemModel(t);return[+e.get(\"x\"),+e.get(\"y\")]}),a,r),r[0]-a[0]==0&&(r[0]+=1,a[0]-=1),r[1]-a[1]==0&&(r[1]+=1,a[1]-=1);var s=(r[0]-a[0])/(r[1]-a[1]),l=zu(t,e,s);isNaN(s)&&(a=[l.x,l.y],r=[l.x+l.width,l.y+l.height]);var h=r[0]-a[0],u=r[1]-a[1],c=l.width,d=l.height,f=t.coordinateSystem=new bl;f.zoomLimit=t.get(\"scaleLimit\"),f.setBoundingRect(a[0],a[1],h,u),f.setViewRect(l.x,l.y,c,d),f.setCenter(t.get(\"center\")),f.setZoom(t.get(\"zoom\")),i.push(f)}}),i}});yw.extend({type:\"series.gauge\",getInitialData:function(t,e){var i=new aS([\"value\"],this),n=t.data||[];return y(n)||(n=[n]),i.initData(n),i},defaultOption:{zlevel:0,z:2,center:[\"50%\",\"50%\"],legendHoverLink:!0,radius:\"75%\",startAngle:225,endAngle:-45,clockwise:!0,min:0,max:100,splitNumber:10,axisLine:{show:!0,lineStyle:{color:[[.2,\"#91c7ae\"],[.8,\"#63869e\"],[1,\"#c23531\"]],width:30}},splitLine:{show:!0,length:30,lineStyle:{color:\"#eee\",width:2,type:\"solid\"}},axisTick:{show:!0,splitNumber:5,length:8,lineStyle:{color:\"#eee\",width:1,type:\"solid\"}},axisLabel:{show:!0,distance:5,color:\"auto\"},pointer:{show:!0,length:\"80%\",width:8},itemStyle:{normal:{color:\"auto\"}},title:{show:!0,offsetCenter:[0,\"-40%\"],color:\"#333\",fontSize:15},detail:{show:!0,backgroundColor:\"rgba(0,0,0,0)\",borderWidth:0,borderColor:\"#ccc\",width:100,height:null,padding:[5,10],offsetCenter:[0,\"40%\"],color:\"auto\",fontSize:30}}});var AT=Nn.extend({type:\"echartsGaugePointer\",shape:{angle:0,width:10,r:10,x:0,y:0},buildPath:function(t,e){var i=Math.cos,n=Math.sin,o=e.r,a=e.width,r=e.angle,s=e.x-i(r)*a*(a>=o/3?1:2),l=e.y-n(r)*a*(a>=o/3?1:2);r=e.angle-Math.PI/2,t.moveTo(s,l),t.lineTo(e.x+i(r)*a,e.y+n(r)*a),t.lineTo(e.x+i(e.angle)*o,e.y+n(e.angle)*o),t.lineTo(e.x-i(r)*a,e.y-n(r)*a),t.lineTo(s,l)}}),CT=2*Math.PI,DT=(Ta.extend({type:\"gauge\",render:function(t,e,i){this.group.removeAll();var n=t.get(\"axisLine.lineStyle.color\"),o=Nu(t,i);this._renderMain(t,e,i,n,o)},dispose:function(){},_renderMain:function(t,e,i,n,o){for(var a=this.group,r=t.getModel(\"axisLine\").getModel(\"lineStyle\"),s=t.get(\"clockwise\"),l=-t.get(\"startAngle\")/180*Math.PI,h=-t.get(\"endAngle\")/180*Math.PI,u=(h-l)%CT,c=l,d=r.get(\"width\"),f=0;f<n.length;f++){var g=Math.min(Math.max(n[f][0],0),1),p=new rb({shape:{startAngle:c,endAngle:h=l+u*g,cx:o.cx,cy:o.cy,clockwise:s,r0:o.r-d,r:o.r},silent:!0});p.setStyle({fill:n[f][1]}),p.setStyle(r.getLineStyle([\"color\",\"borderWidth\",\"borderColor\"])),a.add(p),c=h}var m=function(t){if(t<=0)return n[0][1];for(var e=0;e<n.length;e++)if(n[e][0]>=t&&(0===e?0:n[e-1][0])<t)return n[e][1];return n[e-1][1]};if(!s){var v=l;l=h,h=v}this._renderTicks(t,e,i,m,o,l,h,s),this._renderPointer(t,e,i,m,o,l,h,s),this._renderTitle(t,e,i,m,o),this._renderDetail(t,e,i,m,o)},_renderTicks:function(t,e,i,n,o,a,r,s){for(var l=this.group,h=o.cx,u=o.cy,c=o.r,d=+t.get(\"min\"),f=+t.get(\"max\"),g=t.getModel(\"splitLine\"),p=t.getModel(\"axisTick\"),m=t.getModel(\"axisLabel\"),v=t.get(\"splitNumber\"),y=p.get(\"splitNumber\"),x=Si(g.get(\"length\"),c),_=Si(p.get(\"length\"),c),b=a,w=(r-a)/v,S=w/y,M=g.getModel(\"lineStyle\").getLineStyle(),I=p.getModel(\"lineStyle\").getLineStyle(),T=0;T<=v;T++){var A=Math.cos(b),C=Math.sin(b);if(g.get(\"show\")){var D=new fb({shape:{x1:A*c+h,y1:C*c+u,x2:A*(c-x)+h,y2:C*(c-x)+u},style:M,silent:!0});\"auto\"===M.stroke&&D.setStyle({stroke:n(T/v)}),l.add(D)}if(m.get(\"show\")){var L=Eu(Mi(T/v*(f-d)+d),m.get(\"formatter\")),k=m.get(\"distance\"),P=n(T/v);l.add(new ib({style:fo({},m,{text:L,x:A*(c-x-k)+h,y:C*(c-x-k)+u,textVerticalAlign:C<-.4?\"top\":C>.4?\"bottom\":\"middle\",textAlign:A<-.4?\"left\":A>.4?\"right\":\"center\"},{autoColor:P}),silent:!0}))}if(p.get(\"show\")&&T!==v){for(var O=0;O<=y;O++){var A=Math.cos(b),C=Math.sin(b),z=new fb({shape:{x1:A*c+h,y1:C*c+u,x2:A*(c-_)+h,y2:C*(c-_)+u},silent:!0,style:I});\"auto\"===I.stroke&&z.setStyle({stroke:n((T+O/y)/v)}),l.add(z),b+=S}b-=S}else b+=w}},_renderPointer:function(t,e,i,n,o,a,r,s){var l=this.group,h=this._data;if(t.get(\"pointer.show\")){var u=[+t.get(\"min\"),+t.get(\"max\")],c=[a,r],d=t.getData();d.diff(h).add(function(e){var i=new AT({shape:{angle:a}});So(i,{shape:{angle:wi(d.get(\"value\",e),u,c,!0)}},t),l.add(i),d.setItemGraphicEl(e,i)}).update(function(e,i){var n=h.getItemGraphicEl(i);wo(n,{shape:{angle:wi(d.get(\"value\",e),u,c,!0)}},t),l.add(n),d.setItemGraphicEl(e,n)}).remove(function(t){var e=h.getItemGraphicEl(t);l.remove(e)}).execute(),d.eachItemGraphicEl(function(t,e){var i=d.getItemModel(e),a=i.getModel(\"pointer\");t.setShape({x:o.cx,y:o.cy,width:Si(a.get(\"width\"),o.r),r:Si(a.get(\"length\"),o.r)}),t.useStyle(i.getModel(\"itemStyle.normal\").getItemStyle()),\"auto\"===t.style.fill&&t.setStyle(\"fill\",n(wi(d.get(\"value\",e),u,[0,1],!0))),uo(t,i.getModel(\"itemStyle.emphasis\").getItemStyle())}),this._data=d}else h&&h.eachItemGraphicEl(function(t){l.remove(t)})},_renderTitle:function(t,e,i,n,o){var a=t.getModel(\"title\");if(a.get(\"show\")){var r=a.get(\"offsetCenter\"),s=o.cx+Si(r[0],o.r),l=o.cy+Si(r[1],o.r),h=+t.get(\"min\"),u=+t.get(\"max\"),c=n(wi(t.getData().get(\"value\",0),[h,u],[0,1],!0));this.group.add(new ib({silent:!0,style:fo({},a,{x:s,y:l,text:t.getData().getName(0),textAlign:\"center\",textVerticalAlign:\"middle\"},{autoColor:c,forceRich:!0})}))}},_renderDetail:function(t,e,i,n,o){var a=t.getModel(\"detail\"),r=+t.get(\"min\"),s=+t.get(\"max\");if(a.get(\"show\")){var l=a.get(\"offsetCenter\"),h=o.cx+Si(l[0],o.r),u=o.cy+Si(l[1],o.r),c=Si(a.get(\"width\"),o.r),d=Si(a.get(\"height\"),o.r),f=t.getData().get(\"value\",0),g=n(wi(f,[r,s],[0,1],!0));this.group.add(new ib({silent:!0,style:fo({},a,{x:h,y:u,text:Eu(f,a.get(\"formatter\")),textWidth:isNaN(c)?null:c,textHeight:isNaN(d)?null:d,textAlign:\"center\",textVerticalAlign:\"middle\"},{autoColor:g,forceRich:!0})}))}}}),hr({type:\"series.funnel\",init:function(t){DT.superApply(this,\"init\",arguments),this.legendDataProvider=function(){return this.getRawData()},this._defaultLabelLine(t)},getInitialData:function(t,e){var i=xr([\"value\"],t.data),n=new aS(i,this);return n.initData(t.data),n},_defaultLabelLine:function(t){zo(t.labelLine,[\"show\"]);var e=t.labelLine.normal,i=t.labelLine.emphasis;e.show=e.show&&t.label.normal.show,i.show=i.show&&t.label.emphasis.show},getDataParams:function(t){var e=this.getData(),i=DT.superCall(this,\"getDataParams\",t),n=e.getSum(\"value\");return i.percent=n?+(e.get(\"value\",t)/n*100).toFixed(2):0,i.$vars.push(\"percent\"),i},defaultOption:{zlevel:0,z:2,legendHoverLink:!0,left:80,top:60,right:80,bottom:60,minSize:\"0%\",maxSize:\"100%\",sort:\"descending\",gap:0,funnelAlign:\"center\",label:{normal:{show:!0,position:\"outer\"},emphasis:{show:!0}},labelLine:{normal:{show:!0,length:20,lineStyle:{width:1,type:\"solid\"}},emphasis:{}},itemStyle:{normal:{borderColor:\"#fff\",borderWidth:1},emphasis:{}}}})),LT=Ru.prototype,kT=[\"itemStyle\",\"normal\",\"opacity\"];LT.updateData=function(t,e,i){var n=this.childAt(0),o=t.hostModel,a=t.getItemModel(e),s=t.getItemLayout(e),l=t.getItemModel(e).get(kT);l=null==l?1:l,n.useStyle({}),i?(n.setShape({points:s.points}),n.setStyle({opacity:0}),So(n,{style:{opacity:l}},o,e)):wo(n,{style:{opacity:l},shape:{points:s.points}},o,e);var h=a.getModel(\"itemStyle\"),u=t.getItemVisual(e,\"color\");n.setStyle(r({lineJoin:\"round\",fill:u},h.getModel(\"normal\").getItemStyle([\"opacity\"]))),n.hoverStyle=h.getModel(\"emphasis\").getItemStyle(),this._updateLabel(t,e),uo(this)},LT._updateLabel=function(t,e){var i=this.childAt(1),n=this.childAt(2),o=t.hostModel,a=t.getItemModel(e),r=t.getItemLayout(e).label,s=t.getItemVisual(e,\"color\");wo(i,{shape:{points:r.linePoints||r.linePoints}},o,e),wo(n,{style:{x:r.x,y:r.y}},o,e),n.attr({rotation:r.rotation,origin:[r.x,r.y],z2:10});var l=a.getModel(\"label.normal\"),h=a.getModel(\"label.emphasis\"),u=a.getModel(\"labelLine.normal\"),c=a.getModel(\"labelLine.emphasis\"),s=t.getItemVisual(e,\"color\");co(n.style,n.hoverStyle={},l,h,{labelFetcher:t.hostModel,labelDataIndex:e,defaultText:t.getName(e),autoColor:s,useInsideStyle:!!r.inside},{textAlign:r.textAlign,textVerticalAlign:r.verticalAlign}),n.ignore=n.normalIgnore=!l.get(\"show\"),n.hoverIgnore=!h.get(\"show\"),i.ignore=i.normalIgnore=!u.get(\"show\"),i.hoverIgnore=!c.get(\"show\"),i.setStyle({stroke:s}),i.setStyle(u.getModel(\"lineStyle\").getLineStyle()),i.hoverStyle=c.getModel(\"lineStyle\").getLineStyle()},h(Ru,jy);Ta.extend({type:\"funnel\",render:function(t,e,i){var n=t.getData(),o=this._data,a=this.group;n.diff(o).add(function(t){var e=new Ru(n,t);n.setItemGraphicEl(t,e),a.add(e)}).update(function(t,e){var i=o.getItemGraphicEl(e);i.updateData(n,t),a.add(i),n.setItemGraphicEl(t,i)}).remove(function(t){var e=o.getItemGraphicEl(t);a.remove(e)}).execute(),this._data=n},remove:function(){this.group.removeAll(),this._data=null},dispose:function(){}});ar(v(tI,\"funnel\")),or(function(t,e,i){t.eachSeriesByType(\"funnel\",function(t){var i=t.getData(),n=t.get(\"sort\"),o=Vu(t,e),a=Bu(i,n),r=[Si(t.get(\"minSize\"),o.width),Si(t.get(\"maxSize\"),o.width)],s=i.getDataExtent(\"value\"),l=t.get(\"min\"),h=t.get(\"max\");null==l&&(l=Math.min(s[0],0)),null==h&&(h=s[1]);var u=t.get(\"funnelAlign\"),c=t.get(\"gap\"),d=(o.height-c*(i.count()-1))/i.count(),f=o.y,g=function(t,e){var n,a=wi(i.get(\"value\",t)||0,[l,h],r,!0);switch(u){case\"left\":n=o.x;break;case\"center\":n=o.x+(o.width-a)/2;break;case\"right\":n=o.x+o.width-a}return[[n,e],[n+a,e]]};\"ascending\"===n&&(d=-d,c=-c,f+=o.height,a=a.reverse());for(var p=0;p<a.length;p++){var m=a[p],v=a[p+1],y=g(m,f),x=g(v,f+d);f+=d+c,i.setItemLayout(m,{points:y.concat(x.slice().reverse())})}Gu(i)})}),er(v(oI,\"funnel\"));var PT=function(t,e,i,n,o){US.call(this,t,e,i),this.type=n||\"value\",this.axisIndex=o};PT.prototype={constructor:PT,model:null,isHorizontal:function(){return\"horizontal\"!==this.coordinateSystem.getModel().get(\"layout\")}},h(PT,US);var OT=function(t,e,i,n,o,a){e[0]=Zu(e[0],i),e[1]=Zu(e[1],i),t=t||0;var r=i[1]-i[0];null!=o&&(o=Zu(o,[0,r])),null!=a&&(a=Math.max(a,null!=o?o:0)),\"all\"===n&&(o=a=Math.abs(e[1]-e[0]),n=0);var s=Fu(e,n);e[n]+=t;var l=o||0,h=i.slice();s.sign<0?h[0]+=l:h[1]-=l,e[n]=Zu(e[n],h);u=Fu(e,n);null!=o&&(u.sign!==s.sign||u.span<o)&&(e[1-n]=e[n]+s.sign*o);var u=Fu(e,n);return null!=a&&u.span>a&&(e[1-n]=e[n]+u.sign*a),e},zT=d,NT=Math.min,ET=Math.max,RT=Math.floor,VT=Math.ceil,BT=Mi,GT=Math.PI;Uu.prototype={type:\"parallel\",constructor:Uu,_init:function(t,e,i){var n=t.dimensions,o=t.parallelAxisIndex;zT(n,function(t,i){var n=o[i],a=e.getComponent(\"parallelAxis\",n),r=this._axesMap.set(t,new PT(t,Er(a),[0,0],a.get(\"type\"),n)),s=\"category\"===r.type;r.onBand=s&&a.get(\"boundaryGap\"),r.inverse=a.get(\"inverse\"),a.axis=r,r.model=a,r.coordinateSystem=a.coordinateSystem=this},this)},update:function(t,e){this._updateAxesFromSeries(this._model,t)},containPoint:function(t){var e=this._makeLayoutInfo(),i=e.axisBase,n=e.layoutBase,o=e.pixelDimIndex,a=t[1-o],r=t[o];return a>=i&&a<=i+e.axisLength&&r>=n&&r<=n+e.layoutLength},getModel:function(){return this._model},_updateAxesFromSeries:function(t,e){e.eachSeries(function(i){if(t.contains(i,e)){var n=i.getData();zT(this.dimensions,function(t){var e=this._axesMap.get(t);e.scale.unionExtentFromData(n,t),Nr(e.scale,e.model)},this)}},this)},resize:function(t,e){this._rect=Ko(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),this._layoutAxes()},getRect:function(){return this._rect},_makeLayoutInfo:function(){var t,e=this._model,i=this._rect,n=[\"x\",\"y\"],o=[\"width\",\"height\"],a=e.get(\"layout\"),r=\"horizontal\"===a?0:1,s=i[o[r]],l=[0,s],h=this.dimensions.length,u=Xu(e.get(\"axisExpandWidth\"),l),c=Xu(e.get(\"axisExpandCount\")||0,[0,h]),d=e.get(\"axisExpandable\")&&h>3&&h>c&&c>1&&u>0&&s>0,f=e.get(\"axisExpandWindow\");f?(t=Xu(f[1]-f[0],l),f[1]=f[0]+t):(t=Xu(u*(c-1),l),(f=[u*(e.get(\"axisExpandCenter\")||RT(h/2))-t/2])[1]=f[0]+t);var g=(s-t)/(h-c);g<3&&(g=0);var p=[RT(BT(f[0]/u,1))+1,VT(BT(f[1]/u,1))-1],m=g/u*f[0];return{layout:a,pixelDimIndex:r,layoutBase:i[n[r]],layoutLength:s,axisBase:i[n[1-r]],axisLength:i[o[1-r]],axisExpandable:d,axisExpandWidth:u,axisCollapseWidth:g,axisExpandWindow:f,axisCount:h,winInnerIndices:p,axisExpandWindow0Pos:m}},_layoutAxes:function(){var t=this._rect,e=this._axesMap,i=this.dimensions,n=this._makeLayoutInfo(),o=n.layout;e.each(function(t){var e=[0,n.axisLength],i=t.inverse?1:0;t.setExtent(e[i],e[1-i])}),zT(i,function(i,a){var r=(n.axisExpandable?qu:ju)(a,n),s={horizontal:{x:r.position,y:n.axisLength},vertical:{x:0,y:r.position}},l={horizontal:GT/2,vertical:0},h=[s[o].x+t.x,s[o].y+t.y],u=l[o],c=ot();ht(c,c,u),lt(c,c,h),this._axesLayout[i]={position:h,rotation:u,transform:c,axisNameAvailableWidth:r.axisNameAvailableWidth,axisLabelShow:r.axisLabelShow,nameTruncateMaxWidth:r.nameTruncateMaxWidth,tickDirection:1,labelDirection:1,labelInterval:e.get(i).getLabelInterval()}},this)},getAxis:function(t){return this._axesMap.get(t)},dataToPoint:function(t,e){return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t),e)},eachActiveState:function(t,e,i){for(var n=this.dimensions,o=this._axesMap,a=this.hasAxisBrushed(),r=0,s=t.count();r<s;r++){var l,h=t.getValues(n,r);if(a){l=\"active\";for(var u=0,c=n.length;u<c;u++){var d=n[u];if(\"inactive\"===o.get(d).model.getActiveState(h[u],u)){l=\"inactive\";break}}}else l=\"normal\";e.call(i,l,r)}},hasAxisBrushed:function(){for(var t=this.dimensions,e=this._axesMap,i=!1,n=0,o=t.length;n<o;n++)\"normal\"!==e.get(t[n]).model.getActiveState()&&(i=!0);return i},axisCoordToPoint:function(t,e){return Io([t,0],this._axesLayout[e].transform)},getAxisLayout:function(t){return i(this._axesLayout[t])},getSlidedAxisExpandWindow:function(t){var e=this._makeLayoutInfo(),i=e.pixelDimIndex,n=e.axisExpandWindow.slice(),o=n[1]-n[0],a=[0,e.axisExpandWidth*(e.axisCount-1)];if(!this.containPoint(t))return{behavior:\"none\",axisExpandWindow:n};var r,s=t[i]-e.layoutBase-e.axisExpandWindow0Pos,l=\"slide\",h=e.axisCollapseWidth,u=this._model.get(\"axisExpandSlideTriggerArea\"),c=null!=u[0];if(h)c&&h&&s<o*u[0]?(l=\"jump\",r=s-o*u[2]):c&&h&&s>o*(1-u[0])?(l=\"jump\",r=s-o*(1-u[2])):(r=s-o*u[1])>=0&&(r=s-o*(1-u[1]))<=0&&(r=0),(r*=e.axisExpandWidth/h)?OT(r,n,a,\"all\"):l=\"none\";else{o=n[1]-n[0];(n=[ET(0,a[1]*s/o-o/2)])[1]=NT(a[1],n[0]+o),n[0]=n[1]-o}return{axisExpandWindow:n,behavior:l}}},ua.register(\"parallel\",{create:function(t,e){var i=[];return t.eachComponent(\"parallel\",function(n,o){var a=new Uu(n,t,e);a.name=\"parallel_\"+o,a.resize(n,e),n.coordinateSystem=a,a.model=n,i.push(a)}),t.eachSeries(function(e){if(\"parallel\"===e.get(\"coordinateSystem\")){var i=t.queryComponents({mainType:\"parallel\",index:e.get(\"parallelIndex\"),id:e.get(\"parallelId\")})[0];e.coordinateSystem=i.coordinateSystem}}),i}});var WT=Ub.extend({type:\"baseParallelAxis\",axis:null,activeIntervals:[],getAreaSelectStyle:function(){return $x([[\"fill\",\"color\"],[\"lineWidth\",\"borderWidth\"],[\"stroke\",\"borderColor\"],[\"width\",\"width\"],[\"opacity\",\"opacity\"]])(this.getModel(\"areaSelectStyle\"))},setActiveIntervals:function(t){var e=this.activeIntervals=i(t);if(e)for(var n=e.length-1;n>=0;n--)Ii(e[n])},getActiveState:function(t){var e=this.activeIntervals;if(!e.length)return\"normal\";if(null==t)return\"inactive\";for(var i=0,n=e.length;i<n;i++)if(e[i][0]<=t&&t<=e[i][1])return\"active\";return\"inactive\"}}),HT={type:\"value\",dim:null,areaSelectStyle:{width:20,borderWidth:1,borderColor:\"rgba(160,197,232)\",color:\"rgba(160,197,232)\",opacity:.3},realtime:!0,z:10};n(WT.prototype,zS),_M(\"parallel\",WT,function(t,e){return e.type||(e.data?\"category\":\"value\")},HT),Ub.extend({type:\"parallel\",dependencies:[\"parallelAxis\"],coordinateSystem:null,dimensions:null,parallelAxisIndex:null,layoutMode:\"box\",defaultOption:{zlevel:0,z:0,left:80,top:60,right:80,bottom:60,layout:\"horizontal\",axisExpandable:!1,axisExpandCenter:null,axisExpandCount:0,axisExpandWidth:50,axisExpandRate:17,axisExpandDebounce:50,axisExpandSlideTriggerArea:[-.15,.05,.4],axisExpandTriggerOn:\"click\",parallelAxisDefault:null},init:function(){Ub.prototype.init.apply(this,arguments),this.mergeOption({})},mergeOption:function(t){var e=this.option;t&&n(e,t,!0),this._initDimensions()},contains:function(t,e){var i=t.get(\"parallelIndex\");return null!=i&&e.getComponent(\"parallel\",i)===this},setAxisExpand:function(t){d([\"axisExpandable\",\"axisExpandCenter\",\"axisExpandCount\",\"axisExpandWidth\",\"axisExpandWindow\"],function(e){t.hasOwnProperty(e)&&(this.option[e]=t[e])},this)},_initDimensions:function(){var t=this.dimensions=[],e=this.parallelAxisIndex=[];d(p(this.dependentModels.parallelAxis,function(t){return(t.get(\"parallelIndex\")||0)===this.componentIndex},this),function(i){t.push(\"dim\"+i.get(\"dim\")),e.push(i.componentIndex)})}}),ir({type:\"axisAreaSelect\",event:\"axisAreaSelected\",update:\"updateVisual\"},function(t,e){e.eachComponent({mainType:\"parallelAxis\",query:t},function(e){e.axis.model.setActiveIntervals(t.intervals)})}),ir(\"parallelAxisExpand\",function(t,e){e.eachComponent({mainType:\"parallel\",query:t},function(e){e.setAxisExpand(t)})});var FT=v,ZT=d,UT=f,XT=Math.min,jT=Math.max,qT=Math.pow,YT=1e4,$T=6,KT=6,JT=\"globalPan\",QT={w:[0,0],e:[0,1],n:[1,0],s:[1,1]},tA={w:\"ew\",e:\"ew\",n:\"ns\",s:\"ns\",ne:\"nesw\",sw:\"nesw\",nw:\"nwse\",se:\"nwse\"},eA={brushStyle:{lineWidth:2,stroke:\"rgba(0,0,0,0.3)\",fill:\"rgba(0,0,0,0.1)\"},transformable:!0,brushMode:\"single\",removeOnClick:!1},iA=0;Yu.prototype={constructor:Yu,enableBrush:function(t){return this._brushType&&Ku(this),t.brushType&&$u(this,t),this},setPanels:function(t){if(t&&t.length){var e=this._panels={};d(t,function(t){e[t.panelId]=i(t)})}else this._panels=null;return this},mount:function(t){t=t||{},this._enableGlobalPan=t.enableGlobalPan;var e=this.group;return this._zr.add(e),e.attr({position:t.position||[0,0],rotation:t.rotation||0,scale:t.scale||[1,1]}),this._transform=e.getLocalTransform(),this},eachCover:function(t,e){ZT(this._covers,t,e)},updateCovers:function(t){function e(t,e){return(null!=t.id?t.id:a+e)+\"-\"+t.brushType}function o(e,i){var n=t[e];if(null!=i&&r[i]===h)s[e]=r[i];else{var o=s[e]=null!=i?(r[i].__brushOption=n,r[i]):Qu(l,Ju(l,n));ic(l,o)}}t=f(t,function(t){return n(i(eA),t,!0)});var a=\"\\0-brush-index-\",r=this._covers,s=this._covers=[],l=this,h=this._creatingCover;return new fr(r,t,function(t,i){return e(t.__brushOption,i)},e).add(o).update(o).remove(function(t){r[t]!==h&&l.group.remove(r[t])}).execute(),this},unmount:function(){return this.enableBrush(!1),rc(this),this._zr.remove(this.group),this},dispose:function(){this.unmount(),this.off()}},u(Yu,fy);var nA={mousedown:function(t){if(this._dragging)Cc.call(this,t);else if(!t.target||!t.target.draggable){Mc(t);var e=this.group.transformCoordToLocal(t.offsetX,t.offsetY);this._creatingCover=null,(this._creatingPanel=oc(this,t,e))&&(this._dragging=!0,this._track=[e.slice()])}},mousemove:function(t){var e=this.group.transformCoordToLocal(t.offsetX,t.offsetY);if(Sc(this,t,e),this._dragging){Mc(t);var i=Tc(this,t,e,!1);i&&sc(this,i)}},mouseup:Cc},oA={lineX:Dc(0),lineY:Dc(1),rect:{createCover:function(t,e){return uc(FT(yc,function(t){return t},function(t){return t}),t,e,[\"w\",\"e\",\"n\",\"s\",\"se\",\"sw\",\"ne\",\"nw\"])},getCreatingRange:function(t){var e=hc(t);return pc(e[1][0],e[1][1],e[0][0],e[0][1])},updateCoverShape:function(t,e,i,n){cc(t,e,i,n)},updateCommon:dc,contain:Ic},polygon:{createCover:function(t,e){var i=new jy;return i.add(new cb({name:\"main\",style:gc(e),silent:!0})),i},getCreatingRange:function(t){return t},endCreating:function(t,e){e.remove(e.childAt(0)),e.add(new ub({name:\"main\",draggable:!0,drift:FT(xc,t,e),ondragend:FT(sc,t,{isEnd:!0})}))},updateCoverShape:function(t,e,i,n){e.childAt(0).setShape({points:bc(t,e,i)})},updateCommon:dc,contain:Ic}},aA=[\"axisLine\",\"axisTickLabel\",\"axisName\"],rA=lr({type:\"parallelAxis\",init:function(t,e){rA.superApply(this,\"init\",arguments),(this._brushController=new Yu(e.getZr())).on(\"brush\",m(this._onBrush,this))},render:function(t,e,i,n){if(!zc(t,e,n)){this.axisModel=t,this.api=i,this.group.removeAll();var o=this._axisGroup;if(this._axisGroup=new jy,this.group.add(this._axisGroup),t.get(\"show\")){var r=Ec(t,e),s=r.coordinateSystem,l=t.getAreaSelectStyle(),h=l.width,u=t.axis.dim,c=a({strokeContainThreshold:h},s.getAxisLayout(u)),f=new DM(t,c);d(aA,f.add,f),this._axisGroup.add(f.getGroup()),this._refreshBrushController(c,l,t,r,h,i);var g=n&&!1===n.animation?null:t;Ao(o,this._axisGroup,g)}}},updateVisual:function(t,e,i,n){this._brushController&&this._brushController.updateCovers(Nc(t))},_refreshBrushController:function(t,e,i,n,o,a){var r=i.axis.getExtent(),s=r[1]-r[0],l=Math.min(30,.1*Math.abs(s)),h=jt.create({x:r[0],y:-o/2,width:s,height:o});h.x-=l,h.width+=2*l,this._brushController.mount({enableGlobalPan:!0,rotation:t.rotation,position:t.position}).setPanels([{panelId:\"pl\",clipPath:Lc(h),isTargetByCursor:Pc(h,a,n),getLinearBrushOtherExtent:kc(h,0)}]).enableBrush({brushType:\"lineX\",brushStyle:e,removeOnClick:!0}).updateCovers(Nc(i))},_onBrush:function(t,e){var i=this.axisModel,n=i.axis,o=f(t,function(t){return[n.coordToData(t.range[0],!0),n.coordToData(t.range[1],!0)]});(!i.option.realtime===e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:\"axisAreaSelect\",parallelAxisId:i.id,intervals:o})},dispose:function(){this._brushController.dispose()}});lr({type:\"parallel\",render:function(t,e,i){this._model=t,this._api=i,this._handlers||(this._handlers={},d(sA,function(t,e){i.getZr().on(e,this._handlers[e]=m(t,this))},this)),La(this,\"_throttledDispatchExpand\",t.get(\"axisExpandRate\"),\"fixRate\")},dispose:function(t,e){d(this._handlers,function(t,i){e.getZr().off(i,t)}),this._handlers=null},_throttledDispatchExpand:function(t){this._dispatchExpand(t)},_dispatchExpand:function(t){t&&this._api.dispatchAction(a({type:\"parallelAxisExpand\"},t))}});var sA={mousedown:function(t){Rc(this,\"click\")&&(this._mouseDownPoint=[t.offsetX,t.offsetY])},mouseup:function(t){var e=this._mouseDownPoint;if(Rc(this,\"click\")&&e){var i=[t.offsetX,t.offsetY];if(Math.pow(e[0]-i[0],2)+Math.pow(e[1]-i[1],2)>5)return;var n=this._model.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]);\"none\"!==n.behavior&&this._dispatchExpand({axisExpandWindow:n.axisExpandWindow})}this._mouseDownPoint=null},mousemove:function(t){if(!this._mouseDownPoint&&Rc(this,\"mousemove\")){var e=this._model,i=e.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]),n=i.behavior;\"jump\"===n&&this._throttledDispatchExpand.debounceNextCall(e.get(\"axisExpandDebounce\")),this._throttledDispatchExpand(\"none\"===n?null:{axisExpandWindow:i.axisExpandWindow,animation:\"jump\"===n&&null})}}};tr(function(t){Wu(t),Hu(t)}),yw.extend({type:\"series.parallel\",dependencies:[\"parallel\"],visualColorAccessPath:\"lineStyle.normal.color\",getInitialData:function(t,e){var i=e.getComponent(\"parallel\",this.get(\"parallelIndex\")),n=i.parallelAxisIndex,o=t.data,a=i.dimensions,r=f(Gc(a,o),function(t,i){var r=l(a,t),s=r>=0&&e.getComponent(\"parallelAxis\",n[r]);return s&&\"category\"===s.get(\"type\")?(Vc(s,t,o),{name:t,type:\"ordinal\"}):r<0&&xr.guessOrdinal(o,i)?{name:t,type:\"ordinal\"}:t}),s=new aS(r,this);return s.initData(o),this.option.progressive&&(this.option.animation=!1),s},getRawIndicesByActiveState:function(t){var e=this.coordinateSystem,i=this.getData(),n=[];return e.eachActiveState(i,function(e,o){t===e&&n.push(i.getRawIndex(o))}),n},defaultOption:{zlevel:0,z:2,coordinateSystem:\"parallel\",parallelIndex:0,label:{normal:{show:!1},emphasis:{show:!1}},inactiveOpacity:.05,activeOpacity:1,lineStyle:{normal:{width:1,opacity:.45,type:\"solid\"}},progressive:!1,smooth:!1,animationEasing:\"linear\"}});Ta.extend({type:\"parallel\",init:function(){this._dataGroup=new jy,this.group.add(this._dataGroup),this._data},render:function(t,e,i,n){this._renderForNormal(t,n)},dispose:function(){},_renderForNormal:function(t,e){var i=this._dataGroup,n=t.getData(),o=this._data,a=t.coordinateSystem,r=a.dimensions,s=t.option.smooth?.3:null;if(n.diff(o).add(function(t){Fc(n,i,t,r,a)}).update(function(i,s){var l=o.getItemGraphicEl(s),h=Hc(n,i,r,a);n.setItemGraphicEl(i,l),wo(l,{shape:{points:h}},e&&!1===e.animation?null:t,i)}).remove(function(t){var e=o.getItemGraphicEl(t);i.remove(e)}).execute(),Zc(n,s),!this._data){var l=Wc(a,t,function(){setTimeout(function(){i.removeClipPath()})});i.setClipPath(l)}this._data=n},remove:function(){this._dataGroup&&this._dataGroup.removeAll(),this._data=null}});var lA=[\"lineStyle\",\"normal\",\"opacity\"];ar(function(t){t.eachSeriesByType(\"parallel\",function(e){var i=e.getModel(\"itemStyle.normal\"),n=e.getModel(\"lineStyle.normal\"),o=t.get(\"color\"),a=n.get(\"color\")||i.get(\"color\")||o[e.seriesIndex%o.length],r=e.get(\"inactiveOpacity\"),s=e.get(\"activeOpacity\"),l=e.getModel(\"lineStyle.normal\").getLineStyle(),h=e.coordinateSystem,u=e.getData(),c={normal:l.opacity,active:s,inactive:r};h.eachActiveState(u,function(t,e){var i=u.getItemModel(e),n=c[t];if(\"normal\"===t){var o=i.get(lA,!0);null!=o&&(n=o)}u.setItemVisual(e,\"opacity\",n)}),u.setVisual(\"color\",a)})});var hA=yw.extend({type:\"series.sankey\",layoutInfo:null,getInitialData:function(t){var e=t.edges||t.links,i=t.data||t.nodes;if(i&&e)return hT(i,e,this,!0).data},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},formatTooltip:function(t,e,i){if(\"edge\"===i){var n=this.getDataParams(t,i),o=n.data,a=o.source+\" -- \"+o.target;return n.value&&(a+=\" : \"+n.value),Gi(a)}return hA.superCall(this,\"formatTooltip\",t,e)},defaultOption:{zlevel:0,z:2,coordinateSystem:\"view\",layout:null,left:\"5%\",top:\"5%\",right:\"20%\",bottom:\"5%\",nodeWidth:20,nodeGap:8,layoutIterations:32,label:{normal:{show:!0,position:\"right\",color:\"#000\",fontSize:12},emphasis:{show:!0}},itemStyle:{normal:{borderWidth:1,borderColor:\"#333\"}},lineStyle:{normal:{color:\"#314656\",opacity:.2,curveness:.5},emphasis:{opacity:.6}},animationEasing:\"linear\",animationDuration:1e3}}),uA=Zn({shape:{x1:0,y1:0,x2:0,y2:0,cpx1:0,cpy1:0,cpx2:0,cpy2:0,extent:0},buildPath:function(t,e){var i=e.extent/2;t.moveTo(e.x1,e.y1-i),t.bezierCurveTo(e.cpx1,e.cpy1-i,e.cpx2,e.cpy2-i,e.x2,e.y2-i),t.lineTo(e.x2,e.y2+i),t.bezierCurveTo(e.cpx2,e.cpy2+i,e.cpx1,e.cpy1+i,e.x1,e.y1+i),t.closePath()}});ur({type:\"sankey\",_model:null,render:function(t,e,i){var n=t.getGraph(),o=this.group,a=t.layoutInfo,r=t.getData(),s=t.getData(\"edge\");this._model=t,o.removeAll(),o.attr(\"position\",[a.x,a.y]),n.eachEdge(function(e){var i=new uA;i.dataIndex=e.dataIndex,i.seriesIndex=t.seriesIndex,i.dataType=\"edge\";var n=e.getModel(\"lineStyle.normal\"),a=n.get(\"curveness\"),r=e.node1.getLayout(),l=e.node2.getLayout(),h=e.getLayout();i.shape.extent=Math.max(1,h.dy);var u=r.x+r.dx,c=r.y+h.sy+h.dy/2,d=l.x,f=l.y+h.ty+h.dy/2,g=u*(1-a)+d*a,p=c,m=u*a+d*(1-a),v=f;switch(i.setShape({x1:u,y1:c,x2:d,y2:f,cpx1:g,cpy1:p,cpx2:m,cpy2:v}),i.setStyle(n.getItemStyle()),i.style.fill){case\"source\":i.style.fill=e.node1.getVisual(\"color\");break;case\"target\":i.style.fill=e.node2.getVisual(\"color\")}uo(i,e.getModel(\"lineStyle.emphasis\").getItemStyle()),o.add(i),s.setItemGraphicEl(e.dataIndex,i)}),n.eachNode(function(e){var i=e.getLayout(),n=e.getModel(),a=n.getModel(\"label.normal\"),s=n.getModel(\"label.emphasis\"),l=new db({shape:{x:i.x,y:i.y,width:e.getLayout().dx,height:e.getLayout().dy},style:n.getModel(\"itemStyle.normal\").getItemStyle()}),h=e.getModel(\"itemStyle.emphasis\").getItemStyle();co(l.style,h,a,s,{labelFetcher:t,labelDataIndex:e.dataIndex,defaultText:e.id,isRectText:!0}),l.setStyle(\"fill\",e.getVisual(\"color\")),uo(l,h),o.add(l),r.setItemGraphicEl(e.dataIndex,l),l.dataType=\"node\"}),!this._data&&t.get(\"animation\")&&o.setClipPath(Xc(o.getBoundingRect(),t,function(){o.removeClipPath()})),this._data=t.getData()},dispose:function(){}});or(function(t,e,i){t.eachSeriesByType(\"sankey\",function(t){var i=t.get(\"nodeWidth\"),n=t.get(\"nodeGap\"),o=qc(t,e);t.layoutInfo=o;var a=o.width,r=o.height,s=t.getGraph(),l=s.nodes,h=s.edges;$c(l),Yc(l,h,i,n,a,r,0!==p(l,function(t){return 0===t.getLayout().value}).length?0:t.get(\"layoutIterations\"))})}),ar(function(t,e){t.eachSeriesByType(\"sankey\",function(t){var e=t.getGraph().nodes;e.sort(function(t,e){return t.getLayout().value-e.getLayout().value});var i=e[0].getLayout().value,n=e[e.length-1].getLayout().value;d(e,function(e){var o=new jI({type:\"color\",mappingMethod:\"linear\",dataExtent:[i,n],visual:t.get(\"color\")}).mapValueToVisual(e.getLayout().value);e.setVisual(\"color\",o);var a=e.getModel().get(\"itemStyle.normal.color\");null!=a&&e.setVisual(\"color\",a)})})});var cA=Nn.extend({type:\"whiskerInBox\",shape:{},buildPath:function(t,e){for(var i in e)if(e.hasOwnProperty(i)&&0===i.indexOf(\"ends\")){var n=e[i];t.moveTo(n[0][0],n[0][1]),t.lineTo(n[1][0],n[1][1])}}}),dA=pd.prototype;dA._createContent=function(t,e,i){var n=t.getItemLayout(e),o=\"horizontal\"===n.chartLayout?1:0,a=0;this.add(new ub({shape:{points:i?md(n.bodyEnds,o,n):n.bodyEnds},style:{strokeNoScale:!0},z2:100})),this.bodyIndex=a++;var r=f(n.whiskerEnds,function(t){return i?md(t,o,n):t});this.add(new cA({shape:vd(r),style:{strokeNoScale:!0},z2:100})),this.whiskerIndex=a++},dA.updateData=function(t,e,i){var n=this._seriesModel=t.hostModel,o=t.getItemLayout(e),a=Tb[i?\"initProps\":\"updateProps\"];a(this.childAt(this.bodyIndex),{shape:{points:o.bodyEnds}},n,e),a(this.childAt(this.whiskerIndex),{shape:vd(o.whiskerEnds)},n,e),this.styleUpdater.call(null,this,t,e)},h(pd,jy);var fA=yd.prototype;fA.updateData=function(t){var e=this.group,i=this._data,n=this.styleUpdater;t.diff(i).add(function(i){if(t.hasValue(i)){var o=new pd(t,i,n,!0);t.setItemGraphicEl(i,o),e.add(o)}}).update(function(o,a){var r=i.getItemGraphicEl(a);t.hasValue(o)?(r?r.updateData(t,o):r=new pd(t,o,n),e.add(r),t.setItemGraphicEl(o,r)):e.remove(r)}).remove(function(t){var n=i.getItemGraphicEl(t);n&&e.remove(n)}).execute(),this._data=t},fA.remove=function(){var t=this.group,e=this._data;this._data=null,e&&e.eachItemGraphicEl(function(e){e&&t.remove(e)})};var gA={_baseAxisDim:null,getInitialData:function(t,e){var i,n,o=e.getComponent(\"xAxis\",this.get(\"xAxisIndex\")),a=e.getComponent(\"yAxis\",this.get(\"yAxisIndex\")),r=o.get(\"type\"),s=a.get(\"type\");\"category\"===r?(t.layout=\"horizontal\",i=o.getCategories(),n=!0):\"category\"===s?(t.layout=\"vertical\",i=a.getCategories(),n=!0):t.layout=t.layout||\"horizontal\";var l=[\"x\",\"y\"],h=\"horizontal\"===t.layout?0:1,u=this._baseAxisDim=l[h],c=l[1-h],f=t.data;n&&d(f,function(t,e){t.value&&y(t.value)?t.value.unshift(e):y(t)&&t.unshift(e)});var g=this.defaultValueDimensions,p=[{name:u,otherDims:{tooltip:!1},dimsDef:[\"base\"]},{name:c,dimsDef:g.slice()}];p=xr(p,f,{encodeDef:this.get(\"encode\"),dimsDef:this.get(\"dimensions\"),dimCount:g.length+1});var m=new aS(p,this);return m.initData(f,i?i.slice():null),m},getBaseAxis:function(){var t=this._baseAxisDim;return this.ecModel.getComponent(t+\"Axis\",this.get(t+\"AxisIndex\")).axis}},pA={init:function(){var t=this._whiskerBoxDraw=new yd(this.getStyleUpdater());this.group.add(t.group)},render:function(t,e,i){this._whiskerBoxDraw.updateData(t.getData())},remove:function(t){this._whiskerBoxDraw.remove()}};u(yw.extend({type:\"series.boxplot\",dependencies:[\"xAxis\",\"yAxis\",\"grid\"],defaultValueDimensions:[\"min\",\"Q1\",\"median\",\"Q3\",\"max\"],dimensions:null,defaultOption:{zlevel:0,z:2,coordinateSystem:\"cartesian2d\",legendHoverLink:!0,hoverAnimation:!0,layout:null,boxWidth:[7,50],itemStyle:{normal:{color:\"#fff\",borderWidth:1},emphasis:{borderWidth:2,shadowBlur:5,shadowOffsetX:2,shadowOffsetY:2,shadowColor:\"rgba(0,0,0,0.4)\"}},animationEasing:\"elasticOut\",animationDuration:800}}),gA,!0),u(Ta.extend({type:\"boxplot\",getStyleUpdater:function(){return xd},dispose:N}),pA,!0);var mA=[\"itemStyle\",\"normal\"],vA=[\"itemStyle\",\"emphasis\"],yA=[\"itemStyle\",\"normal\",\"borderColor\"],xA=d;ar(function(t,e){var i=t.get(\"color\");t.eachRawSeriesByType(\"boxplot\",function(e){var n=i[e.seriesIndex%i.length],o=e.getData();o.setVisual({legendSymbol:\"roundRect\",color:e.get(yA)||n}),t.isSeriesFiltered(e)||o.each(function(t){var e=o.getItemModel(t);o.setItemVisual(t,{color:e.get(yA,!0)})})})}),or(function(t){var e=_d(t);xA(e,function(t){var e=t.seriesModels;e.length&&(bd(t),xA(e,function(e,i){wd(e,t.boxOffsetList[i],t.boxWidthList[i])}))})}),u(yw.extend({type:\"series.candlestick\",dependencies:[\"xAxis\",\"yAxis\",\"grid\"],defaultValueDimensions:[\"open\",\"close\",\"lowest\",\"highest\"],dimensions:null,defaultOption:{zlevel:0,z:2,coordinateSystem:\"cartesian2d\",legendHoverLink:!0,hoverAnimation:!0,layout:null,itemStyle:{normal:{color:\"#c23531\",color0:\"#314656\",borderWidth:1,borderColor:\"#c23531\",borderColor0:\"#314656\"},emphasis:{borderWidth:2}},barMaxWidth:null,barMinWidth:null,barWidth:null,animationUpdate:!1,animationEasing:\"linear\",animationDuration:300},getShadowDim:function(){return\"open\"},brushSelector:function(t,e,i){var n=e.getItemLayout(t);return i.rect(n.brushRect)}}),gA,!0),u(Ta.extend({type:\"candlestick\",getStyleUpdater:function(){return Sd},dispose:N}),pA,!0);var _A=[\"itemStyle\",\"normal\"],bA=[\"itemStyle\",\"emphasis\"],wA=[\"itemStyle\",\"normal\",\"borderColor\"],SA=[\"itemStyle\",\"normal\",\"borderColor0\"],MA=[\"itemStyle\",\"normal\",\"color\"],IA=[\"itemStyle\",\"normal\",\"color0\"],TA=T;tr(function(t){t&&y(t.series)&&d(t.series,function(t){b(t)&&\"k\"===t.type&&(t.type=\"candlestick\")})}),ar(function(t,e){t.eachRawSeriesByType(\"candlestick\",function(e){var i=e.getData();i.setVisual({legendSymbol:\"roundRect\"}),t.isSeriesFiltered(e)||i.each(function(t){var e=i.getItemModel(t),n=i.getItemLayout(t).sign;i.setItemVisual(t,{color:e.get(n>0?MA:IA),borderColor:e.get(n>0?wA:SA)})})})}),or(function(t){t.eachSeriesByType(\"candlestick\",function(t){var e,i=t.coordinateSystem,n=t.getData(),o=Md(t,n),a=t.get(\"layout\"),r=\"horizontal\"===a?0:1,s=1-r,l=[\"x\",\"y\"],h=[];if(d(n.dimensions,function(t){var i=n.getDimensionInfo(t).coordDim;i===l[s]?h.push(t):i===l[r]&&(e=t)}),!(null==e||h.length<4)){var u=0;n.each([e].concat(h),function(){function t(t){var e=[];return e[r]=d,e[s]=t,isNaN(d)||isNaN(t)?[NaN,NaN]:i.dataToPoint(e)}function e(t,e){var i=t.slice(),n=t.slice();i[r]=Kn(i[r]+o/2,1,!1),n[r]=Kn(n[r]-o/2,1,!0),e?M.push(i,n):M.push(n,i)}function l(t){return t[r]=Kn(t[r],1),t}var c=arguments,d=c[0],f=c[h.length+1],g=c[1],p=c[2],m=c[3],v=c[4],y=Math.min(g,p),x=Math.max(g,p),_=t(y),b=t(x),w=t(m),S=[[l(t(v)),l(b)],[l(w),l(_)]],M=[];e(b,0),e(_,1);var I;I=g>p?-1:g<p?1:u>0?n.getItemModel(u-1).get()[2]<=p?1:-1:1,n.setItemLayout(f,{chartLayout:a,sign:I,initBaseline:g>p?b[s]:_[s],bodyEnds:M,whiskerEnds:S,brushRect:function(){var e=t(Math.min(g,p,m,v)),i=t(Math.max(g,p,m,v));return e[r]-=o/2,i[r]-=o/2,{x:e[0],y:e[1],width:s?o:i[0]-e[0],height:s?i[1]-e[1]:o}}()}),++u},!0)}})}),yw.extend({type:\"series.effectScatter\",dependencies:[\"grid\",\"polar\"],getInitialData:function(t,e){return Sr(t.data,this,e)},brushSelector:\"point\",defaultOption:{coordinateSystem:\"cartesian2d\",zlevel:0,z:2,legendHoverLink:!0,effectType:\"ripple\",progressive:0,showEffectOn:\"render\",rippleEffect:{period:4,scale:2.5,brushType:\"fill\"},symbolSize:10}});var AA=Ad.prototype;AA.stopEffectAnimation=function(){this.childAt(1).removeAll()},AA.startEffectAnimation=function(t){for(var e=t.symbolType,i=t.color,n=this.childAt(1),o=0;o<3;o++){var a=Hr(e,-1,-1,2,2,i);a.attr({style:{strokeNoScale:!0},z2:99,silent:!0,scale:[.5,.5]});var r=-o/3*t.period+t.effectOffset;a.animate(\"\",!0).when(t.period,{scale:[t.rippleScale/2,t.rippleScale/2]}).delay(r).start(),a.animateStyle(!0).when(t.period,{opacity:0}).delay(r).start(),n.add(a)}Td(n,t)},AA.updateEffectAnimation=function(t){for(var e=this._effectCfg,i=this.childAt(1),n=[\"symbolType\",\"period\",\"rippleScale\"],o=0;o<n.length;o++){var a=n[o];if(e[a]!==t[a])return this.stopEffectAnimation(),void this.startEffectAnimation(t)}Td(i,t)},AA.highlight=function(){this.trigger(\"emphasis\")},AA.downplay=function(){this.trigger(\"normal\")},AA.updateData=function(t,e){var i=t.hostModel;this.childAt(0).updateData(t,e);var n=this.childAt(1),o=t.getItemModel(e),a=t.getItemVisual(e,\"symbol\"),r=Id(t.getItemVisual(e,\"symbolSize\")),s=t.getItemVisual(e,\"color\");n.attr(\"scale\",r),n.traverse(function(t){t.attr({fill:s})});var l=o.getShallow(\"symbolOffset\");if(l){var h=n.position;h[0]=Si(l[0],r[0]),h[1]=Si(l[1],r[1])}n.rotation=(o.getShallow(\"symbolRotate\")||0)*Math.PI/180||0;var u={};if(u.showEffectOn=i.get(\"showEffectOn\"),u.rippleScale=o.get(\"rippleEffect.scale\"),u.brushType=o.get(\"rippleEffect.brushType\"),u.period=1e3*o.get(\"rippleEffect.period\"),u.effectOffset=e/t.count(),u.z=o.getShallow(\"z\")||0,u.zlevel=o.getShallow(\"zlevel\")||0,u.symbolType=a,u.color=s,this.off(\"mouseover\").off(\"mouseout\").off(\"emphasis\").off(\"normal\"),\"render\"===u.showEffectOn)this._effectCfg?this.updateEffectAnimation(u):this.startEffectAnimation(u),this._effectCfg=u;else{this._effectCfg=null,this.stopEffectAnimation();var c=this.childAt(0),d=function(){c.highlight(),\"render\"!==u.showEffectOn&&this.startEffectAnimation(u)},f=function(){c.downplay(),\"render\"!==u.showEffectOn&&this.stopEffectAnimation()};this.on(\"mouseover\",d,this).on(\"mouseout\",f,this).on(\"emphasis\",d,this).on(\"normal\",f,this)}this._effectCfg=u},AA.fadeOut=function(t){this.off(\"mouseover\").off(\"mouseout\").off(\"emphasis\").off(\"normal\"),t&&t()},h(Ad,jy),ur({type:\"effectScatter\",init:function(){this._symbolDraw=new ts(Ad)},render:function(t,e,i){var n=t.getData(),o=this._symbolDraw;o.updateData(n),this.group.add(o.group)},updateLayout:function(){this._symbolDraw.updateLayout()},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(e)},dispose:function(){}}),ar(v(cM,\"effectScatter\",\"circle\",null)),or(v(dM,\"effectScatter\"));var CA=yw.extend({type:\"series.lines\",dependencies:[\"grid\",\"polar\"],visualColorAccessPath:\"lineStyle.normal.color\",init:function(t){Cd(t),CA.superApply(this,\"init\",arguments)},mergeOption:function(t){Cd(t),CA.superApply(this,\"mergeOption\",arguments)},getInitialData:function(t,e){var i=new aS([\"value\"],this);return i.hasItemOption=!1,i.initData(t.data,[],function(t,e,n,o){if(t instanceof Array)return NaN;i.hasItemOption=!0;var a=t.value;return null!=a?a instanceof Array?a[o]:a:void 0}),i},formatTooltip:function(t){var e=this.getData().getItemModel(t),i=e.get(\"name\");if(i)return i;var n=e.get(\"fromName\"),o=e.get(\"toName\"),a=[];return null!=n&&a.push(n),null!=o&&a.push(o),Gi(a.join(\" > \"))},defaultOption:{coordinateSystem:\"geo\",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,xAxisIndex:0,yAxisIndex:0,symbol:[\"none\",\"none\"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:\"circle\",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,label:{normal:{show:!1,position:\"end\"}},lineStyle:{normal:{opacity:.5}}}}),DA=Dd.prototype;DA.createLine=function(t,e,i){return new bu(t,e,i)},DA._updateEffectSymbol=function(t,e){var i=t.getItemModel(e).getModel(\"effect\"),n=i.get(\"symbolSize\"),o=i.get(\"symbol\");y(n)||(n=[n,n]);var a=i.get(\"color\")||t.getItemVisual(e,\"color\"),r=this.childAt(1);this._symbolType!==o&&(this.remove(r),(r=Hr(o,-.5,-.5,1,1,a)).z2=100,r.culling=!0,this.add(r)),r&&(r.setStyle(\"shadowColor\",a),r.setStyle(i.getItemStyle([\"color\"])),r.attr(\"scale\",n),r.setColor(a),r.attr(\"scale\",n),this._symbolType=o,this._updateEffectAnimation(t,i,e))},DA._updateEffectAnimation=function(t,e,i){var n=this.childAt(1);if(n){var o=this,a=t.getItemLayout(i),r=1e3*e.get(\"period\"),s=e.get(\"loop\"),l=e.get(\"constantSpeed\"),h=I(e.get(\"delay\"),function(e){return e/t.count()*r/3}),u=\"function\"==typeof h;if(n.ignore=!0,this.updateAnimationPoints(n,a),l>0&&(r=this.getLineLength(n)/l*1e3),r!==this._period||s!==this._loop){n.stopAnimation();var c=h;u&&(c=h(i)),n.__t>0&&(c=-r*n.__t),n.__t=0;var d=n.animate(\"\",s).when(r,{__t:1}).delay(c).during(function(){o.updateSymbolPosition(n)});s||d.done(function(){o.remove(n)}),d.start()}this._period=r,this._loop=s}},DA.getLineLength=function(t){return hy(t.__p1,t.__cp1)+hy(t.__cp1,t.__p2)},DA.updateAnimationPoints=function(t,e){t.__p1=e[0],t.__p2=e[1],t.__cp1=e[2]||[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},DA.updateData=function(t,e,i){this.childAt(0).updateData(t,e,i),this._updateEffectSymbol(t,e)},DA.updateSymbolPosition=function(t){var e=t.__p1,i=t.__p2,n=t.__cp1,o=t.__t,a=t.position,r=un,s=cn;a[0]=r(e[0],n[0],i[0],o),a[1]=r(e[1],n[1],i[1],o);var l=s(e[0],n[0],i[0],o),h=s(e[1],n[1],i[1],o);t.rotation=-Math.atan2(h,l)-Math.PI/2,t.ignore=!1},DA.updateLayout=function(t,e){this.childAt(0).updateLayout(t,e);var i=t.getItemModel(e).getModel(\"effect\");this._updateEffectAnimation(t,i,e)},h(Dd,jy);var LA=Ld.prototype;LA._createPolyline=function(t,e,i){var n=t.getItemLayout(e),o=new cb({shape:{points:n}});this.add(o),this._updateCommonStl(t,e,i)},LA.updateData=function(t,e,i){var n=t.hostModel;wo(this.childAt(0),{shape:{points:t.getItemLayout(e)}},n,e),this._updateCommonStl(t,e,i)},LA._updateCommonStl=function(t,e,i){var n=this.childAt(0),o=t.getItemModel(e),a=t.getItemVisual(e,\"color\"),s=i&&i.lineStyle,l=i&&i.hoverLineStyle;i&&!t.hasItemOption||(s=o.getModel(\"lineStyle.normal\").getLineStyle(),l=o.getModel(\"lineStyle.emphasis\").getLineStyle()),n.useStyle(r({strokeNoScale:!0,fill:\"none\",stroke:a},s)),n.hoverStyle=l,uo(this)},LA.updateLayout=function(t,e){this.childAt(0).setShape(\"points\",t.getItemLayout(e))},h(Ld,jy);var kA=kd.prototype;kA.createLine=function(t,e,i){return new Ld(t,e,i)},kA.updateAnimationPoints=function(t,e){this._points=e;for(var i=[0],n=0,o=1;o<e.length;o++){var a=e[o-1],r=e[o];n+=hy(a,r),i.push(n)}if(0!==n){for(o=0;o<i.length;o++)i[o]/=n;this._offsets=i,this._length=n}},kA.getLineLength=function(t){return this._length},kA.updateSymbolPosition=function(t){var e=t.__t,i=this._points,n=this._offsets,o=i.length;if(n){var a=this._lastFrame;if(e<this._lastFramePercent){for(r=Math.min(a+1,o-1);r>=0&&!(n[r]<=e);r--);r=Math.min(r,o-2)}else{for(var r=a;r<o&&!(n[r]>e);r++);r=Math.min(r-1,o-2)}Y(t.position,i[r],i[r+1],(e-n[r])/(n[r+1]-n[r]));var s=i[r+1][0]-i[r][0],l=i[r+1][1]-i[r][1];t.rotation=-Math.atan2(l,s)-Math.PI/2,this._lastFrame=r,this._lastFramePercent=e,t.ignore=!1}},h(kd,Dd);var PA=Zn({shape:{polyline:!1,segs:[]},buildPath:function(t,e){for(var i=e.segs,n=e.polyline,o=0;o<i.length;o++){var a=i[o];if(n){t.moveTo(a[0][0],a[0][1]);for(var r=1;r<a.length;r++)t.lineTo(a[r][0],a[r][1])}else t.moveTo(a[0][0],a[0][1]),a.length>2?t.quadraticCurveTo(a[2][0],a[2][1],a[1][0],a[1][1]):t.lineTo(a[1][0],a[1][1])}},findDataIndex:function(t,e){for(var i=this.shape,n=i.segs,o=i.polyline,a=Math.max(this.style.lineWidth,1),r=0;r<n.length;r++){var s=n[r];if(o){for(var l=1;l<s.length;l++)if(bn(s[l-1][0],s[l-1][1],s[l][0],s[l][1],a,t,e))return r}else if(s.length>2){if(Sn(s[0][0],s[0][1],s[2][0],s[2][1],s[1][0],s[1][1],a,t,e))return r}else if(bn(s[0][0],s[0][1],s[1][0],s[1][1],a,t,e))return r}return-1}}),OA=Pd.prototype;OA.updateData=function(t){this.group.removeAll();var e=this._lineEl,i=t.hostModel;e.setShape({segs:t.mapArray(t.getItemLayout),polyline:i.get(\"polyline\")}),e.useStyle(i.getModel(\"lineStyle.normal\").getLineStyle());var n=t.getVisual(\"color\");n&&e.setStyle(\"stroke\",n),e.setStyle(\"fill\"),e.seriesIndex=i.seriesIndex,e.on(\"mousemove\",function(t){e.dataIndex=null;var i=e.findDataIndex(t.offsetX,t.offsetY);i>0&&(e.dataIndex=i)}),this.group.add(e)},OA.updateLayout=function(t){var e=t.getData();this._lineEl.setShape({segs:e.mapArray(e.getItemLayout)})},OA.remove=function(){this.group.removeAll()},ur({type:\"lines\",init:function(){},render:function(t,e,i){var n=t.getData(),o=this._lineDraw,a=t.get(\"effect.show\"),r=t.get(\"polyline\"),s=t.get(\"large\")&&n.count()>=t.get(\"largeThreshold\");a===this._hasEffet&&r===this._isPolyline&&s===this._isLarge||(o&&o.remove(),o=this._lineDraw=s?new Pd:new Mu(r?a?kd:Ld:a?Dd:bu),this._hasEffet=a,this._isPolyline=r,this._isLarge=s);var l=t.get(\"zlevel\"),h=t.get(\"effect.trailLength\"),u=i.getZr(),c=\"svg\"===u.painter.getType();c||u.painter.getLayer(l).clear(!0),null==this._lastZlevel||c||u.configLayer(this._lastZlevel,{motionBlur:!1}),a&&h&&(c||u.configLayer(l,{motionBlur:!0,lastFrameAlpha:Math.max(Math.min(h/10+.9,1),0)})),this.group.add(o.group),o.updateData(n),this._lastZlevel=l},updateLayout:function(t,e,i){this._lineDraw.updateLayout(t);var n=i.getZr();\"svg\"===n.painter.getType()||n.painter.getLayer(this._lastZlevel).clear(!0)},remove:function(t,e){this._lineDraw&&this._lineDraw.remove(e,!0);var i=e.getZr();\"svg\"===i.painter.getType()||i.painter.getLayer(this._lastZlevel).clear(!0)},dispose:function(){}});or(function(t){t.eachSeriesByType(\"lines\",function(t){var e=t.coordinateSystem,i=t.getData();i.each(function(n){var o=i.getItemModel(n),a=o.option instanceof Array?o.option:o.get(\"coords\"),r=[];if(t.get(\"polyline\"))for(var s=0;s<a.length;s++)r.push(e.dataToPoint(a[s]));else{r[0]=e.dataToPoint(a[0]),r[1]=e.dataToPoint(a[1]);var l=o.get(\"lineStyle.normal.curveness\");+l&&(r[2]=[(r[0][0]+r[1][0])/2-(r[0][1]-r[1][1])*l,(r[0][1]+r[1][1])/2-(r[1][0]-r[0][0])*l])}i.setItemLayout(n,r)})})}),ar(function(t){t.eachSeriesByType(\"lines\",function(t){var e=t.getData(),i=Od(t.get(\"symbol\")),n=Od(t.get(\"symbolSize\")),o=\"lineStyle.normal.opacity\".split(\".\");e.setVisual(\"fromSymbol\",i&&i[0]),e.setVisual(\"toSymbol\",i&&i[1]),e.setVisual(\"fromSymbolSize\",n&&n[0]),e.setVisual(\"toSymbolSize\",n&&n[1]),e.setVisual(\"opacity\",t.get(o)),e.each(function(t){var i=e.getItemModel(t),n=Od(i.getShallow(\"symbol\",!0)),a=Od(i.getShallow(\"symbolSize\",!0)),r=i.get(o);n[0]&&e.setItemVisual(t,\"fromSymbol\",n[0]),n[1]&&e.setItemVisual(t,\"toSymbol\",n[1]),a[0]&&e.setItemVisual(t,\"fromSymbolSize\",a[0]),a[1]&&e.setItemVisual(t,\"toSymbolSize\",a[1]),e.setItemVisual(t,\"opacity\",r)})})}),yw.extend({type:\"series.heatmap\",getInitialData:function(t,e){return Sr(t.data,this,e)},defaultOption:{coordinateSystem:\"cartesian2d\",zlevel:0,z:2,geoIndex:0,blurSize:30,pointSize:20,maxOpacity:1,minOpacity:0}});zd.prototype={update:function(t,e,i,n,o,a){var r=this._getBrush(),s=this._getGradient(t,o,\"inRange\"),l=this._getGradient(t,o,\"outOfRange\"),h=this.pointSize+this.blurSize,u=this.canvas,c=u.getContext(\"2d\"),d=t.length;u.width=e,u.height=i;for(var f=0;f<d;++f){var g=t[f],p=g[0],m=g[1],v=n(g[2]);c.globalAlpha=v,c.drawImage(r,p-h,m-h)}if(!u.width||!u.height)return u;for(var y=c.getImageData(0,0,u.width,u.height),x=y.data,_=0,b=x.length,w=this.minOpacity,S=this.maxOpacity-w;_<b;){var v=x[_+3]/256,M=4*Math.floor(255*v);if(v>0){var I=a(v)?s:l;v>0&&(v=v*S+w),x[_++]=I[M],x[_++]=I[M+1],x[_++]=I[M+2],x[_++]=I[M+3]*v*256}else _+=4}return c.putImageData(y,0,0),u},_getBrush:function(){var t=this._brushCanvas||(this._brushCanvas=iy()),e=this.pointSize+this.blurSize,i=2*e;t.width=i,t.height=i;var n=t.getContext(\"2d\");return n.clearRect(0,0,i,i),n.shadowOffsetX=i,n.shadowBlur=this.blurSize,n.shadowColor=\"#000\",n.beginPath(),n.arc(-e,e,this.pointSize,0,2*Math.PI,!0),n.closePath(),n.fill(),t},_getGradient:function(t,e,i){for(var n=this._gradientPixels,o=n[i]||(n[i]=new Uint8ClampedArray(1024)),a=[0,0,0,0],r=0,s=0;s<256;s++)e[i](s/255,!0,a),o[r++]=a[0],o[r++]=a[1],o[r++]=a[2],o[r++]=a[3];return o}},ur({type:\"heatmap\",render:function(t,e,i){var n;e.eachComponent(\"visualMap\",function(e){e.eachTargetSeries(function(i){i===t&&(n=e)})}),this.group.removeAll();var o=t.coordinateSystem;\"cartesian2d\"===o.type||\"calendar\"===o.type?this._renderOnCartesianAndCalendar(o,t,i):Rd(o)&&this._renderOnGeo(o,t,n,i)},dispose:function(){},_renderOnCartesianAndCalendar:function(t,e,i){if(\"cartesian2d\"===t.type)var n=t.getAxis(\"x\"),o=t.getAxis(\"y\"),r=n.getBandWidth(),s=o.getBandWidth();var l=this.group,h=e.getData(),u=e.getModel(\"itemStyle.normal\").getItemStyle([\"color\"]),c=e.getModel(\"itemStyle.emphasis\").getItemStyle(),d=e.getModel(\"label.normal\"),f=e.getModel(\"label.emphasis\"),g=t.type,p=\"cartesian2d\"===g?[e.coordDimToDataDim(\"x\")[0],e.coordDimToDataDim(\"y\")[0],e.coordDimToDataDim(\"value\")[0]]:[e.coordDimToDataDim(\"time\")[0],e.coordDimToDataDim(\"value\")[0]];h.each(function(i){var n;if(\"cartesian2d\"===g){if(isNaN(h.get(p[2],i)))return;var o=t.dataToPoint([h.get(p[0],i),h.get(p[1],i)]);n=new db({shape:{x:o[0]-r/2,y:o[1]-s/2,width:r,height:s},style:{fill:h.getItemVisual(i,\"color\"),opacity:h.getItemVisual(i,\"opacity\")}})}else{if(isNaN(h.get(p[1],i)))return;n=new db({z2:1,shape:t.dataToRect([h.get(p[0],i)]).contentShape,style:{fill:h.getItemVisual(i,\"color\"),opacity:h.getItemVisual(i,\"opacity\")}})}var m=h.getItemModel(i);h.hasItemOption&&(u=m.getModel(\"itemStyle.normal\").getItemStyle([\"color\"]),c=m.getModel(\"itemStyle.emphasis\").getItemStyle(),d=m.getModel(\"label.normal\"),f=m.getModel(\"label.emphasis\"));var v=e.getRawValue(i),y=\"-\";v&&null!=v[2]&&(y=v[2]),co(u,c,d,f,{labelFetcher:e,labelDataIndex:i,defaultText:y,isRectText:!0}),n.setStyle(u),uo(n,h.hasItemOption?c:a({},c)),l.add(n),h.setItemGraphicEl(i,n)})},_renderOnGeo:function(t,e,i,n){var o=i.targetVisuals.inRange,a=i.targetVisuals.outOfRange,r=e.getData(),s=this._hmLayer||this._hmLayer||new zd;s.blurSize=e.get(\"blurSize\"),s.pointSize=e.get(\"pointSize\"),s.minOpacity=e.get(\"minOpacity\"),s.maxOpacity=e.get(\"maxOpacity\");var l=t.getViewRect().clone(),h=t.getRoamTransform().transform;l.applyTransform(h);var u=Math.max(l.x,0),c=Math.max(l.y,0),d=Math.min(l.width+l.x,n.getWidth()),f=Math.min(l.height+l.y,n.getHeight()),g=d-u,p=f-c,m=r.mapArray([\"lng\",\"lat\",\"value\"],function(e,i,n){var o=t.dataToPoint([e,i]);return o[0]-=u,o[1]-=c,o.push(n),o}),v=i.getExtent(),y=\"visualMap.continuous\"===i.type?Ed(v,i.option.range):Nd(v,i.getPieceList(),i.option.selected);s.update(m,g,p,o.color.getNormalizer(),{inRange:o.color.getColorMapper(),outOfRange:a.color.getColorMapper()},y);var x=new qe({style:{width:g,height:p,x:u,y:c,image:s.canvas},silent:!0});this.group.add(x)}});var zA=ZM.extend({type:\"series.pictorialBar\",dependencies:[\"grid\"],defaultOption:{symbol:\"circle\",symbolSize:null,symbolRotate:null,symbolPosition:null,symbolOffset:null,symbolMargin:null,symbolRepeat:!1,symbolRepeatDirection:\"end\",symbolClip:!1,symbolBoundingData:null,symbolPatternSize:400,barGap:\"-100%\",progressive:0,hoverAnimation:!1},getInitialData:function(t){return t.stack=null,zA.superApply(this,\"getInitialData\",arguments)}}),NA=[\"itemStyle\",\"normal\",\"borderWidth\"],EA=[{xy:\"x\",wh:\"width\",index:0,posDesc:[\"left\",\"right\"]},{xy:\"y\",wh:\"height\",index:1,posDesc:[\"top\",\"bottom\"]}],RA=new nb;ur({type:\"pictorialBar\",render:function(t,e,i){var n=this.group,o=t.getData(),a=this._data,r=t.coordinateSystem,s=!!r.getBaseAxis().isHorizontal(),l=r.grid.getRect(),h={ecSize:{width:i.getWidth(),height:i.getHeight()},seriesModel:t,coordSys:r,coordSysExtent:[[l.x,l.x+l.width],[l.y,l.y+l.height]],isHorizontal:s,valueDim:EA[+s],categoryDim:EA[1-s]};return o.diff(a).add(function(t){if(o.hasValue(t)){var e=Yd(o,t),i=Vd(o,t,e,h),a=Qd(o,h,i);o.setItemGraphicEl(t,a),n.add(a),rf(a,h,i)}}).update(function(t,e){var i=a.getItemGraphicEl(e);if(o.hasValue(t)){var r=Yd(o,t),s=Vd(o,t,r,h),l=nf(o,s);i&&l!==i.__pictorialShapeStr&&(n.remove(i),o.setItemGraphicEl(t,null),i=null),i?tf(i,h,s):i=Qd(o,h,s,!0),o.setItemGraphicEl(t,i),i.__pictorialSymbolMeta=s,n.add(i),rf(i,h,s)}else n.remove(i)}).remove(function(t){var e=a.getItemGraphicEl(t);e&&ef(a,t,e.__pictorialSymbolMeta.animationModel,e)}).execute(),this._data=o,this.group},dispose:N,remove:function(t,e){var i=this.group,n=this._data;t.get(\"animation\")?n&&n.eachItemGraphicEl(function(e){ef(n,e.dataIndex,t,e)}):i.removeAll()}});or(v(nl,\"pictorialBar\")),ar(v(cM,\"pictorialBar\",\"roundRect\",null));var VA=function(t,e,i,n,o){US.call(this,t,e,i),this.type=n||\"value\",this.position=o||\"bottom\",this.orient=null,this._labelInterval=null};VA.prototype={constructor:VA,model:null,isHorizontal:function(){var t=this.position;return\"top\"===t||\"bottom\"===t},pointToData:function(t,e){return this.coordinateSystem.pointToData(t,e)[0]},toGlobalCoord:null,toLocalCoord:null},h(VA,US),lf.prototype={type:\"singleAxis\",axisPointerEnabled:!0,constructor:lf,_init:function(t,e,i){var n=this.dimension,o=new VA(n,Er(t),[0,0],t.get(\"type\"),t.get(\"position\")),a=\"category\"===o.type;o.onBand=a&&t.get(\"boundaryGap\"),o.inverse=t.get(\"inverse\"),o.orient=t.get(\"orient\"),t.axis=o,o.model=t,o.coordinateSystem=this,this._axis=o},update:function(t,e){t.eachSeries(function(t){if(t.coordinateSystem===this){var e=t.getData(),i=this.dimension;this._axis.scale.unionExtentFromData(e,t.coordDimToDataDim(i)),Nr(this._axis.scale,this._axis.model)}},this)},resize:function(t,e){this._rect=Ko({left:t.get(\"left\"),top:t.get(\"top\"),right:t.get(\"right\"),bottom:t.get(\"bottom\"),width:t.get(\"width\"),height:t.get(\"height\")},{width:e.getWidth(),height:e.getHeight()}),this._adjustAxis()},getRect:function(){return this._rect},_adjustAxis:function(){var t=this._rect,e=this._axis,i=e.isHorizontal(),n=i?[0,t.width]:[0,t.height],o=e.reverse?1:0;e.setExtent(n[o],n[1-o]),this._updateAxisTransform(e,i?t.x:t.y)},_updateAxisTransform:function(t,e){var i=t.getExtent(),n=i[0]+i[1],o=t.isHorizontal();t.toGlobalCoord=o?function(t){return t+e}:function(t){return n-t+e},t.toLocalCoord=o?function(t){return t-e}:function(t){return n-t+e}},getAxis:function(){return this._axis},getBaseAxis:function(){return this._axis},getAxes:function(){return[this._axis]},getTooltipAxes:function(){return{baseAxes:[this.getAxis()]}},containPoint:function(t){var e=this.getRect(),i=this.getAxis();return\"horizontal\"===i.orient?i.contain(i.toLocalCoord(t[0]))&&t[1]>=e.y&&t[1]<=e.y+e.height:i.contain(i.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},pointToData:function(t){var e=this.getAxis();return[e.coordToData(e.toLocalCoord(t[\"horizontal\"===e.orient?0:1]))]},dataToPoint:function(t){var e=this.getAxis(),i=this.getRect(),n=[],o=\"horizontal\"===e.orient?0:1;return t instanceof Array&&(t=t[0]),n[o]=e.toGlobalCoord(e.dataToCoord(+t)),n[1-o]=0===o?i.y+i.height/2:i.x+i.width/2,n}},ua.register(\"single\",{create:function(t,e){var i=[];return t.eachComponent(\"singleAxis\",function(n,o){var a=new lf(n,t,e);a.name=\"single_\"+o,a.resize(n,e),n.coordinateSystem=a,i.push(a)}),t.eachSeries(function(e){if(\"singleAxis\"===e.get(\"coordinateSystem\")){var i=t.queryComponents({mainType:\"singleAxis\",index:e.get(\"singleAxisIndex\"),id:e.get(\"singleAxisId\")})[0];e.coordinateSystem=i&&i.coordinateSystem}}),i},dimensions:lf.prototype.dimensions});var BA=DM.getInterval,GA=DM.ifIgnoreOnTick,WA=[\"axisLine\",\"axisTickLabel\",\"axisName\"],HA=EM.extend({type:\"singleAxis\",axisPointerClass:\"SingleAxisPointer\",render:function(t,e,i,n){var o=this.group;o.removeAll();var a=hf(t),r=new DM(t,a);d(WA,r.add,r),o.add(r.getGroup()),t.get(\"splitLine.show\")&&this._splitLine(t,a.labelInterval),HA.superCall(this,\"render\",t,e,i,n)},_splitLine:function(t,e){var i=t.axis;if(!i.scale.isBlank()){var n=t.getModel(\"splitLine\"),o=n.getModel(\"lineStyle\"),a=o.get(\"width\"),r=o.get(\"color\"),s=BA(n,e);r=r instanceof Array?r:[r];for(var l=t.coordinateSystem.getRect(),h=i.isHorizontal(),u=[],c=0,d=i.getTicksCoords(),f=[],g=[],p=t.get(\"axisLabel.showMinLabel\"),m=t.get(\"axisLabel.showMaxLabel\"),v=0;v<d.length;++v)if(!GA(i,v,s,d.length,p,m)){var y=i.toGlobalCoord(d[v]);h?(f[0]=y,f[1]=l.y,g[0]=y,g[1]=l.y+l.height):(f[0]=l.x,f[1]=y,g[0]=l.x+l.width,g[1]=y);var x=c++%r.length;u[x]=u[x]||[],u[x].push(new fb(Yn({shape:{x1:f[0],y1:f[1],x2:g[0],y2:g[1]},style:{lineWidth:a},silent:!0})))}for(v=0;v<u.length;++v)this.group.add(Ib(u[v],{style:{stroke:r[v%r.length],lineDash:o.getLineDash(a),lineWidth:a},silent:!0}))}}}),FA=Ub.extend({type:\"singleAxis\",layoutMode:\"box\",axis:null,coordinateSystem:null,getCoordSysModel:function(){return this}}),ZA={left:\"5%\",top:\"5%\",right:\"5%\",bottom:\"5%\",type:\"value\",position:\"bottom\",orient:\"horizontal\",axisLine:{show:!0,lineStyle:{width:2,type:\"solid\"}},tooltip:{show:!0},axisTick:{show:!0,length:6,lineStyle:{width:2}},axisLabel:{show:!0,interval:\"auto\"},splitLine:{show:!0,lineStyle:{type:\"dashed\",opacity:.2}}};n(FA.prototype,zS),_M(\"single\",FA,function(t,e){return e.type||(e.data?\"category\":\"value\")},ZA);var UA=function(t,e){var i,n=[],o=t.seriesIndex;if(null==o||!(i=e.getSeriesByIndex(o)))return{point:[]};var a=i.getData(),r=Ho(a,t);if(null==r||y(r))return{point:[]};var s=a.getItemGraphicEl(r),l=i.coordinateSystem;if(i.getTooltipPosition)n=i.getTooltipPosition(r)||[];else if(l&&l.dataToPoint)n=l.dataToPoint(a.getValues(f(l.dimensions,function(t){return i.coordDimToDataDim(t)[0]}),r,!0))||[];else if(s){var h=s.getBoundingRect().clone();h.applyTransform(s.transform),n=[h.x+h.width/2,h.y+h.height/2]}return{point:n,el:s}},XA=d,jA=v,qA=Eb(),YA=(sr({type:\"axisPointer\",coordSysAxesInfo:null,defaultOption:{show:\"auto\",triggerOn:null,zlevel:0,z:50,type:\"line\",snap:!1,triggerTooltip:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:\"#aaa\",width:1,type:\"solid\"},shadowStyle:{color:\"rgba(150,150,150,0.3)\"},label:{show:!0,formatter:null,precision:\"auto\",margin:3,color:\"#fff\",padding:[5,7,5,7],backgroundColor:\"auto\",borderColor:null,borderWidth:0,shadowBlur:3,shadowColor:\"#aaa\"},handle:{show:!1,icon:\"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z\",size:45,margin:50,color:\"#333\",shadowBlur:3,shadowColor:\"#aaa\",shadowOffsetX:0,shadowOffsetY:2,throttle:40}}}),Eb()),$A=d,KA=lr({type:\"axisPointer\",render:function(t,e,i){var n=e.getComponent(\"tooltip\"),o=t.get(\"triggerOn\")||n&&n.get(\"triggerOn\")||\"mousemove|click\";_f(\"axisPointer\",i,function(t,e,i){\"none\"!==o&&(\"leave\"===t||o.indexOf(t)>=0)&&i({type:\"updateAxisPointer\",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})})},remove:function(t,e){Tf(e.getZr(),\"axisPointer\"),KA.superApply(this._model,\"remove\",arguments)},dispose:function(t,e){Tf(\"axisPointer\",e),KA.superApply(this._model,\"dispose\",arguments)}}),JA=Eb(),QA=i,tC=m;(Af.prototype={_group:null,_lastGraphicKey:null,_handle:null,_dragging:!1,_lastValue:null,_lastStatus:null,_payloadInfo:null,animationThreshold:15,render:function(t,e,i,n){var o=e.get(\"value\"),a=e.get(\"status\");if(this._axisModel=t,this._axisPointerModel=e,this._api=i,n||this._lastValue!==o||this._lastStatus!==a){this._lastValue=o,this._lastStatus=a;var r=this._group,s=this._handle;if(!a||\"hide\"===a)return r&&r.hide(),void(s&&s.hide());r&&r.show(),s&&s.show();var l={};this.makeElOption(l,o,t,e,i);var h=l.graphicKey;h!==this._lastGraphicKey&&this.clear(i),this._lastGraphicKey=h;var u=this._moveAnimation=this.determineAnimation(t,e);if(r){var c=v(Cf,e,u);this.updatePointerEl(r,l,c,e),this.updateLabelEl(r,l,c,e)}else r=this._group=new jy,this.createPointerEl(r,l,t,e),this.createLabelEl(r,l,t,e),i.getZr().add(r);Pf(r,e,!0),this._renderHandle(o)}},remove:function(t){this.clear(t)},dispose:function(t){this.clear(t)},determineAnimation:function(t,e){var i=e.get(\"animation\"),n=t.axis,o=\"category\"===n.type,a=e.get(\"snap\");if(!a&&!o)return!1;if(\"auto\"===i||null==i){var r=this.animationThreshold;if(o&&n.getBandWidth()>r)return!0;if(a){var s=Xs(t).seriesDataCount,l=n.getExtent();return Math.abs(l[0]-l[1])/s>r}return!1}return!0===i},makeElOption:function(t,e,i,n,o){},createPointerEl:function(t,e,i,n){var o=e.pointer;if(o){var a=JA(t).pointerEl=new Tb[o.type](QA(e.pointer));t.add(a)}},createLabelEl:function(t,e,i,n){if(e.label){var o=JA(t).labelEl=new db(QA(e.label));t.add(o),Lf(o,n)}},updatePointerEl:function(t,e,i){var n=JA(t).pointerEl;n&&(n.setStyle(e.pointer.style),i(n,{shape:e.pointer.shape}))},updateLabelEl:function(t,e,i,n){var o=JA(t).labelEl;o&&(o.setStyle(e.label.style),i(o,{shape:e.label.shape,position:e.label.position}),Lf(o,n))},_renderHandle:function(t){if(!this._dragging&&this.updateHandleTransform){var e=this._axisPointerModel,i=this._api.getZr(),n=this._handle,o=e.getModel(\"handle\"),a=e.get(\"status\");if(!o.get(\"show\")||!a||\"hide\"===a)return n&&i.remove(n),void(this._handle=null);var r;this._handle||(r=!0,n=this._handle=Do(o.get(\"icon\"),{cursor:\"move\",draggable:!0,onmousemove:function(t){bx(t.event)},onmousedown:tC(this._onHandleDragMove,this,0,0),drift:tC(this._onHandleDragMove,this),ondragend:tC(this._onHandleDragEnd,this)}),i.add(n)),Pf(n,e,!1);var s=[\"color\",\"borderColor\",\"borderWidth\",\"opacity\",\"shadowColor\",\"shadowBlur\",\"shadowOffsetX\",\"shadowOffsetY\"];n.setStyle(o.getItemStyle(null,s));var l=o.get(\"size\");y(l)||(l=[l,l]),n.attr(\"scale\",[l[0]/2,l[1]/2]),La(this,\"_doDispatchAxisPointer\",o.get(\"throttle\")||0,\"fixRate\"),this._moveHandleToValue(t,r)}},_moveHandleToValue:function(t,e){Cf(this._axisPointerModel,!e&&this._moveAnimation,this._handle,kf(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},_onHandleDragMove:function(t,e){var i=this._handle;if(i){this._dragging=!0;var n=this.updateHandleTransform(kf(i),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=n,i.stopAnimation(),i.attr(kf(n)),JA(i).lastProp=null,this._doDispatchAxisPointer()}},_doDispatchAxisPointer:function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:\"updateAxisPointer\",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},_onHandleDragEnd:function(t){if(this._dragging=!1,this._handle){var e=this._axisPointerModel.get(\"value\");this._moveHandleToValue(e),this._api.dispatchAction({type:\"hideTip\"})}},getHandleTransform:null,updateHandleTransform:null,clear:function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),i=this._group,n=this._handle;e&&i&&(this._lastGraphicKey=null,i&&e.remove(i),n&&e.remove(n),this._group=null,this._handle=null,this._payloadInfo=null)},doClear:function(){},buildLabel:function(t,e,i){return i=i||0,{x:t[i],y:t[1-i],width:e[i],height:e[1-i]}}}).constructor=Af,Ki(Af);var eC=Af.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.grid,s=n.get(\"type\"),l=Hf(r,a).getOtherAxis(a).getGlobalExtent(),h=a.toGlobalCoord(a.dataToCoord(e,!0));if(s&&\"none\"!==s){var u=Of(n),c=iC[s](a,h,l,u);c.style=u,t.graphicKey=c.type,t.pointer=c}Vf(e,t,Js(r.model,i),i,n,o)},getHandleTransform:function(t,e,i){var n=Js(e.axis.grid.model,e,{labelInside:!1});return n.labelMargin=i.get(\"handle.margin\"),{position:Rf(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.grid,r=o.getGlobalExtent(!0),s=Hf(a,o).getOtherAxis(o).getGlobalExtent(),l=\"x\"===o.dim?0:1,h=t.position;h[l]+=e[l],h[l]=Math.min(r[1],h[l]),h[l]=Math.max(r[0],h[l]);var u=(s[1]+s[0])/2,c=[u,u];c[l]=h[l];var d=[{verticalAlign:\"middle\"},{align:\"center\"}];return{position:h,rotation:t.rotation,cursorPoint:c,tooltipOption:d[l]}}}),iC={line:function(t,e,i,n){var o=Bf([e,i[0]],[e,i[1]],Ff(t));return Yn({shape:o,style:n}),{type:\"Line\",shape:o}},shadow:function(t,e,i,n){var o=t.getBandWidth(),a=i[1]-i[0];return{type:\"Rect\",shape:Gf([e-o/2,i[0]],[o,a],Ff(t))}}};EM.registerAxisPointerClass(\"CartesianAxisPointer\",eC),tr(function(t){if(t){(!t.axisPointer||0===t.axisPointer.length)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!y(e)&&(t.axisPointer.link=[e])}}),er(Pw.PROCESSOR.STATISTIC,function(t,e){t.getComponent(\"axisPointer\").coordSysAxesInfo=Bs(t,e)}),ir({type:\"updateAxisPointer\",event:\"updateAxisPointer\",update:\":updateAxisPointer\"},function(t,e,i){var n=t.currTrigger,o=[t.x,t.y],a=t,r=t.dispatchAction||m(i.dispatchAction,i),s=e.getComponent(\"axisPointer\").coordSysAxesInfo;if(s){xf(o)&&(o=UA({seriesIndex:a.seriesIndex,dataIndex:a.dataIndex},e).point);var l=xf(o),h=a.axesInfo,u=s.axesInfo,c=\"leave\"===n||xf(o),d={},f={},g={list:[],map:{}},p={showPointer:jA(df,f),showTooltip:jA(ff,g)};XA(s.coordSysMap,function(t,e){var i=l||t.containPoint(o);XA(s.coordSysAxesInfo[e],function(t,e){var n=t.axis,a=vf(h,t);if(!c&&i&&(!h||a)){var r=a&&a.value;null!=r||l||(r=n.pointToData(o)),null!=r&&uf(t,r,p,!1,d)}})});var v={};return XA(u,function(t,e){var i=t.linkGroup;i&&!f[e]&&XA(i.axesInfo,function(e,n){var o=f[n];if(e!==t&&o){var a=o.value;i.mapper&&(a=t.axis.scale.parse(i.mapper(a,yf(e),yf(t)))),v[t.key]=a}})}),XA(v,function(t,e){uf(u[e],t,p,!0,d)}),gf(f,u,d),pf(g,o,t,r),mf(u,0,i),d}});var nC=[\"x\",\"y\"],oC=[\"width\",\"height\"],aC=Af.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.coordinateSystem,s=Uf(r,1-Zf(a)),l=r.dataToPoint(e)[0],h=n.get(\"type\");if(h&&\"none\"!==h){var u=Of(n),c=rC[h](a,l,s,u);c.style=u,t.graphicKey=c.type,t.pointer=c}Vf(e,t,hf(i),i,n,o)},getHandleTransform:function(t,e,i){var n=hf(e,{labelInside:!1});return n.labelMargin=i.get(\"handle.margin\"),{position:Rf(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.coordinateSystem,r=Zf(o),s=Uf(a,r),l=t.position;l[r]+=e[r],l[r]=Math.min(s[1],l[r]),l[r]=Math.max(s[0],l[r]);var h=Uf(a,1-r),u=(h[1]+h[0])/2,c=[u,u];return c[r]=l[r],{position:l,rotation:t.rotation,cursorPoint:c,tooltipOption:{verticalAlign:\"middle\"}}}}),rC={line:function(t,e,i,n){var o=Bf([e,i[0]],[e,i[1]],Zf(t));return Yn({shape:o,style:n}),{type:\"Line\",shape:o}},shadow:function(t,e,i,n){var o=t.getBandWidth(),a=i[1]-i[0];return{type:\"Rect\",shape:Gf([e-o/2,i[0]],[o,a],Zf(t))}}};EM.registerAxisPointerClass(\"SingleAxisPointer\",aC),lr({type:\"single\"});var sC=yw.extend({type:\"series.themeRiver\",dependencies:[\"singleAxis\"],nameMap:null,init:function(t){sC.superApply(this,\"init\",arguments),this.legendDataProvider=function(){return this.getRawData()}},fixData:function(t){for(var e=t.length,i=f(jc().key(function(t){return t[2]}).entries(t),function(t){return{name:t.key,dataList:t.values}}),n=i.length,o=-1,a=-1,r=0;r<n;++r){var s=i[r].dataList.length;s>o&&(o=s,a=r)}for(var l=0;l<n;++l)if(l!==a)for(var h=i[l].name,u=0;u<o;++u){for(var c=i[a].dataList[u][0],d=i[l].dataList.length,g=-1,p=0;p<d;++p)if(i[l].dataList[p][0]===c){g=p;break}-1===g&&(t[e]=[],t[e][0]=c,t[e][1]=0,t[e][2]=h,e++)}return t},getInitialData:function(t,e){var i=[],n=e.queryComponents({mainType:\"singleAxis\",index:this.get(\"singleAxisIndex\"),id:this.get(\"singleAxisId\")})[0].get(\"type\");i=[{name:\"time\",type:\"category\"===n?\"ordinal\":\"time\"===n?\"time\":\"float\"},{name:\"value\",type:\"float\"},{name:\"name\",type:\"ordinal\"}];for(var o=p(t.data,function(t){return void 0!==t[2]}),a=this.fixData(o||[]),r=[],s=this.nameMap=z(),l=0,h=0;h<a.length;++h)r.push(a[h][2]),s.get(a[h][2])||(s.set(a[h][2],l),l++);i=xr(i,a);var u=new aS(i,this);return u.initData(a,r),u},coordDimToDataDim:function(t){return[\"time\"]},getLayerSeries:function(){for(var t=this.getData(),e=t.count(),i=[],n=0;n<e;++n)i[n]=n;for(var o=f(jc().key(function(e){return t.get(\"name\",e)}).entries(i),function(t){return{name:t.key,indices:t.values}}),a=0;a<o.length;++a)o[a].indices.sort(function(e,i){return t.get(\"time\",e)-t.get(\"time\",i)});return o},getAxisTooltipData:function(t,e,i){y(t)||(t=t?[t]:[]);for(var n,o=this.getData(),a=this.getLayerSeries(),r=[],s=a.length,l=0;l<s;++l){for(var h=Number.MAX_VALUE,u=-1,c=a[l].indices.length,d=0;d<c;++d){var f=o.get(t[0],a[l].indices[d]),g=Math.abs(f-e);g<=h&&(n=f,h=g,u=a[l].indices[d])}r.push(u)}return{dataIndices:r,nestestValue:n}},formatTooltip:function(t){var e=this.getData(),i=e.get(\"name\",t),n=e.get(\"value\",t);return(isNaN(n)||null==n)&&(n=\"-\"),Gi(i+\" : \"+n)},defaultOption:{zlevel:0,z:2,coordinateSystem:\"singleAxis\",boundaryGap:[\"10%\",\"10%\"],singleAxisIndex:0,animationEasing:\"linear\",label:{normal:{margin:4,textAlign:\"right\",show:!0,position:\"left\",color:\"#000\",fontSize:11},emphasis:{show:!0}}}});ur({type:\"themeRiver\",init:function(){this._layers=[]},render:function(t,e,i){function n(t){return t.name}function o(e,i,n){var o=this._layers;if(\"remove\"!==e){for(var h,u=[],c=[],f=l[i].indices,g=0;g<f.length;g++){var p=r.getItemLayout(f[g]),m=p.x,v=p.y0,y=p.y;u.push([m,v]),c.push([m,v+y]),h=r.getItemVisual(f[g],\"color\")}var x,_,b=r.getItemLayout(f[0]),w=r.getItemModel(f[g-1]),S=w.getModel(\"label.normal\"),M=S.get(\"margin\");if(\"add\"===e){I=d[i]=new jy;x=new uM({shape:{points:u,stackedOnPoints:c,smooth:.4,stackedOnSmooth:.4,smoothConstraint:!1},z2:0}),_=new ib({style:{x:b.x-M,y:b.y0+b.y/2}}),I.add(x),I.add(_),s.add(I),x.setClipPath(Xf(x.getBoundingRect(),t,function(){x.removeClipPath()}))}else{var I=o[n];x=I.childAt(0),_=I.childAt(1),s.add(I),d[i]=I,wo(x,{shape:{points:u,stackedOnPoints:c}},t),wo(_,{style:{x:b.x-M,y:b.y0+b.y/2}},t)}var T=w.getModel(\"itemStyle.emphasis\"),A=w.getModel(\"itemStyle.normal\");fo(_.style,S,{text:S.get(\"show\")?t.getFormattedLabel(f[g-1],\"normal\")||r.getName(f[g-1]):null,textVerticalAlign:\"middle\"}),x.setStyle(a({fill:h},A.getItemStyle([\"color\"]))),uo(x,T.getItemStyle())}else s.remove(o[i])}var r=t.getData(),s=this.group,l=t.getLayerSeries(),h=r.getLayout(\"layoutInfo\"),u=h.rect,c=h.boundaryGap;s.attr(\"position\",[0,u.y+c[0]]);var d={};new fr(this._layersSeries||[],l,n,n).add(m(o,this,\"add\")).update(m(o,this,\"update\")).remove(m(o,this,\"remove\")).execute(),this._layersSeries=l,this._layers=d},dispose:function(){}});or(function(t,e){t.eachSeriesByType(\"themeRiver\",function(t){var e=t.getData(),i=t.coordinateSystem,n={},o=i.getRect();n.rect=o;var a=t.get(\"boundaryGap\"),r=i.getAxis();n.boundaryGap=a,\"horizontal\"===r.orient?(a[0]=Si(a[0],o.height),a[1]=Si(a[1],o.height),jf(e,t,o.height-a[0]-a[1])):(a[0]=Si(a[0],o.width),a[1]=Si(a[1],o.width),jf(e,t,o.width-a[0]-a[1])),e.setLayout(\"layoutInfo\",n)})}),ar(function(t){t.eachSeriesByType(\"themeRiver\",function(t){var e=t.getData(),i=t.getRawData(),n=t.get(\"color\"),o=z();e.each(function(t){o.set(e.getRawIndex(t),t)}),i.each(function(a){var r=i.getName(a),s=n[(t.nameMap.get(r)-1)%n.length];i.setItemVisual(a,\"color\",s);var l=o.get(a);null!=l&&e.setItemVisual(l,\"color\",s)})})}),er(v(oI,\"themeRiver\"));var lC=[\"itemStyle\",\"normal\"],hC=[\"itemStyle\",\"emphasis\"],uC=[\"label\",\"normal\"],cC=[\"label\",\"emphasis\"],dC=\"e\\0\\0\",fC={cartesian2d:function(t){var e=t.grid.getRect();return{coordSys:{type:\"cartesian2d\",x:e.x,y:e.y,width:e.width,height:e.height},api:{coord:m(t.dataToPoint,t),size:m(Yf,t)}}},geo:function(t){var e=t.getBoundingRect();return{coordSys:{type:\"geo\",x:e.x,y:e.y,width:e.width,height:e.height},api:{coord:m(t.dataToPoint,t),size:m($f,t)}}},singleAxis:function(t){var e=t.getRect();return{coordSys:{type:\"singleAxis\",x:e.x,y:e.y,width:e.width,height:e.height},api:{coord:m(t.dataToPoint,t),size:m(Kf,t)}}},polar:function(t){var e=t.getRadiusAxis(),i=t.getAngleAxis(),n=e.getExtent();return n[0]>n[1]&&n.reverse(),{coordSys:{type:\"polar\",cx:t.cx,cy:t.cy,r:n[1],r0:n[0]},api:{coord:m(function(n){var o=e.dataToRadius(n[0]),a=i.dataToAngle(n[1]),r=t.coordToPoint([o,a]);return r.push(o,a*Math.PI/180),r}),size:m(Jf,t)}}},calendar:function(t){var e=t.getRect(),i=t.getRangeInfo();return{coordSys:{type:\"calendar\",x:e.x,y:e.y,width:e.width,height:e.height,cellWidth:t.getCellWidth(),cellHeight:t.getCellHeight(),rangeInfo:{start:i.start,end:i.end,weeks:i.weeks,dayCount:i.allDay}},api:{coord:m(t.dataToPoint,t)}}}};hr({type:\"series.custom\",dependencies:[\"grid\",\"polar\",\"geo\",\"singleAxis\",\"calendar\"],defaultOption:{coordinateSystem:\"cartesian2d\",zlevel:0,z:2,legendHoverLink:!0},getInitialData:function(t,e){return Sr(t.data,this,e)}}),ur({type:\"custom\",_data:null,render:function(t,e,i){var n=this._data,o=t.getData(),a=this.group,r=ig(t,o,e,i);o.diff(n).add(function(e){o.hasValue(e)&&og(null,e,r(e),t,a,o)}).update(function(e,i){var s=n.getItemGraphicEl(i);o.hasValue(e)?og(s,e,r(e),t,a,o):s&&a.remove(s)}).remove(function(t){var e=n.getItemGraphicEl(t);e&&a.remove(e)}).execute(),this._data=o},dispose:N}),tr(function(t){var e=t.graphic;y(e)?e[0]&&e[0].elements?t.graphic=[t.graphic[0]]:t.graphic=[{elements:e}]:e&&!e.elements&&(t.graphic=[{elements:[e]}])});var gC=sr({type:\"graphic\",defaultOption:{elements:[],parentId:null},_elOptionsToUpdate:null,mergeOption:function(t){var e=this.option.elements;this.option.elements=null,gC.superApply(this,\"mergeOption\",arguments),this.option.elements=e},optionUpdated:function(t,e){var i=this.option,n=(e?i:t).elements,o=i.elements=e?[]:i.elements,a=[];this._flatten(n,a);var r=Vo(o,a);Bo(r);var s=this._elOptionsToUpdate=[];d(r,function(t,e){var i=t.option;i&&(s.push(i),gg(t,i),pg(o,e,i),mg(o[e],i))},this);for(var l=o.length-1;l>=0;l--)null==o[l]?o.splice(l,1):delete o[l].$action},_flatten:function(t,e,i){d(t,function(t){if(t){i&&(t.parentOption=i),e.push(t);var n=t.children;\"group\"===t.type&&n&&this._flatten(n,e,t),delete t.children}},this)},useElOptionsToUpdate:function(){var t=this._elOptionsToUpdate;return this._elOptionsToUpdate=null,t}});lr({type:\"graphic\",init:function(t,e){this._elMap=z(),this._lastGraphicModel},render:function(t,e,i){t!==this._lastGraphicModel&&this._clear(),this._lastGraphicModel=t,this._updateElements(t,i),this._relocate(t,i)},_updateElements:function(t,e){var i=t.useElOptionsToUpdate();if(i){var n=this._elMap,o=this.group;d(i,function(t){var e=t.$action,i=t.id,a=n.get(i),r=t.parentId,s=null!=r?n.get(r):o;if(\"text\"===t.type){var l=t.style;t.hv&&t.hv[1]&&(l.textVerticalAlign=l.textBaseline=null),!l.hasOwnProperty(\"textFill\")&&l.fill&&(l.textFill=l.fill),!l.hasOwnProperty(\"textStroke\")&&l.stroke&&(l.textStroke=l.stroke)}var h=dg(t);e&&\"merge\"!==e?\"replace\"===e?(cg(a,n),ug(i,s,h,n)):\"remove\"===e&&cg(a,n):a?a.attr(h):ug(i,s,h,n);var u=n.get(i);u&&(u.__ecGraphicWidth=t.width,u.__ecGraphicHeight=t.height)})}},_relocate:function(t,e){for(var i=t.option.elements,n=this.group,o=this._elMap,a=i.length-1;a>=0;a--){var r=i[a],s=o.get(r.id);if(s){var l=s.parent;Jo(s,r,l===n?{width:e.getWidth(),height:e.getHeight()}:{width:l.__ecGraphicWidth||0,height:l.__ecGraphicHeight||0},null,{hv:r.hv,boundingMode:r.bounding})}}},_clear:function(){var t=this._elMap;t.each(function(e){cg(e,t)}),this._elMap=z()},dispose:function(){this._clear()}});var pC=sr({type:\"legend.plain\",dependencies:[\"series\"],layoutMode:{type:\"box\",ignoreSize:!0},init:function(t,e,i){this.mergeDefaultAndTheme(t,i),t.selected=t.selected||{}},mergeOption:function(t){pC.superCall(this,\"mergeOption\",t)},optionUpdated:function(){this._updateData(this.ecModel);var t=this._data;if(t[0]&&\"single\"===this.get(\"selectedMode\")){for(var e=!1,i=0;i<t.length;i++){var n=t[i].get(\"name\");if(this.isSelected(n)){this.select(n),e=!0;break}}!e&&this.select(t[0].get(\"name\"))}},_updateData:function(t){var e=f(this.get(\"data\")||[],function(t){return\"string\"!=typeof t&&\"number\"!=typeof t||(t={name:t}),new Lo(t,this,this.ecModel)},this);this._data=e;var i=f(t.getSeries(),function(t){return t.name});t.eachSeries(function(t){if(t.legendDataProvider){var e=t.legendDataProvider();i=i.concat(e.mapArray(e.getName))}}),this._availableNames=i},getData:function(){return this._data},select:function(t){var e=this.option.selected;\"single\"===this.get(\"selectedMode\")&&d(this._data,function(t){e[t.get(\"name\")]=!1}),e[t]=!0},unSelect:function(t){\"single\"!==this.get(\"selectedMode\")&&(this.option.selected[t]=!1)},toggleSelected:function(t){var e=this.option.selected;e.hasOwnProperty(t)||(e[t]=!0),this[e[t]?\"unSelect\":\"select\"](t)},isSelected:function(t){var e=this.option.selected;return!(e.hasOwnProperty(t)&&!e[t])&&l(this._availableNames,t)>=0},defaultOption:{zlevel:0,z:4,show:!0,orient:\"horizontal\",left:\"center\",top:0,align:\"auto\",backgroundColor:\"rgba(0,0,0,0)\",borderColor:\"#ccc\",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,inactiveColor:\"#ccc\",textStyle:{color:\"#333\"},selectedMode:!0,tooltip:{show:!1}}});ir(\"legendToggleSelect\",\"legendselectchanged\",v(vg,\"toggleSelected\")),ir(\"legendSelect\",\"legendselected\",v(vg,\"select\")),ir(\"legendUnSelect\",\"legendunselected\",v(vg,\"unSelect\"));var mC=v,vC=d,yC=jy,xC=lr({type:\"legend.plain\",newlineDisabled:!1,init:function(){this.group.add(this._contentGroup=new yC),this._backgroundEl},getContentGroup:function(){return this._contentGroup},render:function(t,e,i){if(this.resetInner(),t.get(\"show\",!0)){var n=t.get(\"align\");n&&\"auto\"!==n||(n=\"right\"===t.get(\"left\")&&\"vertical\"===t.get(\"orient\")?\"right\":\"left\"),this.renderInner(n,t,e,i);var o=t.getBoxLayoutParams(),a={width:i.getWidth(),height:i.getHeight()},s=t.get(\"padding\"),l=Ko(o,a,s),h=this.layoutInner(t,n,l),u=Ko(r({width:h.width,height:h.height},o),a,s);this.group.attr(\"position\",[u.x-h.x,u.y-h.y]),this.group.add(this._backgroundEl=xg(h,t))}},resetInner:function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl)},renderInner:function(t,e,i,n){var o=this.getContentGroup(),a=z(),r=e.get(\"selectedMode\");vC(e.getData(),function(s,l){var h=s.get(\"name\");if(this.newlineDisabled||\"\"!==h&&\"\\n\"!==h){var u=i.getSeriesByName(h)[0];if(!a.get(h))if(u){var c=u.getData(),d=c.getVisual(\"color\");\"function\"==typeof d&&(d=d(u.getDataParams(0)));var f=c.getVisual(\"legendSymbol\")||\"roundRect\",g=c.getVisual(\"symbol\");this._createItem(h,l,s,e,f,g,t,d,r).on(\"click\",mC(_g,h,n)).on(\"mouseover\",mC(bg,u,null,n)).on(\"mouseout\",mC(wg,u,null,n)),a.set(h,!0)}else i.eachRawSeries(function(i){if(!a.get(h)&&i.legendDataProvider){var o=i.legendDataProvider(),u=o.indexOfName(h);if(u<0)return;var c=o.getItemVisual(u,\"color\");this._createItem(h,l,s,e,\"roundRect\",null,t,c,r).on(\"click\",mC(_g,h,n)).on(\"mouseover\",mC(bg,i,h,n)).on(\"mouseout\",mC(wg,i,h,n)),a.set(h,!0)}},this)}else o.add(new yC({newline:!0}))},this)},_createItem:function(t,e,i,n,o,r,s,l,h){var u=n.get(\"itemWidth\"),c=n.get(\"itemHeight\"),d=n.get(\"inactiveColor\"),f=n.isSelected(t),g=new yC,p=i.getModel(\"textStyle\"),m=i.get(\"icon\"),v=i.getModel(\"tooltip\"),y=v.parentModel;if(o=m||o,g.add(Hr(o,0,0,u,c,f?l:d,!0)),!m&&r&&(r!==o||\"none\"==r)){var x=.8*c;\"none\"===r&&(r=\"circle\"),g.add(Hr(r,(u-x)/2,(c-x)/2,x,x,f?l:d))}var _=\"left\"===s?u+5:-5,b=s,w=n.get(\"formatter\"),S=t;\"string\"==typeof w&&w?S=w.replace(\"{name}\",null!=t?t:\"\"):\"function\"==typeof w&&(S=w(t)),g.add(new ib({style:fo({},p,{text:S,x:_,y:c/2,textFill:f?p.getTextColor():d,textAlign:b,textVerticalAlign:\"middle\"})}));var M=new db({shape:g.getBoundingRect(),invisible:!0,tooltip:v.get(\"show\")?a({content:t,formatter:y.get(\"formatter\",!0)||function(){return t},formatterParams:{componentType:\"legend\",legendIndex:n.componentIndex,name:t,$vars:[\"name\"]}},v.option):null});return g.add(M),g.eachChild(function(t){t.silent=!0}),M.silent=!h,this.getContentGroup().add(g),uo(g),g.__legendDataIndex=e,g},layoutInner:function(t,e,i){var n=this.getContentGroup();Hb(t.get(\"orient\"),n,t.get(\"itemGap\"),i.width,i.height);var o=n.getBoundingRect();return n.attr(\"position\",[-o.x,-o.y]),this.group.getBoundingRect()}});er(function(t){var e=t.findComponents({mainType:\"legend\"});e&&e.length&&t.filterSeries(function(t){for(var i=0;i<e.length;i++)if(!e[i].isSelected(t.name))return!1;return!0})}),Ub.registerSubTypeDefaulter(\"legend\",function(){return\"plain\"});var _C=pC.extend({type:\"legend.scroll\",setScrollDataIndex:function(t){this.option.scrollDataIndex=t},defaultOption:{scrollDataIndex:0,pageButtonItemGap:5,pageButtonGap:null,pageButtonPosition:\"end\",pageFormatter:\"{current}/{total}\",pageIcons:{horizontal:[\"M0,0L12,-10L12,10z\",\"M0,0L-12,-10L-12,10z\"],vertical:[\"M0,0L20,0L10,-20z\",\"M0,0L20,0L10,20z\"]},pageIconColor:\"#2f4554\",pageIconInactiveColor:\"#aaa\",pageIconSize:15,pageTextStyle:{color:\"#333\"},animationDurationUpdate:800},init:function(t,e,i,n){var o=ea(t);_C.superCall(this,\"init\",t,e,i,n),Sg(this,t,o)},mergeOption:function(t,e){_C.superCall(this,\"mergeOption\",t,e),Sg(this,this.option,t)},getOrient:function(){return\"vertical\"===this.get(\"orient\")?{index:1,name:\"vertical\"}:{index:0,name:\"horizontal\"}}}),bC=jy,wC=[\"width\",\"height\"],SC=[\"x\",\"y\"],MC=xC.extend({type:\"legend.scroll\",newlineDisabled:!0,init:function(){MC.superCall(this,\"init\"),this._currentIndex=0,this.group.add(this._containerGroup=new bC),this._containerGroup.add(this.getContentGroup()),this.group.add(this._controllerGroup=new bC),this._showController},resetInner:function(){MC.superCall(this,\"resetInner\"),this._controllerGroup.removeAll(),this._containerGroup.removeClipPath(),this._containerGroup.__rectSize=null},renderInner:function(t,e,i,n){function o(t,i){var o=t+\"DataIndex\",l=Do(e.get(\"pageIcons\",!0)[e.getOrient().name][i],{onclick:m(a._pageGo,a,o,e,n)},{x:-s[0]/2,y:-s[1]/2,width:s[0],height:s[1]});l.name=t,r.add(l)}var a=this;MC.superCall(this,\"renderInner\",t,e,i,n);var r=this._controllerGroup,s=e.get(\"pageIconSize\",!0);y(s)||(s=[s,s]),o(\"pagePrev\",0);var l=e.getModel(\"pageTextStyle\");r.add(new ib({name:\"pageText\",style:{textFill:l.getTextColor(),font:l.getFont(),textVerticalAlign:\"middle\",textAlign:\"center\"},silent:!0})),o(\"pageNext\",1)},layoutInner:function(t,e,i){var n=this.getContentGroup(),o=this._containerGroup,a=this._controllerGroup,r=t.getOrient().index,s=wC[r],l=wC[1-r],h=SC[1-r];Hb(t.get(\"orient\"),n,t.get(\"itemGap\"),r?i.width:null,r?null:i.height),Hb(\"horizontal\",a,t.get(\"pageButtonItemGap\",!0));var u=n.getBoundingRect(),c=a.getBoundingRect(),d=this._showController=u[s]>i[s],f=[-u.x,-u.y];f[r]=n.position[r];var g=[0,0],p=[-c.x,-c.y],m=T(t.get(\"pageButtonGap\",!0),t.get(\"itemGap\",!0));d&&(\"end\"===t.get(\"pageButtonPosition\",!0)?p[r]+=i[s]-c[s]:g[r]+=c[s]+m),p[1-r]+=u[l]/2-c[l]/2,n.attr(\"position\",f),o.attr(\"position\",g),a.attr(\"position\",p);var v=this.group.getBoundingRect();if((v={x:0,y:0})[s]=d?i[s]:u[s],v[l]=Math.max(u[l],c[l]),v[h]=Math.min(0,c[h]+p[1-r]),o.__rectSize=i[s],d){var y={x:0,y:0};y[s]=Math.max(i[s]-c[s]-m,0),y[l]=v[l],o.setClipPath(new db({shape:y})),o.__rectSize=y[s]}else a.eachChild(function(t){t.attr({invisible:!0,silent:!0})});var x=this._getPageInfo(t);return null!=x.pageIndex&&wo(n,{position:x.contentPosition},!!d&&t),this._updatePageInfoView(t,x),v},_pageGo:function(t,e,i){var n=this._getPageInfo(e)[t];null!=n&&i.dispatchAction({type:\"legendScroll\",scrollDataIndex:n,legendId:e.id})},_updatePageInfoView:function(t,e){var i=this._controllerGroup;d([\"pagePrev\",\"pageNext\"],function(n){var o=null!=e[n+\"DataIndex\"],a=i.childOfName(n);a&&(a.setStyle(\"fill\",o?t.get(\"pageIconColor\",!0):t.get(\"pageIconInactiveColor\",!0)),a.cursor=o?\"pointer\":\"default\")});var n=i.childOfName(\"pageText\"),o=t.get(\"pageFormatter\"),a=e.pageIndex,r=null!=a?a+1:0,s=e.pageCount;n&&o&&n.setStyle(\"text\",_(o)?o.replace(\"{current}\",r).replace(\"{total}\",s):o({current:r,total:s}))},_getPageInfo:function(t){function e(t){var e=t.getBoundingRect().clone();return e[f]+=t.position[u],e}var i,n,o,a,r=t.get(\"scrollDataIndex\",!0),s=this.getContentGroup(),l=s.getBoundingRect(),h=this._containerGroup.__rectSize,u=t.getOrient().index,c=wC[u],d=wC[1-u],f=SC[u],g=s.position.slice();this._showController?s.eachChild(function(t){t.__legendDataIndex===r&&(a=t)}):a=s.childAt(0);var p=h?Math.ceil(l[c]/h):0;if(a){var m=a.getBoundingRect(),v=a.position[u]+m[f];g[u]=-v-l[f],i=Math.floor(p*(v+m[f]+h/2)/l[c]),i=l[c]&&p?Math.max(0,Math.min(p-1,i)):-1;var y={x:0,y:0};y[c]=h,y[d]=l[d],y[f]=-g[u]-l[f];var x,_=s.children();if(s.eachChild(function(t,i){var n=e(t);n.intersect(y)&&(null==x&&(x=i),o=t.__legendDataIndex),i===_.length-1&&n[f]+n[c]<=y[f]+y[c]&&(o=null)}),null!=x){var b=e(_[x]);if(y[f]=b[f]+b[c]-y[c],x<=0&&b[f]>=y[f])n=null;else{for(;x>0&&e(_[x-1]).intersect(y);)x--;n=_[x].__legendDataIndex}}}return{contentPosition:g,pageIndex:i,pageCount:p,pagePrevDataIndex:n,pageNextDataIndex:o}}});ir(\"legendScroll\",\"legendscroll\",function(t,e){var i=t.scrollDataIndex;null!=i&&e.eachComponent({mainType:\"legend\",subType:\"scroll\",query:t},function(t){t.setScrollDataIndex(i)})}),sr({type:\"tooltip\",dependencies:[\"axisPointer\"],defaultOption:{zlevel:0,z:8,show:!0,showContent:!0,trigger:\"item\",triggerOn:\"mousemove|click\",alwaysShowContent:!1,displayMode:\"single\",confine:!1,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:\"rgba(50,50,50,0.7)\",borderColor:\"#333\",borderRadius:4,borderWidth:0,padding:5,extraCssText:\"\",axisPointer:{type:\"line\",axis:\"auto\",animation:\"auto\",animationDurationUpdate:200,animationEasingUpdate:\"exponentialOut\",crossStyle:{color:\"#999\",width:1,type:\"dashed\",textStyle:{}}},textStyle:{color:\"#fff\",fontSize:14}}});var IC=d,TC=Bi,AC=[\"\",\"-webkit-\",\"-moz-\",\"-o-\"];Ag.prototype={constructor:Ag,_enterable:!0,update:function(){var t=this._container,e=t.currentStyle||document.defaultView.getComputedStyle(t),i=t.style;\"absolute\"!==i.position&&\"absolute\"!==e.position&&(i.position=\"relative\")},show:function(t){clearTimeout(this._hideTimeout);var e=this.el;e.style.cssText=\"position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;\"+Tg(t)+\";left:\"+this._x+\"px;top:\"+this._y+\"px;\"+(t.get(\"extraCssText\")||\"\"),e.style.display=e.innerHTML?\"block\":\"none\",this._show=!0},setContent:function(t){this.el.innerHTML=null==t?\"\":t},setEnterable:function(t){this._enterable=t},getSize:function(){var t=this.el;return[t.clientWidth,t.clientHeight]},moveTo:function(t,e){var i,n=this._zr;n&&n.painter&&(i=n.painter.getViewportRootOffset())&&(t+=i.offsetLeft,e+=i.offsetTop);var o=this.el.style;o.left=t+\"px\",o.top=e+\"px\",this._x=t,this._y=e},hide:function(){this.el.style.display=\"none\",this._show=!1},hideLater:function(t){!this._show||this._inContent&&this._enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(m(this.hide,this),t)):this.hide())},isShow:function(){return this._show}};var CC=m,DC=d,LC=Si,kC=new db({shape:{x:-1,y:-1,width:2,height:2}});lr({type:\"tooltip\",init:function(t,e){if(!Uv.node){var i=new Ag(e.getDom(),e);this._tooltipContent=i}},render:function(t,e,i){if(!Uv.node){this.group.removeAll(),this._tooltipModel=t,this._ecModel=e,this._api=i,this._lastDataByCoordSys=null,this._alwaysShowContent=t.get(\"alwaysShowContent\");var n=this._tooltipContent;n.update(),n.setEnterable(t.get(\"enterable\")),this._initGlobalListener(),this._keepShow()}},_initGlobalListener:function(){var t=this._tooltipModel.get(\"triggerOn\");_f(\"itemTooltip\",this._api,CC(function(e,i,n){\"none\"!==t&&(t.indexOf(e)>=0?this._tryShow(i,n):\"leave\"===e&&this._hide(n))},this))},_keepShow:function(){var t=this._tooltipModel,e=this._ecModel,i=this._api;if(null!=this._lastX&&null!=this._lastY&&\"none\"!==t.get(\"triggerOn\")){var n=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){n.manuallyShowTip(t,e,i,{x:n._lastX,y:n._lastY})})}},manuallyShowTip:function(t,e,i,n){if(n.from!==this.uid&&!Uv.node){var o=Dg(n,i);this._ticket=\"\";var a=n.dataByCoordSys;if(n.tooltip&&null!=n.x&&null!=n.y){var r=kC;r.position=[n.x,n.y],r.update(),r.tooltip=n.tooltip,this._tryShow({offsetX:n.x,offsetY:n.y,target:r},o)}else if(a)this._tryShow({offsetX:n.x,offsetY:n.y,position:n.position,event:{},dataByCoordSys:n.dataByCoordSys,tooltipOption:n.tooltipOption},o);else if(null!=n.seriesIndex){if(this._manuallyAxisShowTip(t,e,i,n))return;var s=UA(n,e),l=s.point[0],h=s.point[1];null!=l&&null!=h&&this._tryShow({offsetX:l,offsetY:h,position:n.position,target:s.el,event:{}},o)}else null!=n.x&&null!=n.y&&(i.dispatchAction({type:\"updateAxisPointer\",x:n.x,y:n.y}),this._tryShow({offsetX:n.x,offsetY:n.y,position:n.position,target:i.getZr().findHover(n.x,n.y).target,event:{}},o))}},manuallyHideTip:function(t,e,i,n){var o=this._tooltipContent;this._alwaysShowContent||o.hideLater(this._tooltipModel.get(\"hideDelay\")),this._lastX=this._lastY=null,n.from!==this.uid&&this._hide(Dg(n,i))},_manuallyAxisShowTip:function(t,e,i,n){var o=n.seriesIndex,a=n.dataIndex,r=e.getComponent(\"axisPointer\").coordSysAxesInfo;if(null!=o&&null!=a&&null!=r){var s=e.getSeriesByIndex(o);if(s&&\"axis\"===(t=Cg([s.getData().getItemModel(a),s,(s.coordinateSystem||{}).model,t])).get(\"trigger\"))return i.dispatchAction({type:\"updateAxisPointer\",seriesIndex:o,dataIndex:a,position:n.position}),!0}},_tryShow:function(t,e){var i=t.target;if(this._tooltipModel){this._lastX=t.offsetX,this._lastY=t.offsetY;var n=t.dataByCoordSys;n&&n.length?this._showAxisTooltip(n,t):i&&null!=i.dataIndex?(this._lastDataByCoordSys=null,this._showSeriesItemTooltip(t,i,e)):i&&i.tooltip?(this._lastDataByCoordSys=null,this._showComponentItemTooltip(t,i,e)):(this._lastDataByCoordSys=null,this._hide(e))}},_showOrMove:function(t,e){var i=t.get(\"showDelay\");e=m(e,this),clearTimeout(this._showTimout),i>0?this._showTimout=setTimeout(e,i):e()},_showAxisTooltip:function(t,e){var i=this._ecModel,n=this._tooltipModel,o=[e.offsetX,e.offsetY],a=[],r=[],s=Cg([e.tooltipOption,n]);DC(t,function(t){DC(t.dataByAxis,function(t){var e=i.getComponent(t.axisDim+\"Axis\",t.axisIndex),n=t.value,o=[];if(e&&null!=n){var s=Ef(n,e.axis,i,t.seriesDataIndices,t.valueLabelOpt);d(t.seriesDataIndices,function(a){var l=i.getSeriesByIndex(a.seriesIndex),h=a.dataIndexInside,u=l&&l.getDataParams(h);u.axisDim=t.axisDim,u.axisIndex=t.axisIndex,u.axisType=t.axisType,u.axisId=t.axisId,u.axisValue=Br(e.axis,n),u.axisValueLabel=s,u&&(r.push(u),o.push(l.formatTooltip(h,!0)))});var l=s;a.push((l?Gi(l)+\"<br />\":\"\")+o.join(\"<br />\"))}})},this),a.reverse(),a=a.join(\"<br /><br />\");var l=e.position;this._showOrMove(s,function(){this._updateContentNotChangedOnAxis(t)?this._updatePosition(s,l,o[0],o[1],this._tooltipContent,r):this._showTooltipContent(s,a,r,Math.random(),o[0],o[1],l)})},_showSeriesItemTooltip:function(t,e,i){var n=this._ecModel,o=e.seriesIndex,a=n.getSeriesByIndex(o),r=e.dataModel||a,s=e.dataIndex,l=e.dataType,h=r.getData(),u=Cg([h.getItemModel(s),r,a&&(a.coordinateSystem||{}).model,this._tooltipModel]),c=u.get(\"trigger\");if(null==c||\"item\"===c){var d=r.getDataParams(s,l),f=r.formatTooltip(s,!1,l),g=\"item_\"+r.name+\"_\"+s;this._showOrMove(u,function(){this._showTooltipContent(u,f,d,g,t.offsetX,t.offsetY,t.position,t.target)}),i({type:\"showTip\",dataIndexInside:s,dataIndex:h.getRawIndex(s),seriesIndex:o,from:this.uid})}},_showComponentItemTooltip:function(t,e,i){var n=e.tooltip;if(\"string\"==typeof n){var o=n;n={content:o,formatter:o}}var a=new Lo(n,this._tooltipModel,this._ecModel),r=a.get(\"content\"),s=Math.random();this._showOrMove(a,function(){this._showTooltipContent(a,r,a.get(\"formatterParams\")||{},s,t.offsetX,t.offsetY,t.position,e)}),i({type:\"showTip\",from:this.uid})},_showTooltipContent:function(t,e,i,n,o,a,r,s){if(this._ticket=\"\",t.get(\"showContent\")&&t.get(\"show\")){var l=this._tooltipContent,h=t.get(\"formatter\");r=r||t.get(\"position\");var u=e;if(h&&\"string\"==typeof h)u=Wi(h,i,!0);else if(\"function\"==typeof h){var c=CC(function(e,n){e===this._ticket&&(l.setContent(n),this._updatePosition(t,r,o,a,l,i,s))},this);this._ticket=n,u=h(i,n,c)}l.setContent(u),l.show(t),this._updatePosition(t,r,o,a,l,i,s)}},_updatePosition:function(t,e,i,n,o,a,r){var s=this._api.getWidth(),l=this._api.getHeight();e=e||t.get(\"position\");var h=o.getSize(),u=t.get(\"align\"),c=t.get(\"verticalAlign\"),d=r&&r.getBoundingRect().clone();if(r&&d.applyTransform(r.transform),\"function\"==typeof e&&(e=e([i,n],a,o.el,d,{viewSize:[s,l],contentSize:h.slice()})),y(e))i=LC(e[0],s),n=LC(e[1],l);else if(b(e)){e.width=h[0],e.height=h[1];var f=Ko(e,{width:s,height:l});i=f.x,n=f.y,u=null,c=null}else\"string\"==typeof e&&r?(i=(g=Og(e,d,h))[0],n=g[1]):(i=(g=Lg(i,n,o.el,s,l,u?null:20,c?null:20))[0],n=g[1]);if(u&&(i-=zg(u)?h[0]/2:\"right\"===u?h[0]:0),c&&(n-=zg(c)?h[1]/2:\"bottom\"===c?h[1]:0),t.get(\"confine\")){var g=kg(i,n,o.el,s,l);i=g[0],n=g[1]}o.moveTo(i,n)},_updateContentNotChangedOnAxis:function(t){var e=this._lastDataByCoordSys,i=!!e&&e.length===t.length;return i&&DC(e,function(e,n){var o=e.dataByAxis||{},a=(t[n]||{}).dataByAxis||[];(i&=o.length===a.length)&&DC(o,function(t,e){var n=a[e]||{},o=t.seriesDataIndices||[],r=n.seriesDataIndices||[];(i&=t.value===n.value&&t.axisType===n.axisType&&t.axisId===n.axisId&&o.length===r.length)&&DC(o,function(t,e){var n=r[e];i&=t.seriesIndex===n.seriesIndex&&t.dataIndex===n.dataIndex})})}),this._lastDataByCoordSys=t,!!i},_hide:function(t){this._lastDataByCoordSys=null,t({type:\"hideTip\",from:this.uid})},dispose:function(t,e){Uv.node||(this._tooltipContent.hide(),Tf(\"itemTooltip\",e))}}),ir({type:\"showTip\",event:\"showTip\",update:\"tooltip:manuallyShowTip\"},function(){}),ir({type:\"hideTip\",event:\"hideTip\",update:\"tooltip:manuallyHideTip\"},function(){}),Vg.prototype={constructor:Vg,pointToData:function(t,e){return this.polar.pointToData(t,e)[\"radius\"===this.dim?0:1]},dataToRadius:US.prototype.dataToCoord,radiusToData:US.prototype.coordToData},h(Vg,US),Bg.prototype={constructor:Bg,pointToData:function(t,e){return this.polar.pointToData(t,e)[\"radius\"===this.dim?0:1]},dataToAngle:US.prototype.dataToCoord,angleToData:US.prototype.coordToData},h(Bg,US);var PC=function(t){this.name=t||\"\",this.cx=0,this.cy=0,this._radiusAxis=new Vg,this._angleAxis=new Bg,this._radiusAxis.polar=this._angleAxis.polar=this};PC.prototype={type:\"polar\",axisPointerEnabled:!0,constructor:PC,dimensions:[\"radius\",\"angle\"],model:null,containPoint:function(t){var e=this.pointToCoord(t);return this._radiusAxis.contain(e[0])&&this._angleAxis.contain(e[1])},containData:function(t){return this._radiusAxis.containData(t[0])&&this._angleAxis.containData(t[1])},getAxis:function(t){return this[\"_\"+t+\"Axis\"]},getAxes:function(){return[this._radiusAxis,this._angleAxis]},getAxesByScale:function(t){var e=[],i=this._angleAxis,n=this._radiusAxis;return i.scale.type===t&&e.push(i),n.scale.type===t&&e.push(n),e},getAngleAxis:function(){return this._angleAxis},getRadiusAxis:function(){return this._radiusAxis},getOtherAxis:function(t){var e=this._angleAxis;return t===e?this._radiusAxis:e},getBaseAxis:function(){return this.getAxesByScale(\"ordinal\")[0]||this.getAxesByScale(\"time\")[0]||this.getAngleAxis()},getTooltipAxes:function(t){var e=null!=t&&\"auto\"!==t?this.getAxis(t):this.getBaseAxis();return{baseAxes:[e],otherAxes:[this.getOtherAxis(e)]}},dataToPoint:function(t,e){return this.coordToPoint([this._radiusAxis.dataToRadius(t[0],e),this._angleAxis.dataToAngle(t[1],e)])},pointToData:function(t,e){var i=this.pointToCoord(t);return[this._radiusAxis.radiusToData(i[0],e),this._angleAxis.angleToData(i[1],e)]},pointToCoord:function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=this.getAngleAxis(),o=n.getExtent(),a=Math.min(o[0],o[1]),r=Math.max(o[0],o[1]);n.inverse?a=r-360:r=a+360;var s=Math.sqrt(e*e+i*i);e/=s,i/=s;for(var l=Math.atan2(-i,e)/Math.PI*180,h=l<a?1:-1;l<a||l>r;)l+=360*h;return[s,l]},coordToPoint:function(t){var e=t[0],i=t[1]/180*Math.PI;return[Math.cos(i)*e+this.cx,-Math.sin(i)*e+this.cy]}};var OC=Ub.extend({type:\"polarAxis\",axis:null,getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:\"polar\",index:this.option.polarIndex,id:this.option.polarId})[0]}});n(OC.prototype,zS);var zC={angle:{startAngle:90,clockwise:!0,splitNumber:12,axisLabel:{rotate:!1}},radius:{splitNumber:5}};_M(\"angle\",OC,Gg,zC.angle),_M(\"radius\",OC,Gg,zC.radius),sr({type:\"polar\",dependencies:[\"polarAxis\",\"angleAxis\"],coordinateSystem:null,findAxisModel:function(t){var e;return this.ecModel.eachComponent(t,function(t){t.getCoordSysModel()===this&&(e=t)},this),e},defaultOption:{zlevel:0,z:0,center:[\"50%\",\"50%\"],radius:\"80%\"}});var NC={dimensions:PC.prototype.dimensions,create:function(t,e){var i=[];return t.eachComponent(\"polar\",function(t,n){var o=new PC(n);o.update=Hg;var a=o.getRadiusAxis(),r=o.getAngleAxis(),s=t.findAxisModel(\"radiusAxis\"),l=t.findAxisModel(\"angleAxis\");Fg(a,s),Fg(r,l),Wg(o,t,e),i.push(o),t.coordinateSystem=o,o.model=t}),t.eachSeries(function(e){if(\"polar\"===e.get(\"coordinateSystem\")){var i=t.queryComponents({mainType:\"polar\",index:e.get(\"polarIndex\"),id:e.get(\"polarId\")})[0];e.coordinateSystem=i.coordinateSystem}}),i}};ua.register(\"polar\",NC);var EC=[\"axisLine\",\"axisLabel\",\"axisTick\",\"splitLine\",\"splitArea\"];EM.extend({type:\"angleAxis\",axisPointerClass:\"PolarAxisPointer\",render:function(t,e){if(this.group.removeAll(),t.get(\"show\")){var i=t.axis,n=i.polar,o=n.getRadiusAxis().getExtent(),a=i.getTicksCoords();\"category\"!==i.type&&a.pop(),d(EC,function(e){!t.get(e+\".show\")||i.scale.isBlank()&&\"axisLine\"!==e||this[\"_\"+e](t,n,a,o)},this)}},_axisLine:function(t,e,i,n){var o=t.getModel(\"axisLine.lineStyle\"),a=new nb({shape:{cx:e.cx,cy:e.cy,r:n[Ug(e)]},style:o.getLineStyle(),z2:1,silent:!0});a.style.fill=null,this.group.add(a)},_axisTick:function(t,e,i,n){var o=t.getModel(\"axisTick\"),a=(o.get(\"inside\")?-1:1)*o.get(\"length\"),s=n[Ug(e)],l=f(i,function(t){return new fb({shape:Zg(e,[s,s+a],t)})});this.group.add(Ib(l,{style:r(o.getModel(\"lineStyle\").getLineStyle(),{stroke:t.get(\"axisLine.lineStyle.color\")})}))},_axisLabel:function(t,e,i,n){for(var o=t.axis,a=t.get(\"data\"),r=t.getModel(\"axisLabel\"),s=t.getFormattedLabels(),l=r.get(\"margin\"),h=o.getLabelsCoords(),u=0;u<i.length;u++){var c=n[Ug(e)],d=e.coordToPoint([c+l,h[u]]),f=e.cx,g=e.cy,p=Math.abs(d[0]-f)/c<.3?\"center\":d[0]>f?\"left\":\"right\",m=Math.abs(d[1]-g)/c<.3?\"middle\":d[1]>g?\"top\":\"bottom\";a&&a[u]&&a[u].textStyle&&(r=new Lo(a[u].textStyle,r,r.ecModel));var v=new ib({silent:!0});this.group.add(v),fo(v.style,r,{x:d[0],y:d[1],textFill:r.getTextColor()||t.get(\"axisLine.lineStyle.color\"),text:s[u],textAlign:p,textVerticalAlign:m})}},_splitLine:function(t,e,i,n){var o=t.getModel(\"splitLine\").getModel(\"lineStyle\"),a=o.get(\"color\"),s=0;a=a instanceof Array?a:[a];for(var l=[],h=0;h<i.length;h++){var u=s++%a.length;l[u]=l[u]||[],l[u].push(new fb({shape:Zg(e,n,i[h])}))}for(h=0;h<l.length;h++)this.group.add(Ib(l[h],{style:r({stroke:a[h%a.length]},o.getLineStyle()),silent:!0,z:t.get(\"z\")}))},_splitArea:function(t,e,i,n){var o=t.getModel(\"splitArea\").getModel(\"areaStyle\"),a=o.get(\"color\"),s=0;a=a instanceof Array?a:[a];for(var l=[],h=Math.PI/180,u=-i[0]*h,c=Math.min(n[0],n[1]),d=Math.max(n[0],n[1]),f=t.get(\"clockwise\"),g=1;g<i.length;g++){var p=s++%a.length;l[p]=l[p]||[],l[p].push(new rb({shape:{cx:e.cx,cy:e.cy,r0:c,r:d,startAngle:u,endAngle:-i[g]*h,clockwise:f},silent:!0})),u=-i[g]*h}for(g=0;g<l.length;g++)this.group.add(Ib(l[g],{style:r({fill:a[g%a.length]},o.getAreaStyle()),silent:!0}))}});var RC=[\"axisLine\",\"axisTickLabel\",\"axisName\"],VC=[\"splitLine\",\"splitArea\"];EM.extend({type:\"radiusAxis\",axisPointerClass:\"PolarAxisPointer\",render:function(t,e){if(this.group.removeAll(),t.get(\"show\")){var i=t.axis,n=i.polar,o=n.getAngleAxis(),a=i.getTicksCoords(),r=o.getExtent()[0],s=i.getExtent(),l=Xg(n,t,r),h=new DM(t,l);d(RC,h.add,h),this.group.add(h.getGroup()),d(VC,function(e){t.get(e+\".show\")&&!i.scale.isBlank()&&this[\"_\"+e](t,n,r,s,a)},this)}},_splitLine:function(t,e,i,n,o){var a=t.getModel(\"splitLine\").getModel(\"lineStyle\"),s=a.get(\"color\"),l=0;s=s instanceof Array?s:[s];for(var h=[],u=0;u<o.length;u++){var c=l++%s.length;h[c]=h[c]||[],h[c].push(new nb({shape:{cx:e.cx,cy:e.cy,r:o[u]},silent:!0}))}for(u=0;u<h.length;u++)this.group.add(Ib(h[u],{style:r({stroke:s[u%s.length],fill:null},a.getLineStyle()),silent:!0}))},_splitArea:function(t,e,i,n,o){var a=t.getModel(\"splitArea\").getModel(\"areaStyle\"),s=a.get(\"color\"),l=0;s=s instanceof Array?s:[s];for(var h=[],u=o[0],c=1;c<o.length;c++){var d=l++%s.length;h[d]=h[d]||[],h[d].push(new rb({shape:{cx:e.cx,cy:e.cy,r0:u,r:o[c],startAngle:0,endAngle:2*Math.PI},silent:!0})),u=o[c]}for(c=0;c<h.length;c++)this.group.add(Ib(h[c],{style:r({fill:s[c%s.length]},a.getAreaStyle()),silent:!0}))}});var BC=Af.extend({makeElOption:function(t,e,i,n,o){var a=i.axis;\"angle\"===a.dim&&(this.animationThreshold=Math.PI/18);var r,s=a.polar,l=s.getOtherAxis(a).getExtent();r=a[\"dataTo\"+Ui(a.dim)](e);var h=n.get(\"type\");if(h&&\"none\"!==h){var u=Of(n),c=GC[h](a,s,r,l,u);c.style=u,t.graphicKey=c.type,t.pointer=c}zf(t,i,n,o,jg(e,i,0,s,n.get(\"label.margin\")))}}),GC={line:function(t,e,i,n,o){return\"angle\"===t.dim?{type:\"Line\",shape:Bf(e.coordToPoint([n[0],i]),e.coordToPoint([n[1],i]))}:{type:\"Circle\",shape:{cx:e.cx,cy:e.cy,r:i}}},shadow:function(t,e,i,n,o){var a=t.getBandWidth(),r=Math.PI/180;return\"angle\"===t.dim?{type:\"Sector\",shape:Wf(e.cx,e.cy,n[0],n[1],(-i-a/2)*r,(a/2-i)*r)}:{type:\"Sector\",shape:Wf(e.cx,e.cy,i-a/2,i+a/2,0,2*Math.PI)}}};EM.registerAxisPointerClass(\"PolarAxisPointer\",BC),or(v(function(t,e,i){var n=i.getWidth(),o=i.getHeight(),a={},r={},s=Rg(p(e.getSeriesByType(t),function(t){return!e.isSeriesFiltered(t)&&t.coordinateSystem&&\"polar\"===t.coordinateSystem.type}));e.eachSeriesByType(t,function(t){if(\"polar\"===t.coordinateSystem.type){var e=t.getData(),i=t.coordinateSystem,l=i.getAngleAxis(),h=i.getBaseAxis(),u=Ng(t),c=s[Eg(h)][u],d=c.offset,f=c.width,g=i.getOtherAxis(h),p=t.get(\"center\")||[\"50%\",\"50%\"],m=Si(p[0],n),v=Si(p[1],o),y=t.get(\"barMinHeight\")||0,x=t.get(\"barMinAngle\")||0,_=g.getExtent()[0],b=g.model.get(\"max\"),w=g.model.get(\"min\"),S=[t.coordDimToDataDim(\"radius\")[0],t.coordDimToDataDim(\"angle\")[0]],M=e.mapArray(S,function(t,e){return i.dataToPoint([t,e])},!0);a[u]=a[u]||[],r[u]=r[u]||[],e.each(t.coordDimToDataDim(g.dim)[0],function(t,n){if(!isNaN(t)){a[u][n]||(a[u][n]={p:_,n:_},r[u][n]={p:_,n:_});var o,s,h,c,p=t>=0?\"p\":\"n\",S=i.pointToCoord(M[n]),I=r[u][n][p];if(\"radius\"===g.dim)o=I,s=S[0],c=(h=(-S[1]+d)*Math.PI/180)+f*Math.PI/180,Math.abs(s)<y&&(s=o+(s<0?-1:1)*y),r[u][n][p]=s;else{s=(o=S[0]+d)+f,null!=b&&(t=Math.min(t,b)),null!=w&&(t=Math.max(t,w));var T=l.dataToAngle(t);Math.abs(T-I)<x&&(T=I-(t<0?-1:1)*x),h=-I*Math.PI/180,c=-T*Math.PI/180;var A=l.getExtent(),C=T;C===A[0]&&t>0?C=A[1]:C===A[1]&&t<0&&(C=A[0]),r[u][n][p]=C}e.setItemLayout(n,{cx:m,cy:v,r0:o,r:s,startAngle:h,endAngle:c})}},!0)}},this)},\"bar\")),lr({type:\"polar\"}),u(Ub.extend({type:\"geo\",coordinateSystem:null,layoutMode:\"box\",init:function(t){Ub.prototype.init.apply(this,arguments),zo(t.label,[\"show\"])},optionUpdated:function(){var t=this.option,e=this;t.regions=xI.getFilledRegions(t.regions,t.map,t.nameMap),this._optionModelMap=g(t.regions||[],function(t,i){return i.name&&t.set(i.name,new Lo(i,e)),t},z()),this.updateSelectedMap(t.regions)},defaultOption:{zlevel:0,z:0,show:!0,left:\"center\",top:\"center\",aspectScale:.75,silent:!1,map:\"\",boundingCoords:null,center:null,zoom:1,scaleLimit:null,label:{normal:{show:!1,color:\"#000\"},emphasis:{show:!0,color:\"rgb(100,0,0)\"}},itemStyle:{normal:{borderWidth:.5,borderColor:\"#444\",color:\"#eee\"},emphasis:{color:\"rgba(255,215,0,0.8)\"}},regions:[]},getRegionModel:function(t){return this._optionModelMap.get(t)||new Lo(null,this,this.ecModel)},getFormattedLabel:function(t,e){var i=this.getRegionModel(t).get(\"label.\"+e+\".formatter\"),n={name:t};return\"function\"==typeof i?(n.status=e,i(n)):\"string\"==typeof i?i.replace(\"{a}\",null!=t?t:\"\"):void 0},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t}}),$M),lr({type:\"geo\",init:function(t,e){var i=new Ul(e,!0);this._mapDraw=i,this.group.add(i.group)},render:function(t,e,i,n){if(!n||\"geoToggleSelect\"!==n.type||n.from!==this.uid){var o=this._mapDraw;t.get(\"show\")?o.draw(t,e,i,this,n):this._mapDraw.group.removeAll(),this.group.silent=t.get(\"silent\")}},dispose:function(){this._mapDraw&&this._mapDraw.remove()}}),qg(\"toggleSelected\",{type:\"geoToggleSelect\",event:\"geoselectchanged\"}),qg(\"select\",{type:\"geoSelect\",event:\"geoselected\"}),qg(\"unSelect\",{type:\"geoUnSelect\",event:\"geounselected\"});var WC=[\"rect\",\"polygon\",\"keep\",\"clear\"],HC=d,FC={lineX:tp(0),lineY:tp(1),rect:{point:function(t,e,i){return t&&i.boundingRect.contain(t[0],t[1])},rect:function(t,e,i){return t&&i.boundingRect.intersect(t)}},polygon:{point:function(t,e,i){return t&&i.boundingRect.contain(t[0],t[1])&&Ur(i.range,t[0],t[1])},rect:function(t,e,i){var n=i.range;if(!t||n.length<=1)return!1;var o=t.x,a=t.y,r=t.width,s=t.height,l=n[0];return!!(Ur(n,o,a)||Ur(n,o+r,a)||Ur(n,o,a+s)||Ur(n,o+r,a+s)||jt.create(t).contain(l[0],l[1])||ip(o,a,o+r,a,n)||ip(o,a,o,a+s,n)||ip(o+r,a,o+r,a+s,n)||ip(o,a+s,o+r,a+s,n))||void 0}}},ZC=d,UC=l,XC=v,jC=[\"dataToPoint\",\"pointToData\"],qC=[\"grid\",\"xAxis\",\"yAxis\",\"geo\",\"graph\",\"polar\",\"radiusAxis\",\"angleAxis\",\"bmap\"],YC=rp.prototype;YC.setOutputRanges=function(t,e){this.matchOutputRanges(t,e,function(t,e,i){if((t.coordRanges||(t.coordRanges=[])).push(e),!t.coordRange){t.coordRange=e;var n=QC[t.brushType](0,i,e);t.__rangeOffset={offset:tD[t.brushType](n.values,t.range,[1,1]),xyMinMax:n.xyMinMax}}})},YC.matchOutputRanges=function(t,e,i){ZC(t,function(t){var n=this.findTargetInfo(t,e);n&&!0!==n&&d(n.coordSyses,function(n){var o=QC[t.brushType](1,n,t.range);i(t,o.values,n,e)})},this)},YC.setInputRanges=function(t,e){ZC(t,function(t){var i=this.findTargetInfo(t,e);if(t.range=t.range||[],i&&!0!==i){t.panelId=i.panelId;var n=QC[t.brushType](0,i.coordSys,t.coordRange),o=t.__rangeOffset;t.range=o?tD[t.brushType](n.values,o.offset,cp(n.xyMinMax,o.xyMinMax)):n.values}},this)},YC.makePanelOpts=function(t,e){return f(this._targetInfoList,function(i){var n=i.getPanelRect();return{panelId:i.panelId,defaultBrushType:e&&e(i),clipPath:Lc(n),isTargetByCursor:Pc(n,t,i.coordSysModel),getLinearBrushOtherExtent:kc(n)}})},YC.controlSeries=function(t,e,i){var n=this.findTargetInfo(t,i);return!0===n||n&&UC(n.coordSyses,e.coordinateSystem)>=0},YC.findTargetInfo=function(t,e){for(var i=this._targetInfoList,n=lp(e,t),o=0;o<i.length;o++){var a=i[o],r=t.panelId;if(r){if(a.panelId===r)return a}else for(o=0;o<KC.length;o++)if(KC[o](n,a))return a}return!0};var $C={grid:function(t,e){var i=t.xAxisModels,n=t.yAxisModels,o=t.gridModels,a=z(),r={},s={};(i||n||o)&&(ZC(i,function(t){var e=t.axis.grid.model;a.set(e.id,e),r[e.id]=!0}),ZC(n,function(t){var e=t.axis.grid.model;a.set(e.id,e),s[e.id]=!0}),ZC(o,function(t){a.set(t.id,t),r[t.id]=!0,s[t.id]=!0}),a.each(function(t){var o=t.coordinateSystem,a=[];ZC(o.getCartesians(),function(t,e){(UC(i,t.getAxis(\"x\").model)>=0||UC(n,t.getAxis(\"y\").model)>=0)&&a.push(t)}),e.push({panelId:\"grid--\"+t.id,gridModel:t,coordSysModel:t,coordSys:a[0],coordSyses:a,getPanelRect:JC.grid,xAxisDeclared:r[t.id],yAxisDeclared:s[t.id]})}))},geo:function(t,e){ZC(t.geoModels,function(t){var i=t.coordinateSystem;e.push({panelId:\"geo--\"+t.id,geoModel:t,coordSysModel:t,coordSys:i,coordSyses:[i],getPanelRect:JC.geo})})}},KC=[function(t,e){var i=t.xAxisModel,n=t.yAxisModel,o=t.gridModel;return!o&&i&&(o=i.axis.grid.model),!o&&n&&(o=n.axis.grid.model),o&&o===e.gridModel},function(t,e){var i=t.geoModel;return i&&i===e.geoModel}],JC={grid:function(){return this.coordSys.grid.getRect().clone()},geo:function(){var t=this.coordSys,e=t.getBoundingRect().clone();return e.applyTransform(Mo(t)),e}},QC={lineX:XC(hp,0),lineY:XC(hp,1),rect:function(t,e,i){var n=e[jC[t]]([i[0][0],i[1][0]]),o=e[jC[t]]([i[0][1],i[1][1]]),a=[sp([n[0],o[0]]),sp([n[1],o[1]])];return{values:a,xyMinMax:a}},polygon:function(t,e,i){var n=[[1/0,-1/0],[1/0,-1/0]];return{values:f(i,function(i){var o=e[jC[t]](i);return n[0][0]=Math.min(n[0][0],o[0]),n[1][0]=Math.min(n[1][0],o[1]),n[0][1]=Math.max(n[0][1],o[0]),n[1][1]=Math.max(n[1][1],o[1]),o}),xyMinMax:n}}},tD={lineX:XC(up,0),lineY:XC(up,1),rect:function(t,e,i){return[[t[0][0]-i[0]*e[0][0],t[0][1]-i[0]*e[0][1]],[t[1][0]-i[1]*e[1][0],t[1][1]-i[1]*e[1][1]]]},polygon:function(t,e,i){return f(t,function(t,n){return[t[0]-i[0]*e[n][0],t[1]-i[1]*e[n][1]]})}},eD=[\"inBrush\",\"outOfBrush\"],iD=\"__ecBrushSelect\",nD=\"__ecInBrushSelectEvent\",oD=Pw.VISUAL.BRUSH;or(oD,function(t,e,i){t.eachComponent({mainType:\"brush\"},function(e){i&&\"takeGlobalCursor\"===i.type&&e.setBrushOption(\"brush\"===i.key?i.brushOption:{brushType:!1}),(e.brushTargetManager=new rp(e.option,t)).setInputRanges(e.areas,t)})}),ar(oD,function(t,e,n){var o,a,s=[];t.eachComponent({mainType:\"brush\"},function(e,n){function l(t){return\"all\"===m||v[t]}function h(t){return!!t.length}function u(t,e){var i=t.coordinateSystem;b|=i.hasAxisBrushed(),l(e)&&i.eachActiveState(t.getData(),function(t,e){\"active\"===t&&(x[e]=1)})}function c(i,n,o){var a=mp(i);if(a&&!vp(e,n)&&(d(w,function(n){a[n.brushType]&&e.brushTargetManager.controlSeries(n,i,t)&&o.push(n),b|=h(o)}),l(n)&&h(o))){var r=i.getData();r.each(function(t){pp(a,o,r,t)&&(x[t]=1)})}}var g={brushId:e.id,brushIndex:n,brushName:e.name,areas:i(e.areas),selected:[]};s.push(g);var p=e.option,m=p.brushLink,v=[],x=[],_=[],b=0;n||(o=p.throttleType,a=p.throttleDelay);var w=f(e.areas,function(t){return yp(r({boundingRect:aD[t.brushType](t)},t))}),S=Kg(e.option,eD,function(t){t.mappingMethod=\"fixed\"});y(m)&&d(m,function(t){v[t]=1}),t.eachSeries(function(t,e){var i=_[e]=[];\"parallel\"===t.subType?u(t,e):c(t,e,i)}),t.eachSeries(function(t,e){var i={seriesId:t.id,seriesIndex:e,seriesName:t.name,dataIndex:[]};g.selected.push(i);var n=mp(t),o=_[e],a=t.getData(),r=l(e)?function(t){return x[t]?(i.dataIndex.push(a.getRawIndex(t)),\"inBrush\"):\"outOfBrush\"}:function(t){return pp(n,o,a,t)?(i.dataIndex.push(a.getRawIndex(t)),\"inBrush\"):\"outOfBrush\"};(l(e)?b:h(o))&&Qg(eD,S,a,r)})}),fp(e,o,a,s,n)});var aD={lineX:N,lineY:N,rect:function(t){return xp(t.range)},polygon:function(t){for(var e,i=t.range,n=0,o=i.length;n<o;n++){e=e||[[1/0,-1/0],[1/0,-1/0]];var a=i[n];a[0]<e[0][0]&&(e[0][0]=a[0]),a[0]>e[0][1]&&(e[0][1]=a[0]),a[1]<e[1][0]&&(e[1][0]=a[1]),a[1]>e[1][1]&&(e[1][1]=a[1])}return e&&xp(e)}},rD=[\"#ddd\"];sr({type:\"brush\",dependencies:[\"geo\",\"grid\",\"xAxis\",\"yAxis\",\"parallel\",\"series\"],defaultOption:{toolbox:null,brushLink:null,seriesIndex:\"all\",geoIndex:null,xAxisIndex:null,yAxisIndex:null,brushType:\"rect\",brushMode:\"single\",transformable:!0,brushStyle:{borderWidth:1,color:\"rgba(120,140,180,0.3)\",borderColor:\"rgba(120,140,180,0.8)\"},throttleType:\"fixRate\",throttleDelay:0,removeOnClick:!0,z:1e4},areas:[],brushType:null,brushOption:{},coordInfoList:[],optionUpdated:function(t,e){var i=this.option;!e&&Jg(i,t,[\"inBrush\",\"outOfBrush\"]),i.inBrush=i.inBrush||{},i.outOfBrush=i.outOfBrush||{color:rD}},setAreas:function(t){t&&(this.areas=f(t,function(t){return _p(this.option,t)},this))},setBrushOption:function(t){this.brushOption=_p(this.option,t),this.brushType=this.brushOption.brushType}});lr({type:\"brush\",init:function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new Yu(e.getZr())).on(\"brush\",m(this._onBrush,this)).mount()},render:function(t){return this.model=t,bp.apply(this,arguments)},updateView:bp,updateLayout:bp,updateVisual:bp,dispose:function(){this._brushController.dispose()},_onBrush:function(t,e){var n=this.model.id;this.model.brushTargetManager.setOutputRanges(t,this.ecModel),(!e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:\"brush\",brushId:n,areas:i(t),$from:n})}}),ir({type:\"brush\",event:\"brush\",update:\"updateView\"},function(t,e){e.eachComponent({mainType:\"brush\",query:t},function(e){e.setAreas(t.areas)})}),ir({type:\"brushSelect\",event:\"brushSelected\",update:\"none\"},function(){});var sD={},lD={toolbox:{brush:{title:{rect:\"矩形选择\",polygon:\"圈选\",lineX:\"横向选择\",lineY:\"纵向选择\",keep:\"保持选择\",clear:\"清除选择\"}},dataView:{title:\"数据视图\",lang:[\"数据视图\",\"关闭\",\"刷新\"]},dataZoom:{title:{zoom:\"区域缩放\",back:\"区域缩放还原\"}},magicType:{title:{line:\"切换为折线图\",bar:\"切换为柱状图\",stack:\"切换为堆叠\",tiled:\"切换为平铺\"}},restore:{title:\"还原\"},saveAsImage:{title:\"保存为图片\",lang:[\"右键另存为图片\"]}}},hD=lD.toolbox.brush;Mp.defaultOption={show:!0,type:[\"rect\",\"polygon\",\"lineX\",\"lineY\",\"keep\",\"clear\"],icon:{rect:\"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13\",polygon:\"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2\",lineX:\"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4\",lineY:\"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4\",keep:\"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z\",clear:\"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2\"},title:i(hD.title)};var uD=Mp.prototype;uD.render=uD.updateView=uD.updateLayout=function(t,e,i){var n,o,a;e.eachComponent({mainType:\"brush\"},function(t){n=t.brushType,o=t.brushOption.brushMode||\"single\",a|=t.areas.length}),this._brushType=n,this._brushMode=o,d(t.get(\"type\",!0),function(e){t.setIconStatus(e,(\"keep\"===e?\"multiple\"===o:\"clear\"===e?a:e===n)?\"emphasis\":\"normal\")})},uD.getIcons=function(){var t=this.model,e=t.get(\"icon\",!0),i={};return d(t.get(\"type\",!0),function(t){e[t]&&(i[t]=e[t])}),i},uD.onclick=function(t,e,i){var n=this._brushType,o=this._brushMode;\"clear\"===i?(e.dispatchAction({type:\"axisAreaSelect\",intervals:[]}),e.dispatchAction({type:\"brush\",command:\"clear\",areas:[]})):e.dispatchAction({type:\"takeGlobalCursor\",key:\"brush\",brushOption:{brushType:\"keep\"===i?n:n!==i&&i,brushMode:\"keep\"===i?\"multiple\"===o?\"single\":\"multiple\":o}})},wp(\"brush\",Mp),tr(function(t,e){var i=t&&t.brush;if(y(i)||(i=i?[i]:[]),i.length){var n=[];d(i,function(t){var e=t.hasOwnProperty(\"toolbox\")?t.toolbox:[];e instanceof Array&&(n=n.concat(e))});var o=t&&t.toolbox;y(o)&&(o=o[0]),o||(o={feature:{}},t.toolbox=[o]);var a=o.feature||(o.feature={}),r=a.brush||(a.brush={}),s=r.type||(r.type=[]);s.push.apply(s,n),Yg(s),e&&!s.length&&s.push.apply(s,WC)}});Ip.prototype={constructor:Ip,type:\"calendar\",dimensions:[\"time\",\"value\"],getDimensionsInfo:function(){return[{name:\"time\",type:\"time\"}]},getRangeInfo:function(){return this._rangeInfo},getModel:function(){return this._model},getRect:function(){return this._rect},getCellWidth:function(){return this._sw},getCellHeight:function(){return this._sh},getOrient:function(){return this._orient},getFirstDayOfWeek:function(){return this._firstDayOfWeek},getDateInfo:function(t){var e=(t=Pi(t)).getFullYear(),i=t.getMonth()+1;i=i<10?\"0\"+i:i;var n=t.getDate();n=n<10?\"0\"+n:n;var o=t.getDay();return o=Math.abs((o+7-this.getFirstDayOfWeek())%7),{y:e,m:i,d:n,day:o,time:t.getTime(),formatedDate:e+\"-\"+i+\"-\"+n,date:t}},getNextNDay:function(t,e){return 0===(e=e||0)?this.getDateInfo(t):((t=new Date(this.getDateInfo(t).time)).setDate(t.getDate()+e),this.getDateInfo(t))},update:function(t,e){function i(t,e){return null!=t[e]&&\"auto\"!==t[e]}this._firstDayOfWeek=+this._model.getModel(\"dayLabel\").get(\"firstDay\"),this._orient=this._model.get(\"orient\"),this._lineWidth=this._model.getModel(\"itemStyle.normal\").getItemStyle().lineWidth||0,this._rangeInfo=this._getRangeInfo(this._initRangeOption());var n=this._rangeInfo.weeks||1,o=[\"width\",\"height\"],a=this._model.get(\"cellSize\").slice(),r=this._model.getBoxLayoutParams(),s=\"horizontal\"===this._orient?[n,7]:[7,n];d([0,1],function(t){i(a,t)&&(r[o[t]]=a[t]*s[t])});var l={width:e.getWidth(),height:e.getHeight()},h=this._rect=Ko(r,l);d([0,1],function(t){i(a,t)||(a[t]=h[o[t]]/s[t])}),this._sw=a[0],this._sh=a[1]},dataToPoint:function(t,e){y(t)&&(t=t[0]),null==e&&(e=!0);var i=this.getDateInfo(t),n=this._rangeInfo,o=i.formatedDate;if(e&&!(i.time>=n.start.time&&i.time<=n.end.time))return[NaN,NaN];var a=i.day,r=this._getRangeInfo([n.start.time,o]).nthWeek;return\"vertical\"===this._orient?[this._rect.x+a*this._sw+this._sw/2,this._rect.y+r*this._sh+this._sh/2]:[this._rect.x+r*this._sw+this._sw/2,this._rect.y+a*this._sh+this._sh/2]},pointToData:function(t){var e=this.pointToDate(t);return e&&e.time},dataToRect:function(t,e){var i=this.dataToPoint(t,e);return{contentShape:{x:i[0]-(this._sw-this._lineWidth)/2,y:i[1]-(this._sh-this._lineWidth)/2,width:this._sw-this._lineWidth,height:this._sh-this._lineWidth},center:i,tl:[i[0]-this._sw/2,i[1]-this._sh/2],tr:[i[0]+this._sw/2,i[1]-this._sh/2],br:[i[0]+this._sw/2,i[1]+this._sh/2],bl:[i[0]-this._sw/2,i[1]+this._sh/2]}},pointToDate:function(t){var e=Math.floor((t[0]-this._rect.x)/this._sw)+1,i=Math.floor((t[1]-this._rect.y)/this._sh)+1,n=this._rangeInfo.range;return\"vertical\"===this._orient?this._getDateByWeeksAndDay(i,e-1,n):this._getDateByWeeksAndDay(e,i-1,n)},convertToPixel:v(Tp,\"dataToPoint\"),convertFromPixel:v(Tp,\"pointToData\"),_initRangeOption:function(){var t=this._model.get(\"range\"),e=t;if(y(e)&&1===e.length&&(e=e[0]),/^\\d{4}$/.test(e)&&(t=[e+\"-01-01\",e+\"-12-31\"]),/^\\d{4}[\\/|-]\\d{1,2}$/.test(e)){var i=this.getDateInfo(e),n=i.date;n.setMonth(n.getMonth()+1);var o=this.getNextNDay(n,-1);t=[i.formatedDate,o.formatedDate]}/^\\d{4}[\\/|-]\\d{1,2}[\\/|-]\\d{1,2}$/.test(e)&&(t=[e,e]);var a=this._getRangeInfo(t);return a.start.time>a.end.time&&t.reverse(),t},_getRangeInfo:function(t){var e;(t=[this.getDateInfo(t[0]),this.getDateInfo(t[1])])[0].time>t[1].time&&(e=!0,t.reverse());var i=Math.floor(t[1].time/864e5)-Math.floor(t[0].time/864e5)+1,n=new Date(t[0].time),o=n.getDate(),a=t[1].date.getDate();if(n.setDate(o+i-1),n.getDate()!==a)for(var r=n.getTime()-t[1].time>0?1:-1;n.getDate()!==a&&(n.getTime()-t[1].time)*r>0;)i-=r,n.setDate(o+i-1);var s=Math.floor((i+t[0].day+6)/7),l=e?1-s:s-1;return e&&t.reverse(),{range:[t[0].formatedDate,t[1].formatedDate],start:t[0],end:t[1],allDay:i,weeks:s,nthWeek:l,fweek:t[0].day,lweek:t[1].day}},_getDateByWeeksAndDay:function(t,e,i){var n=this._getRangeInfo(i);if(t>n.weeks||0===t&&e<n.fweek||t===n.weeks&&e>n.lweek)return!1;var o=7*(t-1)-n.fweek+e,a=new Date(n.start.time);return a.setDate(n.start.d+o),this.getDateInfo(a)}},Ip.dimensions=Ip.prototype.dimensions,Ip.getDimensionsInfo=Ip.prototype.getDimensionsInfo,Ip.create=function(t,e){var i=[];return t.eachComponent(\"calendar\",function(n){var o=new Ip(n,t,e);i.push(o),n.coordinateSystem=o}),t.eachSeries(function(t){\"calendar\"===t.get(\"coordinateSystem\")&&(t.coordinateSystem=i[t.get(\"calendarIndex\")||0])}),i},ua.register(\"calendar\",Ip);var cD=Ub.extend({type:\"calendar\",coordinateSystem:null,defaultOption:{zlevel:0,z:2,left:80,top:60,cellSize:20,orient:\"horizontal\",splitLine:{show:!0,lineStyle:{color:\"#000\",width:1,type:\"solid\"}},itemStyle:{normal:{color:\"#fff\",borderWidth:1,borderColor:\"#ccc\"}},dayLabel:{show:!0,firstDay:0,position:\"start\",margin:\"50%\",nameMap:\"en\",color:\"#000\"},monthLabel:{show:!0,position:\"start\",margin:5,align:\"center\",nameMap:\"en\",formatter:null,color:\"#000\"},yearLabel:{show:!0,position:null,margin:30,formatter:null,color:\"#ccc\",fontFamily:\"sans-serif\",fontWeight:\"bolder\",fontSize:20}},init:function(t,e,i,n){var o=ea(t);cD.superApply(this,\"init\",arguments),Ap(t,o)},mergeOption:function(t,e){cD.superApply(this,\"mergeOption\",arguments),Ap(this.option,t)}}),dD={EN:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],CN:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},fD={EN:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],CN:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"]};lr({type:\"calendar\",_tlpoints:null,_blpoints:null,_firstDayOfMonth:null,_firstDayPoints:null,render:function(t,e,i){var n=this.group;n.removeAll();var o=t.coordinateSystem,a=o.getRangeInfo(),r=o.getOrient();this._renderDayRect(t,a,n),this._renderLines(t,a,r,n),this._renderYearText(t,a,r,n),this._renderMonthText(t,r,n),this._renderWeekText(t,a,r,n)},_renderDayRect:function(t,e,i){for(var n=t.coordinateSystem,o=t.getModel(\"itemStyle.normal\").getItemStyle(),a=n.getCellWidth(),r=n.getCellHeight(),s=e.start.time;s<=e.end.time;s=n.getNextNDay(s,1).time){var l=n.dataToRect([s],!1).tl,h=new db({shape:{x:l[0],y:l[1],width:a,height:r},cursor:\"default\",style:o});i.add(h)}},_renderLines:function(t,e,i,n){function o(e){a._firstDayOfMonth.push(r.getDateInfo(e)),a._firstDayPoints.push(r.dataToRect([e],!1).tl);var o=a._getLinePointsOfOneWeek(t,e,i);a._tlpoints.push(o[0]),a._blpoints.push(o[o.length-1]),l&&a._drawSplitline(o,s,n)}var a=this,r=t.coordinateSystem,s=t.getModel(\"splitLine.lineStyle\").getLineStyle(),l=t.get(\"splitLine.show\"),h=s.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var u=e.start,c=0;u.time<=e.end.time;c++){o(u.formatedDate),0===c&&(u=r.getDateInfo(e.start.y+\"-\"+e.start.m));var d=u.date;d.setMonth(d.getMonth()+1),u=r.getDateInfo(d)}o(r.getNextNDay(e.end.time,1).formatedDate),l&&this._drawSplitline(a._getEdgesPoints(a._tlpoints,h,i),s,n),l&&this._drawSplitline(a._getEdgesPoints(a._blpoints,h,i),s,n)},_getEdgesPoints:function(t,e,i){var n=[t[0].slice(),t[t.length-1].slice()],o=\"horizontal\"===i?0:1;return n[0][o]=n[0][o]-e/2,n[1][o]=n[1][o]+e/2,n},_drawSplitline:function(t,e,i){var n=new cb({z2:20,shape:{points:t},style:e});i.add(n)},_getLinePointsOfOneWeek:function(t,e,i){var n=t.coordinateSystem;e=n.getDateInfo(e);for(var o=[],a=0;a<7;a++){var r=n.getNextNDay(e.time,a),s=n.dataToRect([r.time],!1);o[2*r.day]=s.tl,o[2*r.day+1]=s[\"horizontal\"===i?\"bl\":\"tr\"]}return o},_formatterLabel:function(t,e){return\"string\"==typeof t&&t?Hi(t,e):\"function\"==typeof t?t(e):e.nameMap},_yearTextPositionControl:function(t,e,i,n,o){e=e.slice();var a=[\"center\",\"bottom\"];\"bottom\"===n?(e[1]+=o,a=[\"center\",\"top\"]):\"left\"===n?e[0]-=o:\"right\"===n?(e[0]+=o,a=[\"center\",\"top\"]):e[1]-=o;var r=0;return\"left\"!==n&&\"right\"!==n||(r=Math.PI/2),{rotation:r,position:e,style:{textAlign:a[0],textVerticalAlign:a[1]}}},_renderYearText:function(t,e,i,n){var o=t.getModel(\"yearLabel\");if(o.get(\"show\")){var a=o.get(\"margin\"),r=o.get(\"position\");r||(r=\"horizontal\"!==i?\"top\":\"left\");var s=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],l=(s[0][0]+s[1][0])/2,h=(s[0][1]+s[1][1])/2,u=\"horizontal\"===i?0:1,c={top:[l,s[u][1]],bottom:[l,s[1-u][1]],left:[s[1-u][0],h],right:[s[u][0],h]},d=e.start.y;+e.end.y>+e.start.y&&(d=d+\"-\"+e.end.y);var f=o.get(\"formatter\"),g={start:e.start.y,end:e.end.y,nameMap:d},p=this._formatterLabel(f,g),m=new ib({z2:30});fo(m.style,o,{text:p}),m.attr(this._yearTextPositionControl(m,c[r],i,r,a)),n.add(m)}},_monthTextPositionControl:function(t,e,i,n,o){var a=\"left\",r=\"top\",s=t[0],l=t[1];return\"horizontal\"===i?(l+=o,e&&(a=\"center\"),\"start\"===n&&(r=\"bottom\")):(s+=o,e&&(r=\"middle\"),\"start\"===n&&(a=\"right\")),{x:s,y:l,textAlign:a,textVerticalAlign:r}},_renderMonthText:function(t,e,i){var n=t.getModel(\"monthLabel\");if(n.get(\"show\")){var o=n.get(\"nameMap\"),r=n.get(\"margin\"),s=n.get(\"position\"),l=n.get(\"align\"),h=[this._tlpoints,this._blpoints];_(o)&&(o=dD[o.toUpperCase()]||[]);var u=\"start\"===s?0:1,c=\"horizontal\"===e?0:1;r=\"start\"===s?-r:r;for(var d=\"center\"===l,f=0;f<h[u].length-1;f++){var g=h[u][f].slice(),p=this._firstDayOfMonth[f];if(d){var m=this._firstDayPoints[f];g[c]=(m[c]+h[0][f+1][c])/2}var v=n.get(\"formatter\"),y=o[+p.m-1],x={yyyy:p.y,yy:(p.y+\"\").slice(2),MM:p.m,M:+p.m,nameMap:y},b=this._formatterLabel(v,x),w=new ib({z2:30});a(fo(w.style,n,{text:b}),this._monthTextPositionControl(g,d,e,s,r)),i.add(w)}}},_weekTextPositionControl:function(t,e,i,n,o){var a=\"center\",r=\"middle\",s=t[0],l=t[1],h=\"start\"===i;return\"horizontal\"===e?(s=s+n+(h?1:-1)*o[0]/2,a=h?\"right\":\"left\"):(l=l+n+(h?1:-1)*o[1]/2,r=h?\"bottom\":\"top\"),{x:s,y:l,textAlign:a,textVerticalAlign:r}},_renderWeekText:function(t,e,i,n){var o=t.getModel(\"dayLabel\");if(o.get(\"show\")){var r=t.coordinateSystem,s=o.get(\"position\"),l=o.get(\"nameMap\"),h=o.get(\"margin\"),u=r.getFirstDayOfWeek();_(l)&&(l=fD[l.toUpperCase()]||[]);var c=r.getNextNDay(e.end.time,7-e.lweek).time,d=[r.getCellWidth(),r.getCellHeight()];h=Si(h,d[\"horizontal\"===i?0:1]),\"start\"===s&&(c=r.getNextNDay(e.start.time,-(7+e.fweek)).time,h=-h);for(var f=0;f<7;f++){var g=r.getNextNDay(c,f),p=r.dataToRect([g.time],!1).center,m=f;m=Math.abs((f+u)%7);var v=new ib({z2:30});a(fo(v.style,o,{text:l[m]}),this._weekTextPositionControl(p,i,s,h,d)),n.add(v)}}}}),sr({type:\"title\",layoutMode:{type:\"box\",ignoreSize:!0},defaultOption:{zlevel:0,z:6,show:!0,text:\"\",target:\"blank\",subtext:\"\",subtarget:\"blank\",left:0,top:0,backgroundColor:\"rgba(0,0,0,0)\",borderColor:\"#ccc\",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:\"bolder\",color:\"#333\"},subtextStyle:{color:\"#aaa\"}}}),lr({type:\"title\",render:function(t,e,i){if(this.group.removeAll(),t.get(\"show\")){var n=this.group,o=t.getModel(\"textStyle\"),a=t.getModel(\"subtextStyle\"),r=t.get(\"textAlign\"),s=t.get(\"textBaseline\"),l=new ib({style:fo({},o,{text:t.get(\"text\"),textFill:o.getTextColor()},{disableBox:!0}),z2:10}),h=l.getBoundingRect(),u=t.get(\"subtext\"),c=new ib({style:fo({},a,{text:u,textFill:a.getTextColor(),y:h.height+t.get(\"itemGap\"),textVerticalAlign:\"top\"},{disableBox:!0}),z2:10}),d=t.get(\"link\"),f=t.get(\"sublink\");l.silent=!d,c.silent=!f,d&&l.on(\"click\",function(){window.open(d,\"_\"+t.get(\"target\"))}),f&&c.on(\"click\",function(){window.open(f,\"_\"+t.get(\"subtarget\"))}),n.add(l),u&&n.add(c);var g=n.getBoundingRect(),p=t.getBoxLayoutParams();p.width=g.width,p.height=g.height;var m=Ko(p,{width:i.getWidth(),height:i.getHeight()},t.get(\"padding\"));r||(\"middle\"===(r=t.get(\"left\")||t.get(\"right\"))&&(r=\"center\"),\"right\"===r?m.x+=m.width:\"center\"===r&&(m.x+=m.width/2)),s||(\"center\"===(s=t.get(\"top\")||t.get(\"bottom\"))&&(s=\"middle\"),\"bottom\"===s?m.y+=m.height:\"middle\"===s&&(m.y+=m.height/2),s=s||\"top\"),n.attr(\"position\",[m.x,m.y]);var v={textAlign:r,textVerticalAlign:s};l.setStyle(v),c.setStyle(v),g=n.getBoundingRect();var y=m.margin,x=t.getItemStyle([\"color\",\"opacity\"]);x.fill=t.get(\"backgroundColor\");var _=new db({shape:{x:g.x-y[3],y:g.y-y[0],width:g.width+y[1]+y[3],height:g.height+y[0]+y[2],r:t.get(\"borderRadius\")},style:x,silent:!0});$n(_),n.add(_)}}}),Ub.registerSubTypeDefaulter(\"dataZoom\",function(){return\"slider\"});var gD=[\"cartesian2d\",\"polar\",\"singleAxis\"],pD=function(t,e){var i=f(t=t.slice(),Ui),n=f(e=(e||[]).slice(),Ui);return function(o,a){d(t,function(t,r){for(var s={name:t,capital:i[r]},l=0;l<e.length;l++)s[e[l]]=t+n[l];o.call(a,s)})}}([\"x\",\"y\",\"z\",\"radius\",\"angle\",\"single\"],[\"axisIndex\",\"axis\",\"index\",\"id\"]),mD=d,vD=Ii,yD=function(t,e,i,n){this._dimName=t,this._axisIndex=e,this._valueWindow,this._percentWindow,this._dataExtent,this._minMaxSpan,this.ecModel=n,this._dataZoomModel=i};yD.prototype={constructor:yD,hostedBy:function(t){return this._dataZoomModel===t},getDataValueWindow:function(){return this._valueWindow.slice()},getDataPercentWindow:function(){return this._percentWindow.slice()},getTargetSeriesModels:function(){var t=[],e=this.ecModel;return e.eachSeries(function(i){if(Cp(i.get(\"coordinateSystem\"))){var n=this._dimName,o=e.queryComponents({mainType:n+\"Axis\",index:i.get(n+\"AxisIndex\"),id:i.get(n+\"AxisId\")})[0];this._axisIndex===(o&&o.componentIndex)&&t.push(i)}},this),t},getAxisModel:function(){return this.ecModel.getComponent(this._dimName+\"Axis\",this._axisIndex)},getOtherAxisModel:function(){var t,e,i=this._dimName,n=this.ecModel,o=this.getAxisModel();\"x\"===i||\"y\"===i?(e=\"gridIndex\",t=\"x\"===i?\"y\":\"x\"):(e=\"polarIndex\",t=\"angle\"===i?\"radius\":\"angle\");var a;return n.eachComponent(t+\"Axis\",function(t){(t.get(e)||0)===(o.get(e)||0)&&(a=t)}),a},getMinMaxSpan:function(){return i(this._minMaxSpan)},calculateDataWindow:function(t){var e=this._dataExtent,i=this.getAxisModel().axis.scale,n=this._dataZoomModel.getRangePropMode(),o=[0,100],a=[t.start,t.end],r=[];return mD([\"startValue\",\"endValue\"],function(e){r.push(null!=t[e]?i.parse(t[e]):null)}),mD([0,1],function(t){var s=r[t],l=a[t];\"percent\"===n[t]?(null==l&&(l=o[t]),s=i.parse(wi(l,o,e,!0))):l=wi(s,e,o,!0),r[t]=s,a[t]=l}),{valueWindow:vD(r),percentWindow:vD(a)}},reset:function(t){if(t===this._dataZoomModel){this._dataExtent=Lp(this,this._dimName,this.getTargetSeriesModels());var e=this.calculateDataWindow(t.option);this._valueWindow=e.valueWindow,this._percentWindow=e.percentWindow,Op(this),Pp(this)}},restore:function(t){t===this._dataZoomModel&&(this._valueWindow=this._percentWindow=null,Pp(this,!0))},filterData:function(t){function e(t){return t>=a[0]&&t<=a[1]}if(t===this._dataZoomModel){var i=this._dimName,n=this.getTargetSeriesModels(),o=t.get(\"filterMode\"),a=this._valueWindow;if(\"none\"!==o){var r=this.getOtherAxisModel();t.get(\"$fromToolbox\")&&r&&\"category\"===r.get(\"type\")&&(o=\"empty\"),mD(n,function(t){var n=t.getData(),r=t.coordDimToDataDim(i);\"weakFilter\"===o?n&&n.filterSelf(function(t){for(var e,i,o,s=0;s<r.length;s++){var l=n.get(r[s],t),h=!isNaN(l),u=l<a[0],c=l>a[1];if(h&&!u&&!c)return!0;h&&(o=!0),u&&(e=!0),c&&(i=!0)}return o&&e&&i}):n&&mD(r,function(i){\"empty\"===o?t.setData(n.map(i,function(t){return e(t)?t:NaN})):n.filterSelf(i,e)})})}}}};var xD=d,_D=pD,bD=sr({type:\"dataZoom\",dependencies:[\"xAxis\",\"yAxis\",\"zAxis\",\"radiusAxis\",\"angleAxis\",\"singleAxis\",\"series\"],defaultOption:{zlevel:0,z:4,orient:null,xAxisIndex:null,yAxisIndex:null,filterMode:\"filter\",throttle:null,start:0,end:100,startValue:null,endValue:null,minSpan:null,maxSpan:null,minValueSpan:null,maxValueSpan:null,rangeMode:null},init:function(t,e,i){this._dataIntervalByAxis={},this._dataInfo={},this._axisProxies={},this.textStyleModel,this._autoThrottle=!0,this._rangePropMode=[\"percent\",\"percent\"];var n=zp(t);this.mergeDefaultAndTheme(t,i),this.doInit(n)},mergeOption:function(t){var e=zp(t);n(this.option,t,!0),this.doInit(e)},doInit:function(t){var e=this.option;Uv.canvasSupported||(e.realtime=!1),this._setDefaultThrottle(t),Np(this,t),xD([[\"start\",\"startValue\"],[\"end\",\"endValue\"]],function(t,i){\"value\"===this._rangePropMode[i]&&(e[t[0]]=null)},this),this.textStyleModel=this.getModel(\"textStyle\"),this._resetTarget(),this._giveAxisProxies()},_giveAxisProxies:function(){var t=this._axisProxies;this.eachTargetAxis(function(e,i,n,o){var a=this.dependentModels[e.axis][i],r=a.__dzAxisProxy||(a.__dzAxisProxy=new yD(e.name,i,this,o));t[e.name+\"_\"+i]=r},this)},_resetTarget:function(){var t=this.option,e=this._judgeAutoMode();_D(function(e){var i=e.axisIndex;t[i]=Oo(t[i])},this),\"axisIndex\"===e?this._autoSetAxisIndex():\"orient\"===e&&this._autoSetOrient()},_judgeAutoMode:function(){var t=this.option,e=!1;_D(function(i){null!=t[i.axisIndex]&&(e=!0)},this);var i=t.orient;return null==i&&e?\"orient\":e?void 0:(null==i&&(t.orient=\"horizontal\"),\"axisIndex\")},_autoSetAxisIndex:function(){var t=!0,e=this.get(\"orient\",!0),i=this.option,n=this.dependentModels;if(t){var o=\"vertical\"===e?\"y\":\"x\";n[o+\"Axis\"].length?(i[o+\"AxisIndex\"]=[0],t=!1):xD(n.singleAxis,function(n){t&&n.get(\"orient\",!0)===e&&(i.singleAxisIndex=[n.componentIndex],t=!1)})}t&&_D(function(e){if(t){var n=[],o=this.dependentModels[e.axis];if(o.length&&!n.length)for(var a=0,r=o.length;a<r;a++)\"category\"===o[a].get(\"type\")&&n.push(a);i[e.axisIndex]=n,n.length&&(t=!1)}},this),t&&this.ecModel.eachSeries(function(t){this._isSeriesHasAllAxesTypeOf(t,\"value\")&&_D(function(e){var n=i[e.axisIndex],o=t.get(e.axisIndex),a=t.get(e.axisId);l(n,o=t.ecModel.queryComponents({mainType:e.axis,index:o,id:a})[0].componentIndex)<0&&n.push(o)})},this)},_autoSetOrient:function(){var t;this.eachTargetAxis(function(e){!t&&(t=e.name)},this),this.option.orient=\"y\"===t?\"vertical\":\"horizontal\"},_isSeriesHasAllAxesTypeOf:function(t,e){var i=!0;return _D(function(n){var o=t.get(n.axisIndex),a=this.dependentModels[n.axis][o];a&&a.get(\"type\")===e||(i=!1)},this),i},_setDefaultThrottle:function(t){if(t.hasOwnProperty(\"throttle\")&&(this._autoThrottle=!1),this._autoThrottle){var e=this.ecModel.option;this.option.throttle=e.animation&&e.animationDurationUpdate>0?100:20}},getFirstTargetAxisModel:function(){var t;return _D(function(e){if(null==t){var i=this.get(e.axisIndex);i.length&&(t=this.dependentModels[e.axis][i[0]])}},this),t},eachTargetAxis:function(t,e){var i=this.ecModel;_D(function(n){xD(this.get(n.axisIndex),function(o){t.call(e,n,o,this,i)},this)},this)},getAxisProxy:function(t,e){return this._axisProxies[t+\"_\"+e]},getAxisModel:function(t,e){var i=this.getAxisProxy(t,e);return i&&i.getAxisModel()},setRawRange:function(t,e){var i=this.option;xD([[\"start\",\"startValue\"],[\"end\",\"endValue\"]],function(e){null==t[e[0]]&&null==t[e[1]]||(i[e[0]]=t[e[0]],i[e[1]]=t[e[1]])},this),!e&&Np(this,t)},getPercentRange:function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},getValueRange:function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var i=this.findRepresentativeAxisProxy();return i?i.getDataValueWindow():void 0},findRepresentativeAxisProxy:function(t){if(t)return t.__dzAxisProxy;var e=this._axisProxies;for(var i in e)if(e.hasOwnProperty(i)&&e[i].hostedBy(this))return e[i];for(var i in e)if(e.hasOwnProperty(i)&&!e[i].hostedBy(this))return e[i]},getRangePropMode:function(){return this._rangePropMode.slice()}}),wD=xw.extend({type:\"dataZoom\",render:function(t,e,i,n){this.dataZoomModel=t,this.ecModel=e,this.api=i},getTargetCoordInfo:function(){function t(t,e,i,n){for(var o,a=0;a<i.length;a++)if(i[a].model===t){o=i[a];break}o||i.push(o={model:t,axisModels:[],coordIndex:n}),o.axisModels.push(e)}var e=this.dataZoomModel,i=this.ecModel,n={};return e.eachTargetAxis(function(e,o){var a=i.getComponent(e.axis,o);if(a){var r=a.getCoordSysModel();r&&t(r,a,n[r.mainType]||(n[r.mainType]=[]),r.componentIndex)}},this),n}}),SD=(bD.extend({type:\"dataZoom.slider\",layoutMode:\"box\",defaultOption:{show:!0,right:\"ph\",top:\"ph\",width:\"ph\",height:\"ph\",left:null,bottom:null,backgroundColor:\"rgba(47,69,84,0)\",dataBackground:{lineStyle:{color:\"#2f4554\",width:.5,opacity:.3},areaStyle:{color:\"rgba(47,69,84,0.3)\",opacity:.3}},borderColor:\"#ddd\",fillerColor:\"rgba(167,183,204,0.4)\",handleIcon:\"M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z\",handleSize:\"100%\",handleStyle:{color:\"#a7b7cc\"},labelPrecision:null,labelFormatter:null,showDetail:!0,showDataShadow:\"auto\",realtime:!0,zoomLock:!1,textStyle:{color:\"#333\"}}}),db),MD=wi,ID=Ii,TD=m,AD=d,CD=\"horizontal\",DD=5,LD=[\"line\",\"bar\",\"candlestick\",\"scatter\"],kD=wD.extend({type:\"dataZoom.slider\",init:function(t,e){this._displayables={},this._orient,this._range,this._handleEnds,this._size,this._handleWidth,this._handleHeight,this._location,this._dragging,this._dataShadowInfo,this.api=e},render:function(t,e,i,n){kD.superApply(this,\"render\",arguments),La(this,\"_dispatchZoomAction\",this.dataZoomModel.get(\"throttle\"),\"fixRate\"),this._orient=t.get(\"orient\"),!1!==this.dataZoomModel.get(\"show\")?(n&&\"dataZoom\"===n.type&&n.from===this.uid||this._buildView(),this._updateView()):this.group.removeAll()},remove:function(){kD.superApply(this,\"remove\",arguments),ka(this,\"_dispatchZoomAction\")},dispose:function(){kD.superApply(this,\"dispose\",arguments),ka(this,\"_dispatchZoomAction\")},_buildView:function(){var t=this.group;t.removeAll(),this._resetLocation(),this._resetInterval();var e=this._displayables.barGroup=new jy;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},_resetLocation:function(){var t=this.dataZoomModel,e=this.api,i=this._findCoordRect(),n={width:e.getWidth(),height:e.getHeight()},o=this._orient===CD?{right:n.width-i.x-i.width,top:n.height-30-7,width:i.width,height:30}:{right:7,top:i.y,width:30,height:i.height},a=ea(t.option);d([\"right\",\"top\",\"width\",\"height\"],function(t){\"ph\"===a[t]&&(a[t]=o[t])});var r=Ko(a,n,t.padding);this._location={x:r.x,y:r.y},this._size=[r.width,r.height],\"vertical\"===this._orient&&this._size.reverse()},_positionGroup:function(){var t=this.group,e=this._location,i=this._orient,n=this.dataZoomModel.getFirstTargetAxisModel(),o=n&&n.get(\"inverse\"),a=this._displayables.barGroup,r=(this._dataShadowInfo||{}).otherAxisInverse;a.attr(i!==CD||o?i===CD&&o?{scale:r?[-1,1]:[-1,-1]}:\"vertical\"!==i||o?{scale:r?[-1,-1]:[-1,1],rotation:Math.PI/2}:{scale:r?[1,-1]:[1,1],rotation:Math.PI/2}:{scale:r?[1,1]:[1,-1]});var s=t.getBoundingRect([a]);t.attr(\"position\",[e.x-s.x,e.y-s.y])},_getViewExtent:function(){return[0,this._size[0]]},_renderBackground:function(){var t=this.dataZoomModel,e=this._size,i=this._displayables.barGroup;i.add(new SD({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get(\"backgroundColor\")},z2:-40})),i.add(new SD({shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:\"transparent\"},z2:0,onclick:m(this._onClickPanelClick,this)}))},_renderDataShadow:function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(t){var e=this._size,i=t.series,n=i.getRawData(),o=i.getShadowDim?i.getShadowDim():t.otherDim;if(null!=o){var a=n.getDataExtent(o),s=.3*(a[1]-a[0]);a=[a[0]-s,a[1]+s];var l,h=[0,e[1]],u=[0,e[0]],c=[[e[0],0],[0,0]],d=[],f=u[1]/(n.count()-1),g=0,p=Math.round(n.count()/e[0]);n.each([o],function(t,e){if(p>0&&e%p)g+=f;else{var i=null==t||isNaN(t)||\"\"===t,n=i?0:MD(t,a,h,!0);i&&!l&&e?(c.push([c[c.length-1][0],0]),d.push([d[d.length-1][0],0])):!i&&l&&(c.push([g,0]),d.push([g,0])),c.push([g,n]),d.push([g,n]),g+=f,l=i}});var m=this.dataZoomModel;this._displayables.barGroup.add(new ub({shape:{points:c},style:r({fill:m.get(\"dataBackgroundColor\")},m.getModel(\"dataBackground.areaStyle\").getAreaStyle()),silent:!0,z2:-20})),this._displayables.barGroup.add(new cb({shape:{points:d},style:m.getModel(\"dataBackground.lineStyle\").getLineStyle(),silent:!0,z2:-19}))}}},_prepareDataShadowInfo:function(){var t=this.dataZoomModel,e=t.get(\"showDataShadow\");if(!1!==e){var i,n=this.ecModel;return t.eachTargetAxis(function(o,a){d(t.getAxisProxy(o.name,a).getTargetSeriesModels(),function(t){if(!(i||!0!==e&&l(LD,t.get(\"type\"))<0)){var r,s=n.getComponent(o.axis,a).axis,h=Ep(o.name),u=t.coordinateSystem;null!=h&&u.getOtherAxis&&(r=u.getOtherAxis(s).inverse),i={thisAxis:s,series:t,thisDim:o.name,otherDim:h,otherAxisInverse:r}}},this)},this),i}},_renderHandle:function(){var t=this._displayables,e=t.handles=[],i=t.handleLabels=[],n=this._displayables.barGroup,o=this._size,a=this.dataZoomModel;n.add(t.filler=new SD({draggable:!0,cursor:Rp(this._orient),drift:TD(this._onDragMove,this,\"all\"),onmousemove:function(t){bx(t.event)},ondragstart:TD(this._showDataInfo,this,!0),ondragend:TD(this._onDragEnd,this),onmouseover:TD(this._showDataInfo,this,!0),onmouseout:TD(this._showDataInfo,this,!1),style:{fill:a.get(\"fillerColor\"),textPosition:\"inside\"}})),n.add(new SD($n({silent:!0,shape:{x:0,y:0,width:o[0],height:o[1]},style:{stroke:a.get(\"dataBackgroundColor\")||a.get(\"borderColor\"),lineWidth:1,fill:\"rgba(0,0,0,0)\"}}))),AD([0,1],function(t){var o=Do(a.get(\"handleIcon\"),{cursor:Rp(this._orient),draggable:!0,drift:TD(this._onDragMove,this,t),onmousemove:function(t){bx(t.event)},ondragend:TD(this._onDragEnd,this),onmouseover:TD(this._showDataInfo,this,!0),onmouseout:TD(this._showDataInfo,this,!1)},{x:-1,y:0,width:2,height:2}),r=o.getBoundingRect();this._handleHeight=Si(a.get(\"handleSize\"),this._size[1]),this._handleWidth=r.width/r.height*this._handleHeight,o.setStyle(a.getModel(\"handleStyle\").getItemStyle());var s=a.get(\"handleColor\");null!=s&&(o.style.fill=s),n.add(e[t]=o);var l=a.textStyleModel;this.group.add(i[t]=new ib({silent:!0,invisible:!0,style:{x:0,y:0,text:\"\",textVerticalAlign:\"middle\",textAlign:\"center\",textFill:l.getTextColor(),textFont:l.getFont()},z2:10}))},this)},_resetInterval:function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[MD(t[0],[0,100],e,!0),MD(t[1],[0,100],e,!0)]},_updateInterval:function(t,e){var i=this.dataZoomModel,n=this._handleEnds,o=this._getViewExtent(),a=i.findRepresentativeAxisProxy().getMinMaxSpan(),r=[0,100];OT(e,n,o,i.get(\"zoomLock\")?\"all\":t,null!=a.minSpan?MD(a.minSpan,r,o,!0):null,null!=a.maxSpan?MD(a.maxSpan,r,o,!0):null),this._range=ID([MD(n[0],o,r,!0),MD(n[1],o,r,!0)])},_updateView:function(t){var e=this._displayables,i=this._handleEnds,n=ID(i.slice()),o=this._size;AD([0,1],function(t){var n=e.handles[t],a=this._handleHeight;n.attr({scale:[a/2,a/2],position:[i[t],o[1]/2-a/2]})},this),e.filler.setShape({x:n[0],y:0,width:n[1]-n[0],height:o[1]}),this._updateDataInfo(t)},_updateDataInfo:function(t){function e(t){var e=Mo(n.handles[t].parent,this.group),i=To(0===t?\"right\":\"left\",e),s=this._handleWidth/2+DD,l=Io([c[t]+(0===t?-s:s),this._size[1]/2],e);o[t].setStyle({x:l[0],y:l[1],textVerticalAlign:a===CD?\"middle\":i,textAlign:a===CD?i:\"center\",text:r[t]})}var i=this.dataZoomModel,n=this._displayables,o=n.handleLabels,a=this._orient,r=[\"\",\"\"];if(i.get(\"showDetail\")){var s=i.findRepresentativeAxisProxy();if(s){var l=s.getAxisModel().axis,h=this._range,u=t?s.calculateDataWindow({start:h[0],end:h[1]}).valueWindow:s.getDataValueWindow();r=[this._formatLabel(u[0],l),this._formatLabel(u[1],l)]}}var c=ID(this._handleEnds.slice());e.call(this,0),e.call(this,1)},_formatLabel:function(t,e){var i=this.dataZoomModel,n=i.get(\"labelFormatter\"),o=i.get(\"labelPrecision\");null!=o&&\"auto\"!==o||(o=e.getPixelPrecision());var a=null==t||isNaN(t)?\"\":\"category\"===e.type||\"time\"===e.type?e.scale.getLabel(Math.round(t)):t.toFixed(Math.min(o,20));return x(n)?n(t,a):_(n)?n.replace(\"{value}\",a):a},_showDataInfo:function(t){t=this._dragging||t;var e=this._displayables.handleLabels;e[0].attr(\"invisible\",!t),e[1].attr(\"invisible\",!t)},_onDragMove:function(t,e,i){this._dragging=!0;var n=Io([e,i],this._displayables.barGroup.getLocalTransform(),!0);this._updateInterval(t,n[0]);var o=this.dataZoomModel.get(\"realtime\");this._updateView(!o),o&&o&&this._dispatchZoomAction()},_onDragEnd:function(){this._dragging=!1,this._showDataInfo(!1),this._dispatchZoomAction()},_onClickPanelClick:function(t){var e=this._size,i=this._displayables.barGroup.transformCoordToLocal(t.offsetX,t.offsetY);if(!(i[0]<0||i[0]>e[0]||i[1]<0||i[1]>e[1])){var n=this._handleEnds,o=(n[0]+n[1])/2;this._updateInterval(\"all\",i[0]-o),this._updateView(),this._dispatchZoomAction()}},_dispatchZoomAction:function(){var t=this._range;this.api.dispatchAction({type:\"dataZoom\",from:this.uid,dataZoomId:this.dataZoomModel.id,start:t[0],end:t[1]})},_findCoordRect:function(){var t;if(AD(this.getTargetCoordInfo(),function(e){if(!t&&e.length){var i=e[0].model.coordinateSystem;t=i.getRect&&i.getRect()}}),!t){var e=this.api.getWidth(),i=this.api.getHeight();t={x:.2*e,y:.2*i,width:.6*e,height:.6*i}}return t}});bD.extend({type:\"dataZoom.inside\",defaultOption:{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,preventDefaultMouseMove:!0}});var PD=v,OD=\"\\0_ec_dataZoom_roams\",zD=m,ND=wD.extend({type:\"dataZoom.inside\",init:function(t,e){this._range},render:function(t,e,i,n){ND.superApply(this,\"render\",arguments),Gp(n,t.id)&&(this._range=t.getPercentRange()),d(this.getTargetCoordInfo(),function(e,n){var o=f(e,function(t){return Wp(t.model)});d(e,function(e){var a=e.model,r=t.option;Vp(i,{coordId:Wp(a),allCoordIds:o,containsPoint:function(t,e,i){return a.coordinateSystem.containPoint([e,i])},dataZoomId:t.id,throttleRate:t.get(\"throttle\",!0),panGetRange:zD(this._onPan,this,e,n),zoomGetRange:zD(this._onZoom,this,e,n),zoomLock:r.zoomLock,disabled:r.disabled,roamControllerOpt:{zoomOnMouseWheel:r.zoomOnMouseWheel,moveOnMouseMove:r.moveOnMouseMove,preventDefaultMouseMove:r.preventDefaultMouseMove}})},this)},this)},dispose:function(){Bp(this.api,this.dataZoomModel.id),ND.superApply(this,\"dispose\",arguments),this._range=null},_onPan:function(t,e,i,n,o,a,r,s,l){var h=this._range.slice(),u=t.axisModels[0];if(u){var c=ED[e]([a,r],[s,l],u,i,t),d=c.signal*(h[1]-h[0])*c.pixel/c.pixelLength;return OT(d,h,[0,100],\"all\"),this._range=h}},_onZoom:function(t,e,i,n,o,a){var r=this._range.slice(),s=t.axisModels[0];if(s){var l=ED[e](null,[o,a],s,i,t),h=(l.signal>0?l.pixelStart+l.pixelLength-l.pixel:l.pixel-l.pixelStart)/l.pixelLength*(r[1]-r[0])+r[0];n=Math.max(1/n,0),r[0]=(r[0]-h)*n+h,r[1]=(r[1]-h)*n+h;var u=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return OT(0,r,[0,100],0,u.minSpan,u.maxSpan),this._range=r}}}),ED={grid:function(t,e,i,n,o){var a=i.axis,r={},s=o.model.coordinateSystem.getRect();return t=t||[0,0],\"x\"===a.dim?(r.pixel=e[0]-t[0],r.pixelLength=s.width,r.pixelStart=s.x,r.signal=a.inverse?1:-1):(r.pixel=e[1]-t[1],r.pixelLength=s.height,r.pixelStart=s.y,r.signal=a.inverse?-1:1),r},polar:function(t,e,i,n,o){var a=i.axis,r={},s=o.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),h=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),\"radiusAxis\"===i.mainType?(r.pixel=e[0]-t[0],r.pixelLength=l[1]-l[0],r.pixelStart=l[0],r.signal=a.inverse?1:-1):(r.pixel=e[1]-t[1],r.pixelLength=h[1]-h[0],r.pixelStart=h[0],r.signal=a.inverse?-1:1),r},singleAxis:function(t,e,i,n,o){var a=i.axis,r=o.model.coordinateSystem.getRect(),s={};return t=t||[0,0],\"horizontal\"===a.orient?(s.pixel=e[0]-t[0],s.pixelLength=r.width,s.pixelStart=r.x,s.signal=a.inverse?1:-1):(s.pixel=e[1]-t[1],s.pixelLength=r.height,s.pixelStart=r.y,s.signal=a.inverse?-1:1),s}};er(function(t,e){t.eachComponent(\"dataZoom\",function(t){t.eachTargetAxis($p),t.eachTargetAxis(Kp)}),t.eachComponent(\"dataZoom\",function(t){var e=t.findRepresentativeAxisProxy(),i=e.getDataPercentWindow(),n=e.getDataValueWindow();t.setRawRange({start:i[0],end:i[1],startValue:n[0],endValue:n[1]},!0)})}),ir(\"dataZoom\",function(t,e){var i=Dp(m(e.eachComponent,e,\"dataZoom\"),pD,function(t,e){return t.get(e.axisIndex)}),n=[];e.eachComponent({mainType:\"dataZoom\",query:t},function(t,e){n.push.apply(n,i(t).nodes)}),d(n,function(e,i){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})})});var RD=d,VD=function(t){var e=t&&t.visualMap;y(e)||(e=e?[e]:[]),RD(e,function(t){if(t){Jp(t,\"splitList\")&&!Jp(t,\"pieces\")&&(t.pieces=t.splitList,delete t.splitList);var e=t.pieces;e&&y(e)&&RD(e,function(t){b(t)&&(Jp(t,\"start\")&&!Jp(t,\"min\")&&(t.min=t.start),Jp(t,\"end\")&&!Jp(t,\"max\")&&(t.max=t.end))})}})};Ub.registerSubTypeDefaulter(\"visualMap\",function(t){return t.categories||(t.pieces?t.pieces.length>0:t.splitNumber>0)&&!t.calculable?\"piecewise\":\"continuous\"}),ar(Pw.VISUAL.COMPONENT,function(t){t.eachComponent(\"visualMap\",function(t){Qp(t)}),tm(t)});var BD={get:function(t,e,n){var o=i((GD[t]||{})[e]);return n&&y(o)?o[o.length-1]:o}},GD={color:{active:[\"#006edd\",\"#e0ffff\"],inactive:[\"rgba(0,0,0,0)\"]},colorHue:{active:[0,360],inactive:[0,0]},colorSaturation:{active:[.3,1],inactive:[0,0]},colorLightness:{active:[.9,.5],inactive:[0,0]},colorAlpha:{active:[.3,1],inactive:[0,0]},opacity:{active:[.3,1],inactive:[0,0]},symbol:{active:[\"circle\",\"roundRect\",\"diamond\"],inactive:[\"none\"]},symbolSize:{active:[10,50],inactive:[0,0]}},WD=jI.mapVisual,HD=jI.eachVisual,FD=y,ZD=d,UD=Ii,XD=wi,jD=N,qD=[\"#f6efa6\",\"#d88273\",\"#bf444c\"],YD=sr({type:\"visualMap\",dependencies:[\"series\"],stateList:[\"inRange\",\"outOfRange\"],replacableOptionKeys:[\"inRange\",\"outOfRange\",\"target\",\"controller\",\"color\"],dataBound:[-1/0,1/0],layoutMode:{type:\"box\",ignoreSize:!0},defaultOption:{show:!0,zlevel:0,z:4,seriesIndex:\"all\",min:0,max:200,dimension:null,inRange:null,outOfRange:null,left:0,right:null,top:null,bottom:0,itemWidth:null,itemHeight:null,inverse:!1,orient:\"vertical\",backgroundColor:\"rgba(0,0,0,0)\",borderColor:\"#ccc\",contentColor:\"#5793f3\",inactiveColor:\"#aaa\",borderWidth:0,padding:5,textGap:10,precision:0,color:null,formatter:null,text:null,textStyle:{color:\"#333\"}},init:function(t,e,i){this._dataExtent,this.targetVisuals={},this.controllerVisuals={},this.textStyleModel,this.itemSize,this.mergeDefaultAndTheme(t,i)},optionUpdated:function(t,e){var i=this.option;Uv.canvasSupported||(i.realtime=!1),!e&&Jg(i,t,this.replacableOptionKeys),this.textStyleModel=this.getModel(\"textStyle\"),this.resetItemSize(),this.completeVisualOption()},resetVisual:function(t){var e=this.stateList;t=m(t,this),this.controllerVisuals=Kg(this.option.controller,e,t),this.targetVisuals=Kg(this.option.target,e,t)},getTargetSeriesIndices:function(){var t=this.option.seriesIndex,e=[];return null==t||\"all\"===t?this.ecModel.eachSeries(function(t,i){e.push(i)}):e=Oo(t),e},eachTargetSeries:function(t,e){d(this.getTargetSeriesIndices(),function(i){t.call(e,this.ecModel.getSeriesByIndex(i))},this)},isTargetSeries:function(t){var e=!1;return this.eachTargetSeries(function(i){i===t&&(e=!0)}),e},formatValueText:function(t,e,i){function n(t){return t===l[0]?\"min\":t===l[1]?\"max\":(+t).toFixed(Math.min(s,20))}var o,a,r=this.option,s=r.precision,l=this.dataBound,h=r.formatter;return i=i||[\"<\",\">\"],y(t)&&(t=t.slice(),o=!0),a=e?t:o?[n(t[0]),n(t[1])]:n(t),_(h)?h.replace(\"{value}\",o?a[0]:a).replace(\"{value2}\",o?a[1]:a):x(h)?o?h(t[0],t[1]):h(t):o?t[0]===l[0]?i[0]+\" \"+a[1]:t[1]===l[1]?i[1]+\" \"+a[0]:a[0]+\" - \"+a[1]:a},resetExtent:function(){var t=this.option,e=UD([t.min,t.max]);this._dataExtent=e},getDataDimension:function(t){var e=this.option.dimension;return null!=e?e:t.dimensions.length-1},getExtent:function(){return this._dataExtent.slice()},completeVisualOption:function(){function t(t){FD(e.color)&&!t.inRange&&(t.inRange={color:e.color.slice().reverse()}),t.inRange=t.inRange||{color:qD},ZD(this.stateList,function(e){var i=t[e];if(_(i)){var n=BD.get(i,\"active\",s);n?(t[e]={},t[e][i]=n):delete t[e]}},this)}var e=this.option,o={inRange:e.inRange,outOfRange:e.outOfRange},a=e.target||(e.target={}),r=e.controller||(e.controller={});n(a,o),n(r,o);var s=this.isCategory();t.call(this,a),t.call(this,r),function(t,e,i){var n=t[e],o=t[i];n&&!o&&(o=t[i]={},ZD(n,function(t,e){if(jI.isValidType(e)){var i=BD.get(e,\"inactive\",s);null!=i&&(o[e]=i,\"color\"!==e||o.hasOwnProperty(\"opacity\")||o.hasOwnProperty(\"colorAlpha\")||(o.opacity=[0,0]))}}))}.call(this,a,\"inRange\",\"outOfRange\"),function(t){var e=(t.inRange||{}).symbol||(t.outOfRange||{}).symbol,n=(t.inRange||{}).symbolSize||(t.outOfRange||{}).symbolSize,o=this.get(\"inactiveColor\");ZD(this.stateList,function(a){var r=this.itemSize,l=t[a];l||(l=t[a]={color:s?o:[o]}),null==l.symbol&&(l.symbol=e&&i(e)||(s?\"roundRect\":[\"roundRect\"])),null==l.symbolSize&&(l.symbolSize=n&&i(n)||(s?r[0]:[r[0],r[0]])),l.symbol=WD(l.symbol,function(t){return\"none\"===t||\"square\"===t?\"roundRect\":t});var h=l.symbolSize;if(null!=h){var u=-1/0;HD(h,function(t){t>u&&(u=t)}),l.symbolSize=WD(h,function(t){return XD(t,[0,u],[0,r[0]],!0)})}},this)}.call(this,r)},resetItemSize:function(){this.itemSize=[parseFloat(this.get(\"itemWidth\")),parseFloat(this.get(\"itemHeight\"))]},isCategory:function(){return!!this.option.categories},setSelected:jD,getValueState:jD,getVisualMeta:jD}),$D=[20,140],KD=YD.extend({type:\"visualMap.continuous\",defaultOption:{align:\"auto\",calculable:!1,range:null,realtime:!0,itemHeight:null,itemWidth:null,hoverLink:!0,hoverLinkDataSize:null,hoverLinkOnHandle:null},optionUpdated:function(t,e){KD.superApply(this,\"optionUpdated\",arguments),this.resetExtent(),this.resetVisual(function(t){t.mappingMethod=\"linear\",t.dataExtent=this.getExtent()}),this._resetRange()},resetItemSize:function(){KD.superApply(this,\"resetItemSize\",arguments);var t=this.itemSize;\"horizontal\"===this._orient&&t.reverse(),(null==t[0]||isNaN(t[0]))&&(t[0]=$D[0]),(null==t[1]||isNaN(t[1]))&&(t[1]=$D[1])},_resetRange:function(){var t=this.getExtent(),e=this.option.range;!e||e.auto?(t.auto=1,this.option.range=t):y(e)&&(e[0]>e[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},completeVisualOption:function(){YD.prototype.completeVisualOption.apply(this,arguments),d(this.stateList,function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=0)},this)},setSelected:function(t){this.option.range=t.slice(),this._resetRange()},getSelected:function(){var t=this.getExtent(),e=Ii((this.get(\"range\")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]<t[0]&&(e[0]=t[0]),e[1]<t[0]&&(e[1]=t[0]),e},getValueState:function(t){var e=this.option.range,i=this.getExtent();return(e[0]<=i[0]||e[0]<=t)&&(e[1]>=i[1]||t<=e[1])?\"inRange\":\"outOfRange\"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){t[0]<=e&&e<=t[1]&&n.push(i)},!0,this),e.push({seriesId:i.id,dataIndex:n})},this),e},getVisualMeta:function(t){function e(e,i){o.push({value:e,color:t(e,i)})}for(var i=im(0,0,this.getExtent()),n=im(0,0,this.option.range.slice()),o=[],a=0,r=0,s=n.length,l=i.length;r<l&&(!n.length||i[r]<=n[0]);r++)i[r]<n[a]&&e(i[r],\"outOfRange\");for(h=1;a<s;a++,h=0)h&&o.length&&e(n[a],\"outOfRange\"),e(n[a],\"inRange\");for(var h=1;r<l;r++)(!n.length||n[n.length-1]<i[r])&&(h&&(o.length&&e(o[o.length-1].value,\"outOfRange\"),h=0),e(i[r],\"outOfRange\"));var u=o.length;return{stops:o,outerColors:[u?o[0].color:\"transparent\",u?o[u-1].color:\"transparent\"]}}}),JD=lr({type:\"visualMap\",autoPositionValues:{left:1,right:1,top:1,bottom:1},init:function(t,e){this.ecModel=t,this.api=e,this.visualMapModel},render:function(t,e,i,n){this.visualMapModel=t,!1!==t.get(\"show\")?this.doRender.apply(this,arguments):this.group.removeAll()},renderBackground:function(t){var e=this.visualMapModel,i=Gx(e.get(\"padding\")||0),n=t.getBoundingRect();t.add(new db({z2:-1,silent:!0,shape:{x:n.x-i[3],y:n.y-i[0],width:n.width+i[3]+i[1],height:n.height+i[0]+i[2]},style:{fill:e.get(\"backgroundColor\"),stroke:e.get(\"borderColor\"),lineWidth:e.get(\"borderWidth\")}}))},getControllerVisual:function(t,e,i){function n(t){return s[t]}function o(t,e){s[t]=e}var a=(i=i||{}).forceState,r=this.visualMapModel,s={};if(\"symbol\"===e&&(s.symbol=r.get(\"itemSymbol\")),\"color\"===e){var l=r.get(\"contentColor\");s.color=l}var h=r.controllerVisuals[a||r.getValueState(t)];return d(jI.prepareVisualTypes(h),function(a){var r=h[a];i.convertOpacityToAlpha&&\"opacity\"===a&&(a=\"colorAlpha\",r=h.__alphaForOpacity),jI.dependsOn(a,e)&&r&&r.applyVisual(t,n,o)}),s[e]},positionGroup:function(t){var e=this.visualMapModel,i=this.api;Jo(t,e.getBoxLayoutParams(),{width:i.getWidth(),height:i.getHeight()})},doRender:N}),QD=wi,tL=d,eL=Math.min,iL=Math.max,nL=12,oL=6,aL=JD.extend({type:\"visualMap.continuous\",init:function(){aL.superApply(this,\"init\",arguments),this._shapes={},this._dataInterval=[],this._handleEnds=[],this._orient,this._useHandle,this._hoverLinkDataIndices=[],this._dragging,this._hovering},doRender:function(t,e,i,n){n&&\"selectDataRange\"===n.type&&n.from===this.uid||this._buildView()},_buildView:function(){this.group.removeAll();var t=this.visualMapModel,e=this.group;this._orient=t.get(\"orient\"),this._useHandle=t.get(\"calculable\"),this._resetInterval(),this._renderBar(e);var i=t.get(\"text\");this._renderEndsText(e,i,0),this._renderEndsText(e,i,1),this._updateView(!0),this.renderBackground(e),this._updateView(),this._enableHoverLinkToSeries(),this._enableHoverLinkFromSeries(),this.positionGroup(e)},_renderEndsText:function(t,e,i){if(e){var n=e[1-i];n=null!=n?n+\"\":\"\";var o=this.visualMapModel,a=o.get(\"textGap\"),r=o.itemSize,s=this._shapes.barGroup,l=this._applyTransform([r[0]/2,0===i?-a:r[1]+a],s),h=this._applyTransform(0===i?\"bottom\":\"top\",s),u=this._orient,c=this.visualMapModel.textStyleModel;this.group.add(new ib({style:{x:l[0],y:l[1],textVerticalAlign:\"horizontal\"===u?\"middle\":h,textAlign:\"horizontal\"===u?h:\"center\",text:n,textFont:c.getFont(),textFill:c.getTextColor()}}))}},_renderBar:function(t){var e=this.visualMapModel,i=this._shapes,n=e.itemSize,o=this._orient,a=this._useHandle,r=nm(e,this.api,n),s=i.barGroup=this._createBarGroup(r);s.add(i.outOfRange=am()),s.add(i.inRange=am(null,a?um(this._orient):null,m(this._dragHandle,this,\"all\",!1),m(this._dragHandle,this,\"all\",!0)));var l=e.textStyleModel.getTextRect(\"国\"),h=iL(l.width,l.height);a&&(i.handleThumbs=[],i.handleLabels=[],i.handleLabelPoints=[],this._createHandle(s,0,n,h,o,r),this._createHandle(s,1,n,h,o,r)),this._createIndicator(s,n,h,o),t.add(s)},_createHandle:function(t,e,i,n,o){var a=m(this._dragHandle,this,e,!1),r=m(this._dragHandle,this,e,!0),s=am(rm(e,n),um(this._orient),a,r);s.position[0]=i[0],t.add(s);var l=this.visualMapModel.textStyleModel,h=new ib({draggable:!0,drift:a,onmousemove:function(t){bx(t.event)},ondragend:r,style:{x:0,y:0,text:\"\",textFont:l.getFont(),textFill:l.getTextColor()}});this.group.add(h);var u=[\"horizontal\"===o?n/2:1.5*n,\"horizontal\"===o?0===e?-1.5*n:1.5*n:0===e?-n/2:n/2],c=this._shapes;c.handleThumbs[e]=s,c.handleLabelPoints[e]=u,c.handleLabels[e]=h},_createIndicator:function(t,e,i,n){var o=am([[0,0]],\"move\");o.position[0]=e[0],o.attr({invisible:!0,silent:!0}),t.add(o);var a=this.visualMapModel.textStyleModel,r=new ib({silent:!0,invisible:!0,style:{x:0,y:0,text:\"\",textFont:a.getFont(),textFill:a.getTextColor()}});this.group.add(r);var s=[\"horizontal\"===n?i/2:oL+3,0],l=this._shapes;l.indicator=o,l.indicatorLabel=r,l.indicatorLabelPoint=s},_dragHandle:function(t,e,i,n){if(this._useHandle){if(this._dragging=!e,!e){var o=this._applyTransform([i,n],this._shapes.barGroup,!0);this._updateInterval(t,o[1]),this._updateView()}e===!this.visualMapModel.get(\"realtime\")&&this.api.dispatchAction({type:\"selectDataRange\",from:this.uid,visualMapId:this.visualMapModel.id,selected:this._dataInterval.slice()}),e?!this._hovering&&this._clearHoverLinkToSeries():hm(this.visualMapModel)&&this._doHoverLinkToSeries(this._handleEnds[t],!1)}},_resetInterval:function(){var t=this.visualMapModel,e=this._dataInterval=t.getSelected(),i=t.getExtent(),n=[0,t.itemSize[1]];this._handleEnds=[QD(e[0],i,n,!0),QD(e[1],i,n,!0)]},_updateInterval:function(t,e){e=e||0;var i=this.visualMapModel,n=this._handleEnds,o=[0,i.itemSize[1]];OT(e,n,o,t,0);var a=i.getExtent();this._dataInterval=[QD(n[0],o,a,!0),QD(n[1],o,a,!0)]},_updateView:function(t){var e=this.visualMapModel,i=e.getExtent(),n=this._shapes,o=[0,e.itemSize[1]],a=t?o:this._handleEnds,r=this._createBarVisual(this._dataInterval,i,a,\"inRange\"),s=this._createBarVisual(i,i,o,\"outOfRange\");n.inRange.setStyle({fill:r.barColor,opacity:r.opacity}).setShape(\"points\",r.barPoints),n.outOfRange.setStyle({fill:s.barColor,opacity:s.opacity}).setShape(\"points\",s.barPoints),this._updateHandle(a,r)},_createBarVisual:function(t,e,i,n){var o={forceState:n,convertOpacityToAlpha:!0},a=this._makeColorGradient(t,o),r=[this.getControllerVisual(t[0],\"symbolSize\",o),this.getControllerVisual(t[1],\"symbolSize\",o)],s=this._createBarPoints(i,r);return{barColor:new xb(0,0,0,1,a),barPoints:s,handlesColor:[a[0].color,a[a.length-1].color]}},_makeColorGradient:function(t,e){var i=[],n=(t[1]-t[0])/100;i.push({color:this.getControllerVisual(t[0],\"color\",e),offset:0});for(var o=1;o<100;o++){var a=t[0]+n*o;if(a>t[1])break;i.push({color:this.getControllerVisual(a,\"color\",e),offset:o/100})}return i.push({color:this.getControllerVisual(t[1],\"color\",e),offset:1}),i},_createBarPoints:function(t,e){var i=this.visualMapModel.itemSize;return[[i[0]-e[0],t[0]],[i[0],t[0]],[i[0],t[1]],[i[0]-e[1],t[1]]]},_createBarGroup:function(t){var e=this._orient,i=this.visualMapModel.get(\"inverse\");return new jy(\"horizontal\"!==e||i?\"horizontal\"===e&&i?{scale:\"bottom\"===t?[-1,1]:[1,1],rotation:-Math.PI/2}:\"vertical\"!==e||i?{scale:\"left\"===t?[1,1]:[-1,1]}:{scale:\"left\"===t?[1,-1]:[-1,-1]}:{scale:\"bottom\"===t?[1,1]:[-1,1],rotation:Math.PI/2})},_updateHandle:function(t,e){if(this._useHandle){var i=this._shapes,n=this.visualMapModel,o=i.handleThumbs,a=i.handleLabels;tL([0,1],function(r){var s=o[r];s.setStyle(\"fill\",e.handlesColor[r]),s.position[1]=t[r];var l=Io(i.handleLabelPoints[r],Mo(s,this.group));a[r].setStyle({x:l[0],y:l[1],text:n.formatValueText(this._dataInterval[r]),textVerticalAlign:\"middle\",textAlign:this._applyTransform(\"horizontal\"===this._orient?0===r?\"bottom\":\"top\":\"left\",i.barGroup)})},this)}},_showIndicator:function(t,e,i,n){var o=this.visualMapModel,a=o.getExtent(),r=o.itemSize,s=[0,r[1]],l=QD(t,a,s,!0),h=this._shapes,u=h.indicator;if(u){u.position[1]=l,u.attr(\"invisible\",!1),u.setShape(\"points\",sm(!!i,n,l,r[1]));var c={convertOpacityToAlpha:!0},d=this.getControllerVisual(t,\"color\",c);u.setStyle(\"fill\",d);var f=Io(h.indicatorLabelPoint,Mo(u,this.group)),g=h.indicatorLabel;g.attr(\"invisible\",!1);var p=this._applyTransform(\"left\",h.barGroup),m=this._orient;g.setStyle({text:(i||\"\")+o.formatValueText(e),textVerticalAlign:\"horizontal\"===m?p:\"middle\",textAlign:\"horizontal\"===m?\"center\":p,x:f[0],y:f[1]})}},_enableHoverLinkToSeries:function(){var t=this;this._shapes.barGroup.on(\"mousemove\",function(e){if(t._hovering=!0,!t._dragging){var i=t.visualMapModel.itemSize,n=t._applyTransform([e.offsetX,e.offsetY],t._shapes.barGroup,!0,!0);n[1]=eL(iL(0,n[1]),i[1]),t._doHoverLinkToSeries(n[1],0<=n[0]&&n[0]<=i[0])}}).on(\"mouseout\",function(){t._hovering=!1,!t._dragging&&t._clearHoverLinkToSeries()})},_enableHoverLinkFromSeries:function(){var t=this.api.getZr();this.visualMapModel.option.hoverLink?(t.on(\"mouseover\",this._hoverLinkFromSeriesMouseOver,this),t.on(\"mouseout\",this._hideIndicator,this)):this._clearHoverLinkFromSeries()},_doHoverLinkToSeries:function(t,e){var i=this.visualMapModel,n=i.itemSize;if(i.option.hoverLink){var o=[0,n[1]],a=i.getExtent();t=eL(iL(o[0],t),o[1]);var r=lm(i,a,o),s=[t-r,t+r],l=QD(t,o,a,!0),h=[QD(s[0],o,a,!0),QD(s[1],o,a,!0)];s[0]<o[0]&&(h[0]=-1/0),s[1]>o[1]&&(h[1]=1/0),e&&(h[0]===-1/0?this._showIndicator(l,h[1],\"< \",r):h[1]===1/0?this._showIndicator(l,h[0],\"> \",r):this._showIndicator(l,l,\"≈ \",r));var u=this._hoverLinkDataIndices,c=[];(e||hm(i))&&(c=this._hoverLinkDataIndices=i.findTargetDataIndices(h));var d=Wo(u,c);this._dispatchHighDown(\"downplay\",om(d[0])),this._dispatchHighDown(\"highlight\",om(d[1]))}},_hoverLinkFromSeriesMouseOver:function(t){var e=t.target,i=this.visualMapModel;if(e&&null!=e.dataIndex){var n=this.ecModel.getSeriesByIndex(e.seriesIndex);if(i.isTargetSeries(n)){var o=n.getData(e.dataType),a=o.getDimension(i.getDataDimension(o)),r=o.get(a,e.dataIndex,!0);isNaN(r)||this._showIndicator(r,r)}}},_hideIndicator:function(){var t=this._shapes;t.indicator&&t.indicator.attr(\"invisible\",!0),t.indicatorLabel&&t.indicatorLabel.attr(\"invisible\",!0)},_clearHoverLinkToSeries:function(){this._hideIndicator();var t=this._hoverLinkDataIndices;this._dispatchHighDown(\"downplay\",om(t)),t.length=0},_clearHoverLinkFromSeries:function(){this._hideIndicator();var t=this.api.getZr();t.off(\"mouseover\",this._hoverLinkFromSeriesMouseOver),t.off(\"mouseout\",this._hideIndicator)},_applyTransform:function(t,e,i,n){var o=Mo(e,n?null:this.group);return Tb[y(t)?\"applyTransform\":\"transformDirection\"](t,o,i)},_dispatchHighDown:function(t,e){e&&e.length&&this.api.dispatchAction({type:t,batch:e})},dispose:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()},remove:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()}});ir({type:\"selectDataRange\",event:\"dataRangeSelected\",update:\"update\"},function(t,e){e.eachComponent({mainType:\"visualMap\",query:t},function(e){e.setSelected(t.selected)})}),tr(VD);var rL=YD.extend({type:\"visualMap.piecewise\",defaultOption:{selected:null,minOpen:!1,maxOpen:!1,align:\"auto\",itemWidth:20,itemHeight:14,itemSymbol:\"roundRect\",pieceList:null,categories:null,splitNumber:5,selectedMode:\"multiple\",itemGap:10,hoverLink:!0,showLabel:null},optionUpdated:function(t,e){rL.superApply(this,\"optionUpdated\",arguments),this._pieceList=[],this.resetExtent();var n=this._mode=this._determineMode();sL[this._mode].call(this),this._resetSelected(t,e);var o=this.option.categories;this.resetVisual(function(t,e){\"categories\"===n?(t.mappingMethod=\"category\",t.categories=i(o)):(t.dataExtent=this.getExtent(),t.mappingMethod=\"piecewise\",t.pieceList=f(this._pieceList,function(t){var t=i(t);return\"inRange\"!==e&&(t.visual=null),t}))})},completeVisualOption:function(){function t(t,e,i){return t&&t[e]&&(b(t[e])?t[e].hasOwnProperty(i):t[e]===i)}var e=this.option,i={},n=jI.listVisualTypes(),o=this.isCategory();d(e.pieces,function(t){d(n,function(e){t.hasOwnProperty(e)&&(i[e]=1)})}),d(i,function(i,n){var a=0;d(this.stateList,function(i){a|=t(e,i,n)||t(e.target,i,n)},this),!a&&d(this.stateList,function(t){(e[t]||(e[t]={}))[n]=BD.get(n,\"inRange\"===t?\"active\":\"inactive\",o)})},this),YD.prototype.completeVisualOption.apply(this,arguments)},_resetSelected:function(t,e){var i=this.option,n=this._pieceList,o=(e?i:t).selected||{};if(i.selected=o,d(n,function(t,e){var i=this.getSelectedMapKey(t);o.hasOwnProperty(i)||(o[i]=!0)},this),\"single\"===i.selectedMode){var a=!1;d(n,function(t,e){var i=this.getSelectedMapKey(t);o[i]&&(a?o[i]=!1:a=!0)},this)}},getSelectedMapKey:function(t){return\"categories\"===this._mode?t.value+\"\":t.index+\"\"},getPieceList:function(){return this._pieceList},_determineMode:function(){var t=this.option;return t.pieces&&t.pieces.length>0?\"pieces\":this.option.categories?\"categories\":\"splitNumber\"},setSelected:function(t){this.option.selected=i(t)},getValueState:function(t){var e=jI.findPieceIndex(t,this._pieceList);return null!=e&&this.option.selected[this.getSelectedMapKey(this._pieceList[e])]?\"inRange\":\"outOfRange\"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){jI.findPieceIndex(e,this._pieceList)===t&&n.push(i)},!0,this),e.push({seriesId:i.id,dataIndex:n})},this),e},getRepresentValue:function(t){var e;if(this.isCategory())e=t.value;else if(null!=t.value)e=t.value;else{var i=t.interval||[];e=i[0]===-1/0&&i[1]===1/0?0:(i[0]+i[1])/2}return e},getVisualMeta:function(t){function e(e,a){var r=o.getRepresentValue({interval:e});a||(a=o.getValueState(r));var s=t(r,a);e[0]===-1/0?n[0]=s:e[1]===1/0?n[1]=s:i.push({value:e[0],color:s},{value:e[1],color:s})}if(!this.isCategory()){var i=[],n=[],o=this,a=this._pieceList.slice();if(a.length){var r=a[0].interval[0];r!==-1/0&&a.unshift({interval:[-1/0,r]}),(r=a[a.length-1].interval[1])!==1/0&&a.push({interval:[r,1/0]})}else a.push({interval:[-1/0,1/0]});var s=-1/0;return d(a,function(t){var i=t.interval;i&&(i[0]>s&&e([s,i[0]],\"outOfRange\"),e(i.slice()),s=i[1])},this),{stops:i,outerColors:n}}}}),sL={splitNumber:function(){var t=this.option,e=this._pieceList,i=Math.min(t.precision,20),n=this.getExtent(),o=t.splitNumber;o=Math.max(parseInt(o,10),1),t.splitNumber=o;for(var a=(n[1]-n[0])/o;+a.toFixed(i)!==a&&i<5;)i++;t.precision=i,a=+a.toFixed(i);var r=0;t.minOpen&&e.push({index:r++,interval:[-1/0,n[0]],close:[0,0]});for(var s=n[0],l=r+o;r<l;s+=a){var h=r===o-1?n[1]:s+a;e.push({index:r++,interval:[s,h],close:[1,1]})}t.maxOpen&&e.push({index:r++,interval:[n[1],1/0],close:[0,0]}),Ei(e),d(e,function(t){t.text=this.formatValueText(t.interval)},this)},categories:function(){var t=this.option;d(t.categories,function(t){this._pieceList.push({text:this.formatValueText(t,!0),value:t})},this),cm(t,this._pieceList)},pieces:function(){var t=this.option,e=this._pieceList;d(t.pieces,function(t,i){b(t)||(t={value:t});var n={text:\"\",index:i};if(null!=t.label&&(n.text=t.label),t.hasOwnProperty(\"value\")){var o=n.value=t.value;n.interval=[o,o],n.close=[1,1]}else{for(var a=n.interval=[],r=n.close=[0,0],s=[1,0,1],l=[-1/0,1/0],h=[],u=0;u<2;u++){for(var c=[[\"gte\",\"gt\",\"min\"],[\"lte\",\"lt\",\"max\"]][u],d=0;d<3&&null==a[u];d++)a[u]=t[c[d]],r[u]=s[d],h[u]=2===d;null==a[u]&&(a[u]=l[u])}h[0]&&a[1]===1/0&&(r[0]=0),h[1]&&a[0]===-1/0&&(r[1]=0),a[0]===a[1]&&r[0]&&r[1]&&(n.value=a[0])}n.visual=jI.retrieveVisuals(t),e.push(n)},this),cm(t,e),Ei(e),d(e,function(t){var e=t.close,i=[[\"<\",\"≤\"][e[1]],[\">\",\"≥\"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,i)},this)}};JD.extend({type:\"visualMap.piecewise\",doRender:function(){var t=this.group;t.removeAll();var e=this.visualMapModel,i=e.get(\"textGap\"),n=e.textStyleModel,o=n.getFont(),a=n.getTextColor(),r=this._getItemAlign(),s=e.itemSize,l=this._getViewData(),h=l.endsText,u=I(e.get(\"showLabel\",!0),!h);h&&this._renderEndsText(t,h[0],s,u,r),d(l.viewPieceList,function(n){var l=n.piece,h=new jy;h.onclick=m(this._onItemClick,this,l),this._enableHoverLink(h,n.indexInModelPieceList);var c=e.getRepresentValue(l);if(this._createItemSymbol(h,c,[0,0,s[0],s[1]]),u){var d=this.visualMapModel.getValueState(c);h.add(new ib({style:{x:\"right\"===r?-i:s[0]+i,y:s[1]/2,text:l.text,textVerticalAlign:\"middle\",textAlign:r,textFont:o,textFill:a,opacity:\"outOfRange\"===d?.5:1}}))}t.add(h)},this),h&&this._renderEndsText(t,h[1],s,u,r),Hb(e.get(\"orient\"),t,e.get(\"itemGap\")),this.renderBackground(t),this.positionGroup(t)},_enableHoverLink:function(t,e){function i(t){var i=this.visualMapModel;i.option.hoverLink&&this.api.dispatchAction({type:t,batch:om(i.findTargetDataIndices(e))})}t.on(\"mouseover\",m(i,this,\"highlight\")).on(\"mouseout\",m(i,this,\"downplay\"))},_getItemAlign:function(){var t=this.visualMapModel,e=t.option;if(\"vertical\"===e.orient)return nm(t,this.api,t.itemSize);var i=e.align;return i&&\"auto\"!==i||(i=\"left\"),i},_renderEndsText:function(t,e,i,n,o){if(e){var a=new jy,r=this.visualMapModel.textStyleModel;a.add(new ib({style:{x:n?\"right\"===o?i[0]:0:i[0]/2,y:i[1]/2,textVerticalAlign:\"middle\",textAlign:n?o:\"center\",text:e,textFont:r.getFont(),textFill:r.getTextColor()}})),t.add(a)}},_getViewData:function(){var t=this.visualMapModel,e=f(t.getPieceList(),function(t,e){return{piece:t,indexInModelPieceList:e}}),i=t.get(\"text\"),n=t.get(\"orient\"),o=t.get(\"inverse\");return(\"horizontal\"===n?o:!o)?e.reverse():i&&(i=i.slice().reverse()),{viewPieceList:e,endsText:i}},_createItemSymbol:function(t,e,i){t.add(Hr(this.getControllerVisual(e,\"symbol\"),i[0],i[1],i[2],i[3],this.getControllerVisual(e,\"color\")))},_onItemClick:function(t){var e=this.visualMapModel,n=e.option,o=i(n.selected),a=e.getSelectedMapKey(t);\"single\"===n.selectedMode?(o[a]=!0,d(o,function(t,e){o[e]=e===a})):o[a]=!o[a],this.api.dispatchAction({type:\"selectDataRange\",from:this.uid,visualMapId:this.visualMapModel.id,selected:o})}});tr(VD);var lL=Vi,hL=Gi,uL=sr({type:\"marker\",dependencies:[\"series\",\"grid\",\"polar\",\"geo\"],init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i),this.mergeOption(t,i,n.createdBySelf,!0)},isAnimationEnabled:function(){if(Uv.node)return!1;var t=this.__hostSeries;return this.getShallow(\"animation\")&&t&&t.isAnimationEnabled()},mergeOption:function(t,e,i,n){var o=this.constructor,r=this.mainType+\"Model\";i||e.eachSeries(function(t){var i=t.get(this.mainType),s=t[r];i&&i.data?(s?s.mergeOption(i,e,!0):(n&&dm(i),d(i.data,function(t){t instanceof Array?(dm(t[0]),dm(t[1])):dm(t)}),a(s=new o(i,this,e),{mainType:this.mainType,seriesIndex:t.seriesIndex,name:t.name,createdBySelf:!0}),s.__hostSeries=t),t[r]=s):t[r]=null},this)},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=y(i)?f(i,lL).join(\", \"):lL(i),o=e.getName(t),a=hL(this.name);return(null!=i||o)&&(a+=\"<br />\"),o&&(a+=hL(o),null!=i&&(a+=\" : \")),null!=i&&(a+=hL(n)),a},getData:function(){return this._data},setData:function(t){this._data=t}});u(uL,Nb),uL.extend({type:\"markPoint\",defaultOption:{zlevel:0,z:5,symbol:\"pin\",symbolSize:50,tooltip:{trigger:\"item\"},label:{normal:{show:!0,position:\"inside\"},emphasis:{show:!0}},itemStyle:{normal:{borderWidth:2}}}});var cL=l,dL=v,fL={min:dL(mm,\"min\"),max:dL(mm,\"max\"),average:dL(mm,\"average\")},gL=lr({type:\"marker\",init:function(){this.markerGroupMap=z()},render:function(t,e,i){var n=this.markerGroupMap;n.each(function(t){t.__keep=!1});var o=this.type+\"Model\";e.eachSeries(function(t){var n=t[o];n&&this.renderSeries(t,n,e,i)},this),n.each(function(t){!t.__keep&&this.group.remove(t.group)},this)},renderSeries:function(){}});gL.extend({type:\"markPoint\",updateLayout:function(t,e,i){e.eachSeries(function(t){var e=t.markPointModel;e&&(wm(e.getData(),t,i),this.markerGroupMap.get(t.id).updateLayout(e))},this)},renderSeries:function(t,e,i,n){var o=t.coordinateSystem,a=t.id,r=t.getData(),s=this.markerGroupMap,l=s.get(a)||s.set(a,new ts),h=Sm(o,t,e);e.setData(h),wm(e.getData(),t,n),h.each(function(t){var i=h.getItemModel(t),n=i.getShallow(\"symbolSize\");\"function\"==typeof n&&(n=n(e.getRawValue(t),e.getDataParams(t))),h.setItemVisual(t,{symbolSize:n,color:i.get(\"itemStyle.normal.color\")||r.getVisual(\"color\"),symbol:i.getShallow(\"symbol\")})}),l.updateData(h),this.group.add(l.group),h.eachItemGraphicEl(function(t){t.traverse(function(t){t.dataModel=e})}),l.__keep=!0,l.group.silent=e.get(\"silent\")||t.get(\"silent\")}}),tr(function(t){t.markPoint=t.markPoint||{}}),uL.extend({type:\"markLine\",defaultOption:{zlevel:0,z:5,symbol:[\"circle\",\"arrow\"],symbolSize:[8,16],precision:2,tooltip:{trigger:\"item\"},label:{normal:{show:!0,position:\"end\"},emphasis:{show:!0}},lineStyle:{normal:{type:\"dashed\"},emphasis:{width:3}},animationEasing:\"linear\"}});var pL=function(t,e,o,r){var s=t.getData(),l=r.type;if(!y(r)&&(\"min\"===l||\"max\"===l||\"average\"===l||null!=r.xAxis||null!=r.yAxis)){var h,u;if(null!=r.yAxis||null!=r.xAxis)h=null!=r.yAxis?\"y\":\"x\",e.getAxis(h),u=I(r.yAxis,r.xAxis);else{var c=ym(r,s,e,t);h=c.valueDataDim,c.valueAxis,u=bm(s,h,l)}var d=\"x\"===h?0:1,f=1-d,g=i(r),p={};g.type=null,g.coord=[],p.coord=[],g.coord[f]=-1/0,p.coord[f]=1/0;var m=o.get(\"precision\");m>=0&&\"number\"==typeof u&&(u=+u.toFixed(Math.min(m,20))),g.coord[d]=p.coord[d]=u,r=[g,p,{type:l,valueIndex:r.valueIndex,value:u}]}return r=[vm(t,r[0]),vm(t,r[1]),a({},r[2])],r[2].type=r[2].type||\"\",n(r[2],r[0]),n(r[2],r[1]),r};gL.extend({type:\"markLine\",updateLayout:function(t,e,i){e.eachSeries(function(t){var e=t.markLineModel;if(e){var n=e.getData(),o=e.__from,a=e.__to;o.each(function(e){Am(o,e,!0,t,i),Am(a,e,!1,t,i)}),n.each(function(t){n.setItemLayout(t,[o.getItemLayout(t),a.getItemLayout(t)])}),this.markerGroupMap.get(t.id).updateLayout()}},this)},renderSeries:function(t,e,i,n){function o(e,i,o){var a=e.getItemModel(i);Am(e,i,o,t,n),e.setItemVisual(i,{symbolSize:a.get(\"symbolSize\")||p[o?0:1],symbol:a.get(\"symbol\",!0)||g[o?0:1],color:a.get(\"itemStyle.normal.color\")||s.getVisual(\"color\")})}var a=t.coordinateSystem,r=t.id,s=t.getData(),l=this.markerGroupMap,h=l.get(r)||l.set(r,new Mu);this.group.add(h.group);var u=Cm(a,t,e),c=u.from,d=u.to,f=u.line;e.__from=c,e.__to=d,e.setData(f);var g=e.get(\"symbol\"),p=e.get(\"symbolSize\");y(g)||(g=[g,g]),\"number\"==typeof p&&(p=[p,p]),u.from.each(function(t){o(c,t,!0),o(d,t,!1)}),f.each(function(t){var e=f.getItemModel(t).get(\"lineStyle.normal.color\");f.setItemVisual(t,{color:e||c.getItemVisual(t,\"color\")}),f.setItemLayout(t,[c.getItemLayout(t),d.getItemLayout(t)]),f.setItemVisual(t,{fromSymbolSize:c.getItemVisual(t,\"symbolSize\"),fromSymbol:c.getItemVisual(t,\"symbol\"),toSymbolSize:d.getItemVisual(t,\"symbolSize\"),toSymbol:d.getItemVisual(t,\"symbol\")})}),h.updateData(f),u.line.eachItemGraphicEl(function(t,i){t.traverse(function(t){t.dataModel=e})}),h.__keep=!0,h.group.silent=e.get(\"silent\")||t.get(\"silent\")}}),tr(function(t){t.markLine=t.markLine||{}}),uL.extend({type:\"markArea\",defaultOption:{zlevel:0,z:1,tooltip:{trigger:\"item\"},animation:!1,label:{normal:{show:!0,position:\"top\"},emphasis:{show:!0,position:\"top\"}},itemStyle:{normal:{borderWidth:0}}}});var mL=function(t,e,i,n){var a=vm(t,n[0]),r=vm(t,n[1]),s=I,l=a.coord,h=r.coord;l[0]=s(l[0],-1/0),l[1]=s(l[1],-1/0),h[0]=s(h[0],1/0),h[1]=s(h[1],1/0);var u=o([{},a,r]);return u.coord=[a.coord,r.coord],u.x0=a.x,u.y0=a.y,u.x1=r.x,u.y1=r.y,u},vL=[[\"x0\",\"y0\"],[\"x1\",\"y0\"],[\"x1\",\"y1\"],[\"x0\",\"y1\"]];gL.extend({type:\"markArea\",updateLayout:function(t,e,i){e.eachSeries(function(t){var e=t.markAreaModel;if(e){var n=e.getData();n.each(function(e){var o=f(vL,function(o){return Pm(n,e,o,t,i)});n.setItemLayout(e,o),n.getItemGraphicEl(e).setShape(\"points\",o)})}},this)},renderSeries:function(t,e,i,n){var o=t.coordinateSystem,a=t.name,s=t.getData(),l=this.markerGroupMap,h=l.get(a)||l.set(a,{group:new jy});this.group.add(h.group),h.__keep=!0;var u=Om(o,t,e);e.setData(u),u.each(function(e){u.setItemLayout(e,f(vL,function(i){return Pm(u,e,i,t,n)})),u.setItemVisual(e,{color:s.getVisual(\"color\")})}),u.diff(h.__data).add(function(t){var e=new ub({shape:{points:u.getItemLayout(t)}});u.setItemGraphicEl(t,e),h.group.add(e)}).update(function(t,i){var n=h.__data.getItemGraphicEl(i);wo(n,{shape:{points:u.getItemLayout(t)}},e,t),h.group.add(n),u.setItemGraphicEl(t,n)}).remove(function(t){var e=h.__data.getItemGraphicEl(t);h.group.remove(e)}).execute(),u.eachItemGraphicEl(function(t,i){var n=u.getItemModel(i),o=n.getModel(\"label.normal\"),a=n.getModel(\"label.emphasis\"),s=u.getItemVisual(i,\"color\");t.useStyle(r(n.getModel(\"itemStyle.normal\").getItemStyle(),{fill:Pt(s,.4),stroke:s})),t.hoverStyle=n.getModel(\"itemStyle.emphasis\").getItemStyle(),co(t.style,t.hoverStyle,o,a,{labelFetcher:e,labelDataIndex:i,defaultText:u.getName(i)||\"\",isRectText:!0,autoColor:s}),uo(t,{}),t.dataModel=e}),h.__data=u,h.group.silent=e.get(\"silent\")||t.get(\"silent\")}}),tr(function(t){t.markArea=t.markArea||{}});Ub.registerSubTypeDefaulter(\"timeline\",function(){return\"slider\"}),ir({type:\"timelineChange\",event:\"timelineChanged\",update:\"prepareAndUpdate\"},function(t,e){var i=e.getComponent(\"timeline\");return i&&null!=t.currentIndex&&(i.setCurrentIndex(t.currentIndex),!i.get(\"loop\",!0)&&i.isIndexMax()&&i.setPlayState(!1)),e.resetOption(\"timeline\"),r({currentIndex:i.option.currentIndex},t)}),ir({type:\"timelinePlayChange\",event:\"timelinePlayChanged\",update:\"update\"},function(t,e){var i=e.getComponent(\"timeline\");i&&null!=t.playState&&i.setPlayState(t.playState)});var yL=Ub.extend({type:\"timeline\",layoutMode:\"box\",defaultOption:{zlevel:0,z:4,show:!0,axisType:\"time\",realtime:!0,left:\"20%\",top:null,right:\"20%\",bottom:0,width:null,height:40,padding:5,controlPosition:\"left\",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{normal:{},emphasis:{}},label:{normal:{color:\"#000\"},emphasis:{}},data:[]},init:function(t,e,i){this._data,this._names,this.mergeDefaultAndTheme(t,i),this._initData()},mergeOption:function(t){yL.superApply(this,\"mergeOption\",arguments),this._initData()},setCurrentIndex:function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(t>=e&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},getCurrentIndex:function(){return this.option.currentIndex},isIndexMax:function(){return this.getCurrentIndex()>=this._data.count()-1},setPlayState:function(t){this.option.autoPlay=!!t},getPlayState:function(){return!!this.option.autoPlay},_initData:function(){var t=this.option,e=t.data||[],n=t.axisType,o=this._names=[];if(\"category\"===n){var a=[];d(e,function(t,e){var n,r=No(t);b(t)?(n=i(t)).value=e:n=e,a.push(n),_(r)||null!=r&&!isNaN(r)||(r=\"\"),o.push(r+\"\")}),e=a}var r={category:\"ordinal\",time:\"time\"}[n]||\"number\";(this._data=new aS([{name:\"value\",type:r}],this)).initData(e,o)},getData:function(){return this._data},getCategories:function(){if(\"category\"===this.get(\"axisType\"))return this._names.slice()}});u(yL.extend({type:\"timeline.slider\",defaultOption:{backgroundColor:\"rgba(0,0,0,0)\",borderColor:\"#ccc\",borderWidth:0,orient:\"horizontal\",inverse:!1,tooltip:{trigger:\"item\"},symbol:\"emptyCircle\",symbolSize:10,lineStyle:{show:!0,width:2,color:\"#304654\"},label:{position:\"auto\",normal:{show:!0,interval:\"auto\",rotate:0,color:\"#304654\"},emphasis:{show:!0,color:\"#c23531\"}},itemStyle:{normal:{color:\"#304654\",borderWidth:1},emphasis:{color:\"#c23531\"}},checkpointStyle:{symbol:\"circle\",symbolSize:13,color:\"#c23531\",borderWidth:5,borderColor:\"rgba(194,53,49, 0.5)\",animation:!0,animationDuration:300,animationEasing:\"quinticInOut\"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:22,itemGap:12,position:\"left\",playIcon:\"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z\",stopIcon:\"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z\",nextIcon:\"path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z\",prevIcon:\"path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z\",normal:{color:\"#304654\",borderColor:\"#304654\",borderWidth:1},emphasis:{color:\"#c23531\",borderColor:\"#c23531\",borderWidth:2}},data:[]}}),Nb);var xL=xw.extend({type:\"timeline\"}),_L=function(t,e,i,n){US.call(this,t,e,i),this.type=n||\"value\",this._autoLabelInterval,this.model=null};_L.prototype={constructor:_L,getLabelInterval:function(){var t=this.model,e=t.getModel(\"label.normal\"),i=e.get(\"interval\");return null!=i&&\"auto\"!=i?i:((i=this._autoLabelInterval)||(i=this._autoLabelInterval=Rr(f(this.scale.getTicks(),this.dataToCoord,this),Vr(this,e.get(\"formatter\")),e.getFont(),\"horizontal\"===t.get(\"orient\")?0:90,e.get(\"rotate\"))),i)},isLabelIgnored:function(t){if(\"category\"===this.type){var e=this.getLabelInterval();return\"function\"==typeof e&&!e(t,this.scale.getLabel(t))||t%(e+1)}}},h(_L,US);var bL=m,wL=d,SL=Math.PI;xL.extend({type:\"timeline.slider\",init:function(t,e){this.api=e,this._axis,this._viewRect,this._timer,this._currentPointer,this._mainGroup,this._labelGroup},render:function(t,e,i,n){if(this.model=t,this.api=i,this.ecModel=e,this.group.removeAll(),t.get(\"show\",!0)){var o=this._layout(t,i),a=this._createGroup(\"mainGroup\"),r=this._createGroup(\"labelGroup\"),s=this._axis=this._createAxis(o,t);t.formatTooltip=function(t){return Gi(s.scale.getLabel(t))},wL([\"AxisLine\",\"AxisTick\",\"Control\",\"CurrentPointer\"],function(e){this[\"_render\"+e](o,a,s,t)},this),this._renderAxisLabel(o,r,s,t),this._position(o,t)}this._doPlayStop()},remove:function(){this._clearTimer(),this.group.removeAll()},dispose:function(){this._clearTimer()},_layout:function(t,e){var i=t.get(\"label.normal.position\"),n=t.get(\"orient\"),o=Rm(t,e);null==i||\"auto\"===i?i=\"horizontal\"===n?o.y+o.height/2<e.getHeight()/2?\"-\":\"+\":o.x+o.width/2<e.getWidth()/2?\"+\":\"-\":isNaN(i)&&(i={horizontal:{top:\"-\",bottom:\"+\"},vertical:{left:\"-\",right:\"+\"}}[n][i]);var a={horizontal:\"center\",vertical:i>=0||\"+\"===i?\"left\":\"right\"},r={horizontal:i>=0||\"+\"===i?\"top\":\"bottom\",vertical:\"middle\"},s={horizontal:0,vertical:SL/2},l=\"vertical\"===n?o.height:o.width,h=t.getModel(\"controlStyle\"),u=h.get(\"show\"),c=u?h.get(\"itemSize\"):0,d=u?h.get(\"itemGap\"):0,f=c+d,g=t.get(\"label.normal.rotate\")||0;g=g*SL/180;var p,m,v,y,x=h.get(\"position\",!0),_=(u=h.get(\"show\",!0))&&h.get(\"showPlayBtn\",!0),b=u&&h.get(\"showPrevBtn\",!0),w=u&&h.get(\"showNextBtn\",!0),S=0,M=l;return\"left\"===x||\"bottom\"===x?(_&&(p=[0,0],S+=f),b&&(m=[S,0],S+=f),w&&(v=[M-c,0],M-=f)):(_&&(p=[M-c,0],M-=f),b&&(m=[0,0],S+=f),w&&(v=[M-c,0],M-=f)),y=[S,M],t.get(\"inverse\")&&y.reverse(),{viewRect:o,mainLength:l,orient:n,rotation:s[n],labelRotation:g,labelPosOpt:i,labelAlign:t.get(\"label.normal.align\")||a[n],labelBaseline:t.get(\"label.normal.verticalAlign\")||t.get(\"label.normal.baseline\")||r[n],playPosition:p,prevBtnPosition:m,nextBtnPosition:v,axisExtent:y,controlSize:c,controlGap:d}},_position:function(t,e){function i(t){var e=t.position;t.origin=[c[0][0]-e[0],c[1][0]-e[1]]}function n(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}function o(t,e,i,n,o){t[n]+=i[n][o]-e[n][o]}var a=this._mainGroup,r=this._labelGroup,s=t.viewRect;if(\"vertical\"===t.orient){var l=ot(),h=s.x,u=s.y+s.height;lt(l,l,[-h,-u]),ht(l,l,-SL/2),lt(l,l,[h,u]),(s=s.clone()).applyTransform(l)}var c=n(s),d=n(a.getBoundingRect()),f=n(r.getBoundingRect()),g=a.position,p=r.position;p[0]=g[0]=c[0][0];var m=t.labelPosOpt;if(isNaN(m))o(g,d,c,1,v=\"+\"===m?0:1),o(p,f,c,1,1-v);else{var v=m>=0?0:1;o(g,d,c,1,v),p[1]=g[1]+m}a.attr(\"position\",g),r.attr(\"position\",p),a.rotation=r.rotation=t.rotation,i(a),i(r)},_createAxis:function(t,e){var i=e.getData(),n=e.get(\"axisType\"),o=Er(e,n),a=i.getDataExtent(\"value\");o.setExtent(a[0],a[1]),this._customizeScale(o,i),o.niceTicks();var r=new _L(\"value\",o,t.axisExtent,n);return r.model=e,r},_customizeScale:function(t,e){t.getTicks=function(){return e.mapArray([\"value\"],function(t){return t})},t.getTicksLabels=function(){return f(this.getTicks(),t.getLabel,t)}},_createGroup:function(t){var e=this[\"_\"+t]=new jy;return this.group.add(e),e},_renderAxisLine:function(t,e,i,n){var o=i.getExtent();n.get(\"lineStyle.show\")&&e.add(new fb({shape:{x1:o[0],y1:0,x2:o[1],y2:0},style:a({lineCap:\"round\"},n.getModel(\"lineStyle\").getLineStyle()),silent:!0,z2:1}))},_renderAxisTick:function(t,e,i,n){var o=n.getData(),a=i.scale.getTicks();wL(a,function(t,a){var r=i.dataToCoord(t),s=o.getItemModel(a),l=s.getModel(\"itemStyle.normal\"),h=s.getModel(\"itemStyle.emphasis\"),u={position:[r,0],onclick:bL(this._changeTimeline,this,a)},c=Bm(s,l,e,u);uo(c,h.getItemStyle()),s.get(\"tooltip\")?(c.dataIndex=a,c.dataModel=n):c.dataIndex=c.dataModel=null},this)},_renderAxisLabel:function(t,e,i,n){var o=n.getModel(\"label.normal\");if(o.get(\"show\")){var a=n.getData(),r=i.scale.getTicks(),s=Vr(i,o.get(\"formatter\")),l=i.getLabelInterval();wL(r,function(n,o){if(!i.isLabelIgnored(o,l)){var r=a.getItemModel(o),h=r.getModel(\"label.normal\"),u=r.getModel(\"label.emphasis\"),c=i.dataToCoord(n),d=new ib({position:[c,0],rotation:t.labelRotation-t.rotation,onclick:bL(this._changeTimeline,this,o),silent:!1});fo(d.style,h,{text:s[o],textAlign:t.labelAlign,textVerticalAlign:t.labelBaseline}),e.add(d),uo(d,fo({},u))}},this)}},_renderControl:function(t,e,i,n){function o(t,i,o,u){if(t){var c=Vm(n,i,h,{position:t,origin:[a/2,0],rotation:u?-r:0,rectHover:!0,style:s,onclick:o});e.add(c),uo(c,l)}}var a=t.controlSize,r=t.rotation,s=n.getModel(\"controlStyle.normal\").getItemStyle(),l=n.getModel(\"controlStyle.emphasis\").getItemStyle(),h=[0,-a/2,a,a],u=n.getPlayState(),c=n.get(\"inverse\",!0);o(t.nextBtnPosition,\"controlStyle.nextIcon\",bL(this._changeTimeline,this,c?\"-\":\"+\")),o(t.prevBtnPosition,\"controlStyle.prevIcon\",bL(this._changeTimeline,this,c?\"+\":\"-\")),o(t.playPosition,\"controlStyle.\"+(u?\"stopIcon\":\"playIcon\"),bL(this._handlePlayClick,this,!u),!0)},_renderCurrentPointer:function(t,e,i,n){var o=n.getData(),a=n.getCurrentIndex(),r=o.getItemModel(a).getModel(\"checkpointStyle\"),s=this,l={onCreate:function(t){t.draggable=!0,t.drift=bL(s._handlePointerDrag,s),t.ondragend=bL(s._handlePointerDragend,s),Gm(t,a,i,n,!0)},onUpdate:function(t){Gm(t,a,i,n)}};this._currentPointer=Bm(r,r,this._mainGroup,{},this._currentPointer,l)},_handlePlayClick:function(t){this._clearTimer(),this.api.dispatchAction({type:\"timelinePlayChange\",playState:t,from:this.uid})},_handlePointerDrag:function(t,e,i){this._clearTimer(),this._pointerChangeTimeline([i.offsetX,i.offsetY])},_handlePointerDragend:function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},_pointerChangeTimeline:function(t,e){var i=this._toAxisCoord(t)[0],n=Ii(this._axis.getExtent().slice());i>n[1]&&(i=n[1]),i<n[0]&&(i=n[0]),this._currentPointer.position[0]=i,this._currentPointer.dirty();var o=this._findNearestTick(i),a=this.model;(e||o!==a.getCurrentIndex()&&a.get(\"realtime\"))&&this._changeTimeline(o)},_doPlayStop:function(){this._clearTimer(),this.model.getPlayState()&&(this._timer=setTimeout(bL(function(){var t=this.model;this._changeTimeline(t.getCurrentIndex()+(t.get(\"rewind\",!0)?-1:1))},this),this.model.get(\"playInterval\")))},_toAxisCoord:function(t){return Io(t,this._mainGroup.getLocalTransform(),!0)},_findNearestTick:function(t){var e,i=this.model.getData(),n=1/0,o=this._axis;return i.each([\"value\"],function(i,a){var r=o.dataToCoord(i),s=Math.abs(r-t);s<n&&(n=s,e=a)}),e},_clearTimer:function(){this._timer&&(clearTimeout(this._timer),this._timer=null)},_changeTimeline:function(t){var e=this.model.getCurrentIndex();\"+\"===t?t=e+1:\"-\"===t&&(t=e-1),this.api.dispatchAction({type:\"timelineChange\",currentIndex:t,from:this.uid})}}),tr(function(t){var e=t&&t.timeline;y(e)||(e=e?[e]:[]),d(e,function(t){t&&zm(t)})});var ML=sr({type:\"toolbox\",layoutMode:{type:\"box\",ignoreSize:!0},mergeDefaultAndTheme:function(t){ML.superApply(this,\"mergeDefaultAndTheme\",arguments),d(this.option.feature,function(t,e){var i=Sp(e);i&&n(t,i.defaultOption)})},defaultOption:{show:!0,z:6,zlevel:0,orient:\"horizontal\",left:\"right\",top:\"top\",backgroundColor:\"transparent\",borderColor:\"#ccc\",borderRadius:0,borderWidth:0,padding:5,itemSize:15,itemGap:8,showTitle:!0,iconStyle:{normal:{borderColor:\"#666\",color:\"none\"},emphasis:{borderColor:\"#3E98C5\"}}}});lr({type:\"toolbox\",render:function(t,e,i,n){function o(o,r){var s,c=u[o],d=u[r],f=new Lo(l[c],t,t.ecModel);if(c&&!d){if(Wm(c))s={model:f,onclick:f.option.onclick,featureName:c};else{var g=Sp(c);if(!g)return;s=new g(f,e,i)}h[c]=s}else{if(!(s=h[d]))return;s.model=f,s.ecModel=e,s.api=i}c||!d?f.get(\"show\")&&!s.unusable?(a(f,s,c),f.setIconStatus=function(t,e){var i=this.option,n=this.iconPaths;i.iconStatus=i.iconStatus||{},i.iconStatus[t]=e,n[t]&&n[t].trigger(e)},s.render&&s.render(f,e,i,n)):s.remove&&s.remove(e,i):s.dispose&&s.dispose(e,i)}function a(n,o,a){var l=n.getModel(\"iconStyle\"),h=o.getIcons?o.getIcons():n.get(\"icon\"),u=n.get(\"title\")||{};if(\"string\"==typeof h){var c=h,f=u;u={},(h={})[a]=c,u[a]=f}var g=n.iconPaths={};d(h,function(a,h){var c=Do(a,{},{x:-s/2,y:-s/2,width:s,height:s});c.setStyle(l.getModel(\"normal\").getItemStyle()),c.hoverStyle=l.getModel(\"emphasis\").getItemStyle(),uo(c),t.get(\"showTitle\")&&(c.__title=u[h],c.on(\"mouseover\",function(){var t=l.getModel(\"emphasis\").getItemStyle();c.setStyle({text:u[h],textPosition:t.textPosition||\"bottom\",textFill:t.fill||t.stroke||\"#000\",textAlign:t.textAlign||\"center\"})}).on(\"mouseout\",function(){c.setStyle({textFill:null})})),c.trigger(n.get(\"iconStatus.\"+h)||\"normal\"),r.add(c),c.on(\"click\",m(o.onclick,o,e,i,h)),g[h]=c})}var r=this.group;if(r.removeAll(),t.get(\"show\")){var s=+t.get(\"itemSize\"),l=t.get(\"feature\")||{},h=this._features||(this._features={}),u=[];d(l,function(t,e){u.push(e)}),new fr(this._featureNames||[],u).add(o).update(o).remove(v(o,null)).execute(),this._featureNames=u,yg(r,t,i),r.add(xg(r.getBoundingRect(),t)),r.eachChild(function(t){var e=t.__title,n=t.hoverStyle;if(n&&e){var o=de(e,Ae(n)),a=t.position[0]+r.position[0],l=!1;t.position[1]+r.position[1]+s+o.height>i.getHeight()&&(n.textPosition=\"top\",l=!0);var h=l?-5-o.height:s+8;a+o.width/2>i.getWidth()?(n.textPosition=[\"100%\",h],n.textAlign=\"right\"):a-o.width/2<0&&(n.textPosition=[0,h],n.textAlign=\"left\")}})}},updateView:function(t,e,i,n){d(this._features,function(t){t.updateView&&t.updateView(t.model,e,i,n)})},updateLayout:function(t,e,i,n){d(this._features,function(t){t.updateLayout&&t.updateLayout(t.model,e,i,n)})},remove:function(t,e){d(this._features,function(i){i.remove&&i.remove(t,e)}),this.group.removeAll()},dispose:function(t,e){d(this._features,function(i){i.dispose&&i.dispose(t,e)})}});var IL=lD.toolbox.saveAsImage;Hm.defaultOption={show:!0,icon:\"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0\",title:IL.title,type:\"png\",name:\"\",excludeComponents:[\"toolbox\"],pixelRatio:1,lang:IL.lang.slice()},Hm.prototype.unusable=!Uv.canvasSupported,Hm.prototype.onclick=function(t,e){var i=this.model,n=i.get(\"name\")||t.get(\"title.0.text\")||\"echarts\",o=document.createElement(\"a\"),a=i.get(\"type\",!0)||\"png\";o.download=n+\".\"+a,o.target=\"_blank\";var r=e.getConnectedDataURL({type:a,backgroundColor:i.get(\"backgroundColor\",!0)||t.get(\"backgroundColor\")||\"#fff\",excludeComponents:i.get(\"excludeComponents\"),pixelRatio:i.get(\"pixelRatio\")});if(o.href=r,\"function\"!=typeof MouseEvent||Uv.browser.ie||Uv.browser.edge)if(window.navigator.msSaveOrOpenBlob){for(var s=atob(r.split(\",\")[1]),l=s.length,h=new Uint8Array(l);l--;)h[l]=s.charCodeAt(l);var u=new Blob([h]);window.navigator.msSaveOrOpenBlob(u,n+\".\"+a)}else{var c=i.get(\"lang\"),d='<body style=\"margin:0;\"><img src=\"'+r+'\" style=\"max-width:100%;\" title=\"'+(c&&c[0]||\"\")+'\" /></body>';window.open().document.write(d)}else{var f=new MouseEvent(\"click\",{view:window,bubbles:!0,cancelable:!1});o.dispatchEvent(f)}},wp(\"saveAsImage\",Hm);var TL=lD.toolbox.magicType;Fm.defaultOption={show:!0,type:[],icon:{line:\"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4\",bar:\"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7\",stack:\"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z\",tiled:\"M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z\"},title:i(TL.title),option:{},seriesIndex:{}};var AL=Fm.prototype;AL.getIcons=function(){var t=this.model,e=t.get(\"icon\"),i={};return d(t.get(\"type\"),function(t){e[t]&&(i[t]=e[t])}),i};var CL={line:function(t,e,i,o){if(\"bar\"===t)return n({id:e,type:\"line\",data:i.get(\"data\"),stack:i.get(\"stack\"),markPoint:i.get(\"markPoint\"),markLine:i.get(\"markLine\")},o.get(\"option.line\")||{},!0)},bar:function(t,e,i,o){if(\"line\"===t)return n({id:e,type:\"bar\",data:i.get(\"data\"),stack:i.get(\"stack\"),markPoint:i.get(\"markPoint\"),markLine:i.get(\"markLine\")},o.get(\"option.bar\")||{},!0)},stack:function(t,e,i,o){if(\"line\"===t||\"bar\"===t)return n({id:e,stack:\"__ec_magicType_stack__\"},o.get(\"option.stack\")||{},!0)},tiled:function(t,e,i,o){if(\"line\"===t||\"bar\"===t)return n({id:e,stack:\"\"},o.get(\"option.tiled\")||{},!0)}},DL=[[\"line\",\"bar\"],[\"stack\",\"tiled\"]];AL.onclick=function(t,e,i){var n=this.model,o=n.get(\"seriesIndex.\"+i);if(CL[i]){var a={series:[]};d(DL,function(t){l(t,i)>=0&&d(t,function(t){n.setIconStatus(t,\"normal\")})}),n.setIconStatus(i,\"emphasis\"),t.eachComponent({mainType:\"series\",query:null==o?null:{seriesIndex:o}},function(e){var o=e.subType,s=e.id,l=CL[i](o,s,e,n);l&&(r(l,e.option),a.series.push(l));var h=e.coordinateSystem;if(h&&\"cartesian2d\"===h.type&&(\"line\"===i||\"bar\"===i)){var u=h.getAxesByScale(\"ordinal\")[0];if(u){var c=u.dim+\"Axis\",d=t.queryComponents({mainType:c,index:e.get(name+\"Index\"),id:e.get(name+\"Id\")})[0].componentIndex;a[c]=a[c]||[];for(var f=0;f<=d;f++)a[c][d]=a[c][d]||{};a[c][d].boundaryGap=\"bar\"===i}}}),e.dispatchAction({type:\"changeMagicType\",currentType:i,newOption:a})}},ir({type:\"changeMagicType\",event:\"magicTypeChanged\",update:\"prepareAndUpdate\"},function(t,e){e.mergeOption(t.newOption)}),wp(\"magicType\",Fm);var LL=lD.toolbox.dataView,kL=new Array(60).join(\"-\"),PL=\"\\t\",OL=new RegExp(\"[\"+PL+\"]+\",\"g\");Qm.defaultOption={show:!0,readOnly:!1,optionToContent:null,contentToOption:null,icon:\"M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28\",title:i(LL.title),lang:i(LL.lang),backgroundColor:\"#fff\",textColor:\"#000\",textareaColor:\"#fff\",textareaBorderColor:\"#333\",buttonColor:\"#c23531\",buttonTextColor:\"#fff\"},Qm.prototype.onclick=function(t,e){function i(){n.removeChild(a),x._dom=null}var n=e.getDom(),o=this.model;this._dom&&n.removeChild(this._dom);var a=document.createElement(\"div\");a.style.cssText=\"position:absolute;left:5px;top:5px;bottom:5px;right:5px;\",a.style.backgroundColor=o.get(\"backgroundColor\")||\"#fff\";var r=document.createElement(\"h4\"),s=o.get(\"lang\")||[];r.innerHTML=s[0]||o.get(\"title\"),r.style.cssText=\"margin: 10px 20px;\",r.style.color=o.get(\"textColor\");var l=document.createElement(\"div\"),h=document.createElement(\"textarea\");l.style.cssText=\"display:block;width:100%;overflow:auto;\";var u=o.get(\"optionToContent\"),c=o.get(\"contentToOption\"),d=jm(t);if(\"function\"==typeof u){var f=u(e.getOption());\"string\"==typeof f?l.innerHTML=f:S(f)&&l.appendChild(f)}else l.appendChild(h),h.readOnly=o.get(\"readOnly\"),h.style.cssText=\"width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;\",h.style.color=o.get(\"textColor\"),h.style.borderColor=o.get(\"textareaBorderColor\"),h.style.backgroundColor=o.get(\"textareaColor\"),h.value=d.value;var g=d.meta,p=document.createElement(\"div\");p.style.cssText=\"position:absolute;bottom:0;left:0;right:0;\";var m=\"float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px\",v=document.createElement(\"div\"),y=document.createElement(\"div\");m+=\";background-color:\"+o.get(\"buttonColor\"),m+=\";color:\"+o.get(\"buttonTextColor\");var x=this;si(v,\"click\",i),si(y,\"click\",function(){var t;try{t=\"function\"==typeof c?c(l,e.getOption()):Jm(h.value,g)}catch(t){throw i(),new Error(\"Data view format error \"+t)}t&&e.dispatchAction({type:\"changeDataView\",newOption:t}),i()}),v.innerHTML=s[1],y.innerHTML=s[2],y.style.cssText=m,v.style.cssText=m,!o.get(\"readOnly\")&&p.appendChild(y),p.appendChild(v),si(h,\"keydown\",function(t){if(9===(t.keyCode||t.which)){var e=this.value,i=this.selectionStart,n=this.selectionEnd;this.value=e.substring(0,i)+PL+e.substring(n),this.selectionStart=this.selectionEnd=i+1,bx(t)}}),a.appendChild(r),a.appendChild(l),a.appendChild(p),l.style.height=n.clientHeight-80+\"px\",n.appendChild(a),this._dom=a},Qm.prototype.remove=function(t,e){this._dom&&e.getDom().removeChild(this._dom)},Qm.prototype.dispose=function(t,e){this.remove(t,e)},wp(\"dataView\",Qm),ir({type:\"changeDataView\",event:\"dataViewChanged\",update:\"prepareAndUpdate\"},function(t,e){var i=[];d(t.newOption.series,function(t){var n=e.getSeriesByName(t.name)[0];if(n){var o=n.get(\"data\");i.push({name:t.name,data:tv(t.data,o)})}else i.push(a({type:\"scatter\"},t))}),e.mergeOption(r({series:i},t.newOption))});var zL=d,NL=\"\\0_ec_hist_store\";bD.extend({type:\"dataZoom.select\"}),wD.extend({type:\"dataZoom.select\"});var EL=lD.toolbox.dataZoom,RL=d,VL=\"\\0_ec_\\0toolbox-dataZoom_\";rv.defaultOption={show:!0,icon:{zoom:\"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1\",back:\"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26\"},title:i(EL.title)};var BL=rv.prototype;BL.render=function(t,e,i,n){this.model=t,this.ecModel=e,this.api=i,hv(t,e,this,n,i),lv(t,e)},BL.onclick=function(t,e,i){GL[i].call(this)},BL.remove=function(t,e){this._brushController.unmount()},BL.dispose=function(t,e){this._brushController.dispose()};var GL={zoom:function(){var t=!this._isZoomActive;this.api.dispatchAction({type:\"takeGlobalCursor\",key:\"dataZoomSelect\",dataZoomSelectActive:t})},back:function(){this._dispatchZoomAction(iv(this.ecModel))}};BL._onBrush=function(t,e){function i(t,e,i){var r=e.getAxis(t),s=r.model,l=n(t,s,a),h=l.findRepresentativeAxisProxy(s).getMinMaxSpan();null==h.minValueSpan&&null==h.maxValueSpan||(i=OT(0,i.slice(),r.scale.getExtent(),0,h.minValueSpan,h.maxValueSpan)),l&&(o[l.id]={dataZoomId:l.id,startValue:i[0],endValue:i[1]})}function n(t,e,i){var n;return i.eachComponent({mainType:\"dataZoom\",subType:\"select\"},function(i){i.getAxisModel(t,e.componentIndex)&&(n=i)}),n}if(e.isEnd&&t.length){var o={},a=this.ecModel;this._brushController.updateCovers([]),new rp(sv(this.model.option),a,{include:[\"grid\"]}).matchOutputRanges(t,a,function(t,e,n){if(\"cartesian2d\"===n.type){var o=t.brushType;\"rect\"===o?(i(\"x\",n,e[0]),i(\"y\",n,e[1])):i({lineX:\"x\",lineY:\"y\"}[o],n,e)}}),ev(a,o),this._dispatchZoomAction(o)}},BL._dispatchZoomAction=function(t){var e=[];RL(t,function(t,n){e.push(i(t))}),e.length&&this.api.dispatchAction({type:\"dataZoom\",from:this.uid,batch:e})},wp(\"dataZoom\",rv),tr(function(t){function e(t,e){if(e){var o=t+\"Index\",a=e[o];null==a||\"all\"==a||y(a)||(a=!1===a||\"none\"===a?[]:[a]),i(t,function(e,i){if(null==a||\"all\"==a||-1!==l(a,i)){var r={type:\"select\",$fromToolbox:!0,id:VL+t+i};r[o]=i,n.push(r)}})}}function i(e,i){var n=t[e];y(n)||(n=n?[n]:[]),RL(n,i)}if(t){var n=t.dataZoom||(t.dataZoom=[]);y(n)||(t.dataZoom=n=[n]);var o=t.toolbox;if(o&&(y(o)&&(o=o[0]),o&&o.feature)){var a=o.feature.dataZoom;e(\"xAxis\",a),e(\"yAxis\",a)}}});var WL=lD.toolbox.restore;uv.defaultOption={show:!0,icon:\"M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5\",title:WL.title},uv.prototype.onclick=function(t,e,i){nv(t),e.dispatchAction({type:\"restore\",from:this.uid})},wp(\"restore\",uv),ir({type:\"restore\",event:\"restore\",update:\"prepareAndUpdate\"},function(t,e){e.resetOption(\"recreate\")});var HL,FL=\"urn:schemas-microsoft-com:vml\",ZL=\"undefined\"==typeof window?null:window,UL=!1,XL=ZL&&ZL.document;if(XL&&!Uv.canvasSupported)try{!XL.namespaces.zrvml&&XL.namespaces.add(\"zrvml\",FL),HL=function(t){return XL.createElement(\"<zrvml:\"+t+' class=\"zrvml\">')}}catch(t){HL=function(t){return XL.createElement(\"<\"+t+' xmlns=\"'+FL+'\" class=\"zrvml\">')}}var jL=P_.CMD,qL=Math.round,YL=Math.sqrt,$L=Math.abs,KL=Math.cos,JL=Math.sin,QL=Math.max;if(!Uv.canvasSupported){var tk=21600,ek=tk/2,ik=function(t){t.style.cssText=\"position:absolute;left:0;top:0;width:1px;height:1px;\",t.coordsize=tk+\",\"+tk,t.coordorigin=\"0,0\"},nk=function(t){return String(t).replace(/&/g,\"&amp;\").replace(/\"/g,\"&quot;\")},ok=function(t,e,i){return\"rgb(\"+[t,e,i].join(\",\")+\")\"},ak=function(t,e){e&&t&&e.parentNode!==t&&t.appendChild(e)},rk=function(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)},sk=function(t,e,i){return 1e5*(parseFloat(t)||0)+1e3*(parseFloat(e)||0)+i},lk=function(t,e){return\"string\"==typeof t?t.lastIndexOf(\"%\")>=0?parseFloat(t)/100*e:parseFloat(t):t},hk=function(t,e,i){var n=Mt(e);i=+i,isNaN(i)&&(i=1),n&&(t.color=ok(n[0],n[1],n[2]),t.opacity=i*n[3])},uk=function(t){var e=Mt(t);return[ok(e[0],e[1],e[2]),e[3]]},ck=function(t,e,i){var n=e.fill;if(null!=n)if(n instanceof yb){var o,a=0,r=[0,0],s=0,l=1,h=i.getBoundingRect(),u=h.width,c=h.height;if(\"linear\"===n.type){o=\"gradient\";var d=i.transform,f=[n.x*u,n.y*c],g=[n.x2*u,n.y2*c];d&&($(f,f,d),$(g,g,d));var p=g[0]-f[0],m=g[1]-f[1];(a=180*Math.atan2(p,m)/Math.PI)<0&&(a+=360),a<1e-6&&(a=0)}else{o=\"gradientradial\";var f=[n.x*u,n.y*c],d=i.transform,v=i.scale,y=u,x=c;r=[(f[0]-h.x)/y,(f[1]-h.y)/x],d&&$(f,f,d),y/=v[0]*tk,x/=v[1]*tk;var _=QL(y,x);s=0/_,l=2*n.r/_-s}var b=n.colorStops.slice();b.sort(function(t,e){return t.offset-e.offset});for(var w=b.length,S=[],M=[],I=0;I<w;I++){var T=b[I],A=uk(T.color);M.push(T.offset*l+s+\" \"+A[0]),0!==I&&I!==w-1||S.push(A)}if(w>=2){var C=S[0][0],D=S[1][0],L=S[0][1]*e.opacity,k=S[1][1]*e.opacity;t.type=o,t.method=\"none\",t.focus=\"100%\",t.angle=a,t.color=C,t.color2=D,t.colors=M.join(\",\"),t.opacity=k,t.opacity2=L}\"radial\"===o&&(t.focusposition=r.join(\",\"))}else hk(t,n,e.opacity)},dk=function(t,e){null!=e.lineDash&&(t.dashstyle=e.lineDash.join(\" \")),null==e.stroke||e.stroke instanceof yb||hk(t,e.stroke,e.opacity)},fk=function(t,e,i,n){var o=\"fill\"==e,a=t.getElementsByTagName(e)[0];null!=i[e]&&\"none\"!==i[e]&&(o||!o&&i.lineWidth)?(t[o?\"filled\":\"stroked\"]=\"true\",i[e]instanceof yb&&rk(t,a),a||(a=cv(e)),o?ck(a,i,n):dk(a,i),ak(t,a)):(t[o?\"filled\":\"stroked\"]=\"false\",rk(t,a))},gk=[[],[],[]],pk=function(t,e){var i,n,o,a,r,s,l=jL.M,h=jL.C,u=jL.L,c=jL.A,d=jL.Q,f=[],g=t.data,p=t.len();for(a=0;a<p;){switch(o=g[a++],n=\"\",i=0,o){case l:n=\" m \",i=1,r=g[a++],s=g[a++],gk[0][0]=r,gk[0][1]=s;break;case u:n=\" l \",i=1,r=g[a++],s=g[a++],gk[0][0]=r,gk[0][1]=s;break;case d:case h:n=\" c \",i=3;var m,v,y=g[a++],x=g[a++],_=g[a++],b=g[a++];o===d?(m=_,v=b,_=(_+2*y)/3,b=(b+2*x)/3,y=(r+2*y)/3,x=(s+2*x)/3):(m=g[a++],v=g[a++]),gk[0][0]=y,gk[0][1]=x,gk[1][0]=_,gk[1][1]=b,gk[2][0]=m,gk[2][1]=v,r=m,s=v;break;case c:var w=0,S=0,M=1,I=1,T=0;e&&(w=e[4],S=e[5],M=YL(e[0]*e[0]+e[1]*e[1]),I=YL(e[2]*e[2]+e[3]*e[3]),T=Math.atan2(-e[1]/I,e[0]/M));var A=g[a++],C=g[a++],D=g[a++],L=g[a++],k=g[a++]+T,P=g[a++]+k+T;a++;var O=g[a++],z=A+KL(k)*D,N=C+JL(k)*L,y=A+KL(P)*D,x=C+JL(P)*L,E=O?\" wa \":\" at \";Math.abs(z-y)<1e-4&&(Math.abs(P-k)>.01?O&&(z+=.0125):Math.abs(N-C)<1e-4?O&&z<A||!O&&z>A?x-=.0125:x+=.0125:O&&N<C||!O&&N>C?y+=.0125:y-=.0125),f.push(E,qL(((A-D)*M+w)*tk-ek),\",\",qL(((C-L)*I+S)*tk-ek),\",\",qL(((A+D)*M+w)*tk-ek),\",\",qL(((C+L)*I+S)*tk-ek),\",\",qL((z*M+w)*tk-ek),\",\",qL((N*I+S)*tk-ek),\",\",qL((y*M+w)*tk-ek),\",\",qL((x*I+S)*tk-ek)),r=y,s=x;break;case jL.R:var R=gk[0],V=gk[1];R[0]=g[a++],R[1]=g[a++],V[0]=R[0]+g[a++],V[1]=R[1]+g[a++],e&&($(R,R,e),$(V,V,e)),R[0]=qL(R[0]*tk-ek),V[0]=qL(V[0]*tk-ek),R[1]=qL(R[1]*tk-ek),V[1]=qL(V[1]*tk-ek),f.push(\" m \",R[0],\",\",R[1],\" l \",V[0],\",\",R[1],\" l \",V[0],\",\",V[1],\" l \",R[0],\",\",V[1]);break;case jL.Z:f.push(\" x \")}if(i>0){f.push(n);for(var B=0;B<i;B++){var G=gk[B];e&&$(G,G,e),f.push(qL(G[0]*tk-ek),\",\",qL(G[1]*tk-ek),B<i-1?\",\":\"\")}}}return f.join(\"\")};Nn.prototype.brushVML=function(t){var e=this.style,i=this._vmlEl;i||(i=cv(\"shape\"),ik(i),this._vmlEl=i),fk(i,\"fill\",e,this),fk(i,\"stroke\",e,this);var n=this.transform,o=null!=n,a=i.getElementsByTagName(\"stroke\")[0];if(a){var r=e.lineWidth;if(o&&!e.strokeNoScale){var s=n[0]*n[3]-n[1]*n[2];r*=YL($L(s))}a.weight=r+\"px\"}var l=this.path||(this.path=new P_);this.__dirtyPath&&(l.beginPath(),this.buildPath(l,this.shape),l.toStatic(),this.__dirtyPath=!1),i.path=pk(l,this.transform),i.style.zIndex=sk(this.zlevel,this.z,this.z2),ak(t,i),null!=e.text?this.drawRectText(t,this.getBoundingRect()):this.removeRectText(t)},Nn.prototype.onRemove=function(t){rk(t,this._vmlEl),this.removeRectText(t)},Nn.prototype.onAdd=function(t){ak(t,this._vmlEl),this.appendRectText(t)};var mk=function(t){return\"object\"==typeof t&&t.tagName&&\"IMG\"===t.tagName.toUpperCase()};qe.prototype.brushVML=function(t){var e,i,n=this.style,o=n.image;if(mk(o)){var a=o.src;if(a===this._imageSrc)e=this._imageWidth,i=this._imageHeight;else{var r=o.runtimeStyle,s=r.width,l=r.height;r.width=\"auto\",r.height=\"auto\",e=o.width,i=o.height,r.width=s,r.height=l,this._imageSrc=a,this._imageWidth=e,this._imageHeight=i}o=a}else o===this._imageSrc&&(e=this._imageWidth,i=this._imageHeight);if(o){var h=n.x||0,u=n.y||0,c=n.width,d=n.height,f=n.sWidth,g=n.sHeight,p=n.sx||0,m=n.sy||0,v=f&&g,y=this._vmlEl;y||(y=XL.createElement(\"div\"),ik(y),this._vmlEl=y);var x,_=y.style,b=!1,w=1,S=1;if(this.transform&&(x=this.transform,w=YL(x[0]*x[0]+x[1]*x[1]),S=YL(x[2]*x[2]+x[3]*x[3]),b=x[1]||x[2]),b){var M=[h,u],I=[h+c,u],T=[h,u+d],A=[h+c,u+d];$(M,M,x),$(I,I,x),$(T,T,x),$(A,A,x);var C=QL(M[0],I[0],T[0],A[0]),D=QL(M[1],I[1],T[1],A[1]),L=[];L.push(\"M11=\",x[0]/w,\",\",\"M12=\",x[2]/S,\",\",\"M21=\",x[1]/w,\",\",\"M22=\",x[3]/S,\",\",\"Dx=\",qL(h*w+x[4]),\",\",\"Dy=\",qL(u*S+x[5])),_.padding=\"0 \"+qL(C)+\"px \"+qL(D)+\"px 0\",_.filter=\"progid:DXImageTransform.Microsoft.Matrix(\"+L.join(\"\")+\", SizingMethod=clip)\"}else x&&(h=h*w+x[4],u=u*S+x[5]),_.filter=\"\",_.left=qL(h)+\"px\",_.top=qL(u)+\"px\";var k=this._imageEl,P=this._cropEl;k||(k=XL.createElement(\"div\"),this._imageEl=k);var O=k.style;if(v){if(e&&i)O.width=qL(w*e*c/f)+\"px\",O.height=qL(S*i*d/g)+\"px\";else{var z=new Image,N=this;z.onload=function(){z.onload=null,e=z.width,i=z.height,O.width=qL(w*e*c/f)+\"px\",O.height=qL(S*i*d/g)+\"px\",N._imageWidth=e,N._imageHeight=i,N._imageSrc=o},z.src=o}P||((P=XL.createElement(\"div\")).style.overflow=\"hidden\",this._cropEl=P);var E=P.style;E.width=qL((c+p*c/f)*w),E.height=qL((d+m*d/g)*S),E.filter=\"progid:DXImageTransform.Microsoft.Matrix(Dx=\"+-p*c/f*w+\",Dy=\"+-m*d/g*S+\")\",P.parentNode||y.appendChild(P),k.parentNode!=P&&P.appendChild(k)}else O.width=qL(w*c)+\"px\",O.height=qL(S*d)+\"px\",y.appendChild(k),P&&P.parentNode&&(y.removeChild(P),this._cropEl=null);var R=\"\",V=n.opacity;V<1&&(R+=\".Alpha(opacity=\"+qL(100*V)+\") \"),R+=\"progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\"+o+\", SizingMethod=scale)\",O.filter=R,y.style.zIndex=sk(this.zlevel,this.z,this.z2),ak(t,y),null!=n.text&&this.drawRectText(t,this.getBoundingRect())}},qe.prototype.onRemove=function(t){rk(t,this._vmlEl),this._vmlEl=null,this._cropEl=null,this._imageEl=null,this.removeRectText(t)},qe.prototype.onAdd=function(t){ak(t,this._vmlEl),this.appendRectText(t)};var vk,yk={},xk=0,_k=document.createElement(\"div\"),bk=function(t){var e=yk[t];if(!e){xk>100&&(xk=0,yk={});var i,n=_k.style;try{n.font=t,i=n.fontFamily.split(\",\")[0]}catch(t){}e={style:n.fontStyle||\"normal\",variant:n.fontVariant||\"normal\",weight:n.fontWeight||\"normal\",size:0|parseFloat(n.fontSize||12),family:i||\"Microsoft YaHei\"},yk[t]=e,xk++}return e};!function(t,e){cx[t]=e}(\"measureText\",function(t,e){var i=XL;vk||((vk=i.createElement(\"div\")).style.cssText=\"position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;\",XL.body.appendChild(vk));try{vk.style.font=e}catch(t){}return vk.innerHTML=\"\",vk.appendChild(i.createTextNode(t)),{width:vk.offsetWidth}});for(var wk=new jt,Sk=[px,je,qe,Nn,ib],Mk=0;Mk<Sk.length;Mk++){var Ik=Sk[Mk].prototype;Ik.drawRectText=function(t,e,i,n){var o=this.style;this.__dirty&&De(o);var a=o.text;if(null!=a&&(a+=\"\"),a){if(o.rich){var r=Ie(a,o);a=[];for(var s=0;s<r.lines.length;s++){for(var l=r.lines[s].tokens,h=[],u=0;u<l.length;u++)h.push(l[u].text);a.push(h.join(\"\"))}a=a.join(\"\\n\")}var c,d,f=o.textAlign,g=o.textVerticalAlign,p=bk(o.font),m=p.style+\" \"+p.variant+\" \"+p.weight+\" \"+p.size+'px \"'+p.family+'\"';i=i||de(a,m,f,g);var v=this.transform;if(v&&!n&&(wk.copy(e),wk.applyTransform(v),e=wk),n)c=e.x,d=e.y;else{var y=o.textPosition,x=o.textDistance;if(y instanceof Array)c=e.x+lk(y[0],e.width),d=e.y+lk(y[1],e.height),f=f||\"left\";else{var _=ve(y,e,x);c=_.x,d=_.y,f=f||_.textAlign,g=g||_.textVerticalAlign}}c=pe(c,i.width,f),d=me(d,i.height,g),d+=i.height/2;var b,w,S,M=cv,I=this._textVmlEl;I?w=(b=(S=I.firstChild).nextSibling).nextSibling:(I=M(\"line\"),b=M(\"path\"),w=M(\"textpath\"),S=M(\"skew\"),w.style[\"v-text-align\"]=\"left\",ik(I),b.textpathok=!0,w.on=!0,I.from=\"0 0\",I.to=\"1000 0.05\",ak(I,S),ak(I,b),ak(I,w),this._textVmlEl=I);var T=[c,d],A=I.style;v&&n?($(T,T,v),S.on=!0,S.matrix=v[0].toFixed(3)+\",\"+v[2].toFixed(3)+\",\"+v[1].toFixed(3)+\",\"+v[3].toFixed(3)+\",0,0\",S.offset=(qL(T[0])||0)+\",\"+(qL(T[1])||0),S.origin=\"0 0\",A.left=\"0px\",A.top=\"0px\"):(S.on=!1,A.left=qL(c)+\"px\",A.top=qL(d)+\"px\"),w.string=nk(a);try{w.style.font=m}catch(t){}fk(I,\"fill\",{fill:o.textFill,opacity:o.opacity},this),fk(I,\"stroke\",{stroke:o.textStroke,opacity:o.opacity,lineDash:o.lineDash},this),I.style.zIndex=sk(this.zlevel,this.z,this.z2),ak(t,I)}},Ik.removeRectText=function(t){rk(t,this._textVmlEl),this._textVmlEl=null},Ik.appendRectText=function(t){ak(t,this._textVmlEl)}}ib.prototype.brushVML=function(t){var e=this.style;null!=e.text?this.drawRectText(t,{x:e.x||0,y:e.y||0,width:0,height:0},this.getBoundingRect(),!0):this.removeRectText(t)},ib.prototype.onRemove=function(t){this.removeRectText(t)},ib.prototype.onAdd=function(t){this.appendRectText(t)}}gv.prototype={constructor:gv,getType:function(){return\"vml\"},getViewportRoot:function(){return this._vmlViewport},getViewportRootOffset:function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},refresh:function(){var t=this.storage.getDisplayList(!0,!0);this._paintList(t)},_paintList:function(t){for(var e=this._vmlRoot,i=0;i<t.length;i++){var n=t[i];n.invisible||n.ignore?(n.__alreadyNotVisible||n.onRemove(e),n.__alreadyNotVisible=!0):(n.__alreadyNotVisible&&n.onAdd(e),n.__alreadyNotVisible=!1,n.__dirty&&(n.beforeBrush&&n.beforeBrush(),(n.brushVML||n.brush).call(n,e),n.afterBrush&&n.afterBrush())),n.__dirty=!1}this._firstPaint&&(this._vmlViewport.appendChild(e),this._firstPaint=!1)},resize:function(t,e){var t=null==t?this._getWidth():t,e=null==e?this._getHeight():e;if(this._width!=t||this._height!=e){this._width=t,this._height=e;var i=this._vmlViewport.style;i.width=t+\"px\",i.height=e+\"px\"}},dispose:function(){this.root.innerHTML=\"\",this._vmlRoot=this._vmlViewport=this.storage=null},getWidth:function(){return this._width},getHeight:function(){return this._height},clear:function(){this._vmlViewport&&this.root.removeChild(this._vmlViewport)},_getWidth:function(){var t=this.root,e=t.currentStyle;return(t.clientWidth||fv(e.width))-fv(e.paddingLeft)-fv(e.paddingRight)|0},_getHeight:function(){var t=this.root,e=t.currentStyle;return(t.clientHeight||fv(e.height))-fv(e.paddingTop)-fv(e.paddingBottom)|0}},d([\"getLayer\",\"insertLayer\",\"eachLayer\",\"eachBuiltinLayer\",\"eachOtherLayer\",\"getLayers\",\"modLayer\",\"delLayer\",\"clearLayer\",\"toDataURL\",\"pathToImage\"],function(t){gv.prototype[t]=pv(t)}),xi(\"vml\",gv);var Tk=\"http://www.w3.org/2000/svg\",Ak=P_.CMD,Ck=Array.prototype.join,Dk=\"none\",Lk=Math.round,kk=Math.sin,Pk=Math.cos,Ok=Math.PI,zk=2*Math.PI,Nk=180/Ok,Ek=1e-4,Rk={};Rk.brush=function(t){var e=t.style,i=t.__svgEl;i||(i=mv(\"path\"),t.__svgEl=i),t.path||t.createPathProxy();var n=t.path;if(t.__dirtyPath){n.beginPath(),t.buildPath(n,t.shape),t.__dirtyPath=!1;var o=Iv(n);o.indexOf(\"NaN\")<0&&wv(i,\"d\",o)}Mv(i,e),bv(i,t.transform),null!=e.text&&Wk(t,t.getBoundingRect())};var Vk={};Vk.brush=function(t){var e=t.style,i=e.image;if(i instanceof HTMLImageElement&&(i=i.src),i){var n=e.x||0,o=e.y||0,a=e.width,r=e.height,s=t.__svgEl;s||(s=mv(\"image\"),t.__svgEl=s),i!==t.__imageSrc&&(Sv(s,\"href\",i),t.__imageSrc=i),wv(s,\"width\",a),wv(s,\"height\",r),wv(s,\"x\",n),wv(s,\"y\",o),bv(s,t.transform),null!=e.text&&Wk(t,t.getBoundingRect())}};var Bk={},Gk=new jt,Wk=function(t,e,i){var n=t.style;t.__dirty&&De(n);var o=n.text;if(null!=o){o+=\"\";var a=t.__textSvgEl;if(a||(a=mv(\"text\"),t.__textSvgEl=a),Mv(a,n,!0),t instanceof ib||t.style.transformText)bv(a,t.transform);else if(t.transform)Gk.copy(e),Gk.applyTransform(t.transform),e=Gk;else{var r=t.transformCoordToGlobal(e.x,e.y);e.x=r[0],e.y=r[1]}var s,l,h=n.textPosition,u=n.textDistance,c=n.textAlign||\"left\";\"number\"==typeof n.fontSize&&(n.fontSize+=\"px\");var d=n.font||[n.fontStyle||\"\",n.fontWeight||\"\",n.fontSize||\"\",n.fontFamily||\"\"].join(\" \")||ux,f=Tv(n.textVerticalAlign),g=(i=de(o,d,c,f)).lineHeight;if(h instanceof Array)s=e.x+h[0],l=e.y+h[1];else{var p=ve(h,e,u);s=p.x,l=p.y,f=Tv(p.textVerticalAlign),c=p.textAlign}wv(a,\"alignment-baseline\",f),d&&(a.style.font=d);var m=n.textPadding;wv(a,\"x\",s),wv(a,\"y\",l);var v=o.split(\"\\n\"),y=v.length,x=c;\"left\"===x?(x=\"start\",m&&(s+=m[3])):\"right\"===x?(x=\"end\",m&&(s-=m[1])):\"center\"===x&&(x=\"middle\",m&&(s+=(m[3]-m[1])/2));var _=0;if(\"baseline\"===f?(_=-i.height+g,m&&(_-=m[2])):\"middle\"===f?(_=(-i.height+g)/2,m&&(l+=(m[0]-m[2])/2)):m&&(_+=m[0]),t.__text!==o||t.__textFont!==d){var b=t.__tspanList||[];t.__tspanList=b;for(S=0;S<y;S++)(M=b[S])?M.innerHTML=\"\":(M=b[S]=mv(\"tspan\"),a.appendChild(M),wv(M,\"alignment-baseline\",f),wv(M,\"text-anchor\",x)),wv(M,\"x\",s),wv(M,\"y\",l+S*g+_),M.appendChild(document.createTextNode(v[S]));for(;S<b.length;S++)a.removeChild(b[S]);b.length=y,t.__text=o,t.__textFont=d}else if(t.__tspanList.length)for(var w=t.__tspanList.length,S=0;S<w;++S){var M=t.__tspanList[S];M&&(wv(M,\"x\",s),wv(M,\"y\",l+S*g+_))}}};Bk.drawRectText=Wk,Bk.brush=function(t){var e=t.style;null!=e.text&&(e.textPosition=[0,0],Wk(t,{x:e.x||0,y:e.y||0,width:0,height:0},t.getBoundingRect()))},Av.prototype={diff:function(t,e,i){i||(i=function(t,e){return t===e}),this.equals=i;var n=this;t=t.slice();var o=(e=e.slice()).length,a=t.length,r=1,s=o+a,l=[{newPos:-1,components:[]}],h=this.extractCommon(l[0],e,t,0);if(l[0].newPos+1>=o&&h+1>=a){for(var u=[],c=0;c<e.length;c++)u.push(c);return[{indices:u,count:e.length}]}for(;r<=s;){var d=function(){for(var i=-1*r;i<=r;i+=2){var s,h=l[i-1],u=l[i+1],c=(u?u.newPos:0)-i;h&&(l[i-1]=void 0);var d=h&&h.newPos+1<o,f=u&&0<=c&&c<a;if(d||f){if(!d||f&&h.newPos<u.newPos?(s=Dv(u),n.pushComponent(s.components,void 0,!0)):((s=h).newPos++,n.pushComponent(s.components,!0,void 0)),c=n.extractCommon(s,e,t,i),s.newPos+1>=o&&c+1>=a)return Cv(0,s.components);l[i]=s}else l[i]=void 0}r++}();if(d)return d}},pushComponent:function(t,e,i){var n=t[t.length-1];n&&n.added===e&&n.removed===i?t[t.length-1]={count:n.count+1,added:e,removed:i}:t.push({count:1,added:e,removed:i})},extractCommon:function(t,e,i,n){for(var o=e.length,a=i.length,r=t.newPos,s=r-n,l=0;r+1<o&&s+1<a&&this.equals(e[r+1],i[s+1]);)r++,s++,l++;return l&&t.components.push({count:l}),t.newPos=r,s},tokenize:function(t){return t.slice()},join:function(t){return t.slice()}};var Hk=new Av,Fk=function(t,e,i){return Hk.diff(t,e,i)};Lv.prototype.createElement=mv,Lv.prototype.getDefs=function(t){var e=this._svgRoot,i=this._svgRoot.getElementsByTagName(\"defs\");return 0===i.length?t?((i=e.insertBefore(this.createElement(\"defs\"),e.firstChild)).contains||(i.contains=function(t){var e=i.children;if(!e)return!1;for(var n=e.length-1;n>=0;--n)if(e[n]===t)return!0;return!1}),i):null:i[0]},Lv.prototype.update=function(t,e){if(t){var i=this.getDefs(!1);if(t._dom&&i.contains(t._dom))\"function\"==typeof e&&e();else{var n=this.add(t);n&&(t._dom=n)}}},Lv.prototype.addDom=function(t){this.getDefs(!0).appendChild(t)},Lv.prototype.removeDom=function(t){this.getDefs(!1).removeChild(t._dom)},Lv.prototype.getDoms=function(){var t=this.getDefs(!1);if(!t)return[];var e=[];return d(this._tagNames,function(i){var n=t.getElementsByTagName(i);e=e.concat([].slice.call(n))}),e},Lv.prototype.markAllUnused=function(){var t=this;d(this.getDoms(),function(e){e[t._markLabel]=\"0\"})},Lv.prototype.markUsed=function(t){t&&(t[this._markLabel]=\"1\")},Lv.prototype.removeUnused=function(){var t=this.getDefs(!1);if(t){var e=this;d(this.getDoms(),function(i){\"1\"!==i[e._markLabel]&&t.removeChild(i)})}},Lv.prototype.getSvgProxy=function(t){return t instanceof Nn?Rk:t instanceof qe?Vk:t instanceof ib?Bk:Rk},Lv.prototype.getTextSvgElement=function(t){return t.__textSvgEl},Lv.prototype.getSvgElement=function(t){return t.__svgEl},h(kv,Lv),kv.prototype.addWithoutUpdate=function(t,e){if(e&&e.style){var i=this;d([\"fill\",\"stroke\"],function(n){if(e.style[n]&&(\"linear\"===e.style[n].type||\"radial\"===e.style[n].type)){var o,a=e.style[n],r=i.getDefs(!0);a._dom?(o=a._dom,r.contains(a._dom)||i.addDom(o)):o=i.add(a),i.markUsed(e);var s=o.getAttribute(\"id\");t.setAttribute(n,\"url(#\"+s+\")\")}})}},kv.prototype.add=function(t){var e;if(\"linear\"===t.type)e=this.createElement(\"linearGradient\");else{if(\"radial\"!==t.type)return Wy(\"Illegal gradient type.\"),null;e=this.createElement(\"radialGradient\")}return t.id=t.id||this.nextId++,e.setAttribute(\"id\",\"zr-gradient-\"+t.id),this.updateDom(t,e),this.addDom(e),e},kv.prototype.update=function(t){var e=this;Lv.prototype.update.call(this,t,function(){var i=t.type,n=t._dom.tagName;\"linear\"===i&&\"linearGradient\"===n||\"radial\"===i&&\"radialGradient\"===n?e.updateDom(t,t._dom):(e.removeDom(t),e.add(t))})},kv.prototype.updateDom=function(t,e){if(\"linear\"===t.type)e.setAttribute(\"x1\",t.x),e.setAttribute(\"y1\",t.y),e.setAttribute(\"x2\",t.x2),e.setAttribute(\"y2\",t.y2);else{if(\"radial\"!==t.type)return void Wy(\"Illegal gradient type.\");e.setAttribute(\"cx\",t.x),e.setAttribute(\"cy\",t.y),e.setAttribute(\"r\",t.r)}t.global?e.setAttribute(\"gradientUnits\",\"userSpaceOnUse\"):e.setAttribute(\"gradientUnits\",\"objectBoundingBox\"),e.innerHTML=\"\";for(var i=t.colorStops,n=0,o=i.length;n<o;++n){var a=this.createElement(\"stop\");a.setAttribute(\"offset\",100*i[n].offset+\"%\"),a.setAttribute(\"stop-color\",i[n].color),e.appendChild(a)}t._dom=e},kv.prototype.markUsed=function(t){if(t.style){var e=t.style.fill;e&&e._dom&&Lv.prototype.markUsed.call(this,e._dom),(e=t.style.stroke)&&e._dom&&Lv.prototype.markUsed.call(this,e._dom)}},h(Pv,Lv),Pv.prototype.update=function(t){var e=this.getSvgElement(t);e&&this.updateDom(e,t.__clipPaths,!1);var i=this.getTextSvgElement(t);i&&this.updateDom(i,t.__clipPaths,!0),this.markUsed(t)},Pv.prototype.updateDom=function(t,e,i){if(e&&e.length>0){var n,o,a=this.getDefs(!0),r=e[0],s=i?\"_textDom\":\"_dom\";r[s]?(o=r[s].getAttribute(\"id\"),n=r[s],a.contains(n)||a.appendChild(n)):(o=\"zr-clip-\"+this.nextId,++this.nextId,(n=this.createElement(\"clipPath\")).setAttribute(\"id\",o),a.appendChild(n),r[s]=n);var l=this.getSvgProxy(r);if(r.transform&&r.parent.invTransform&&!i){var h=Array.prototype.slice.call(r.transform);st(r.transform,r.parent.invTransform,r.transform),l.brush(r),r.transform=h}else l.brush(r);var u=this.getSvgElement(r);n.appendChild(u.cloneNode()),t.setAttribute(\"clip-path\",\"url(#\"+o+\")\"),e.length>1&&this.updateDom(n,e.slice(1),i)}else t&&t.setAttribute(\"clip-path\",\"none\")},Pv.prototype.markUsed=function(t){var e=this;t.__clipPaths&&t.__clipPaths.length>0&&d(t.__clipPaths,function(t){t._dom&&Lv.prototype.markUsed.call(e,t._dom),t._textDom&&Lv.prototype.markUsed.call(e,t._textDom)})};var Zk=function(t,e){this.root=t,this.storage=e;var i=mv(\"svg\");i.setAttribute(\"xmlns\",\"http://www.w3.org/2000/svg\"),i.setAttribute(\"version\",\"1.1\"),i.setAttribute(\"baseProfile\",\"full\"),i.style[\"user-select\"]=\"none\",this.gradientManager=new kv(i),this.clipPathManager=new Pv(i);var n=document.createElement(\"div\");n.style.cssText=\"overflow: hidden;\",this._svgRoot=i,this._viewport=n,t.appendChild(n),n.appendChild(i),this.resize(),this._visibleList=[]};Zk.prototype={constructor:Zk,getType:function(){return\"svg\"},getViewportRoot:function(){return this._viewport},getViewportRootOffset:function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},refresh:function(){var t=this.storage.getDisplayList(!0);this._paintList(t)},_paintList:function(t){this.gradientManager.markAllUnused(),this.clipPathManager.markAllUnused();var e,i=this._svgRoot,n=this._visibleList,o=t.length,a=[];for(e=0;e<o;e++){var r=zv(f=t[e]);f.invisible||(f.__dirty&&(r&&r.brush(f),this.clipPathManager.update(f),f.style&&(this.gradientManager.update(f.style.fill),this.gradientManager.update(f.style.stroke)),f.__dirty=!1),a.push(f))}var s,l=Fk(n,a);for(e=0;e<l.length;e++)if((c=l[e]).removed)for(d=0;d<c.count;d++){var h=Gv(f=n[c.indices[d]]),u=Bv(f);Vv(i,h),Vv(i,u)}for(e=0;e<l.length;e++){var c=l[e];if(c.added)for(d=0;d<c.count;d++){var h=Gv(f=a[c.indices[d]]),u=Bv(f);s?Ev(i,h,s):Rv(i,h),h?Ev(i,u,h):s?Ev(i,u,s):Rv(i,u),Ev(i,u,h),s=u||h||s,this.gradientManager.addWithoutUpdate(h,f),this.clipPathManager.markUsed(f)}else if(!c.removed)for(var d=0;d<c.count;d++){var f=a[c.indices[d]];s=h=Bv(f)||Gv(f)||s,this.gradientManager.markUsed(f),this.gradientManager.addWithoutUpdate(h,f),this.clipPathManager.markUsed(f)}}this.gradientManager.removeUnused(),this.clipPathManager.removeUnused(),this._visibleList=a},_getDefs:function(t){var e=this._svgRoot,i=this._svgRoot.getElementsByTagName(\"defs\");return 0===i.length?t?((i=e.insertBefore(mv(\"defs\"),e.firstChild)).contains||(i.contains=function(t){var e=i.children;if(!e)return!1;for(var n=e.length-1;n>=0;--n)if(e[n]===t)return!0;return!1}),i):null:i[0]},resize:function(){var t=this._getWidth(),e=this._getHeight();if(this._width!==t&&this._height!==e){this._width=t,this._height=e;var i=this._viewport.style;i.width=t+\"px\",i.height=e+\"px\";var n=this._svgRoot;n.setAttribute(\"width\",t),n.setAttribute(\"height\",e)}},getWidth:function(){return this._getWidth()},getHeight:function(){return this._getHeight()},_getWidth:function(){var t=this.root,e=document.defaultView.getComputedStyle(t);return(t.clientWidth||Ov(e.width))-Ov(e.paddingLeft)-Ov(e.paddingRight)|0},_getHeight:function(){var t=this.root,e=document.defaultView.getComputedStyle(t);return(t.clientHeight||Ov(e.height))-Ov(e.paddingTop)-Ov(e.paddingBottom)|0},dispose:function(){this.root.innerHTML=\"\",this._svgRoot=this._viewport=this.storage=null},clear:function(){this._viewport&&this.root.removeChild(this._viewport)},pathToSvg:function(){this.refresh();var t=this._svgRoot.outerHTML;return\"data:img/svg+xml;utf-8,\"+unescape(t)}},d([\"getLayer\",\"insertLayer\",\"eachLayer\",\"eachBuiltinLayer\",\"eachOtherLayer\",\"getLayers\",\"modLayer\",\"delLayer\",\"clearLayer\",\"toDataURL\",\"pathToImage\"],function(t){Zk.prototype[t]=Wv(t)}),xi(\"svg\",Zk),t.version=\"3.8.4\",t.dependencies=Cw,t.PRIORITY=Pw,t.init=function(t,e,i){var n=Qa(t);if(n)return n;var o=new za(t,e,i);return o.id=\"ec_\"+Yw++,jw[o.id]=o,t.setAttribute?t.setAttribute(Kw,o.id):t[Kw]=o.id,Ka(o),o},t.connect=function(t){if(y(t)){var e=t;t=null,d(e,function(e){null!=e.group&&(t=e.group)}),t=t||\"g_\"+$w++,d(e,function(e){e.group=t})}return qw[t]=!0,t},t.disConnect=Ja,t.disconnect=Qw,t.dispose=function(t){\"string\"==typeof t?t=jw[t]:t instanceof za||(t=Qa(t)),t instanceof za&&!t.isDisposed()&&t.dispose()},t.getInstanceByDom=Qa,t.getInstanceById=function(t){return jw[t]},t.registerTheme=function(t,e){Uw[t]=e},t.registerPreprocessor=tr,t.registerProcessor=er,t.registerPostUpdate=function(t){Fw.push(t)},t.registerAction=ir,t.registerCoordinateSystem=nr,t.getCoordinateSystemDimensions=function(t){var e=ua.get(t);if(e)return e.getDimensionsInfo?e.getDimensionsInfo():e.dimensions.slice()},t.registerLayout=or,t.registerVisual=ar,t.registerLoading=rr,t.extendComponentModel=sr,t.extendComponentView=lr,t.extendSeriesModel=hr,t.extendChartView=ur,t.setCanvasCreator=function(t){e(\"createCanvas\",t)},t.registerMap=function(t,e,i){e.geoJson&&!e.features&&(i=e.specialAreas,e=e.geoJson),\"string\"==typeof e&&(e=\"undefined\"!=typeof JSON&&JSON.parse?JSON.parse(e):new Function(\"return (\"+e+\");\")()),Jw[t]={geoJson:e,specialAreas:i}},t.getMap=cr,t.dataTool=tS,t.zrender=Nx,t.graphic=Tb,t.number=Bx,t.format=Xx,t.throttle=Da,t.helper=HS,t.matrix=yy,t.vector=cy,t.color=Ny,t.util=qS,t.List=aS,t.Model=Lo,t.Axis=US,t.env=Uv,t.parseGeoJson=jS});\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/html5shiv-3.7.3.min.js",
    "content": "/**\n * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed\n */\n!function(a,b){function c(a,b){var c=a.createElement(\"p\"),d=a.getElementsByTagName(\"head\")[0]||a.documentElement;return c.innerHTML=\"x<style>\"+b+\"</style>\",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return\"string\"==typeof a?a.split(\" \"):a}function e(a,b){var c=t.elements;\"string\"!=typeof c&&(c=c.join(\" \")),\"string\"!=typeof a&&(a=a.join(\" \")),t.elements=c+\" \"+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function(\"h,f\",\"return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(\"+d().join().replace(/[\\w\\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c(\"'+a+'\")'})+\");return n}\")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,\"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}\")),l||i(a,d),a}var k,l,m=\"3.7.3\",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q=\"_html5shiv\",r=0,s={};!function(){try{var a=b.createElement(\"a\");a.innerHTML=\"<xyz></xyz>\",k=\"hidden\"in a,l=1==a.childNodes.length||function(){b.createElement(\"a\");var a=b.createDocumentFragment();return\"undefined\"==typeof a.cloneNode||\"undefined\"==typeof a.createDocumentFragment||\"undefined\"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||\"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video\",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:\"default\",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),\"object\"==typeof module&&module.exports&&(module.exports=t)}(\"undefined\"!=typeof window?window:this,document);"
  },
  {
    "path": "src/main/resources/static/assets/vendor/iconfont/demo.css",
    "content": "/* Logo 字体 */\n@font-face {\n  font-family: \"iconfont logo\";\n  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');\n  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),\n    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),\n    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),\n    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');\n}\n\n.logo {\n  font-family: \"iconfont logo\";\n  font-size: 160px;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n/* tabs */\n.nav-tabs {\n  position: relative;\n}\n\n.nav-tabs .nav-more {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  height: 42px;\n  line-height: 42px;\n  color: #666;\n}\n\n#tabs {\n  border-bottom: 1px solid #eee;\n}\n\n#tabs li {\n  cursor: pointer;\n  width: 100px;\n  height: 40px;\n  line-height: 40px;\n  text-align: center;\n  font-size: 16px;\n  border-bottom: 2px solid transparent;\n  position: relative;\n  z-index: 1;\n  margin-bottom: -1px;\n  color: #666;\n}\n\n\n#tabs .active {\n  border-bottom-color: #f00;\n  color: #222;\n}\n\n.tab-container .content {\n  display: none;\n}\n\n/* 页面布局 */\n.main {\n  padding: 30px 100px;\n  width: 960px;\n  margin: 0 auto;\n}\n\n.main .logo {\n  color: #333;\n  text-align: left;\n  margin-bottom: 30px;\n  line-height: 1;\n  height: 110px;\n  margin-top: -50px;\n  overflow: hidden;\n  *zoom: 1;\n}\n\n.main .logo a {\n  font-size: 160px;\n  color: #333;\n}\n\n.helps {\n  margin-top: 40px;\n}\n\n.helps pre {\n  padding: 20px;\n  margin: 10px 0;\n  border: solid 1px #e7e1cd;\n  background-color: #fffdef;\n  overflow: auto;\n}\n\n.icon_lists {\n  width: 100% !important;\n  overflow: hidden;\n  *zoom: 1;\n}\n\n.icon_lists li {\n  width: 100px;\n  margin-bottom: 10px;\n  margin-right: 20px;\n  text-align: center;\n  list-style: none !important;\n  cursor: default;\n}\n\n.icon_lists li .code-name {\n  line-height: 1.2;\n}\n\n.icon_lists .icon {\n  display: block;\n  height: 100px;\n  line-height: 100px;\n  font-size: 42px;\n  margin: 10px auto;\n  color: #333;\n  -webkit-transition: font-size 0.25s linear, width 0.25s linear;\n  -moz-transition: font-size 0.25s linear, width 0.25s linear;\n  transition: font-size 0.25s linear, width 0.25s linear;\n}\n\n.icon_lists .icon:hover {\n  font-size: 100px;\n}\n\n.icon_lists .svg-icon {\n  /* 通过设置 font-size 来改变图标大小 */\n  width: 1em;\n  /* 图标和文字相邻时，垂直对齐 */\n  vertical-align: -0.15em;\n  /* 通过设置 color 来改变 SVG 的颜色/fill */\n  fill: currentColor;\n  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示\n      normalize.css 中也包含这行 */\n  overflow: hidden;\n}\n\n.icon_lists li .name,\n.icon_lists li .code-name {\n  color: #666;\n}\n\n/* markdown 样式 */\n.markdown {\n  color: #666;\n  font-size: 14px;\n  line-height: 1.8;\n}\n\n.highlight {\n  line-height: 1.5;\n}\n\n.markdown img {\n  vertical-align: middle;\n  max-width: 100%;\n}\n\n.markdown h1 {\n  color: #404040;\n  font-weight: 500;\n  line-height: 40px;\n  margin-bottom: 24px;\n}\n\n.markdown h2,\n.markdown h3,\n.markdown h4,\n.markdown h5,\n.markdown h6 {\n  color: #404040;\n  margin: 1.6em 0 0.6em 0;\n  font-weight: 500;\n  clear: both;\n}\n\n.markdown h1 {\n  font-size: 28px;\n}\n\n.markdown h2 {\n  font-size: 22px;\n}\n\n.markdown h3 {\n  font-size: 16px;\n}\n\n.markdown h4 {\n  font-size: 14px;\n}\n\n.markdown h5 {\n  font-size: 12px;\n}\n\n.markdown h6 {\n  font-size: 12px;\n}\n\n.markdown hr {\n  height: 1px;\n  border: 0;\n  background: #e9e9e9;\n  margin: 16px 0;\n  clear: both;\n}\n\n.markdown p {\n  margin: 1em 0;\n}\n\n.markdown>p,\n.markdown>blockquote,\n.markdown>.highlight,\n.markdown>ol,\n.markdown>ul {\n  width: 80%;\n}\n\n.markdown ul>li {\n  list-style: circle;\n}\n\n.markdown>ul li,\n.markdown blockquote ul>li {\n  margin-left: 20px;\n  padding-left: 4px;\n}\n\n.markdown>ul li p,\n.markdown>ol li p {\n  margin: 0.6em 0;\n}\n\n.markdown ol>li {\n  list-style: decimal;\n}\n\n.markdown>ol li,\n.markdown blockquote ol>li {\n  margin-left: 20px;\n  padding-left: 4px;\n}\n\n.markdown code {\n  margin: 0 3px;\n  padding: 0 5px;\n  background: #eee;\n  border-radius: 3px;\n}\n\n.markdown strong,\n.markdown b {\n  font-weight: 600;\n}\n\n.markdown>table {\n  border-collapse: collapse;\n  border-spacing: 0px;\n  empty-cells: show;\n  border: 1px solid #e9e9e9;\n  width: 95%;\n  margin-bottom: 24px;\n}\n\n.markdown>table th {\n  white-space: nowrap;\n  color: #333;\n  font-weight: 600;\n}\n\n.markdown>table th,\n.markdown>table td {\n  border: 1px solid #e9e9e9;\n  padding: 8px 16px;\n  text-align: left;\n}\n\n.markdown>table th {\n  background: #F7F7F7;\n}\n\n.markdown blockquote {\n  font-size: 90%;\n  color: #999;\n  border-left: 4px solid #e9e9e9;\n  padding-left: 0.8em;\n  margin: 1em 0;\n}\n\n.markdown blockquote p {\n  margin: 0;\n}\n\n.markdown .anchor {\n  opacity: 0;\n  transition: opacity 0.3s ease;\n  margin-left: 8px;\n}\n\n.markdown .waiting {\n  color: #ccc;\n}\n\n.markdown h1:hover .anchor,\n.markdown h2:hover .anchor,\n.markdown h3:hover .anchor,\n.markdown h4:hover .anchor,\n.markdown h5:hover .anchor,\n.markdown h6:hover .anchor {\n  opacity: 1;\n  display: inline-block;\n}\n\n.markdown>br,\n.markdown>p>br {\n  clear: both;\n}\n\n\n.hljs {\n  display: block;\n  background: white;\n  padding: 0.5em;\n  color: #333333;\n  overflow-x: auto;\n}\n\n.hljs-comment,\n.hljs-meta {\n  color: #969896;\n}\n\n.hljs-string,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-strong,\n.hljs-emphasis,\n.hljs-quote {\n  color: #df5000;\n}\n\n.hljs-keyword,\n.hljs-selector-tag,\n.hljs-type {\n  color: #a71d5d;\n}\n\n.hljs-literal,\n.hljs-symbol,\n.hljs-bullet,\n.hljs-attribute {\n  color: #0086b3;\n}\n\n.hljs-section,\n.hljs-name {\n  color: #63a35c;\n}\n\n.hljs-tag {\n  color: #333333;\n}\n\n.hljs-title,\n.hljs-attr,\n.hljs-selector-id,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo {\n  color: #795da3;\n}\n\n.hljs-addition {\n  color: #55a532;\n  background-color: #eaffea;\n}\n\n.hljs-deletion {\n  color: #bd2c00;\n  background-color: #ffecec;\n}\n\n.hljs-link {\n  text-decoration: underline;\n}\n\n/* 代码高亮 */\n/* PrismJS 1.15.0\nhttps://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n  color: black;\n  background: none;\n  text-shadow: 0 1px white;\n  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n  text-align: left;\n  white-space: pre;\n  word-spacing: normal;\n  word-break: normal;\n  word-wrap: normal;\n  line-height: 1.5;\n\n  -moz-tab-size: 4;\n  -o-tab-size: 4;\n  tab-size: 4;\n\n  -webkit-hyphens: none;\n  -moz-hyphens: none;\n  -ms-hyphens: none;\n  hyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection,\npre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection,\ncode[class*=\"language-\"] ::-moz-selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n\npre[class*=\"language-\"]::selection,\npre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection,\ncode[class*=\"language-\"] ::selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n\n@media print {\n\n  code[class*=\"language-\"],\n  pre[class*=\"language-\"] {\n    text-shadow: none;\n  }\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n  padding: 1em;\n  margin: .5em 0;\n  overflow: auto;\n}\n\n:not(pre)>code[class*=\"language-\"],\npre[class*=\"language-\"] {\n  background: #f5f2f0;\n}\n\n/* Inline code */\n:not(pre)>code[class*=\"language-\"] {\n  padding: .1em;\n  border-radius: .3em;\n  white-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n  color: slategray;\n}\n\n.token.punctuation {\n  color: #999;\n}\n\n.namespace {\n  opacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n  color: #905;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n  color: #690;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n  color: #9a6e3a;\n  background: hsla(0, 0%, 100%, .5);\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n  color: #07a;\n}\n\n.token.function,\n.token.class-name {\n  color: #DD4A68;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n  color: #e90;\n}\n\n.token.important,\n.token.bold {\n  font-weight: bold;\n}\n\n.token.italic {\n  font-style: italic;\n}\n\n.token.entity {\n  cursor: help;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/iconfont/demo_index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"utf-8\"/>\n  <title>IconFont Demo</title>\n  <link rel=\"shortcut icon\" href=\"https://gtms04.alicdn.com/tps/i4/TB1_oz6GVXXXXaFXpXXJDFnIXXX-64-64.ico\" type=\"image/x-icon\"/>\n  <link rel=\"stylesheet\" href=\"https://g.alicdn.com/thx/cube/1.3.2/cube.min.css\">\n  <link rel=\"stylesheet\" href=\"demo.css\">\n  <link rel=\"stylesheet\" href=\"iconfont.css\">\n  <script src=\"iconfont.js\"></script>\n  <!-- jQuery -->\n  <script src=\"https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js\"></script>\n  <!-- 代码高亮 -->\n  <script src=\"https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js\"></script>\n</head>\n<body>\n  <div class=\"main\">\n    <h1 class=\"logo\"><a href=\"https://www.iconfont.cn/\" title=\"iconfont 首页\" target=\"_blank\">&#xe86b;</a></h1>\n    <div class=\"nav-tabs\">\n      <ul id=\"tabs\" class=\"dib-box\">\n        <li class=\"dib active\"><span>Unicode</span></li>\n        <li class=\"dib\"><span>Font class</span></li>\n        <li class=\"dib\"><span>Symbol</span></li>\n      </ul>\n      \n      <a href=\"https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=1601062\" target=\"_blank\" class=\"nav-more\">查看项目</a>\n      \n    </div>\n    <div class=\"tab-container\">\n      <div class=\"content unicode\" style=\"display: block;\">\n          <ul class=\"icon_lists dib-box\">\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe601;</span>\n                <div class=\"name\">bars</div>\n                <div class=\"code-name\">&amp;#xe601;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe602;</span>\n                <div class=\"name\">calendar</div>\n                <div class=\"code-name\">&amp;#xe602;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe603;</span>\n                <div class=\"name\">camera</div>\n                <div class=\"code-name\">&amp;#xe603;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe604;</span>\n                <div class=\"name\">check</div>\n                <div class=\"code-name\">&amp;#xe604;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe605;</span>\n                <div class=\"name\">check-square-o</div>\n                <div class=\"code-name\">&amp;#xe605;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe606;</span>\n                <div class=\"name\">clock-o</div>\n                <div class=\"code-name\">&amp;#xe606;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe607;</span>\n                <div class=\"name\">500px</div>\n                <div class=\"code-name\">&amp;#xe607;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe608;</span>\n                <div class=\"name\">address-book-o</div>\n                <div class=\"code-name\">&amp;#xe608;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe609;</span>\n                <div class=\"name\">address-book</div>\n                <div class=\"code-name\">&amp;#xe609;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe60a;</span>\n                <div class=\"name\">address-card-o</div>\n                <div class=\"code-name\">&amp;#xe60a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe60b;</span>\n                <div class=\"name\">address-card</div>\n                <div class=\"code-name\">&amp;#xe60b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe60c;</span>\n                <div class=\"name\">adjust</div>\n                <div class=\"code-name\">&amp;#xe60c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe60d;</span>\n                <div class=\"name\">adn</div>\n                <div class=\"code-name\">&amp;#xe60d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe60e;</span>\n                <div class=\"name\">align-center</div>\n                <div class=\"code-name\">&amp;#xe60e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe60f;</span>\n                <div class=\"name\">align-justify</div>\n                <div class=\"code-name\">&amp;#xe60f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe610;</span>\n                <div class=\"name\">align-left</div>\n                <div class=\"code-name\">&amp;#xe610;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe611;</span>\n                <div class=\"name\">align-right</div>\n                <div class=\"code-name\">&amp;#xe611;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe612;</span>\n                <div class=\"name\">amazon</div>\n                <div class=\"code-name\">&amp;#xe612;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe613;</span>\n                <div class=\"name\">ambulance</div>\n                <div class=\"code-name\">&amp;#xe613;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe614;</span>\n                <div class=\"name\">american-sign-language-interpreting</div>\n                <div class=\"code-name\">&amp;#xe614;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe615;</span>\n                <div class=\"name\">anchor</div>\n                <div class=\"code-name\">&amp;#xe615;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe616;</span>\n                <div class=\"name\">android</div>\n                <div class=\"code-name\">&amp;#xe616;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe617;</span>\n                <div class=\"name\">angellist</div>\n                <div class=\"code-name\">&amp;#xe617;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe618;</span>\n                <div class=\"name\">angle-double-down</div>\n                <div class=\"code-name\">&amp;#xe618;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe619;</span>\n                <div class=\"name\">angle-double-left</div>\n                <div class=\"code-name\">&amp;#xe619;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe61a;</span>\n                <div class=\"name\">angle-double-right</div>\n                <div class=\"code-name\">&amp;#xe61a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe61b;</span>\n                <div class=\"name\">angle-double-up</div>\n                <div class=\"code-name\">&amp;#xe61b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe61c;</span>\n                <div class=\"name\">angle-down</div>\n                <div class=\"code-name\">&amp;#xe61c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe61d;</span>\n                <div class=\"name\">angle-left</div>\n                <div class=\"code-name\">&amp;#xe61d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe61e;</span>\n                <div class=\"name\">angle-right</div>\n                <div class=\"code-name\">&amp;#xe61e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe61f;</span>\n                <div class=\"name\">angle-up</div>\n                <div class=\"code-name\">&amp;#xe61f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe620;</span>\n                <div class=\"name\">apple</div>\n                <div class=\"code-name\">&amp;#xe620;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe621;</span>\n                <div class=\"name\">archive</div>\n                <div class=\"code-name\">&amp;#xe621;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe622;</span>\n                <div class=\"name\">area-chart</div>\n                <div class=\"code-name\">&amp;#xe622;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe623;</span>\n                <div class=\"name\">arrow-circle-down</div>\n                <div class=\"code-name\">&amp;#xe623;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe624;</span>\n                <div class=\"name\">arrow-circle-left</div>\n                <div class=\"code-name\">&amp;#xe624;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe625;</span>\n                <div class=\"name\">arrow-circle-o-down</div>\n                <div class=\"code-name\">&amp;#xe625;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe626;</span>\n                <div class=\"name\">arrow-circle-o-left</div>\n                <div class=\"code-name\">&amp;#xe626;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe627;</span>\n                <div class=\"name\">arrow-circle-o-right</div>\n                <div class=\"code-name\">&amp;#xe627;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe628;</span>\n                <div class=\"name\">arrow-circle-o-up</div>\n                <div class=\"code-name\">&amp;#xe628;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe629;</span>\n                <div class=\"name\">arrow-circle-right</div>\n                <div class=\"code-name\">&amp;#xe629;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe62a;</span>\n                <div class=\"name\">arrow-circle-up</div>\n                <div class=\"code-name\">&amp;#xe62a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe62b;</span>\n                <div class=\"name\">arrow-down</div>\n                <div class=\"code-name\">&amp;#xe62b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe62c;</span>\n                <div class=\"name\">arrow-left</div>\n                <div class=\"code-name\">&amp;#xe62c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe62d;</span>\n                <div class=\"name\">arrow-right</div>\n                <div class=\"code-name\">&amp;#xe62d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe62e;</span>\n                <div class=\"name\">arrow-up</div>\n                <div class=\"code-name\">&amp;#xe62e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe62f;</span>\n                <div class=\"name\">arrows-alt</div>\n                <div class=\"code-name\">&amp;#xe62f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe630;</span>\n                <div class=\"name\">arrows-h</div>\n                <div class=\"code-name\">&amp;#xe630;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe631;</span>\n                <div class=\"name\">arrows-v</div>\n                <div class=\"code-name\">&amp;#xe631;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe632;</span>\n                <div class=\"name\">arrows</div>\n                <div class=\"code-name\">&amp;#xe632;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe633;</span>\n                <div class=\"name\">asl-interpreting</div>\n                <div class=\"code-name\">&amp;#xe633;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe634;</span>\n                <div class=\"name\">assistive-listening-systems</div>\n                <div class=\"code-name\">&amp;#xe634;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe635;</span>\n                <div class=\"name\">asterisk</div>\n                <div class=\"code-name\">&amp;#xe635;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe636;</span>\n                <div class=\"name\">at</div>\n                <div class=\"code-name\">&amp;#xe636;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe637;</span>\n                <div class=\"name\">audio-description</div>\n                <div class=\"code-name\">&amp;#xe637;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe638;</span>\n                <div class=\"name\">automobile</div>\n                <div class=\"code-name\">&amp;#xe638;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe639;</span>\n                <div class=\"name\">backward</div>\n                <div class=\"code-name\">&amp;#xe639;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe63a;</span>\n                <div class=\"name\">balance-scale</div>\n                <div class=\"code-name\">&amp;#xe63a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe63b;</span>\n                <div class=\"name\">bandcamp</div>\n                <div class=\"code-name\">&amp;#xe63b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe63c;</span>\n                <div class=\"name\">bank</div>\n                <div class=\"code-name\">&amp;#xe63c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe63d;</span>\n                <div class=\"name\">bars</div>\n                <div class=\"code-name\">&amp;#xe63d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe63e;</span>\n                <div class=\"name\">bar-chart</div>\n                <div class=\"code-name\">&amp;#xe63e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe63f;</span>\n                <div class=\"name\">bar-chart-o</div>\n                <div class=\"code-name\">&amp;#xe63f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe640;</span>\n                <div class=\"name\">bathtub</div>\n                <div class=\"code-name\">&amp;#xe640;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe641;</span>\n                <div class=\"name\">barcode</div>\n                <div class=\"code-name\">&amp;#xe641;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe642;</span>\n                <div class=\"name\">bath</div>\n                <div class=\"code-name\">&amp;#xe642;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe643;</span>\n                <div class=\"name\">battery-0</div>\n                <div class=\"code-name\">&amp;#xe643;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe644;</span>\n                <div class=\"name\">battery-1</div>\n                <div class=\"code-name\">&amp;#xe644;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe645;</span>\n                <div class=\"name\">battery-2</div>\n                <div class=\"code-name\">&amp;#xe645;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe646;</span>\n                <div class=\"name\">battery-4</div>\n                <div class=\"code-name\">&amp;#xe646;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe647;</span>\n                <div class=\"name\">battery-3</div>\n                <div class=\"code-name\">&amp;#xe647;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe648;</span>\n                <div class=\"name\">battery-half</div>\n                <div class=\"code-name\">&amp;#xe648;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe649;</span>\n                <div class=\"name\">battery-empty</div>\n                <div class=\"code-name\">&amp;#xe649;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe64a;</span>\n                <div class=\"name\">battery-full</div>\n                <div class=\"code-name\">&amp;#xe64a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe64b;</span>\n                <div class=\"name\">battery-quarter</div>\n                <div class=\"code-name\">&amp;#xe64b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe64c;</span>\n                <div class=\"name\">battery-three-quarters</div>\n                <div class=\"code-name\">&amp;#xe64c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe64d;</span>\n                <div class=\"name\">battery</div>\n                <div class=\"code-name\">&amp;#xe64d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe64e;</span>\n                <div class=\"name\">beer</div>\n                <div class=\"code-name\">&amp;#xe64e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe64f;</span>\n                <div class=\"name\">bed</div>\n                <div class=\"code-name\">&amp;#xe64f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe650;</span>\n                <div class=\"name\">behance</div>\n                <div class=\"code-name\">&amp;#xe650;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe651;</span>\n                <div class=\"name\">behance-square</div>\n                <div class=\"code-name\">&amp;#xe651;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe652;</span>\n                <div class=\"name\">bell-o</div>\n                <div class=\"code-name\">&amp;#xe652;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe653;</span>\n                <div class=\"name\">bell-slash-o</div>\n                <div class=\"code-name\">&amp;#xe653;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe654;</span>\n                <div class=\"name\">bell-slash</div>\n                <div class=\"code-name\">&amp;#xe654;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe655;</span>\n                <div class=\"name\">bicycle</div>\n                <div class=\"code-name\">&amp;#xe655;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe656;</span>\n                <div class=\"name\">bitbucket-square</div>\n                <div class=\"code-name\">&amp;#xe656;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe657;</span>\n                <div class=\"name\">binoculars</div>\n                <div class=\"code-name\">&amp;#xe657;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe658;</span>\n                <div class=\"name\">bell</div>\n                <div class=\"code-name\">&amp;#xe658;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe659;</span>\n                <div class=\"name\">birthday-cake</div>\n                <div class=\"code-name\">&amp;#xe659;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe65a;</span>\n                <div class=\"name\">bitbucket</div>\n                <div class=\"code-name\">&amp;#xe65a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe65b;</span>\n                <div class=\"name\">black-tie</div>\n                <div class=\"code-name\">&amp;#xe65b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe65c;</span>\n                <div class=\"name\">bluetooth-b</div>\n                <div class=\"code-name\">&amp;#xe65c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe65d;</span>\n                <div class=\"name\">bitcoin</div>\n                <div class=\"code-name\">&amp;#xe65d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe65e;</span>\n                <div class=\"name\">blind</div>\n                <div class=\"code-name\">&amp;#xe65e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe65f;</span>\n                <div class=\"name\">bluetooth</div>\n                <div class=\"code-name\">&amp;#xe65f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe660;</span>\n                <div class=\"name\">bold</div>\n                <div class=\"code-name\">&amp;#xe660;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe661;</span>\n                <div class=\"name\">bolt</div>\n                <div class=\"code-name\">&amp;#xe661;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe662;</span>\n                <div class=\"name\">bomb</div>\n                <div class=\"code-name\">&amp;#xe662;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe663;</span>\n                <div class=\"name\">book</div>\n                <div class=\"code-name\">&amp;#xe663;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe664;</span>\n                <div class=\"name\">bug</div>\n                <div class=\"code-name\">&amp;#xe664;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe665;</span>\n                <div class=\"name\">bookmark-o</div>\n                <div class=\"code-name\">&amp;#xe665;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe666;</span>\n                <div class=\"name\">btc</div>\n                <div class=\"code-name\">&amp;#xe666;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe667;</span>\n                <div class=\"name\">bookmark</div>\n                <div class=\"code-name\">&amp;#xe667;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe668;</span>\n                <div class=\"name\">briefcase</div>\n                <div class=\"code-name\">&amp;#xe668;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe669;</span>\n                <div class=\"name\">braille</div>\n                <div class=\"code-name\">&amp;#xe669;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe66a;</span>\n                <div class=\"name\">bullhorn</div>\n                <div class=\"code-name\">&amp;#xe66a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe66b;</span>\n                <div class=\"name\">bullseye</div>\n                <div class=\"code-name\">&amp;#xe66b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe66c;</span>\n                <div class=\"name\">bus</div>\n                <div class=\"code-name\">&amp;#xe66c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe66d;</span>\n                <div class=\"name\">building</div>\n                <div class=\"code-name\">&amp;#xe66d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe66e;</span>\n                <div class=\"name\">cab</div>\n                <div class=\"code-name\">&amp;#xe66e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe66f;</span>\n                <div class=\"name\">buysellads</div>\n                <div class=\"code-name\">&amp;#xe66f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe670;</span>\n                <div class=\"name\">building-o</div>\n                <div class=\"code-name\">&amp;#xe670;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe671;</span>\n                <div class=\"name\">calendar-plus-o</div>\n                <div class=\"code-name\">&amp;#xe671;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe672;</span>\n                <div class=\"name\">calendar-o</div>\n                <div class=\"code-name\">&amp;#xe672;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe673;</span>\n                <div class=\"name\">calendar-times-o</div>\n                <div class=\"code-name\">&amp;#xe673;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe674;</span>\n                <div class=\"name\">calendar-check-o</div>\n                <div class=\"code-name\">&amp;#xe674;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe675;</span>\n                <div class=\"name\">calendar-minus-o</div>\n                <div class=\"code-name\">&amp;#xe675;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe676;</span>\n                <div class=\"name\">calculator</div>\n                <div class=\"code-name\">&amp;#xe676;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe677;</span>\n                <div class=\"name\">caret-down</div>\n                <div class=\"code-name\">&amp;#xe677;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe678;</span>\n                <div class=\"name\">caret-left</div>\n                <div class=\"code-name\">&amp;#xe678;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe679;</span>\n                <div class=\"name\">car</div>\n                <div class=\"code-name\">&amp;#xe679;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe67a;</span>\n                <div class=\"name\">camera-retro</div>\n                <div class=\"code-name\">&amp;#xe67a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe67b;</span>\n                <div class=\"name\">caret-right</div>\n                <div class=\"code-name\">&amp;#xe67b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe67c;</span>\n                <div class=\"name\">caret-square-o-left</div>\n                <div class=\"code-name\">&amp;#xe67c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe67d;</span>\n                <div class=\"name\">caret-square-o-right</div>\n                <div class=\"code-name\">&amp;#xe67d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe67e;</span>\n                <div class=\"name\">caret-up</div>\n                <div class=\"code-name\">&amp;#xe67e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe67f;</span>\n                <div class=\"name\">caret-square-o-up</div>\n                <div class=\"code-name\">&amp;#xe67f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe680;</span>\n                <div class=\"name\">cart-plus</div>\n                <div class=\"code-name\">&amp;#xe680;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe681;</span>\n                <div class=\"name\">cart-arrow-down</div>\n                <div class=\"code-name\">&amp;#xe681;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe682;</span>\n                <div class=\"name\">caret-square-o-down</div>\n                <div class=\"code-name\">&amp;#xe682;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe683;</span>\n                <div class=\"name\">cc-discover</div>\n                <div class=\"code-name\">&amp;#xe683;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe684;</span>\n                <div class=\"name\">cc-diners-club</div>\n                <div class=\"code-name\">&amp;#xe684;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe685;</span>\n                <div class=\"name\">cc-paypal</div>\n                <div class=\"code-name\">&amp;#xe685;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe686;</span>\n                <div class=\"name\">cc-jcb</div>\n                <div class=\"code-name\">&amp;#xe686;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe687;</span>\n                <div class=\"name\">cc-mastercard</div>\n                <div class=\"code-name\">&amp;#xe687;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe688;</span>\n                <div class=\"name\">cc-amex</div>\n                <div class=\"code-name\">&amp;#xe688;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe689;</span>\n                <div class=\"name\">cc</div>\n                <div class=\"code-name\">&amp;#xe689;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe68a;</span>\n                <div class=\"name\">cc-visa</div>\n                <div class=\"code-name\">&amp;#xe68a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe68b;</span>\n                <div class=\"name\">cc-stripe</div>\n                <div class=\"code-name\">&amp;#xe68b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe68c;</span>\n                <div class=\"name\">check</div>\n                <div class=\"code-name\">&amp;#xe68c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe68d;</span>\n                <div class=\"name\">certificate</div>\n                <div class=\"code-name\">&amp;#xe68d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe68e;</span>\n                <div class=\"name\">check-circle</div>\n                <div class=\"code-name\">&amp;#xe68e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe68f;</span>\n                <div class=\"name\">check-circle-o</div>\n                <div class=\"code-name\">&amp;#xe68f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe690;</span>\n                <div class=\"name\">chain-broken</div>\n                <div class=\"code-name\">&amp;#xe690;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe691;</span>\n                <div class=\"name\">chain</div>\n                <div class=\"code-name\">&amp;#xe691;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe692;</span>\n                <div class=\"name\">chevron-circle-down</div>\n                <div class=\"code-name\">&amp;#xe692;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe693;</span>\n                <div class=\"name\">chevron-circle-left</div>\n                <div class=\"code-name\">&amp;#xe693;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe694;</span>\n                <div class=\"name\">chevron-circle-right</div>\n                <div class=\"code-name\">&amp;#xe694;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe695;</span>\n                <div class=\"name\">chevron-down</div>\n                <div class=\"code-name\">&amp;#xe695;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe696;</span>\n                <div class=\"name\">chevron-circle-up</div>\n                <div class=\"code-name\">&amp;#xe696;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe697;</span>\n                <div class=\"name\">chevron-left</div>\n                <div class=\"code-name\">&amp;#xe697;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe698;</span>\n                <div class=\"name\">chevron-right</div>\n                <div class=\"code-name\">&amp;#xe698;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe699;</span>\n                <div class=\"name\">chevron-up</div>\n                <div class=\"code-name\">&amp;#xe699;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe69a;</span>\n                <div class=\"name\">child</div>\n                <div class=\"code-name\">&amp;#xe69a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe69b;</span>\n                <div class=\"name\">circle-thin</div>\n                <div class=\"code-name\">&amp;#xe69b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe69c;</span>\n                <div class=\"name\">circle-o-notch</div>\n                <div class=\"code-name\">&amp;#xe69c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe69d;</span>\n                <div class=\"name\">chrome</div>\n                <div class=\"code-name\">&amp;#xe69d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe69e;</span>\n                <div class=\"name\">circle-o</div>\n                <div class=\"code-name\">&amp;#xe69e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe69f;</span>\n                <div class=\"name\">clipboard</div>\n                <div class=\"code-name\">&amp;#xe69f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6a0;</span>\n                <div class=\"name\">circle</div>\n                <div class=\"code-name\">&amp;#xe6a0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6a1;</span>\n                <div class=\"name\">cloud</div>\n                <div class=\"code-name\">&amp;#xe6a1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6a2;</span>\n                <div class=\"name\">close</div>\n                <div class=\"code-name\">&amp;#xe6a2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6a3;</span>\n                <div class=\"name\">cloud-upload</div>\n                <div class=\"code-name\">&amp;#xe6a3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6a4;</span>\n                <div class=\"name\">clone</div>\n                <div class=\"code-name\">&amp;#xe6a4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6a5;</span>\n                <div class=\"name\">cloud-download</div>\n                <div class=\"code-name\">&amp;#xe6a5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6a6;</span>\n                <div class=\"name\">clock-o</div>\n                <div class=\"code-name\">&amp;#xe6a6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6a7;</span>\n                <div class=\"name\">cny</div>\n                <div class=\"code-name\">&amp;#xe6a7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6a8;</span>\n                <div class=\"name\">code-fork</div>\n                <div class=\"code-name\">&amp;#xe6a8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6a9;</span>\n                <div class=\"name\">codiepie</div>\n                <div class=\"code-name\">&amp;#xe6a9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6aa;</span>\n                <div class=\"name\">codepen</div>\n                <div class=\"code-name\">&amp;#xe6aa;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6ab;</span>\n                <div class=\"name\">code</div>\n                <div class=\"code-name\">&amp;#xe6ab;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6ac;</span>\n                <div class=\"name\">cog</div>\n                <div class=\"code-name\">&amp;#xe6ac;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6ad;</span>\n                <div class=\"name\">coffee</div>\n                <div class=\"code-name\">&amp;#xe6ad;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6ae;</span>\n                <div class=\"name\">columns</div>\n                <div class=\"code-name\">&amp;#xe6ae;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6af;</span>\n                <div class=\"name\">comment-o</div>\n                <div class=\"code-name\">&amp;#xe6af;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6b0;</span>\n                <div class=\"name\">commenting-o</div>\n                <div class=\"code-name\">&amp;#xe6b0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6b1;</span>\n                <div class=\"name\">commenting</div>\n                <div class=\"code-name\">&amp;#xe6b1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6b2;</span>\n                <div class=\"name\">comment</div>\n                <div class=\"code-name\">&amp;#xe6b2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6b3;</span>\n                <div class=\"name\">cogs</div>\n                <div class=\"code-name\">&amp;#xe6b3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6b4;</span>\n                <div class=\"name\">compass</div>\n                <div class=\"code-name\">&amp;#xe6b4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6b5;</span>\n                <div class=\"name\">compress</div>\n                <div class=\"code-name\">&amp;#xe6b5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6b6;</span>\n                <div class=\"name\">comments</div>\n                <div class=\"code-name\">&amp;#xe6b6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6b7;</span>\n                <div class=\"name\">comments-o</div>\n                <div class=\"code-name\">&amp;#xe6b7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6b8;</span>\n                <div class=\"name\">connectdevelop</div>\n                <div class=\"code-name\">&amp;#xe6b8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6b9;</span>\n                <div class=\"name\">copy</div>\n                <div class=\"code-name\">&amp;#xe6b9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6ba;</span>\n                <div class=\"name\">contao</div>\n                <div class=\"code-name\">&amp;#xe6ba;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6bb;</span>\n                <div class=\"name\">copyright</div>\n                <div class=\"code-name\">&amp;#xe6bb;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6bc;</span>\n                <div class=\"name\">credit-card-alt</div>\n                <div class=\"code-name\">&amp;#xe6bc;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6bd;</span>\n                <div class=\"name\">credit-card</div>\n                <div class=\"code-name\">&amp;#xe6bd;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6be;</span>\n                <div class=\"name\">crop</div>\n                <div class=\"code-name\">&amp;#xe6be;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6bf;</span>\n                <div class=\"name\">creative-commons</div>\n                <div class=\"code-name\">&amp;#xe6bf;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6c0;</span>\n                <div class=\"name\">crosshairs</div>\n                <div class=\"code-name\">&amp;#xe6c0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6c1;</span>\n                <div class=\"name\">css3</div>\n                <div class=\"code-name\">&amp;#xe6c1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6c2;</span>\n                <div class=\"name\">cube</div>\n                <div class=\"code-name\">&amp;#xe6c2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6c3;</span>\n                <div class=\"name\">cutlery</div>\n                <div class=\"code-name\">&amp;#xe6c3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6c4;</span>\n                <div class=\"name\">cut</div>\n                <div class=\"code-name\">&amp;#xe6c4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6c5;</span>\n                <div class=\"name\">dashboard</div>\n                <div class=\"code-name\">&amp;#xe6c5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6c6;</span>\n                <div class=\"name\">dashcube</div>\n                <div class=\"code-name\">&amp;#xe6c6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6c7;</span>\n                <div class=\"name\">cubes</div>\n                <div class=\"code-name\">&amp;#xe6c7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6c8;</span>\n                <div class=\"name\">database</div>\n                <div class=\"code-name\">&amp;#xe6c8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6c9;</span>\n                <div class=\"name\">deaf</div>\n                <div class=\"code-name\">&amp;#xe6c9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6ca;</span>\n                <div class=\"name\">delicious</div>\n                <div class=\"code-name\">&amp;#xe6ca;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6cb;</span>\n                <div class=\"name\">deviantart</div>\n                <div class=\"code-name\">&amp;#xe6cb;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6cc;</span>\n                <div class=\"name\">diamond</div>\n                <div class=\"code-name\">&amp;#xe6cc;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6cd;</span>\n                <div class=\"name\">dedent</div>\n                <div class=\"code-name\">&amp;#xe6cd;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6ce;</span>\n                <div class=\"name\">desktop</div>\n                <div class=\"code-name\">&amp;#xe6ce;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6cf;</span>\n                <div class=\"name\">deafness</div>\n                <div class=\"code-name\">&amp;#xe6cf;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6d0;</span>\n                <div class=\"name\">drivers-license-o</div>\n                <div class=\"code-name\">&amp;#xe6d0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6d1;</span>\n                <div class=\"name\">digg</div>\n                <div class=\"code-name\">&amp;#xe6d1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6d2;</span>\n                <div class=\"name\">dribbble</div>\n                <div class=\"code-name\">&amp;#xe6d2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6d3;</span>\n                <div class=\"name\">download</div>\n                <div class=\"code-name\">&amp;#xe6d3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6d4;</span>\n                <div class=\"name\">dollar</div>\n                <div class=\"code-name\">&amp;#xe6d4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6d5;</span>\n                <div class=\"name\">dot-circle-o</div>\n                <div class=\"code-name\">&amp;#xe6d5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6d6;</span>\n                <div class=\"name\">edit</div>\n                <div class=\"code-name\">&amp;#xe6d6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6d7;</span>\n                <div class=\"name\">dropbox</div>\n                <div class=\"code-name\">&amp;#xe6d7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6d8;</span>\n                <div class=\"name\">edge</div>\n                <div class=\"code-name\">&amp;#xe6d8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6d9;</span>\n                <div class=\"name\">drupal</div>\n                <div class=\"code-name\">&amp;#xe6d9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6da;</span>\n                <div class=\"name\">drivers-license</div>\n                <div class=\"code-name\">&amp;#xe6da;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6db;</span>\n                <div class=\"name\">eject</div>\n                <div class=\"code-name\">&amp;#xe6db;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6dc;</span>\n                <div class=\"name\">ellipsis-h</div>\n                <div class=\"code-name\">&amp;#xe6dc;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6dd;</span>\n                <div class=\"name\">envelope-o</div>\n                <div class=\"code-name\">&amp;#xe6dd;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6de;</span>\n                <div class=\"name\">ellipsis-v</div>\n                <div class=\"code-name\">&amp;#xe6de;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6df;</span>\n                <div class=\"name\">eercast</div>\n                <div class=\"code-name\">&amp;#xe6df;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6e0;</span>\n                <div class=\"name\">empire</div>\n                <div class=\"code-name\">&amp;#xe6e0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6e1;</span>\n                <div class=\"name\">envelope-open-o</div>\n                <div class=\"code-name\">&amp;#xe6e1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6e2;</span>\n                <div class=\"name\">envelope-open</div>\n                <div class=\"code-name\">&amp;#xe6e2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6e3;</span>\n                <div class=\"name\">envelope</div>\n                <div class=\"code-name\">&amp;#xe6e3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6e4;</span>\n                <div class=\"name\">envelope-square</div>\n                <div class=\"code-name\">&amp;#xe6e4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6e5;</span>\n                <div class=\"name\">envira</div>\n                <div class=\"code-name\">&amp;#xe6e5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6e6;</span>\n                <div class=\"name\">etsy</div>\n                <div class=\"code-name\">&amp;#xe6e6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6e7;</span>\n                <div class=\"name\">eraser</div>\n                <div class=\"code-name\">&amp;#xe6e7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6e8;</span>\n                <div class=\"name\">eur</div>\n                <div class=\"code-name\">&amp;#xe6e8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6e9;</span>\n                <div class=\"name\">euro</div>\n                <div class=\"code-name\">&amp;#xe6e9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6ea;</span>\n                <div class=\"name\">exchange</div>\n                <div class=\"code-name\">&amp;#xe6ea;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6eb;</span>\n                <div class=\"name\">exclamation-triangle</div>\n                <div class=\"code-name\">&amp;#xe6eb;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6ec;</span>\n                <div class=\"name\">expand</div>\n                <div class=\"code-name\">&amp;#xe6ec;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6ed;</span>\n                <div class=\"name\">exclamation</div>\n                <div class=\"code-name\">&amp;#xe6ed;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6ee;</span>\n                <div class=\"name\">exclamation-circle</div>\n                <div class=\"code-name\">&amp;#xe6ee;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6ef;</span>\n                <div class=\"name\">expeditedssl</div>\n                <div class=\"code-name\">&amp;#xe6ef;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6f0;</span>\n                <div class=\"name\">external-link-square</div>\n                <div class=\"code-name\">&amp;#xe6f0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6f1;</span>\n                <div class=\"name\">eyedropper</div>\n                <div class=\"code-name\">&amp;#xe6f1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6f2;</span>\n                <div class=\"name\">external-link</div>\n                <div class=\"code-name\">&amp;#xe6f2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6f3;</span>\n                <div class=\"name\">eye</div>\n                <div class=\"code-name\">&amp;#xe6f3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6f4;</span>\n                <div class=\"name\">eye-slash</div>\n                <div class=\"code-name\">&amp;#xe6f4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6f5;</span>\n                <div class=\"name\">fa</div>\n                <div class=\"code-name\">&amp;#xe6f5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6f6;</span>\n                <div class=\"name\">facebook-official</div>\n                <div class=\"code-name\">&amp;#xe6f6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6f7;</span>\n                <div class=\"name\">facebook-f</div>\n                <div class=\"code-name\">&amp;#xe6f7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6f8;</span>\n                <div class=\"name\">facebook-square</div>\n                <div class=\"code-name\">&amp;#xe6f8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6f9;</span>\n                <div class=\"name\">facebook</div>\n                <div class=\"code-name\">&amp;#xe6f9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6fa;</span>\n                <div class=\"name\">fast-backward</div>\n                <div class=\"code-name\">&amp;#xe6fa;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6fb;</span>\n                <div class=\"name\">fast-forward</div>\n                <div class=\"code-name\">&amp;#xe6fb;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6fc;</span>\n                <div class=\"name\">feed</div>\n                <div class=\"code-name\">&amp;#xe6fc;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6fd;</span>\n                <div class=\"name\">file-archive-o</div>\n                <div class=\"code-name\">&amp;#xe6fd;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6fe;</span>\n                <div class=\"name\">female</div>\n                <div class=\"code-name\">&amp;#xe6fe;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6ff;</span>\n                <div class=\"name\">file-audio-o</div>\n                <div class=\"code-name\">&amp;#xe6ff;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe700;</span>\n                <div class=\"name\">fighter-jet</div>\n                <div class=\"code-name\">&amp;#xe700;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe701;</span>\n                <div class=\"name\">fax</div>\n                <div class=\"code-name\">&amp;#xe701;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe702;</span>\n                <div class=\"name\">file-code-o</div>\n                <div class=\"code-name\">&amp;#xe702;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe703;</span>\n                <div class=\"name\">file-movie-o</div>\n                <div class=\"code-name\">&amp;#xe703;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe704;</span>\n                <div class=\"name\">file-image-o</div>\n                <div class=\"code-name\">&amp;#xe704;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe705;</span>\n                <div class=\"name\">file-excel-o</div>\n                <div class=\"code-name\">&amp;#xe705;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe706;</span>\n                <div class=\"name\">file-o</div>\n                <div class=\"code-name\">&amp;#xe706;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe707;</span>\n                <div class=\"name\">file-photo-o</div>\n                <div class=\"code-name\">&amp;#xe707;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe708;</span>\n                <div class=\"name\">file-pdf-o</div>\n                <div class=\"code-name\">&amp;#xe708;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe709;</span>\n                <div class=\"name\">file-picture-o</div>\n                <div class=\"code-name\">&amp;#xe709;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe70a;</span>\n                <div class=\"name\">file-sound-o</div>\n                <div class=\"code-name\">&amp;#xe70a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe70b;</span>\n                <div class=\"name\">file-powerpoint-o</div>\n                <div class=\"code-name\">&amp;#xe70b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe70c;</span>\n                <div class=\"name\">file-text</div>\n                <div class=\"code-name\">&amp;#xe70c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe70d;</span>\n                <div class=\"name\">file-text-o</div>\n                <div class=\"code-name\">&amp;#xe70d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe70e;</span>\n                <div class=\"name\">file</div>\n                <div class=\"code-name\">&amp;#xe70e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe70f;</span>\n                <div class=\"name\">file-video-o</div>\n                <div class=\"code-name\">&amp;#xe70f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe710;</span>\n                <div class=\"name\">files-o</div>\n                <div class=\"code-name\">&amp;#xe710;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe711;</span>\n                <div class=\"name\">file-zip-o</div>\n                <div class=\"code-name\">&amp;#xe711;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe712;</span>\n                <div class=\"name\">file-word-o</div>\n                <div class=\"code-name\">&amp;#xe712;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe713;</span>\n                <div class=\"name\">film</div>\n                <div class=\"code-name\">&amp;#xe713;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe714;</span>\n                <div class=\"name\">filter</div>\n                <div class=\"code-name\">&amp;#xe714;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe715;</span>\n                <div class=\"name\">fire</div>\n                <div class=\"code-name\">&amp;#xe715;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe716;</span>\n                <div class=\"name\">fire-extinguisher</div>\n                <div class=\"code-name\">&amp;#xe716;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe717;</span>\n                <div class=\"name\">flag-checkered</div>\n                <div class=\"code-name\">&amp;#xe717;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe718;</span>\n                <div class=\"name\">firefox</div>\n                <div class=\"code-name\">&amp;#xe718;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe719;</span>\n                <div class=\"name\">first-order</div>\n                <div class=\"code-name\">&amp;#xe719;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe71a;</span>\n                <div class=\"name\">flash</div>\n                <div class=\"code-name\">&amp;#xe71a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe71b;</span>\n                <div class=\"name\">flag</div>\n                <div class=\"code-name\">&amp;#xe71b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe71c;</span>\n                <div class=\"name\">flag-o</div>\n                <div class=\"code-name\">&amp;#xe71c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe71d;</span>\n                <div class=\"name\">flask</div>\n                <div class=\"code-name\">&amp;#xe71d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe71e;</span>\n                <div class=\"name\">flickr</div>\n                <div class=\"code-name\">&amp;#xe71e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe71f;</span>\n                <div class=\"name\">folder-open</div>\n                <div class=\"code-name\">&amp;#xe71f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe720;</span>\n                <div class=\"name\">folder-o</div>\n                <div class=\"code-name\">&amp;#xe720;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe721;</span>\n                <div class=\"name\">font-awesome</div>\n                <div class=\"code-name\">&amp;#xe721;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe722;</span>\n                <div class=\"name\">folder</div>\n                <div class=\"code-name\">&amp;#xe722;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe723;</span>\n                <div class=\"name\">floppy-o</div>\n                <div class=\"code-name\">&amp;#xe723;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe724;</span>\n                <div class=\"name\">folder-open-o</div>\n                <div class=\"code-name\">&amp;#xe724;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe725;</span>\n                <div class=\"name\">fonticons</div>\n                <div class=\"code-name\">&amp;#xe725;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe726;</span>\n                <div class=\"name\">font</div>\n                <div class=\"code-name\">&amp;#xe726;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe727;</span>\n                <div class=\"name\">forumbee</div>\n                <div class=\"code-name\">&amp;#xe727;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe728;</span>\n                <div class=\"name\">fort-awesome</div>\n                <div class=\"code-name\">&amp;#xe728;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe729;</span>\n                <div class=\"name\">forward</div>\n                <div class=\"code-name\">&amp;#xe729;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe72a;</span>\n                <div class=\"name\">foursquare</div>\n                <div class=\"code-name\">&amp;#xe72a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe72b;</span>\n                <div class=\"name\">free-code-camp</div>\n                <div class=\"code-name\">&amp;#xe72b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe72c;</span>\n                <div class=\"name\">frown-o</div>\n                <div class=\"code-name\">&amp;#xe72c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe72d;</span>\n                <div class=\"name\">futbol-o</div>\n                <div class=\"code-name\">&amp;#xe72d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe72e;</span>\n                <div class=\"name\">gamepad</div>\n                <div class=\"code-name\">&amp;#xe72e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe72f;</span>\n                <div class=\"name\">gavel</div>\n                <div class=\"code-name\">&amp;#xe72f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe730;</span>\n                <div class=\"name\">gbp</div>\n                <div class=\"code-name\">&amp;#xe730;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe731;</span>\n                <div class=\"name\">ge</div>\n                <div class=\"code-name\">&amp;#xe731;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe732;</span>\n                <div class=\"name\">gear</div>\n                <div class=\"code-name\">&amp;#xe732;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe733;</span>\n                <div class=\"name\">gears</div>\n                <div class=\"code-name\">&amp;#xe733;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe734;</span>\n                <div class=\"name\">genderless</div>\n                <div class=\"code-name\">&amp;#xe734;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe735;</span>\n                <div class=\"name\">get-pocket</div>\n                <div class=\"code-name\">&amp;#xe735;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe736;</span>\n                <div class=\"name\">gg-circle</div>\n                <div class=\"code-name\">&amp;#xe736;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe737;</span>\n                <div class=\"name\">gift</div>\n                <div class=\"code-name\">&amp;#xe737;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe738;</span>\n                <div class=\"name\">gg</div>\n                <div class=\"code-name\">&amp;#xe738;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe739;</span>\n                <div class=\"name\">git-square</div>\n                <div class=\"code-name\">&amp;#xe739;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe73a;</span>\n                <div class=\"name\">git</div>\n                <div class=\"code-name\">&amp;#xe73a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe73b;</span>\n                <div class=\"name\">github-alt</div>\n                <div class=\"code-name\">&amp;#xe73b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe73c;</span>\n                <div class=\"name\">github-square</div>\n                <div class=\"code-name\">&amp;#xe73c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe73d;</span>\n                <div class=\"name\">github</div>\n                <div class=\"code-name\">&amp;#xe73d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe73e;</span>\n                <div class=\"name\">gitlab</div>\n                <div class=\"code-name\">&amp;#xe73e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe73f;</span>\n                <div class=\"name\">gittip</div>\n                <div class=\"code-name\">&amp;#xe73f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe740;</span>\n                <div class=\"name\">glass</div>\n                <div class=\"code-name\">&amp;#xe740;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe741;</span>\n                <div class=\"name\">glide-g</div>\n                <div class=\"code-name\">&amp;#xe741;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe742;</span>\n                <div class=\"name\">glide</div>\n                <div class=\"code-name\">&amp;#xe742;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe743;</span>\n                <div class=\"name\">globe</div>\n                <div class=\"code-name\">&amp;#xe743;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe744;</span>\n                <div class=\"name\">google-plus-circle</div>\n                <div class=\"code-name\">&amp;#xe744;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe745;</span>\n                <div class=\"name\">google-plus-official</div>\n                <div class=\"code-name\">&amp;#xe745;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe746;</span>\n                <div class=\"name\">google-plus-square</div>\n                <div class=\"code-name\">&amp;#xe746;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe747;</span>\n                <div class=\"name\">google-plus</div>\n                <div class=\"code-name\">&amp;#xe747;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe748;</span>\n                <div class=\"name\">google-wallet</div>\n                <div class=\"code-name\">&amp;#xe748;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe749;</span>\n                <div class=\"name\">google</div>\n                <div class=\"code-name\">&amp;#xe749;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe74a;</span>\n                <div class=\"name\">graduation-cap</div>\n                <div class=\"code-name\">&amp;#xe74a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe74b;</span>\n                <div class=\"name\">gratipay</div>\n                <div class=\"code-name\">&amp;#xe74b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe74c;</span>\n                <div class=\"name\">grav</div>\n                <div class=\"code-name\">&amp;#xe74c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe74d;</span>\n                <div class=\"name\">group</div>\n                <div class=\"code-name\">&amp;#xe74d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe74e;</span>\n                <div class=\"name\">h-square</div>\n                <div class=\"code-name\">&amp;#xe74e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe74f;</span>\n                <div class=\"name\">hacker-news</div>\n                <div class=\"code-name\">&amp;#xe74f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe750;</span>\n                <div class=\"name\">hand-grab-o</div>\n                <div class=\"code-name\">&amp;#xe750;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe751;</span>\n                <div class=\"name\">hand-o-left</div>\n                <div class=\"code-name\">&amp;#xe751;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe752;</span>\n                <div class=\"name\">hand-lizard-o</div>\n                <div class=\"code-name\">&amp;#xe752;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe753;</span>\n                <div class=\"name\">hand-o-down</div>\n                <div class=\"code-name\">&amp;#xe753;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe754;</span>\n                <div class=\"name\">hand-o-right</div>\n                <div class=\"code-name\">&amp;#xe754;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe755;</span>\n                <div class=\"name\">hand-o-up</div>\n                <div class=\"code-name\">&amp;#xe755;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe756;</span>\n                <div class=\"name\">hand-paper-o</div>\n                <div class=\"code-name\">&amp;#xe756;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe757;</span>\n                <div class=\"name\">hand-pointer-o</div>\n                <div class=\"code-name\">&amp;#xe757;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe758;</span>\n                <div class=\"name\">hand-peace-o</div>\n                <div class=\"code-name\">&amp;#xe758;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe759;</span>\n                <div class=\"name\">hand-spock-o</div>\n                <div class=\"code-name\">&amp;#xe759;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe75a;</span>\n                <div class=\"name\">hand-rock-o</div>\n                <div class=\"code-name\">&amp;#xe75a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe75b;</span>\n                <div class=\"name\">hand-scissors-o</div>\n                <div class=\"code-name\">&amp;#xe75b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe75c;</span>\n                <div class=\"name\">hand-stop-o</div>\n                <div class=\"code-name\">&amp;#xe75c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe75d;</span>\n                <div class=\"name\">hard-of-hearing</div>\n                <div class=\"code-name\">&amp;#xe75d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe75e;</span>\n                <div class=\"name\">handshake-o</div>\n                <div class=\"code-name\">&amp;#xe75e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe75f;</span>\n                <div class=\"name\">hashtag</div>\n                <div class=\"code-name\">&amp;#xe75f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe760;</span>\n                <div class=\"name\">headphones</div>\n                <div class=\"code-name\">&amp;#xe760;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe761;</span>\n                <div class=\"name\">header</div>\n                <div class=\"code-name\">&amp;#xe761;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe762;</span>\n                <div class=\"name\">hdd-o</div>\n                <div class=\"code-name\">&amp;#xe762;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe763;</span>\n                <div class=\"name\">heart-o</div>\n                <div class=\"code-name\">&amp;#xe763;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe764;</span>\n                <div class=\"name\">heart</div>\n                <div class=\"code-name\">&amp;#xe764;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe765;</span>\n                <div class=\"name\">hotel</div>\n                <div class=\"code-name\">&amp;#xe765;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe766;</span>\n                <div class=\"name\">heartbeat</div>\n                <div class=\"code-name\">&amp;#xe766;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe767;</span>\n                <div class=\"name\">hourglass-1</div>\n                <div class=\"code-name\">&amp;#xe767;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe768;</span>\n                <div class=\"name\">home</div>\n                <div class=\"code-name\">&amp;#xe768;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe769;</span>\n                <div class=\"name\">history</div>\n                <div class=\"code-name\">&amp;#xe769;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe76a;</span>\n                <div class=\"name\">hourglass-2</div>\n                <div class=\"code-name\">&amp;#xe76a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe76b;</span>\n                <div class=\"name\">hospital-o</div>\n                <div class=\"code-name\">&amp;#xe76b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe76c;</span>\n                <div class=\"name\">hourglass-3</div>\n                <div class=\"code-name\">&amp;#xe76c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe76d;</span>\n                <div class=\"name\">hourglass-half</div>\n                <div class=\"code-name\">&amp;#xe76d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe76e;</span>\n                <div class=\"name\">hourglass-end</div>\n                <div class=\"code-name\">&amp;#xe76e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe76f;</span>\n                <div class=\"name\">hourglass-o</div>\n                <div class=\"code-name\">&amp;#xe76f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe770;</span>\n                <div class=\"name\">hourglass-start</div>\n                <div class=\"code-name\">&amp;#xe770;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe771;</span>\n                <div class=\"name\">houzz</div>\n                <div class=\"code-name\">&amp;#xe771;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe772;</span>\n                <div class=\"name\">html5</div>\n                <div class=\"code-name\">&amp;#xe772;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe773;</span>\n                <div class=\"name\">hourglass</div>\n                <div class=\"code-name\">&amp;#xe773;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe774;</span>\n                <div class=\"name\">id-badge</div>\n                <div class=\"code-name\">&amp;#xe774;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe775;</span>\n                <div class=\"name\">i-cursor</div>\n                <div class=\"code-name\">&amp;#xe775;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe776;</span>\n                <div class=\"name\">id-card</div>\n                <div class=\"code-name\">&amp;#xe776;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe777;</span>\n                <div class=\"name\">ils</div>\n                <div class=\"code-name\">&amp;#xe777;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe778;</span>\n                <div class=\"name\">id-card-o</div>\n                <div class=\"code-name\">&amp;#xe778;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe779;</span>\n                <div class=\"name\">image</div>\n                <div class=\"code-name\">&amp;#xe779;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe77a;</span>\n                <div class=\"name\">inbox</div>\n                <div class=\"code-name\">&amp;#xe77a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe77b;</span>\n                <div class=\"name\">indent</div>\n                <div class=\"code-name\">&amp;#xe77b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe77c;</span>\n                <div class=\"name\">industry</div>\n                <div class=\"code-name\">&amp;#xe77c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe77d;</span>\n                <div class=\"name\">imdb</div>\n                <div class=\"code-name\">&amp;#xe77d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe77e;</span>\n                <div class=\"name\">info</div>\n                <div class=\"code-name\">&amp;#xe77e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe77f;</span>\n                <div class=\"name\">institution</div>\n                <div class=\"code-name\">&amp;#xe77f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe780;</span>\n                <div class=\"name\">info-circle</div>\n                <div class=\"code-name\">&amp;#xe780;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe781;</span>\n                <div class=\"name\">internet-explorer</div>\n                <div class=\"code-name\">&amp;#xe781;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe782;</span>\n                <div class=\"name\">inr</div>\n                <div class=\"code-name\">&amp;#xe782;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe783;</span>\n                <div class=\"name\">instagram</div>\n                <div class=\"code-name\">&amp;#xe783;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe784;</span>\n                <div class=\"name\">ioxhost</div>\n                <div class=\"code-name\">&amp;#xe784;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe785;</span>\n                <div class=\"name\">joomla</div>\n                <div class=\"code-name\">&amp;#xe785;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe786;</span>\n                <div class=\"name\">jpy</div>\n                <div class=\"code-name\">&amp;#xe786;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe787;</span>\n                <div class=\"name\">intersex</div>\n                <div class=\"code-name\">&amp;#xe787;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe788;</span>\n                <div class=\"name\">jsfiddle</div>\n                <div class=\"code-name\">&amp;#xe788;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe789;</span>\n                <div class=\"name\">italic</div>\n                <div class=\"code-name\">&amp;#xe789;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe78a;</span>\n                <div class=\"name\">key</div>\n                <div class=\"code-name\">&amp;#xe78a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe78b;</span>\n                <div class=\"name\">keyboard-o</div>\n                <div class=\"code-name\">&amp;#xe78b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe78c;</span>\n                <div class=\"name\">krw</div>\n                <div class=\"code-name\">&amp;#xe78c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe78d;</span>\n                <div class=\"name\">laptop</div>\n                <div class=\"code-name\">&amp;#xe78d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe78e;</span>\n                <div class=\"name\">language</div>\n                <div class=\"code-name\">&amp;#xe78e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe78f;</span>\n                <div class=\"name\">leaf</div>\n                <div class=\"code-name\">&amp;#xe78f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe790;</span>\n                <div class=\"name\">lastfm</div>\n                <div class=\"code-name\">&amp;#xe790;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe791;</span>\n                <div class=\"name\">lastfm-square</div>\n                <div class=\"code-name\">&amp;#xe791;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe792;</span>\n                <div class=\"name\">legal</div>\n                <div class=\"code-name\">&amp;#xe792;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe793;</span>\n                <div class=\"name\">leanpub</div>\n                <div class=\"code-name\">&amp;#xe793;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe794;</span>\n                <div class=\"name\">level-down</div>\n                <div class=\"code-name\">&amp;#xe794;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe795;</span>\n                <div class=\"name\">level-up</div>\n                <div class=\"code-name\">&amp;#xe795;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe796;</span>\n                <div class=\"name\">life-ring</div>\n                <div class=\"code-name\">&amp;#xe796;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe797;</span>\n                <div class=\"name\">life-buoy</div>\n                <div class=\"code-name\">&amp;#xe797;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe798;</span>\n                <div class=\"name\">life-bouy</div>\n                <div class=\"code-name\">&amp;#xe798;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe799;</span>\n                <div class=\"name\">lemon-o</div>\n                <div class=\"code-name\">&amp;#xe799;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe79a;</span>\n                <div class=\"name\">lightbulb-o</div>\n                <div class=\"code-name\">&amp;#xe79a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe79b;</span>\n                <div class=\"name\">life-saver</div>\n                <div class=\"code-name\">&amp;#xe79b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe79c;</span>\n                <div class=\"name\">line-chart</div>\n                <div class=\"code-name\">&amp;#xe79c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe79d;</span>\n                <div class=\"name\">linkedin</div>\n                <div class=\"code-name\">&amp;#xe79d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe79e;</span>\n                <div class=\"name\">linkedin-square</div>\n                <div class=\"code-name\">&amp;#xe79e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe79f;</span>\n                <div class=\"name\">link</div>\n                <div class=\"code-name\">&amp;#xe79f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7a0;</span>\n                <div class=\"name\">linode</div>\n                <div class=\"code-name\">&amp;#xe7a0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7a1;</span>\n                <div class=\"name\">list</div>\n                <div class=\"code-name\">&amp;#xe7a1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7a2;</span>\n                <div class=\"name\">list-ul</div>\n                <div class=\"code-name\">&amp;#xe7a2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7a3;</span>\n                <div class=\"name\">linux</div>\n                <div class=\"code-name\">&amp;#xe7a3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7a4;</span>\n                <div class=\"name\">list-ol</div>\n                <div class=\"code-name\">&amp;#xe7a4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7a5;</span>\n                <div class=\"name\">list-alt</div>\n                <div class=\"code-name\">&amp;#xe7a5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7a6;</span>\n                <div class=\"name\">location-arrow</div>\n                <div class=\"code-name\">&amp;#xe7a6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7a7;</span>\n                <div class=\"name\">lock</div>\n                <div class=\"code-name\">&amp;#xe7a7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7a8;</span>\n                <div class=\"name\">long-arrow-up</div>\n                <div class=\"code-name\">&amp;#xe7a8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7a9;</span>\n                <div class=\"name\">long-arrow-right</div>\n                <div class=\"code-name\">&amp;#xe7a9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7aa;</span>\n                <div class=\"name\">long-arrow-left</div>\n                <div class=\"code-name\">&amp;#xe7aa;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ab;</span>\n                <div class=\"name\">long-arrow-down</div>\n                <div class=\"code-name\">&amp;#xe7ab;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ac;</span>\n                <div class=\"name\">magic</div>\n                <div class=\"code-name\">&amp;#xe7ac;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ad;</span>\n                <div class=\"name\">magnet</div>\n                <div class=\"code-name\">&amp;#xe7ad;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ae;</span>\n                <div class=\"name\">low-vision</div>\n                <div class=\"code-name\">&amp;#xe7ae;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7af;</span>\n                <div class=\"name\">mail-reply-all</div>\n                <div class=\"code-name\">&amp;#xe7af;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7b0;</span>\n                <div class=\"name\">mail-reply</div>\n                <div class=\"code-name\">&amp;#xe7b0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7b1;</span>\n                <div class=\"name\">mail-forward</div>\n                <div class=\"code-name\">&amp;#xe7b1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7b2;</span>\n                <div class=\"name\">male</div>\n                <div class=\"code-name\">&amp;#xe7b2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7b3;</span>\n                <div class=\"name\">map-pin</div>\n                <div class=\"code-name\">&amp;#xe7b3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7b4;</span>\n                <div class=\"name\">map-o</div>\n                <div class=\"code-name\">&amp;#xe7b4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7b5;</span>\n                <div class=\"name\">map-marker</div>\n                <div class=\"code-name\">&amp;#xe7b5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7b6;</span>\n                <div class=\"name\">map</div>\n                <div class=\"code-name\">&amp;#xe7b6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7b7;</span>\n                <div class=\"name\">map-signs</div>\n                <div class=\"code-name\">&amp;#xe7b7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7b8;</span>\n                <div class=\"name\">mars-stroke-h</div>\n                <div class=\"code-name\">&amp;#xe7b8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7b9;</span>\n                <div class=\"name\">mars-stroke</div>\n                <div class=\"code-name\">&amp;#xe7b9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ba;</span>\n                <div class=\"name\">mars-stroke-v</div>\n                <div class=\"code-name\">&amp;#xe7ba;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7bb;</span>\n                <div class=\"name\">mars-double</div>\n                <div class=\"code-name\">&amp;#xe7bb;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7bc;</span>\n                <div class=\"name\">mars</div>\n                <div class=\"code-name\">&amp;#xe7bc;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7bd;</span>\n                <div class=\"name\">maxcdn</div>\n                <div class=\"code-name\">&amp;#xe7bd;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7be;</span>\n                <div class=\"name\">medium</div>\n                <div class=\"code-name\">&amp;#xe7be;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7bf;</span>\n                <div class=\"name\">medkit</div>\n                <div class=\"code-name\">&amp;#xe7bf;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7c0;</span>\n                <div class=\"name\">meanpath</div>\n                <div class=\"code-name\">&amp;#xe7c0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7c1;</span>\n                <div class=\"name\">meetup</div>\n                <div class=\"code-name\">&amp;#xe7c1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7c2;</span>\n                <div class=\"name\">meh-o</div>\n                <div class=\"code-name\">&amp;#xe7c2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7c3;</span>\n                <div class=\"name\">mercury</div>\n                <div class=\"code-name\">&amp;#xe7c3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7c4;</span>\n                <div class=\"name\">microphone</div>\n                <div class=\"code-name\">&amp;#xe7c4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7c5;</span>\n                <div class=\"name\">minus-circle</div>\n                <div class=\"code-name\">&amp;#xe7c5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7c6;</span>\n                <div class=\"name\">minus-square</div>\n                <div class=\"code-name\">&amp;#xe7c6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7c7;</span>\n                <div class=\"name\">minus-square-o</div>\n                <div class=\"code-name\">&amp;#xe7c7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7c8;</span>\n                <div class=\"name\">microchip</div>\n                <div class=\"code-name\">&amp;#xe7c8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7c9;</span>\n                <div class=\"name\">microphone-slash</div>\n                <div class=\"code-name\">&amp;#xe7c9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ca;</span>\n                <div class=\"name\">minus</div>\n                <div class=\"code-name\">&amp;#xe7ca;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7cb;</span>\n                <div class=\"name\">mixcloud</div>\n                <div class=\"code-name\">&amp;#xe7cb;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7cc;</span>\n                <div class=\"name\">mobile</div>\n                <div class=\"code-name\">&amp;#xe7cc;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7cd;</span>\n                <div class=\"name\">modx</div>\n                <div class=\"code-name\">&amp;#xe7cd;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ce;</span>\n                <div class=\"name\">money</div>\n                <div class=\"code-name\">&amp;#xe7ce;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7cf;</span>\n                <div class=\"name\">moon-o</div>\n                <div class=\"code-name\">&amp;#xe7cf;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7d0;</span>\n                <div class=\"name\">motorcycle</div>\n                <div class=\"code-name\">&amp;#xe7d0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7d1;</span>\n                <div class=\"name\">mouse-pointer</div>\n                <div class=\"code-name\">&amp;#xe7d1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7d2;</span>\n                <div class=\"name\">mortar-board</div>\n                <div class=\"code-name\">&amp;#xe7d2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7d3;</span>\n                <div class=\"name\">navicon</div>\n                <div class=\"code-name\">&amp;#xe7d3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7d4;</span>\n                <div class=\"name\">neuter</div>\n                <div class=\"code-name\">&amp;#xe7d4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7d5;</span>\n                <div class=\"name\">music</div>\n                <div class=\"code-name\">&amp;#xe7d5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7d6;</span>\n                <div class=\"name\">object-group</div>\n                <div class=\"code-name\">&amp;#xe7d6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7d7;</span>\n                <div class=\"name\">newspaper-o</div>\n                <div class=\"code-name\">&amp;#xe7d7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7d8;</span>\n                <div class=\"name\">object-ungroup</div>\n                <div class=\"code-name\">&amp;#xe7d8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7d9;</span>\n                <div class=\"name\">odnoklassniki-square</div>\n                <div class=\"code-name\">&amp;#xe7d9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7da;</span>\n                <div class=\"name\">odnoklassniki</div>\n                <div class=\"code-name\">&amp;#xe7da;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7db;</span>\n                <div class=\"name\">opencart</div>\n                <div class=\"code-name\">&amp;#xe7db;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7dc;</span>\n                <div class=\"name\">openid</div>\n                <div class=\"code-name\">&amp;#xe7dc;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7dd;</span>\n                <div class=\"name\">opera</div>\n                <div class=\"code-name\">&amp;#xe7dd;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7de;</span>\n                <div class=\"name\">paper-plane-o</div>\n                <div class=\"code-name\">&amp;#xe7de;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7df;</span>\n                <div class=\"name\">pagelines</div>\n                <div class=\"code-name\">&amp;#xe7df;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7e0;</span>\n                <div class=\"name\">outdent</div>\n                <div class=\"code-name\">&amp;#xe7e0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7e1;</span>\n                <div class=\"name\">paper-plane</div>\n                <div class=\"code-name\">&amp;#xe7e1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7e2;</span>\n                <div class=\"name\">paint-brush</div>\n                <div class=\"code-name\">&amp;#xe7e2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7e3;</span>\n                <div class=\"name\">paragraph</div>\n                <div class=\"code-name\">&amp;#xe7e3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7e4;</span>\n                <div class=\"name\">paperclip</div>\n                <div class=\"code-name\">&amp;#xe7e4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7e5;</span>\n                <div class=\"name\">optin-monster</div>\n                <div class=\"code-name\">&amp;#xe7e5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7e6;</span>\n                <div class=\"name\">pause-circle-o</div>\n                <div class=\"code-name\">&amp;#xe7e6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7e7;</span>\n                <div class=\"name\">paste</div>\n                <div class=\"code-name\">&amp;#xe7e7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7e8;</span>\n                <div class=\"name\">pause</div>\n                <div class=\"code-name\">&amp;#xe7e8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7e9;</span>\n                <div class=\"name\">pause-circle</div>\n                <div class=\"code-name\">&amp;#xe7e9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ea;</span>\n                <div class=\"name\">paw</div>\n                <div class=\"code-name\">&amp;#xe7ea;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7eb;</span>\n                <div class=\"name\">paypal</div>\n                <div class=\"code-name\">&amp;#xe7eb;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ec;</span>\n                <div class=\"name\">pencil-square-o</div>\n                <div class=\"code-name\">&amp;#xe7ec;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ed;</span>\n                <div class=\"name\">percent</div>\n                <div class=\"code-name\">&amp;#xe7ed;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ee;</span>\n                <div class=\"name\">pencil-square</div>\n                <div class=\"code-name\">&amp;#xe7ee;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ef;</span>\n                <div class=\"name\">pencil</div>\n                <div class=\"code-name\">&amp;#xe7ef;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7f0;</span>\n                <div class=\"name\">phone-square</div>\n                <div class=\"code-name\">&amp;#xe7f0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7f1;</span>\n                <div class=\"name\">phone</div>\n                <div class=\"code-name\">&amp;#xe7f1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7f2;</span>\n                <div class=\"name\">photo</div>\n                <div class=\"code-name\">&amp;#xe7f2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7f3;</span>\n                <div class=\"name\">picture-o</div>\n                <div class=\"code-name\">&amp;#xe7f3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7f4;</span>\n                <div class=\"name\">pie-chart</div>\n                <div class=\"code-name\">&amp;#xe7f4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7f5;</span>\n                <div class=\"name\">pied-piper-pp</div>\n                <div class=\"code-name\">&amp;#xe7f5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7f6;</span>\n                <div class=\"name\">pied-piper-alt</div>\n                <div class=\"code-name\">&amp;#xe7f6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7f7;</span>\n                <div class=\"name\">pinterest-p</div>\n                <div class=\"code-name\">&amp;#xe7f7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7f8;</span>\n                <div class=\"name\">plane</div>\n                <div class=\"code-name\">&amp;#xe7f8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7f9;</span>\n                <div class=\"name\">play-circle-o</div>\n                <div class=\"code-name\">&amp;#xe7f9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7fa;</span>\n                <div class=\"name\">pied-piper</div>\n                <div class=\"code-name\">&amp;#xe7fa;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7fb;</span>\n                <div class=\"name\">pinterest</div>\n                <div class=\"code-name\">&amp;#xe7fb;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7fc;</span>\n                <div class=\"name\">pinterest-square</div>\n                <div class=\"code-name\">&amp;#xe7fc;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7fd;</span>\n                <div class=\"name\">play</div>\n                <div class=\"code-name\">&amp;#xe7fd;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7fe;</span>\n                <div class=\"name\">play-circle</div>\n                <div class=\"code-name\">&amp;#xe7fe;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ff;</span>\n                <div class=\"name\">plug</div>\n                <div class=\"code-name\">&amp;#xe7ff;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe800;</span>\n                <div class=\"name\">plus-square-o</div>\n                <div class=\"code-name\">&amp;#xe800;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe801;</span>\n                <div class=\"name\">plus-square</div>\n                <div class=\"code-name\">&amp;#xe801;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe802;</span>\n                <div class=\"name\">plus-circle</div>\n                <div class=\"code-name\">&amp;#xe802;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe803;</span>\n                <div class=\"name\">plus</div>\n                <div class=\"code-name\">&amp;#xe803;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe804;</span>\n                <div class=\"name\">product-hunt</div>\n                <div class=\"code-name\">&amp;#xe804;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe805;</span>\n                <div class=\"name\">print</div>\n                <div class=\"code-name\">&amp;#xe805;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe806;</span>\n                <div class=\"name\">puzzle-piece</div>\n                <div class=\"code-name\">&amp;#xe806;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe807;</span>\n                <div class=\"name\">podcast</div>\n                <div class=\"code-name\">&amp;#xe807;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe808;</span>\n                <div class=\"name\">power-off</div>\n                <div class=\"code-name\">&amp;#xe808;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe809;</span>\n                <div class=\"name\">qq</div>\n                <div class=\"code-name\">&amp;#xe809;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe80a;</span>\n                <div class=\"name\">question</div>\n                <div class=\"code-name\">&amp;#xe80a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe80b;</span>\n                <div class=\"name\">qrcode</div>\n                <div class=\"code-name\">&amp;#xe80b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe80c;</span>\n                <div class=\"name\">quora</div>\n                <div class=\"code-name\">&amp;#xe80c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe80d;</span>\n                <div class=\"name\">question-circle-o</div>\n                <div class=\"code-name\">&amp;#xe80d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe80e;</span>\n                <div class=\"name\">question-circle</div>\n                <div class=\"code-name\">&amp;#xe80e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe80f;</span>\n                <div class=\"name\">quote-left</div>\n                <div class=\"code-name\">&amp;#xe80f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe810;</span>\n                <div class=\"name\">quote-right</div>\n                <div class=\"code-name\">&amp;#xe810;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe811;</span>\n                <div class=\"name\">ra</div>\n                <div class=\"code-name\">&amp;#xe811;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe812;</span>\n                <div class=\"name\">ravelry</div>\n                <div class=\"code-name\">&amp;#xe812;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe813;</span>\n                <div class=\"name\">rebel</div>\n                <div class=\"code-name\">&amp;#xe813;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe814;</span>\n                <div class=\"name\">random</div>\n                <div class=\"code-name\">&amp;#xe814;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe815;</span>\n                <div class=\"name\">reddit-square</div>\n                <div class=\"code-name\">&amp;#xe815;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe816;</span>\n                <div class=\"name\">reddit-alien</div>\n                <div class=\"code-name\">&amp;#xe816;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe817;</span>\n                <div class=\"name\">recycle</div>\n                <div class=\"code-name\">&amp;#xe817;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe818;</span>\n                <div class=\"name\">reddit</div>\n                <div class=\"code-name\">&amp;#xe818;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe819;</span>\n                <div class=\"name\">registered</div>\n                <div class=\"code-name\">&amp;#xe819;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe81a;</span>\n                <div class=\"name\">refresh</div>\n                <div class=\"code-name\">&amp;#xe81a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe81b;</span>\n                <div class=\"name\">renren</div>\n                <div class=\"code-name\">&amp;#xe81b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe81c;</span>\n                <div class=\"name\">reorder</div>\n                <div class=\"code-name\">&amp;#xe81c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe81d;</span>\n                <div class=\"name\">repeat</div>\n                <div class=\"code-name\">&amp;#xe81d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe81e;</span>\n                <div class=\"name\">reply-all</div>\n                <div class=\"code-name\">&amp;#xe81e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe81f;</span>\n                <div class=\"name\">remove</div>\n                <div class=\"code-name\">&amp;#xe81f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe820;</span>\n                <div class=\"name\">rmb</div>\n                <div class=\"code-name\">&amp;#xe820;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe821;</span>\n                <div class=\"name\">resistance</div>\n                <div class=\"code-name\">&amp;#xe821;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe822;</span>\n                <div class=\"name\">road</div>\n                <div class=\"code-name\">&amp;#xe822;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe823;</span>\n                <div class=\"name\">retweet</div>\n                <div class=\"code-name\">&amp;#xe823;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe824;</span>\n                <div class=\"name\">reply</div>\n                <div class=\"code-name\">&amp;#xe824;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe825;</span>\n                <div class=\"name\">rocket</div>\n                <div class=\"code-name\">&amp;#xe825;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe826;</span>\n                <div class=\"name\">rotate-left</div>\n                <div class=\"code-name\">&amp;#xe826;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe827;</span>\n                <div class=\"name\">rouble</div>\n                <div class=\"code-name\">&amp;#xe827;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe828;</span>\n                <div class=\"name\">rotate-right</div>\n                <div class=\"code-name\">&amp;#xe828;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe829;</span>\n                <div class=\"name\">rss</div>\n                <div class=\"code-name\">&amp;#xe829;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe82a;</span>\n                <div class=\"name\">rss-square</div>\n                <div class=\"code-name\">&amp;#xe82a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe82b;</span>\n                <div class=\"name\">ruble</div>\n                <div class=\"code-name\">&amp;#xe82b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe82c;</span>\n                <div class=\"name\">rub</div>\n                <div class=\"code-name\">&amp;#xe82c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe82d;</span>\n                <div class=\"name\">s15</div>\n                <div class=\"code-name\">&amp;#xe82d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe82e;</span>\n                <div class=\"name\">save</div>\n                <div class=\"code-name\">&amp;#xe82e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe82f;</span>\n                <div class=\"name\">rupee</div>\n                <div class=\"code-name\">&amp;#xe82f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe830;</span>\n                <div class=\"name\">safari</div>\n                <div class=\"code-name\">&amp;#xe830;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe831;</span>\n                <div class=\"name\">scissors</div>\n                <div class=\"code-name\">&amp;#xe831;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe832;</span>\n                <div class=\"name\">scribd</div>\n                <div class=\"code-name\">&amp;#xe832;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe833;</span>\n                <div class=\"name\">search-plus</div>\n                <div class=\"code-name\">&amp;#xe833;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe834;</span>\n                <div class=\"name\">search</div>\n                <div class=\"code-name\">&amp;#xe834;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe835;</span>\n                <div class=\"name\">sellsy</div>\n                <div class=\"code-name\">&amp;#xe835;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe836;</span>\n                <div class=\"name\">send</div>\n                <div class=\"code-name\">&amp;#xe836;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe837;</span>\n                <div class=\"name\">send-o</div>\n                <div class=\"code-name\">&amp;#xe837;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe838;</span>\n                <div class=\"name\">search-minus</div>\n                <div class=\"code-name\">&amp;#xe838;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe839;</span>\n                <div class=\"name\">server</div>\n                <div class=\"code-name\">&amp;#xe839;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe83a;</span>\n                <div class=\"name\">share-alt-square</div>\n                <div class=\"code-name\">&amp;#xe83a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe83b;</span>\n                <div class=\"name\">share-alt</div>\n                <div class=\"code-name\">&amp;#xe83b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe83c;</span>\n                <div class=\"name\">share-square-o</div>\n                <div class=\"code-name\">&amp;#xe83c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe83d;</span>\n                <div class=\"name\">share</div>\n                <div class=\"code-name\">&amp;#xe83d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe83e;</span>\n                <div class=\"name\">share-square</div>\n                <div class=\"code-name\">&amp;#xe83e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe83f;</span>\n                <div class=\"name\">shekel</div>\n                <div class=\"code-name\">&amp;#xe83f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe840;</span>\n                <div class=\"name\">sheqel</div>\n                <div class=\"code-name\">&amp;#xe840;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe841;</span>\n                <div class=\"name\">shield</div>\n                <div class=\"code-name\">&amp;#xe841;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe842;</span>\n                <div class=\"name\">ship</div>\n                <div class=\"code-name\">&amp;#xe842;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe843;</span>\n                <div class=\"name\">shirtsinbulk</div>\n                <div class=\"code-name\">&amp;#xe843;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe844;</span>\n                <div class=\"name\">shower</div>\n                <div class=\"code-name\">&amp;#xe844;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe845;</span>\n                <div class=\"name\">sign-in</div>\n                <div class=\"code-name\">&amp;#xe845;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe846;</span>\n                <div class=\"name\">shopping-basket</div>\n                <div class=\"code-name\">&amp;#xe846;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe847;</span>\n                <div class=\"name\">shopping-cart</div>\n                <div class=\"code-name\">&amp;#xe847;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe848;</span>\n                <div class=\"name\">shopping-bag</div>\n                <div class=\"code-name\">&amp;#xe848;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe849;</span>\n                <div class=\"name\">sign-language</div>\n                <div class=\"code-name\">&amp;#xe849;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe84a;</span>\n                <div class=\"name\">sign-out</div>\n                <div class=\"code-name\">&amp;#xe84a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe84b;</span>\n                <div class=\"name\">signal</div>\n                <div class=\"code-name\">&amp;#xe84b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe84c;</span>\n                <div class=\"name\">simplybuilt</div>\n                <div class=\"code-name\">&amp;#xe84c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe84d;</span>\n                <div class=\"name\">sitemap</div>\n                <div class=\"code-name\">&amp;#xe84d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe84e;</span>\n                <div class=\"name\">signing</div>\n                <div class=\"code-name\">&amp;#xe84e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe84f;</span>\n                <div class=\"name\">sliders</div>\n                <div class=\"code-name\">&amp;#xe84f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe850;</span>\n                <div class=\"name\">skype</div>\n                <div class=\"code-name\">&amp;#xe850;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe851;</span>\n                <div class=\"name\">skyatlas</div>\n                <div class=\"code-name\">&amp;#xe851;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe852;</span>\n                <div class=\"name\">slack</div>\n                <div class=\"code-name\">&amp;#xe852;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe853;</span>\n                <div class=\"name\">slideshare</div>\n                <div class=\"code-name\">&amp;#xe853;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe854;</span>\n                <div class=\"name\">snapchat-square</div>\n                <div class=\"code-name\">&amp;#xe854;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe855;</span>\n                <div class=\"name\">snapchat-ghost</div>\n                <div class=\"code-name\">&amp;#xe855;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe856;</span>\n                <div class=\"name\">smile-o</div>\n                <div class=\"code-name\">&amp;#xe856;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe857;</span>\n                <div class=\"name\">snapchat</div>\n                <div class=\"code-name\">&amp;#xe857;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe858;</span>\n                <div class=\"name\">snowflake-o</div>\n                <div class=\"code-name\">&amp;#xe858;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe859;</span>\n                <div class=\"name\">soccer-ball-o</div>\n                <div class=\"code-name\">&amp;#xe859;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe85a;</span>\n                <div class=\"name\">sort-alpha-asc</div>\n                <div class=\"code-name\">&amp;#xe85a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe85b;</span>\n                <div class=\"name\">sort-alpha-desc</div>\n                <div class=\"code-name\">&amp;#xe85b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe85c;</span>\n                <div class=\"name\">sort-amount-asc</div>\n                <div class=\"code-name\">&amp;#xe85c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe85d;</span>\n                <div class=\"name\">sort-desc</div>\n                <div class=\"code-name\">&amp;#xe85d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe85e;</span>\n                <div class=\"name\">sort-down</div>\n                <div class=\"code-name\">&amp;#xe85e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe85f;</span>\n                <div class=\"name\">sort-numeric-asc</div>\n                <div class=\"code-name\">&amp;#xe85f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe860;</span>\n                <div class=\"name\">sort-asc</div>\n                <div class=\"code-name\">&amp;#xe860;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe861;</span>\n                <div class=\"name\">sort-amount-desc</div>\n                <div class=\"code-name\">&amp;#xe861;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe862;</span>\n                <div class=\"name\">sort-numeric-desc</div>\n                <div class=\"code-name\">&amp;#xe862;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe863;</span>\n                <div class=\"name\">sort-up</div>\n                <div class=\"code-name\">&amp;#xe863;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe864;</span>\n                <div class=\"name\">sort</div>\n                <div class=\"code-name\">&amp;#xe864;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe865;</span>\n                <div class=\"name\">soundcloud</div>\n                <div class=\"code-name\">&amp;#xe865;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe866;</span>\n                <div class=\"name\">space-shuttle</div>\n                <div class=\"code-name\">&amp;#xe866;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe867;</span>\n                <div class=\"name\">spinner</div>\n                <div class=\"code-name\">&amp;#xe867;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe868;</span>\n                <div class=\"name\">spoon</div>\n                <div class=\"code-name\">&amp;#xe868;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe869;</span>\n                <div class=\"name\">square-o</div>\n                <div class=\"code-name\">&amp;#xe869;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe86a;</span>\n                <div class=\"name\">spotify</div>\n                <div class=\"code-name\">&amp;#xe86a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe86b;</span>\n                <div class=\"name\">square</div>\n                <div class=\"code-name\">&amp;#xe86b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe86c;</span>\n                <div class=\"name\">stack-exchange</div>\n                <div class=\"code-name\">&amp;#xe86c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe86d;</span>\n                <div class=\"name\">star-half-empty</div>\n                <div class=\"code-name\">&amp;#xe86d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe86e;</span>\n                <div class=\"name\">stack-overflow</div>\n                <div class=\"code-name\">&amp;#xe86e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe86f;</span>\n                <div class=\"name\">star-half</div>\n                <div class=\"code-name\">&amp;#xe86f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe870;</span>\n                <div class=\"name\">star</div>\n                <div class=\"code-name\">&amp;#xe870;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe871;</span>\n                <div class=\"name\">star-half-o</div>\n                <div class=\"code-name\">&amp;#xe871;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe872;</span>\n                <div class=\"name\">star-o</div>\n                <div class=\"code-name\">&amp;#xe872;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe873;</span>\n                <div class=\"name\">star-half-full</div>\n                <div class=\"code-name\">&amp;#xe873;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe874;</span>\n                <div class=\"name\">sticky-note-o</div>\n                <div class=\"code-name\">&amp;#xe874;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe875;</span>\n                <div class=\"name\">step-forward</div>\n                <div class=\"code-name\">&amp;#xe875;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe876;</span>\n                <div class=\"name\">steam</div>\n                <div class=\"code-name\">&amp;#xe876;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe877;</span>\n                <div class=\"name\">steam-square</div>\n                <div class=\"code-name\">&amp;#xe877;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe878;</span>\n                <div class=\"name\">stethoscope</div>\n                <div class=\"code-name\">&amp;#xe878;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe879;</span>\n                <div class=\"name\">step-backward</div>\n                <div class=\"code-name\">&amp;#xe879;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe87a;</span>\n                <div class=\"name\">stop</div>\n                <div class=\"code-name\">&amp;#xe87a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe87b;</span>\n                <div class=\"name\">stop-circle</div>\n                <div class=\"code-name\">&amp;#xe87b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe87c;</span>\n                <div class=\"name\">stop-circle-o</div>\n                <div class=\"code-name\">&amp;#xe87c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe87d;</span>\n                <div class=\"name\">sticky-note</div>\n                <div class=\"code-name\">&amp;#xe87d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe87e;</span>\n                <div class=\"name\">street-view</div>\n                <div class=\"code-name\">&amp;#xe87e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe87f;</span>\n                <div class=\"name\">strikethrough</div>\n                <div class=\"code-name\">&amp;#xe87f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe880;</span>\n                <div class=\"name\">stumbleupon</div>\n                <div class=\"code-name\">&amp;#xe880;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe881;</span>\n                <div class=\"name\">subway</div>\n                <div class=\"code-name\">&amp;#xe881;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe882;</span>\n                <div class=\"name\">stumbleupon-circle</div>\n                <div class=\"code-name\">&amp;#xe882;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe883;</span>\n                <div class=\"name\">suitcase</div>\n                <div class=\"code-name\">&amp;#xe883;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe884;</span>\n                <div class=\"name\">subscript</div>\n                <div class=\"code-name\">&amp;#xe884;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe885;</span>\n                <div class=\"name\">sun-o</div>\n                <div class=\"code-name\">&amp;#xe885;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe886;</span>\n                <div class=\"name\">superpowers</div>\n                <div class=\"code-name\">&amp;#xe886;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe887;</span>\n                <div class=\"name\">tablet</div>\n                <div class=\"code-name\">&amp;#xe887;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe888;</span>\n                <div class=\"name\">table</div>\n                <div class=\"code-name\">&amp;#xe888;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe889;</span>\n                <div class=\"name\">support</div>\n                <div class=\"code-name\">&amp;#xe889;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe88a;</span>\n                <div class=\"name\">superscript</div>\n                <div class=\"code-name\">&amp;#xe88a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe88b;</span>\n                <div class=\"name\">tasks</div>\n                <div class=\"code-name\">&amp;#xe88b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe88c;</span>\n                <div class=\"name\">tags</div>\n                <div class=\"code-name\">&amp;#xe88c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe88d;</span>\n                <div class=\"name\">tag</div>\n                <div class=\"code-name\">&amp;#xe88d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe88e;</span>\n                <div class=\"name\">tachometer</div>\n                <div class=\"code-name\">&amp;#xe88e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe88f;</span>\n                <div class=\"name\">telegram</div>\n                <div class=\"code-name\">&amp;#xe88f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe890;</span>\n                <div class=\"name\">taxi</div>\n                <div class=\"code-name\">&amp;#xe890;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe891;</span>\n                <div class=\"name\">terminal</div>\n                <div class=\"code-name\">&amp;#xe891;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe892;</span>\n                <div class=\"name\">tencent-weibo</div>\n                <div class=\"code-name\">&amp;#xe892;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe893;</span>\n                <div class=\"name\">television</div>\n                <div class=\"code-name\">&amp;#xe893;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe894;</span>\n                <div class=\"name\">text-height</div>\n                <div class=\"code-name\">&amp;#xe894;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe895;</span>\n                <div class=\"name\">text-width</div>\n                <div class=\"code-name\">&amp;#xe895;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe896;</span>\n                <div class=\"name\">th-large</div>\n                <div class=\"code-name\">&amp;#xe896;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe897;</span>\n                <div class=\"name\">th-list</div>\n                <div class=\"code-name\">&amp;#xe897;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe898;</span>\n                <div class=\"name\">thermometer-0</div>\n                <div class=\"code-name\">&amp;#xe898;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe899;</span>\n                <div class=\"name\">th</div>\n                <div class=\"code-name\">&amp;#xe899;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe89a;</span>\n                <div class=\"name\">themeisle</div>\n                <div class=\"code-name\">&amp;#xe89a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe89b;</span>\n                <div class=\"name\">thermometer-1</div>\n                <div class=\"code-name\">&amp;#xe89b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe89c;</span>\n                <div class=\"name\">thermometer-2</div>\n                <div class=\"code-name\">&amp;#xe89c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe89d;</span>\n                <div class=\"name\">thermometer-3</div>\n                <div class=\"code-name\">&amp;#xe89d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe89e;</span>\n                <div class=\"name\">thermometer-4</div>\n                <div class=\"code-name\">&amp;#xe89e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe89f;</span>\n                <div class=\"name\">thermometer-empty</div>\n                <div class=\"code-name\">&amp;#xe89f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8a0;</span>\n                <div class=\"name\">thermometer-full</div>\n                <div class=\"code-name\">&amp;#xe8a0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8a1;</span>\n                <div class=\"name\">thermometer-half</div>\n                <div class=\"code-name\">&amp;#xe8a1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8a2;</span>\n                <div class=\"name\">thumb-tack</div>\n                <div class=\"code-name\">&amp;#xe8a2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8a3;</span>\n                <div class=\"name\">thermometer-three-quarters</div>\n                <div class=\"code-name\">&amp;#xe8a3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8a4;</span>\n                <div class=\"name\">thermometer-quarter</div>\n                <div class=\"code-name\">&amp;#xe8a4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8a5;</span>\n                <div class=\"name\">thermometer</div>\n                <div class=\"code-name\">&amp;#xe8a5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8a6;</span>\n                <div class=\"name\">thumbs-down</div>\n                <div class=\"code-name\">&amp;#xe8a6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8a7;</span>\n                <div class=\"name\">times-circle</div>\n                <div class=\"code-name\">&amp;#xe8a7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8a8;</span>\n                <div class=\"name\">thumbs-up</div>\n                <div class=\"code-name\">&amp;#xe8a8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8a9;</span>\n                <div class=\"name\">ticket</div>\n                <div class=\"code-name\">&amp;#xe8a9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8aa;</span>\n                <div class=\"name\">thumbs-o-down</div>\n                <div class=\"code-name\">&amp;#xe8aa;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8ab;</span>\n                <div class=\"name\">thumbs-o-up</div>\n                <div class=\"code-name\">&amp;#xe8ab;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8ac;</span>\n                <div class=\"name\">times-circle-o</div>\n                <div class=\"code-name\">&amp;#xe8ac;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8ad;</span>\n                <div class=\"name\">times-rectangle-o</div>\n                <div class=\"code-name\">&amp;#xe8ad;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8ae;</span>\n                <div class=\"name\">times-rectangle</div>\n                <div class=\"code-name\">&amp;#xe8ae;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8af;</span>\n                <div class=\"name\">times</div>\n                <div class=\"code-name\">&amp;#xe8af;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8b0;</span>\n                <div class=\"name\">tint</div>\n                <div class=\"code-name\">&amp;#xe8b0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8b1;</span>\n                <div class=\"name\">toggle-left</div>\n                <div class=\"code-name\">&amp;#xe8b1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8b2;</span>\n                <div class=\"name\">toggle-down</div>\n                <div class=\"code-name\">&amp;#xe8b2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8b3;</span>\n                <div class=\"name\">toggle-off</div>\n                <div class=\"code-name\">&amp;#xe8b3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8b4;</span>\n                <div class=\"name\">toggle-right</div>\n                <div class=\"code-name\">&amp;#xe8b4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8b5;</span>\n                <div class=\"name\">toggle-on</div>\n                <div class=\"code-name\">&amp;#xe8b5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8b6;</span>\n                <div class=\"name\">toggle-up</div>\n                <div class=\"code-name\">&amp;#xe8b6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8b7;</span>\n                <div class=\"name\">transgender-alt</div>\n                <div class=\"code-name\">&amp;#xe8b7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8b8;</span>\n                <div class=\"name\">trademark</div>\n                <div class=\"code-name\">&amp;#xe8b8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8b9;</span>\n                <div class=\"name\">train</div>\n                <div class=\"code-name\">&amp;#xe8b9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8ba;</span>\n                <div class=\"name\">trash-o</div>\n                <div class=\"code-name\">&amp;#xe8ba;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8bb;</span>\n                <div class=\"name\">trash</div>\n                <div class=\"code-name\">&amp;#xe8bb;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8bc;</span>\n                <div class=\"name\">transgender</div>\n                <div class=\"code-name\">&amp;#xe8bc;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8bd;</span>\n                <div class=\"name\">tree</div>\n                <div class=\"code-name\">&amp;#xe8bd;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8be;</span>\n                <div class=\"name\">try</div>\n                <div class=\"code-name\">&amp;#xe8be;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8bf;</span>\n                <div class=\"name\">trello</div>\n                <div class=\"code-name\">&amp;#xe8bf;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8c0;</span>\n                <div class=\"name\">trophy</div>\n                <div class=\"code-name\">&amp;#xe8c0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8c1;</span>\n                <div class=\"name\">tty</div>\n                <div class=\"code-name\">&amp;#xe8c1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8c2;</span>\n                <div class=\"name\">truck</div>\n                <div class=\"code-name\">&amp;#xe8c2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8c3;</span>\n                <div class=\"name\">tripadvisor</div>\n                <div class=\"code-name\">&amp;#xe8c3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8c4;</span>\n                <div class=\"name\">tumblr-square</div>\n                <div class=\"code-name\">&amp;#xe8c4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8c5;</span>\n                <div class=\"name\">turkish-lira</div>\n                <div class=\"code-name\">&amp;#xe8c5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8c6;</span>\n                <div class=\"name\">tumblr</div>\n                <div class=\"code-name\">&amp;#xe8c6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8c7;</span>\n                <div class=\"name\">tv</div>\n                <div class=\"code-name\">&amp;#xe8c7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8c8;</span>\n                <div class=\"name\">twitter</div>\n                <div class=\"code-name\">&amp;#xe8c8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8c9;</span>\n                <div class=\"name\">twitter-square</div>\n                <div class=\"code-name\">&amp;#xe8c9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8ca;</span>\n                <div class=\"name\">twitch</div>\n                <div class=\"code-name\">&amp;#xe8ca;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8cb;</span>\n                <div class=\"name\">underline</div>\n                <div class=\"code-name\">&amp;#xe8cb;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8cc;</span>\n                <div class=\"name\">umbrella</div>\n                <div class=\"code-name\">&amp;#xe8cc;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8cd;</span>\n                <div class=\"name\">undo</div>\n                <div class=\"code-name\">&amp;#xe8cd;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8ce;</span>\n                <div class=\"name\">unlink</div>\n                <div class=\"code-name\">&amp;#xe8ce;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8cf;</span>\n                <div class=\"name\">university</div>\n                <div class=\"code-name\">&amp;#xe8cf;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8d0;</span>\n                <div class=\"name\">universal-access</div>\n                <div class=\"code-name\">&amp;#xe8d0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8d1;</span>\n                <div class=\"name\">unlock-alt</div>\n                <div class=\"code-name\">&amp;#xe8d1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8d2;</span>\n                <div class=\"name\">unlock</div>\n                <div class=\"code-name\">&amp;#xe8d2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8d3;</span>\n                <div class=\"name\">upload</div>\n                <div class=\"code-name\">&amp;#xe8d3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8d4;</span>\n                <div class=\"name\">unsorted</div>\n                <div class=\"code-name\">&amp;#xe8d4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8d5;</span>\n                <div class=\"name\">usd</div>\n                <div class=\"code-name\">&amp;#xe8d5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8d6;</span>\n                <div class=\"name\">usb</div>\n                <div class=\"code-name\">&amp;#xe8d6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8d7;</span>\n                <div class=\"name\">user-circle</div>\n                <div class=\"code-name\">&amp;#xe8d7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8d8;</span>\n                <div class=\"name\">user-o</div>\n                <div class=\"code-name\">&amp;#xe8d8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8d9;</span>\n                <div class=\"name\">user-circle-o</div>\n                <div class=\"code-name\">&amp;#xe8d9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8da;</span>\n                <div class=\"name\">user-plus</div>\n                <div class=\"code-name\">&amp;#xe8da;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8db;</span>\n                <div class=\"name\">user-md</div>\n                <div class=\"code-name\">&amp;#xe8db;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8dc;</span>\n                <div class=\"name\">user-secret</div>\n                <div class=\"code-name\">&amp;#xe8dc;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8dd;</span>\n                <div class=\"name\">user</div>\n                <div class=\"code-name\">&amp;#xe8dd;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8de;</span>\n                <div class=\"name\">user-times</div>\n                <div class=\"code-name\">&amp;#xe8de;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8df;</span>\n                <div class=\"name\">users</div>\n                <div class=\"code-name\">&amp;#xe8df;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8e0;</span>\n                <div class=\"name\">vcard-o</div>\n                <div class=\"code-name\">&amp;#xe8e0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8e1;</span>\n                <div class=\"name\">vcard</div>\n                <div class=\"code-name\">&amp;#xe8e1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8e2;</span>\n                <div class=\"name\">venus</div>\n                <div class=\"code-name\">&amp;#xe8e2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8e3;</span>\n                <div class=\"name\">venus-mars</div>\n                <div class=\"code-name\">&amp;#xe8e3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8e4;</span>\n                <div class=\"name\">venus-double</div>\n                <div class=\"code-name\">&amp;#xe8e4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8e5;</span>\n                <div class=\"name\">viadeo-square</div>\n                <div class=\"code-name\">&amp;#xe8e5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8e6;</span>\n                <div class=\"name\">viacoin</div>\n                <div class=\"code-name\">&amp;#xe8e6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8e7;</span>\n                <div class=\"name\">viadeo</div>\n                <div class=\"code-name\">&amp;#xe8e7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8e8;</span>\n                <div class=\"name\">video-camera</div>\n                <div class=\"code-name\">&amp;#xe8e8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8e9;</span>\n                <div class=\"name\">vimeo-square</div>\n                <div class=\"code-name\">&amp;#xe8e9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8ea;</span>\n                <div class=\"name\">vine</div>\n                <div class=\"code-name\">&amp;#xe8ea;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8eb;</span>\n                <div class=\"name\">vimeo</div>\n                <div class=\"code-name\">&amp;#xe8eb;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8ec;</span>\n                <div class=\"name\">vk</div>\n                <div class=\"code-name\">&amp;#xe8ec;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8ed;</span>\n                <div class=\"name\">volume-control-phone</div>\n                <div class=\"code-name\">&amp;#xe8ed;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8ee;</span>\n                <div class=\"name\">volume-off</div>\n                <div class=\"code-name\">&amp;#xe8ee;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8ef;</span>\n                <div class=\"name\">volume-down</div>\n                <div class=\"code-name\">&amp;#xe8ef;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8f0;</span>\n                <div class=\"name\">warning</div>\n                <div class=\"code-name\">&amp;#xe8f0;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8f1;</span>\n                <div class=\"name\">volume-up</div>\n                <div class=\"code-name\">&amp;#xe8f1;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8f2;</span>\n                <div class=\"name\">wechat</div>\n                <div class=\"code-name\">&amp;#xe8f2;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8f3;</span>\n                <div class=\"name\">weibo</div>\n                <div class=\"code-name\">&amp;#xe8f3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8f4;</span>\n                <div class=\"name\">whatsapp</div>\n                <div class=\"code-name\">&amp;#xe8f4;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8f5;</span>\n                <div class=\"name\">weixin</div>\n                <div class=\"code-name\">&amp;#xe8f5;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8f6;</span>\n                <div class=\"name\">wheelchair-alt</div>\n                <div class=\"code-name\">&amp;#xe8f6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8f7;</span>\n                <div class=\"name\">wheelchair</div>\n                <div class=\"code-name\">&amp;#xe8f7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8f8;</span>\n                <div class=\"name\">wikipedia-w</div>\n                <div class=\"code-name\">&amp;#xe8f8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8f9;</span>\n                <div class=\"name\">wifi</div>\n                <div class=\"code-name\">&amp;#xe8f9;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8fa;</span>\n                <div class=\"name\">window-close</div>\n                <div class=\"code-name\">&amp;#xe8fa;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8fb;</span>\n                <div class=\"name\">window-close-o</div>\n                <div class=\"code-name\">&amp;#xe8fb;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8fc;</span>\n                <div class=\"name\">window-maximize</div>\n                <div class=\"code-name\">&amp;#xe8fc;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8fd;</span>\n                <div class=\"name\">window-minimize</div>\n                <div class=\"code-name\">&amp;#xe8fd;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8fe;</span>\n                <div class=\"name\">window-restore</div>\n                <div class=\"code-name\">&amp;#xe8fe;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe8ff;</span>\n                <div class=\"name\">windows</div>\n                <div class=\"code-name\">&amp;#xe8ff;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe900;</span>\n                <div class=\"name\">won</div>\n                <div class=\"code-name\">&amp;#xe900;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe901;</span>\n                <div class=\"name\">wordpress</div>\n                <div class=\"code-name\">&amp;#xe901;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe902;</span>\n                <div class=\"name\">wpexplorer</div>\n                <div class=\"code-name\">&amp;#xe902;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe903;</span>\n                <div class=\"name\">wpbeginner</div>\n                <div class=\"code-name\">&amp;#xe903;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe904;</span>\n                <div class=\"name\">xing-square</div>\n                <div class=\"code-name\">&amp;#xe904;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe905;</span>\n                <div class=\"name\">wrench</div>\n                <div class=\"code-name\">&amp;#xe905;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe906;</span>\n                <div class=\"name\">wpforms</div>\n                <div class=\"code-name\">&amp;#xe906;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe907;</span>\n                <div class=\"name\">y-combinator</div>\n                <div class=\"code-name\">&amp;#xe907;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe908;</span>\n                <div class=\"name\">xing</div>\n                <div class=\"code-name\">&amp;#xe908;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe909;</span>\n                <div class=\"name\">y-combinator-square</div>\n                <div class=\"code-name\">&amp;#xe909;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe90a;</span>\n                <div class=\"name\">yahoo</div>\n                <div class=\"code-name\">&amp;#xe90a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe90b;</span>\n                <div class=\"name\">yc</div>\n                <div class=\"code-name\">&amp;#xe90b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe90c;</span>\n                <div class=\"name\">yc-square</div>\n                <div class=\"code-name\">&amp;#xe90c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe90d;</span>\n                <div class=\"name\">yen</div>\n                <div class=\"code-name\">&amp;#xe90d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe90e;</span>\n                <div class=\"name\">yelp</div>\n                <div class=\"code-name\">&amp;#xe90e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe90f;</span>\n                <div class=\"name\">yoast</div>\n                <div class=\"code-name\">&amp;#xe90f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe910;</span>\n                <div class=\"name\">youtube-play</div>\n                <div class=\"code-name\">&amp;#xe910;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe911;</span>\n                <div class=\"name\">youtube-square</div>\n                <div class=\"code-name\">&amp;#xe911;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe912;</span>\n                <div class=\"name\">youtube</div>\n                <div class=\"code-name\">&amp;#xe912;</div>\n              </li>\n          \n          </ul>\n          <div class=\"article markdown\">\n          <h2 id=\"unicode-\">Unicode 引用</h2>\n          <hr>\n\n          <p>Unicode 是字体在网页端最原始的应用方式，特点是：</p>\n          <ul>\n            <li>兼容性最好，支持 IE6+，及所有现代浏览器。</li>\n            <li>支持按字体的方式去动态调整图标大小，颜色等等。</li>\n            <li>但是因为是字体，所以不支持多色。只能使用平台里单色的图标，就算项目里有多色图标也会自动去色。</li>\n          </ul>\n          <blockquote>\n            <p>注意：新版 iconfont 支持多色图标，这些多色图标在 Unicode 模式下将不能使用，如果有需求建议使用symbol 的引用方式</p>\n          </blockquote>\n          <p>Unicode 使用步骤如下：</p>\n          <h3 id=\"-font-face\">第一步：拷贝项目下面生成的 <code>@font-face</code></h3>\n<pre><code class=\"language-css\"\n>@font-face {\n  font-family: 'iconfont';\n  src: url('iconfont.eot');\n  src: url('iconfont.eot?#iefix') format('embedded-opentype'),\n      url('iconfont.woff2') format('woff2'),\n      url('iconfont.woff') format('woff'),\n      url('iconfont.ttf') format('truetype'),\n      url('iconfont.svg#iconfont') format('svg');\n}\n</code></pre>\n          <h3 id=\"-iconfont-\">第二步：定义使用 iconfont 的样式</h3>\n<pre><code class=\"language-css\"\n>.iconfont {\n  font-family: \"iconfont\" !important;\n  font-size: 16px;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n</code></pre>\n          <h3 id=\"-\">第三步：挑选相应图标并获取字体编码，应用于页面</h3>\n<pre>\n<code class=\"language-html\"\n>&lt;span class=\"iconfont\"&gt;&amp;#x33;&lt;/span&gt;\n</code></pre>\n          <blockquote>\n            <p>\"iconfont\" 是你项目下的 font-family。可以通过编辑项目查看，默认是 \"iconfont\"。</p>\n          </blockquote>\n          </div>\n      </div>\n      <div class=\"content font-class\">\n        <ul class=\"icon_lists dib-box\">\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bars\"></span>\n            <div class=\"name\">\n              bars\n            </div>\n            <div class=\"code-name\">.icon-bars\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-calendar\"></span>\n            <div class=\"name\">\n              calendar\n            </div>\n            <div class=\"code-name\">.icon-calendar\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-camera\"></span>\n            <div class=\"name\">\n              camera\n            </div>\n            <div class=\"code-name\">.icon-camera\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-check\"></span>\n            <div class=\"name\">\n              check\n            </div>\n            <div class=\"code-name\">.icon-check\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-check-square-o\"></span>\n            <div class=\"name\">\n              check-square-o\n            </div>\n            <div class=\"code-name\">.icon-check-square-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-clock-o\"></span>\n            <div class=\"name\">\n              clock-o\n            </div>\n            <div class=\"code-name\">.icon-clock-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-500px\"></span>\n            <div class=\"name\">\n              500px\n            </div>\n            <div class=\"code-name\">.icon-500px\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-address-book-o\"></span>\n            <div class=\"name\">\n              address-book-o\n            </div>\n            <div class=\"code-name\">.icon-address-book-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-address-book\"></span>\n            <div class=\"name\">\n              address-book\n            </div>\n            <div class=\"code-name\">.icon-address-book\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-address-card-o\"></span>\n            <div class=\"name\">\n              address-card-o\n            </div>\n            <div class=\"code-name\">.icon-address-card-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-address-card\"></span>\n            <div class=\"name\">\n              address-card\n            </div>\n            <div class=\"code-name\">.icon-address-card\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-adjust\"></span>\n            <div class=\"name\">\n              adjust\n            </div>\n            <div class=\"code-name\">.icon-adjust\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-adn\"></span>\n            <div class=\"name\">\n              adn\n            </div>\n            <div class=\"code-name\">.icon-adn\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-align-center\"></span>\n            <div class=\"name\">\n              align-center\n            </div>\n            <div class=\"code-name\">.icon-align-center\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-align-justify\"></span>\n            <div class=\"name\">\n              align-justify\n            </div>\n            <div class=\"code-name\">.icon-align-justify\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-align-left\"></span>\n            <div class=\"name\">\n              align-left\n            </div>\n            <div class=\"code-name\">.icon-align-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-align-right\"></span>\n            <div class=\"name\">\n              align-right\n            </div>\n            <div class=\"code-name\">.icon-align-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-amazon\"></span>\n            <div class=\"name\">\n              amazon\n            </div>\n            <div class=\"code-name\">.icon-amazon\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-ambulance\"></span>\n            <div class=\"name\">\n              ambulance\n            </div>\n            <div class=\"code-name\">.icon-ambulance\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-american-sign-language-interpreting\"></span>\n            <div class=\"name\">\n              american-sign-language-interpreting\n            </div>\n            <div class=\"code-name\">.icon-american-sign-language-interpreting\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-anchor\"></span>\n            <div class=\"name\">\n              anchor\n            </div>\n            <div class=\"code-name\">.icon-anchor\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-android\"></span>\n            <div class=\"name\">\n              android\n            </div>\n            <div class=\"code-name\">.icon-android\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-angellist\"></span>\n            <div class=\"name\">\n              angellist\n            </div>\n            <div class=\"code-name\">.icon-angellist\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-angle-double-down\"></span>\n            <div class=\"name\">\n              angle-double-down\n            </div>\n            <div class=\"code-name\">.icon-angle-double-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-angle-double-left\"></span>\n            <div class=\"name\">\n              angle-double-left\n            </div>\n            <div class=\"code-name\">.icon-angle-double-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-angle-double-right\"></span>\n            <div class=\"name\">\n              angle-double-right\n            </div>\n            <div class=\"code-name\">.icon-angle-double-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-angle-double-up\"></span>\n            <div class=\"name\">\n              angle-double-up\n            </div>\n            <div class=\"code-name\">.icon-angle-double-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-angle-down\"></span>\n            <div class=\"name\">\n              angle-down\n            </div>\n            <div class=\"code-name\">.icon-angle-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-angle-left\"></span>\n            <div class=\"name\">\n              angle-left\n            </div>\n            <div class=\"code-name\">.icon-angle-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-angle-right\"></span>\n            <div class=\"name\">\n              angle-right\n            </div>\n            <div class=\"code-name\">.icon-angle-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-angle-up\"></span>\n            <div class=\"name\">\n              angle-up\n            </div>\n            <div class=\"code-name\">.icon-angle-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-apple\"></span>\n            <div class=\"name\">\n              apple\n            </div>\n            <div class=\"code-name\">.icon-apple\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-archive\"></span>\n            <div class=\"name\">\n              archive\n            </div>\n            <div class=\"code-name\">.icon-archive\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-area-chart\"></span>\n            <div class=\"name\">\n              area-chart\n            </div>\n            <div class=\"code-name\">.icon-area-chart\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrow-circle-down\"></span>\n            <div class=\"name\">\n              arrow-circle-down\n            </div>\n            <div class=\"code-name\">.icon-arrow-circle-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrow-circle-left\"></span>\n            <div class=\"name\">\n              arrow-circle-left\n            </div>\n            <div class=\"code-name\">.icon-arrow-circle-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrow-circle-o-down\"></span>\n            <div class=\"name\">\n              arrow-circle-o-down\n            </div>\n            <div class=\"code-name\">.icon-arrow-circle-o-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrow-circle-o-left\"></span>\n            <div class=\"name\">\n              arrow-circle-o-left\n            </div>\n            <div class=\"code-name\">.icon-arrow-circle-o-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrow-circle-o-right\"></span>\n            <div class=\"name\">\n              arrow-circle-o-right\n            </div>\n            <div class=\"code-name\">.icon-arrow-circle-o-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrow-circle-o-up\"></span>\n            <div class=\"name\">\n              arrow-circle-o-up\n            </div>\n            <div class=\"code-name\">.icon-arrow-circle-o-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrow-circle-right\"></span>\n            <div class=\"name\">\n              arrow-circle-right\n            </div>\n            <div class=\"code-name\">.icon-arrow-circle-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrow-circle-up\"></span>\n            <div class=\"name\">\n              arrow-circle-up\n            </div>\n            <div class=\"code-name\">.icon-arrow-circle-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrow-down\"></span>\n            <div class=\"name\">\n              arrow-down\n            </div>\n            <div class=\"code-name\">.icon-arrow-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrow-left\"></span>\n            <div class=\"name\">\n              arrow-left\n            </div>\n            <div class=\"code-name\">.icon-arrow-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrow-right\"></span>\n            <div class=\"name\">\n              arrow-right\n            </div>\n            <div class=\"code-name\">.icon-arrow-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrow-up\"></span>\n            <div class=\"name\">\n              arrow-up\n            </div>\n            <div class=\"code-name\">.icon-arrow-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrows-alt\"></span>\n            <div class=\"name\">\n              arrows-alt\n            </div>\n            <div class=\"code-name\">.icon-arrows-alt\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrows-h\"></span>\n            <div class=\"name\">\n              arrows-h\n            </div>\n            <div class=\"code-name\">.icon-arrows-h\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrows-v\"></span>\n            <div class=\"name\">\n              arrows-v\n            </div>\n            <div class=\"code-name\">.icon-arrows-v\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-arrows\"></span>\n            <div class=\"name\">\n              arrows\n            </div>\n            <div class=\"code-name\">.icon-arrows\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-asl-interpreting\"></span>\n            <div class=\"name\">\n              asl-interpreting\n            </div>\n            <div class=\"code-name\">.icon-asl-interpreting\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-assistive-listening-systems\"></span>\n            <div class=\"name\">\n              assistive-listening-systems\n            </div>\n            <div class=\"code-name\">.icon-assistive-listening-systems\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-asterisk\"></span>\n            <div class=\"name\">\n              asterisk\n            </div>\n            <div class=\"code-name\">.icon-asterisk\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-at\"></span>\n            <div class=\"name\">\n              at\n            </div>\n            <div class=\"code-name\">.icon-at\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-audio-description\"></span>\n            <div class=\"name\">\n              audio-description\n            </div>\n            <div class=\"code-name\">.icon-audio-description\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-automobile\"></span>\n            <div class=\"name\">\n              automobile\n            </div>\n            <div class=\"code-name\">.icon-automobile\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-backward\"></span>\n            <div class=\"name\">\n              backward\n            </div>\n            <div class=\"code-name\">.icon-backward\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-balance-scale\"></span>\n            <div class=\"name\">\n              balance-scale\n            </div>\n            <div class=\"code-name\">.icon-balance-scale\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bandcamp\"></span>\n            <div class=\"name\">\n              bandcamp\n            </div>\n            <div class=\"code-name\">.icon-bandcamp\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bank\"></span>\n            <div class=\"name\">\n              bank\n            </div>\n            <div class=\"code-name\">.icon-bank\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bars1\"></span>\n            <div class=\"name\">\n              bars\n            </div>\n            <div class=\"code-name\">.icon-bars1\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bar-chart\"></span>\n            <div class=\"name\">\n              bar-chart\n            </div>\n            <div class=\"code-name\">.icon-bar-chart\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bar-chart-o\"></span>\n            <div class=\"name\">\n              bar-chart-o\n            </div>\n            <div class=\"code-name\">.icon-bar-chart-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bathtub\"></span>\n            <div class=\"name\">\n              bathtub\n            </div>\n            <div class=\"code-name\">.icon-bathtub\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-barcode\"></span>\n            <div class=\"name\">\n              barcode\n            </div>\n            <div class=\"code-name\">.icon-barcode\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bath\"></span>\n            <div class=\"name\">\n              bath\n            </div>\n            <div class=\"code-name\">.icon-bath\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-battery-0\"></span>\n            <div class=\"name\">\n              battery-0\n            </div>\n            <div class=\"code-name\">.icon-battery-0\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-battery-1\"></span>\n            <div class=\"name\">\n              battery-1\n            </div>\n            <div class=\"code-name\">.icon-battery-1\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-battery-2\"></span>\n            <div class=\"name\">\n              battery-2\n            </div>\n            <div class=\"code-name\">.icon-battery-2\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-battery-4\"></span>\n            <div class=\"name\">\n              battery-4\n            </div>\n            <div class=\"code-name\">.icon-battery-4\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-battery-3\"></span>\n            <div class=\"name\">\n              battery-3\n            </div>\n            <div class=\"code-name\">.icon-battery-3\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-battery-half\"></span>\n            <div class=\"name\">\n              battery-half\n            </div>\n            <div class=\"code-name\">.icon-battery-half\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-battery-empty\"></span>\n            <div class=\"name\">\n              battery-empty\n            </div>\n            <div class=\"code-name\">.icon-battery-empty\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-battery-full\"></span>\n            <div class=\"name\">\n              battery-full\n            </div>\n            <div class=\"code-name\">.icon-battery-full\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-battery-quarter\"></span>\n            <div class=\"name\">\n              battery-quarter\n            </div>\n            <div class=\"code-name\">.icon-battery-quarter\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-battery-three-quarters\"></span>\n            <div class=\"name\">\n              battery-three-quarters\n            </div>\n            <div class=\"code-name\">.icon-battery-three-quarters\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-battery\"></span>\n            <div class=\"name\">\n              battery\n            </div>\n            <div class=\"code-name\">.icon-battery\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-beer\"></span>\n            <div class=\"name\">\n              beer\n            </div>\n            <div class=\"code-name\">.icon-beer\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bed\"></span>\n            <div class=\"name\">\n              bed\n            </div>\n            <div class=\"code-name\">.icon-bed\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-behance\"></span>\n            <div class=\"name\">\n              behance\n            </div>\n            <div class=\"code-name\">.icon-behance\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-behance-square\"></span>\n            <div class=\"name\">\n              behance-square\n            </div>\n            <div class=\"code-name\">.icon-behance-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bell-o\"></span>\n            <div class=\"name\">\n              bell-o\n            </div>\n            <div class=\"code-name\">.icon-bell-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bell-slash-o\"></span>\n            <div class=\"name\">\n              bell-slash-o\n            </div>\n            <div class=\"code-name\">.icon-bell-slash-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bell-slash\"></span>\n            <div class=\"name\">\n              bell-slash\n            </div>\n            <div class=\"code-name\">.icon-bell-slash\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bicycle\"></span>\n            <div class=\"name\">\n              bicycle\n            </div>\n            <div class=\"code-name\">.icon-bicycle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bitbucket-square\"></span>\n            <div class=\"name\">\n              bitbucket-square\n            </div>\n            <div class=\"code-name\">.icon-bitbucket-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-binoculars\"></span>\n            <div class=\"name\">\n              binoculars\n            </div>\n            <div class=\"code-name\">.icon-binoculars\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bell\"></span>\n            <div class=\"name\">\n              bell\n            </div>\n            <div class=\"code-name\">.icon-bell\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-birthday-cake\"></span>\n            <div class=\"name\">\n              birthday-cake\n            </div>\n            <div class=\"code-name\">.icon-birthday-cake\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bitbucket\"></span>\n            <div class=\"name\">\n              bitbucket\n            </div>\n            <div class=\"code-name\">.icon-bitbucket\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-black-tie\"></span>\n            <div class=\"name\">\n              black-tie\n            </div>\n            <div class=\"code-name\">.icon-black-tie\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bluetooth-b\"></span>\n            <div class=\"name\">\n              bluetooth-b\n            </div>\n            <div class=\"code-name\">.icon-bluetooth-b\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bitcoin\"></span>\n            <div class=\"name\">\n              bitcoin\n            </div>\n            <div class=\"code-name\">.icon-bitcoin\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-blind\"></span>\n            <div class=\"name\">\n              blind\n            </div>\n            <div class=\"code-name\">.icon-blind\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bluetooth\"></span>\n            <div class=\"name\">\n              bluetooth\n            </div>\n            <div class=\"code-name\">.icon-bluetooth\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bold\"></span>\n            <div class=\"name\">\n              bold\n            </div>\n            <div class=\"code-name\">.icon-bold\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bolt\"></span>\n            <div class=\"name\">\n              bolt\n            </div>\n            <div class=\"code-name\">.icon-bolt\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bomb\"></span>\n            <div class=\"name\">\n              bomb\n            </div>\n            <div class=\"code-name\">.icon-bomb\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-book\"></span>\n            <div class=\"name\">\n              book\n            </div>\n            <div class=\"code-name\">.icon-book\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bug\"></span>\n            <div class=\"name\">\n              bug\n            </div>\n            <div class=\"code-name\">.icon-bug\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bookmark-o\"></span>\n            <div class=\"name\">\n              bookmark-o\n            </div>\n            <div class=\"code-name\">.icon-bookmark-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-btc\"></span>\n            <div class=\"name\">\n              btc\n            </div>\n            <div class=\"code-name\">.icon-btc\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bookmark\"></span>\n            <div class=\"name\">\n              bookmark\n            </div>\n            <div class=\"code-name\">.icon-bookmark\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-briefcase\"></span>\n            <div class=\"name\">\n              briefcase\n            </div>\n            <div class=\"code-name\">.icon-briefcase\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-braille\"></span>\n            <div class=\"name\">\n              braille\n            </div>\n            <div class=\"code-name\">.icon-braille\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bullhorn\"></span>\n            <div class=\"name\">\n              bullhorn\n            </div>\n            <div class=\"code-name\">.icon-bullhorn\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bullseye\"></span>\n            <div class=\"name\">\n              bullseye\n            </div>\n            <div class=\"code-name\">.icon-bullseye\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bus\"></span>\n            <div class=\"name\">\n              bus\n            </div>\n            <div class=\"code-name\">.icon-bus\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-building\"></span>\n            <div class=\"name\">\n              building\n            </div>\n            <div class=\"code-name\">.icon-building\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cab\"></span>\n            <div class=\"name\">\n              cab\n            </div>\n            <div class=\"code-name\">.icon-cab\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-buysellads\"></span>\n            <div class=\"name\">\n              buysellads\n            </div>\n            <div class=\"code-name\">.icon-buysellads\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-building-o\"></span>\n            <div class=\"name\">\n              building-o\n            </div>\n            <div class=\"code-name\">.icon-building-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-calendar-plus-o\"></span>\n            <div class=\"name\">\n              calendar-plus-o\n            </div>\n            <div class=\"code-name\">.icon-calendar-plus-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-calendar-o\"></span>\n            <div class=\"name\">\n              calendar-o\n            </div>\n            <div class=\"code-name\">.icon-calendar-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-calendar-times-o\"></span>\n            <div class=\"name\">\n              calendar-times-o\n            </div>\n            <div class=\"code-name\">.icon-calendar-times-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-calendar-check-o\"></span>\n            <div class=\"name\">\n              calendar-check-o\n            </div>\n            <div class=\"code-name\">.icon-calendar-check-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-calendar-minus-o\"></span>\n            <div class=\"name\">\n              calendar-minus-o\n            </div>\n            <div class=\"code-name\">.icon-calendar-minus-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-calculator\"></span>\n            <div class=\"name\">\n              calculator\n            </div>\n            <div class=\"code-name\">.icon-calculator\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-caret-down\"></span>\n            <div class=\"name\">\n              caret-down\n            </div>\n            <div class=\"code-name\">.icon-caret-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-caret-left\"></span>\n            <div class=\"name\">\n              caret-left\n            </div>\n            <div class=\"code-name\">.icon-caret-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-car\"></span>\n            <div class=\"name\">\n              car\n            </div>\n            <div class=\"code-name\">.icon-car\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-camera-retro\"></span>\n            <div class=\"name\">\n              camera-retro\n            </div>\n            <div class=\"code-name\">.icon-camera-retro\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-caret-right\"></span>\n            <div class=\"name\">\n              caret-right\n            </div>\n            <div class=\"code-name\">.icon-caret-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-caret-square-o-left\"></span>\n            <div class=\"name\">\n              caret-square-o-left\n            </div>\n            <div class=\"code-name\">.icon-caret-square-o-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-caret-square-o-right\"></span>\n            <div class=\"name\">\n              caret-square-o-right\n            </div>\n            <div class=\"code-name\">.icon-caret-square-o-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-caret-up\"></span>\n            <div class=\"name\">\n              caret-up\n            </div>\n            <div class=\"code-name\">.icon-caret-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-caret-square-o-up\"></span>\n            <div class=\"name\">\n              caret-square-o-up\n            </div>\n            <div class=\"code-name\">.icon-caret-square-o-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cart-plus\"></span>\n            <div class=\"name\">\n              cart-plus\n            </div>\n            <div class=\"code-name\">.icon-cart-plus\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cart-arrow-down\"></span>\n            <div class=\"name\">\n              cart-arrow-down\n            </div>\n            <div class=\"code-name\">.icon-cart-arrow-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-caret-square-o-down\"></span>\n            <div class=\"name\">\n              caret-square-o-down\n            </div>\n            <div class=\"code-name\">.icon-caret-square-o-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cc-discover\"></span>\n            <div class=\"name\">\n              cc-discover\n            </div>\n            <div class=\"code-name\">.icon-cc-discover\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cc-diners-club\"></span>\n            <div class=\"name\">\n              cc-diners-club\n            </div>\n            <div class=\"code-name\">.icon-cc-diners-club\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cc-paypal\"></span>\n            <div class=\"name\">\n              cc-paypal\n            </div>\n            <div class=\"code-name\">.icon-cc-paypal\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cc-jcb\"></span>\n            <div class=\"name\">\n              cc-jcb\n            </div>\n            <div class=\"code-name\">.icon-cc-jcb\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cc-mastercard\"></span>\n            <div class=\"name\">\n              cc-mastercard\n            </div>\n            <div class=\"code-name\">.icon-cc-mastercard\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cc-amex\"></span>\n            <div class=\"name\">\n              cc-amex\n            </div>\n            <div class=\"code-name\">.icon-cc-amex\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cc\"></span>\n            <div class=\"name\">\n              cc\n            </div>\n            <div class=\"code-name\">.icon-cc\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cc-visa\"></span>\n            <div class=\"name\">\n              cc-visa\n            </div>\n            <div class=\"code-name\">.icon-cc-visa\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cc-stripe\"></span>\n            <div class=\"name\">\n              cc-stripe\n            </div>\n            <div class=\"code-name\">.icon-cc-stripe\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-check1\"></span>\n            <div class=\"name\">\n              check\n            </div>\n            <div class=\"code-name\">.icon-check1\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-certificate\"></span>\n            <div class=\"name\">\n              certificate\n            </div>\n            <div class=\"code-name\">.icon-certificate\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-check-circle\"></span>\n            <div class=\"name\">\n              check-circle\n            </div>\n            <div class=\"code-name\">.icon-check-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-check-circle-o\"></span>\n            <div class=\"name\">\n              check-circle-o\n            </div>\n            <div class=\"code-name\">.icon-check-circle-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-chain-broken\"></span>\n            <div class=\"name\">\n              chain-broken\n            </div>\n            <div class=\"code-name\">.icon-chain-broken\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-chain\"></span>\n            <div class=\"name\">\n              chain\n            </div>\n            <div class=\"code-name\">.icon-chain\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-chevron-circle-down\"></span>\n            <div class=\"name\">\n              chevron-circle-down\n            </div>\n            <div class=\"code-name\">.icon-chevron-circle-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-chevron-circle-left\"></span>\n            <div class=\"name\">\n              chevron-circle-left\n            </div>\n            <div class=\"code-name\">.icon-chevron-circle-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-chevron-circle-right\"></span>\n            <div class=\"name\">\n              chevron-circle-right\n            </div>\n            <div class=\"code-name\">.icon-chevron-circle-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-chevron-down\"></span>\n            <div class=\"name\">\n              chevron-down\n            </div>\n            <div class=\"code-name\">.icon-chevron-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-chevron-circle-up\"></span>\n            <div class=\"name\">\n              chevron-circle-up\n            </div>\n            <div class=\"code-name\">.icon-chevron-circle-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-chevron-left\"></span>\n            <div class=\"name\">\n              chevron-left\n            </div>\n            <div class=\"code-name\">.icon-chevron-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-chevron-right\"></span>\n            <div class=\"name\">\n              chevron-right\n            </div>\n            <div class=\"code-name\">.icon-chevron-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-chevron-up\"></span>\n            <div class=\"name\">\n              chevron-up\n            </div>\n            <div class=\"code-name\">.icon-chevron-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-child\"></span>\n            <div class=\"name\">\n              child\n            </div>\n            <div class=\"code-name\">.icon-child\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-circle-thin\"></span>\n            <div class=\"name\">\n              circle-thin\n            </div>\n            <div class=\"code-name\">.icon-circle-thin\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-circle-o-notch\"></span>\n            <div class=\"name\">\n              circle-o-notch\n            </div>\n            <div class=\"code-name\">.icon-circle-o-notch\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-chrome\"></span>\n            <div class=\"name\">\n              chrome\n            </div>\n            <div class=\"code-name\">.icon-chrome\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-circle-o\"></span>\n            <div class=\"name\">\n              circle-o\n            </div>\n            <div class=\"code-name\">.icon-circle-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-clipboard\"></span>\n            <div class=\"name\">\n              clipboard\n            </div>\n            <div class=\"code-name\">.icon-clipboard\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-circle\"></span>\n            <div class=\"name\">\n              circle\n            </div>\n            <div class=\"code-name\">.icon-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cloud\"></span>\n            <div class=\"name\">\n              cloud\n            </div>\n            <div class=\"code-name\">.icon-cloud\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-close\"></span>\n            <div class=\"name\">\n              close\n            </div>\n            <div class=\"code-name\">.icon-close\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cloud-upload\"></span>\n            <div class=\"name\">\n              cloud-upload\n            </div>\n            <div class=\"code-name\">.icon-cloud-upload\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-clone\"></span>\n            <div class=\"name\">\n              clone\n            </div>\n            <div class=\"code-name\">.icon-clone\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cloud-download\"></span>\n            <div class=\"name\">\n              cloud-download\n            </div>\n            <div class=\"code-name\">.icon-cloud-download\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-clock-o1\"></span>\n            <div class=\"name\">\n              clock-o\n            </div>\n            <div class=\"code-name\">.icon-clock-o1\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cny\"></span>\n            <div class=\"name\">\n              cny\n            </div>\n            <div class=\"code-name\">.icon-cny\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-code-fork\"></span>\n            <div class=\"name\">\n              code-fork\n            </div>\n            <div class=\"code-name\">.icon-code-fork\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-codiepie\"></span>\n            <div class=\"name\">\n              codiepie\n            </div>\n            <div class=\"code-name\">.icon-codiepie\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-codepen\"></span>\n            <div class=\"name\">\n              codepen\n            </div>\n            <div class=\"code-name\">.icon-codepen\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-code\"></span>\n            <div class=\"name\">\n              code\n            </div>\n            <div class=\"code-name\">.icon-code\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cog\"></span>\n            <div class=\"name\">\n              cog\n            </div>\n            <div class=\"code-name\">.icon-cog\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-coffee\"></span>\n            <div class=\"name\">\n              coffee\n            </div>\n            <div class=\"code-name\">.icon-coffee\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-columns\"></span>\n            <div class=\"name\">\n              columns\n            </div>\n            <div class=\"code-name\">.icon-columns\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-comment-o\"></span>\n            <div class=\"name\">\n              comment-o\n            </div>\n            <div class=\"code-name\">.icon-comment-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-commenting-o\"></span>\n            <div class=\"name\">\n              commenting-o\n            </div>\n            <div class=\"code-name\">.icon-commenting-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-commenting\"></span>\n            <div class=\"name\">\n              commenting\n            </div>\n            <div class=\"code-name\">.icon-commenting\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-comment\"></span>\n            <div class=\"name\">\n              comment\n            </div>\n            <div class=\"code-name\">.icon-comment\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cogs\"></span>\n            <div class=\"name\">\n              cogs\n            </div>\n            <div class=\"code-name\">.icon-cogs\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-compass\"></span>\n            <div class=\"name\">\n              compass\n            </div>\n            <div class=\"code-name\">.icon-compass\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-compress\"></span>\n            <div class=\"name\">\n              compress\n            </div>\n            <div class=\"code-name\">.icon-compress\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-comments\"></span>\n            <div class=\"name\">\n              comments\n            </div>\n            <div class=\"code-name\">.icon-comments\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-comments-o\"></span>\n            <div class=\"name\">\n              comments-o\n            </div>\n            <div class=\"code-name\">.icon-comments-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-connectdevelop\"></span>\n            <div class=\"name\">\n              connectdevelop\n            </div>\n            <div class=\"code-name\">.icon-connectdevelop\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-copy\"></span>\n            <div class=\"name\">\n              copy\n            </div>\n            <div class=\"code-name\">.icon-copy\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-contao\"></span>\n            <div class=\"name\">\n              contao\n            </div>\n            <div class=\"code-name\">.icon-contao\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-copyright\"></span>\n            <div class=\"name\">\n              copyright\n            </div>\n            <div class=\"code-name\">.icon-copyright\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-credit-card-alt\"></span>\n            <div class=\"name\">\n              credit-card-alt\n            </div>\n            <div class=\"code-name\">.icon-credit-card-alt\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-credit-card\"></span>\n            <div class=\"name\">\n              credit-card\n            </div>\n            <div class=\"code-name\">.icon-credit-card\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-crop\"></span>\n            <div class=\"name\">\n              crop\n            </div>\n            <div class=\"code-name\">.icon-crop\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-creative-commons\"></span>\n            <div class=\"name\">\n              creative-commons\n            </div>\n            <div class=\"code-name\">.icon-creative-commons\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-crosshairs\"></span>\n            <div class=\"name\">\n              crosshairs\n            </div>\n            <div class=\"code-name\">.icon-crosshairs\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-css3\"></span>\n            <div class=\"name\">\n              css3\n            </div>\n            <div class=\"code-name\">.icon-css3\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cube\"></span>\n            <div class=\"name\">\n              cube\n            </div>\n            <div class=\"code-name\">.icon-cube\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cutlery\"></span>\n            <div class=\"name\">\n              cutlery\n            </div>\n            <div class=\"code-name\">.icon-cutlery\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cut\"></span>\n            <div class=\"name\">\n              cut\n            </div>\n            <div class=\"code-name\">.icon-cut\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-dashboard\"></span>\n            <div class=\"name\">\n              dashboard\n            </div>\n            <div class=\"code-name\">.icon-dashboard\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-dashcube\"></span>\n            <div class=\"name\">\n              dashcube\n            </div>\n            <div class=\"code-name\">.icon-dashcube\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-cubes\"></span>\n            <div class=\"name\">\n              cubes\n            </div>\n            <div class=\"code-name\">.icon-cubes\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-database\"></span>\n            <div class=\"name\">\n              database\n            </div>\n            <div class=\"code-name\">.icon-database\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-deaf\"></span>\n            <div class=\"name\">\n              deaf\n            </div>\n            <div class=\"code-name\">.icon-deaf\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-delicious\"></span>\n            <div class=\"name\">\n              delicious\n            </div>\n            <div class=\"code-name\">.icon-delicious\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-deviantart\"></span>\n            <div class=\"name\">\n              deviantart\n            </div>\n            <div class=\"code-name\">.icon-deviantart\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-diamond\"></span>\n            <div class=\"name\">\n              diamond\n            </div>\n            <div class=\"code-name\">.icon-diamond\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-dedent\"></span>\n            <div class=\"name\">\n              dedent\n            </div>\n            <div class=\"code-name\">.icon-dedent\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-desktop\"></span>\n            <div class=\"name\">\n              desktop\n            </div>\n            <div class=\"code-name\">.icon-desktop\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-deafness\"></span>\n            <div class=\"name\">\n              deafness\n            </div>\n            <div class=\"code-name\">.icon-deafness\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-drivers-license-o\"></span>\n            <div class=\"name\">\n              drivers-license-o\n            </div>\n            <div class=\"code-name\">.icon-drivers-license-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-digg\"></span>\n            <div class=\"name\">\n              digg\n            </div>\n            <div class=\"code-name\">.icon-digg\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-dribbble\"></span>\n            <div class=\"name\">\n              dribbble\n            </div>\n            <div class=\"code-name\">.icon-dribbble\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-download\"></span>\n            <div class=\"name\">\n              download\n            </div>\n            <div class=\"code-name\">.icon-download\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-dollar\"></span>\n            <div class=\"name\">\n              dollar\n            </div>\n            <div class=\"code-name\">.icon-dollar\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-dot-circle-o\"></span>\n            <div class=\"name\">\n              dot-circle-o\n            </div>\n            <div class=\"code-name\">.icon-dot-circle-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-edit\"></span>\n            <div class=\"name\">\n              edit\n            </div>\n            <div class=\"code-name\">.icon-edit\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-dropbox\"></span>\n            <div class=\"name\">\n              dropbox\n            </div>\n            <div class=\"code-name\">.icon-dropbox\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-edge\"></span>\n            <div class=\"name\">\n              edge\n            </div>\n            <div class=\"code-name\">.icon-edge\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-drupal\"></span>\n            <div class=\"name\">\n              drupal\n            </div>\n            <div class=\"code-name\">.icon-drupal\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-drivers-license\"></span>\n            <div class=\"name\">\n              drivers-license\n            </div>\n            <div class=\"code-name\">.icon-drivers-license\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-eject\"></span>\n            <div class=\"name\">\n              eject\n            </div>\n            <div class=\"code-name\">.icon-eject\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-ellipsis-h\"></span>\n            <div class=\"name\">\n              ellipsis-h\n            </div>\n            <div class=\"code-name\">.icon-ellipsis-h\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-envelope-o\"></span>\n            <div class=\"name\">\n              envelope-o\n            </div>\n            <div class=\"code-name\">.icon-envelope-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-ellipsis-v\"></span>\n            <div class=\"name\">\n              ellipsis-v\n            </div>\n            <div class=\"code-name\">.icon-ellipsis-v\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-eercast\"></span>\n            <div class=\"name\">\n              eercast\n            </div>\n            <div class=\"code-name\">.icon-eercast\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-empire\"></span>\n            <div class=\"name\">\n              empire\n            </div>\n            <div class=\"code-name\">.icon-empire\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-envelope-open-o\"></span>\n            <div class=\"name\">\n              envelope-open-o\n            </div>\n            <div class=\"code-name\">.icon-envelope-open-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-envelope-open\"></span>\n            <div class=\"name\">\n              envelope-open\n            </div>\n            <div class=\"code-name\">.icon-envelope-open\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-envelope\"></span>\n            <div class=\"name\">\n              envelope\n            </div>\n            <div class=\"code-name\">.icon-envelope\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-envelope-square\"></span>\n            <div class=\"name\">\n              envelope-square\n            </div>\n            <div class=\"code-name\">.icon-envelope-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-envira\"></span>\n            <div class=\"name\">\n              envira\n            </div>\n            <div class=\"code-name\">.icon-envira\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-etsy\"></span>\n            <div class=\"name\">\n              etsy\n            </div>\n            <div class=\"code-name\">.icon-etsy\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-eraser\"></span>\n            <div class=\"name\">\n              eraser\n            </div>\n            <div class=\"code-name\">.icon-eraser\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-eur\"></span>\n            <div class=\"name\">\n              eur\n            </div>\n            <div class=\"code-name\">.icon-eur\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-euro\"></span>\n            <div class=\"name\">\n              euro\n            </div>\n            <div class=\"code-name\">.icon-euro\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-exchange\"></span>\n            <div class=\"name\">\n              exchange\n            </div>\n            <div class=\"code-name\">.icon-exchange\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-exclamation-triangle\"></span>\n            <div class=\"name\">\n              exclamation-triangle\n            </div>\n            <div class=\"code-name\">.icon-exclamation-triangle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-expand\"></span>\n            <div class=\"name\">\n              expand\n            </div>\n            <div class=\"code-name\">.icon-expand\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-exclamation\"></span>\n            <div class=\"name\">\n              exclamation\n            </div>\n            <div class=\"code-name\">.icon-exclamation\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-exclamation-circle\"></span>\n            <div class=\"name\">\n              exclamation-circle\n            </div>\n            <div class=\"code-name\">.icon-exclamation-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-expeditedssl\"></span>\n            <div class=\"name\">\n              expeditedssl\n            </div>\n            <div class=\"code-name\">.icon-expeditedssl\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-external-link-square\"></span>\n            <div class=\"name\">\n              external-link-square\n            </div>\n            <div class=\"code-name\">.icon-external-link-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-eyedropper\"></span>\n            <div class=\"name\">\n              eyedropper\n            </div>\n            <div class=\"code-name\">.icon-eyedropper\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-external-link\"></span>\n            <div class=\"name\">\n              external-link\n            </div>\n            <div class=\"code-name\">.icon-external-link\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-eye\"></span>\n            <div class=\"name\">\n              eye\n            </div>\n            <div class=\"code-name\">.icon-eye\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-eye-slash\"></span>\n            <div class=\"name\">\n              eye-slash\n            </div>\n            <div class=\"code-name\">.icon-eye-slash\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-fa\"></span>\n            <div class=\"name\">\n              fa\n            </div>\n            <div class=\"code-name\">.icon-fa\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-facebook-official\"></span>\n            <div class=\"name\">\n              facebook-official\n            </div>\n            <div class=\"code-name\">.icon-facebook-official\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-facebook-f\"></span>\n            <div class=\"name\">\n              facebook-f\n            </div>\n            <div class=\"code-name\">.icon-facebook-f\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-facebook-square\"></span>\n            <div class=\"name\">\n              facebook-square\n            </div>\n            <div class=\"code-name\">.icon-facebook-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-facebook\"></span>\n            <div class=\"name\">\n              facebook\n            </div>\n            <div class=\"code-name\">.icon-facebook\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-fast-backward\"></span>\n            <div class=\"name\">\n              fast-backward\n            </div>\n            <div class=\"code-name\">.icon-fast-backward\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-fast-forward\"></span>\n            <div class=\"name\">\n              fast-forward\n            </div>\n            <div class=\"code-name\">.icon-fast-forward\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-feed\"></span>\n            <div class=\"name\">\n              feed\n            </div>\n            <div class=\"code-name\">.icon-feed\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-archive-o\"></span>\n            <div class=\"name\">\n              file-archive-o\n            </div>\n            <div class=\"code-name\">.icon-file-archive-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-female\"></span>\n            <div class=\"name\">\n              female\n            </div>\n            <div class=\"code-name\">.icon-female\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-audio-o\"></span>\n            <div class=\"name\">\n              file-audio-o\n            </div>\n            <div class=\"code-name\">.icon-file-audio-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-fighter-jet\"></span>\n            <div class=\"name\">\n              fighter-jet\n            </div>\n            <div class=\"code-name\">.icon-fighter-jet\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-fax\"></span>\n            <div class=\"name\">\n              fax\n            </div>\n            <div class=\"code-name\">.icon-fax\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-code-o\"></span>\n            <div class=\"name\">\n              file-code-o\n            </div>\n            <div class=\"code-name\">.icon-file-code-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-movie-o\"></span>\n            <div class=\"name\">\n              file-movie-o\n            </div>\n            <div class=\"code-name\">.icon-file-movie-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-image-o\"></span>\n            <div class=\"name\">\n              file-image-o\n            </div>\n            <div class=\"code-name\">.icon-file-image-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-excel-o\"></span>\n            <div class=\"name\">\n              file-excel-o\n            </div>\n            <div class=\"code-name\">.icon-file-excel-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-o\"></span>\n            <div class=\"name\">\n              file-o\n            </div>\n            <div class=\"code-name\">.icon-file-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-photo-o\"></span>\n            <div class=\"name\">\n              file-photo-o\n            </div>\n            <div class=\"code-name\">.icon-file-photo-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-pdf-o\"></span>\n            <div class=\"name\">\n              file-pdf-o\n            </div>\n            <div class=\"code-name\">.icon-file-pdf-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-picture-o\"></span>\n            <div class=\"name\">\n              file-picture-o\n            </div>\n            <div class=\"code-name\">.icon-file-picture-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-sound-o\"></span>\n            <div class=\"name\">\n              file-sound-o\n            </div>\n            <div class=\"code-name\">.icon-file-sound-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-powerpoint-o\"></span>\n            <div class=\"name\">\n              file-powerpoint-o\n            </div>\n            <div class=\"code-name\">.icon-file-powerpoint-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-text\"></span>\n            <div class=\"name\">\n              file-text\n            </div>\n            <div class=\"code-name\">.icon-file-text\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-text-o\"></span>\n            <div class=\"name\">\n              file-text-o\n            </div>\n            <div class=\"code-name\">.icon-file-text-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file\"></span>\n            <div class=\"name\">\n              file\n            </div>\n            <div class=\"code-name\">.icon-file\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-video-o\"></span>\n            <div class=\"name\">\n              file-video-o\n            </div>\n            <div class=\"code-name\">.icon-file-video-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-files-o\"></span>\n            <div class=\"name\">\n              files-o\n            </div>\n            <div class=\"code-name\">.icon-files-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-zip-o\"></span>\n            <div class=\"name\">\n              file-zip-o\n            </div>\n            <div class=\"code-name\">.icon-file-zip-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-file-word-o\"></span>\n            <div class=\"name\">\n              file-word-o\n            </div>\n            <div class=\"code-name\">.icon-file-word-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-film\"></span>\n            <div class=\"name\">\n              film\n            </div>\n            <div class=\"code-name\">.icon-film\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-filter\"></span>\n            <div class=\"name\">\n              filter\n            </div>\n            <div class=\"code-name\">.icon-filter\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-fire\"></span>\n            <div class=\"name\">\n              fire\n            </div>\n            <div class=\"code-name\">.icon-fire\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-fire-extinguisher\"></span>\n            <div class=\"name\">\n              fire-extinguisher\n            </div>\n            <div class=\"code-name\">.icon-fire-extinguisher\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-flag-checkered\"></span>\n            <div class=\"name\">\n              flag-checkered\n            </div>\n            <div class=\"code-name\">.icon-flag-checkered\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-firefox\"></span>\n            <div class=\"name\">\n              firefox\n            </div>\n            <div class=\"code-name\">.icon-firefox\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-first-order\"></span>\n            <div class=\"name\">\n              first-order\n            </div>\n            <div class=\"code-name\">.icon-first-order\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-flash\"></span>\n            <div class=\"name\">\n              flash\n            </div>\n            <div class=\"code-name\">.icon-flash\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-flag\"></span>\n            <div class=\"name\">\n              flag\n            </div>\n            <div class=\"code-name\">.icon-flag\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-flag-o\"></span>\n            <div class=\"name\">\n              flag-o\n            </div>\n            <div class=\"code-name\">.icon-flag-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-flask\"></span>\n            <div class=\"name\">\n              flask\n            </div>\n            <div class=\"code-name\">.icon-flask\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-flickr\"></span>\n            <div class=\"name\">\n              flickr\n            </div>\n            <div class=\"code-name\">.icon-flickr\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-folder-open\"></span>\n            <div class=\"name\">\n              folder-open\n            </div>\n            <div class=\"code-name\">.icon-folder-open\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-folder-o\"></span>\n            <div class=\"name\">\n              folder-o\n            </div>\n            <div class=\"code-name\">.icon-folder-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-font-awesome\"></span>\n            <div class=\"name\">\n              font-awesome\n            </div>\n            <div class=\"code-name\">.icon-font-awesome\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-folder\"></span>\n            <div class=\"name\">\n              folder\n            </div>\n            <div class=\"code-name\">.icon-folder\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-floppy-o\"></span>\n            <div class=\"name\">\n              floppy-o\n            </div>\n            <div class=\"code-name\">.icon-floppy-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-folder-open-o\"></span>\n            <div class=\"name\">\n              folder-open-o\n            </div>\n            <div class=\"code-name\">.icon-folder-open-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-fonticons\"></span>\n            <div class=\"name\">\n              fonticons\n            </div>\n            <div class=\"code-name\">.icon-fonticons\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-font\"></span>\n            <div class=\"name\">\n              font\n            </div>\n            <div class=\"code-name\">.icon-font\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-forumbee\"></span>\n            <div class=\"name\">\n              forumbee\n            </div>\n            <div class=\"code-name\">.icon-forumbee\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-fort-awesome\"></span>\n            <div class=\"name\">\n              fort-awesome\n            </div>\n            <div class=\"code-name\">.icon-fort-awesome\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-forward\"></span>\n            <div class=\"name\">\n              forward\n            </div>\n            <div class=\"code-name\">.icon-forward\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-foursquare\"></span>\n            <div class=\"name\">\n              foursquare\n            </div>\n            <div class=\"code-name\">.icon-foursquare\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-free-code-camp\"></span>\n            <div class=\"name\">\n              free-code-camp\n            </div>\n            <div class=\"code-name\">.icon-free-code-camp\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-frown-o\"></span>\n            <div class=\"name\">\n              frown-o\n            </div>\n            <div class=\"code-name\">.icon-frown-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-futbol-o\"></span>\n            <div class=\"name\">\n              futbol-o\n            </div>\n            <div class=\"code-name\">.icon-futbol-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-gamepad\"></span>\n            <div class=\"name\">\n              gamepad\n            </div>\n            <div class=\"code-name\">.icon-gamepad\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-gavel\"></span>\n            <div class=\"name\">\n              gavel\n            </div>\n            <div class=\"code-name\">.icon-gavel\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-gbp\"></span>\n            <div class=\"name\">\n              gbp\n            </div>\n            <div class=\"code-name\">.icon-gbp\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-ge\"></span>\n            <div class=\"name\">\n              ge\n            </div>\n            <div class=\"code-name\">.icon-ge\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-gear\"></span>\n            <div class=\"name\">\n              gear\n            </div>\n            <div class=\"code-name\">.icon-gear\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-gears\"></span>\n            <div class=\"name\">\n              gears\n            </div>\n            <div class=\"code-name\">.icon-gears\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-genderless\"></span>\n            <div class=\"name\">\n              genderless\n            </div>\n            <div class=\"code-name\">.icon-genderless\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-get-pocket\"></span>\n            <div class=\"name\">\n              get-pocket\n            </div>\n            <div class=\"code-name\">.icon-get-pocket\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-gg-circle\"></span>\n            <div class=\"name\">\n              gg-circle\n            </div>\n            <div class=\"code-name\">.icon-gg-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-gift\"></span>\n            <div class=\"name\">\n              gift\n            </div>\n            <div class=\"code-name\">.icon-gift\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-gg\"></span>\n            <div class=\"name\">\n              gg\n            </div>\n            <div class=\"code-name\">.icon-gg\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-git-square\"></span>\n            <div class=\"name\">\n              git-square\n            </div>\n            <div class=\"code-name\">.icon-git-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-git\"></span>\n            <div class=\"name\">\n              git\n            </div>\n            <div class=\"code-name\">.icon-git\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-github-alt\"></span>\n            <div class=\"name\">\n              github-alt\n            </div>\n            <div class=\"code-name\">.icon-github-alt\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-github-square\"></span>\n            <div class=\"name\">\n              github-square\n            </div>\n            <div class=\"code-name\">.icon-github-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-github\"></span>\n            <div class=\"name\">\n              github\n            </div>\n            <div class=\"code-name\">.icon-github\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-gitlab\"></span>\n            <div class=\"name\">\n              gitlab\n            </div>\n            <div class=\"code-name\">.icon-gitlab\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-gittip\"></span>\n            <div class=\"name\">\n              gittip\n            </div>\n            <div class=\"code-name\">.icon-gittip\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-glass\"></span>\n            <div class=\"name\">\n              glass\n            </div>\n            <div class=\"code-name\">.icon-glass\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-glide-g\"></span>\n            <div class=\"name\">\n              glide-g\n            </div>\n            <div class=\"code-name\">.icon-glide-g\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-glide\"></span>\n            <div class=\"name\">\n              glide\n            </div>\n            <div class=\"code-name\">.icon-glide\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-globe\"></span>\n            <div class=\"name\">\n              globe\n            </div>\n            <div class=\"code-name\">.icon-globe\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-google-plus-circle\"></span>\n            <div class=\"name\">\n              google-plus-circle\n            </div>\n            <div class=\"code-name\">.icon-google-plus-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-google-plus-official\"></span>\n            <div class=\"name\">\n              google-plus-official\n            </div>\n            <div class=\"code-name\">.icon-google-plus-official\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-google-plus-square\"></span>\n            <div class=\"name\">\n              google-plus-square\n            </div>\n            <div class=\"code-name\">.icon-google-plus-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-google-plus\"></span>\n            <div class=\"name\">\n              google-plus\n            </div>\n            <div class=\"code-name\">.icon-google-plus\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-google-wallet\"></span>\n            <div class=\"name\">\n              google-wallet\n            </div>\n            <div class=\"code-name\">.icon-google-wallet\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-google\"></span>\n            <div class=\"name\">\n              google\n            </div>\n            <div class=\"code-name\">.icon-google\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-graduation-cap\"></span>\n            <div class=\"name\">\n              graduation-cap\n            </div>\n            <div class=\"code-name\">.icon-graduation-cap\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-gratipay\"></span>\n            <div class=\"name\">\n              gratipay\n            </div>\n            <div class=\"code-name\">.icon-gratipay\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-grav\"></span>\n            <div class=\"name\">\n              grav\n            </div>\n            <div class=\"code-name\">.icon-grav\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-group\"></span>\n            <div class=\"name\">\n              group\n            </div>\n            <div class=\"code-name\">.icon-group\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-h-square\"></span>\n            <div class=\"name\">\n              h-square\n            </div>\n            <div class=\"code-name\">.icon-h-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hacker-news\"></span>\n            <div class=\"name\">\n              hacker-news\n            </div>\n            <div class=\"code-name\">.icon-hacker-news\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hand-grab-o\"></span>\n            <div class=\"name\">\n              hand-grab-o\n            </div>\n            <div class=\"code-name\">.icon-hand-grab-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hand-o-left\"></span>\n            <div class=\"name\">\n              hand-o-left\n            </div>\n            <div class=\"code-name\">.icon-hand-o-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hand-lizard-o\"></span>\n            <div class=\"name\">\n              hand-lizard-o\n            </div>\n            <div class=\"code-name\">.icon-hand-lizard-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hand-o-down\"></span>\n            <div class=\"name\">\n              hand-o-down\n            </div>\n            <div class=\"code-name\">.icon-hand-o-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hand-o-right\"></span>\n            <div class=\"name\">\n              hand-o-right\n            </div>\n            <div class=\"code-name\">.icon-hand-o-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hand-o-up\"></span>\n            <div class=\"name\">\n              hand-o-up\n            </div>\n            <div class=\"code-name\">.icon-hand-o-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hand-paper-o\"></span>\n            <div class=\"name\">\n              hand-paper-o\n            </div>\n            <div class=\"code-name\">.icon-hand-paper-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hand-pointer-o\"></span>\n            <div class=\"name\">\n              hand-pointer-o\n            </div>\n            <div class=\"code-name\">.icon-hand-pointer-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hand-peace-o\"></span>\n            <div class=\"name\">\n              hand-peace-o\n            </div>\n            <div class=\"code-name\">.icon-hand-peace-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hand-spock-o\"></span>\n            <div class=\"name\">\n              hand-spock-o\n            </div>\n            <div class=\"code-name\">.icon-hand-spock-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hand-rock-o\"></span>\n            <div class=\"name\">\n              hand-rock-o\n            </div>\n            <div class=\"code-name\">.icon-hand-rock-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hand-scissors-o\"></span>\n            <div class=\"name\">\n              hand-scissors-o\n            </div>\n            <div class=\"code-name\">.icon-hand-scissors-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hand-stop-o\"></span>\n            <div class=\"name\">\n              hand-stop-o\n            </div>\n            <div class=\"code-name\">.icon-hand-stop-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hard-of-hearing\"></span>\n            <div class=\"name\">\n              hard-of-hearing\n            </div>\n            <div class=\"code-name\">.icon-hard-of-hearing\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-handshake-o\"></span>\n            <div class=\"name\">\n              handshake-o\n            </div>\n            <div class=\"code-name\">.icon-handshake-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hashtag\"></span>\n            <div class=\"name\">\n              hashtag\n            </div>\n            <div class=\"code-name\">.icon-hashtag\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-headphones\"></span>\n            <div class=\"name\">\n              headphones\n            </div>\n            <div class=\"code-name\">.icon-headphones\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-header\"></span>\n            <div class=\"name\">\n              header\n            </div>\n            <div class=\"code-name\">.icon-header\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hdd-o\"></span>\n            <div class=\"name\">\n              hdd-o\n            </div>\n            <div class=\"code-name\">.icon-hdd-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-heart-o\"></span>\n            <div class=\"name\">\n              heart-o\n            </div>\n            <div class=\"code-name\">.icon-heart-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-heart\"></span>\n            <div class=\"name\">\n              heart\n            </div>\n            <div class=\"code-name\">.icon-heart\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hotel\"></span>\n            <div class=\"name\">\n              hotel\n            </div>\n            <div class=\"code-name\">.icon-hotel\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-heartbeat\"></span>\n            <div class=\"name\">\n              heartbeat\n            </div>\n            <div class=\"code-name\">.icon-heartbeat\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hourglass-1\"></span>\n            <div class=\"name\">\n              hourglass-1\n            </div>\n            <div class=\"code-name\">.icon-hourglass-1\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-home\"></span>\n            <div class=\"name\">\n              home\n            </div>\n            <div class=\"code-name\">.icon-home\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-history\"></span>\n            <div class=\"name\">\n              history\n            </div>\n            <div class=\"code-name\">.icon-history\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hourglass-2\"></span>\n            <div class=\"name\">\n              hourglass-2\n            </div>\n            <div class=\"code-name\">.icon-hourglass-2\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hospital-o\"></span>\n            <div class=\"name\">\n              hospital-o\n            </div>\n            <div class=\"code-name\">.icon-hospital-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hourglass-3\"></span>\n            <div class=\"name\">\n              hourglass-3\n            </div>\n            <div class=\"code-name\">.icon-hourglass-3\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hourglass-half\"></span>\n            <div class=\"name\">\n              hourglass-half\n            </div>\n            <div class=\"code-name\">.icon-hourglass-half\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hourglass-end\"></span>\n            <div class=\"name\">\n              hourglass-end\n            </div>\n            <div class=\"code-name\">.icon-hourglass-end\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hourglass-o\"></span>\n            <div class=\"name\">\n              hourglass-o\n            </div>\n            <div class=\"code-name\">.icon-hourglass-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hourglass-start\"></span>\n            <div class=\"name\">\n              hourglass-start\n            </div>\n            <div class=\"code-name\">.icon-hourglass-start\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-houzz\"></span>\n            <div class=\"name\">\n              houzz\n            </div>\n            <div class=\"code-name\">.icon-houzz\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-html5\"></span>\n            <div class=\"name\">\n              html5\n            </div>\n            <div class=\"code-name\">.icon-html5\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-hourglass\"></span>\n            <div class=\"name\">\n              hourglass\n            </div>\n            <div class=\"code-name\">.icon-hourglass\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-id-badge\"></span>\n            <div class=\"name\">\n              id-badge\n            </div>\n            <div class=\"code-name\">.icon-id-badge\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-i-cursor\"></span>\n            <div class=\"name\">\n              i-cursor\n            </div>\n            <div class=\"code-name\">.icon-i-cursor\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-id-card\"></span>\n            <div class=\"name\">\n              id-card\n            </div>\n            <div class=\"code-name\">.icon-id-card\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-ils\"></span>\n            <div class=\"name\">\n              ils\n            </div>\n            <div class=\"code-name\">.icon-ils\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-id-card-o\"></span>\n            <div class=\"name\">\n              id-card-o\n            </div>\n            <div class=\"code-name\">.icon-id-card-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-image\"></span>\n            <div class=\"name\">\n              image\n            </div>\n            <div class=\"code-name\">.icon-image\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-inbox\"></span>\n            <div class=\"name\">\n              inbox\n            </div>\n            <div class=\"code-name\">.icon-inbox\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-indent\"></span>\n            <div class=\"name\">\n              indent\n            </div>\n            <div class=\"code-name\">.icon-indent\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-industry\"></span>\n            <div class=\"name\">\n              industry\n            </div>\n            <div class=\"code-name\">.icon-industry\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-imdb\"></span>\n            <div class=\"name\">\n              imdb\n            </div>\n            <div class=\"code-name\">.icon-imdb\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-info\"></span>\n            <div class=\"name\">\n              info\n            </div>\n            <div class=\"code-name\">.icon-info\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-institution\"></span>\n            <div class=\"name\">\n              institution\n            </div>\n            <div class=\"code-name\">.icon-institution\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-info-circle\"></span>\n            <div class=\"name\">\n              info-circle\n            </div>\n            <div class=\"code-name\">.icon-info-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-internet-explorer\"></span>\n            <div class=\"name\">\n              internet-explorer\n            </div>\n            <div class=\"code-name\">.icon-internet-explorer\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-inr\"></span>\n            <div class=\"name\">\n              inr\n            </div>\n            <div class=\"code-name\">.icon-inr\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-instagram\"></span>\n            <div class=\"name\">\n              instagram\n            </div>\n            <div class=\"code-name\">.icon-instagram\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-ioxhost\"></span>\n            <div class=\"name\">\n              ioxhost\n            </div>\n            <div class=\"code-name\">.icon-ioxhost\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-joomla\"></span>\n            <div class=\"name\">\n              joomla\n            </div>\n            <div class=\"code-name\">.icon-joomla\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-jpy\"></span>\n            <div class=\"name\">\n              jpy\n            </div>\n            <div class=\"code-name\">.icon-jpy\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-intersex\"></span>\n            <div class=\"name\">\n              intersex\n            </div>\n            <div class=\"code-name\">.icon-intersex\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-jsfiddle\"></span>\n            <div class=\"name\">\n              jsfiddle\n            </div>\n            <div class=\"code-name\">.icon-jsfiddle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-italic\"></span>\n            <div class=\"name\">\n              italic\n            </div>\n            <div class=\"code-name\">.icon-italic\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-key\"></span>\n            <div class=\"name\">\n              key\n            </div>\n            <div class=\"code-name\">.icon-key\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-keyboard-o\"></span>\n            <div class=\"name\">\n              keyboard-o\n            </div>\n            <div class=\"code-name\">.icon-keyboard-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-krw\"></span>\n            <div class=\"name\">\n              krw\n            </div>\n            <div class=\"code-name\">.icon-krw\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-laptop\"></span>\n            <div class=\"name\">\n              laptop\n            </div>\n            <div class=\"code-name\">.icon-laptop\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-language\"></span>\n            <div class=\"name\">\n              language\n            </div>\n            <div class=\"code-name\">.icon-language\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-leaf\"></span>\n            <div class=\"name\">\n              leaf\n            </div>\n            <div class=\"code-name\">.icon-leaf\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-lastfm\"></span>\n            <div class=\"name\">\n              lastfm\n            </div>\n            <div class=\"code-name\">.icon-lastfm\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-lastfm-square\"></span>\n            <div class=\"name\">\n              lastfm-square\n            </div>\n            <div class=\"code-name\">.icon-lastfm-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-legal\"></span>\n            <div class=\"name\">\n              legal\n            </div>\n            <div class=\"code-name\">.icon-legal\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-leanpub\"></span>\n            <div class=\"name\">\n              leanpub\n            </div>\n            <div class=\"code-name\">.icon-leanpub\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-level-down\"></span>\n            <div class=\"name\">\n              level-down\n            </div>\n            <div class=\"code-name\">.icon-level-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-level-up\"></span>\n            <div class=\"name\">\n              level-up\n            </div>\n            <div class=\"code-name\">.icon-level-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-life-ring\"></span>\n            <div class=\"name\">\n              life-ring\n            </div>\n            <div class=\"code-name\">.icon-life-ring\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-life-buoy\"></span>\n            <div class=\"name\">\n              life-buoy\n            </div>\n            <div class=\"code-name\">.icon-life-buoy\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-life-bouy\"></span>\n            <div class=\"name\">\n              life-bouy\n            </div>\n            <div class=\"code-name\">.icon-life-bouy\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-lemon-o\"></span>\n            <div class=\"name\">\n              lemon-o\n            </div>\n            <div class=\"code-name\">.icon-lemon-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-lightbulb-o\"></span>\n            <div class=\"name\">\n              lightbulb-o\n            </div>\n            <div class=\"code-name\">.icon-lightbulb-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-life-saver\"></span>\n            <div class=\"name\">\n              life-saver\n            </div>\n            <div class=\"code-name\">.icon-life-saver\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-line-chart\"></span>\n            <div class=\"name\">\n              line-chart\n            </div>\n            <div class=\"code-name\">.icon-line-chart\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-linkedin\"></span>\n            <div class=\"name\">\n              linkedin\n            </div>\n            <div class=\"code-name\">.icon-linkedin\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-linkedin-square\"></span>\n            <div class=\"name\">\n              linkedin-square\n            </div>\n            <div class=\"code-name\">.icon-linkedin-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-link\"></span>\n            <div class=\"name\">\n              link\n            </div>\n            <div class=\"code-name\">.icon-link\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-linode\"></span>\n            <div class=\"name\">\n              linode\n            </div>\n            <div class=\"code-name\">.icon-linode\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-list\"></span>\n            <div class=\"name\">\n              list\n            </div>\n            <div class=\"code-name\">.icon-list\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-list-ul\"></span>\n            <div class=\"name\">\n              list-ul\n            </div>\n            <div class=\"code-name\">.icon-list-ul\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-linux\"></span>\n            <div class=\"name\">\n              linux\n            </div>\n            <div class=\"code-name\">.icon-linux\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-list-ol\"></span>\n            <div class=\"name\">\n              list-ol\n            </div>\n            <div class=\"code-name\">.icon-list-ol\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-list-alt\"></span>\n            <div class=\"name\">\n              list-alt\n            </div>\n            <div class=\"code-name\">.icon-list-alt\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-location-arrow\"></span>\n            <div class=\"name\">\n              location-arrow\n            </div>\n            <div class=\"code-name\">.icon-location-arrow\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-lock\"></span>\n            <div class=\"name\">\n              lock\n            </div>\n            <div class=\"code-name\">.icon-lock\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-long-arrow-up\"></span>\n            <div class=\"name\">\n              long-arrow-up\n            </div>\n            <div class=\"code-name\">.icon-long-arrow-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-long-arrow-right\"></span>\n            <div class=\"name\">\n              long-arrow-right\n            </div>\n            <div class=\"code-name\">.icon-long-arrow-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-long-arrow-left\"></span>\n            <div class=\"name\">\n              long-arrow-left\n            </div>\n            <div class=\"code-name\">.icon-long-arrow-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-long-arrow-down\"></span>\n            <div class=\"name\">\n              long-arrow-down\n            </div>\n            <div class=\"code-name\">.icon-long-arrow-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-magic\"></span>\n            <div class=\"name\">\n              magic\n            </div>\n            <div class=\"code-name\">.icon-magic\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-magnet\"></span>\n            <div class=\"name\">\n              magnet\n            </div>\n            <div class=\"code-name\">.icon-magnet\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-low-vision\"></span>\n            <div class=\"name\">\n              low-vision\n            </div>\n            <div class=\"code-name\">.icon-low-vision\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-mail-reply-all\"></span>\n            <div class=\"name\">\n              mail-reply-all\n            </div>\n            <div class=\"code-name\">.icon-mail-reply-all\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-mail-reply\"></span>\n            <div class=\"name\">\n              mail-reply\n            </div>\n            <div class=\"code-name\">.icon-mail-reply\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-mail-forward\"></span>\n            <div class=\"name\">\n              mail-forward\n            </div>\n            <div class=\"code-name\">.icon-mail-forward\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-male\"></span>\n            <div class=\"name\">\n              male\n            </div>\n            <div class=\"code-name\">.icon-male\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-map-pin\"></span>\n            <div class=\"name\">\n              map-pin\n            </div>\n            <div class=\"code-name\">.icon-map-pin\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-map-o\"></span>\n            <div class=\"name\">\n              map-o\n            </div>\n            <div class=\"code-name\">.icon-map-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-map-marker\"></span>\n            <div class=\"name\">\n              map-marker\n            </div>\n            <div class=\"code-name\">.icon-map-marker\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-map\"></span>\n            <div class=\"name\">\n              map\n            </div>\n            <div class=\"code-name\">.icon-map\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-map-signs\"></span>\n            <div class=\"name\">\n              map-signs\n            </div>\n            <div class=\"code-name\">.icon-map-signs\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-mars-stroke-h\"></span>\n            <div class=\"name\">\n              mars-stroke-h\n            </div>\n            <div class=\"code-name\">.icon-mars-stroke-h\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-mars-stroke\"></span>\n            <div class=\"name\">\n              mars-stroke\n            </div>\n            <div class=\"code-name\">.icon-mars-stroke\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-mars-stroke-v\"></span>\n            <div class=\"name\">\n              mars-stroke-v\n            </div>\n            <div class=\"code-name\">.icon-mars-stroke-v\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-mars-double\"></span>\n            <div class=\"name\">\n              mars-double\n            </div>\n            <div class=\"code-name\">.icon-mars-double\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-mars\"></span>\n            <div class=\"name\">\n              mars\n            </div>\n            <div class=\"code-name\">.icon-mars\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-maxcdn\"></span>\n            <div class=\"name\">\n              maxcdn\n            </div>\n            <div class=\"code-name\">.icon-maxcdn\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-medium\"></span>\n            <div class=\"name\">\n              medium\n            </div>\n            <div class=\"code-name\">.icon-medium\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-medkit\"></span>\n            <div class=\"name\">\n              medkit\n            </div>\n            <div class=\"code-name\">.icon-medkit\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-meanpath\"></span>\n            <div class=\"name\">\n              meanpath\n            </div>\n            <div class=\"code-name\">.icon-meanpath\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-meetup\"></span>\n            <div class=\"name\">\n              meetup\n            </div>\n            <div class=\"code-name\">.icon-meetup\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-meh-o\"></span>\n            <div class=\"name\">\n              meh-o\n            </div>\n            <div class=\"code-name\">.icon-meh-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-mercury\"></span>\n            <div class=\"name\">\n              mercury\n            </div>\n            <div class=\"code-name\">.icon-mercury\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-microphone\"></span>\n            <div class=\"name\">\n              microphone\n            </div>\n            <div class=\"code-name\">.icon-microphone\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-minus-circle\"></span>\n            <div class=\"name\">\n              minus-circle\n            </div>\n            <div class=\"code-name\">.icon-minus-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-minus-square\"></span>\n            <div class=\"name\">\n              minus-square\n            </div>\n            <div class=\"code-name\">.icon-minus-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-minus-square-o\"></span>\n            <div class=\"name\">\n              minus-square-o\n            </div>\n            <div class=\"code-name\">.icon-minus-square-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-microchip\"></span>\n            <div class=\"name\">\n              microchip\n            </div>\n            <div class=\"code-name\">.icon-microchip\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-microphone-slash\"></span>\n            <div class=\"name\">\n              microphone-slash\n            </div>\n            <div class=\"code-name\">.icon-microphone-slash\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-minus\"></span>\n            <div class=\"name\">\n              minus\n            </div>\n            <div class=\"code-name\">.icon-minus\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-mixcloud\"></span>\n            <div class=\"name\">\n              mixcloud\n            </div>\n            <div class=\"code-name\">.icon-mixcloud\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-mobile\"></span>\n            <div class=\"name\">\n              mobile\n            </div>\n            <div class=\"code-name\">.icon-mobile\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-modx\"></span>\n            <div class=\"name\">\n              modx\n            </div>\n            <div class=\"code-name\">.icon-modx\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-money\"></span>\n            <div class=\"name\">\n              money\n            </div>\n            <div class=\"code-name\">.icon-money\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-moon-o\"></span>\n            <div class=\"name\">\n              moon-o\n            </div>\n            <div class=\"code-name\">.icon-moon-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-motorcycle\"></span>\n            <div class=\"name\">\n              motorcycle\n            </div>\n            <div class=\"code-name\">.icon-motorcycle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-mouse-pointer\"></span>\n            <div class=\"name\">\n              mouse-pointer\n            </div>\n            <div class=\"code-name\">.icon-mouse-pointer\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-mortar-board\"></span>\n            <div class=\"name\">\n              mortar-board\n            </div>\n            <div class=\"code-name\">.icon-mortar-board\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-navicon\"></span>\n            <div class=\"name\">\n              navicon\n            </div>\n            <div class=\"code-name\">.icon-navicon\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-neuter\"></span>\n            <div class=\"name\">\n              neuter\n            </div>\n            <div class=\"code-name\">.icon-neuter\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-music\"></span>\n            <div class=\"name\">\n              music\n            </div>\n            <div class=\"code-name\">.icon-music\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-object-group\"></span>\n            <div class=\"name\">\n              object-group\n            </div>\n            <div class=\"code-name\">.icon-object-group\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-newspaper-o\"></span>\n            <div class=\"name\">\n              newspaper-o\n            </div>\n            <div class=\"code-name\">.icon-newspaper-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-object-ungroup\"></span>\n            <div class=\"name\">\n              object-ungroup\n            </div>\n            <div class=\"code-name\">.icon-object-ungroup\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-odnoklassniki-square\"></span>\n            <div class=\"name\">\n              odnoklassniki-square\n            </div>\n            <div class=\"code-name\">.icon-odnoklassniki-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-odnoklassniki\"></span>\n            <div class=\"name\">\n              odnoklassniki\n            </div>\n            <div class=\"code-name\">.icon-odnoklassniki\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-opencart\"></span>\n            <div class=\"name\">\n              opencart\n            </div>\n            <div class=\"code-name\">.icon-opencart\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-openid\"></span>\n            <div class=\"name\">\n              openid\n            </div>\n            <div class=\"code-name\">.icon-openid\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-opera\"></span>\n            <div class=\"name\">\n              opera\n            </div>\n            <div class=\"code-name\">.icon-opera\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-paper-plane-o\"></span>\n            <div class=\"name\">\n              paper-plane-o\n            </div>\n            <div class=\"code-name\">.icon-paper-plane-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pagelines\"></span>\n            <div class=\"name\">\n              pagelines\n            </div>\n            <div class=\"code-name\">.icon-pagelines\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-outdent\"></span>\n            <div class=\"name\">\n              outdent\n            </div>\n            <div class=\"code-name\">.icon-outdent\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-paper-plane\"></span>\n            <div class=\"name\">\n              paper-plane\n            </div>\n            <div class=\"code-name\">.icon-paper-plane\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-paint-brush\"></span>\n            <div class=\"name\">\n              paint-brush\n            </div>\n            <div class=\"code-name\">.icon-paint-brush\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-paragraph\"></span>\n            <div class=\"name\">\n              paragraph\n            </div>\n            <div class=\"code-name\">.icon-paragraph\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-paperclip\"></span>\n            <div class=\"name\">\n              paperclip\n            </div>\n            <div class=\"code-name\">.icon-paperclip\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-optin-monster\"></span>\n            <div class=\"name\">\n              optin-monster\n            </div>\n            <div class=\"code-name\">.icon-optin-monster\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pause-circle-o\"></span>\n            <div class=\"name\">\n              pause-circle-o\n            </div>\n            <div class=\"code-name\">.icon-pause-circle-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-paste\"></span>\n            <div class=\"name\">\n              paste\n            </div>\n            <div class=\"code-name\">.icon-paste\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pause\"></span>\n            <div class=\"name\">\n              pause\n            </div>\n            <div class=\"code-name\">.icon-pause\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pause-circle\"></span>\n            <div class=\"name\">\n              pause-circle\n            </div>\n            <div class=\"code-name\">.icon-pause-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-paw\"></span>\n            <div class=\"name\">\n              paw\n            </div>\n            <div class=\"code-name\">.icon-paw\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-paypal\"></span>\n            <div class=\"name\">\n              paypal\n            </div>\n            <div class=\"code-name\">.icon-paypal\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pencil-square-o\"></span>\n            <div class=\"name\">\n              pencil-square-o\n            </div>\n            <div class=\"code-name\">.icon-pencil-square-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-percent\"></span>\n            <div class=\"name\">\n              percent\n            </div>\n            <div class=\"code-name\">.icon-percent\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pencil-square\"></span>\n            <div class=\"name\">\n              pencil-square\n            </div>\n            <div class=\"code-name\">.icon-pencil-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pencil\"></span>\n            <div class=\"name\">\n              pencil\n            </div>\n            <div class=\"code-name\">.icon-pencil\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-phone-square\"></span>\n            <div class=\"name\">\n              phone-square\n            </div>\n            <div class=\"code-name\">.icon-phone-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-phone\"></span>\n            <div class=\"name\">\n              phone\n            </div>\n            <div class=\"code-name\">.icon-phone\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-photo\"></span>\n            <div class=\"name\">\n              photo\n            </div>\n            <div class=\"code-name\">.icon-photo\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-picture-o\"></span>\n            <div class=\"name\">\n              picture-o\n            </div>\n            <div class=\"code-name\">.icon-picture-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pie-chart\"></span>\n            <div class=\"name\">\n              pie-chart\n            </div>\n            <div class=\"code-name\">.icon-pie-chart\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pied-piper-pp\"></span>\n            <div class=\"name\">\n              pied-piper-pp\n            </div>\n            <div class=\"code-name\">.icon-pied-piper-pp\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pied-piper-alt\"></span>\n            <div class=\"name\">\n              pied-piper-alt\n            </div>\n            <div class=\"code-name\">.icon-pied-piper-alt\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pinterest-p\"></span>\n            <div class=\"name\">\n              pinterest-p\n            </div>\n            <div class=\"code-name\">.icon-pinterest-p\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-plane\"></span>\n            <div class=\"name\">\n              plane\n            </div>\n            <div class=\"code-name\">.icon-plane\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-play-circle-o\"></span>\n            <div class=\"name\">\n              play-circle-o\n            </div>\n            <div class=\"code-name\">.icon-play-circle-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pied-piper\"></span>\n            <div class=\"name\">\n              pied-piper\n            </div>\n            <div class=\"code-name\">.icon-pied-piper\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pinterest\"></span>\n            <div class=\"name\">\n              pinterest\n            </div>\n            <div class=\"code-name\">.icon-pinterest\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pinterest-square\"></span>\n            <div class=\"name\">\n              pinterest-square\n            </div>\n            <div class=\"code-name\">.icon-pinterest-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-play\"></span>\n            <div class=\"name\">\n              play\n            </div>\n            <div class=\"code-name\">.icon-play\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-play-circle\"></span>\n            <div class=\"name\">\n              play-circle\n            </div>\n            <div class=\"code-name\">.icon-play-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-plug\"></span>\n            <div class=\"name\">\n              plug\n            </div>\n            <div class=\"code-name\">.icon-plug\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-plus-square-o\"></span>\n            <div class=\"name\">\n              plus-square-o\n            </div>\n            <div class=\"code-name\">.icon-plus-square-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-plus-square\"></span>\n            <div class=\"name\">\n              plus-square\n            </div>\n            <div class=\"code-name\">.icon-plus-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-plus-circle\"></span>\n            <div class=\"name\">\n              plus-circle\n            </div>\n            <div class=\"code-name\">.icon-plus-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-plus\"></span>\n            <div class=\"name\">\n              plus\n            </div>\n            <div class=\"code-name\">.icon-plus\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-product-hunt\"></span>\n            <div class=\"name\">\n              product-hunt\n            </div>\n            <div class=\"code-name\">.icon-product-hunt\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-print\"></span>\n            <div class=\"name\">\n              print\n            </div>\n            <div class=\"code-name\">.icon-print\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-puzzle-piece\"></span>\n            <div class=\"name\">\n              puzzle-piece\n            </div>\n            <div class=\"code-name\">.icon-puzzle-piece\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-podcast\"></span>\n            <div class=\"name\">\n              podcast\n            </div>\n            <div class=\"code-name\">.icon-podcast\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-power-off\"></span>\n            <div class=\"name\">\n              power-off\n            </div>\n            <div class=\"code-name\">.icon-power-off\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-qq\"></span>\n            <div class=\"name\">\n              qq\n            </div>\n            <div class=\"code-name\">.icon-qq\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-question\"></span>\n            <div class=\"name\">\n              question\n            </div>\n            <div class=\"code-name\">.icon-question\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-qrcode\"></span>\n            <div class=\"name\">\n              qrcode\n            </div>\n            <div class=\"code-name\">.icon-qrcode\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-quora\"></span>\n            <div class=\"name\">\n              quora\n            </div>\n            <div class=\"code-name\">.icon-quora\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-question-circle-o\"></span>\n            <div class=\"name\">\n              question-circle-o\n            </div>\n            <div class=\"code-name\">.icon-question-circle-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-question-circle\"></span>\n            <div class=\"name\">\n              question-circle\n            </div>\n            <div class=\"code-name\">.icon-question-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-quote-left\"></span>\n            <div class=\"name\">\n              quote-left\n            </div>\n            <div class=\"code-name\">.icon-quote-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-quote-right\"></span>\n            <div class=\"name\">\n              quote-right\n            </div>\n            <div class=\"code-name\">.icon-quote-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-ra\"></span>\n            <div class=\"name\">\n              ra\n            </div>\n            <div class=\"code-name\">.icon-ra\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-ravelry\"></span>\n            <div class=\"name\">\n              ravelry\n            </div>\n            <div class=\"code-name\">.icon-ravelry\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-rebel\"></span>\n            <div class=\"name\">\n              rebel\n            </div>\n            <div class=\"code-name\">.icon-rebel\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-random\"></span>\n            <div class=\"name\">\n              random\n            </div>\n            <div class=\"code-name\">.icon-random\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-reddit-square\"></span>\n            <div class=\"name\">\n              reddit-square\n            </div>\n            <div class=\"code-name\">.icon-reddit-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-reddit-alien\"></span>\n            <div class=\"name\">\n              reddit-alien\n            </div>\n            <div class=\"code-name\">.icon-reddit-alien\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-recycle\"></span>\n            <div class=\"name\">\n              recycle\n            </div>\n            <div class=\"code-name\">.icon-recycle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-reddit\"></span>\n            <div class=\"name\">\n              reddit\n            </div>\n            <div class=\"code-name\">.icon-reddit\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-registered\"></span>\n            <div class=\"name\">\n              registered\n            </div>\n            <div class=\"code-name\">.icon-registered\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-refresh\"></span>\n            <div class=\"name\">\n              refresh\n            </div>\n            <div class=\"code-name\">.icon-refresh\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-renren\"></span>\n            <div class=\"name\">\n              renren\n            </div>\n            <div class=\"code-name\">.icon-renren\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-reorder\"></span>\n            <div class=\"name\">\n              reorder\n            </div>\n            <div class=\"code-name\">.icon-reorder\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-repeat\"></span>\n            <div class=\"name\">\n              repeat\n            </div>\n            <div class=\"code-name\">.icon-repeat\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-reply-all\"></span>\n            <div class=\"name\">\n              reply-all\n            </div>\n            <div class=\"code-name\">.icon-reply-all\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-remove\"></span>\n            <div class=\"name\">\n              remove\n            </div>\n            <div class=\"code-name\">.icon-remove\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-rmb\"></span>\n            <div class=\"name\">\n              rmb\n            </div>\n            <div class=\"code-name\">.icon-rmb\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-resistance\"></span>\n            <div class=\"name\">\n              resistance\n            </div>\n            <div class=\"code-name\">.icon-resistance\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-road\"></span>\n            <div class=\"name\">\n              road\n            </div>\n            <div class=\"code-name\">.icon-road\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-retweet\"></span>\n            <div class=\"name\">\n              retweet\n            </div>\n            <div class=\"code-name\">.icon-retweet\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-reply\"></span>\n            <div class=\"name\">\n              reply\n            </div>\n            <div class=\"code-name\">.icon-reply\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-rocket\"></span>\n            <div class=\"name\">\n              rocket\n            </div>\n            <div class=\"code-name\">.icon-rocket\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-rotate-left\"></span>\n            <div class=\"name\">\n              rotate-left\n            </div>\n            <div class=\"code-name\">.icon-rotate-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-rouble\"></span>\n            <div class=\"name\">\n              rouble\n            </div>\n            <div class=\"code-name\">.icon-rouble\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-rotate-right\"></span>\n            <div class=\"name\">\n              rotate-right\n            </div>\n            <div class=\"code-name\">.icon-rotate-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-rss\"></span>\n            <div class=\"name\">\n              rss\n            </div>\n            <div class=\"code-name\">.icon-rss\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-rss-square\"></span>\n            <div class=\"name\">\n              rss-square\n            </div>\n            <div class=\"code-name\">.icon-rss-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-ruble\"></span>\n            <div class=\"name\">\n              ruble\n            </div>\n            <div class=\"code-name\">.icon-ruble\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-rub\"></span>\n            <div class=\"name\">\n              rub\n            </div>\n            <div class=\"code-name\">.icon-rub\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-s15\"></span>\n            <div class=\"name\">\n              s15\n            </div>\n            <div class=\"code-name\">.icon-s15\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-save\"></span>\n            <div class=\"name\">\n              save\n            </div>\n            <div class=\"code-name\">.icon-save\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-rupee\"></span>\n            <div class=\"name\">\n              rupee\n            </div>\n            <div class=\"code-name\">.icon-rupee\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-safari\"></span>\n            <div class=\"name\">\n              safari\n            </div>\n            <div class=\"code-name\">.icon-safari\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-scissors\"></span>\n            <div class=\"name\">\n              scissors\n            </div>\n            <div class=\"code-name\">.icon-scissors\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-scribd\"></span>\n            <div class=\"name\">\n              scribd\n            </div>\n            <div class=\"code-name\">.icon-scribd\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-search-plus\"></span>\n            <div class=\"name\">\n              search-plus\n            </div>\n            <div class=\"code-name\">.icon-search-plus\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-search\"></span>\n            <div class=\"name\">\n              search\n            </div>\n            <div class=\"code-name\">.icon-search\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sellsy\"></span>\n            <div class=\"name\">\n              sellsy\n            </div>\n            <div class=\"code-name\">.icon-sellsy\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-send\"></span>\n            <div class=\"name\">\n              send\n            </div>\n            <div class=\"code-name\">.icon-send\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-send-o\"></span>\n            <div class=\"name\">\n              send-o\n            </div>\n            <div class=\"code-name\">.icon-send-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-search-minus\"></span>\n            <div class=\"name\">\n              search-minus\n            </div>\n            <div class=\"code-name\">.icon-search-minus\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-server\"></span>\n            <div class=\"name\">\n              server\n            </div>\n            <div class=\"code-name\">.icon-server\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-share-alt-square\"></span>\n            <div class=\"name\">\n              share-alt-square\n            </div>\n            <div class=\"code-name\">.icon-share-alt-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-share-alt\"></span>\n            <div class=\"name\">\n              share-alt\n            </div>\n            <div class=\"code-name\">.icon-share-alt\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-share-square-o\"></span>\n            <div class=\"name\">\n              share-square-o\n            </div>\n            <div class=\"code-name\">.icon-share-square-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-share\"></span>\n            <div class=\"name\">\n              share\n            </div>\n            <div class=\"code-name\">.icon-share\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-share-square\"></span>\n            <div class=\"name\">\n              share-square\n            </div>\n            <div class=\"code-name\">.icon-share-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-shekel\"></span>\n            <div class=\"name\">\n              shekel\n            </div>\n            <div class=\"code-name\">.icon-shekel\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sheqel\"></span>\n            <div class=\"name\">\n              sheqel\n            </div>\n            <div class=\"code-name\">.icon-sheqel\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-shield\"></span>\n            <div class=\"name\">\n              shield\n            </div>\n            <div class=\"code-name\">.icon-shield\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-ship\"></span>\n            <div class=\"name\">\n              ship\n            </div>\n            <div class=\"code-name\">.icon-ship\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-shirtsinbulk\"></span>\n            <div class=\"name\">\n              shirtsinbulk\n            </div>\n            <div class=\"code-name\">.icon-shirtsinbulk\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-shower\"></span>\n            <div class=\"name\">\n              shower\n            </div>\n            <div class=\"code-name\">.icon-shower\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sign-in\"></span>\n            <div class=\"name\">\n              sign-in\n            </div>\n            <div class=\"code-name\">.icon-sign-in\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-shopping-basket\"></span>\n            <div class=\"name\">\n              shopping-basket\n            </div>\n            <div class=\"code-name\">.icon-shopping-basket\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-shopping-cart\"></span>\n            <div class=\"name\">\n              shopping-cart\n            </div>\n            <div class=\"code-name\">.icon-shopping-cart\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-shopping-bag\"></span>\n            <div class=\"name\">\n              shopping-bag\n            </div>\n            <div class=\"code-name\">.icon-shopping-bag\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sign-language\"></span>\n            <div class=\"name\">\n              sign-language\n            </div>\n            <div class=\"code-name\">.icon-sign-language\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sign-out\"></span>\n            <div class=\"name\">\n              sign-out\n            </div>\n            <div class=\"code-name\">.icon-sign-out\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-signal\"></span>\n            <div class=\"name\">\n              signal\n            </div>\n            <div class=\"code-name\">.icon-signal\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-simplybuilt\"></span>\n            <div class=\"name\">\n              simplybuilt\n            </div>\n            <div class=\"code-name\">.icon-simplybuilt\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sitemap\"></span>\n            <div class=\"name\">\n              sitemap\n            </div>\n            <div class=\"code-name\">.icon-sitemap\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-signing\"></span>\n            <div class=\"name\">\n              signing\n            </div>\n            <div class=\"code-name\">.icon-signing\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sliders\"></span>\n            <div class=\"name\">\n              sliders\n            </div>\n            <div class=\"code-name\">.icon-sliders\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-skype\"></span>\n            <div class=\"name\">\n              skype\n            </div>\n            <div class=\"code-name\">.icon-skype\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-skyatlas\"></span>\n            <div class=\"name\">\n              skyatlas\n            </div>\n            <div class=\"code-name\">.icon-skyatlas\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-slack\"></span>\n            <div class=\"name\">\n              slack\n            </div>\n            <div class=\"code-name\">.icon-slack\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-slideshare\"></span>\n            <div class=\"name\">\n              slideshare\n            </div>\n            <div class=\"code-name\">.icon-slideshare\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-snapchat-square\"></span>\n            <div class=\"name\">\n              snapchat-square\n            </div>\n            <div class=\"code-name\">.icon-snapchat-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-snapchat-ghost\"></span>\n            <div class=\"name\">\n              snapchat-ghost\n            </div>\n            <div class=\"code-name\">.icon-snapchat-ghost\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-smile-o\"></span>\n            <div class=\"name\">\n              smile-o\n            </div>\n            <div class=\"code-name\">.icon-smile-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-snapchat\"></span>\n            <div class=\"name\">\n              snapchat\n            </div>\n            <div class=\"code-name\">.icon-snapchat\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-snowflake-o\"></span>\n            <div class=\"name\">\n              snowflake-o\n            </div>\n            <div class=\"code-name\">.icon-snowflake-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-soccer-ball-o\"></span>\n            <div class=\"name\">\n              soccer-ball-o\n            </div>\n            <div class=\"code-name\">.icon-soccer-ball-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sort-alpha-asc\"></span>\n            <div class=\"name\">\n              sort-alpha-asc\n            </div>\n            <div class=\"code-name\">.icon-sort-alpha-asc\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sort-alpha-desc\"></span>\n            <div class=\"name\">\n              sort-alpha-desc\n            </div>\n            <div class=\"code-name\">.icon-sort-alpha-desc\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sort-amount-asc\"></span>\n            <div class=\"name\">\n              sort-amount-asc\n            </div>\n            <div class=\"code-name\">.icon-sort-amount-asc\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sort-desc\"></span>\n            <div class=\"name\">\n              sort-desc\n            </div>\n            <div class=\"code-name\">.icon-sort-desc\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sort-down\"></span>\n            <div class=\"name\">\n              sort-down\n            </div>\n            <div class=\"code-name\">.icon-sort-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sort-numeric-asc\"></span>\n            <div class=\"name\">\n              sort-numeric-asc\n            </div>\n            <div class=\"code-name\">.icon-sort-numeric-asc\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sort-asc\"></span>\n            <div class=\"name\">\n              sort-asc\n            </div>\n            <div class=\"code-name\">.icon-sort-asc\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sort-amount-desc\"></span>\n            <div class=\"name\">\n              sort-amount-desc\n            </div>\n            <div class=\"code-name\">.icon-sort-amount-desc\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sort-numeric-desc\"></span>\n            <div class=\"name\">\n              sort-numeric-desc\n            </div>\n            <div class=\"code-name\">.icon-sort-numeric-desc\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sort-up\"></span>\n            <div class=\"name\">\n              sort-up\n            </div>\n            <div class=\"code-name\">.icon-sort-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sort\"></span>\n            <div class=\"name\">\n              sort\n            </div>\n            <div class=\"code-name\">.icon-sort\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-soundcloud\"></span>\n            <div class=\"name\">\n              soundcloud\n            </div>\n            <div class=\"code-name\">.icon-soundcloud\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-space-shuttle\"></span>\n            <div class=\"name\">\n              space-shuttle\n            </div>\n            <div class=\"code-name\">.icon-space-shuttle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-spinner\"></span>\n            <div class=\"name\">\n              spinner\n            </div>\n            <div class=\"code-name\">.icon-spinner\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-spoon\"></span>\n            <div class=\"name\">\n              spoon\n            </div>\n            <div class=\"code-name\">.icon-spoon\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-square-o\"></span>\n            <div class=\"name\">\n              square-o\n            </div>\n            <div class=\"code-name\">.icon-square-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-spotify\"></span>\n            <div class=\"name\">\n              spotify\n            </div>\n            <div class=\"code-name\">.icon-spotify\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-square\"></span>\n            <div class=\"name\">\n              square\n            </div>\n            <div class=\"code-name\">.icon-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-stack-exchange\"></span>\n            <div class=\"name\">\n              stack-exchange\n            </div>\n            <div class=\"code-name\">.icon-stack-exchange\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-star-half-empty\"></span>\n            <div class=\"name\">\n              star-half-empty\n            </div>\n            <div class=\"code-name\">.icon-star-half-empty\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-stack-overflow\"></span>\n            <div class=\"name\">\n              stack-overflow\n            </div>\n            <div class=\"code-name\">.icon-stack-overflow\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-star-half\"></span>\n            <div class=\"name\">\n              star-half\n            </div>\n            <div class=\"code-name\">.icon-star-half\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-star\"></span>\n            <div class=\"name\">\n              star\n            </div>\n            <div class=\"code-name\">.icon-star\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-star-half-o\"></span>\n            <div class=\"name\">\n              star-half-o\n            </div>\n            <div class=\"code-name\">.icon-star-half-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-star-o\"></span>\n            <div class=\"name\">\n              star-o\n            </div>\n            <div class=\"code-name\">.icon-star-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-star-half-full\"></span>\n            <div class=\"name\">\n              star-half-full\n            </div>\n            <div class=\"code-name\">.icon-star-half-full\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sticky-note-o\"></span>\n            <div class=\"name\">\n              sticky-note-o\n            </div>\n            <div class=\"code-name\">.icon-sticky-note-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-step-forward\"></span>\n            <div class=\"name\">\n              step-forward\n            </div>\n            <div class=\"code-name\">.icon-step-forward\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-steam\"></span>\n            <div class=\"name\">\n              steam\n            </div>\n            <div class=\"code-name\">.icon-steam\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-steam-square\"></span>\n            <div class=\"name\">\n              steam-square\n            </div>\n            <div class=\"code-name\">.icon-steam-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-stethoscope\"></span>\n            <div class=\"name\">\n              stethoscope\n            </div>\n            <div class=\"code-name\">.icon-stethoscope\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-step-backward\"></span>\n            <div class=\"name\">\n              step-backward\n            </div>\n            <div class=\"code-name\">.icon-step-backward\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-stop\"></span>\n            <div class=\"name\">\n              stop\n            </div>\n            <div class=\"code-name\">.icon-stop\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-stop-circle\"></span>\n            <div class=\"name\">\n              stop-circle\n            </div>\n            <div class=\"code-name\">.icon-stop-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-stop-circle-o\"></span>\n            <div class=\"name\">\n              stop-circle-o\n            </div>\n            <div class=\"code-name\">.icon-stop-circle-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sticky-note\"></span>\n            <div class=\"name\">\n              sticky-note\n            </div>\n            <div class=\"code-name\">.icon-sticky-note\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-street-view\"></span>\n            <div class=\"name\">\n              street-view\n            </div>\n            <div class=\"code-name\">.icon-street-view\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-strikethrough\"></span>\n            <div class=\"name\">\n              strikethrough\n            </div>\n            <div class=\"code-name\">.icon-strikethrough\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-stumbleupon\"></span>\n            <div class=\"name\">\n              stumbleupon\n            </div>\n            <div class=\"code-name\">.icon-stumbleupon\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-subway\"></span>\n            <div class=\"name\">\n              subway\n            </div>\n            <div class=\"code-name\">.icon-subway\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-stumbleupon-circle\"></span>\n            <div class=\"name\">\n              stumbleupon-circle\n            </div>\n            <div class=\"code-name\">.icon-stumbleupon-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-suitcase\"></span>\n            <div class=\"name\">\n              suitcase\n            </div>\n            <div class=\"code-name\">.icon-suitcase\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-subscript\"></span>\n            <div class=\"name\">\n              subscript\n            </div>\n            <div class=\"code-name\">.icon-subscript\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-sun-o\"></span>\n            <div class=\"name\">\n              sun-o\n            </div>\n            <div class=\"code-name\">.icon-sun-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-superpowers\"></span>\n            <div class=\"name\">\n              superpowers\n            </div>\n            <div class=\"code-name\">.icon-superpowers\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tablet\"></span>\n            <div class=\"name\">\n              tablet\n            </div>\n            <div class=\"code-name\">.icon-tablet\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-table\"></span>\n            <div class=\"name\">\n              table\n            </div>\n            <div class=\"code-name\">.icon-table\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-support\"></span>\n            <div class=\"name\">\n              support\n            </div>\n            <div class=\"code-name\">.icon-support\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-superscript\"></span>\n            <div class=\"name\">\n              superscript\n            </div>\n            <div class=\"code-name\">.icon-superscript\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tasks\"></span>\n            <div class=\"name\">\n              tasks\n            </div>\n            <div class=\"code-name\">.icon-tasks\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tags\"></span>\n            <div class=\"name\">\n              tags\n            </div>\n            <div class=\"code-name\">.icon-tags\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tag\"></span>\n            <div class=\"name\">\n              tag\n            </div>\n            <div class=\"code-name\">.icon-tag\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tachometer\"></span>\n            <div class=\"name\">\n              tachometer\n            </div>\n            <div class=\"code-name\">.icon-tachometer\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-telegram\"></span>\n            <div class=\"name\">\n              telegram\n            </div>\n            <div class=\"code-name\">.icon-telegram\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-taxi\"></span>\n            <div class=\"name\">\n              taxi\n            </div>\n            <div class=\"code-name\">.icon-taxi\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-terminal\"></span>\n            <div class=\"name\">\n              terminal\n            </div>\n            <div class=\"code-name\">.icon-terminal\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tencent-weibo\"></span>\n            <div class=\"name\">\n              tencent-weibo\n            </div>\n            <div class=\"code-name\">.icon-tencent-weibo\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-television\"></span>\n            <div class=\"name\">\n              television\n            </div>\n            <div class=\"code-name\">.icon-television\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-text-height\"></span>\n            <div class=\"name\">\n              text-height\n            </div>\n            <div class=\"code-name\">.icon-text-height\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-text-width\"></span>\n            <div class=\"name\">\n              text-width\n            </div>\n            <div class=\"code-name\">.icon-text-width\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-th-large\"></span>\n            <div class=\"name\">\n              th-large\n            </div>\n            <div class=\"code-name\">.icon-th-large\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-th-list\"></span>\n            <div class=\"name\">\n              th-list\n            </div>\n            <div class=\"code-name\">.icon-th-list\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thermometer-0\"></span>\n            <div class=\"name\">\n              thermometer-0\n            </div>\n            <div class=\"code-name\">.icon-thermometer-0\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-th\"></span>\n            <div class=\"name\">\n              th\n            </div>\n            <div class=\"code-name\">.icon-th\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-themeisle\"></span>\n            <div class=\"name\">\n              themeisle\n            </div>\n            <div class=\"code-name\">.icon-themeisle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thermometer-1\"></span>\n            <div class=\"name\">\n              thermometer-1\n            </div>\n            <div class=\"code-name\">.icon-thermometer-1\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thermometer-2\"></span>\n            <div class=\"name\">\n              thermometer-2\n            </div>\n            <div class=\"code-name\">.icon-thermometer-2\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thermometer-3\"></span>\n            <div class=\"name\">\n              thermometer-3\n            </div>\n            <div class=\"code-name\">.icon-thermometer-3\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thermometer-4\"></span>\n            <div class=\"name\">\n              thermometer-4\n            </div>\n            <div class=\"code-name\">.icon-thermometer-4\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thermometer-empty\"></span>\n            <div class=\"name\">\n              thermometer-empty\n            </div>\n            <div class=\"code-name\">.icon-thermometer-empty\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thermometer-full\"></span>\n            <div class=\"name\">\n              thermometer-full\n            </div>\n            <div class=\"code-name\">.icon-thermometer-full\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thermometer-half\"></span>\n            <div class=\"name\">\n              thermometer-half\n            </div>\n            <div class=\"code-name\">.icon-thermometer-half\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thumb-tack\"></span>\n            <div class=\"name\">\n              thumb-tack\n            </div>\n            <div class=\"code-name\">.icon-thumb-tack\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thermometer-three-quarters\"></span>\n            <div class=\"name\">\n              thermometer-three-quarters\n            </div>\n            <div class=\"code-name\">.icon-thermometer-three-quarters\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thermometer-quarter\"></span>\n            <div class=\"name\">\n              thermometer-quarter\n            </div>\n            <div class=\"code-name\">.icon-thermometer-quarter\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thermometer\"></span>\n            <div class=\"name\">\n              thermometer\n            </div>\n            <div class=\"code-name\">.icon-thermometer\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thumbs-down\"></span>\n            <div class=\"name\">\n              thumbs-down\n            </div>\n            <div class=\"code-name\">.icon-thumbs-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-times-circle\"></span>\n            <div class=\"name\">\n              times-circle\n            </div>\n            <div class=\"code-name\">.icon-times-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thumbs-up\"></span>\n            <div class=\"name\">\n              thumbs-up\n            </div>\n            <div class=\"code-name\">.icon-thumbs-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-ticket\"></span>\n            <div class=\"name\">\n              ticket\n            </div>\n            <div class=\"code-name\">.icon-ticket\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thumbs-o-down\"></span>\n            <div class=\"name\">\n              thumbs-o-down\n            </div>\n            <div class=\"code-name\">.icon-thumbs-o-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-thumbs-o-up\"></span>\n            <div class=\"name\">\n              thumbs-o-up\n            </div>\n            <div class=\"code-name\">.icon-thumbs-o-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-times-circle-o\"></span>\n            <div class=\"name\">\n              times-circle-o\n            </div>\n            <div class=\"code-name\">.icon-times-circle-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-times-rectangle-o\"></span>\n            <div class=\"name\">\n              times-rectangle-o\n            </div>\n            <div class=\"code-name\">.icon-times-rectangle-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-times-rectangle\"></span>\n            <div class=\"name\">\n              times-rectangle\n            </div>\n            <div class=\"code-name\">.icon-times-rectangle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-times\"></span>\n            <div class=\"name\">\n              times\n            </div>\n            <div class=\"code-name\">.icon-times\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tint\"></span>\n            <div class=\"name\">\n              tint\n            </div>\n            <div class=\"code-name\">.icon-tint\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-toggle-left\"></span>\n            <div class=\"name\">\n              toggle-left\n            </div>\n            <div class=\"code-name\">.icon-toggle-left\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-toggle-down\"></span>\n            <div class=\"name\">\n              toggle-down\n            </div>\n            <div class=\"code-name\">.icon-toggle-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-toggle-off\"></span>\n            <div class=\"name\">\n              toggle-off\n            </div>\n            <div class=\"code-name\">.icon-toggle-off\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-toggle-right\"></span>\n            <div class=\"name\">\n              toggle-right\n            </div>\n            <div class=\"code-name\">.icon-toggle-right\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-toggle-on\"></span>\n            <div class=\"name\">\n              toggle-on\n            </div>\n            <div class=\"code-name\">.icon-toggle-on\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-toggle-up\"></span>\n            <div class=\"name\">\n              toggle-up\n            </div>\n            <div class=\"code-name\">.icon-toggle-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-transgender-alt\"></span>\n            <div class=\"name\">\n              transgender-alt\n            </div>\n            <div class=\"code-name\">.icon-transgender-alt\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-trademark\"></span>\n            <div class=\"name\">\n              trademark\n            </div>\n            <div class=\"code-name\">.icon-trademark\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-train\"></span>\n            <div class=\"name\">\n              train\n            </div>\n            <div class=\"code-name\">.icon-train\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-trash-o\"></span>\n            <div class=\"name\">\n              trash-o\n            </div>\n            <div class=\"code-name\">.icon-trash-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-trash\"></span>\n            <div class=\"name\">\n              trash\n            </div>\n            <div class=\"code-name\">.icon-trash\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-transgender\"></span>\n            <div class=\"name\">\n              transgender\n            </div>\n            <div class=\"code-name\">.icon-transgender\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tree\"></span>\n            <div class=\"name\">\n              tree\n            </div>\n            <div class=\"code-name\">.icon-tree\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-try\"></span>\n            <div class=\"name\">\n              try\n            </div>\n            <div class=\"code-name\">.icon-try\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-trello\"></span>\n            <div class=\"name\">\n              trello\n            </div>\n            <div class=\"code-name\">.icon-trello\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-trophy\"></span>\n            <div class=\"name\">\n              trophy\n            </div>\n            <div class=\"code-name\">.icon-trophy\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tty\"></span>\n            <div class=\"name\">\n              tty\n            </div>\n            <div class=\"code-name\">.icon-tty\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-truck\"></span>\n            <div class=\"name\">\n              truck\n            </div>\n            <div class=\"code-name\">.icon-truck\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tripadvisor\"></span>\n            <div class=\"name\">\n              tripadvisor\n            </div>\n            <div class=\"code-name\">.icon-tripadvisor\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tumblr-square\"></span>\n            <div class=\"name\">\n              tumblr-square\n            </div>\n            <div class=\"code-name\">.icon-tumblr-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-turkish-lira\"></span>\n            <div class=\"name\">\n              turkish-lira\n            </div>\n            <div class=\"code-name\">.icon-turkish-lira\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tumblr\"></span>\n            <div class=\"name\">\n              tumblr\n            </div>\n            <div class=\"code-name\">.icon-tumblr\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tv\"></span>\n            <div class=\"name\">\n              tv\n            </div>\n            <div class=\"code-name\">.icon-tv\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-twitter\"></span>\n            <div class=\"name\">\n              twitter\n            </div>\n            <div class=\"code-name\">.icon-twitter\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-twitter-square\"></span>\n            <div class=\"name\">\n              twitter-square\n            </div>\n            <div class=\"code-name\">.icon-twitter-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-twitch\"></span>\n            <div class=\"name\">\n              twitch\n            </div>\n            <div class=\"code-name\">.icon-twitch\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-underline\"></span>\n            <div class=\"name\">\n              underline\n            </div>\n            <div class=\"code-name\">.icon-underline\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-umbrella\"></span>\n            <div class=\"name\">\n              umbrella\n            </div>\n            <div class=\"code-name\">.icon-umbrella\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-undo\"></span>\n            <div class=\"name\">\n              undo\n            </div>\n            <div class=\"code-name\">.icon-undo\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-unlink\"></span>\n            <div class=\"name\">\n              unlink\n            </div>\n            <div class=\"code-name\">.icon-unlink\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-university\"></span>\n            <div class=\"name\">\n              university\n            </div>\n            <div class=\"code-name\">.icon-university\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-universal-access\"></span>\n            <div class=\"name\">\n              universal-access\n            </div>\n            <div class=\"code-name\">.icon-universal-access\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-unlock-alt\"></span>\n            <div class=\"name\">\n              unlock-alt\n            </div>\n            <div class=\"code-name\">.icon-unlock-alt\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-unlock\"></span>\n            <div class=\"name\">\n              unlock\n            </div>\n            <div class=\"code-name\">.icon-unlock\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-upload\"></span>\n            <div class=\"name\">\n              upload\n            </div>\n            <div class=\"code-name\">.icon-upload\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-unsorted\"></span>\n            <div class=\"name\">\n              unsorted\n            </div>\n            <div class=\"code-name\">.icon-unsorted\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-usd\"></span>\n            <div class=\"name\">\n              usd\n            </div>\n            <div class=\"code-name\">.icon-usd\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-usb\"></span>\n            <div class=\"name\">\n              usb\n            </div>\n            <div class=\"code-name\">.icon-usb\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-user-circle\"></span>\n            <div class=\"name\">\n              user-circle\n            </div>\n            <div class=\"code-name\">.icon-user-circle\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-user-o\"></span>\n            <div class=\"name\">\n              user-o\n            </div>\n            <div class=\"code-name\">.icon-user-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-user-circle-o\"></span>\n            <div class=\"name\">\n              user-circle-o\n            </div>\n            <div class=\"code-name\">.icon-user-circle-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-user-plus\"></span>\n            <div class=\"name\">\n              user-plus\n            </div>\n            <div class=\"code-name\">.icon-user-plus\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-user-md\"></span>\n            <div class=\"name\">\n              user-md\n            </div>\n            <div class=\"code-name\">.icon-user-md\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-user-secret\"></span>\n            <div class=\"name\">\n              user-secret\n            </div>\n            <div class=\"code-name\">.icon-user-secret\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-user\"></span>\n            <div class=\"name\">\n              user\n            </div>\n            <div class=\"code-name\">.icon-user\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-user-times\"></span>\n            <div class=\"name\">\n              user-times\n            </div>\n            <div class=\"code-name\">.icon-user-times\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-users\"></span>\n            <div class=\"name\">\n              users\n            </div>\n            <div class=\"code-name\">.icon-users\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-vcard-o\"></span>\n            <div class=\"name\">\n              vcard-o\n            </div>\n            <div class=\"code-name\">.icon-vcard-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-vcard\"></span>\n            <div class=\"name\">\n              vcard\n            </div>\n            <div class=\"code-name\">.icon-vcard\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-venus\"></span>\n            <div class=\"name\">\n              venus\n            </div>\n            <div class=\"code-name\">.icon-venus\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-venus-mars\"></span>\n            <div class=\"name\">\n              venus-mars\n            </div>\n            <div class=\"code-name\">.icon-venus-mars\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-venus-double\"></span>\n            <div class=\"name\">\n              venus-double\n            </div>\n            <div class=\"code-name\">.icon-venus-double\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-viadeo-square\"></span>\n            <div class=\"name\">\n              viadeo-square\n            </div>\n            <div class=\"code-name\">.icon-viadeo-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-viacoin\"></span>\n            <div class=\"name\">\n              viacoin\n            </div>\n            <div class=\"code-name\">.icon-viacoin\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-viadeo\"></span>\n            <div class=\"name\">\n              viadeo\n            </div>\n            <div class=\"code-name\">.icon-viadeo\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-video-camera\"></span>\n            <div class=\"name\">\n              video-camera\n            </div>\n            <div class=\"code-name\">.icon-video-camera\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-vimeo-square\"></span>\n            <div class=\"name\">\n              vimeo-square\n            </div>\n            <div class=\"code-name\">.icon-vimeo-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-vine\"></span>\n            <div class=\"name\">\n              vine\n            </div>\n            <div class=\"code-name\">.icon-vine\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-vimeo\"></span>\n            <div class=\"name\">\n              vimeo\n            </div>\n            <div class=\"code-name\">.icon-vimeo\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-vk\"></span>\n            <div class=\"name\">\n              vk\n            </div>\n            <div class=\"code-name\">.icon-vk\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-volume-control-phone\"></span>\n            <div class=\"name\">\n              volume-control-phone\n            </div>\n            <div class=\"code-name\">.icon-volume-control-phone\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-volume-off\"></span>\n            <div class=\"name\">\n              volume-off\n            </div>\n            <div class=\"code-name\">.icon-volume-off\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-volume-down\"></span>\n            <div class=\"name\">\n              volume-down\n            </div>\n            <div class=\"code-name\">.icon-volume-down\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-warning\"></span>\n            <div class=\"name\">\n              warning\n            </div>\n            <div class=\"code-name\">.icon-warning\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-volume-up\"></span>\n            <div class=\"name\">\n              volume-up\n            </div>\n            <div class=\"code-name\">.icon-volume-up\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-wechat\"></span>\n            <div class=\"name\">\n              wechat\n            </div>\n            <div class=\"code-name\">.icon-wechat\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-weibo\"></span>\n            <div class=\"name\">\n              weibo\n            </div>\n            <div class=\"code-name\">.icon-weibo\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-whatsapp\"></span>\n            <div class=\"name\">\n              whatsapp\n            </div>\n            <div class=\"code-name\">.icon-whatsapp\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-weixin\"></span>\n            <div class=\"name\">\n              weixin\n            </div>\n            <div class=\"code-name\">.icon-weixin\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-wheelchair-alt\"></span>\n            <div class=\"name\">\n              wheelchair-alt\n            </div>\n            <div class=\"code-name\">.icon-wheelchair-alt\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-wheelchair\"></span>\n            <div class=\"name\">\n              wheelchair\n            </div>\n            <div class=\"code-name\">.icon-wheelchair\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-wikipedia-w\"></span>\n            <div class=\"name\">\n              wikipedia-w\n            </div>\n            <div class=\"code-name\">.icon-wikipedia-w\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-wifi\"></span>\n            <div class=\"name\">\n              wifi\n            </div>\n            <div class=\"code-name\">.icon-wifi\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-window-close\"></span>\n            <div class=\"name\">\n              window-close\n            </div>\n            <div class=\"code-name\">.icon-window-close\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-window-close-o\"></span>\n            <div class=\"name\">\n              window-close-o\n            </div>\n            <div class=\"code-name\">.icon-window-close-o\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-window-maximize\"></span>\n            <div class=\"name\">\n              window-maximize\n            </div>\n            <div class=\"code-name\">.icon-window-maximize\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-window-minimize\"></span>\n            <div class=\"name\">\n              window-minimize\n            </div>\n            <div class=\"code-name\">.icon-window-minimize\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-window-restore\"></span>\n            <div class=\"name\">\n              window-restore\n            </div>\n            <div class=\"code-name\">.icon-window-restore\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-windows\"></span>\n            <div class=\"name\">\n              windows\n            </div>\n            <div class=\"code-name\">.icon-windows\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-won\"></span>\n            <div class=\"name\">\n              won\n            </div>\n            <div class=\"code-name\">.icon-won\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-wordpress\"></span>\n            <div class=\"name\">\n              wordpress\n            </div>\n            <div class=\"code-name\">.icon-wordpress\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-wpexplorer\"></span>\n            <div class=\"name\">\n              wpexplorer\n            </div>\n            <div class=\"code-name\">.icon-wpexplorer\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-wpbeginner\"></span>\n            <div class=\"name\">\n              wpbeginner\n            </div>\n            <div class=\"code-name\">.icon-wpbeginner\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-xing-square\"></span>\n            <div class=\"name\">\n              xing-square\n            </div>\n            <div class=\"code-name\">.icon-xing-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-wrench\"></span>\n            <div class=\"name\">\n              wrench\n            </div>\n            <div class=\"code-name\">.icon-wrench\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-wpforms\"></span>\n            <div class=\"name\">\n              wpforms\n            </div>\n            <div class=\"code-name\">.icon-wpforms\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-y-combinator\"></span>\n            <div class=\"name\">\n              y-combinator\n            </div>\n            <div class=\"code-name\">.icon-y-combinator\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-xing\"></span>\n            <div class=\"name\">\n              xing\n            </div>\n            <div class=\"code-name\">.icon-xing\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-y-combinator-square\"></span>\n            <div class=\"name\">\n              y-combinator-square\n            </div>\n            <div class=\"code-name\">.icon-y-combinator-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-yahoo\"></span>\n            <div class=\"name\">\n              yahoo\n            </div>\n            <div class=\"code-name\">.icon-yahoo\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-yc\"></span>\n            <div class=\"name\">\n              yc\n            </div>\n            <div class=\"code-name\">.icon-yc\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-yc-square\"></span>\n            <div class=\"name\">\n              yc-square\n            </div>\n            <div class=\"code-name\">.icon-yc-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-yen\"></span>\n            <div class=\"name\">\n              yen\n            </div>\n            <div class=\"code-name\">.icon-yen\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-yelp\"></span>\n            <div class=\"name\">\n              yelp\n            </div>\n            <div class=\"code-name\">.icon-yelp\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-yoast\"></span>\n            <div class=\"name\">\n              yoast\n            </div>\n            <div class=\"code-name\">.icon-yoast\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-youtube-play\"></span>\n            <div class=\"name\">\n              youtube-play\n            </div>\n            <div class=\"code-name\">.icon-youtube-play\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-youtube-square\"></span>\n            <div class=\"name\">\n              youtube-square\n            </div>\n            <div class=\"code-name\">.icon-youtube-square\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-youtube\"></span>\n            <div class=\"name\">\n              youtube\n            </div>\n            <div class=\"code-name\">.icon-youtube\n            </div>\n          </li>\n          \n        </ul>\n        <div class=\"article markdown\">\n        <h2 id=\"font-class-\">font-class 引用</h2>\n        <hr>\n\n        <p>font-class 是 Unicode 使用方式的一种变种，主要是解决 Unicode 书写不直观，语意不明确的问题。</p>\n        <p>与 Unicode 使用方式相比，具有如下特点：</p>\n        <ul>\n          <li>兼容性良好，支持 IE8+，及所有现代浏览器。</li>\n          <li>相比于 Unicode 语意明确，书写更直观。可以很容易分辨这个 icon 是什么。</li>\n          <li>因为使用 class 来定义图标，所以当要替换图标时，只需要修改 class 里面的 Unicode 引用。</li>\n          <li>不过因为本质上还是使用的字体，所以多色图标还是不支持的。</li>\n        </ul>\n        <p>使用步骤如下：</p>\n        <h3 id=\"-fontclass-\">第一步：引入项目下面生成的 fontclass 代码：</h3>\n<pre><code class=\"language-html\">&lt;link rel=\"stylesheet\" href=\"./iconfont.css\"&gt;\n</code></pre>\n        <h3 id=\"-\">第二步：挑选相应图标并获取类名，应用于页面：</h3>\n<pre><code class=\"language-html\">&lt;span class=\"iconfont icon-xxx\"&gt;&lt;/span&gt;\n</code></pre>\n        <blockquote>\n          <p>\"\n            iconfont\" 是你项目下的 font-family。可以通过编辑项目查看，默认是 \"iconfont\"。</p>\n        </blockquote>\n      </div>\n      </div>\n      <div class=\"content symbol\">\n          <ul class=\"icon_lists dib-box\">\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bars\"></use>\n                </svg>\n                <div class=\"name\">bars</div>\n                <div class=\"code-name\">#icon-bars</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-calendar\"></use>\n                </svg>\n                <div class=\"name\">calendar</div>\n                <div class=\"code-name\">#icon-calendar</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-camera\"></use>\n                </svg>\n                <div class=\"name\">camera</div>\n                <div class=\"code-name\">#icon-camera</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-check\"></use>\n                </svg>\n                <div class=\"name\">check</div>\n                <div class=\"code-name\">#icon-check</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-check-square-o\"></use>\n                </svg>\n                <div class=\"name\">check-square-o</div>\n                <div class=\"code-name\">#icon-check-square-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-clock-o\"></use>\n                </svg>\n                <div class=\"name\">clock-o</div>\n                <div class=\"code-name\">#icon-clock-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-500px\"></use>\n                </svg>\n                <div class=\"name\">500px</div>\n                <div class=\"code-name\">#icon-500px</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-address-book-o\"></use>\n                </svg>\n                <div class=\"name\">address-book-o</div>\n                <div class=\"code-name\">#icon-address-book-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-address-book\"></use>\n                </svg>\n                <div class=\"name\">address-book</div>\n                <div class=\"code-name\">#icon-address-book</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-address-card-o\"></use>\n                </svg>\n                <div class=\"name\">address-card-o</div>\n                <div class=\"code-name\">#icon-address-card-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-address-card\"></use>\n                </svg>\n                <div class=\"name\">address-card</div>\n                <div class=\"code-name\">#icon-address-card</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-adjust\"></use>\n                </svg>\n                <div class=\"name\">adjust</div>\n                <div class=\"code-name\">#icon-adjust</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-adn\"></use>\n                </svg>\n                <div class=\"name\">adn</div>\n                <div class=\"code-name\">#icon-adn</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-align-center\"></use>\n                </svg>\n                <div class=\"name\">align-center</div>\n                <div class=\"code-name\">#icon-align-center</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-align-justify\"></use>\n                </svg>\n                <div class=\"name\">align-justify</div>\n                <div class=\"code-name\">#icon-align-justify</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-align-left\"></use>\n                </svg>\n                <div class=\"name\">align-left</div>\n                <div class=\"code-name\">#icon-align-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-align-right\"></use>\n                </svg>\n                <div class=\"name\">align-right</div>\n                <div class=\"code-name\">#icon-align-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-amazon\"></use>\n                </svg>\n                <div class=\"name\">amazon</div>\n                <div class=\"code-name\">#icon-amazon</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-ambulance\"></use>\n                </svg>\n                <div class=\"name\">ambulance</div>\n                <div class=\"code-name\">#icon-ambulance</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-american-sign-language-interpreting\"></use>\n                </svg>\n                <div class=\"name\">american-sign-language-interpreting</div>\n                <div class=\"code-name\">#icon-american-sign-language-interpreting</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-anchor\"></use>\n                </svg>\n                <div class=\"name\">anchor</div>\n                <div class=\"code-name\">#icon-anchor</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-android\"></use>\n                </svg>\n                <div class=\"name\">android</div>\n                <div class=\"code-name\">#icon-android</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-angellist\"></use>\n                </svg>\n                <div class=\"name\">angellist</div>\n                <div class=\"code-name\">#icon-angellist</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-angle-double-down\"></use>\n                </svg>\n                <div class=\"name\">angle-double-down</div>\n                <div class=\"code-name\">#icon-angle-double-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-angle-double-left\"></use>\n                </svg>\n                <div class=\"name\">angle-double-left</div>\n                <div class=\"code-name\">#icon-angle-double-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-angle-double-right\"></use>\n                </svg>\n                <div class=\"name\">angle-double-right</div>\n                <div class=\"code-name\">#icon-angle-double-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-angle-double-up\"></use>\n                </svg>\n                <div class=\"name\">angle-double-up</div>\n                <div class=\"code-name\">#icon-angle-double-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-angle-down\"></use>\n                </svg>\n                <div class=\"name\">angle-down</div>\n                <div class=\"code-name\">#icon-angle-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-angle-left\"></use>\n                </svg>\n                <div class=\"name\">angle-left</div>\n                <div class=\"code-name\">#icon-angle-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-angle-right\"></use>\n                </svg>\n                <div class=\"name\">angle-right</div>\n                <div class=\"code-name\">#icon-angle-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-angle-up\"></use>\n                </svg>\n                <div class=\"name\">angle-up</div>\n                <div class=\"code-name\">#icon-angle-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-apple\"></use>\n                </svg>\n                <div class=\"name\">apple</div>\n                <div class=\"code-name\">#icon-apple</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-archive\"></use>\n                </svg>\n                <div class=\"name\">archive</div>\n                <div class=\"code-name\">#icon-archive</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-area-chart\"></use>\n                </svg>\n                <div class=\"name\">area-chart</div>\n                <div class=\"code-name\">#icon-area-chart</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrow-circle-down\"></use>\n                </svg>\n                <div class=\"name\">arrow-circle-down</div>\n                <div class=\"code-name\">#icon-arrow-circle-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrow-circle-left\"></use>\n                </svg>\n                <div class=\"name\">arrow-circle-left</div>\n                <div class=\"code-name\">#icon-arrow-circle-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrow-circle-o-down\"></use>\n                </svg>\n                <div class=\"name\">arrow-circle-o-down</div>\n                <div class=\"code-name\">#icon-arrow-circle-o-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrow-circle-o-left\"></use>\n                </svg>\n                <div class=\"name\">arrow-circle-o-left</div>\n                <div class=\"code-name\">#icon-arrow-circle-o-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrow-circle-o-right\"></use>\n                </svg>\n                <div class=\"name\">arrow-circle-o-right</div>\n                <div class=\"code-name\">#icon-arrow-circle-o-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrow-circle-o-up\"></use>\n                </svg>\n                <div class=\"name\">arrow-circle-o-up</div>\n                <div class=\"code-name\">#icon-arrow-circle-o-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrow-circle-right\"></use>\n                </svg>\n                <div class=\"name\">arrow-circle-right</div>\n                <div class=\"code-name\">#icon-arrow-circle-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrow-circle-up\"></use>\n                </svg>\n                <div class=\"name\">arrow-circle-up</div>\n                <div class=\"code-name\">#icon-arrow-circle-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrow-down\"></use>\n                </svg>\n                <div class=\"name\">arrow-down</div>\n                <div class=\"code-name\">#icon-arrow-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrow-left\"></use>\n                </svg>\n                <div class=\"name\">arrow-left</div>\n                <div class=\"code-name\">#icon-arrow-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrow-right\"></use>\n                </svg>\n                <div class=\"name\">arrow-right</div>\n                <div class=\"code-name\">#icon-arrow-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrow-up\"></use>\n                </svg>\n                <div class=\"name\">arrow-up</div>\n                <div class=\"code-name\">#icon-arrow-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrows-alt\"></use>\n                </svg>\n                <div class=\"name\">arrows-alt</div>\n                <div class=\"code-name\">#icon-arrows-alt</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrows-h\"></use>\n                </svg>\n                <div class=\"name\">arrows-h</div>\n                <div class=\"code-name\">#icon-arrows-h</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrows-v\"></use>\n                </svg>\n                <div class=\"name\">arrows-v</div>\n                <div class=\"code-name\">#icon-arrows-v</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-arrows\"></use>\n                </svg>\n                <div class=\"name\">arrows</div>\n                <div class=\"code-name\">#icon-arrows</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-asl-interpreting\"></use>\n                </svg>\n                <div class=\"name\">asl-interpreting</div>\n                <div class=\"code-name\">#icon-asl-interpreting</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-assistive-listening-systems\"></use>\n                </svg>\n                <div class=\"name\">assistive-listening-systems</div>\n                <div class=\"code-name\">#icon-assistive-listening-systems</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-asterisk\"></use>\n                </svg>\n                <div class=\"name\">asterisk</div>\n                <div class=\"code-name\">#icon-asterisk</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-at\"></use>\n                </svg>\n                <div class=\"name\">at</div>\n                <div class=\"code-name\">#icon-at</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-audio-description\"></use>\n                </svg>\n                <div class=\"name\">audio-description</div>\n                <div class=\"code-name\">#icon-audio-description</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-automobile\"></use>\n                </svg>\n                <div class=\"name\">automobile</div>\n                <div class=\"code-name\">#icon-automobile</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-backward\"></use>\n                </svg>\n                <div class=\"name\">backward</div>\n                <div class=\"code-name\">#icon-backward</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-balance-scale\"></use>\n                </svg>\n                <div class=\"name\">balance-scale</div>\n                <div class=\"code-name\">#icon-balance-scale</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bandcamp\"></use>\n                </svg>\n                <div class=\"name\">bandcamp</div>\n                <div class=\"code-name\">#icon-bandcamp</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bank\"></use>\n                </svg>\n                <div class=\"name\">bank</div>\n                <div class=\"code-name\">#icon-bank</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bars1\"></use>\n                </svg>\n                <div class=\"name\">bars</div>\n                <div class=\"code-name\">#icon-bars1</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bar-chart\"></use>\n                </svg>\n                <div class=\"name\">bar-chart</div>\n                <div class=\"code-name\">#icon-bar-chart</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bar-chart-o\"></use>\n                </svg>\n                <div class=\"name\">bar-chart-o</div>\n                <div class=\"code-name\">#icon-bar-chart-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bathtub\"></use>\n                </svg>\n                <div class=\"name\">bathtub</div>\n                <div class=\"code-name\">#icon-bathtub</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-barcode\"></use>\n                </svg>\n                <div class=\"name\">barcode</div>\n                <div class=\"code-name\">#icon-barcode</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bath\"></use>\n                </svg>\n                <div class=\"name\">bath</div>\n                <div class=\"code-name\">#icon-bath</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-battery-0\"></use>\n                </svg>\n                <div class=\"name\">battery-0</div>\n                <div class=\"code-name\">#icon-battery-0</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-battery-1\"></use>\n                </svg>\n                <div class=\"name\">battery-1</div>\n                <div class=\"code-name\">#icon-battery-1</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-battery-2\"></use>\n                </svg>\n                <div class=\"name\">battery-2</div>\n                <div class=\"code-name\">#icon-battery-2</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-battery-4\"></use>\n                </svg>\n                <div class=\"name\">battery-4</div>\n                <div class=\"code-name\">#icon-battery-4</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-battery-3\"></use>\n                </svg>\n                <div class=\"name\">battery-3</div>\n                <div class=\"code-name\">#icon-battery-3</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-battery-half\"></use>\n                </svg>\n                <div class=\"name\">battery-half</div>\n                <div class=\"code-name\">#icon-battery-half</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-battery-empty\"></use>\n                </svg>\n                <div class=\"name\">battery-empty</div>\n                <div class=\"code-name\">#icon-battery-empty</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-battery-full\"></use>\n                </svg>\n                <div class=\"name\">battery-full</div>\n                <div class=\"code-name\">#icon-battery-full</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-battery-quarter\"></use>\n                </svg>\n                <div class=\"name\">battery-quarter</div>\n                <div class=\"code-name\">#icon-battery-quarter</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-battery-three-quarters\"></use>\n                </svg>\n                <div class=\"name\">battery-three-quarters</div>\n                <div class=\"code-name\">#icon-battery-three-quarters</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-battery\"></use>\n                </svg>\n                <div class=\"name\">battery</div>\n                <div class=\"code-name\">#icon-battery</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-beer\"></use>\n                </svg>\n                <div class=\"name\">beer</div>\n                <div class=\"code-name\">#icon-beer</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bed\"></use>\n                </svg>\n                <div class=\"name\">bed</div>\n                <div class=\"code-name\">#icon-bed</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-behance\"></use>\n                </svg>\n                <div class=\"name\">behance</div>\n                <div class=\"code-name\">#icon-behance</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-behance-square\"></use>\n                </svg>\n                <div class=\"name\">behance-square</div>\n                <div class=\"code-name\">#icon-behance-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bell-o\"></use>\n                </svg>\n                <div class=\"name\">bell-o</div>\n                <div class=\"code-name\">#icon-bell-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bell-slash-o\"></use>\n                </svg>\n                <div class=\"name\">bell-slash-o</div>\n                <div class=\"code-name\">#icon-bell-slash-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bell-slash\"></use>\n                </svg>\n                <div class=\"name\">bell-slash</div>\n                <div class=\"code-name\">#icon-bell-slash</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bicycle\"></use>\n                </svg>\n                <div class=\"name\">bicycle</div>\n                <div class=\"code-name\">#icon-bicycle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bitbucket-square\"></use>\n                </svg>\n                <div class=\"name\">bitbucket-square</div>\n                <div class=\"code-name\">#icon-bitbucket-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-binoculars\"></use>\n                </svg>\n                <div class=\"name\">binoculars</div>\n                <div class=\"code-name\">#icon-binoculars</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bell\"></use>\n                </svg>\n                <div class=\"name\">bell</div>\n                <div class=\"code-name\">#icon-bell</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-birthday-cake\"></use>\n                </svg>\n                <div class=\"name\">birthday-cake</div>\n                <div class=\"code-name\">#icon-birthday-cake</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bitbucket\"></use>\n                </svg>\n                <div class=\"name\">bitbucket</div>\n                <div class=\"code-name\">#icon-bitbucket</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-black-tie\"></use>\n                </svg>\n                <div class=\"name\">black-tie</div>\n                <div class=\"code-name\">#icon-black-tie</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bluetooth-b\"></use>\n                </svg>\n                <div class=\"name\">bluetooth-b</div>\n                <div class=\"code-name\">#icon-bluetooth-b</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bitcoin\"></use>\n                </svg>\n                <div class=\"name\">bitcoin</div>\n                <div class=\"code-name\">#icon-bitcoin</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-blind\"></use>\n                </svg>\n                <div class=\"name\">blind</div>\n                <div class=\"code-name\">#icon-blind</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bluetooth\"></use>\n                </svg>\n                <div class=\"name\">bluetooth</div>\n                <div class=\"code-name\">#icon-bluetooth</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bold\"></use>\n                </svg>\n                <div class=\"name\">bold</div>\n                <div class=\"code-name\">#icon-bold</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bolt\"></use>\n                </svg>\n                <div class=\"name\">bolt</div>\n                <div class=\"code-name\">#icon-bolt</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bomb\"></use>\n                </svg>\n                <div class=\"name\">bomb</div>\n                <div class=\"code-name\">#icon-bomb</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-book\"></use>\n                </svg>\n                <div class=\"name\">book</div>\n                <div class=\"code-name\">#icon-book</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bug\"></use>\n                </svg>\n                <div class=\"name\">bug</div>\n                <div class=\"code-name\">#icon-bug</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bookmark-o\"></use>\n                </svg>\n                <div class=\"name\">bookmark-o</div>\n                <div class=\"code-name\">#icon-bookmark-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-btc\"></use>\n                </svg>\n                <div class=\"name\">btc</div>\n                <div class=\"code-name\">#icon-btc</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bookmark\"></use>\n                </svg>\n                <div class=\"name\">bookmark</div>\n                <div class=\"code-name\">#icon-bookmark</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-briefcase\"></use>\n                </svg>\n                <div class=\"name\">briefcase</div>\n                <div class=\"code-name\">#icon-briefcase</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-braille\"></use>\n                </svg>\n                <div class=\"name\">braille</div>\n                <div class=\"code-name\">#icon-braille</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bullhorn\"></use>\n                </svg>\n                <div class=\"name\">bullhorn</div>\n                <div class=\"code-name\">#icon-bullhorn</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bullseye\"></use>\n                </svg>\n                <div class=\"name\">bullseye</div>\n                <div class=\"code-name\">#icon-bullseye</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bus\"></use>\n                </svg>\n                <div class=\"name\">bus</div>\n                <div class=\"code-name\">#icon-bus</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-building\"></use>\n                </svg>\n                <div class=\"name\">building</div>\n                <div class=\"code-name\">#icon-building</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cab\"></use>\n                </svg>\n                <div class=\"name\">cab</div>\n                <div class=\"code-name\">#icon-cab</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-buysellads\"></use>\n                </svg>\n                <div class=\"name\">buysellads</div>\n                <div class=\"code-name\">#icon-buysellads</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-building-o\"></use>\n                </svg>\n                <div class=\"name\">building-o</div>\n                <div class=\"code-name\">#icon-building-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-calendar-plus-o\"></use>\n                </svg>\n                <div class=\"name\">calendar-plus-o</div>\n                <div class=\"code-name\">#icon-calendar-plus-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-calendar-o\"></use>\n                </svg>\n                <div class=\"name\">calendar-o</div>\n                <div class=\"code-name\">#icon-calendar-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-calendar-times-o\"></use>\n                </svg>\n                <div class=\"name\">calendar-times-o</div>\n                <div class=\"code-name\">#icon-calendar-times-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-calendar-check-o\"></use>\n                </svg>\n                <div class=\"name\">calendar-check-o</div>\n                <div class=\"code-name\">#icon-calendar-check-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-calendar-minus-o\"></use>\n                </svg>\n                <div class=\"name\">calendar-minus-o</div>\n                <div class=\"code-name\">#icon-calendar-minus-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-calculator\"></use>\n                </svg>\n                <div class=\"name\">calculator</div>\n                <div class=\"code-name\">#icon-calculator</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-caret-down\"></use>\n                </svg>\n                <div class=\"name\">caret-down</div>\n                <div class=\"code-name\">#icon-caret-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-caret-left\"></use>\n                </svg>\n                <div class=\"name\">caret-left</div>\n                <div class=\"code-name\">#icon-caret-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-car\"></use>\n                </svg>\n                <div class=\"name\">car</div>\n                <div class=\"code-name\">#icon-car</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-camera-retro\"></use>\n                </svg>\n                <div class=\"name\">camera-retro</div>\n                <div class=\"code-name\">#icon-camera-retro</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-caret-right\"></use>\n                </svg>\n                <div class=\"name\">caret-right</div>\n                <div class=\"code-name\">#icon-caret-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-caret-square-o-left\"></use>\n                </svg>\n                <div class=\"name\">caret-square-o-left</div>\n                <div class=\"code-name\">#icon-caret-square-o-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-caret-square-o-right\"></use>\n                </svg>\n                <div class=\"name\">caret-square-o-right</div>\n                <div class=\"code-name\">#icon-caret-square-o-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-caret-up\"></use>\n                </svg>\n                <div class=\"name\">caret-up</div>\n                <div class=\"code-name\">#icon-caret-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-caret-square-o-up\"></use>\n                </svg>\n                <div class=\"name\">caret-square-o-up</div>\n                <div class=\"code-name\">#icon-caret-square-o-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cart-plus\"></use>\n                </svg>\n                <div class=\"name\">cart-plus</div>\n                <div class=\"code-name\">#icon-cart-plus</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cart-arrow-down\"></use>\n                </svg>\n                <div class=\"name\">cart-arrow-down</div>\n                <div class=\"code-name\">#icon-cart-arrow-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-caret-square-o-down\"></use>\n                </svg>\n                <div class=\"name\">caret-square-o-down</div>\n                <div class=\"code-name\">#icon-caret-square-o-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cc-discover\"></use>\n                </svg>\n                <div class=\"name\">cc-discover</div>\n                <div class=\"code-name\">#icon-cc-discover</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cc-diners-club\"></use>\n                </svg>\n                <div class=\"name\">cc-diners-club</div>\n                <div class=\"code-name\">#icon-cc-diners-club</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cc-paypal\"></use>\n                </svg>\n                <div class=\"name\">cc-paypal</div>\n                <div class=\"code-name\">#icon-cc-paypal</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cc-jcb\"></use>\n                </svg>\n                <div class=\"name\">cc-jcb</div>\n                <div class=\"code-name\">#icon-cc-jcb</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cc-mastercard\"></use>\n                </svg>\n                <div class=\"name\">cc-mastercard</div>\n                <div class=\"code-name\">#icon-cc-mastercard</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cc-amex\"></use>\n                </svg>\n                <div class=\"name\">cc-amex</div>\n                <div class=\"code-name\">#icon-cc-amex</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cc\"></use>\n                </svg>\n                <div class=\"name\">cc</div>\n                <div class=\"code-name\">#icon-cc</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cc-visa\"></use>\n                </svg>\n                <div class=\"name\">cc-visa</div>\n                <div class=\"code-name\">#icon-cc-visa</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cc-stripe\"></use>\n                </svg>\n                <div class=\"name\">cc-stripe</div>\n                <div class=\"code-name\">#icon-cc-stripe</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-check1\"></use>\n                </svg>\n                <div class=\"name\">check</div>\n                <div class=\"code-name\">#icon-check1</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-certificate\"></use>\n                </svg>\n                <div class=\"name\">certificate</div>\n                <div class=\"code-name\">#icon-certificate</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-check-circle\"></use>\n                </svg>\n                <div class=\"name\">check-circle</div>\n                <div class=\"code-name\">#icon-check-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-check-circle-o\"></use>\n                </svg>\n                <div class=\"name\">check-circle-o</div>\n                <div class=\"code-name\">#icon-check-circle-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-chain-broken\"></use>\n                </svg>\n                <div class=\"name\">chain-broken</div>\n                <div class=\"code-name\">#icon-chain-broken</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-chain\"></use>\n                </svg>\n                <div class=\"name\">chain</div>\n                <div class=\"code-name\">#icon-chain</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-chevron-circle-down\"></use>\n                </svg>\n                <div class=\"name\">chevron-circle-down</div>\n                <div class=\"code-name\">#icon-chevron-circle-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-chevron-circle-left\"></use>\n                </svg>\n                <div class=\"name\">chevron-circle-left</div>\n                <div class=\"code-name\">#icon-chevron-circle-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-chevron-circle-right\"></use>\n                </svg>\n                <div class=\"name\">chevron-circle-right</div>\n                <div class=\"code-name\">#icon-chevron-circle-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-chevron-down\"></use>\n                </svg>\n                <div class=\"name\">chevron-down</div>\n                <div class=\"code-name\">#icon-chevron-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-chevron-circle-up\"></use>\n                </svg>\n                <div class=\"name\">chevron-circle-up</div>\n                <div class=\"code-name\">#icon-chevron-circle-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-chevron-left\"></use>\n                </svg>\n                <div class=\"name\">chevron-left</div>\n                <div class=\"code-name\">#icon-chevron-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-chevron-right\"></use>\n                </svg>\n                <div class=\"name\">chevron-right</div>\n                <div class=\"code-name\">#icon-chevron-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-chevron-up\"></use>\n                </svg>\n                <div class=\"name\">chevron-up</div>\n                <div class=\"code-name\">#icon-chevron-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-child\"></use>\n                </svg>\n                <div class=\"name\">child</div>\n                <div class=\"code-name\">#icon-child</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-circle-thin\"></use>\n                </svg>\n                <div class=\"name\">circle-thin</div>\n                <div class=\"code-name\">#icon-circle-thin</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-circle-o-notch\"></use>\n                </svg>\n                <div class=\"name\">circle-o-notch</div>\n                <div class=\"code-name\">#icon-circle-o-notch</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-chrome\"></use>\n                </svg>\n                <div class=\"name\">chrome</div>\n                <div class=\"code-name\">#icon-chrome</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-circle-o\"></use>\n                </svg>\n                <div class=\"name\">circle-o</div>\n                <div class=\"code-name\">#icon-circle-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-clipboard\"></use>\n                </svg>\n                <div class=\"name\">clipboard</div>\n                <div class=\"code-name\">#icon-clipboard</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-circle\"></use>\n                </svg>\n                <div class=\"name\">circle</div>\n                <div class=\"code-name\">#icon-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cloud\"></use>\n                </svg>\n                <div class=\"name\">cloud</div>\n                <div class=\"code-name\">#icon-cloud</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-close\"></use>\n                </svg>\n                <div class=\"name\">close</div>\n                <div class=\"code-name\">#icon-close</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cloud-upload\"></use>\n                </svg>\n                <div class=\"name\">cloud-upload</div>\n                <div class=\"code-name\">#icon-cloud-upload</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-clone\"></use>\n                </svg>\n                <div class=\"name\">clone</div>\n                <div class=\"code-name\">#icon-clone</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cloud-download\"></use>\n                </svg>\n                <div class=\"name\">cloud-download</div>\n                <div class=\"code-name\">#icon-cloud-download</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-clock-o1\"></use>\n                </svg>\n                <div class=\"name\">clock-o</div>\n                <div class=\"code-name\">#icon-clock-o1</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cny\"></use>\n                </svg>\n                <div class=\"name\">cny</div>\n                <div class=\"code-name\">#icon-cny</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-code-fork\"></use>\n                </svg>\n                <div class=\"name\">code-fork</div>\n                <div class=\"code-name\">#icon-code-fork</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-codiepie\"></use>\n                </svg>\n                <div class=\"name\">codiepie</div>\n                <div class=\"code-name\">#icon-codiepie</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-codepen\"></use>\n                </svg>\n                <div class=\"name\">codepen</div>\n                <div class=\"code-name\">#icon-codepen</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-code\"></use>\n                </svg>\n                <div class=\"name\">code</div>\n                <div class=\"code-name\">#icon-code</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cog\"></use>\n                </svg>\n                <div class=\"name\">cog</div>\n                <div class=\"code-name\">#icon-cog</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-coffee\"></use>\n                </svg>\n                <div class=\"name\">coffee</div>\n                <div class=\"code-name\">#icon-coffee</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-columns\"></use>\n                </svg>\n                <div class=\"name\">columns</div>\n                <div class=\"code-name\">#icon-columns</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-comment-o\"></use>\n                </svg>\n                <div class=\"name\">comment-o</div>\n                <div class=\"code-name\">#icon-comment-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-commenting-o\"></use>\n                </svg>\n                <div class=\"name\">commenting-o</div>\n                <div class=\"code-name\">#icon-commenting-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-commenting\"></use>\n                </svg>\n                <div class=\"name\">commenting</div>\n                <div class=\"code-name\">#icon-commenting</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-comment\"></use>\n                </svg>\n                <div class=\"name\">comment</div>\n                <div class=\"code-name\">#icon-comment</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cogs\"></use>\n                </svg>\n                <div class=\"name\">cogs</div>\n                <div class=\"code-name\">#icon-cogs</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-compass\"></use>\n                </svg>\n                <div class=\"name\">compass</div>\n                <div class=\"code-name\">#icon-compass</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-compress\"></use>\n                </svg>\n                <div class=\"name\">compress</div>\n                <div class=\"code-name\">#icon-compress</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-comments\"></use>\n                </svg>\n                <div class=\"name\">comments</div>\n                <div class=\"code-name\">#icon-comments</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-comments-o\"></use>\n                </svg>\n                <div class=\"name\">comments-o</div>\n                <div class=\"code-name\">#icon-comments-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-connectdevelop\"></use>\n                </svg>\n                <div class=\"name\">connectdevelop</div>\n                <div class=\"code-name\">#icon-connectdevelop</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-copy\"></use>\n                </svg>\n                <div class=\"name\">copy</div>\n                <div class=\"code-name\">#icon-copy</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-contao\"></use>\n                </svg>\n                <div class=\"name\">contao</div>\n                <div class=\"code-name\">#icon-contao</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-copyright\"></use>\n                </svg>\n                <div class=\"name\">copyright</div>\n                <div class=\"code-name\">#icon-copyright</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-credit-card-alt\"></use>\n                </svg>\n                <div class=\"name\">credit-card-alt</div>\n                <div class=\"code-name\">#icon-credit-card-alt</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-credit-card\"></use>\n                </svg>\n                <div class=\"name\">credit-card</div>\n                <div class=\"code-name\">#icon-credit-card</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-crop\"></use>\n                </svg>\n                <div class=\"name\">crop</div>\n                <div class=\"code-name\">#icon-crop</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-creative-commons\"></use>\n                </svg>\n                <div class=\"name\">creative-commons</div>\n                <div class=\"code-name\">#icon-creative-commons</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-crosshairs\"></use>\n                </svg>\n                <div class=\"name\">crosshairs</div>\n                <div class=\"code-name\">#icon-crosshairs</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-css3\"></use>\n                </svg>\n                <div class=\"name\">css3</div>\n                <div class=\"code-name\">#icon-css3</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cube\"></use>\n                </svg>\n                <div class=\"name\">cube</div>\n                <div class=\"code-name\">#icon-cube</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cutlery\"></use>\n                </svg>\n                <div class=\"name\">cutlery</div>\n                <div class=\"code-name\">#icon-cutlery</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cut\"></use>\n                </svg>\n                <div class=\"name\">cut</div>\n                <div class=\"code-name\">#icon-cut</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-dashboard\"></use>\n                </svg>\n                <div class=\"name\">dashboard</div>\n                <div class=\"code-name\">#icon-dashboard</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-dashcube\"></use>\n                </svg>\n                <div class=\"name\">dashcube</div>\n                <div class=\"code-name\">#icon-dashcube</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-cubes\"></use>\n                </svg>\n                <div class=\"name\">cubes</div>\n                <div class=\"code-name\">#icon-cubes</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-database\"></use>\n                </svg>\n                <div class=\"name\">database</div>\n                <div class=\"code-name\">#icon-database</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-deaf\"></use>\n                </svg>\n                <div class=\"name\">deaf</div>\n                <div class=\"code-name\">#icon-deaf</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-delicious\"></use>\n                </svg>\n                <div class=\"name\">delicious</div>\n                <div class=\"code-name\">#icon-delicious</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-deviantart\"></use>\n                </svg>\n                <div class=\"name\">deviantart</div>\n                <div class=\"code-name\">#icon-deviantart</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-diamond\"></use>\n                </svg>\n                <div class=\"name\">diamond</div>\n                <div class=\"code-name\">#icon-diamond</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-dedent\"></use>\n                </svg>\n                <div class=\"name\">dedent</div>\n                <div class=\"code-name\">#icon-dedent</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-desktop\"></use>\n                </svg>\n                <div class=\"name\">desktop</div>\n                <div class=\"code-name\">#icon-desktop</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-deafness\"></use>\n                </svg>\n                <div class=\"name\">deafness</div>\n                <div class=\"code-name\">#icon-deafness</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-drivers-license-o\"></use>\n                </svg>\n                <div class=\"name\">drivers-license-o</div>\n                <div class=\"code-name\">#icon-drivers-license-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-digg\"></use>\n                </svg>\n                <div class=\"name\">digg</div>\n                <div class=\"code-name\">#icon-digg</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-dribbble\"></use>\n                </svg>\n                <div class=\"name\">dribbble</div>\n                <div class=\"code-name\">#icon-dribbble</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-download\"></use>\n                </svg>\n                <div class=\"name\">download</div>\n                <div class=\"code-name\">#icon-download</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-dollar\"></use>\n                </svg>\n                <div class=\"name\">dollar</div>\n                <div class=\"code-name\">#icon-dollar</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-dot-circle-o\"></use>\n                </svg>\n                <div class=\"name\">dot-circle-o</div>\n                <div class=\"code-name\">#icon-dot-circle-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-edit\"></use>\n                </svg>\n                <div class=\"name\">edit</div>\n                <div class=\"code-name\">#icon-edit</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-dropbox\"></use>\n                </svg>\n                <div class=\"name\">dropbox</div>\n                <div class=\"code-name\">#icon-dropbox</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-edge\"></use>\n                </svg>\n                <div class=\"name\">edge</div>\n                <div class=\"code-name\">#icon-edge</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-drupal\"></use>\n                </svg>\n                <div class=\"name\">drupal</div>\n                <div class=\"code-name\">#icon-drupal</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-drivers-license\"></use>\n                </svg>\n                <div class=\"name\">drivers-license</div>\n                <div class=\"code-name\">#icon-drivers-license</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-eject\"></use>\n                </svg>\n                <div class=\"name\">eject</div>\n                <div class=\"code-name\">#icon-eject</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-ellipsis-h\"></use>\n                </svg>\n                <div class=\"name\">ellipsis-h</div>\n                <div class=\"code-name\">#icon-ellipsis-h</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-envelope-o\"></use>\n                </svg>\n                <div class=\"name\">envelope-o</div>\n                <div class=\"code-name\">#icon-envelope-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-ellipsis-v\"></use>\n                </svg>\n                <div class=\"name\">ellipsis-v</div>\n                <div class=\"code-name\">#icon-ellipsis-v</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-eercast\"></use>\n                </svg>\n                <div class=\"name\">eercast</div>\n                <div class=\"code-name\">#icon-eercast</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-empire\"></use>\n                </svg>\n                <div class=\"name\">empire</div>\n                <div class=\"code-name\">#icon-empire</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-envelope-open-o\"></use>\n                </svg>\n                <div class=\"name\">envelope-open-o</div>\n                <div class=\"code-name\">#icon-envelope-open-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-envelope-open\"></use>\n                </svg>\n                <div class=\"name\">envelope-open</div>\n                <div class=\"code-name\">#icon-envelope-open</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-envelope\"></use>\n                </svg>\n                <div class=\"name\">envelope</div>\n                <div class=\"code-name\">#icon-envelope</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-envelope-square\"></use>\n                </svg>\n                <div class=\"name\">envelope-square</div>\n                <div class=\"code-name\">#icon-envelope-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-envira\"></use>\n                </svg>\n                <div class=\"name\">envira</div>\n                <div class=\"code-name\">#icon-envira</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-etsy\"></use>\n                </svg>\n                <div class=\"name\">etsy</div>\n                <div class=\"code-name\">#icon-etsy</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-eraser\"></use>\n                </svg>\n                <div class=\"name\">eraser</div>\n                <div class=\"code-name\">#icon-eraser</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-eur\"></use>\n                </svg>\n                <div class=\"name\">eur</div>\n                <div class=\"code-name\">#icon-eur</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-euro\"></use>\n                </svg>\n                <div class=\"name\">euro</div>\n                <div class=\"code-name\">#icon-euro</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-exchange\"></use>\n                </svg>\n                <div class=\"name\">exchange</div>\n                <div class=\"code-name\">#icon-exchange</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-exclamation-triangle\"></use>\n                </svg>\n                <div class=\"name\">exclamation-triangle</div>\n                <div class=\"code-name\">#icon-exclamation-triangle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-expand\"></use>\n                </svg>\n                <div class=\"name\">expand</div>\n                <div class=\"code-name\">#icon-expand</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-exclamation\"></use>\n                </svg>\n                <div class=\"name\">exclamation</div>\n                <div class=\"code-name\">#icon-exclamation</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-exclamation-circle\"></use>\n                </svg>\n                <div class=\"name\">exclamation-circle</div>\n                <div class=\"code-name\">#icon-exclamation-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-expeditedssl\"></use>\n                </svg>\n                <div class=\"name\">expeditedssl</div>\n                <div class=\"code-name\">#icon-expeditedssl</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-external-link-square\"></use>\n                </svg>\n                <div class=\"name\">external-link-square</div>\n                <div class=\"code-name\">#icon-external-link-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-eyedropper\"></use>\n                </svg>\n                <div class=\"name\">eyedropper</div>\n                <div class=\"code-name\">#icon-eyedropper</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-external-link\"></use>\n                </svg>\n                <div class=\"name\">external-link</div>\n                <div class=\"code-name\">#icon-external-link</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-eye\"></use>\n                </svg>\n                <div class=\"name\">eye</div>\n                <div class=\"code-name\">#icon-eye</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-eye-slash\"></use>\n                </svg>\n                <div class=\"name\">eye-slash</div>\n                <div class=\"code-name\">#icon-eye-slash</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-fa\"></use>\n                </svg>\n                <div class=\"name\">fa</div>\n                <div class=\"code-name\">#icon-fa</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-facebook-official\"></use>\n                </svg>\n                <div class=\"name\">facebook-official</div>\n                <div class=\"code-name\">#icon-facebook-official</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-facebook-f\"></use>\n                </svg>\n                <div class=\"name\">facebook-f</div>\n                <div class=\"code-name\">#icon-facebook-f</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-facebook-square\"></use>\n                </svg>\n                <div class=\"name\">facebook-square</div>\n                <div class=\"code-name\">#icon-facebook-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-facebook\"></use>\n                </svg>\n                <div class=\"name\">facebook</div>\n                <div class=\"code-name\">#icon-facebook</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-fast-backward\"></use>\n                </svg>\n                <div class=\"name\">fast-backward</div>\n                <div class=\"code-name\">#icon-fast-backward</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-fast-forward\"></use>\n                </svg>\n                <div class=\"name\">fast-forward</div>\n                <div class=\"code-name\">#icon-fast-forward</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-feed\"></use>\n                </svg>\n                <div class=\"name\">feed</div>\n                <div class=\"code-name\">#icon-feed</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-archive-o\"></use>\n                </svg>\n                <div class=\"name\">file-archive-o</div>\n                <div class=\"code-name\">#icon-file-archive-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-female\"></use>\n                </svg>\n                <div class=\"name\">female</div>\n                <div class=\"code-name\">#icon-female</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-audio-o\"></use>\n                </svg>\n                <div class=\"name\">file-audio-o</div>\n                <div class=\"code-name\">#icon-file-audio-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-fighter-jet\"></use>\n                </svg>\n                <div class=\"name\">fighter-jet</div>\n                <div class=\"code-name\">#icon-fighter-jet</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-fax\"></use>\n                </svg>\n                <div class=\"name\">fax</div>\n                <div class=\"code-name\">#icon-fax</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-code-o\"></use>\n                </svg>\n                <div class=\"name\">file-code-o</div>\n                <div class=\"code-name\">#icon-file-code-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-movie-o\"></use>\n                </svg>\n                <div class=\"name\">file-movie-o</div>\n                <div class=\"code-name\">#icon-file-movie-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-image-o\"></use>\n                </svg>\n                <div class=\"name\">file-image-o</div>\n                <div class=\"code-name\">#icon-file-image-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-excel-o\"></use>\n                </svg>\n                <div class=\"name\">file-excel-o</div>\n                <div class=\"code-name\">#icon-file-excel-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-o\"></use>\n                </svg>\n                <div class=\"name\">file-o</div>\n                <div class=\"code-name\">#icon-file-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-photo-o\"></use>\n                </svg>\n                <div class=\"name\">file-photo-o</div>\n                <div class=\"code-name\">#icon-file-photo-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-pdf-o\"></use>\n                </svg>\n                <div class=\"name\">file-pdf-o</div>\n                <div class=\"code-name\">#icon-file-pdf-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-picture-o\"></use>\n                </svg>\n                <div class=\"name\">file-picture-o</div>\n                <div class=\"code-name\">#icon-file-picture-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-sound-o\"></use>\n                </svg>\n                <div class=\"name\">file-sound-o</div>\n                <div class=\"code-name\">#icon-file-sound-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-powerpoint-o\"></use>\n                </svg>\n                <div class=\"name\">file-powerpoint-o</div>\n                <div class=\"code-name\">#icon-file-powerpoint-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-text\"></use>\n                </svg>\n                <div class=\"name\">file-text</div>\n                <div class=\"code-name\">#icon-file-text</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-text-o\"></use>\n                </svg>\n                <div class=\"name\">file-text-o</div>\n                <div class=\"code-name\">#icon-file-text-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file\"></use>\n                </svg>\n                <div class=\"name\">file</div>\n                <div class=\"code-name\">#icon-file</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-video-o\"></use>\n                </svg>\n                <div class=\"name\">file-video-o</div>\n                <div class=\"code-name\">#icon-file-video-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-files-o\"></use>\n                </svg>\n                <div class=\"name\">files-o</div>\n                <div class=\"code-name\">#icon-files-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-zip-o\"></use>\n                </svg>\n                <div class=\"name\">file-zip-o</div>\n                <div class=\"code-name\">#icon-file-zip-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-file-word-o\"></use>\n                </svg>\n                <div class=\"name\">file-word-o</div>\n                <div class=\"code-name\">#icon-file-word-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-film\"></use>\n                </svg>\n                <div class=\"name\">film</div>\n                <div class=\"code-name\">#icon-film</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-filter\"></use>\n                </svg>\n                <div class=\"name\">filter</div>\n                <div class=\"code-name\">#icon-filter</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-fire\"></use>\n                </svg>\n                <div class=\"name\">fire</div>\n                <div class=\"code-name\">#icon-fire</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-fire-extinguisher\"></use>\n                </svg>\n                <div class=\"name\">fire-extinguisher</div>\n                <div class=\"code-name\">#icon-fire-extinguisher</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-flag-checkered\"></use>\n                </svg>\n                <div class=\"name\">flag-checkered</div>\n                <div class=\"code-name\">#icon-flag-checkered</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-firefox\"></use>\n                </svg>\n                <div class=\"name\">firefox</div>\n                <div class=\"code-name\">#icon-firefox</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-first-order\"></use>\n                </svg>\n                <div class=\"name\">first-order</div>\n                <div class=\"code-name\">#icon-first-order</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-flash\"></use>\n                </svg>\n                <div class=\"name\">flash</div>\n                <div class=\"code-name\">#icon-flash</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-flag\"></use>\n                </svg>\n                <div class=\"name\">flag</div>\n                <div class=\"code-name\">#icon-flag</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-flag-o\"></use>\n                </svg>\n                <div class=\"name\">flag-o</div>\n                <div class=\"code-name\">#icon-flag-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-flask\"></use>\n                </svg>\n                <div class=\"name\">flask</div>\n                <div class=\"code-name\">#icon-flask</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-flickr\"></use>\n                </svg>\n                <div class=\"name\">flickr</div>\n                <div class=\"code-name\">#icon-flickr</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-folder-open\"></use>\n                </svg>\n                <div class=\"name\">folder-open</div>\n                <div class=\"code-name\">#icon-folder-open</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-folder-o\"></use>\n                </svg>\n                <div class=\"name\">folder-o</div>\n                <div class=\"code-name\">#icon-folder-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-font-awesome\"></use>\n                </svg>\n                <div class=\"name\">font-awesome</div>\n                <div class=\"code-name\">#icon-font-awesome</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-folder\"></use>\n                </svg>\n                <div class=\"name\">folder</div>\n                <div class=\"code-name\">#icon-folder</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-floppy-o\"></use>\n                </svg>\n                <div class=\"name\">floppy-o</div>\n                <div class=\"code-name\">#icon-floppy-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-folder-open-o\"></use>\n                </svg>\n                <div class=\"name\">folder-open-o</div>\n                <div class=\"code-name\">#icon-folder-open-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-fonticons\"></use>\n                </svg>\n                <div class=\"name\">fonticons</div>\n                <div class=\"code-name\">#icon-fonticons</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-font\"></use>\n                </svg>\n                <div class=\"name\">font</div>\n                <div class=\"code-name\">#icon-font</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-forumbee\"></use>\n                </svg>\n                <div class=\"name\">forumbee</div>\n                <div class=\"code-name\">#icon-forumbee</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-fort-awesome\"></use>\n                </svg>\n                <div class=\"name\">fort-awesome</div>\n                <div class=\"code-name\">#icon-fort-awesome</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-forward\"></use>\n                </svg>\n                <div class=\"name\">forward</div>\n                <div class=\"code-name\">#icon-forward</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-foursquare\"></use>\n                </svg>\n                <div class=\"name\">foursquare</div>\n                <div class=\"code-name\">#icon-foursquare</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-free-code-camp\"></use>\n                </svg>\n                <div class=\"name\">free-code-camp</div>\n                <div class=\"code-name\">#icon-free-code-camp</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-frown-o\"></use>\n                </svg>\n                <div class=\"name\">frown-o</div>\n                <div class=\"code-name\">#icon-frown-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-futbol-o\"></use>\n                </svg>\n                <div class=\"name\">futbol-o</div>\n                <div class=\"code-name\">#icon-futbol-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-gamepad\"></use>\n                </svg>\n                <div class=\"name\">gamepad</div>\n                <div class=\"code-name\">#icon-gamepad</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-gavel\"></use>\n                </svg>\n                <div class=\"name\">gavel</div>\n                <div class=\"code-name\">#icon-gavel</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-gbp\"></use>\n                </svg>\n                <div class=\"name\">gbp</div>\n                <div class=\"code-name\">#icon-gbp</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-ge\"></use>\n                </svg>\n                <div class=\"name\">ge</div>\n                <div class=\"code-name\">#icon-ge</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-gear\"></use>\n                </svg>\n                <div class=\"name\">gear</div>\n                <div class=\"code-name\">#icon-gear</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-gears\"></use>\n                </svg>\n                <div class=\"name\">gears</div>\n                <div class=\"code-name\">#icon-gears</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-genderless\"></use>\n                </svg>\n                <div class=\"name\">genderless</div>\n                <div class=\"code-name\">#icon-genderless</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-get-pocket\"></use>\n                </svg>\n                <div class=\"name\">get-pocket</div>\n                <div class=\"code-name\">#icon-get-pocket</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-gg-circle\"></use>\n                </svg>\n                <div class=\"name\">gg-circle</div>\n                <div class=\"code-name\">#icon-gg-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-gift\"></use>\n                </svg>\n                <div class=\"name\">gift</div>\n                <div class=\"code-name\">#icon-gift</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-gg\"></use>\n                </svg>\n                <div class=\"name\">gg</div>\n                <div class=\"code-name\">#icon-gg</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-git-square\"></use>\n                </svg>\n                <div class=\"name\">git-square</div>\n                <div class=\"code-name\">#icon-git-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-git\"></use>\n                </svg>\n                <div class=\"name\">git</div>\n                <div class=\"code-name\">#icon-git</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-github-alt\"></use>\n                </svg>\n                <div class=\"name\">github-alt</div>\n                <div class=\"code-name\">#icon-github-alt</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-github-square\"></use>\n                </svg>\n                <div class=\"name\">github-square</div>\n                <div class=\"code-name\">#icon-github-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-github\"></use>\n                </svg>\n                <div class=\"name\">github</div>\n                <div class=\"code-name\">#icon-github</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-gitlab\"></use>\n                </svg>\n                <div class=\"name\">gitlab</div>\n                <div class=\"code-name\">#icon-gitlab</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-gittip\"></use>\n                </svg>\n                <div class=\"name\">gittip</div>\n                <div class=\"code-name\">#icon-gittip</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-glass\"></use>\n                </svg>\n                <div class=\"name\">glass</div>\n                <div class=\"code-name\">#icon-glass</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-glide-g\"></use>\n                </svg>\n                <div class=\"name\">glide-g</div>\n                <div class=\"code-name\">#icon-glide-g</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-glide\"></use>\n                </svg>\n                <div class=\"name\">glide</div>\n                <div class=\"code-name\">#icon-glide</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-globe\"></use>\n                </svg>\n                <div class=\"name\">globe</div>\n                <div class=\"code-name\">#icon-globe</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-google-plus-circle\"></use>\n                </svg>\n                <div class=\"name\">google-plus-circle</div>\n                <div class=\"code-name\">#icon-google-plus-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-google-plus-official\"></use>\n                </svg>\n                <div class=\"name\">google-plus-official</div>\n                <div class=\"code-name\">#icon-google-plus-official</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-google-plus-square\"></use>\n                </svg>\n                <div class=\"name\">google-plus-square</div>\n                <div class=\"code-name\">#icon-google-plus-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-google-plus\"></use>\n                </svg>\n                <div class=\"name\">google-plus</div>\n                <div class=\"code-name\">#icon-google-plus</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-google-wallet\"></use>\n                </svg>\n                <div class=\"name\">google-wallet</div>\n                <div class=\"code-name\">#icon-google-wallet</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-google\"></use>\n                </svg>\n                <div class=\"name\">google</div>\n                <div class=\"code-name\">#icon-google</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-graduation-cap\"></use>\n                </svg>\n                <div class=\"name\">graduation-cap</div>\n                <div class=\"code-name\">#icon-graduation-cap</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-gratipay\"></use>\n                </svg>\n                <div class=\"name\">gratipay</div>\n                <div class=\"code-name\">#icon-gratipay</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-grav\"></use>\n                </svg>\n                <div class=\"name\">grav</div>\n                <div class=\"code-name\">#icon-grav</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-group\"></use>\n                </svg>\n                <div class=\"name\">group</div>\n                <div class=\"code-name\">#icon-group</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-h-square\"></use>\n                </svg>\n                <div class=\"name\">h-square</div>\n                <div class=\"code-name\">#icon-h-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hacker-news\"></use>\n                </svg>\n                <div class=\"name\">hacker-news</div>\n                <div class=\"code-name\">#icon-hacker-news</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hand-grab-o\"></use>\n                </svg>\n                <div class=\"name\">hand-grab-o</div>\n                <div class=\"code-name\">#icon-hand-grab-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hand-o-left\"></use>\n                </svg>\n                <div class=\"name\">hand-o-left</div>\n                <div class=\"code-name\">#icon-hand-o-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hand-lizard-o\"></use>\n                </svg>\n                <div class=\"name\">hand-lizard-o</div>\n                <div class=\"code-name\">#icon-hand-lizard-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hand-o-down\"></use>\n                </svg>\n                <div class=\"name\">hand-o-down</div>\n                <div class=\"code-name\">#icon-hand-o-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hand-o-right\"></use>\n                </svg>\n                <div class=\"name\">hand-o-right</div>\n                <div class=\"code-name\">#icon-hand-o-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hand-o-up\"></use>\n                </svg>\n                <div class=\"name\">hand-o-up</div>\n                <div class=\"code-name\">#icon-hand-o-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hand-paper-o\"></use>\n                </svg>\n                <div class=\"name\">hand-paper-o</div>\n                <div class=\"code-name\">#icon-hand-paper-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hand-pointer-o\"></use>\n                </svg>\n                <div class=\"name\">hand-pointer-o</div>\n                <div class=\"code-name\">#icon-hand-pointer-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hand-peace-o\"></use>\n                </svg>\n                <div class=\"name\">hand-peace-o</div>\n                <div class=\"code-name\">#icon-hand-peace-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hand-spock-o\"></use>\n                </svg>\n                <div class=\"name\">hand-spock-o</div>\n                <div class=\"code-name\">#icon-hand-spock-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hand-rock-o\"></use>\n                </svg>\n                <div class=\"name\">hand-rock-o</div>\n                <div class=\"code-name\">#icon-hand-rock-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hand-scissors-o\"></use>\n                </svg>\n                <div class=\"name\">hand-scissors-o</div>\n                <div class=\"code-name\">#icon-hand-scissors-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hand-stop-o\"></use>\n                </svg>\n                <div class=\"name\">hand-stop-o</div>\n                <div class=\"code-name\">#icon-hand-stop-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hard-of-hearing\"></use>\n                </svg>\n                <div class=\"name\">hard-of-hearing</div>\n                <div class=\"code-name\">#icon-hard-of-hearing</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-handshake-o\"></use>\n                </svg>\n                <div class=\"name\">handshake-o</div>\n                <div class=\"code-name\">#icon-handshake-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hashtag\"></use>\n                </svg>\n                <div class=\"name\">hashtag</div>\n                <div class=\"code-name\">#icon-hashtag</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-headphones\"></use>\n                </svg>\n                <div class=\"name\">headphones</div>\n                <div class=\"code-name\">#icon-headphones</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-header\"></use>\n                </svg>\n                <div class=\"name\">header</div>\n                <div class=\"code-name\">#icon-header</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hdd-o\"></use>\n                </svg>\n                <div class=\"name\">hdd-o</div>\n                <div class=\"code-name\">#icon-hdd-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-heart-o\"></use>\n                </svg>\n                <div class=\"name\">heart-o</div>\n                <div class=\"code-name\">#icon-heart-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-heart\"></use>\n                </svg>\n                <div class=\"name\">heart</div>\n                <div class=\"code-name\">#icon-heart</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hotel\"></use>\n                </svg>\n                <div class=\"name\">hotel</div>\n                <div class=\"code-name\">#icon-hotel</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-heartbeat\"></use>\n                </svg>\n                <div class=\"name\">heartbeat</div>\n                <div class=\"code-name\">#icon-heartbeat</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hourglass-1\"></use>\n                </svg>\n                <div class=\"name\">hourglass-1</div>\n                <div class=\"code-name\">#icon-hourglass-1</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-home\"></use>\n                </svg>\n                <div class=\"name\">home</div>\n                <div class=\"code-name\">#icon-home</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-history\"></use>\n                </svg>\n                <div class=\"name\">history</div>\n                <div class=\"code-name\">#icon-history</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hourglass-2\"></use>\n                </svg>\n                <div class=\"name\">hourglass-2</div>\n                <div class=\"code-name\">#icon-hourglass-2</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hospital-o\"></use>\n                </svg>\n                <div class=\"name\">hospital-o</div>\n                <div class=\"code-name\">#icon-hospital-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hourglass-3\"></use>\n                </svg>\n                <div class=\"name\">hourglass-3</div>\n                <div class=\"code-name\">#icon-hourglass-3</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hourglass-half\"></use>\n                </svg>\n                <div class=\"name\">hourglass-half</div>\n                <div class=\"code-name\">#icon-hourglass-half</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hourglass-end\"></use>\n                </svg>\n                <div class=\"name\">hourglass-end</div>\n                <div class=\"code-name\">#icon-hourglass-end</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hourglass-o\"></use>\n                </svg>\n                <div class=\"name\">hourglass-o</div>\n                <div class=\"code-name\">#icon-hourglass-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hourglass-start\"></use>\n                </svg>\n                <div class=\"name\">hourglass-start</div>\n                <div class=\"code-name\">#icon-hourglass-start</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-houzz\"></use>\n                </svg>\n                <div class=\"name\">houzz</div>\n                <div class=\"code-name\">#icon-houzz</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-html5\"></use>\n                </svg>\n                <div class=\"name\">html5</div>\n                <div class=\"code-name\">#icon-html5</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-hourglass\"></use>\n                </svg>\n                <div class=\"name\">hourglass</div>\n                <div class=\"code-name\">#icon-hourglass</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-id-badge\"></use>\n                </svg>\n                <div class=\"name\">id-badge</div>\n                <div class=\"code-name\">#icon-id-badge</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-i-cursor\"></use>\n                </svg>\n                <div class=\"name\">i-cursor</div>\n                <div class=\"code-name\">#icon-i-cursor</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-id-card\"></use>\n                </svg>\n                <div class=\"name\">id-card</div>\n                <div class=\"code-name\">#icon-id-card</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-ils\"></use>\n                </svg>\n                <div class=\"name\">ils</div>\n                <div class=\"code-name\">#icon-ils</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-id-card-o\"></use>\n                </svg>\n                <div class=\"name\">id-card-o</div>\n                <div class=\"code-name\">#icon-id-card-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-image\"></use>\n                </svg>\n                <div class=\"name\">image</div>\n                <div class=\"code-name\">#icon-image</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-inbox\"></use>\n                </svg>\n                <div class=\"name\">inbox</div>\n                <div class=\"code-name\">#icon-inbox</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-indent\"></use>\n                </svg>\n                <div class=\"name\">indent</div>\n                <div class=\"code-name\">#icon-indent</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-industry\"></use>\n                </svg>\n                <div class=\"name\">industry</div>\n                <div class=\"code-name\">#icon-industry</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-imdb\"></use>\n                </svg>\n                <div class=\"name\">imdb</div>\n                <div class=\"code-name\">#icon-imdb</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-info\"></use>\n                </svg>\n                <div class=\"name\">info</div>\n                <div class=\"code-name\">#icon-info</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-institution\"></use>\n                </svg>\n                <div class=\"name\">institution</div>\n                <div class=\"code-name\">#icon-institution</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-info-circle\"></use>\n                </svg>\n                <div class=\"name\">info-circle</div>\n                <div class=\"code-name\">#icon-info-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-internet-explorer\"></use>\n                </svg>\n                <div class=\"name\">internet-explorer</div>\n                <div class=\"code-name\">#icon-internet-explorer</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-inr\"></use>\n                </svg>\n                <div class=\"name\">inr</div>\n                <div class=\"code-name\">#icon-inr</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-instagram\"></use>\n                </svg>\n                <div class=\"name\">instagram</div>\n                <div class=\"code-name\">#icon-instagram</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-ioxhost\"></use>\n                </svg>\n                <div class=\"name\">ioxhost</div>\n                <div class=\"code-name\">#icon-ioxhost</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-joomla\"></use>\n                </svg>\n                <div class=\"name\">joomla</div>\n                <div class=\"code-name\">#icon-joomla</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-jpy\"></use>\n                </svg>\n                <div class=\"name\">jpy</div>\n                <div class=\"code-name\">#icon-jpy</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-intersex\"></use>\n                </svg>\n                <div class=\"name\">intersex</div>\n                <div class=\"code-name\">#icon-intersex</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-jsfiddle\"></use>\n                </svg>\n                <div class=\"name\">jsfiddle</div>\n                <div class=\"code-name\">#icon-jsfiddle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-italic\"></use>\n                </svg>\n                <div class=\"name\">italic</div>\n                <div class=\"code-name\">#icon-italic</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-key\"></use>\n                </svg>\n                <div class=\"name\">key</div>\n                <div class=\"code-name\">#icon-key</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-keyboard-o\"></use>\n                </svg>\n                <div class=\"name\">keyboard-o</div>\n                <div class=\"code-name\">#icon-keyboard-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-krw\"></use>\n                </svg>\n                <div class=\"name\">krw</div>\n                <div class=\"code-name\">#icon-krw</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-laptop\"></use>\n                </svg>\n                <div class=\"name\">laptop</div>\n                <div class=\"code-name\">#icon-laptop</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-language\"></use>\n                </svg>\n                <div class=\"name\">language</div>\n                <div class=\"code-name\">#icon-language</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-leaf\"></use>\n                </svg>\n                <div class=\"name\">leaf</div>\n                <div class=\"code-name\">#icon-leaf</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-lastfm\"></use>\n                </svg>\n                <div class=\"name\">lastfm</div>\n                <div class=\"code-name\">#icon-lastfm</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-lastfm-square\"></use>\n                </svg>\n                <div class=\"name\">lastfm-square</div>\n                <div class=\"code-name\">#icon-lastfm-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-legal\"></use>\n                </svg>\n                <div class=\"name\">legal</div>\n                <div class=\"code-name\">#icon-legal</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-leanpub\"></use>\n                </svg>\n                <div class=\"name\">leanpub</div>\n                <div class=\"code-name\">#icon-leanpub</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-level-down\"></use>\n                </svg>\n                <div class=\"name\">level-down</div>\n                <div class=\"code-name\">#icon-level-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-level-up\"></use>\n                </svg>\n                <div class=\"name\">level-up</div>\n                <div class=\"code-name\">#icon-level-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-life-ring\"></use>\n                </svg>\n                <div class=\"name\">life-ring</div>\n                <div class=\"code-name\">#icon-life-ring</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-life-buoy\"></use>\n                </svg>\n                <div class=\"name\">life-buoy</div>\n                <div class=\"code-name\">#icon-life-buoy</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-life-bouy\"></use>\n                </svg>\n                <div class=\"name\">life-bouy</div>\n                <div class=\"code-name\">#icon-life-bouy</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-lemon-o\"></use>\n                </svg>\n                <div class=\"name\">lemon-o</div>\n                <div class=\"code-name\">#icon-lemon-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-lightbulb-o\"></use>\n                </svg>\n                <div class=\"name\">lightbulb-o</div>\n                <div class=\"code-name\">#icon-lightbulb-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-life-saver\"></use>\n                </svg>\n                <div class=\"name\">life-saver</div>\n                <div class=\"code-name\">#icon-life-saver</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-line-chart\"></use>\n                </svg>\n                <div class=\"name\">line-chart</div>\n                <div class=\"code-name\">#icon-line-chart</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-linkedin\"></use>\n                </svg>\n                <div class=\"name\">linkedin</div>\n                <div class=\"code-name\">#icon-linkedin</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-linkedin-square\"></use>\n                </svg>\n                <div class=\"name\">linkedin-square</div>\n                <div class=\"code-name\">#icon-linkedin-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-link\"></use>\n                </svg>\n                <div class=\"name\">link</div>\n                <div class=\"code-name\">#icon-link</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-linode\"></use>\n                </svg>\n                <div class=\"name\">linode</div>\n                <div class=\"code-name\">#icon-linode</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-list\"></use>\n                </svg>\n                <div class=\"name\">list</div>\n                <div class=\"code-name\">#icon-list</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-list-ul\"></use>\n                </svg>\n                <div class=\"name\">list-ul</div>\n                <div class=\"code-name\">#icon-list-ul</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-linux\"></use>\n                </svg>\n                <div class=\"name\">linux</div>\n                <div class=\"code-name\">#icon-linux</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-list-ol\"></use>\n                </svg>\n                <div class=\"name\">list-ol</div>\n                <div class=\"code-name\">#icon-list-ol</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-list-alt\"></use>\n                </svg>\n                <div class=\"name\">list-alt</div>\n                <div class=\"code-name\">#icon-list-alt</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-location-arrow\"></use>\n                </svg>\n                <div class=\"name\">location-arrow</div>\n                <div class=\"code-name\">#icon-location-arrow</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-lock\"></use>\n                </svg>\n                <div class=\"name\">lock</div>\n                <div class=\"code-name\">#icon-lock</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-long-arrow-up\"></use>\n                </svg>\n                <div class=\"name\">long-arrow-up</div>\n                <div class=\"code-name\">#icon-long-arrow-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-long-arrow-right\"></use>\n                </svg>\n                <div class=\"name\">long-arrow-right</div>\n                <div class=\"code-name\">#icon-long-arrow-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-long-arrow-left\"></use>\n                </svg>\n                <div class=\"name\">long-arrow-left</div>\n                <div class=\"code-name\">#icon-long-arrow-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-long-arrow-down\"></use>\n                </svg>\n                <div class=\"name\">long-arrow-down</div>\n                <div class=\"code-name\">#icon-long-arrow-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-magic\"></use>\n                </svg>\n                <div class=\"name\">magic</div>\n                <div class=\"code-name\">#icon-magic</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-magnet\"></use>\n                </svg>\n                <div class=\"name\">magnet</div>\n                <div class=\"code-name\">#icon-magnet</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-low-vision\"></use>\n                </svg>\n                <div class=\"name\">low-vision</div>\n                <div class=\"code-name\">#icon-low-vision</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-mail-reply-all\"></use>\n                </svg>\n                <div class=\"name\">mail-reply-all</div>\n                <div class=\"code-name\">#icon-mail-reply-all</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-mail-reply\"></use>\n                </svg>\n                <div class=\"name\">mail-reply</div>\n                <div class=\"code-name\">#icon-mail-reply</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-mail-forward\"></use>\n                </svg>\n                <div class=\"name\">mail-forward</div>\n                <div class=\"code-name\">#icon-mail-forward</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-male\"></use>\n                </svg>\n                <div class=\"name\">male</div>\n                <div class=\"code-name\">#icon-male</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-map-pin\"></use>\n                </svg>\n                <div class=\"name\">map-pin</div>\n                <div class=\"code-name\">#icon-map-pin</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-map-o\"></use>\n                </svg>\n                <div class=\"name\">map-o</div>\n                <div class=\"code-name\">#icon-map-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-map-marker\"></use>\n                </svg>\n                <div class=\"name\">map-marker</div>\n                <div class=\"code-name\">#icon-map-marker</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-map\"></use>\n                </svg>\n                <div class=\"name\">map</div>\n                <div class=\"code-name\">#icon-map</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-map-signs\"></use>\n                </svg>\n                <div class=\"name\">map-signs</div>\n                <div class=\"code-name\">#icon-map-signs</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-mars-stroke-h\"></use>\n                </svg>\n                <div class=\"name\">mars-stroke-h</div>\n                <div class=\"code-name\">#icon-mars-stroke-h</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-mars-stroke\"></use>\n                </svg>\n                <div class=\"name\">mars-stroke</div>\n                <div class=\"code-name\">#icon-mars-stroke</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-mars-stroke-v\"></use>\n                </svg>\n                <div class=\"name\">mars-stroke-v</div>\n                <div class=\"code-name\">#icon-mars-stroke-v</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-mars-double\"></use>\n                </svg>\n                <div class=\"name\">mars-double</div>\n                <div class=\"code-name\">#icon-mars-double</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-mars\"></use>\n                </svg>\n                <div class=\"name\">mars</div>\n                <div class=\"code-name\">#icon-mars</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-maxcdn\"></use>\n                </svg>\n                <div class=\"name\">maxcdn</div>\n                <div class=\"code-name\">#icon-maxcdn</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-medium\"></use>\n                </svg>\n                <div class=\"name\">medium</div>\n                <div class=\"code-name\">#icon-medium</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-medkit\"></use>\n                </svg>\n                <div class=\"name\">medkit</div>\n                <div class=\"code-name\">#icon-medkit</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-meanpath\"></use>\n                </svg>\n                <div class=\"name\">meanpath</div>\n                <div class=\"code-name\">#icon-meanpath</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-meetup\"></use>\n                </svg>\n                <div class=\"name\">meetup</div>\n                <div class=\"code-name\">#icon-meetup</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-meh-o\"></use>\n                </svg>\n                <div class=\"name\">meh-o</div>\n                <div class=\"code-name\">#icon-meh-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-mercury\"></use>\n                </svg>\n                <div class=\"name\">mercury</div>\n                <div class=\"code-name\">#icon-mercury</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-microphone\"></use>\n                </svg>\n                <div class=\"name\">microphone</div>\n                <div class=\"code-name\">#icon-microphone</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-minus-circle\"></use>\n                </svg>\n                <div class=\"name\">minus-circle</div>\n                <div class=\"code-name\">#icon-minus-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-minus-square\"></use>\n                </svg>\n                <div class=\"name\">minus-square</div>\n                <div class=\"code-name\">#icon-minus-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-minus-square-o\"></use>\n                </svg>\n                <div class=\"name\">minus-square-o</div>\n                <div class=\"code-name\">#icon-minus-square-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-microchip\"></use>\n                </svg>\n                <div class=\"name\">microchip</div>\n                <div class=\"code-name\">#icon-microchip</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-microphone-slash\"></use>\n                </svg>\n                <div class=\"name\">microphone-slash</div>\n                <div class=\"code-name\">#icon-microphone-slash</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-minus\"></use>\n                </svg>\n                <div class=\"name\">minus</div>\n                <div class=\"code-name\">#icon-minus</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-mixcloud\"></use>\n                </svg>\n                <div class=\"name\">mixcloud</div>\n                <div class=\"code-name\">#icon-mixcloud</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-mobile\"></use>\n                </svg>\n                <div class=\"name\">mobile</div>\n                <div class=\"code-name\">#icon-mobile</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-modx\"></use>\n                </svg>\n                <div class=\"name\">modx</div>\n                <div class=\"code-name\">#icon-modx</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-money\"></use>\n                </svg>\n                <div class=\"name\">money</div>\n                <div class=\"code-name\">#icon-money</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-moon-o\"></use>\n                </svg>\n                <div class=\"name\">moon-o</div>\n                <div class=\"code-name\">#icon-moon-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-motorcycle\"></use>\n                </svg>\n                <div class=\"name\">motorcycle</div>\n                <div class=\"code-name\">#icon-motorcycle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-mouse-pointer\"></use>\n                </svg>\n                <div class=\"name\">mouse-pointer</div>\n                <div class=\"code-name\">#icon-mouse-pointer</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-mortar-board\"></use>\n                </svg>\n                <div class=\"name\">mortar-board</div>\n                <div class=\"code-name\">#icon-mortar-board</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-navicon\"></use>\n                </svg>\n                <div class=\"name\">navicon</div>\n                <div class=\"code-name\">#icon-navicon</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-neuter\"></use>\n                </svg>\n                <div class=\"name\">neuter</div>\n                <div class=\"code-name\">#icon-neuter</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-music\"></use>\n                </svg>\n                <div class=\"name\">music</div>\n                <div class=\"code-name\">#icon-music</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-object-group\"></use>\n                </svg>\n                <div class=\"name\">object-group</div>\n                <div class=\"code-name\">#icon-object-group</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-newspaper-o\"></use>\n                </svg>\n                <div class=\"name\">newspaper-o</div>\n                <div class=\"code-name\">#icon-newspaper-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-object-ungroup\"></use>\n                </svg>\n                <div class=\"name\">object-ungroup</div>\n                <div class=\"code-name\">#icon-object-ungroup</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-odnoklassniki-square\"></use>\n                </svg>\n                <div class=\"name\">odnoklassniki-square</div>\n                <div class=\"code-name\">#icon-odnoklassniki-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-odnoklassniki\"></use>\n                </svg>\n                <div class=\"name\">odnoklassniki</div>\n                <div class=\"code-name\">#icon-odnoklassniki</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-opencart\"></use>\n                </svg>\n                <div class=\"name\">opencart</div>\n                <div class=\"code-name\">#icon-opencart</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-openid\"></use>\n                </svg>\n                <div class=\"name\">openid</div>\n                <div class=\"code-name\">#icon-openid</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-opera\"></use>\n                </svg>\n                <div class=\"name\">opera</div>\n                <div class=\"code-name\">#icon-opera</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-paper-plane-o\"></use>\n                </svg>\n                <div class=\"name\">paper-plane-o</div>\n                <div class=\"code-name\">#icon-paper-plane-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pagelines\"></use>\n                </svg>\n                <div class=\"name\">pagelines</div>\n                <div class=\"code-name\">#icon-pagelines</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-outdent\"></use>\n                </svg>\n                <div class=\"name\">outdent</div>\n                <div class=\"code-name\">#icon-outdent</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-paper-plane\"></use>\n                </svg>\n                <div class=\"name\">paper-plane</div>\n                <div class=\"code-name\">#icon-paper-plane</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-paint-brush\"></use>\n                </svg>\n                <div class=\"name\">paint-brush</div>\n                <div class=\"code-name\">#icon-paint-brush</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-paragraph\"></use>\n                </svg>\n                <div class=\"name\">paragraph</div>\n                <div class=\"code-name\">#icon-paragraph</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-paperclip\"></use>\n                </svg>\n                <div class=\"name\">paperclip</div>\n                <div class=\"code-name\">#icon-paperclip</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-optin-monster\"></use>\n                </svg>\n                <div class=\"name\">optin-monster</div>\n                <div class=\"code-name\">#icon-optin-monster</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pause-circle-o\"></use>\n                </svg>\n                <div class=\"name\">pause-circle-o</div>\n                <div class=\"code-name\">#icon-pause-circle-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-paste\"></use>\n                </svg>\n                <div class=\"name\">paste</div>\n                <div class=\"code-name\">#icon-paste</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pause\"></use>\n                </svg>\n                <div class=\"name\">pause</div>\n                <div class=\"code-name\">#icon-pause</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pause-circle\"></use>\n                </svg>\n                <div class=\"name\">pause-circle</div>\n                <div class=\"code-name\">#icon-pause-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-paw\"></use>\n                </svg>\n                <div class=\"name\">paw</div>\n                <div class=\"code-name\">#icon-paw</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-paypal\"></use>\n                </svg>\n                <div class=\"name\">paypal</div>\n                <div class=\"code-name\">#icon-paypal</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pencil-square-o\"></use>\n                </svg>\n                <div class=\"name\">pencil-square-o</div>\n                <div class=\"code-name\">#icon-pencil-square-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-percent\"></use>\n                </svg>\n                <div class=\"name\">percent</div>\n                <div class=\"code-name\">#icon-percent</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pencil-square\"></use>\n                </svg>\n                <div class=\"name\">pencil-square</div>\n                <div class=\"code-name\">#icon-pencil-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pencil\"></use>\n                </svg>\n                <div class=\"name\">pencil</div>\n                <div class=\"code-name\">#icon-pencil</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-phone-square\"></use>\n                </svg>\n                <div class=\"name\">phone-square</div>\n                <div class=\"code-name\">#icon-phone-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-phone\"></use>\n                </svg>\n                <div class=\"name\">phone</div>\n                <div class=\"code-name\">#icon-phone</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-photo\"></use>\n                </svg>\n                <div class=\"name\">photo</div>\n                <div class=\"code-name\">#icon-photo</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-picture-o\"></use>\n                </svg>\n                <div class=\"name\">picture-o</div>\n                <div class=\"code-name\">#icon-picture-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pie-chart\"></use>\n                </svg>\n                <div class=\"name\">pie-chart</div>\n                <div class=\"code-name\">#icon-pie-chart</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pied-piper-pp\"></use>\n                </svg>\n                <div class=\"name\">pied-piper-pp</div>\n                <div class=\"code-name\">#icon-pied-piper-pp</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pied-piper-alt\"></use>\n                </svg>\n                <div class=\"name\">pied-piper-alt</div>\n                <div class=\"code-name\">#icon-pied-piper-alt</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pinterest-p\"></use>\n                </svg>\n                <div class=\"name\">pinterest-p</div>\n                <div class=\"code-name\">#icon-pinterest-p</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-plane\"></use>\n                </svg>\n                <div class=\"name\">plane</div>\n                <div class=\"code-name\">#icon-plane</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-play-circle-o\"></use>\n                </svg>\n                <div class=\"name\">play-circle-o</div>\n                <div class=\"code-name\">#icon-play-circle-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pied-piper\"></use>\n                </svg>\n                <div class=\"name\">pied-piper</div>\n                <div class=\"code-name\">#icon-pied-piper</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pinterest\"></use>\n                </svg>\n                <div class=\"name\">pinterest</div>\n                <div class=\"code-name\">#icon-pinterest</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pinterest-square\"></use>\n                </svg>\n                <div class=\"name\">pinterest-square</div>\n                <div class=\"code-name\">#icon-pinterest-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-play\"></use>\n                </svg>\n                <div class=\"name\">play</div>\n                <div class=\"code-name\">#icon-play</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-play-circle\"></use>\n                </svg>\n                <div class=\"name\">play-circle</div>\n                <div class=\"code-name\">#icon-play-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-plug\"></use>\n                </svg>\n                <div class=\"name\">plug</div>\n                <div class=\"code-name\">#icon-plug</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-plus-square-o\"></use>\n                </svg>\n                <div class=\"name\">plus-square-o</div>\n                <div class=\"code-name\">#icon-plus-square-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-plus-square\"></use>\n                </svg>\n                <div class=\"name\">plus-square</div>\n                <div class=\"code-name\">#icon-plus-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-plus-circle\"></use>\n                </svg>\n                <div class=\"name\">plus-circle</div>\n                <div class=\"code-name\">#icon-plus-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-plus\"></use>\n                </svg>\n                <div class=\"name\">plus</div>\n                <div class=\"code-name\">#icon-plus</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-product-hunt\"></use>\n                </svg>\n                <div class=\"name\">product-hunt</div>\n                <div class=\"code-name\">#icon-product-hunt</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-print\"></use>\n                </svg>\n                <div class=\"name\">print</div>\n                <div class=\"code-name\">#icon-print</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-puzzle-piece\"></use>\n                </svg>\n                <div class=\"name\">puzzle-piece</div>\n                <div class=\"code-name\">#icon-puzzle-piece</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-podcast\"></use>\n                </svg>\n                <div class=\"name\">podcast</div>\n                <div class=\"code-name\">#icon-podcast</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-power-off\"></use>\n                </svg>\n                <div class=\"name\">power-off</div>\n                <div class=\"code-name\">#icon-power-off</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-qq\"></use>\n                </svg>\n                <div class=\"name\">qq</div>\n                <div class=\"code-name\">#icon-qq</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-question\"></use>\n                </svg>\n                <div class=\"name\">question</div>\n                <div class=\"code-name\">#icon-question</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-qrcode\"></use>\n                </svg>\n                <div class=\"name\">qrcode</div>\n                <div class=\"code-name\">#icon-qrcode</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-quora\"></use>\n                </svg>\n                <div class=\"name\">quora</div>\n                <div class=\"code-name\">#icon-quora</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-question-circle-o\"></use>\n                </svg>\n                <div class=\"name\">question-circle-o</div>\n                <div class=\"code-name\">#icon-question-circle-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-question-circle\"></use>\n                </svg>\n                <div class=\"name\">question-circle</div>\n                <div class=\"code-name\">#icon-question-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-quote-left\"></use>\n                </svg>\n                <div class=\"name\">quote-left</div>\n                <div class=\"code-name\">#icon-quote-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-quote-right\"></use>\n                </svg>\n                <div class=\"name\">quote-right</div>\n                <div class=\"code-name\">#icon-quote-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-ra\"></use>\n                </svg>\n                <div class=\"name\">ra</div>\n                <div class=\"code-name\">#icon-ra</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-ravelry\"></use>\n                </svg>\n                <div class=\"name\">ravelry</div>\n                <div class=\"code-name\">#icon-ravelry</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-rebel\"></use>\n                </svg>\n                <div class=\"name\">rebel</div>\n                <div class=\"code-name\">#icon-rebel</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-random\"></use>\n                </svg>\n                <div class=\"name\">random</div>\n                <div class=\"code-name\">#icon-random</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-reddit-square\"></use>\n                </svg>\n                <div class=\"name\">reddit-square</div>\n                <div class=\"code-name\">#icon-reddit-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-reddit-alien\"></use>\n                </svg>\n                <div class=\"name\">reddit-alien</div>\n                <div class=\"code-name\">#icon-reddit-alien</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-recycle\"></use>\n                </svg>\n                <div class=\"name\">recycle</div>\n                <div class=\"code-name\">#icon-recycle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-reddit\"></use>\n                </svg>\n                <div class=\"name\">reddit</div>\n                <div class=\"code-name\">#icon-reddit</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-registered\"></use>\n                </svg>\n                <div class=\"name\">registered</div>\n                <div class=\"code-name\">#icon-registered</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-refresh\"></use>\n                </svg>\n                <div class=\"name\">refresh</div>\n                <div class=\"code-name\">#icon-refresh</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-renren\"></use>\n                </svg>\n                <div class=\"name\">renren</div>\n                <div class=\"code-name\">#icon-renren</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-reorder\"></use>\n                </svg>\n                <div class=\"name\">reorder</div>\n                <div class=\"code-name\">#icon-reorder</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-repeat\"></use>\n                </svg>\n                <div class=\"name\">repeat</div>\n                <div class=\"code-name\">#icon-repeat</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-reply-all\"></use>\n                </svg>\n                <div class=\"name\">reply-all</div>\n                <div class=\"code-name\">#icon-reply-all</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-remove\"></use>\n                </svg>\n                <div class=\"name\">remove</div>\n                <div class=\"code-name\">#icon-remove</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-rmb\"></use>\n                </svg>\n                <div class=\"name\">rmb</div>\n                <div class=\"code-name\">#icon-rmb</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-resistance\"></use>\n                </svg>\n                <div class=\"name\">resistance</div>\n                <div class=\"code-name\">#icon-resistance</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-road\"></use>\n                </svg>\n                <div class=\"name\">road</div>\n                <div class=\"code-name\">#icon-road</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-retweet\"></use>\n                </svg>\n                <div class=\"name\">retweet</div>\n                <div class=\"code-name\">#icon-retweet</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-reply\"></use>\n                </svg>\n                <div class=\"name\">reply</div>\n                <div class=\"code-name\">#icon-reply</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-rocket\"></use>\n                </svg>\n                <div class=\"name\">rocket</div>\n                <div class=\"code-name\">#icon-rocket</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-rotate-left\"></use>\n                </svg>\n                <div class=\"name\">rotate-left</div>\n                <div class=\"code-name\">#icon-rotate-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-rouble\"></use>\n                </svg>\n                <div class=\"name\">rouble</div>\n                <div class=\"code-name\">#icon-rouble</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-rotate-right\"></use>\n                </svg>\n                <div class=\"name\">rotate-right</div>\n                <div class=\"code-name\">#icon-rotate-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-rss\"></use>\n                </svg>\n                <div class=\"name\">rss</div>\n                <div class=\"code-name\">#icon-rss</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-rss-square\"></use>\n                </svg>\n                <div class=\"name\">rss-square</div>\n                <div class=\"code-name\">#icon-rss-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-ruble\"></use>\n                </svg>\n                <div class=\"name\">ruble</div>\n                <div class=\"code-name\">#icon-ruble</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-rub\"></use>\n                </svg>\n                <div class=\"name\">rub</div>\n                <div class=\"code-name\">#icon-rub</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-s15\"></use>\n                </svg>\n                <div class=\"name\">s15</div>\n                <div class=\"code-name\">#icon-s15</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-save\"></use>\n                </svg>\n                <div class=\"name\">save</div>\n                <div class=\"code-name\">#icon-save</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-rupee\"></use>\n                </svg>\n                <div class=\"name\">rupee</div>\n                <div class=\"code-name\">#icon-rupee</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-safari\"></use>\n                </svg>\n                <div class=\"name\">safari</div>\n                <div class=\"code-name\">#icon-safari</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-scissors\"></use>\n                </svg>\n                <div class=\"name\">scissors</div>\n                <div class=\"code-name\">#icon-scissors</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-scribd\"></use>\n                </svg>\n                <div class=\"name\">scribd</div>\n                <div class=\"code-name\">#icon-scribd</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-search-plus\"></use>\n                </svg>\n                <div class=\"name\">search-plus</div>\n                <div class=\"code-name\">#icon-search-plus</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-search\"></use>\n                </svg>\n                <div class=\"name\">search</div>\n                <div class=\"code-name\">#icon-search</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sellsy\"></use>\n                </svg>\n                <div class=\"name\">sellsy</div>\n                <div class=\"code-name\">#icon-sellsy</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-send\"></use>\n                </svg>\n                <div class=\"name\">send</div>\n                <div class=\"code-name\">#icon-send</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-send-o\"></use>\n                </svg>\n                <div class=\"name\">send-o</div>\n                <div class=\"code-name\">#icon-send-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-search-minus\"></use>\n                </svg>\n                <div class=\"name\">search-minus</div>\n                <div class=\"code-name\">#icon-search-minus</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-server\"></use>\n                </svg>\n                <div class=\"name\">server</div>\n                <div class=\"code-name\">#icon-server</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-share-alt-square\"></use>\n                </svg>\n                <div class=\"name\">share-alt-square</div>\n                <div class=\"code-name\">#icon-share-alt-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-share-alt\"></use>\n                </svg>\n                <div class=\"name\">share-alt</div>\n                <div class=\"code-name\">#icon-share-alt</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-share-square-o\"></use>\n                </svg>\n                <div class=\"name\">share-square-o</div>\n                <div class=\"code-name\">#icon-share-square-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-share\"></use>\n                </svg>\n                <div class=\"name\">share</div>\n                <div class=\"code-name\">#icon-share</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-share-square\"></use>\n                </svg>\n                <div class=\"name\">share-square</div>\n                <div class=\"code-name\">#icon-share-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-shekel\"></use>\n                </svg>\n                <div class=\"name\">shekel</div>\n                <div class=\"code-name\">#icon-shekel</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sheqel\"></use>\n                </svg>\n                <div class=\"name\">sheqel</div>\n                <div class=\"code-name\">#icon-sheqel</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-shield\"></use>\n                </svg>\n                <div class=\"name\">shield</div>\n                <div class=\"code-name\">#icon-shield</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-ship\"></use>\n                </svg>\n                <div class=\"name\">ship</div>\n                <div class=\"code-name\">#icon-ship</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-shirtsinbulk\"></use>\n                </svg>\n                <div class=\"name\">shirtsinbulk</div>\n                <div class=\"code-name\">#icon-shirtsinbulk</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-shower\"></use>\n                </svg>\n                <div class=\"name\">shower</div>\n                <div class=\"code-name\">#icon-shower</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sign-in\"></use>\n                </svg>\n                <div class=\"name\">sign-in</div>\n                <div class=\"code-name\">#icon-sign-in</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-shopping-basket\"></use>\n                </svg>\n                <div class=\"name\">shopping-basket</div>\n                <div class=\"code-name\">#icon-shopping-basket</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-shopping-cart\"></use>\n                </svg>\n                <div class=\"name\">shopping-cart</div>\n                <div class=\"code-name\">#icon-shopping-cart</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-shopping-bag\"></use>\n                </svg>\n                <div class=\"name\">shopping-bag</div>\n                <div class=\"code-name\">#icon-shopping-bag</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sign-language\"></use>\n                </svg>\n                <div class=\"name\">sign-language</div>\n                <div class=\"code-name\">#icon-sign-language</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sign-out\"></use>\n                </svg>\n                <div class=\"name\">sign-out</div>\n                <div class=\"code-name\">#icon-sign-out</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-signal\"></use>\n                </svg>\n                <div class=\"name\">signal</div>\n                <div class=\"code-name\">#icon-signal</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-simplybuilt\"></use>\n                </svg>\n                <div class=\"name\">simplybuilt</div>\n                <div class=\"code-name\">#icon-simplybuilt</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sitemap\"></use>\n                </svg>\n                <div class=\"name\">sitemap</div>\n                <div class=\"code-name\">#icon-sitemap</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-signing\"></use>\n                </svg>\n                <div class=\"name\">signing</div>\n                <div class=\"code-name\">#icon-signing</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sliders\"></use>\n                </svg>\n                <div class=\"name\">sliders</div>\n                <div class=\"code-name\">#icon-sliders</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-skype\"></use>\n                </svg>\n                <div class=\"name\">skype</div>\n                <div class=\"code-name\">#icon-skype</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-skyatlas\"></use>\n                </svg>\n                <div class=\"name\">skyatlas</div>\n                <div class=\"code-name\">#icon-skyatlas</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-slack\"></use>\n                </svg>\n                <div class=\"name\">slack</div>\n                <div class=\"code-name\">#icon-slack</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-slideshare\"></use>\n                </svg>\n                <div class=\"name\">slideshare</div>\n                <div class=\"code-name\">#icon-slideshare</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-snapchat-square\"></use>\n                </svg>\n                <div class=\"name\">snapchat-square</div>\n                <div class=\"code-name\">#icon-snapchat-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-snapchat-ghost\"></use>\n                </svg>\n                <div class=\"name\">snapchat-ghost</div>\n                <div class=\"code-name\">#icon-snapchat-ghost</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-smile-o\"></use>\n                </svg>\n                <div class=\"name\">smile-o</div>\n                <div class=\"code-name\">#icon-smile-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-snapchat\"></use>\n                </svg>\n                <div class=\"name\">snapchat</div>\n                <div class=\"code-name\">#icon-snapchat</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-snowflake-o\"></use>\n                </svg>\n                <div class=\"name\">snowflake-o</div>\n                <div class=\"code-name\">#icon-snowflake-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-soccer-ball-o\"></use>\n                </svg>\n                <div class=\"name\">soccer-ball-o</div>\n                <div class=\"code-name\">#icon-soccer-ball-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sort-alpha-asc\"></use>\n                </svg>\n                <div class=\"name\">sort-alpha-asc</div>\n                <div class=\"code-name\">#icon-sort-alpha-asc</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sort-alpha-desc\"></use>\n                </svg>\n                <div class=\"name\">sort-alpha-desc</div>\n                <div class=\"code-name\">#icon-sort-alpha-desc</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sort-amount-asc\"></use>\n                </svg>\n                <div class=\"name\">sort-amount-asc</div>\n                <div class=\"code-name\">#icon-sort-amount-asc</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sort-desc\"></use>\n                </svg>\n                <div class=\"name\">sort-desc</div>\n                <div class=\"code-name\">#icon-sort-desc</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sort-down\"></use>\n                </svg>\n                <div class=\"name\">sort-down</div>\n                <div class=\"code-name\">#icon-sort-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sort-numeric-asc\"></use>\n                </svg>\n                <div class=\"name\">sort-numeric-asc</div>\n                <div class=\"code-name\">#icon-sort-numeric-asc</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sort-asc\"></use>\n                </svg>\n                <div class=\"name\">sort-asc</div>\n                <div class=\"code-name\">#icon-sort-asc</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sort-amount-desc\"></use>\n                </svg>\n                <div class=\"name\">sort-amount-desc</div>\n                <div class=\"code-name\">#icon-sort-amount-desc</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sort-numeric-desc\"></use>\n                </svg>\n                <div class=\"name\">sort-numeric-desc</div>\n                <div class=\"code-name\">#icon-sort-numeric-desc</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sort-up\"></use>\n                </svg>\n                <div class=\"name\">sort-up</div>\n                <div class=\"code-name\">#icon-sort-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sort\"></use>\n                </svg>\n                <div class=\"name\">sort</div>\n                <div class=\"code-name\">#icon-sort</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-soundcloud\"></use>\n                </svg>\n                <div class=\"name\">soundcloud</div>\n                <div class=\"code-name\">#icon-soundcloud</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-space-shuttle\"></use>\n                </svg>\n                <div class=\"name\">space-shuttle</div>\n                <div class=\"code-name\">#icon-space-shuttle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-spinner\"></use>\n                </svg>\n                <div class=\"name\">spinner</div>\n                <div class=\"code-name\">#icon-spinner</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-spoon\"></use>\n                </svg>\n                <div class=\"name\">spoon</div>\n                <div class=\"code-name\">#icon-spoon</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-square-o\"></use>\n                </svg>\n                <div class=\"name\">square-o</div>\n                <div class=\"code-name\">#icon-square-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-spotify\"></use>\n                </svg>\n                <div class=\"name\">spotify</div>\n                <div class=\"code-name\">#icon-spotify</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-square\"></use>\n                </svg>\n                <div class=\"name\">square</div>\n                <div class=\"code-name\">#icon-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-stack-exchange\"></use>\n                </svg>\n                <div class=\"name\">stack-exchange</div>\n                <div class=\"code-name\">#icon-stack-exchange</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-star-half-empty\"></use>\n                </svg>\n                <div class=\"name\">star-half-empty</div>\n                <div class=\"code-name\">#icon-star-half-empty</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-stack-overflow\"></use>\n                </svg>\n                <div class=\"name\">stack-overflow</div>\n                <div class=\"code-name\">#icon-stack-overflow</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-star-half\"></use>\n                </svg>\n                <div class=\"name\">star-half</div>\n                <div class=\"code-name\">#icon-star-half</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-star\"></use>\n                </svg>\n                <div class=\"name\">star</div>\n                <div class=\"code-name\">#icon-star</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-star-half-o\"></use>\n                </svg>\n                <div class=\"name\">star-half-o</div>\n                <div class=\"code-name\">#icon-star-half-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-star-o\"></use>\n                </svg>\n                <div class=\"name\">star-o</div>\n                <div class=\"code-name\">#icon-star-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-star-half-full\"></use>\n                </svg>\n                <div class=\"name\">star-half-full</div>\n                <div class=\"code-name\">#icon-star-half-full</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sticky-note-o\"></use>\n                </svg>\n                <div class=\"name\">sticky-note-o</div>\n                <div class=\"code-name\">#icon-sticky-note-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-step-forward\"></use>\n                </svg>\n                <div class=\"name\">step-forward</div>\n                <div class=\"code-name\">#icon-step-forward</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-steam\"></use>\n                </svg>\n                <div class=\"name\">steam</div>\n                <div class=\"code-name\">#icon-steam</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-steam-square\"></use>\n                </svg>\n                <div class=\"name\">steam-square</div>\n                <div class=\"code-name\">#icon-steam-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-stethoscope\"></use>\n                </svg>\n                <div class=\"name\">stethoscope</div>\n                <div class=\"code-name\">#icon-stethoscope</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-step-backward\"></use>\n                </svg>\n                <div class=\"name\">step-backward</div>\n                <div class=\"code-name\">#icon-step-backward</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-stop\"></use>\n                </svg>\n                <div class=\"name\">stop</div>\n                <div class=\"code-name\">#icon-stop</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-stop-circle\"></use>\n                </svg>\n                <div class=\"name\">stop-circle</div>\n                <div class=\"code-name\">#icon-stop-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-stop-circle-o\"></use>\n                </svg>\n                <div class=\"name\">stop-circle-o</div>\n                <div class=\"code-name\">#icon-stop-circle-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sticky-note\"></use>\n                </svg>\n                <div class=\"name\">sticky-note</div>\n                <div class=\"code-name\">#icon-sticky-note</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-street-view\"></use>\n                </svg>\n                <div class=\"name\">street-view</div>\n                <div class=\"code-name\">#icon-street-view</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-strikethrough\"></use>\n                </svg>\n                <div class=\"name\">strikethrough</div>\n                <div class=\"code-name\">#icon-strikethrough</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-stumbleupon\"></use>\n                </svg>\n                <div class=\"name\">stumbleupon</div>\n                <div class=\"code-name\">#icon-stumbleupon</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-subway\"></use>\n                </svg>\n                <div class=\"name\">subway</div>\n                <div class=\"code-name\">#icon-subway</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-stumbleupon-circle\"></use>\n                </svg>\n                <div class=\"name\">stumbleupon-circle</div>\n                <div class=\"code-name\">#icon-stumbleupon-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-suitcase\"></use>\n                </svg>\n                <div class=\"name\">suitcase</div>\n                <div class=\"code-name\">#icon-suitcase</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-subscript\"></use>\n                </svg>\n                <div class=\"name\">subscript</div>\n                <div class=\"code-name\">#icon-subscript</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-sun-o\"></use>\n                </svg>\n                <div class=\"name\">sun-o</div>\n                <div class=\"code-name\">#icon-sun-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-superpowers\"></use>\n                </svg>\n                <div class=\"name\">superpowers</div>\n                <div class=\"code-name\">#icon-superpowers</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tablet\"></use>\n                </svg>\n                <div class=\"name\">tablet</div>\n                <div class=\"code-name\">#icon-tablet</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-table\"></use>\n                </svg>\n                <div class=\"name\">table</div>\n                <div class=\"code-name\">#icon-table</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-support\"></use>\n                </svg>\n                <div class=\"name\">support</div>\n                <div class=\"code-name\">#icon-support</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-superscript\"></use>\n                </svg>\n                <div class=\"name\">superscript</div>\n                <div class=\"code-name\">#icon-superscript</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tasks\"></use>\n                </svg>\n                <div class=\"name\">tasks</div>\n                <div class=\"code-name\">#icon-tasks</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tags\"></use>\n                </svg>\n                <div class=\"name\">tags</div>\n                <div class=\"code-name\">#icon-tags</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tag\"></use>\n                </svg>\n                <div class=\"name\">tag</div>\n                <div class=\"code-name\">#icon-tag</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tachometer\"></use>\n                </svg>\n                <div class=\"name\">tachometer</div>\n                <div class=\"code-name\">#icon-tachometer</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-telegram\"></use>\n                </svg>\n                <div class=\"name\">telegram</div>\n                <div class=\"code-name\">#icon-telegram</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-taxi\"></use>\n                </svg>\n                <div class=\"name\">taxi</div>\n                <div class=\"code-name\">#icon-taxi</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-terminal\"></use>\n                </svg>\n                <div class=\"name\">terminal</div>\n                <div class=\"code-name\">#icon-terminal</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tencent-weibo\"></use>\n                </svg>\n                <div class=\"name\">tencent-weibo</div>\n                <div class=\"code-name\">#icon-tencent-weibo</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-television\"></use>\n                </svg>\n                <div class=\"name\">television</div>\n                <div class=\"code-name\">#icon-television</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-text-height\"></use>\n                </svg>\n                <div class=\"name\">text-height</div>\n                <div class=\"code-name\">#icon-text-height</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-text-width\"></use>\n                </svg>\n                <div class=\"name\">text-width</div>\n                <div class=\"code-name\">#icon-text-width</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-th-large\"></use>\n                </svg>\n                <div class=\"name\">th-large</div>\n                <div class=\"code-name\">#icon-th-large</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-th-list\"></use>\n                </svg>\n                <div class=\"name\">th-list</div>\n                <div class=\"code-name\">#icon-th-list</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thermometer-0\"></use>\n                </svg>\n                <div class=\"name\">thermometer-0</div>\n                <div class=\"code-name\">#icon-thermometer-0</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-th\"></use>\n                </svg>\n                <div class=\"name\">th</div>\n                <div class=\"code-name\">#icon-th</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-themeisle\"></use>\n                </svg>\n                <div class=\"name\">themeisle</div>\n                <div class=\"code-name\">#icon-themeisle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thermometer-1\"></use>\n                </svg>\n                <div class=\"name\">thermometer-1</div>\n                <div class=\"code-name\">#icon-thermometer-1</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thermometer-2\"></use>\n                </svg>\n                <div class=\"name\">thermometer-2</div>\n                <div class=\"code-name\">#icon-thermometer-2</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thermometer-3\"></use>\n                </svg>\n                <div class=\"name\">thermometer-3</div>\n                <div class=\"code-name\">#icon-thermometer-3</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thermometer-4\"></use>\n                </svg>\n                <div class=\"name\">thermometer-4</div>\n                <div class=\"code-name\">#icon-thermometer-4</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thermometer-empty\"></use>\n                </svg>\n                <div class=\"name\">thermometer-empty</div>\n                <div class=\"code-name\">#icon-thermometer-empty</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thermometer-full\"></use>\n                </svg>\n                <div class=\"name\">thermometer-full</div>\n                <div class=\"code-name\">#icon-thermometer-full</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thermometer-half\"></use>\n                </svg>\n                <div class=\"name\">thermometer-half</div>\n                <div class=\"code-name\">#icon-thermometer-half</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thumb-tack\"></use>\n                </svg>\n                <div class=\"name\">thumb-tack</div>\n                <div class=\"code-name\">#icon-thumb-tack</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thermometer-three-quarters\"></use>\n                </svg>\n                <div class=\"name\">thermometer-three-quarters</div>\n                <div class=\"code-name\">#icon-thermometer-three-quarters</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thermometer-quarter\"></use>\n                </svg>\n                <div class=\"name\">thermometer-quarter</div>\n                <div class=\"code-name\">#icon-thermometer-quarter</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thermometer\"></use>\n                </svg>\n                <div class=\"name\">thermometer</div>\n                <div class=\"code-name\">#icon-thermometer</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thumbs-down\"></use>\n                </svg>\n                <div class=\"name\">thumbs-down</div>\n                <div class=\"code-name\">#icon-thumbs-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-times-circle\"></use>\n                </svg>\n                <div class=\"name\">times-circle</div>\n                <div class=\"code-name\">#icon-times-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thumbs-up\"></use>\n                </svg>\n                <div class=\"name\">thumbs-up</div>\n                <div class=\"code-name\">#icon-thumbs-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-ticket\"></use>\n                </svg>\n                <div class=\"name\">ticket</div>\n                <div class=\"code-name\">#icon-ticket</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thumbs-o-down\"></use>\n                </svg>\n                <div class=\"name\">thumbs-o-down</div>\n                <div class=\"code-name\">#icon-thumbs-o-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-thumbs-o-up\"></use>\n                </svg>\n                <div class=\"name\">thumbs-o-up</div>\n                <div class=\"code-name\">#icon-thumbs-o-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-times-circle-o\"></use>\n                </svg>\n                <div class=\"name\">times-circle-o</div>\n                <div class=\"code-name\">#icon-times-circle-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-times-rectangle-o\"></use>\n                </svg>\n                <div class=\"name\">times-rectangle-o</div>\n                <div class=\"code-name\">#icon-times-rectangle-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-times-rectangle\"></use>\n                </svg>\n                <div class=\"name\">times-rectangle</div>\n                <div class=\"code-name\">#icon-times-rectangle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-times\"></use>\n                </svg>\n                <div class=\"name\">times</div>\n                <div class=\"code-name\">#icon-times</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tint\"></use>\n                </svg>\n                <div class=\"name\">tint</div>\n                <div class=\"code-name\">#icon-tint</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-toggle-left\"></use>\n                </svg>\n                <div class=\"name\">toggle-left</div>\n                <div class=\"code-name\">#icon-toggle-left</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-toggle-down\"></use>\n                </svg>\n                <div class=\"name\">toggle-down</div>\n                <div class=\"code-name\">#icon-toggle-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-toggle-off\"></use>\n                </svg>\n                <div class=\"name\">toggle-off</div>\n                <div class=\"code-name\">#icon-toggle-off</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-toggle-right\"></use>\n                </svg>\n                <div class=\"name\">toggle-right</div>\n                <div class=\"code-name\">#icon-toggle-right</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-toggle-on\"></use>\n                </svg>\n                <div class=\"name\">toggle-on</div>\n                <div class=\"code-name\">#icon-toggle-on</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-toggle-up\"></use>\n                </svg>\n                <div class=\"name\">toggle-up</div>\n                <div class=\"code-name\">#icon-toggle-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-transgender-alt\"></use>\n                </svg>\n                <div class=\"name\">transgender-alt</div>\n                <div class=\"code-name\">#icon-transgender-alt</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-trademark\"></use>\n                </svg>\n                <div class=\"name\">trademark</div>\n                <div class=\"code-name\">#icon-trademark</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-train\"></use>\n                </svg>\n                <div class=\"name\">train</div>\n                <div class=\"code-name\">#icon-train</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-trash-o\"></use>\n                </svg>\n                <div class=\"name\">trash-o</div>\n                <div class=\"code-name\">#icon-trash-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-trash\"></use>\n                </svg>\n                <div class=\"name\">trash</div>\n                <div class=\"code-name\">#icon-trash</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-transgender\"></use>\n                </svg>\n                <div class=\"name\">transgender</div>\n                <div class=\"code-name\">#icon-transgender</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tree\"></use>\n                </svg>\n                <div class=\"name\">tree</div>\n                <div class=\"code-name\">#icon-tree</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-try\"></use>\n                </svg>\n                <div class=\"name\">try</div>\n                <div class=\"code-name\">#icon-try</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-trello\"></use>\n                </svg>\n                <div class=\"name\">trello</div>\n                <div class=\"code-name\">#icon-trello</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-trophy\"></use>\n                </svg>\n                <div class=\"name\">trophy</div>\n                <div class=\"code-name\">#icon-trophy</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tty\"></use>\n                </svg>\n                <div class=\"name\">tty</div>\n                <div class=\"code-name\">#icon-tty</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-truck\"></use>\n                </svg>\n                <div class=\"name\">truck</div>\n                <div class=\"code-name\">#icon-truck</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tripadvisor\"></use>\n                </svg>\n                <div class=\"name\">tripadvisor</div>\n                <div class=\"code-name\">#icon-tripadvisor</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tumblr-square\"></use>\n                </svg>\n                <div class=\"name\">tumblr-square</div>\n                <div class=\"code-name\">#icon-tumblr-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-turkish-lira\"></use>\n                </svg>\n                <div class=\"name\">turkish-lira</div>\n                <div class=\"code-name\">#icon-turkish-lira</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tumblr\"></use>\n                </svg>\n                <div class=\"name\">tumblr</div>\n                <div class=\"code-name\">#icon-tumblr</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tv\"></use>\n                </svg>\n                <div class=\"name\">tv</div>\n                <div class=\"code-name\">#icon-tv</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-twitter\"></use>\n                </svg>\n                <div class=\"name\">twitter</div>\n                <div class=\"code-name\">#icon-twitter</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-twitter-square\"></use>\n                </svg>\n                <div class=\"name\">twitter-square</div>\n                <div class=\"code-name\">#icon-twitter-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-twitch\"></use>\n                </svg>\n                <div class=\"name\">twitch</div>\n                <div class=\"code-name\">#icon-twitch</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-underline\"></use>\n                </svg>\n                <div class=\"name\">underline</div>\n                <div class=\"code-name\">#icon-underline</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-umbrella\"></use>\n                </svg>\n                <div class=\"name\">umbrella</div>\n                <div class=\"code-name\">#icon-umbrella</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-undo\"></use>\n                </svg>\n                <div class=\"name\">undo</div>\n                <div class=\"code-name\">#icon-undo</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-unlink\"></use>\n                </svg>\n                <div class=\"name\">unlink</div>\n                <div class=\"code-name\">#icon-unlink</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-university\"></use>\n                </svg>\n                <div class=\"name\">university</div>\n                <div class=\"code-name\">#icon-university</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-universal-access\"></use>\n                </svg>\n                <div class=\"name\">universal-access</div>\n                <div class=\"code-name\">#icon-universal-access</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-unlock-alt\"></use>\n                </svg>\n                <div class=\"name\">unlock-alt</div>\n                <div class=\"code-name\">#icon-unlock-alt</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-unlock\"></use>\n                </svg>\n                <div class=\"name\">unlock</div>\n                <div class=\"code-name\">#icon-unlock</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-upload\"></use>\n                </svg>\n                <div class=\"name\">upload</div>\n                <div class=\"code-name\">#icon-upload</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-unsorted\"></use>\n                </svg>\n                <div class=\"name\">unsorted</div>\n                <div class=\"code-name\">#icon-unsorted</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-usd\"></use>\n                </svg>\n                <div class=\"name\">usd</div>\n                <div class=\"code-name\">#icon-usd</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-usb\"></use>\n                </svg>\n                <div class=\"name\">usb</div>\n                <div class=\"code-name\">#icon-usb</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-user-circle\"></use>\n                </svg>\n                <div class=\"name\">user-circle</div>\n                <div class=\"code-name\">#icon-user-circle</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-user-o\"></use>\n                </svg>\n                <div class=\"name\">user-o</div>\n                <div class=\"code-name\">#icon-user-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-user-circle-o\"></use>\n                </svg>\n                <div class=\"name\">user-circle-o</div>\n                <div class=\"code-name\">#icon-user-circle-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-user-plus\"></use>\n                </svg>\n                <div class=\"name\">user-plus</div>\n                <div class=\"code-name\">#icon-user-plus</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-user-md\"></use>\n                </svg>\n                <div class=\"name\">user-md</div>\n                <div class=\"code-name\">#icon-user-md</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-user-secret\"></use>\n                </svg>\n                <div class=\"name\">user-secret</div>\n                <div class=\"code-name\">#icon-user-secret</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-user\"></use>\n                </svg>\n                <div class=\"name\">user</div>\n                <div class=\"code-name\">#icon-user</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-user-times\"></use>\n                </svg>\n                <div class=\"name\">user-times</div>\n                <div class=\"code-name\">#icon-user-times</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-users\"></use>\n                </svg>\n                <div class=\"name\">users</div>\n                <div class=\"code-name\">#icon-users</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-vcard-o\"></use>\n                </svg>\n                <div class=\"name\">vcard-o</div>\n                <div class=\"code-name\">#icon-vcard-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-vcard\"></use>\n                </svg>\n                <div class=\"name\">vcard</div>\n                <div class=\"code-name\">#icon-vcard</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-venus\"></use>\n                </svg>\n                <div class=\"name\">venus</div>\n                <div class=\"code-name\">#icon-venus</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-venus-mars\"></use>\n                </svg>\n                <div class=\"name\">venus-mars</div>\n                <div class=\"code-name\">#icon-venus-mars</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-venus-double\"></use>\n                </svg>\n                <div class=\"name\">venus-double</div>\n                <div class=\"code-name\">#icon-venus-double</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-viadeo-square\"></use>\n                </svg>\n                <div class=\"name\">viadeo-square</div>\n                <div class=\"code-name\">#icon-viadeo-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-viacoin\"></use>\n                </svg>\n                <div class=\"name\">viacoin</div>\n                <div class=\"code-name\">#icon-viacoin</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-viadeo\"></use>\n                </svg>\n                <div class=\"name\">viadeo</div>\n                <div class=\"code-name\">#icon-viadeo</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-video-camera\"></use>\n                </svg>\n                <div class=\"name\">video-camera</div>\n                <div class=\"code-name\">#icon-video-camera</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-vimeo-square\"></use>\n                </svg>\n                <div class=\"name\">vimeo-square</div>\n                <div class=\"code-name\">#icon-vimeo-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-vine\"></use>\n                </svg>\n                <div class=\"name\">vine</div>\n                <div class=\"code-name\">#icon-vine</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-vimeo\"></use>\n                </svg>\n                <div class=\"name\">vimeo</div>\n                <div class=\"code-name\">#icon-vimeo</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-vk\"></use>\n                </svg>\n                <div class=\"name\">vk</div>\n                <div class=\"code-name\">#icon-vk</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-volume-control-phone\"></use>\n                </svg>\n                <div class=\"name\">volume-control-phone</div>\n                <div class=\"code-name\">#icon-volume-control-phone</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-volume-off\"></use>\n                </svg>\n                <div class=\"name\">volume-off</div>\n                <div class=\"code-name\">#icon-volume-off</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-volume-down\"></use>\n                </svg>\n                <div class=\"name\">volume-down</div>\n                <div class=\"code-name\">#icon-volume-down</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-warning\"></use>\n                </svg>\n                <div class=\"name\">warning</div>\n                <div class=\"code-name\">#icon-warning</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-volume-up\"></use>\n                </svg>\n                <div class=\"name\">volume-up</div>\n                <div class=\"code-name\">#icon-volume-up</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-wechat\"></use>\n                </svg>\n                <div class=\"name\">wechat</div>\n                <div class=\"code-name\">#icon-wechat</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-weibo\"></use>\n                </svg>\n                <div class=\"name\">weibo</div>\n                <div class=\"code-name\">#icon-weibo</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-whatsapp\"></use>\n                </svg>\n                <div class=\"name\">whatsapp</div>\n                <div class=\"code-name\">#icon-whatsapp</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-weixin\"></use>\n                </svg>\n                <div class=\"name\">weixin</div>\n                <div class=\"code-name\">#icon-weixin</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-wheelchair-alt\"></use>\n                </svg>\n                <div class=\"name\">wheelchair-alt</div>\n                <div class=\"code-name\">#icon-wheelchair-alt</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-wheelchair\"></use>\n                </svg>\n                <div class=\"name\">wheelchair</div>\n                <div class=\"code-name\">#icon-wheelchair</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-wikipedia-w\"></use>\n                </svg>\n                <div class=\"name\">wikipedia-w</div>\n                <div class=\"code-name\">#icon-wikipedia-w</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-wifi\"></use>\n                </svg>\n                <div class=\"name\">wifi</div>\n                <div class=\"code-name\">#icon-wifi</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-window-close\"></use>\n                </svg>\n                <div class=\"name\">window-close</div>\n                <div class=\"code-name\">#icon-window-close</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-window-close-o\"></use>\n                </svg>\n                <div class=\"name\">window-close-o</div>\n                <div class=\"code-name\">#icon-window-close-o</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-window-maximize\"></use>\n                </svg>\n                <div class=\"name\">window-maximize</div>\n                <div class=\"code-name\">#icon-window-maximize</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-window-minimize\"></use>\n                </svg>\n                <div class=\"name\">window-minimize</div>\n                <div class=\"code-name\">#icon-window-minimize</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-window-restore\"></use>\n                </svg>\n                <div class=\"name\">window-restore</div>\n                <div class=\"code-name\">#icon-window-restore</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-windows\"></use>\n                </svg>\n                <div class=\"name\">windows</div>\n                <div class=\"code-name\">#icon-windows</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-won\"></use>\n                </svg>\n                <div class=\"name\">won</div>\n                <div class=\"code-name\">#icon-won</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-wordpress\"></use>\n                </svg>\n                <div class=\"name\">wordpress</div>\n                <div class=\"code-name\">#icon-wordpress</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-wpexplorer\"></use>\n                </svg>\n                <div class=\"name\">wpexplorer</div>\n                <div class=\"code-name\">#icon-wpexplorer</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-wpbeginner\"></use>\n                </svg>\n                <div class=\"name\">wpbeginner</div>\n                <div class=\"code-name\">#icon-wpbeginner</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-xing-square\"></use>\n                </svg>\n                <div class=\"name\">xing-square</div>\n                <div class=\"code-name\">#icon-xing-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-wrench\"></use>\n                </svg>\n                <div class=\"name\">wrench</div>\n                <div class=\"code-name\">#icon-wrench</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-wpforms\"></use>\n                </svg>\n                <div class=\"name\">wpforms</div>\n                <div class=\"code-name\">#icon-wpforms</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-y-combinator\"></use>\n                </svg>\n                <div class=\"name\">y-combinator</div>\n                <div class=\"code-name\">#icon-y-combinator</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-xing\"></use>\n                </svg>\n                <div class=\"name\">xing</div>\n                <div class=\"code-name\">#icon-xing</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-y-combinator-square\"></use>\n                </svg>\n                <div class=\"name\">y-combinator-square</div>\n                <div class=\"code-name\">#icon-y-combinator-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-yahoo\"></use>\n                </svg>\n                <div class=\"name\">yahoo</div>\n                <div class=\"code-name\">#icon-yahoo</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-yc\"></use>\n                </svg>\n                <div class=\"name\">yc</div>\n                <div class=\"code-name\">#icon-yc</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-yc-square\"></use>\n                </svg>\n                <div class=\"name\">yc-square</div>\n                <div class=\"code-name\">#icon-yc-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-yen\"></use>\n                </svg>\n                <div class=\"name\">yen</div>\n                <div class=\"code-name\">#icon-yen</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-yelp\"></use>\n                </svg>\n                <div class=\"name\">yelp</div>\n                <div class=\"code-name\">#icon-yelp</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-yoast\"></use>\n                </svg>\n                <div class=\"name\">yoast</div>\n                <div class=\"code-name\">#icon-yoast</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-youtube-play\"></use>\n                </svg>\n                <div class=\"name\">youtube-play</div>\n                <div class=\"code-name\">#icon-youtube-play</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-youtube-square\"></use>\n                </svg>\n                <div class=\"name\">youtube-square</div>\n                <div class=\"code-name\">#icon-youtube-square</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-youtube\"></use>\n                </svg>\n                <div class=\"name\">youtube</div>\n                <div class=\"code-name\">#icon-youtube</div>\n            </li>\n          \n          </ul>\n          <div class=\"article markdown\">\n          <h2 id=\"symbol-\">Symbol 引用</h2>\n          <hr>\n\n          <p>这是一种全新的使用方式，应该说这才是未来的主流，也是平台目前推荐的用法。相关介绍可以参考这篇<a href=\"\">文章</a>\n            这种用法其实是做了一个 SVG 的集合，与另外两种相比具有如下特点：</p>\n          <ul>\n            <li>支持多色图标了，不再受单色限制。</li>\n            <li>通过一些技巧，支持像字体那样，通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>\n            <li>兼容性较差，支持 IE9+，及现代浏览器。</li>\n            <li>浏览器渲染 SVG 的性能一般，还不如 png。</li>\n          </ul>\n          <p>使用步骤如下：</p>\n          <h3 id=\"-symbol-\">第一步：引入项目下面生成的 symbol 代码：</h3>\n<pre><code class=\"language-html\">&lt;script src=\"./iconfont.js\"&gt;&lt;/script&gt;\n</code></pre>\n          <h3 id=\"-css-\">第二步：加入通用 CSS 代码（引入一次就行）：</h3>\n<pre><code class=\"language-html\">&lt;style&gt;\n.icon {\n  width: 1em;\n  height: 1em;\n  vertical-align: -0.15em;\n  fill: currentColor;\n  overflow: hidden;\n}\n&lt;/style&gt;\n</code></pre>\n          <h3 id=\"-\">第三步：挑选相应图标并获取类名，应用于页面：</h3>\n<pre><code class=\"language-html\">&lt;svg class=\"icon\" aria-hidden=\"true\"&gt;\n  &lt;use xlink:href=\"#icon-xxx\"&gt;&lt;/use&gt;\n&lt;/svg&gt;\n</code></pre>\n          </div>\n      </div>\n\n    </div>\n  </div>\n  <script>\n  $(document).ready(function () {\n      $('.tab-container .content:first').show()\n\n      $('#tabs li').click(function (e) {\n        var tabContent = $('.tab-container .content')\n        var index = $(this).index()\n\n        if ($(this).hasClass('active')) {\n          return\n        } else {\n          $('#tabs li').removeClass('active')\n          $(this).addClass('active')\n\n          tabContent.hide().eq(index).fadeIn()\n        }\n      })\n    })\n  </script>\n</body>\n</html>\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/iconfont/iconfont.css",
    "content": "@font-face {font-family: \"iconfont\";\n  src: url('iconfont.eot?t=1578374019685'); /* IE9 */\n  src: url('iconfont.eot?t=1578374019685#iefix') format('embedded-opentype'), /* IE6-IE8 */\n  url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAATVIAAsAAAAClAgAATT3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgDYXgqI20SHmjkBNgIkA5UUC5UYAAQgBYRtB8ByWxsokkXP3/BdxSBm33QbArwqP810+QPWjG32EOk8VtXHwwT0gLL7lMjdKtQqL5DO/v////9/U7KQsd0/z/22DQCZgqqpqlVVCdIREBMlmVMoXerBhG4QI0MMaZjCJs8uYkSs6IVvkbDzkUvBuMp9HEG5gmrqBMVELEpv56iHhm63tztiQmjHyfRs5O05yxmLZdBdp8EB/YyKWt/qdJnGca+S5n2Dq8phvcmCg55bQ7/3oAi3XY0u0lXNBsXswNYsdo8hHpMTwZ91lWtWSZ1qdrMd1T3NR5rNVE80f9k/5XGVbkBKwptf1Xf5ISk/JZE0glS+5Ne3bcJG2c47apvHjFkUj3gpnoiHnOyiWqmRTXuqpE4WqoGCRCAFaUC2gSS6usGgLSiD4gga809oyUv/xVj879Ko07P+0tn8rvbLffgQM3LzHzs2cZcFVd266v9teQHbGJj3IxDNQA+4UC95sQ3dT/j//6PffmffP1ITh9EXiOJEs8gSCzTy2abl8aEHOPxdGNEWzzzwjAOb4zfGeI3tADi0idQpBsDwpJv/mHdh5GX4iSsXMHdxYURGohAwYtLeO6BfIIdKcI471/xN0G677uLKORYUc9T5613/x3b7Pyj2W+1MYrV2TGJ/a8e8AZpbt2DZxMaaqAUbUasitxHdSqTNQFQwCgN8o8CoegP0tf/11f/334+CB561+XmEAiU1QsInmB7ux8yYbzr9tLIsHiZqptye7L/tspGBUJ7OtuD+fO/UmtnlmTseMOyyDEmOACJpbZdcn+PXTVNf6rJ+5F/pV7IMgYLQMpQMVHeZEv9fZ32dPzwQV0jiCgQFNOWpaqra2XHeZH9ysyffJNhNg83C/f+/NaOqZLUqrJYgiYOPGHHIqDDJE2QEDaPOD/3b/bnvvluCJl1dLVhOIB3ERrVkz34pajanOoconL7/+fv98s/H8e29i7tRmX0IGg+k/3gTcORfbjyOz47OmQtZ4gGSdLdoDb2dWTx4CrCOj5NkRGRdhXAVthbJ2dVd2kbYid3Frd/ch1kFvMXTgkARRjMc0yTnNmkIGYtt9ygIBl8M0VKyLT4MCyCAgDhWe+gFfjNVSVj1Qj9wLe3BN8EBXXV/JPjKfOblAwGO1dQOKD+qw3QD8wwhDQeBgXMSXOSAJ71A1SLjGXs1QsbA9LD3n/dLEara5Wxkm6FAbxBpTVpnZPyiiOpVQoAKuNFtypVYopkmT/JoM3UzhUASrPPEf+7mJo4KGdJuv1JcMwZhQQmkQihkdyiEpKuqEH5wJK1+DAzoadr/ITEQ/L9PZ1/dbgmfU7eb4BEwMQSHCkiyPUgCNCEx2U8/Vbu56uxfBwkBnoAQOEwEpzAxdtjwtTz//X6/PWcuKi9Sm4iGpusTsiSz6aQM9uXPct/O/VJVv5kPwjNhENuxnQJJMgF12m1nABQRpo4c3u1UTauq7jjzjhMk2W4PSJYMzW7gYShoWvSNZ9kx0cv+lOJ+qrhfgcA0PaJSmUAWNpLthNh9zf3v/1KTuiztsolSzxjGFDBgHAZJ17VDkxd72nXd2XRO1/a+n5n27z37b4ncMBuAoistgj/ms8ap8cYB8alcKAaY/cVxpaXhAIbpPfedOBC1r2a9/611nPbM/u1SpkZylwVEwhIiimAAyLb2/zdVv3ZAmf6Q9XcX/JHeFOkN+fRebU5FvUV33xsMNW8GQ2AGBIkBCBogRFsATRsDEhIGNGUIlPQZtP5M4pEo/ZgVNoUZUJQHpGTNgAoA5QBQP5DaRDrKG0PsYlH/qvxFGXO1bbHVdtv1222VmgZGFBlkJUBBMqLIIPNfOqurZMChe3aee3L09mk3X93ekE4xHY571A9Vpf9/BVeVCiiVhFEJbEsCTJWARhLYpQJsqYAeTLd3DZPsnuT2ZPfEToMksBHQswbcgd6Q8q3DhhBv+/Z03uMc93jY82WttVh+xFDLMgzIMEx+lkO6mAzlvt2lZjVE5/9+r65pOJQEH+ntRTVl0O1X972/SlvTQPN4pOmYhu9MaeBDmBwHER7EkkAiDMTaAlEabQXfpisET73Enzy8+5/uPGZGjTTMbqgx1e/5bp/0f3Vuqa80XxsWkSAiIYRwCCHIsB+/qzA2nfj0PgGj4zrENATt/bsZGYhDnO4ZxmY9uuq7M0HBgcrSaEL9Ycz1f2B1szs7NKxcKCgiNjUb7ob1/jxkavWOS7Il27I520mIccGAS6UIEJJG0qjA/hHb6hf1qtRH71yREhEzQGpjtj7aUK1Anh4LwBFcmzTku7N2xh4MOD/eArBWPoQFYH/JC6ax9QJ7sMA2OGGm23oWErBPX5R+wFP5gV/foBjBAQI2GcD5Gd0vNgnG7ef71UVGuM/nnbGL2n4ysHsiEMAJBrDbGEa3q3FOToU/RsHJ1rTzD1iAv3ON+NYtU/rB6rUUkLK9B1tIpRumZbM7nC43bmEQyriQShvrPD8IozhJs7woq7ppu37A4zQv67Yf53Vn+XnH6g+EYGRKgELA+RuCMIrhBEnRDOFYPJFMpTPZXL5QLJUr1Wyt3mi22p1urz8YjsaT6WweWSxX6812tz8cT3DTmWwuXygCIAQjKIYTJEUzLMcLoiQrqqYbpmU7rueXypVqrd5ottqdbq8/GAaj8WQ6my+Wq/VmCzWZSsvIyu1VP+/OvQePCopKyiqqauoamlraOroCPX0DQ6Nc3tjE1MzcwtLK2sbWzt7BcWz95OwidAUkFjWfkvDghDzV8oVuMknb7lYgFBVrN7uTkJSSLqMJyJJNdjly+UKxVK5Ua3V/5hWHmq12p9vrD4aj8WQ6my+SulytN9uonG5/OJ7Ol9u7+4fHp+fr1bg8+BkJhsKRaIxu8UQylc5kpzKbO74n8YViqexWyIVwrd5otoTtp9Pt9QfWjY7Gk+lsvliu1p9+t7t9lofj8Ip1Ol/0j93uHx6fnl9e394/AsFQOBKNxRPJVDqTzeULxVK5Uq3VG81Wu9Pt9ZeWV1bX1odd729za3tnd2//4HBw5MvkyenZ+QVxeXV948fU3f1DLmxlvwpn5xeXV9c3t3f3xVK5Uq3VG81Wu9Pt9QfD0XhsPZnO5ovlau3i/qPQVGzQ7mKPh+MGZCpWRt1Lyc8//3qLKT/IwsFXbX18/+9s8L/2e8BtoZpQGBwxLy9R6BiYWNiw4wDKQAhGBiXFcGJqXVI0w3I8vkAoEksKScdrM5MrlCq1RqvTG4wms8Vqszucrv4vj9fHrXwocgsCQ6AwOAKJQmOwOPwlQGYJx4QZVlYkkSlUGp3BzLsqd3lh556TRy6PLxA2FIklUplcodwi1V0sda3R6vT9JrnqPaPJ7JnfR1abvYOjk7NLX36mqyTHzd0DACEYQTGcIPMvRzPsVO14QVQ+rFJfNVpda58Go8lssdqaZ9bKv89jcThdbk+md5z3fib5Gnodb7Kr47RIcyGoCMh4BjKIwQxhKMMYzghGMorRjGEs4xjPBCYyiclMYSrTmM4MZjKL2cxhLvOYzwIWsojFLGEpy1jOClayitWsYS3rWM/OmDSRXm6Bvk5m5CbIBJsQE2rCTLiJMJEmSpXCLUqjUkTt5WiM1uiM3hj8Y7B2RuuRyZbNbP2y2HrJdsBSIAgSghBhCBMBESIhShTEEA2xxEAcsRBPHCQQD4kkQBKJkEwSpJAMqaRAGqmQThpkkA6ZZEAWmZBNFuSQDbnkQB65u5t4IJ98KKAACimEIoqgmGIooQRKKYUyyqCccqigAiqphCqqoJpqqKEGaqmFOuqgnnpooAECNEIjTdBEMzTTAi20Qitt0EY7tNMBHXRCJ13QRTd00wM99EIvfdBHP/QzAAMMwiBDMGQYho3AiFEYNQZjxmHcBEyYhElTMGUaps3AjFmYNQdz5mHeAixYhEVLsGQZlq3AilVYtQZr1mHdBmzYhE1bsGUbtu3Ajl3YtQd79mHfARw4hENHcOQYjp3AiVM4dQZnzuHcBVy4hEtXcOUart3AjVu4dQd37uHeAzx4hEdP8OQZnr3Ai1d49QZv3uHdB3z4hE9f8OUbvv3Aj1/49Qd//uHf5yQFzKmIeZWwQGUsUgVLVMUy1dajOqxQA6vUxBq1sE5tbFAHm9TFFgXYph52qI8BDbBLQ+zRCPs0xgFNcEhTHNEMxzTHCS1wSkuc0QrntMYFbXBJW1zRDte0X+0AN3TELZ1wR2fc0wUPFOKRrniiJzzTM17oBdErXukNb/SOd/rAB33ik74W9Q1f9INv+sUP/eGXbvhb/eN/3fsKsM8I2BeE7Csi9g0x+46E/UDKfiJbO3LsF4qlKO3uo8J+o2Z/0LC/aNk/dHso0WOPMbBPgJH9x8TOMBMwLEQAWIkQsBERYCdiwEEkgJPdBBeRAm4iAzxEDniJAvARJeAnKiDAPgJBogZCRAOEiRaIEB0QJXrEiAFxYkSCmJAkZqSIBWliRYbYkCV25IgDeeJEgX0AiuwhJfaIMnGhQtyoEg9qxIs68aFB/GiSAFokiDYJoUPC6JIIeiSKPolhQOIYkgRGJIkxSWGymimSxoxkMCdZLEgOS5LHailrpIANKWJLStiRMvakggOp4khqOJE6zqSBC2niSlq4kTbupIMH6eK5u8wL6eG9HvlgT/iSPn5kgD8ZEkBGBJIxQWRCMJkS8tVCkRlhZE44WRBBlkSSFVFkTTTZELN2sRYVh2yJ392UgOxIJHuSyIFkciSFnEhl70EaOZPOXoEMciGTXMkiN7LJnRzyIJc8yWPXkU9eFJA3heRDEflSTH6UkD+l7I4yCqCcAqmgICopmCoKoZpCqaEwaimcOoqgniJpoCga9/NUE4qmmWJooVhaKY621dpNHSieTkqga+26USI9lEQvJdPHbumnFAYolUFKY4jSGaYMRiiTUcpijLIZpxwmKJdJymOK8pmmAmaokFkqYo6KmacSFqiURSpjicpZpgpWqJJVqmKNqlmnGjaolk2qY4vq2aYGdqiRXWpij5rZpxYOqJVD1MZhaucIdXCUOjlGXRynbk5QDyepl1PUx2nq5wwNcJYGOUdDnKdhLtAIF2mUS/tr6TJ2A1dojKs0zjWa4DpNcoOmuEnT3KIZbtMsd2iOuzTPPVrgPi3ygL0AD2mJR7TMY1rhCa3ylNZ4Rus8Z7e9oA1e0iavaIvXtM0b9hq8pR3e0S7vaY8PtM9HOuDTfqb7bLUv6BBf6TDf6Ajf6Sg/6Bg/6Ti/6AS/6SR/6BR/6TT/6Az/6ayoWJFoTZINyQBSgKSCSAOTDiEDSiaMLDjZCHKQ5KLIQ5OPoQBLIY4iPMWERYkoIVFKpoxCOZUKGpV0qhhUM9nJooZNKId9XPbj7SHmo1ZAnZAwEfViGiQ0Snf3Zb6oHE2KLVtptQq71QRqCNHSQcf+ejoa6GSks4kuZiItRNjS1Y5u9nR3oIcjPZ0Id6aXC0Gu0w293enjQV9P+nnR3xvsGDAgBAIlMBhBwAkKQU6QBIMiOPTWC4MQsISEIxQ8oREIg0hYJMIhEx6FCKhERGPp6ETCIDImUbCIir0UB9FwiY5HDHxyJlg7IXIhIldiciMhJimxyMidnNgUxKEkLhXxqIlPQwJaEtJt2fTIg2FRRuTJRF7M5M1CPqzky0Z+7OTPQQGcJOIiMTdJeEjKS4F8JOMnuQAFCVKwEIUIo1DhFCaCwkWyVaIoQjRFiqEosaQQx3yIJ6UE5lYiqSSRWjJppJBWKumkkV46GWSQUSaZZJFZNlnkULRcipFHsfLXrwJLFdp6FaE4xetRid1NpbZeZSheOSWoIKtKsqkiu2pKVENJailZHaWoZ941UKpG5k4T86KZ0rQw91opXRvzqJ0ydFCmTsrSRdm6KUfPt9aLcvVRnn7KN0AFBqnQEBUZpmIjVGJ0/RpDpcb3UWsClZmkclNUYZoqzVCV2f2dN4d5M89cWaBqi1RjiWotU52V/XS2ivkFrFG9dWqwQY02qckWNdumFjvUapfa7FG7fVbigDkADpkj4IgWOKaFTqjDKXU6oy7n1O2CelxSryvqc039bmjALQ26o0XuabEH5h/wSEs80VLPtMwLLfe6dm9ohXca8kEOnzTsa1/Fvu0r2g8a8Usr/dGof1p1AtjCE4hWn8C0Zrs54myKixmu5rhZ4G6JhxUNaut42tiyTWtXFBeafuJG9SLuVG/iQfUhnlRf4uUH4yfxV7tFH/9+f5f2/zx/3idx4rDjP4dvUUzS+CWkwxo8Qr7LAF4zXRqkUoj0DkrW/iZzOmZe5GJnNT6dAfsz5CUZYv1Qt0W3fd1ylP2qtfMIcYKz/yYzuEfXu2foApIiIuy5Q2A9SRU7pIO5TZhVCT+wbmWXwOCBHw4d8FJBUf4qHbex1Ullhilm4afgRUL93RRvKsNaTCVtfGsul+MhbzhhukJZMI5qBwnUBAOFWNVCMqKVVsMJTDigpfjTsvki57bqBPvwn0wrvqSmmNLOIrkighmo55DXd3FpbrVpDPGnmdxugV+zUoYHAPgV2yqdpddV5yO7/EiibAJhQ3ClpyImQChoA6Yd6Jc2au3EgHpEDbWBwMGL3h2mT2aIzC+SYQjcX8WyQafKWA5Wce1A3eEUro5udv+441dpvHTpbXXrpmtH3Nhxr7AnXRlBhW6wDvErulAmhmiEBA6OTVTdZCa91tL+zrU9TOO9opEUDb+xfvs4oEN9VlXWLpcfthhOOcNpC5ID+RGlNlKW4nt3/Y3Dz+5w6ItnX8QbgO2CSWPjXz6uhfxrY8kkmduZbeyXbxk3/5iezefPLZcvAoILBM9b926EJu/OeaGx76LoHHUt3na6wlTinQHvfIqNia8JXzE0bE2oooSWpFZpyVypkIh1o804GjPmkoQLZKGc0YvX2o7jEyR1FtpBVBSZi7LAtc/1tCqEy1U5s6eeMe+QzyXxdCrZjwSIZwmxe/uUaBfEUV1DI1KeH8lxIGUQfqA1VQ0bsy1kQDB3HgJJmAuUJfnvfabAvkWGiUxpWZYZlLFMFAONhnXT1W2e0WZ5R/p0TdvYIQbqzvSBrjDO1IwQKZYoCsE8DLWRrt8c9IOIgiw1tazqXDwC66drW3WCbNuGAcFlZT/4a7qawduVyQysBaPe9pu2J/sbRdd9AcD1wmcSifzyh4oVvkMalGLTvvXNVlxtiLVvnnwyEmubdtjWw+blNFNxnIhsWoJIFAlwRFjoO0w2J95qEU3Nyoiiy3H0/vycIs1pheedy5AABRB0Tt72XT63D5c6cwxRJJFI4SgEFiW4UjMRkfSzMFcoFZnaAvXkG1irsI/1ernhYjI93EblDJG6mWS6bf2kss6ONrfe76bz7a7rOJk608tSftK0LIq2GbJyvTeV7dlyE49N4b32y6QcN9Xm+BhNK7jtoGyJSwSF2vs7NhSwUw6BjCNFFsB7FHj8NoZOjWimCob4SYLUUTu+jSoOeDFJFmkY33rRJ7MixXYSxkYRKMumqmTGUNQzyU/K9IVM68yY77uhl6X9aRsAb2O/HFD6w6fhi8IYr1McGaPSnZmDCsdmBWu7wxiifptf53sxHEmUrERlZ5PXymdp//862xnbGw4mS1U+uFGBqP/yxQooMNDw6d0VrjZPUjtOLBxfXo4Xo4hsXWiWl88e5ryAup6qW3nhjX+hqOteTu+G08T45VVFa8p3uBm603UsJCpUxNyzhO62sxkUU4g5RXXPII6ec9HQHmudPAXgqrXLdX+A4nn0lzeTFmbhm4BCJZLI22SWPlNEkkZ9U9198xEnFbsDjxRIzy98uE46yXrJ6k2Xz2aW+/mR/NGDIJVy/5v/ZMN/jky5y+pM0mYyqSfi07eJgXwj81G1OTrewoK9jAMsEntdP4YncFl8WTs3oiojZQbRTvOs4rvAhh04O3DP/imMhjt5grlPeVgeQRA1PF3ryXL6Wh76BsdBRIykkgiiKcxCq4gRIU5B4B44KTGUXfLHlM3x41lmTMB/9USaWsNafWUrVg5nWZmWpqJdzzDMJSnEmsrF2fN8xcRJlnnHvztzsUoeWcM3LnJr33r1dWPdbCCHOSs7IPMCjN+7U+xG8wOP5a1vRNoNz7zlzq6Eor+1iB+9L9ePEtjzFDWcz53z1iK8nnu/WUPrC3+5WmFztdg0G0J/6D2+HtCeWO4zJVoRyFGT95Db/dmGqn/tLexFA5IhCX8yON3ivYB2Wztj3AAc6a659xfbIq4n0H30P0Z05icXDz57X4DN/nV+uuRmet3+G48HRMODnSA5z5p5ntOUsyaXdF2p9QOt3QPnzC81D0OaE+85a7KuG0srotNpKoLJYqmXCmGGAhOUW+ClGWnHkIW67sD1ydQ3EMjD2bn0Va5W/soXoOhdbaoaIarJ93vjK86POfQff3gS3IYiPzFWYt49lgWa953nAExp1uCTG0sThD2uLlvM+WDtIBwYGu+ryv+Bbt9ASJolwfIQb17kbUo9th0jMbWhBnA56c05DAuuLy8okurPGe71BbzlDFugmfxG+AXoAzCs8QZEnriozTJXx3g9seYuMcp0eVxzEvVMusWCN+t/PVEJfwgHWz9dI9OdFtCZG8rquAzZzlwvXs7qrhFS0E0DxW2qvc/0mbwXIzPvCeNbtlRRRCOlX9RlcHUVbPSKTtJQHKStZaDSoCz6tDM/dfztakJRVTSaGgwd4skGD9o7RAT6GyzUjb34o6+A9hCMA6JcnNYvxh1O+heWC6qFRtOBne7iBL0n77tDoluw7Yrlce2ZhHUsJ00xYhOUXArZfc6bfZpOX7MyYTwdR1ehUZFhV2Wac7QpHacEWigzVlPYim6zCciRVgFEpMf7vCCldvLu0dD0EkJjuJLcxi6/ovciWBcd5SAYLwrn1xLRmHVFLYpEJyX61oJiVUQnyi4VuqVIJJ7KjPriFXk/OaO89cWn/5SpD/nZcXRpafzuLkAVkLovMsmSRQe6ZfLWt+sSDsJP1KGVzObY7qmIHiffOKdDfvbvjujLNCDXaBPAJscat5T8aoCEvtRiJWIIx3bdhtp8tYWqg3tk4U8V6rHtxuXQMkp0/HkkO6YWxKTPU2497e7eMnwUdrvbvbYL3GDV3KL87kZ/hvOSsKhE19E9i7fEjXTDERG0LoiuUi9Yb3bpbOguGxQuWN+gPZ/3cUC/crX8sr5+uzdF5wdF7Zp7ItacrXduXgVu8mZvtw7iQfo2nNsIKbtQWbVQNZ3qjTtLfHFYquV2Hr+Qa9+6lm0Ud1UR6uA9Lc260J7naFF7aDQOaNOUGexrQHw9htY/XqiabbR11ISbFb2HLgrOKnY+27p5VV1cH9LluiZ/baXalwbaOTl3N1aM29MH0RKbneL8GxK7fl87Oa3hzBRKvzEncy1mTrLX9tQwohxWW6m2vjRtklC0XzZP1OBRHjhfiV21Pv60N8BWxGyGpGdZJo0Pp5BDOBdZSAmP+zJFeuhCA85/WBsbk48LQ67UdBBQk5Q7DpEsJE0zq4ZSvrXOM1eo6lgZIFj35xHmLsfHlYnfkH11av1E9aivxtqd+XFHd7S5upgGCQg0QKSm9118bkCzR5XZGpn9UYRBk3IFVUWYxwJlW0ytGmJSZznHLZxNU1T2x7wGylJ7xSxBN+P+mB6yylOoHnFG16LuNnZXaq8ng6sZ1y0vc6cEAYyD6cgCY4gIIwFQjMkC5zy30N/o7ghbI1px27sdYfVkCP1+b7rMwywhJNERewx5s6ndg0bBWsxbSlXP5IE+WJ7pjxIFxZKaEeWhYYQifxccX5Y8Q0x5DP0HXdN8NdDDU0RtRsmXI91n1CaD2V/72xzp2Ufp0pELJBzu73w+EqxWQRuAcT1LOLnduyUq4LTupvWrNc1QTazJJ2w7xuwt7R4M3d1yVAvBuklF9BxL40ck41oeFZFP6U/+YRm7pC/NYvXFRcb/jxLo6g2V5OlXJvUY+hhLmLIvKI7Dk5cHvMWXR5mq66rPRclIfo+Vg60joQgGrwU7A6rbICpGV+O3GcGJZ+xfBeCtIhxIouHwIt7nrqAEZS+va3lwUaXkTvwX5W3uS6Pcl1Nj3DcJbX1PowCIunl0Zv53NR02fuA2UH2oie7T1srGHffaIoSGOsRrqcPtBmdZ0LF4ExFxkhiMeLNx8UtWJ1FX9ofyfCtxR10rKT6ZCNKZYf7EZIEcC8njnPvDn/EEPl7dv5XaI/gFxRqL8fxoamH0w0wNof4Nw2nDQqHLaO2C5S7rRjZuwIFWefhgdbqlyWWZIeRgbBOUQMweYT2e2K/hIwMQoEhUGdNLo4BcQS9mNTakA58JvwU0PK+gAb9KVrq4OGFMOzMnHDlFxeBoTFIhwfwX1GBIMVA5miw9Tt9AiMNJVZN9JZA30tXcUOkh8NmiAtzYl/QiZpNG78T4gaKwYOFZ5GOuqVKjxczq1XJ67VLFXqEH5cWMbYOSCO0SCuNaqPJVK32RgY2Tuq00qQEXM9wd44eadBI3kU5irDSZgLHeAWyMwijF8ah8xmV3G5QYLFlc44zx1fkhMVN0c4WimQCIFFZwgFQX0rSm2L3kkYCdxslsItdD7WODRFXLKhTYQ6DDvDz5D6qKUEAbVIGT0iHOIjW1zBYSz0cJAwj58APAkwTyBAZ+QkgHxGgIRXaO8E0CWr6g5m766WK2swMw4WJaUomqXrhWCe9ACk8TNgtSFsfZeIlXeaTpI4iIDQRQmSUqyocejWVAji1WcHvfRh507hQwJcsfUbClexkPe9+lOFu+Hn/Evx+kaglvKbJ/N/0hd04gH2rBxNY1UfNIeGPqysZByIotsE5Uk3ZY0+2G9rMeBtQrFC5+Z+udMUvjoUrrQG4zdruXuEN+ToJqGDzmRVDU9K5CeUR2lGs9vdoh+bqbgmndByIcK/x/lFyq7NWrnxZpe+S1a3Azlrl+/aBcX+VPBiidtM5fm6swMfu6AwPgSO966/EN/y0MiUgS7CDvB3mJGKxgNUI2bsghqcmPdZvafAvVLXdjF/Qrp2np5IAFu8jRLqiYTvT6/+Cwarsl/I0vP8ujzHusuNyJqb9q9/m4io9O3GbD4drYVorTnxOl3Ctl145S+jn/kDDyFEar3kSLyNeXXvdVQnvWDw3g6KD7A6suGxb0dKe3a+Np1VBLSw51mwVafKfDJm8h4QbgoGid2Ik1UM1x4+oZjYZytFrV0s2fOrt/EiyGBFC1nXG10tXSbwrvFttYpf5BRESQdkntssgsZ+agRqx7MpU7TMQLoQ/WT7UNuPNHbClGSMOS5mMJsgB6gSIqzTWfh+LC+jCk6zus31RDzlv3ouUMuzsRO+2NseOxbd5fXs0dNIES1cYPk0GQ1Aga98oaOcRvP1CtLSGwH4YJrHNgUbkzUguLUPXhWh7xmXmRp2ctVmbqvQxYbAGJyCHFP0KrEgDQPrdV4RPBkmq/w9mw1qy2Zi7aejTBLXU61gzjZ8rF6XA9GaJ2Wik/MR2YcV9aFOc2absuWZ12uxIS+qoGerl+Btjh/ulQ9gWufswUX39Mbn89ANLaARZw3h9uzwh0SIjUDjoAoHdh+Rg6ET843vyiO6UeZ51+Ye/9TG1NLz4QWuQz4bGHpc+5x23bbRxdJZWJRm1tyreAGzeTjmhmMc43QJ6fCbdUuHiAco/9KV/VgmlUaAQI+71IeHhEJmXzw70BQFIQeNH8vhyuOpOgcImV5dcUN4/phpC3EkHzl9Mv9GaOt5ba5BCs20KklstDhhXekspLoJTRhRqLPFUy4vRFPYX+0o1cl5Q/yERyaKnoR6b71Ri4DfoL+TBxJeQplGbHYHmnfCAc6suOUo2vc6g7G8A/KWjxsEKVO3fe3bEwbomxEjThko1gt7yZh10yKZQGegdS6MNkssJE2s0rE1OuMVkeanftmaEIUnlqfo6xLYDBG4/m3Hbsi707H+tAP1RY4C1Y2IfmYfTuEltgocLM/mzQ/f1H4tAay57n1rZFDTeZiKXimAQPb1TF8Fj8+Hwwt9MRvtfmwPLmdBq7ZozbcT+EufrxpKVdLRejTEVek9VLwmZEDoY8A20jk5DLtAmmlZG/G369X3p8gr8uBdCwzKdctkWKrdydbqUiFXl+eV4qiCkUzIBmkUq0PSoaEIsAwG1SRXIAvpD1irpei661h8PX2aUE1xh4Hi9sZXW+PXSH9vWX9QuGrU2zm3jrb8TX21V9yOSyRAyBqTKRpAmUHyjMcLwiWSqljMgyKNcSrMe70IN9gE0DpNFLr7sRnY7nN9tMI8feXrWIWDGtpNVSG9UnOSsy77amkDOO2MTZZoleZEM/0o/0I9jhHIJmNAt0pq+/ZEJEmZ++lu29k7VX6dZqMVFPcjKvfnYRyl2h4g2oxr/GZEOU4vTR7/7Ntxz6riCx3JmPBbKEVImp4Ee7Q/Qa4x33+AAxM/hwIQdiCerlMfQvozL5Xm8VOQrQ9fhjNWChfAXpAotcTCWLglLp96FNu7io0jfLNHQ6RPzgkhtdZ66XJPIswXi8QtyEha49TVXZ1/vSVMlKy5npP4YeRxXcX4tjfqkQ3pLJcwwj0kCuAFtQw/I8qvRhszf/B7edaJhVk6XTcLAhfxVjwa8CMI1wPoiiCiJBNgGuQAYUUtLrGaI+fpV1tGDuDQ4yS7jR1eRc6KIltLttndIaepuoO2GraIMNT0sf3cFCc7plcRCApqotf3uIkRXeALGWb3kK4YrUgz54RwsMKSaLT7ihkqCEwltkY+nkBHEqyJcIrcKuxCaf7W4Nbg+fYceGtIeShJlbDs9meHlh9yeH/v5sL6dhubZdZ19fCx2ptRsDxc5UoxusLDATkuK367KZmtmlZ1mv2THbBuvFRBDRJgZxZVk3V8IC4l3hGI59xoLYTS7P6koiqqHeVAlxgrwhZgWueNKecWAhyZvmUVe/OjCbzrjsvvlJG4B+QDE8U7YQ3SAStYaVYCbW42gNSjqVyQfTStPRY4NUkBkLU5cAfDcIMjPVn+VOmEt9bfwQ/fxdMVot4w66DWWzId7gEHUNEe/zwZLEkqQ4xXW/iRQ3Tn4gPddFl3DD4AA+bQAXGRqKyU9k20A2Fybub9iJ4OXLxeFCUzbEQUiiCu1asDDyt8NqwaQLasJgGRJk4kICL+JRGk7vp74iIxRST8X/T0KmiPoRadbL5I/NCqTw/IJuuLrRijDWQB53Zy0ZNElF4j4AZBBq5AaOKjyjExDnEV3dY7DBxcK4ZkV7SC8IV7egX5d9kcQP/GBEHX6d8D+VjxEoG1E95rXOGUTcUkFNKQLViDPkk+6HDjJFVWRrCzpeYcBttXwD1HurEhQ2FN3ywgvatGtt4SCLfzgnV99JVtcQAFAxQEBoSuQhLhhow//VOwPVpb7Iz8jxVXCSt+pAEdlcXDkdYCHe0M/oQLaE1JEB16RGyFgV0RDIRWz5zlyCeidyv6gHaU7pkjRuUykBAGhxaVLNpD/CaU2GK4d1oFzXktKrWp60Qza1PSBIBBgsAynWugjdFWEFHJ29oi6DCt7m/sZV2Y34hxjJhRtQ2IpSUiYolwgUXtbgKA6obCAQBKxmi7Z5aNGw4P6g4+hoccT5mUKQGFwFf6IWhMrwGiYaz7Hv1rSUj1gtT5YEBVVEuCguc/NUiiR6JmbLIJIj3fRUxrfwBXK6Yw/BRLxs3bCNXeFCAdOae3AcETbNOWqU7rmBHSWZUbSK3XgoLRnDm0GLSpztXzgJm6+kLEFIkci26YNAUlmTFeZOXxBzIBmkx8X8OIzBD/u+MQm7/9vDsHwvxUr08uP4rfcQvnd05wdqvwunlx0+4NvnG6j6YhPr+pmxkGiUuTUqRS3SjYrW9OfQVwiUIAFYLY29f04YxXGmUMC8MUSdhlvxB4TXtK+bqqHVZBvVuvoPb5iiIeqWMz7XrZoWrkY1UgqcMwjaQ0IIxtED2gZ6aMGiJOp+/MngPDNgSZU2tSWQAyRMUAARA2xPHBNAarZahhJKkChoMwgkjojpoGuYM4XBxT4yK9dzYGTV1XjK2cqIg85otBRY48+KmmBbeDOeScO1Jq9uVNdxvHH6UrcU+ZTIzcD1HiWa09bLO9DxxtcUCowKQs+kp1OJHJDLaeWoTdD5tyr0wfsp4D336dY3AUh4GTuJmHUKnofnIJyBZxEfxjdWLtxwUi0EeoW89MxfzcQlt0G9/kZLjIF0OqjNjJZRWwae+3H5lSpeFchGm1R0eA0FnKv2p9muB3IgHd9geiHakuRUaq+VRSlJxef+LU5XKH0qy5oL96xEjaLkOYFM2uHEuwGmowmfTdwZhOKuR9QwGiYZM2AZoIY4QA7nNboAmpiI9v4iSrrYQWLE9G6APRa+ypKsRbn0mPXr11//KPBAssDiWAYuWuL8jU/51sezLC8ObNzQovKMt9gcQCkFdu6MqO7TqxPFaW1/Qtt51XsBUEU6bZF1aJmfMc7tz/j3hMk1E+nVb8IL8PmyfMA8ElHjjE4/ti/lSLVQhg196tQG0BOi/f0gN9ubyePrle+WzYs0YOc3HteJGgygk+oSkBocMuoOSL1GELrQOgKt6aEyUKpecyT0QoHTPCezR+LRFHGuRKAnyd7dx/T4yiFNrInVkPemBEI7rSQjbbUYwPU2Y4wsdeKcLc+ofcis9jnmugnKu1sr+/dsRE/qtyOE9qYFxSsvcW2ht9HPijHsViufpHKTOLSc7HSuKsIQVZKAosmWOku2Mr8RUYzTcIOyOM0Y72G633EUNwnkT0GWCfsy0cx37V/z8CcxKzeSrBR3BZYEKJ3pNhDd8GNejbXX1Gx8BU62G+y1dlitaRnmmrSt8tWxOI+n/7vlD28nxvscfMz61+a//SYWm2jGVyk0VlV4YlEZtJ9aurp0VWB8QY3LyW+rS09lN7d1jFmJlst0o5QAeZvYdEj/8XJ+AGWlLa2MJwZc0AbCUv6h2tHgkAoME9a7uqpEK1Z1ggGwrvGRUXuVVQkLpMZHm2UohYLFNtxcprKeaSFye6mcIkz8vPpkilqLRFVzowQucWadsvBYeAi9gnGPXr2ugQyKmoNMqvB4rvsEEmIKK8qBItoKC4BRxUNOaHFiZDmmpPkc385ZYWvhWJMDZaQw8dMqqsinesi5aXpbeBiJ19qJimjza5XUSAPkwBieic/Sk97Z6dSwDIoyksKcVbBADkzdw7gmDuGIpu/FKrY7hcqs4mGyxs02+KtaFiJxUEuGSXorAIWba6mDy6tQgEWI1woH+h/2t2Zhfx+GxFzRnoQjeF4LdsusHXSxbK0liuaYZLXb2kGj7ss1EEyK6YZgQr4UwuSrHJiskyzC4qUM6hfQ5I83NxaM6ev8PbI2twUOOy09/ir6tBPcInKm3aqwT8UOUQ4hTqQk4dEcRobT+XiUdvmjDDqQm2gSMx9vp3oxJq+sg3O/p3zeRfPl5bXDZJo5ybqUBonMRuPjGC9uJLlRCq7S4k/s9Zx2y2EmroAuLszshRz8oldQrqJP4+MpYan6ExBcPnH+3EgKV3WuwQLmZjoeiaXRQ11Wjfwatx/BsNWPX/qj/YgRFidYnL1JNpJEQvjgCAvtGaKtw++Q+MApaYeNtKFbxHNEFW7y04vRTdw8BpYf7H5YXr9lB+8/1Byhg0N1Dz5wqOt9BGotjlxForQALWQiplspEdUQN5iMSKUZcQVTtUszupM+g9A3kwM2Xh62c3qoOATR+Ev/+5Ju7Dn6JSZh7QGLSCGdSbdW2vWIAxKUkTkEgoulrM/J2FBNwCNmhDtBtbGpxvg+AJ8rOM8XV0wwuCpgFbIMBF2myqpvmIwMMQ5yS7kvxjw48vATV4e0o2nyLinLMflZfpLw+Lh2VZYQUF7BEupa8DK0DUmZzD8MrbY4tzJJKaBF9fhhSAAgCg+O3P9RUOay72w42uSqCNCIxvsJCjKnYtp9WLtIkHuozTUe/wolJaOhgfcJwhBY+LevqfGfmHoZ4VKIkiJFg05ywrisC1K7XJe8OnZmWxWG9NIZYGXKX2fyOi7Vjei9B0XiVa0u04qudsnjYSYAOQIFRGfSuUQqjUdwfNBr28UPG7fw6EiR6d/jwBYz3hafpi1I44sJP66CXE22pzpjIdpZWDxw6d89Wv4w3BgEQXQkiVHRoslrbLz25gGIAjDAEEx1Lktx58yz7YEeWk5zcAQZhyB4iLR+sMQFzsvI0uYPjAMyAtpDx6wPy7CjXLwHJIiupOG7U01vVuAZ9oIL6KnHbwWahBywFBfslzG5S5aJShYMyW4chd6gJlT43bjmtZrLILwt4viNKIEXzhRm1SpU0ykxZK31hThyH2AQdPEJ2Frrc354HRxaP1tYPJJoEQ1wFOIfyS08mClKsIoy8tJgXSLjDTkoh66fnVrDnXywUZ/c6ah5YVBk2HBhERa9lBpBmw4FC4qjblQi8PT9twoyPAoEifm+t+cHImEkVlgeDiphRJop1sJaBkx/i88GyI1MsdqI6ZPfYJdsSLlPIelwkNtAxuGLi2utre1C64d4thvJ4edGvm8pmCZvVUT9r0ypIq/7hfviEckL/eg/OsiKS9BXngGdtM+3CmTQp5pikrDRtiFeZwFqBuTc7DGIMs67NiGrT7KmONrcWSGR2r2hiIMPpbQ2GE2srom20cubHKgzM48K0J3Zw7VAqTa+XQJ7UAq2cyqLICEbF525KNqGYC2Hg/G/6NzAXgKgVrJ3FGWHy9BI8b2Ph4ATFy1HMiY69aA7gTlBNLekjwXM81EjNApp1bwDgOdW1eA5s/0WuTGM2N7C6Xs2Qa2OSpSMbcX19lWGkfLntxJ0/XGeOEMn3uWsVYPqmRr4V8kOvTpdma56QlI226R1X9AaCirLYZZ8xNvxiczzAQRn/cjBy1Zd1uCSJgVRWz+TIeiNaiiukUi42KSnP+IFq2qhazZxKZf6sJpq4PwKbqi8ygz/a/8yt33rmiQV9TVQmZLyJghG7ckUNxaOwJeGuvhCL2LBc9EBSqoOuoIgcL/ggT0Wcma/J76eKXpxwDQutWLuy3MHIvamgu/+Uk6RhS02GplKtLC/zkQqf7cdGg3pHPwax/KAHBrjfYkqidb808p7TcDhlj5IdALupC32xra1W57toL03Y+OH7J/yGhtkO6k8211ewulWKIcotBOKYfg69ovBQQqrD8cKNWPZy1VirX2liee0vDum7d4egt4NhDbf+sM3b6gJiIgiiUTXewAKIhc4k5ahbUpv3RnpXpMx75li59SOFIwgaUZRkCDeES/Zlg046VvK8ikKb20SoEQ5YOVqrP4qmSRQgjpwCQiEv8QnxasIL++sYm55hISUZFBxNaxtUH7QWmWmQhb2sryaXWJ0cDhkVgSsdUUoz5hOywwRFi3dnSsMH9/aXvJcDTmiKYHBeIuz/5wndMlsmBxNnW+62o/IbfBm4977i4Esy5s7BdRN2PK32nbhr8I1vw22iVeWp8bGeOo3vVkqXHs6Lg54sImJ/Uzi9H6izp+ifzK/yNbtnnYlJ6j3HQRKqqsJpcbeqMkrp6mlLGgmY4ttQgFUJCsvo0Bh46WUGimcf2aTDxYq7koqEiv1N12GPxoMJWr3UKFOPRwwpsKd/52i8yuCUuDgtJXQS3XwioTjCXLSnM2DQWCdyh5x5LCYThLuZiywQYPtIKB1JrhWJlFt5qOA/q719LEIj9BCjCYNVC0HEXBESnJ2iL7zyVUucqOMx+MBXiOKnwflhUlm1F3u4KVYnr82fvN0tDVJwBXFSOeKtXWH/90U+idOpnBP5TLrWBG6cpZtvcWXMkn+7U6yc4R76Ti7eYHuviv6doJ808S3x8la/EQk7iymzqf2qtKu9PtP30x/54w31BGr28tDZxN1UeF40zIgTmPHU+BcjexqkGJ1fBfBbE7bq0x6vAN9SttKwQSnbYZrHWkJHuliv9X/qq7M6z8gCKbup1sj/brIIH4/O8MpyD3hbITTbkyClRLH46uTq3TopY4w+cLmBd5BQfRxEW10+9RzQaKtC/4nb0aftctSrvvk9mtt2n4/JVGRk7eDLt0+lrqBPnJPoHXE1VObW9z+7EeUQ0Lz7TEVqx18NqjbSMsugz0/fFhQ3s4dOdGg8z4NK3Hyc9HP3ondIiRrzGjiNG34IBdRNVV1kSjx4DnAJrh68VXysFvKypPqXr4ff1zctr6DT8rMxTucVhf/bDVlR4joX+3K/v+NV5IFKgI27SK7jj2UB6rh0y2zPFQsNtB/7FA9zc1LNvLCfpzrbZaVKOExkAdCeGOuFms/YCr3rTnP8o5rIjMFM7MgPdbqTJHXmrl4o7fP32TG+myXeegQLRCtb/uAAOcboeqs1rmet6Tccr8dVsWUwzYbz7KtNfZjB6jtvrnOceEgpMgNTzvRFnSVmjeXvQs14vsiP2jVItTK3CBogqDYUlWTTz1IKCvjZsd27hsRdTSaBls6OOHv/MlxkpNiPYPK5dg6PhEEn8X6RYVDxLXHNOePBg+577NTKPZ0i1WKuzmgaLi17Y550hh+mGgRspvbV0ULKWVS74YP9AtPt7vK+taiyvNANfMrFLYNjV8WmoZXWl79f8ZPsc0C3JUvj64AsHu5qofHLz/ctxf5335PU0wRw2sMuvk0iqhmFnPXVRDz8oM+JVOniLZvgzcTkWK/7dBenY20A8KyIK8i0T/6/qWOSOPTf/f/U3bG5G+bBkaehsoKRWIiEEckDiZmC5ABMzchNM5bm7+kmKh2dBVZOBtpts8tZOqhX3F3Z/8W45qSKY3QDdUS3K61blQqGTiPc78byxuNsWEOuCgpDPU9yHUGQgk6EO+6LxJqWiDIqENdCnhgPDGYTCx84f2NOsAUZ7zWGbTv4Mw8zDuFRyD+abEdH/wPr5f6o6dKgEY/gaKMIPTEMN/aiVFRbs5QhJmq3DIGKxM+nxem/8Q/dgIlHElkerQRrgBbOgxnL/cwmSg4R5j8UxEGzxAK3kC64m6qTme55i3Z0gu2WZ1qY3WiqCrSENPI+iNVBOsgGHc4KVcpW3mLf8VT2iIYec/O3TUQmwiVsjn1kKTty/iSpWlCRWW/TuO4CHKBZOlfiTOfblm00p2K0lQpS2Qt1UYABMrolVOGvTETOkldhRwht3YcR85TTH4VNmhD7vlDnFSRYLuHF26EynxHHuvR/U/ORI3JcK1m7VxPrRrbvIAhJPtmq/DIMfrPZB2cPCGhJP4ZPO3SXqlXDEXTKun1mPq94qw8JJjtVdx+795vVcbQ8U96nQyC5HJSh3vK0V2SIFDZ0HarqbAa1T6pQmoOgoxqsoLo/Zw5S2rqp7leb7AKPQgRQ2kDiXqL1ihxXUn9vaMxBuX3aAqLIlO5sSmICAckyYqv9M2VG23tl09laHLM3hT0P3J2jswdGpLgV2iaOdFagDZZlQlTXQADzZGfaiVKipP5yRAfcrddVU0aH8jmqCDjz2DqGYnX/eR428rb30mQfYPk2URFaXSQXio/tqnvyEWwjNX4BqdGRwEv8L1dLkCGBudWtImztZtscLD3FRDZUwiK23UprltDLejCuqDLw6Bs1NO6L0MeaIGKM/6j1+2kRo1Pn0Ym1TKzewkPFurY6Jhi48vLw48Bfcz80XB3NafW1saeQRqj1g+oyi6bbhRIkTtFehDkWyR2LTW1PArUPBgeJobjqcr8HtO/tPyg0JOUaRFdAYGcq+R/DYkgObyGrjoURKT5POL+bDJDFLT8cIiVHvQVSJgGlPTjlizpbyicls7UF5dXixqsbtzaaHDxsWOBAS6o8CKGmRwOGzXfsttbRihuqPlZFsvkZQkrLBs2KIWpnLPmmwHK2tPBIBUmL4SJtbbnlO0YNtvT6hi39m3mTWFCP6xk6y0xyTqt66oIo/MjjO49yejBUcYS1Sb7T3Ny+AAnn+zjpDjRmLJdByn79AxlR05QBunPhK+fIvzQfsL39RHeGcyoBFezbc5k3W0MNNz6pNMq/J4oNp5XJ09WPjza5ehi0XELarrTOoknhANgNS25NMS8wsuBVhOHmLm7cCNovp+xi6crn1N+xo5xywfW9ATvKwhjfgUoYWKU66WL/CzrqhQprtTKVT65IR9sSSKeYY3kFYHtME7iW97yVGpZWmwt0rk5J2FhwwlDihwfvBoWddHuKCO/JR20YC7h65koME8YoNydaK6OB2lEKOxX9jiT4298OCxSy5DoUiNn5HMAbhK0D9Nd86QtvVfbRcwXnhtnl+q1G+n1LJeLcEs/vkW3Y6tEOeQBxQcxlvXgBlBS48PQfssqwqWRvd+l598Cm9R7eYJ/y51M3j8PDZRS8YEBPFSts8i3ubzMxcCTXSWWPGnGHi7gWcuHFNvvG55i8V8MnETTV7hyTBH9Mpn8R3xkKW3qv+42Hf9tT/7/c60Fn78c/UF815WpROQW2s9Iq5ApGoaVY+/2TxwPYJ0Miedqa5cSnO4BIEHSVJeN1jJxpQ9dWUbnbK4jbYIPG1fGR8HdHE5bK/Bj6lW2aNX0pzzOk0mtKeDvE+O0IU9zscaC1azI8xpLkmpF1rDdHKhXrLMCL3rbOOjx5/WiWVNVtN5vZJTmnj3uEnD299KI0D//PMQmwS0jexEmI5tVr7WfVKNIia6vQVzUlhQ5oIiknqeJ7KClcdSAFxvbKuaB/W4C9AhRdVpa8khFJjI8InFZoHEnvbsbPcLLZ7D9as+lzrltHlZau3V/uIzZyyVPb113ciYi8ro/q+spys5EmLVdNiM8nSVeV97kqfWxQ7N3CiYxVxiRnNHn+cole3Mam4TkmeLsURNB0b2FKJ0Hl7PUByFl01NNcF4hHhJ7mQxqpom0prVUj7cFq5xe46WpeRHgFxuItFa/uLkaT9/idkcIvSoSx1taliQD4N3d02GjEVRMAx7gGMRozXOrIiFUBPQVATl0jxC/Kg0QYP7nAAhblt9m2dmLFOGY08qKyZGfsAraG/MhTlr0Hr/fHuLAattpwnZ74nHR0pgUm9wsjL7iCpuqNWcY/7rCrZxd2TOSUC7qUkcJFe0NFHMNLtRP2R8huiRKEzkJq3Dw2PQ1d47yE9A12OC0bomzmavupntHx6RoTk+Jrffsr/Ym0VBAaWxDZeA0L5BhDXzNHA+6GVSWFDeYr7owGWCrfFYta5DJ6t7YJNRxPxrVLoj4E6xgD14CdCFFyWWj2u1VbjdwsPGBgQVTHFsDWetSHSTFeNUVshR300wsVf3j3NDCmwcAkFidpDThsMoT6n6Jbq1TuUu0qxYd09trefQYOQj06OHn18kgXGriOlpqjxBTvjRNoH+hbniTiSl/wlFT+cDcq+6/nrWb/6CJunZMrmV+oB6WVtDew9YsKG2vTSRQtc1y0uBeVHk0x4/nkSa/W/6jojd2Ys8wY0izVucpimk2pX9/dqUyGVVPhaPa7/oJLkMfUl2aottmMwOWZds516FldI/79N7XzdyGPDjTjxvUrNrft7FJp3s3A5lr/swXSkqUy1HoPuALsjuPMxHcFGuoet+1xebf+PKIfBBo/NbbF9UOklYO7xF8ZGGmqniIULXpc6GyzMo6ZiFKBdR02y37uK0ohzRp9txx08TfPStP9PtYNpwfZoqq90NZNL3cizNRno/UbPtH2avG9rZNtjb65tth+u7hnL29WrjzOmmfvq+y8XqgOLdL33be0n4ALQwgeQal0ToqKx6ebMnZlEH8jCDFf9bEdHeC0/oWH7j+lXLQOtocImkBcljaHFPzb/8tNye9ou93gAC7e+fwWqaqPbRcE7HwYB9awdLMnVXqBPBu1UuE5zuwoWvJBoTOFbVIkZFmxlBSxhv7WusK1LWI0+vc8CgLLe+exhtI7lDoTubozMWe8mjKfQzUfP43RDjdVdqNQ3LUxkoqxNK3IbezHnwNZTwDvU22GjAr42nEEB6BSAuRSIQe0yNiHVk2TFM1VJMcru1ScKIQNnEgOSDjOBbV2l1FX2mR8m0T22ewNi6wrMSI92N66B2DGKH3mWA6JuFswoDFqVmNZ7CVjwO1Q2wDDmIiQAMHEjghQtXBAWUSMN6b8a6XZ7Mq6IIcF4MAV6HboMIFs+EcaE66HGP1lCUPhGTawEX2RFksAjz7XI4GVHxUKRrFHNUvY5Yl/cM9bGUqFh4zsl6LZ05Gq6HzjBh1UfPQYWYIfgO6Am5J8FaFAo5ToEmrGV/qBq5rwRgDiDxA3I0kRy0LtwBCHAQrHHwW4K6Ct8wpj+VsNyKrx/ASE2ADqikdJM4GDyT7Dudxv2YgKzIGkR5c0k4Xib0annTUio5pBOf9DXSdu/Knv4IKMBAIQPdJaPN3Icj640f/jFStcIK6zrgFFp80Xpt6lKmBvzBGKKFGL9eHpGpxLGmmogJ+OBGZyiHdGn+U3v92zCrtf1tdkSXIR4nGEX9BSddq8YXDr5PLh0KbfziJ3tIjKC2yvHXFSQo8RD7nGyrPpLjC8LsrvA1/iIr1htdad06SVMXLsYdih4aiLIVeTd7LQoXFG6+8erNSq/86AMfIxHnXZUuPKrFC9e4QFpgVLsVnRfWtB+O/fxAkCs8yrpkRycaxgjeayLJNbGF9VixQ/kVR6/dVukIskLCc2TLucX0E6RmEGfb4Kof+EO0sMWpFbmdqZzdaJvCUmq1nyqdZ2h0/2cwbvCas1R9JJBHUPKOE3v6M+4Sj+EaQ3YzfHT57tnyHO3Eu4L6tN54M/XDkya3PBn4IQcrts0xYPWHYFnHKmEKVDtW9XHi7W2Teqzx+B7H1vNm3v8nY01alrB25j2llgi8vtzpNy2qCdqZtV0Lag1MjDYehe7ivho6koBeTEkR3JKVhT22ugl6MbAxT3A97ca7W7rjaCKvwC60vsTuJrlzOZe0ckDGr6CMrg+xCEIDR1l4KZzAl9FqO1U0IxVPfWkW/mNPtoVreGwNwXCUt7ysUYrq7Aw8f7evS0rm2tmAGp20ryaFjEyw+jYfwXmFkIiWj745Ag2oPaGNGkZGRa1B/DJIBTOAkh9g+CyIymdgLciWOYgoBaJJWtDDG3mtPdfy0sXVSxI3GRuEAN2WN8RAfUrAaDFMHV2DP4gC9lHIns1xGMUWPApHiKJStxtJHN+XSzF5eudDBhCF3YwjC7NDTC/EEFN1BVYdhH/IZk9ZGCyywBeCgLYaNVcbCpWqsonKG6XqlxQzzKVCcjWlpMcM9Ie9YWBl4vGN3GJdkM21q0qsrvVccNm1jvYYmlIHWyc3XyshNVd1ITKaH13l6spiPhN+rNDHeVKMQ3IZW23fO6BFZ7/ZIx9RIdD2b2OdSdFOKUTdFIvjnWkC0L7vBp7bCrYTTHsnysiyW+h5JpTM6VagSj0L9ibPB1zhelqlWt9SuUeH8uhp6UfNzuTDFiWokR9QbQr+eiS96iUw9SXnvqYN6L8C46CXRsolNxLmSbURFL93IrjtJMLK5MFUaPNWOcozLJZqiUSelQ2vjM4SLVzmjcJ+ydQ9MeZas4oqTnE8vW+ezarB2HakTWwAAtN3qPQSTIltnbjcih2X8EtIvVcqDH+83TvmuacMt3yAR6b2Eoefd01HL6cHb4AVT/8slTYDIDk28ZYGnU/cqpZIjFVVAnuJE1ebBMRSDVt/ytqgx5lR/mhItetKltLaWGNpHSSm2j33Tymjz4jY25YUO3MaHujOGUQ/JhWG2Hu01uZAYKvi0yQHdV16yJ3i4dON7ENiKnXAJDCTqZNDWTPsp4Happ3W6SjT0cHu7JGTP7Dkum7ncdAXNnCWag/XClmnMPbz2OHNtGEMG0M3+noguFdfuxkaIY0VLvIRjKYjAzeTS/q5FPU2oTLwBhPknlcUngSKrvs3Maohp8tw6OLfGTW80wknujqfdcILdkD6k26AiKXuLBQAMldAGWE3nmcG/5yHMAUBwQ89DzrqK0jI0r5SVC/4IpPrEmZuqfvPtiMOdy1ITVDB9gFnBi/1Tew3lUkx5yNAb8VAFIYv+hEgoUQnYcBwgi9bv8mz3TE1osrXkpuZCFrA5t+SGKiI2JXklCgNslqIaemBz4/XCKHyXtZTDgVx28qeIM97sQ4xhSNfZoYpXBt5hc2/ongH33LX73EktRhdnPb08nDRYQ3beN970/LAm9OlmZYOtiJK1lydN61wrI8WV7gfzGYVD4RZ917BUMuJpRK8WWB9HVTBwrzumNCpKAN35COl/Lq/ZpFeLfTtXMZEioy+4cTuhJWSGuZamVaMxqPr+edc/UKjVa4bIOrnIXhZQkqVKmtPKvFsgzVrpVR7rlv6x0E5Q3TNoDSEq5oUoD5Bdz6L7lrBns0afkvSvw4s47WWLmNN71P+f0v38XGaO0B+08IlxWn1SLPYCFmFbfO2UvkEwlVpKOJcL+HPkyM3rJOcODK5W511HpIzq2zWog5xaJ5HwM/37M5kGyjNsIv/AlIoKDWdyxmkUTR4iP3/n3pNe2WdMCMo5gqx6Ymbks8H6zv38eFzR/e7OK4/Gwg9SL5yXz+6O9l5++nnsn9tzN+/fH/bfTTp7Dp5ex3i5l54MRCdiiY/6dC/TPBWk5uT8k0BwOQbfHpfrZaBerR3XKEFCHQX1hDESM1uMXkDvJ/ScJ7HhGla0YCh8YzN1XpwjwGToWe6qvC60kjgqmzjYkc4wSN5s+F83J+tTz+eJGLsVYzhWOTRR0jk2HDF+ruj+AbzpvbRv+goqSCxYoDOL9HXYAFQj1ltSJjuwnySk9IupQGWn0vG0ktivGuMKDsmco0vLqC7LcjQHgaPkmk1PuTXWbOtL7ykOIIiaUj8ud9aq3c+Z3FVF/bHPTcAcwYs4X3BMEwmjn6rcwjKHUEVs4DFpiI+4Ro/8E4+qV+gkixhotEpzl5lDIrC4sXJpG08ILVV6l0lLcXfeo3ZM/m2VRPw6jnWX7asnWqQyzCIYkqhy3iFzy3z7V+yNl/ouhn19kCvOpIKv2honDYBhzwP5Vo2u4ackiv8m3W0ngg0Y7/pfFYbduD97SEOL32Z4nWRh84DdrV6KML/pOyDbBh/97/Ophe/796coP5y8oJhYJEW9D/LHMjpCDvpYaIUVdcSKb0dwwC0LV4PyR6ZbVFIR+YwdZQfmX/ABN7JXc00229QoWgt9jfPKKLGEwuOIEMdF/q3dtqZd5R+o1LaU87XZaXGzZC+rq4zzM7Z51prr6uGV86zRYDasnJNn7cr9FCJzr2RHACpRxgSDMyZ+d6KZBFbCzvG4DFFu6kCD/hhPZ48AguLRVjA7d0rHkZwrTu7LaKh9yzVHCnt7oWpv8Xgpps82O1jbf4TauKc0f5uJyYtwa8T9fp7+mUYj3hNnp+gadJI7kTwLiCw5Hv0hizhzoAv1duSBrGAXm3WqlGKifj8G+28pYwF8NmxXL5hqrLuHhtZcY1cBGKSD9Tk1vvVeWYPcG4FpaWcE7H8WwLTvBxvhb1rqW9LsT9fPVl9WNvgyjqPg3V4qDhec1hQUJOWhBZamGURBy0NN4QCuPckEShjSPyTekL+LFWKOxDvICto7xdQozgNwTmWMKteZBsSsxp5wSD5wQfRck8tI1AM2mkc0XrVp5fotfG/gMasw1F4ge417SaLI8M1Ypvo55Hs3CwvYiJxcL1Z4NfkTf6fJWxADmkT3OCOdcOwoymVDJOJ5sMETt6FkpcJKnos3GsXJ2ScqT048cRO9WoP3Obs2EmsA8YL9wtAmkctWZQPSC6/+TT34nolYfxur71Cu1mxm1JT4z6krpkVgBTrH4UtL9LBQviGpckWCab6jSGMxOVG8O1vy0cwro+rRvlZsSzpa7JaW3E3P6HlRCBwnkfNX0qPByYcmgy3d2iz9Ds795qc9KbRase5VVzaCxTDd4T9ZvISeWRx9+pT0ye5fv1usAZQ28YjKHZUo2lgut5klw8vHWhh9oUyMtGoTeH7ncFhyGiALknYac/vSxeg+7S3qh7y4XRjThxf8Trh4uNLtBqIkf8DQ3G6MUFR7ySUMz+fNseqrAeQdy9g22X6fnsOOJIhHCfm8XxMrC25+9HRVcNmC0gao0a1q8txOh0tdHAVOyg9T0mi8C6MJT96Xi+mnWRRvt6a4yNJFYiAv23Z4nlBswVK0SKmX+eoNSJIFWtetzLvzPBDV/ny5I/TNqQ39DS/+nPQSCY3cTA+YdulW+C6kT54w803YVv8IpXOAS+tc3u10IcZHbhg0P1SHhlehguH4ua5YIs3v2zXVZyutT9MCBQJFHA2uo3fr2jRWCpIWQEiS5M7oCP3JjnG9ASSJKuJVdSJ8GBjjoh+KngItSqgKUzKUtoOITlKPTCmaf5ahIqHdcPYONwd0qZTUjcN2iwiRHBoCXbi4uGLqN7EVv3YZLkRZxshNN8WfEc+OTjrk7HMwziviHcn4jNtas1KcTwERLhk7/TxpB8XJ8/S/4+BtdRdtil74M0V/0TNJSj/j6lO2ovtcqCzIGJ87laHTNAX3iXizMbkG36BvS2s2V9bNBj7IMmUo01lQb1ttRldCgx4Mrr5pHAOSPpb1CGLQIsfViMA5n9sq1PSAjWqPh6iaHPVuFcD+WLTj+Xw15s00a8yaWWzScL+ZlI1as8XDaaLO2EHM5Ws19rVU4O2ywTKLbicicg3LQmLIo7lcHdwpNVQKSgENkmewwtEE4hwcb8wXk9KFJjstenwt6JvUmERGo2jZ7jc8JBTz/g4VLE18Sx1S3icpOmThcGsyyvt5yvkCLDTAzwFJLOlbtGTmFb4bEb3CpSgz8foNjvCD5mAj9mrgHhoJaD1St8ysLBIBBV/SXk0zTPwWnqRo6jRSjmEaCIoUXRnbOhW6HwtJ4wP5J0niTkHAwy7a4mvNum+7B9WPt123Jtd4Jt+scryfGhbgR6n8QAEJo+fR4JLJ+UYCeHUfvkgNw9ZekyWhHfuoQeoHhZAfu38S+jzNvGZ8JBtC+M3DYIlnzenp6X18iztVN0itqCazh7oJr7gTndbmF94o2Wz+MAyb7rC3QdTVNk1K2wW1zt9fgg4h3zqzI8p11IcJBSSs184ROieMLQirLtLI836eu+9PidZ4THTIPjDGgyRpkOrmOslCp7U0zHqb1/AGgzKWhb42fTH3BaRdBhbPlFMi+xBdl8iVfHtMwbsIgrs4QWaE84KLAU+md5SgCx1MHCnD2HkCdKXzNCARquaQ7oVZApFrTjnsraStGGp5f5BbWENZW8KI7NNE6/z5icevv+/pZ26ilLNNSjkblK5OKybsSTnbYaiDoDr6kzXk/mLQWaYmaCuYJxvyq9mjLgRvmYaGFLIF8nVgfsd9T4BmRfgP7JbARd6wV+N9HyBs5Myn3L8QmQOgVkwJG83JsRtCquqYX5q1KlfkiswHxgomRx4zxxVEJfK9UVzZBmGBRT+vAUFKhffiw9BUHRcqQtiPpzIVCRIR30Y1yAL8RKUwm4vGsO47OFcecGD8l96RHdLySDM9v86B6JM5uxdNEmAwYebf6NTDHoNrZNwDgxa84ejUmRodXYb86Co7KqeuiD1hMdBV1n/kwGahtL6pREM3VPpVlgwKMjx4Rn9j6kwX+AjioZH+rwq14muFRvGd4mThPe5MH+mtNRHEbvvo2thggFl/ECz43xfsfzMeegRAI8MDy1fCpkkwBhWyw4Bv8Wv6MUsPGqcro1vHngZI4nH+TrwMD1Z0EhhcCjmi7F2Hd4qivMf6lLNQfH9E0zEH1/z3dsoLt/xcAnpnuilRg70qqwSWS950aJxnHphyxWUmzcOC+bNz8VMoaB9qUuTPQzm+X59oiWOH40OK36ZjuaY7mtrLWHJOFVHlmNgn1smRHiqirGCXbyw/zQlOjrhdCGp3UVaNPv/SLYYsN91ZUNlbCEVv1JciZOD16fpbhM+tMfam0iYqVQMPWWRNQYNs+IYPHitQq6ELhsJgUZQHDmn3iTEU0XK3atVPgExFjXia2MIo8uETBsSxTYVIZFUJ7NLTWjTqorCRd5TfjF17ZzluaNIw9LezUCQSgbcwUHiQJlgWmbpZE1biKH92SzO/IUtyglGcL1OEDpCVxvS6g/B06Bi1pmWZeQzfr3iz5TkbwXp7LxwFu9vhlD9s74eD3Cl97JcD88zUGz+bPZ+8cksY27wk7FrNTWmxrspxA7OC9rWbZ+MT2QARvtAzz/MJpYuhY/dz9xSkMOu77VboVEQdd+RJvcFz7k6BBZTNOG6U3OAg7uBDK6LczT0owXGgbXgXD4AeD4i0o3EW6PUxBvrxrZmgqy2v81nfmxgYM5Vf4OpdO7SzLzp2alkOhJrz4Vn2Mxo0Hh0A7cTZNc8eJQrghYHe6/enVYNHvt70xZXTrzEWVhvoEcwISya41vQEqZS6a+lsF1jS1ImjQuXTa2JjfavAiYgiEink442WycT6/VIYsB0sywWD3QPXXiyf6Cn6sigUkTP8q8SeKCNW0s/PSxNKcMJlyK6pSGuJWfBBT+vbuK3C/rz+Tdel/75wZy+gB+rVKa/aQKAuZfdUqE4opnLdsGsE7RVjh5aTCS17U5TmUgKyWDWwUv3CUJpe4C7kloCPyUF/If3z0kLuD/uDkFM+5I4ARPBXkMBhZfVn77GGhD06LV+4E6wRFi2O4y78EK+mAXMJzxF7rMxnpVkBESR+B0Yr7+/E4a7OI5Rt/USUWX9PY/pM9xR7bGKSCajd659KuVLEwCYz35z2GiUi3Kd35rjfdyedBdjtgDmCcAM4KQEoGkA4tA/ttBcYXm1rx0g5GAgFvBgGvAANVJ7v9IEjGAdCQfD5C4KpIQrAnj0A+bSzioCB1ODKvJd0vaGgiAfQ8GXlP564Fq4la6JBbQq/Ww2EepUgO1cBDNEhhHMJAVHoYQCC/u4RALt5oAuGZEIkxsBd3GvXUBM3uP0+MpNR+a4gip96JsUqbNrEWfjxun55VCT8raY4j5vgNWxMM5Y2bC5JFI0fAREj9FMirlvX1U2Y98Jc3feFSNzT9VzYMHcMplOrp7lMopZr7UJ5PQy9QcKE7cFr3Oh6INxyAuWo5Euz9I+O7eAvk5tnme38ojP/UDdGp/bIt2/HHu1ND4zwAnBfzOgou8ubHGCuC11ywyyvy4kuWwUzejKbpLg7KZSPDZJsnLU8U7RyvZFfmIzcfmZUzv1xim4v8lnnwGw4g0GeYlv15ZnURPjH59/nzanWXrY8Pzs76GpCFHDKz4OEpfVXZxdXTXlqEUfSUyiJ9eHrg4ujJqcqZxZGHnQb1EzpOur0bh/YirWnf7pyqzs7dWKARdDvhx8sYdUUGx5+87mX5r0Vsb+cHdrjsOPlt8Wjhra+9SNw6D/FH0wicbJ55Gf7eNWR2JVzwWXhNnbP7O1s7XSJmkcCUSAlTRgw/+F5rmRHMkWm2M9WxuxJijF9MXNno3I6VMBlsgOPHW8a24buQp6/KoEjbVq83UbYDixextgf4aBKRLm55JjbCgMKldY9JrPfhMsQ+k1IUVCYvxS0hHyD9SaF4cImmji4eG2LCaXrDV34y4juc7sw8UGIeIsvNONJYv99uV1P3hK5SKVP/xbIUMQhBqwaUujEjsLkTKaKmFTvOQ3PSOIdz9BbjzLK1+NpA45UBwKFKlaSBe2qzQ9zuFQS9n/yV7me1GOfN6hxha7rnbm086BSWYsI1BkxDo84AV1/CtLfek5LEOA1hBQTiEH5wugSF+NlhdYP+yJFFn+1ytOqw0hnVpNiNEtu6JbOip6Pz0iVZSKY7BzzZEmB5JefAD3fIeKN6t6X4dcd/ouf8FDSt0uP/nf7QH1Lgafi7N46unBMZcHULg24avMg+K3D1FUtjMcocwvL1FYe/SBVHJJExsQpBKl1XxeInsSIMqYGCuHoYn8BVD++9VKPp5f4zBAspEv5J3PGv3oBEnGBtPk+V/9/J1MHRwW5dTwSAHqi2+/3GLPq26RAZFLifJFIw91bJpBnWSgy/5153rCG/Ng1DMZNVoKOh1StjLJg0It1f9CJgVyQ0Elleuv7UN65c0Itv9tYmWsfcGi1KDaBy4mE/cT8+K5GCCruPWCePbX1Gfv0CcE0WM5ww5Dx7oKWfB2mSvBxa+T5gA8zPZif/Rt29UNRmW1DacmEaJ/0S+Ki2oBNyFgvz4M/oOvLSt5mNOmF7r/QV0Jq2OzJJ8KLIvxyDSg0QASoR0MvegtgTae00OWsv/VA8VaxiSB5WQPHsvC5iI6jwacoGJfpTJp45E1qz2VMizladRUkYjX/aLbXW1JlOEiXLWXdJ/NeYHeGyOE6KHckRnlLB+fvBVpm+ijcn6g54rz3A1N5yJ7+sT4x6pMj98mZJuTRm0m8z41hP20zIXfBmS92BtzUS+DNWuovDVdK2ug6hq+n/yBP8A6UXO8rdqrquV2ySjd8N8+5qd72t2vRh6ZGfheelzXZ+sk4qT35XpfmsQN8BSfKSjvBF4tMB8pCzdtky5LZhtQGK5inhFPkeLbneOQZMtdnEhWPJZ0iyX+D4yof0ZCu4iALO0dThrqqQYgxKdvQaq4gvM7pispYFbrkpBlpaItTtW3K2aEb9Zhm3uuGo5m11gGBgzcEc4hDb4iRw/mI7RyKtDgFU1L5xa/25T7g5S+KmI73t9CzhDVTFBofre8yfIT4hofHchXsS3jOxRMqISUYH3814w7J03VVowwilskdznzasDKymInwI21PR3yF+/HUfQG8I0AyLSilWEYHzpLb15VV1kj6EF6mwNuFqhQPUc9HSUQYizx+xaAoxetRXsnHQ/yEjCmHdaQwemebiaGg73/3wRfD9+ukVlwLAca1i1omfhD9JrercsjWpFIg2og4AwnT98KIQZlQDtrMrSbaRpOgG+UN/tqhrdiVdggFnv3g61zutuTbLbUcXUYTvC7oOYbkdLHcKn4r1//esngsSqZednPJW2kmap6fjEx5PPT1fQef+/Sxa06nPii0NwL68zIV+j5YJg9r9NPJ4UIdlEqAzSc6390CZck/FKMgsz+D5HKPvQgBeDaVPmHOMcigIYZPgRW0YAot2EdPh0zgVKMHy33mKxA2evoj52EpoFkV1eLCIOOcYijgHHdNW+6fiQ39k/Fo67nerPezCay6xD2fZ7xjCBrdm6x6wdTQ2K2h4GmKQXk2bYtAl9DDdPf+bHoh6AKpIpARlZmVVTuLm2Lu4Z/YYvuuhnbovMVMwbZ+WKgEqBZsYrAEHYYzbB5VL0V5c5nnWuJ7VP5fwbqInJVvcZZjYhT/Q1lhIrMhBELBcUShSr+qVOxY4DEvJunmNg7xAW8CVH084rBfQbgyD9z9sOfuxO8ZLP7n2BO7r78yVxxjB5RJCywxOBepnOUyQO/IufXedvEydWv3SXOpe7KgSzMt7jawJlgmjbAdRIVD9j6dL6stucmKXpvbPHg5WG2t4RY2RXW9LHKsLCrrqKqReTGVEyIlmusvz7THnchhrUeh9ZBY1dhOpPKvGSrG8zx9dqBDKFRReEh6oUcSUgNsghsCZm5diDpcJAgzJDKCkJZL0afInfQWe/c3Hr/vL/fRf5pcYjh1875mEqujoa9dRwP1fhBM7Hvqjx2tOT/3u5TmGCDUnG2FdyKx8JCfE8+PPPd56c1cOUX19aDEcsTH0gLsGQhizUPbR6vCKlsJJS338GbhvpiCHNHeFwv7wTPAhmE6+Oe2E17LOo0svSJ/SZpj487iYPyprW3elltAElTva43YVHr46pBcWJHm84x6WWvvMYN50Kamv/pei9OV5Uit3+U2vb6ozygyLIv4iDelNU+f9nrMknB1B7SDRffWtc+yY2HBD6vLkGYpNs12aaTYyhdFRv2WtnBl70gl+TnK0zy19yUOpg02XfDvbpBEm9d4wuVlsYPFA7Bi0vl4d6I+59QMNsWQW0iyIi02r/7OEtqoRps/eULNOzeEiVhlBWGRy9kU8KqGFCZ/gzswTKUWZYqdJ8Vcrdce5gvld13A1w/u3XzpTtv3Yl9BJ8AS8J3BK3+7+k9o6vNOZOHQPQ4bXp/XKVy7uezHl4/e78uxt0t2K30itP0jFF5xyV5DW9IahnLubDpRkhO9G6m2kSJMIhId252ZAwEVQr93QIIhDcZuGItiKlfvKbhfijel4EmGUgU52/HPPmY3kcoT9mc9TJXTWw/H6Zq25Qo8E5IZQ6UVgaP+nIW+41IOK7FalCnz+3/yqNbaFS6Ossf3icEapmrby6bYyYIqMVY1nthNp7bmjQVNjHF/KwElJ6BDtDMVEdUrpbsfXTLkRlk1vxCToymW3i9Rc3FNfFNvZX7RIpDdDB7MH4aGSVZMn/bPkrRdUadOYY0olsXd+2PrnGC1/o7Lk7FchXItO9NnFq5xcoFKyDYA1hEfdc6FRIY654IFIzhEUlAltJ3TMraDrcRTuYUULziKCYrDfVVpmaFlB4JjKju/XOiFtTeuVIH4iMQfelp2tysgzjicHKUV/KIC1fqMSZeQWL4alf2vYgWncYCSJOw5NG2Jvjw9UZF6hcyS6tqViE/9p+oxJfrMe0CVroh684SDNlAu0PmKiaMaCwKDLcrJ/IfzKMZSuqPTTtttdWvB7cMkb49CIG8mShMJfazZiUeupSpmieFTc/IkyltFmv3SlRkVohbKsDWBtDNuR1ztyQHCVlAvP7HnKO1SOQ7rx3tanNtr6oC5NSDjKlQJlCXGJMlt76M88sCMSvMKiJ8dzPrKwjnWP5o+O1qF1lcU9jd/QXmxULj8zPQ5oY+C2NVcoon9e0PJ5sOHTcjCPizjmN0GEIGHQeMqTrTbbxew4iwYW9t4QtekbBsBSPA/4fajJ+W9As08uU/kgslnh9f5wsidbmO3keYUFIx+iHbV0lbZnskp9X7r+Oo1X2XSPAicpQyUcD/RPb7II/PDjwRzcZG4ImOKM8tlO5VBhrCqKwPyg72BDNkIrfayWjCdZZhmfBsWJvcTmOzwrsYu0LOTf9YaVyf3U1L2e3E4+1xpCVz2yZm+YKFF6F+wgFjJsLaauh/lkLlRXKOUK+4eEtRoidSapla9XL19QDl7o79k5EBXH1QWnqZgVVTzNC7XQQzT64/174lUSjGSBPZIfqB4/KCvH9wx1yvkJ3PWAv6ykhrFFRwOOCUVWqAQjnjPvRfL/uQ7QNQCkn88OavqiwBFqohmU1zF37sIdDveRZTxkFObXuGriuRAwSPiZv6sJ+ut4mCh9jIMEk4otL/lWU/VNn3PC8/UPcmlT1Knk0LsFXsm0gceQYTpWFuul5hvQalgMBg5AFBMu/oQdIUaPV4b3nWr327sDapfdyuxHgPWpmj7SihBKtyd7vjS7FC2lWi0uE8fbvopKH1XCNw7Pol1qb7sUE6Mxnd3prWRf4Rp1h08CsZI6MkVYo1Kj2wBIjOSpqMyTfHItx61PcrQRgyP8U6RK0ReBhPtFupNJ9ZPXV18fRwyJmu2b6pq4L1CR3QtKvtZV8Y11ydEBFS34QVGJehyN6boBTEHSrh5fWdg6gU1kEHTTSiy8X+1FB6yPKicm0MC7SwqkrMP21hvG3THRMYd/yC6Ewem6/tpieI7XRUGyWQLU/yQ6ezPcMoCGBz3Q5w18dL2w5KcobbAmOYwBb7GxVg785TK16DUEKj4bZkv1LUXxZ+cHWJLp5m1BPJJRGn/bw6zaViycKxPUg8KKqcaBsLZJtYpB0YRQ6OT3IJ+uSt/PMBh8ztbLmTEzndzA0wwoBFcgsgyLg4oT5NnBm/EfOhXK3RO54FHbosm7QRjVjfmECmZHjBZMAi51KDGGNaeeDlTstMO2uEedDfObs/FNvbgLb04fftlAZPlGrBReiMInNoSRDe9yvI4sbJ4q4p+kxxY4zncaJtAmpfKoa9ZWCDjkzUlnLSfou/j/vgAvGT19u67vBgK+CXK2VIqCo+ZbrbRv2a0n/ydHhuNgzOVqLiv74F3t7rf1wOtFEcJ0t2SLRVVjzY38B7joSJyXdCIsW8QkHXUJJRZLDLEZsF2lCIxJiRUBYLIj4NWNLn+uR6VBrC0twbWeg/d4W8C5mMWm5C4/vYtTTnaEtIzRG5ry4lIxUnxQ/2P+eqlJD10UDF1KmRqLkyYgIn1i8b7gaLJrV0Nc3DetKsukkQePKixpVaR1lb0CaAwTQ3MQm0UiaD2S+VM3ZvZZzaY6LNwhl3SLW5DyuTJBYUWUlGHAmf97hjAiwWDagLcagbZujZEQvm6P649BuVQkEoEW87M77FWQxrSTVmBKhvDKY17fEPndzSe2hidZ6qocFM0aJr7Nhdfd2iD5gQt8yHKD75+5y+LZiBG87V4nIQFaVi3GaOd6jDGGBlsd9npS2MBlqYh5ypj7fV2nJPAIqzbIExQLpgBqr2HItOjdHNBosNgMOlQSnlB5flm6oQo8uYxF0QIjxtwR0v4SGDHuOwHn0/yIoozLe30AL2mD07bhnA/zRdPsOGaqaUAgFDwyUTJUMY9VXh+EMn/gdOjVSy/Hs+XZjBoK7C8I97b0rCdWWN8n1TorLO495zppwg6rehdRgd/l9yc4WgB/fFwJYaL3A84gNoTHcE6Z8SfVSvxAF1aCtDFhzk66pmD/n3aMzo5Bb9Znk0O9z5PeqN5Z2oWzy+C3zoJgGjJMVmJPM0Ayzx0yTNlRRPJDd5ggisMtgUf4RFBSPrPeQgO1Xamwpkasef35M8IXgvwGvOxNyrMJBx7vvvP8q4B/a/l+NwD2tfNTCUcxkGD1X9u4gaMEcGigCFTaNQIEvpmctnv5JxfGIBZ/SeK3tqsjn4oVRZwAtqPh/i3eCfuf7qPyVUrfW4z/ZO3/nnSPFBLhh7kV9BeplUsEb83gTPAtw9m2Rh5o7d7W7nAU+rx5xzCKbqvW7FDZYjrLj7wY4VJVbeg8rsreldWPmhRLcMp0ZYUOeykGLlj0L7sclCwK4TjZwdVjR8fV4unIt/zMSF4HAz2R8OFMd/GSTeMSSEKXJw7Qsod0ssf/GAAlI8PsN2F1MhA1472DfVylwdd6oy49DVZYzNW5zSrVDrzPvikVZgMLorqAOvC6DDb6X0hmXHgsDuKC+5vOGOcSd4M9qUChZOU9ClHA29JSoZAh5sFtbwVeTMDQlOVKOLRXzi5UCTArlSHFj61zrWuZ4u8VRlhDI2xa0tdigTwI9CYX0fZ9QtfqalnGUFiTVpTfR4tObaK48E/TEfKZ00aI1gEdJIdXPGymLK3DEi+AfLC3RZqxsAjbLkbGqBZFJcQyBqAOy0AUBjnCr3Gw14iy0S4+4O3IzKBinHlBJUJ4nwuXZOjRmhTbQ3sMJ74dNAkU186nyLF0TqYbXQPbQ0GDZ+s3nl+3SAQvHUV/vu4dC9Veu7w9WpZa4V0jeNIa30Yyqh6RBv5sZ7H75yL4Q825tbX3+/0xQQyTltJ6M/MHBixtfUE0TuKQ06qePL26CrQcVYg8QCVy3IN6mOdaB3gxadYAZo8X7gGYoO3BHfjgWhE+0kYxy0U43IkV/MZwQ6zqLd3EJPDS76pGHgg4nrO7EC4rf2tx25dcEE4T5CKZE5QHkQvXQ/fqoBCemgzpk667I4SKs6UpD5wEA1Qig7hy7cZPaYNXCeU8Rrxxs7MrC0/YIKoxQZSSqDL/vDuC+Wy+W7TdGhll4icUFJRjpQKJBwQKqYY1+osqWpfloXG4xPQwlzro30yVxsDou+V6eGLDCIGk+IVSWfuUdkkFffD1oYI+HjpVuE2FYHyQXl8Nht+pzXsoaCvUp4pru9w804itUXhOLM8f/f1/RZ5feM+NMUQDDYQ6Iv6KVUcJ5DhNNqSxHGT5cVjJT3EDVReHa+kw0X2OvNfjpGaqHZrhAlZx6R0xPD2PhNi6RV66GtxZhPKg/XlSGp8UTGmoa2R6D2VJfpbEfuRqPiqWZC3KJWXopSuEpRtY4Vv7DAsrUeKaZVrQp887SkC2TifeqpK+WjnuTaHvKxJuSxC4R/0ORq/3ePhOi3mvCKSR94+GTvqCVM8nAW6zLowFaWGo412owEPugrUuAqJ7DgzfjyX6j9E6Ymg/5YRu64fJxWI2prksL21xV5Pa3/cO0BPbvLA7MydwJSyAOXJPRWUlu50Hu51/r7gHbtNnwOLyP6prdWaVW7/EwmtuqHJAPqbkGn+AjZ1s6ESZWgsSreskrAtRNoc9CA+m6LflKRNBW0Tc8/mghX0IM7KaSVsaItef5A5n5Uec7xQBhFOuiMqBUKhPaU5Ciris3nR77SG9U1K3qzomNGlUrTJ/Cg5TSHYq9epvj3Qg5WvfOiA/mWV8FAXk0oz+XLep93LpnOgAgtSeh/agU5JXQGAdmUZsvS+EiVpbKj4dQNAi/B/pk9sMtnTgz6TKE713Bp31If5jBaeor8sN96F7v03IgVO14xld27YL1vooUd5u0ZFsn5zM53x8b5ZDqLzTfm3WOhputpLD8V1K3+LjYkAHiHf1CAlL+kv1lJlRw8tv7jZgzJVMHnlfcojY3z65hGYtrY1Vff9u0i1vWbsqJxh5Tc+ETfrRP9Gec48cN/yTJu2Xyr1TUcWeycnJOh7DBKoJHLvfbWYKxOCyGVvOWbG42rEVZ6u9XqnUvNntzRqxGx1wt72I96ZN16Cs3ayEBLt2QiCxlzCzgpWILrl3XxK8CbVpDgqa12rvO1eO1tJf+wVOdmmn2IjTy5aH/kltGQdn4M1tvVqEmchh/x0L+njQmwY7fE+ZR8lHLSlIKBtdy7iEsfk3G1KQUEIEQHpk2IaKq/uXWfl80kBECEmYbsmJzmmQIuKyOLyXkdFdxC0pLzF3mS6SIzccRlVP5krcGhTZ8xFHsbDNfmSRM4Q0LP7PMsI0MOxffPEMEpbUqkTI4eeZxmThX8XLVnbvalGvOzpoeJgK0MhS10KZLYX7CZtNGgzfJ6jY3fJfJ49nSV3OBlUsVBp9nfQfOhTafP9UA+i8xybHopjGTzqfDqFIcW4FliV2s7qPRKzNAe/8O3xquq9XMO0zgB0zACleWWPbB/lsjeuJcBR9M1bFQL1W6SnLWUhFFi/WKevUGDuFfxjbG0fAc1cQEtkB7XlwVtrSYbgPsANA+VGk0nPH3TzYoNOs1B+NiJOMrlUXeWytWNbL/oiIlqA4FekQq5f6VYBkbk+VAIMokyNdtsPP23xImii9gsWrmQJ9p8iw6jUugJZA48QzShaKJlpVQkFmN4fvrIb5QOoEktyveSB3HoEFdL6QYXb0KDcbapeyvJIQ6JAlZZLDh6v962kivPqAut9hFN8V5Pc3WpvtTz0rWH65niUUcXEm1IWKGedNDUA3bdnFd0di1smHujvyWuy0F9mod/ByIMG4PPnshnlhn6GzR4FZH0xu0K5IZ+8GoMXhTjOqm5p9CmXrlnyVk8+XaIhR5H8UW5b7kLA3wPnTCI/TKtMOdyTyu0RhrXiCkuLxUAP37OiRSK0V4mSNedESP9XBcZFxRJQudnUgEU1CsTc0/1hpYJE8Q08eEAl82aivM32fWM2jaGFwgE59eza0sRwQsYBGowRqerkyWOKcLvA6EGb35ntv0PJZWgcOrYhKA/GbMobcX/+/cnk2Pfu0uhm/+1RU0uKcWL2tBUfL8MspOohQ6afVkW/MZnN5S2l+rdWbqgYexUKZekOFpDIlwuMbhHQomwtk5Nmyvkx9wmeSxK51EFCWeBp2eKpH1pqNYcrtNI/q/L6wbtHUwLF8UetUzpfN0cZADMfXw24TBcq93qaNxVZSCGepBbV0MT7k6paMbc9YqWMAqtBQa9FfTuvHI2VnWTR0ixBMxbF8ywJLM30oKhUTVYpPvOlGifLGWEybiUqk8hTXrfH0Xh/on+fZZhnVs9OAVM56kJTN9qfYOb6gfoe4oJOR775wtl1UImxWDmWP5wEf0ZC5STeekqEB2H4ljYVGdCF2XnK0z7P1O+R2CEuk0Sp9hgkcnKJzf9JSzW8fYfr6txc4JDveC5W1950280eO+rN9NoIQtu3w7N1G/b348dwqRV6I5zd58SDSzA9y9FM0a9H1FdGwC/qTyRGHWWe2RlpkRYZ/tjxX3k9sd7DDdpjBBB+ibRvlwq5MbuIcWYnsZfzXk88Kqc3x/mLKlg8+enb6zk/6YNlRxTYD2cbNqvqSvZVGyc5CFmu4u2m2ozH1iXUtMDe2UWY67H2bY2jZO0GEb1W71a1qntiHzpK7ifaWHp1VYGUFysQ9afqZZ6trQAFRUqWOlKIcpWx6s129q0gw74tXt0IMNReVwf9noOutFqz29doONgSqqEPD8jvVFyaqcbPpgqZvqiSJgnYlepTn/qbbdnBEs+O42KhV2eHyMj4wOLUmpvLJ+ZHWHtvXRcPTSe5skGyYq10CWTGPtx9LGCRBQYnxOzBcQw/3Pp3zdPgDneEAu1TJCyD4748oZK45eT+MPsMfmuKV1mI7/dH6afiRzfVk5uhN5dhya68K8LKxjEM2YFVNuJNxPQ+GS74kOpP+D23wJWFhSf4raxXAsyc8siMqI+lPrAyuurH+2mtylyH1Zagu3H/TN3pMgS+6BOVmkmAYO98w1+Q9C3F+sz77Hp/b28iG1AeqJ65YSgmqBnYPP//tMRiRTL1K0pzPoUuXWH7dqtc4pUPDzzP3Sd6F5hbkIvno5w2xNFGbRpM5ioTfeiXHMZkzA38Ga99xq7ZhNZ5ym3mc9xNvmEnvFXg9mnZOLhFYcp2i4TFp8gCrSQyw2ns5rF02BsnwbkNltWMyqWs9eDWE8Ppwe9RpltcV5G5KdNoKlN3Qbt/xWKzQc8BjreZauk66Npgk1mFWw8HvUlZ9Z1oisIV19aEWe3VHu65JEpzG+E+PLaauSvUnF4JHJ2j39q/cSYkjE+0QIY81NcTcLiNUslhR0k7JwjqqoSvVHwFVmClNg9LdChz/YCvKy2B7mgImGP1SQKOShv6Lk8QJOOQ1yifFfhvYnS1fv92qbHC4rgtTt+Xo2vNePj8YgsVnCOQoTbZbetnQv/03DShnhfHBfnriZ15HfYHxvWpQDcwoQCnQ8b6gpU7sxnFKsVkOAue16o2DT+KG685JTltQWNSGTO8PGSyQjdlwtTLoYLHbWIHVniYTB81tax7L7zHO3WtA9t+PSzqmrELdxZmnYa0DCwK6avOZLPMIHzPNjm2J9HBBa8gcPygne7M8G5ndzKSY69mECcBFfEzduQnY+3+bxE+YrGx5IecVUDQHRHDMDRs2tYC18Sb3EchCyZ/7elE6ypPkx1mze5WUjMMqXL4E8UwiLSjfUGtGfIUY5YngyLiPGAyfjJ7vspXP75u/B1ZWWiX3jutaKl08Vzp/RD6dktJ8DGdyfS6BiJyy5ay7mpESJCJBGi9NE5KhSX+pvChNUQOUrCVe6PXrvFX20oMBdHpFOF9Q2br0fftpzx7Snn56YhyfWsM4CCNlrROhXY81n+oB25D0gv7r5dqqhPKfRvt+7zCEqEz8OhPak4YdqpPltY70b5427Ip5/4aWjKgRtbq0UVelkK38YdYDUnWWBFxdf78HO/7yWpttDYSL7xuDmsnA9M48PTyMEFelPaxCVxEwqcnLbuG0z2S9e1H6AX2Wo3Q/ENuwYLhErw1MuC73lCbkCWCbgEhmO4FCI41IBSyI07d9cHQdKfzmvuWM+hWtbk9M1GVrVmL9PeTWGgSkjUixzD/QQe5d1jUyO+xLAF8aXbduX+prLABInu5VIBUn4LHsyu+RQpNY5wKRuWdDbS2nzLRaFM5nRoR+A23IdBp+EEk5gT5FcH+1AfvVaX9SQOW3hNkWB7lCOWXet64tTEHYBxhC2Ss9Z5xA8ms3r4OO8Dd9Q/E+qlayHLSgiSFXv5Hf293gzuqN8ocIoN6Ugq/a3PAcEsFjmzWxqIs6DRb3AkmtoIaSJR6UdLalx9gc7nClryB4Q0vBxoXWYLzXBWH20bfBfRa3xPYZembC5u4Vt6f+d7A0l+NWoc+sY+S75hb+VTuCOwfOjeSSBQlSZITzwtLdxfFrmwvaBc1ldpxErGvYzI2Ix8Fc/rdL2a+zQJ5Io1rZYFXEqCnL5Jh/EO2vd+jFVkVROEv4U5caGvIFmVWHn4kfZSKiYBnT9ScrX3HMMX3h/CgHjMbxRfml//vMc03K9Xj4oeRjvXr5WbB20NrilpUH/sBnUZdWl71WJYuWqqWeys6zdOVVLSXr1CseOs7qDFiR6ZAs1CeXkvq3I7NiAw1g+5aZ1l8tm/pNAoaCCkhtImTzIBdWUeEd8WVEow4ErWO9Dip6nWWDXHUkT3rksICOEXqmVhBB6lYRIlaqKBpQ7+iMu817KLe53WSSZ/g7Sqcs55024m4HyCj9dlxo+LWCKNHbkQVlKBJORNh4nJR115Dk81AMjrJ1AfDduu8wyN5YEQOgTTyUglNhJ6J3okOeoFLyUq0uGt/M2nJA/tWYXU50mgCbTFVrZ1dzqSd3YZLcYq/uAiOKLuoNLUW7qhP7X+Wc80hd83nNWm/XH+aPf97ZPf9iKuxaHyxT+ecqEjaJt6SNuqp2Cuu6VDYC9YHt9FqDKujt2p1GEEWkojDzy1g9G36oAK/brDc1TkG93aonWqv3SLnfkVVO8nODie005nQqh2qQntrcbtrTVcnJuMkLmGdmIRN+cTn7GqcpFDjJ0DMxPkZMoYfe3xskpAJyvpvImntsSI3xTpIB0u5E7MmiOgGpOabM/exOXMem/tbMPfdAQ/LVgPtJg+1D1QvER5e372foIj93auGUVy2d++NvXtu7IGb2QuqzldbtG9+1O7Uhg/XnFpDPbS7ujZsXDgbNFAucApvzZeELDFrTnLwWQ838bgdARKdxzwVaoVzCCt5Kk01HXCtWouAiLf2oO7ceSZ49vXrU+Gzz08FT0dX1dQ8E978/EwAGAwAYgwxA2yC5s6rRtqnO3brsmXWKUK5p2ZpHbamhqtXGz4rqPszrBDg2oSRRCms3CT+8US+jdfRwU1ozXbfGQCAR3530401GVhm9wkFLbtIYn99TMNIsEmPzz+OhGm5di4MMQjsREC1Ntsi/JicxlrNJPATxEuzfm1aWkvg4tZAfHdfUgMFxQ5nGWig86DoxmOTjQ07mxqsnB++In+b2AwLj49viI9tXhYs+fjWHFTgabZ45ctrNm16Exv73T3AZeP3Y5C9yBPI34lRxDsUUJE2YOrJkhZpWtrajUSEDV2c9BnuJD2/2uBus+QuGnZPiratRbZ5s1rsDYVgFaxuadmmVHdoz1BRHL2j0jLysgM5Lo8cNvWPA0+JjDEfNI2+dG89df29S6ObPth/CJdwN3JnJh+PzSScc/YPU36H6vBTDObCRKWgMJiMqYiBvxvB9YuFM4a82Gut/Aq/uXtYx1X81731g5NDZhSO+dmO7D/Pb6+RZ5LLf+YrcFLIUZxHNCgd0L9SR2wUcQY9v/Ra4eJ1u9YPXr9rXUvRq5sPzsx01dWtIL9Slwxl2UBGeGxAYlgZfaxQ16PzIW8hDsiT+wsi4f2B9stDj1VwGUtiMo65yzFiYqtbnaX0YTL9kpIlI4qDpbIoSkoKeXDzq0Utifi+Ly68tvR5dIagbEdmNoCNfSsc+hLwJPmipB/AJnslQYy3z+3go0lgZoMvi75Oo3k2dU+c68rWGtrwtac/nxqqyHrCn4uKqtYxRTReLzhI1SoIK+NXEAxAgLCNAqOE/sOULSAGEr6yD/IKgPjxSP4IuP5BrYKsg6760aScYOekqE1cnqjlLucEcbyHIsjmMNzVAQ0FcTWICF7VURKULes+QPzV3+ifKOhwHRjgFkozVL1BgZ6BCdmcCtX17/Lfi8po75uS1+2KvLx61HTEJWkt+TAKBMcSoGgAhFw7sFXn9OQX4ldLUkNBV4ft+tQue3u8WmyhJYBNLnu58YEi91iKzlNDj8XXnzEK9vtJUHGuD1gbd+C5DJWf3r/AtS7drVjzjNyRLm5NXvcfvIWdnoBBjrOAa7XJ1ZPjJ2qTYnB12SrelZWocJHoQ3uLIhzGZZxDyHDuPwiQmGNd7GRCjQhZPe9h2S0s60ngFUDQT/jhAPxUXr1aroZtKvTDiJ4FDa3Gm6KjgJAFPkpp47jShMPPCkxssY3jRn3nCGSKav7LupE9ISIv5k6ULCW4sveDYRSDWWn40Fv5vkIySOfP23AD6jokfSR1Or1tukltXYNMsq3VBLPOnw9j1WzXBiQgckOjD+Z8HRtlqXaFfnDVpVF9lEuNatsaRJI99pHiDLn7Sq0qJx5BcKJ+oAi35nydHHVX7jJ9CDoVwvZi7UQHxlq/8u/gbVdOBP+9si4QWm0bTKQB/E94G8spu9Es5CpmQgGG22zquNdZMEKdh02DACsmMFcR44ir2P7mNXlLdDZ0bSVei0/h2hkQD5VnuM3earOHe3YrJCPNk9ruQYUub01zPzZcyUB/GeoG6Sb5JOnEP8gTpJPkm6QbF4sZRMbvzkQx0fn3U9WAWuAidfHptoY5zt0xx3qOqARvV6nLgoF3twzVKqLKWH3LwxT0UO5pSmpNihvlD4O+zw4L+UYFsH+H4pgKnQF4sGnsB0iOPmLgKCQ49eeVJCRRc9l7gSv6oO8JamimOZaMuIXAudZa4DYC5lbKNfp9TsKyjNTuPWdHnFHHJ//Zz1RRC3KJ5GVVqKFfqn/G4qiUec6XaRRHe5AoSiKNCo5xgjaIyBCE+2P3gOxkfwrnvu4YG4aAU/IWEBkvFe6hAbrMv4g8rZZHaEqHh/s98TNXmsO9qvcIE7yuUL2+945I/dfjvL2enyhbmV22IjIp6o/Cy7K37QcT3hYxVqdj9VAJAxdZ6L+titf1Q/Zi4B08oMsJ6EEcsj3E6C0HwNXDggIOZ0MBsEYu+gMv5y02no37+ikTOTq/YrH9Po5DbvmBsxWzI8bIkG6LA049gSXBhP5+dyAEAr3fz9kEE6ZJqF3x06u3b32TK2QoEdSAhJAGUEu3A/LJAat1cMIv8XYzjbESeUTIMO67CLbKaIIJ1ziW81Fg9L95wMSjlwvuH38fvQoNn2Ck7EHKOv3kqF07wp3zR28cMWjIuuOjfIF33rhU7Zty/wOrTzxtL2LLBr72N6UFAlsXFBQDrkPPQhGyVj1JbyOP8BxK2L8Tj+wSxIhNAFRoQiKPKNcdJGgqo9FjdlC6JmSIlsVs0RUrbAVb1taaMiGXRW3R9PQYEYsDR5+B551pSxuDrHUSIXXaomVSZBMLpcFO2sthLRcuBPQBRXlsTx7fd5gjfdo0vV624EfP9mDeqU+KKyUdHEQfLrpwwWfwKYoPyhi3x5cUrC5F7hsP4cGGYhynKohxmea/TzDL4oarOFX9hUv15ErXhOF6zL1lDkZ6Rh+utR3utj2x7didgRpVb3fafOvWsR5/RALVbNSQu7oi1Q3CIDbSi/B72Nh9oGpNGBEMIT7XFahp7vZ5AuvW+5gR4xwxtjrwXJdIMGBSUZCIoL0qIDubiBBsNVAk8rp1U4XJrNXv6ajoeo50jNgOQMcravxSAIjlNQlBeSh8va7vshdsavz/9cEAUggGFxsamy6rnU1NoNj+rq8bGxshb5AhNn8p1QbQ9KjGJkMxM9Ziehl408JQFgSZ8EPEnD1pU25HF1jcCwOjwQHf3HBHXuMnk4zYnov/zjMEAN26X+OJyM2m0fARfoId8poglFG8V/MlsoTLvJGuEb1vS5VQOflrQh8jtaMz7UiA63nanEtnTMKSCjm7ZHTVA/IlrpoqaUtycrO0v0WalNwhwRIc9zkmQvF2lh0vM5pKzSZZtFvw1oaGHazMi/iYY9/GI1C+IcKCZNWRaI/7R4qid5ijjz/IhTsPSAcako5EMD6etC8PCBJ77vnwPvL93g2rk/alFXZfixv2QvuHPYCd91rNQP2FyAitjK/lLuBmBinCtVWpZlGNEhnllasLinXbRJDv+eLzbYpYnp5fnp9iWt2ZbJFEe6pdsiCJYA1ExnXSZDJxtO9IP0MFKleV345Ll3aYBkKzs0MHVhIKzKypOz8h/4W8Tc7U7FkutaRs1jY0aDcfUE9DA8pLufjLL4C7PhdY9UOGeGmQ+3eswHCF3gk4g5hCtCGrvB2fklBjmJGSiL161CnE1OPvqla016wlkn3ghTZeu6ItuRIGbf+dqx5kprDVcyN4PBpZ99rdpGS0cjXIblwJDkZd6vUluat/7MERMHZWEQW9jMOEpO5XId65lKf5axgPGIlCrcVutlu0lDmN+DrlmtOM0yz0abfQiSfB1LS5CpfSbz4474eM2NaGK2LGczKTSUYI++lCuiF4JjjNcKEJwW4BCOcFTD3EmXAPp0ZXaqircO8UaYqlGb3DraJqgIgDnbOOmbCa4We/6b/mn6VFr9Ir6QJQEUpJe1UkbWSYUhmnm/XNp529TXUgyGPCceGUcLLjd+9AZZzASjITyoxM6Q3ziEWHV6Zs2eIznLolvPKf3TfrpNRYrhZ45bDvcAqFTgByv9ujbDAtMXtzcdzJwcGTcXcEDHronfcFA1xrJ2/WZMQVEIoJDbgQESOIERWpIrIxhUcYFkJKpeB6Q9EkwBkWwfUE8+6GiwygoachF6IiFEcyIhMXz6egbccZUblERIwcGIeZuHl07apan+rzjFKeyTkHLQ2fz1lO187j6AE8aphcpR6XDLIhZojWOdppbBbgIUcl07ix61ZKrmPqrgHsaOtFqWvNxUXsphb2n+dbWjax7MVJmVP+mBouE/z2ml/7mQPxGDTmSHPFeGz4bLneGwufAFlbGAWQipuNBsR8AR+s5pNcg+Tp3U4jfCJe5LSVz9OgPQ7sgxVAAiqGwEcAN0Gs3bDzfJnzEZEwqEgfFjScd9tkIknItqDD76Aatwi1cISTqAOXVjwp4ST+I7IDCB0KpZROEdnfbUChhcEz4BODiqp40xDyuVMxxCMetMlCvumSykr85oVQQhQJmRA0XuRpDgVDoaDqM9JmLoQyclP6gOBKQj8EYoSPiGqKTPJDOu4JVAMxjAdYhaVC4Fr1PwqSwFWpFnyKr+ev2CX9R/oeWZUZzVfzVnSE7D3WtmJVW9PKdY0xDdHBC2NQwOYopeaE62RjdmHt7orNviG+CeWj61utkmi8SsDTBxbn+iuJykytj6t2XsE24DwzADEvSJOdreFrl0LT3Qfn5lRpSmVqPP2mgp2++i+fwwWlGZpAufxUaXu5XhnmRfRY7PkjFGO25Y9k5JiiUzKiG7jlMbn9rncUTlpHQEP46mnfaQBhQCK5P3OQZKTXlDey7Zt3q3eJmLs9knilNovHbqbo8C7mLhZQsfMArJv5mTdiKzebuiguqW9lOd6Eps87NUuuqRz/9CTFfZbKzRZb3wCNEVIkanwhEvrXAzVFKosskRe0m/l0et7a8ya22Msnt8+wP7OUu/Yd99qRnb/L8DbV642an2W/a3Ga0rTNZEE22sfp/dHrkOXGB59v2V4A7s1j3GsDtdxER16MjfE+foV1w9EtrxY48OkgPehu6XKll7msdHVZmVmVl5A+WLrx17vWiVlSsOkY2vaMbyktNfP88kbaoy83YCh7c1dqV5WWraZkNLX1opJA4WDf3Dr9VfQGcg0mY8WC7NJRQs/RUuWG6KLOVoTV9tT0Z4CxA29j2fHD5L1r3gSHlqwaBfyWMz5YWsMXp/8/rGWZnQ5S0a/Ga+L9iw4cz7B2J6OyUT3qimOt6x0T1eQm8nnHLfdDULt/TVr4B65IrhCXtGJDCm6Zc2GQN3SpZTR63cIvbbwxnBmWYFh8nSDHxI4Rspg+WwpPFKBH8EXSRyjqNS4H2LmHn7qigOPKTAWeqeYkLPsSjpscHtcY5vlH6Dwa/MwXXPiN/Z3XGk6oidYO+DxXlpryu99koMV7gbQ5IOFyOwuzlIJLunr1/5jbgXeicUevJuEoSzGxzwOJrMepl3XbeboCV3Tk2n8xzkjMf9eueIpLsKaGZ6Kxx64UYdHPfIHPY7BLKBX+804SGAGGJ7dnBOD7z8dP+26InHQn7Gx0X/PLEI0mtfG8fZc7KDy1qU5i4zdFQQBLxaoDIleqVd53S/7/b2T05V/t1YrmKG8NjGc1FCG0iV0le3p6D213Wedat02yx136G7mLsAAvfKkWRUa3NCwKc2lwqQJNbm17Fb31IakqeGWHVcNlPMBdUeiOywqgsZet8Fyhv05Zhk+I6j9dRBOyoKz9CbgcIxbJ/nliUudShnxEmRQnO7ssAQOZI0GVI7Hs5wVFCyZLAZV4aDcQkJCb49w9LQ/R9/o1aeCqyZ3POuXZZwe76lZ5QHKPhCyyeavwSjssJvjmZaWzAXN3OHmFf/VQ8vB+YnEU0/IOCXWaaPRRZDYDAvYXL1eXvaAvTR46ryHuFzalU/C9y2hk3C9nRejsA7o1pyCTHu7kjxK3i8MYxT7/fexeerp4EmDc5KtNaqPUJKVWupHLFtz5S17HBgUmamOvpUEFFY+W5956Br/rjqhMAn8MSCcvZFrHZ6AiB208A+K6t/nJeamP8BcviZwAyN9m0hXSjuffBUqS9oQLc0wgTyfdZdRZNBxosu8IVOTupYHYqnwnYLTAarXZYISKmYgIxB71qghEhsOhnTbSOhzjqU38A5G12bpK16UKCj09/8Bnxys6YMrFIXx0WtnwQ42qpIvj/RU4JAShAsEb6oQBWlydm1Lkie5S4QXMh0xoLQtIcZUinGpisXp5nAuXjg0RH+EFvTlz3r2ajDJHA55mnI4d5a7zYRGGfhY/SyLXV9tDPVJUoSnCLLzMOR/sHP4WDdwJ31UhXbmAAI4b3uhZdfP7ELATqmCHX+0j+hPkCfQzlBMlB/EySAFGA37/isKWx5mZSzOt9FoYY1WUwfjl3RTlydiSxYVTrKlASVpxfNRoWdnKyK2jkfLekaNbI1cqR6Pii9Mkak9Lhct32XF2iRY/hbfx7PgFg/nYfCxN4Z1JxFzEGCKoQIL11oqCOUAn0UNixx3D23k2tjUHeO5VZV9Z57RVIRYQfOPD/724PxAaA4aVnuZfXCejCrx/JR3qIDmFcuhq0h4XJdVJymhLXKvrrd22xyfuV5AGcdD7+dW1ThT1gOxnwr7YR7GW9TJylzSMnGQl0EsRaYhZ+kF6KiId/oEeOi0sNaKzwkM014tAA8IdaTg7rjNXqG5snGJp3cerqwesQfELXQETwFwxSm1qKm7cRcBZmWvrOjmK9M66lzauc2dO7hRTy5rKzX1FFCTGnMrJ3UlOJIZWWkpL1mhJgEjy2XiJx+AzgDo89pBHFvklOctjK85N/M8v3ipxtX+5HMICJVuDfOcsf7kBEpGCYnKwFEOxDlOFkW5s1wm6kYhoYwIk3K1dDlq0AqZAswQvUyzg4o5AfaAO+TTKCFEkVfPY8izp8NU79mhk6EKkw19XXfFpDkCRPKuo2aodnU4tqLWhVnLcrOYnPGkli0HTTz5yotGJsdKiDHW2xBuVoP0npwJw28M5nXjitke/UqBqrYmQPTKRIHqsqf/cNuWww9nz5KGzXdPArOHzYJdnMDoGa2Gm9/B9FEvxjgBl/gVLVFNvmy4vut39rkV6zwKEUHUgsPVXpD1lrCYFfDjUuqW7+/s2ejNT7xy6uxbKWCamUdtLjOwl5OrkXVst09aZ1lBtVKK4JD8vv6T4MV8hMs02oZ18nqa/k6vZevz/h2cixBgikII10UzvR5UZdYumHi16k1D96qoy+kD51PBullFKKEktT9YkuLKnJEEJJxkS5TcDyroI/TJZeJ0S9WwOCEvab/BdwhwWx1HiSqZEcvNaEYAgAiIDDPAC+Rmi17UNl6RAz8IpX6t0AAisnrAI2GBKUbhKjerb+0in6SQRDrd5wb7UJR2Fq8spFw8zNW/HpapU+TlTTgH7RQTaHmM9PtyX+jAzfHO/ASCCJUGz6WRz5UPfnz+C/uB7PR//59wd5Z/hNoHEZYy6QgBgsgsdjM0rZNsO9cR8yti1QkTfORIeZbBEP0d4wofEcDKmjKWTsGAThfejN4THDZ5hIsVv+/nTz0dGd8d84uMZYD4R24EpXdnQZF0qmwjjMSxjLTA1m/YCgFPAdSeVz5/RJPFvK0XIRNLaTdxikRRdnZGKneJiCmYzYjg+eXTZQkQhhQ7f1jChgVP8gwSWuyhEJTh+5xwvvvZjE1uXSgF9YMWK5SsC0Cf5oG/FYrQf+qI+GFi+/AE8ACD+n0tX+KCrI1ZBiHEBE8/BtyqaKF4bJrL2/MvI3aSdhf6OEzEBEal//OPPP+OOxvCZ0rHnJSZol+LxBgTgM4WuiXizcaMtWh2rlqulhNUWq45WS9Vy4ldCB4QDospFW8zjlD1y/FdCJgM2PCYeSwSUwMAXQ+Ihqcr+LUWqMhPUtcQNTzhJJt4RUx2HlZOHe2MXL6PI72jQvZJJQVnT3qCGuvRN0BYaGYREaCgRLDB24FHc4XeUh4ZaNAsuhWorM2yLXo9+iEe88FewI6z8hkMPT/clUZJW+MiHJL26ajVKCuRwD9gagpxlKCgOBNdl043yHtaU3xy/acrDedAnvr+vCehOhbEHKlMJmamdeessvGVdXtBz5/hBEiWv9t3EoBDLnwLvpe2MYLD7VUU74zgTb/2rqi4+WnygtgiGqFnfcl36AMHqG/c51qXdT/dvuRaNmM1DP0DlD3o74G8tyNbF9TViFFQH4v2RFxa+twH6rLpizvtb5mXNPg39QOue7rLKzU1dkbNda7RMtOo/drmor3lPKv23dXlJ0NLvfeLWZV4tO+dcOf+xUU0ozmd2OAB346GC0NyQM5Ge8d6BhwI96/8BeId4u9ppide+7iTOYvC3PPJYDCyVLBuUS1bRPmNcZgpqhG6Evud7S2muJBlZpPZKpXkWxBZ60neHMQV2/8mYo1qkebFzHC7w2navNfGD8Yvix+IDo2c8AppFzULLTBUk310pinKP8lSy8u8f9Ak2D3o7o90DD/EMTms9drPGmLHMMdZud5wG3HrZ2Kcr6GCacVuUvqCvqS8M66ISbQ6HLVFRL7bZxPXKW8LQkO0bh62qdCvFHNaTl9It1W/J2piUsSk/PWPDprTMLboeeV5qWMeRzYfcBt0SEIPVgGMVZYpC4OD1s8KLdyjoVQzSGBSGxNy9djKVcoxMNHhlYa/jJKJR3DmIDOKlyzAOLRiCEvw121uoS8EaiBcC9NZc4snWsPH/jFOdkHAB6ssacCDECxYYbKXHeSA9IVsxG7jFx6FwuDcscPAScNWNvY5r5/ZRwTKoL0y4HGJXBGi2tdCWsgGuJH5rSbHoTvhnMRQCRsKFqMZ3IATcE+bEfQF6y+SjUKHASm4ZNalHiKL5KOIhq7VMypcFOMg5kZPVYnUSnYMg87FfzgKYWWc998viwh1tO9z7+WEK94jLBgQte38XMSLNulURmE/jrdbU8FVNL35Wg3OpprrIOlOh+c/Li2bmt2Lwa7Iz6yAbAgxCenpojsdWStpljV9CcIGP0eBdUO2dbzTme4ckaHy1IZIpb5Dkq5aJN0PKGpkIS2IVqfLiKV2IxtcanO9tNPrkV/sUGA0FPkFW08G1rHQkGIoEEZILEd5AcsEIYRzz4wKPIAxM+h8KmgnkBAdDgOcT6OLVROuvE54o5NxhORcvb7HOoLmImf9d3A9F4PAWnKF3AYE8hKtcBMBZ8EsP0R87jyW1lxOxLQiCkeBF5pK98C9iiqd5DSAWsQK5ge4tWRhyd/V+GMJlW/o0CfcvijSSfdYJScRtL3vMcdPCI/LgKAzHBedCI9DwODzH1RktNxMCuRru0T/idFOSSA4n8vXYFO4xgpM4RlnEi3FXt/ezJVsUpaF9B56k6ZERjUREC0vD1biX6JWYEgTeiGcsXRkp1pjwRXhhi7uWrXVv2c+ErTMmr3g00JyRfLanVrqf3LYdKhOFE7UGJbamJrtGs6KZU16pDQXuJJqf0I+2lkqg+3J86aMY/EGx7zZ/UEStboxhfq2kxl1cU2u4bXwuiHAEhi1eEuKX65lb6IPOWvzuPBoAEs2mM0tGlu09XR22boDVMNzgnuASx4pjSnL821mLWHus5arwM6w7jYzVETud+TIFDOG/GjMtiMveR0hvc2fl3shhXM7ng6xfaMZkYK67WvPryxgzaV7Z91njzFjWYlal0vUfTDbrOGYXBs2qwRwXdNzac+LG0eena0VoNiwoUwaFcqABTHcMNo3d14+5eOj8MJ7FcyZdIwvkvBGry/yeN9hvJx50Et14blAf23mkUMYb/sy0znFvGGlgJbjKWp2VVcO84bGsgCANW0PCIimuWyme0zSdu4KCQ/A3jfA64UHnuGRdIhZ+SZQru0+gXqK+rlEyDvWzShkbPCxRllfonxuee2kNJgOX/QID3dfJaZJGoahvyARxbWDo4iXy8IJC4ExUIzwlu8iUUdxbW1XSF2fPyoWl1fM9mGyeRu1qfPuaFrQ+xvtqWZStHp7WQKnhlJTy9j7d7cOdokZirYPfX98HySiAcB6v4jsINZ9pycFf/Yjb/Zy4Pp3CeTQgcBCry70LshUBVPtLzAFdGb8r3DdaeA7YDm+HOPHjim+jFJUGUtaSFFJqShD+fCxAxPiorVFSWIxwrQRD+JkaoDyEsdSG62wKpxAT/5saxibnuBv1v1i1vBO9EZm82q1WDTx9rXrZyzUCHQmzsmUez/roF8aXB3YuZEvC5WgEjsLmrBX7ensJ3bkW/T9IgjPhBHJdQaDvyLYN63YFGrXodXWruY3+tVGexL4oMJzmWnofa6mGE4diM3T/x2+7w0IyDsevMmKbVAvThLyTBn16HCZBQPI9Cf7XiTTIG+Sjn79v9kQEagrD9BFawo1Q+W8Ddzzo+Z79cE1dEnfl9uVSZPs7Yyz40/mlrsySQm5hCdO1VNeYDSWesMS4/+d/dLtYwiR9zZklpa75p/ExFkrpI+jt0wJ+PMFMBqVrbhqipTIhf/lFOHxzhiy9ddV4zq6K6DP11Xz1Z6e/+05myl1dDH2jMiE1Nx86KM2nyj/pZhM1ERPEgF6G/jNkEpRh63D1Qh6L5/WyQYLW0VR/FgnjwOr43TjNvDVhftHPp04dPziIWrvu84v/rdb1dBoH1yEHw46fPv1zVsogcu3a+XF6t4etRS5q/2Xw/yC+ejU3Wg/I/GcuB9I2efL7TOGoDc5lk2UuwBV3lT6/sXE+IK2QtyeiSKqvu/+BW8gJmN/Q8Dngv8hlx076ojEmxcbG/wNABXRXIGn29zzf/63SnqSh4afFRCJo8fzGhvnF/9vf5/MSAgncu3EecG5RND19A/rl02ecmWPnxF3frTFp2nxPRDf49JDWJl49krr1znzfYeRge/ARjHmKznc9B2ktcfbsGBFzjnc0hetZZQLcuScwO9ETf7SHl1x6/Z2gHeNlqzwMSl1dmcYl8Y2CknO70pA4a7YbisPulNECxYxYFMBT+OjsWSYsHEsSnSXbYrQQZmM2UEbTsH779kcuWpnd5Sn/qYtdpnV59CLOOyf+9u571Jh3fud3JVpuMpZKfZnJVIpKuiOamrMYy8TlFYnXqnnZWRBzuKfncMw1QkH/OBS0Vt4/PdhA7FnA2H61p50sbOrZfvWz+2VPA/H0YOV9wPa6cxBo1vaa1QM7qKnQNZlM67ovhtQ7OcFvz7R6xm+wJRG6QS2kC8tqZheORbxwZ9tB0yHb6ofi/bvNY/Dv88RGp+kQ1QmIvqBg+e/jK4NAU67FiikuwKfSb8dAQuhoBxHE9gw9EZOFzd2yTP4Q9iEkEoNujQBg5wuSe9RHv/xSu3qr1MA8Zd+zqQqZGOQ731TL6qdtn0JAvPUwY0uruLBo2jp3z415xq5DhjkbQUXJUxatvuFABoMDALA4eNyX4BwN4gLu6+3zGcLqvQ/2rrhmDOOxGN4XxiXuYJy3rvv79lobwN4wM7KgqLGYMczeBKpWU3wQ2BSnYhJKy/R6vl0UAeJY9MUvtDFtZIqxAQujXKHn3YE4h4tVoETfB9xmCc50L5ECp3E+JuMXOz9o1R01tGS214PtZKuC0LGcVblo6/edylnzJnF3K/O4nKPoPLONhXqaD1IlnbgcAij5F3EZhFyWfCE9eFPMaOHUXcTKQhaz7i0DtnboCywMI+2VB375XVab4BMTd5c/GM/o9rnrfcZEU/w61rJ7LhUFgoc2tkV6q5fExNmWxccvs0YF1CQk1AREmXs1u1v1kVlXK+rSd+ibm/U7jhAK+seY3nqvZd6y5Ipq6M8d64uvhSmxePSnNfre1Jf0NPnVaHJ/VVY/0Po6+e3NUx0nKBVG99y/vnnGCp8dPpbxIuiJDfzH3nxVn1pbYVx5gjJWSKdxnxFM97sfNO0yHaP96MrBANnZN+rOijenPXhBv5QTklNONw6mvb7tltjh8E3o35z81g7Y0uwS/J6J8K5EvOZrfBwWXh8dsW4N0lIeRVyIOArDFx8ti4uwEQr1isxAvLatZ/e/bUW46iWIQBots1WZdqzuTUK8fF4N0eEfKz5CQygwqC31HxcX4XFHAL7U2nOO7z9ftWZxDynbUyNV/K9pnR1pfJLMbAocCQxJNtFKczZpnZ1ABzFtpKITMSUeIndWjKTdVUIAxODzAOYnGq7GNvXHKOLrjF5uv5/fncjTRdSD83lu7DpCXZjF/LzBnT/mLPGcqM4bFcxoIIg5Z4DkCeIF3rdXzSISUySFKxO9WZqCtgMVHU1DrbPM5qNNlwVeCvgwYWmmuIHBnJMhdwi1N3EDAptnmZH9akaN5+SOun/Lgc84ec4dfbZYfri8rU9glWauSJB+GgWoU/hBDf3oMvAWL6FPmO+IsNtayLfqSdPfs46H7WpN8xUzjYs3d7fUqVWRhM2bDv1dhpGeUavRMKtSYirIKI3AlsLXOGESBW0qiRSnTjATnGRJPuse2xMxcS2wIO+TjLVOe18ZuE+jyqOQhDRVpETgSmEvdllZvRprjW8IlS+ELp21VlDRUiGPQ9rgVevdFDgwUesBcppo24fe1HYICtZ4cMA4pmJ3lQ2OjEOFhep1z/FgTsyfYOihtk3ofZeLRN6ZRDD+9rpsG1wxeEpV62/jOUj45wMOFQeAMMEAnwGcm2L40xWgEB0Gh3H2lJznkF+JPwIW1FIBnJ05lRB/4qQNb1Mo9uAfw8kT8QlTTDsOgPY91XDzcHi2ygKS+KuxZf1HoyvEnjpJElV7EAybhIHAELJANiU70zKdofOMa9LElfYdjZnlaivrm32pjWvUeWZMt5yRTd1cIoCC4UfgBzVJNJ3YU7y21gwmpu+UqgJ0Ussii+81g6e9BXBMJK0OSykIDQhPrKqK8vl76MGMT/Lq0OSCeomvDksyVER5S2yUYKpUa8WWtiSuETByujAvN9dfpzhhXmypOA2FYnlui96MsxbPKrlJcFBh5aktdzBO0Prr++8yXhyoOQ+heDbdokJxXLe1r5e4L3m9lsEMhNZw/QwJgwgqPbL5ruT+8/NX40luPY6w/EsgNKnxZndpzaXSyvzOnvmbZTXhNZsGnQd2QUi6ZcTjK650ubQCv727QrDvt5PnJQgE5PzVh6d5Nahv32n3zaRkVizMKM/K530LAtJQ8uz8cacDSSmTBzv6Fy7kr27wqqj9wwmZ29HSyZg8uP/wzj3ViOjYLdQFLeLtzweWm/O5x3UoUOtDiPJP+L5jc6yO9E3pf2eE2bJNLp3GzqKGW1AII2enMeMUBwgf3kaHoJZjajo6wvTC+QKMSP9k0ukp5BpapqZ2lfdpSVUXDx78PFck0klVCIbpheLjw08pXigFqUoA+mtQdf181BA13OyGTRndEuA2AGFnp611S3T94Jp4ax9eDW6FLU3Ia+gQxFTT8d+12ImARk6Zx1F0bVr6b7RVhzHXwhyoYGEe8MQ5krlEydCgOQ3rNjTWj4/XU97s+f5Pl0gkUkOTns4mV6+4/GJrUnFVvEesC8MTqoFo5lQ/uV1AfVE8YH5r5kt4QXxu2nrtXe0W7RJtUHctT8JvedvC5/KByNdBffiEEZxqhE8hOmc6eyDKaTNpr8XJDaYRk9E0ZwJyJ2y2ilCr1ebo6BOZ1Z+LfLb4PnXeK5nlpvdu6VIbfhyvXbrknceSAimnko63lCwP4haybH/A1GiflqRib2rHwEAiUf5jWWuhtOvTj872qsptlRVMn4mUDVfYqjXKChLHVdXVqvFvCLX/uOobywHtqcVX1jKgE/hNHnlN7I2RzLS0ux/U3T1jEqX7u976xVPT+vrSqPGv/vg06v4u1LSd8okAyPtBtw9W/trq5as9rk/hrT+nUdKEZw6wJw9Syw8C81zucllFb+xyx/KhZUPyTeBpigoxPPen4M/QRKgo0/TRJIfjgvMFKZQ0CrhuTavgDaJPsqZYRtR1Et3Mq7gqvumTTvegawSd9sO4YTqFoBM+Bb96Sx1n6aHYwu+4ab4SR/mcV38bEAZ+Hal+8dO3YkKbd1hQ3CdzQEIMJgqmDQ2Kf3aVYBXl6PO1nlqvfH2OyGoOeBYUF8Yp7/83NkFsn8z7tIHFbxc/rSfVGfgIw9/bY1a7mj6JQnysh8P8Uex3Wfnx2b3a6hMiAi+usY4cOMWn7pomkCNp7c3dajDwp78qU+UDxz9OG3ie7/NjQPHA7KeLVu6KDoc789uvwU8i/5rZGBnyhJTWddwvJokW47eri6FIF3ZnBSqWuI/QuGX+AXga0y9G4xYOUbiUobgFq4rjTgwuyhLsos4HGP42F5ebd165YcDcSW0xpyl5Bb+6alyoLhpXZxetC1DBmy0/NJsR+y53EpYpC+f2R8xlRMUY6tnMNR6ef8rU3N9lcsfKz5QEr/nQI/73kG6A83/H9wtCxyuB8pnWE/J7yZvhlvmVF90vwmxIHe3NHyXGOuC/K4MfROqAHI8G9VXhZ0J5PHL2p+ZHUf806bK59/ZsUF31YD2UIHoC3dFEUWn8ZMaAFpA60TsC94hg1swByoaFJSbTArK6WZrck4Kp0g/X06KYLa8oEZrOXOKUKJGrVxnVcspLZfQlfCXLQ+9e4aqkLUnJLdKb452dJlMhuTArSwuE8GpwMUXHjwuSjGGTk41kIIRdSRoeJl1NwIAJ+cmXeIwkCfd3W+5s+sztjFtL+Gb39Yi7mz6ZA5qv5LVNtdGOXD6yIsZQP7dq65zuwofwkVlD/98qrcubuzQxt+pCyBy/BTXIN45zpnjGQZeWOf4G8jAZmDUY4eMETYcu1oimbSsUf7riIMdg/kGNLwtlWZ21Pe4Bpp5yCCdiRQVBYpw2w0fMGEuGVxVJdRCVSYLjtXgB6kYQmdSg+iM7grMF5q+5hzn/5hwW2cspd9WUBLqWc3oN393aIxlcO83XjZBxHBmfXSwAjVXFlBnE5CxccGxlFN9iATMDOg2vOoGj9wD9xM0c+65BIlp+XHRfd/99wPKG5fVbG8ZM/ltFLqKM4wHHj2WQdrD88wUgCOmLghygsbc2H73IEhfWV2zvN3Oaj3P3Bd6GIPTijnvnrEkxMq0wSZejDG1Rt+gyYvgVi4n23dKBJk41UTRA7/lg6z79GwDExxdnLPeZNWUrmyu1wuVEWT8K1JuQf1KXv0nnWdXvKSRJ9nvmAOCX+wVaaHmP68h6hIW8DlyPIfBOrWH5zI1dGCfkWKLxqfhIRdHmX/TrB7pZu4kvYxi4PL02AJEBfJxNrlmQistHjCGiEVPwfI3O+Ur5J/La1lCLjKgFFMFGnJoaoBX5ETCqh89+9LtwcE9K4dCLxfTYqsZkQhF8KsjvW2OIAvD5BLp6YKzML8EAKmgoeB2FYQSpRR74wYbMkW87Zv8tfVureVUznCrHX600pn6bVakSE5UqtjzIde3g2OXLa7iLomOMbyrPKYPmwAn4n+okhcebhs9j54R2ITKjFRrgtsDBEvnY1q0dHRMT7YGBsKae99fYxHk/8PZH593nttAP/7o5kv5HNwnw16PHI63yc5vn4fObBy58bei8+8zYb2NnxmmHz285/z9t+v2NKefdgPAoCKEX9STUldmGRfbeO82R1WGljvKeqLD0LP9mYiu2Vrj0ceQ6r8vANGaZ15IrwCrQ4q6zzUGbuaa+MjNJ73P7c9GZfRbwct9qU5IdeI303oFRkLxNZiK6X4KRiW/X7K8BL5cWMkxTnSzXb38/8qlVM3KdKSbmKEWdcTBCcJKDG3/p4jfY5Ksb+XqDv576YtUZ9u8vVOnJDPzJf4o92Xa+ykfLI704Z6jDiLe4/E7QMOszdJsay9dH7NmkbKkxbE6TUrM4up+m3uwdrdsWKsRGdcUYk7+uyPVdWLHqj2J/lbuempNHce58WGCJho/Mr60GNyi8zpsCIq/u1ewY3Nh4LKz6HuAKTJ6iYY0wEBe38v4lpJHk+NJDN1/+WjmZdhl8aEDHOYtmQRJZYAi8DSnj2Qt8ceOXoWKetn/DTKaXSQxLH5Zgehv26DSzgj83QzlXjxeQU9fMzOBzm6d8+kJJvvNeFJ2eG73nzC/RlC/LG2kXd50lgzvB5wovkgHD5cswnN5vVYM/X0GMmgez66F0BIGU90oSqhlvdYH1upLzK+RJcfdUTENFSb98DDvqNmgqrAjdAM6gdyVuueLWEPpo0ci5pCuwC2mqjD0w8OK/w/3KomNK/ZvK/C0x/mVN/uWW6L5Um0r9o6P9yrcW8609jeuC90G2+43kFy31vUSodk0D7/JeHN9UZu8IGaQtwXQGNGR4K33YcZxZ2OLJC8uEUP5LPagp0GKVl6GbMA3BZQkJnRILcKY0OM0a1AB88RA2QK41hOVA/lmnsGYtYDi0gX7zr336ElT4gZX9gt/7U/DC5xshYTnXGhogwp+1jgUMa5ZinTap17dJ0tTjCy0rTod5uSx6EPggPF6wLVAG7SHW9/ry0+w0Z0dvZK/dmWYxDRMqVHx1LKBbs2KTosDhOVca4q82CFB/OjvPLAz+aS9eoELdDo5KipXCDN3xVSFshFxpGLPmWQ52dx+0XCIU9NBL75Nn5N5ttpKBmxvLZUzNudGEmuvrqWDq+uvdypMOG1MbrX1p29PfE9dViwVja7vieoZr/rS+qN5MjqwKmezpya2uIx2zrjq3pzWzJtV17hj5ISxRgzNZkD4KCMjsfJ2yM6+vSDRyfHeksd3HR0Q9T7LsV+SfDyjAqACaF0kA0vZoNCqyxPtlRdy3EwcucC+cH/m2Iu6ld0lk1OgjmzJxtPyVLB3nl7OTPdUHktkllhSl7SXBz7S9gs7F7ANXT3ifmN2fc2L2fbiYTQ0uLoHeWmoJ/mORypUJZoaVRX9k644v/Mo45xcUvw51tPAy5b384feUy4Vbskekle/7o2+63oneQIuTp/1N9jEH1D1otDRuLtNsyWuw/U2btyTp87PpP09fnykujt5cpMik1qsO5R7AHMg9pKqf3lMTHg7M7w6t+j+2tlHpbRQa4uOCF0lM365YsMI3RpWtMFpVm5ME0B3/7Kvf89vTA1HGgBR2Iqfdudp7DzV6HeC5N6o3PybLv5uQDe6Cq3FZ2CPHwjZtOROD3ZEL2IglYoC2ld4Ylg9SKrPH1hDjwuAzkMNheH2/mztldaSvi/QGZb9gz+HaHYFt0kC3r9wEsAqUDup8CAs14BKPsaGVoLewxeDJRAM29KGTI7YfJ0esoPJkRB1RI1J5hhAWAfOpp+dmeIqoLcV1Kc/nUTJnhhYEm1kH7qwkp9LK4iFEaLcy+1WgAx3Xf3klb6E8GxAlutu0rwPmOvAoPgWX8InUpj4hXFnf+KRl8EzsP/PaF9wB9Fr6lVzdKSzf64SWQQXZukPYrex92M1htesa6JzcovTr5fO/AF6QKKVFzBwu9WN3KXfHRwwSzmW25vG4KYTx5sKawszjUbiQJgBoLojAF/IQLhnc1GVhUzdkP5i9YSqOZ2Yr+HJ8b/awYeuosqlHzGae8pGpZZbMZweNGgR+IXG2FendYoQfviskhORgITsd+9JnP0MgYyewKOGDNh9+rEuPgKEOKvmOeD5UoB89G1CY4d501qdnwVd6ufq0ohvjsG58XAj06+ZjXfiDeBeGz89WE0z2hUsPzjvDPPggc+Z1Qu1/hnndMum5ZO1XsT2ek2PSKbPrTDm6nwZCJgaVSLW/lLcefi2Vf4korCnmtFyheGLQFZ/eIFkXmltmRVUKanv00x8C3LV2QZwAj2OAJL6S9N6PxIggxMeLRJcIYTnvbj9giSOsHpARvtVkW2PrWHgnhdjUpBkcT07WsOodBo3BUc/SbE3HXdXHFnZo13hAjIYdDZOrFDXMTAFJGD7vDh7+ds2s5vFm3/DxduZUfn5d/RbsVV+Xnz/FvDtWO6wmLbG/W+WtLR0dfUB/qdZ7S0zsN9e/WYxBabFx6Hm0vrBAj5mna3lirUaMnn9zm7w1thu3wVegRm/1WNwUCO/1jSMHlUeGfwpZwzWVQQ1vN0OBqrKmR7cbUlBwrUdfrPjieP5gmyR6s8/mpD7w2nFpyDsDGpLL+KeXgohL6Ta5bmQZ57MoW/IX2HJelnd4mZuRtwY0pcrCTEWUNa/AaWvnwIqkPXedyWNmeG/hiDIbXM+m4SJOewQaDMVGQ6DH6QiPckZSSHN1FY3p6xUXQ0Xj7UAwJOjKJIJB1l/Yagm9PTb2Xg8t0BioiklPteXU9tXaJm4AIhjwawgE/NqyOkXs6VW+k7bTcWDvAcekY0FpY32e7fjpLuNh06xT3ljXV2cT+eoAkXkBU+9wJty7Yg9vu48bjkNoBD14Lf6O5V5afI9As/LO7senDdjA2hrV0UNjlazD64nROBUW3X30aDfmDg8fTTi2Bg9Og223dHZFb/dJwycSEvBqPKyl4NmWzU8LWuG4QHw8wYYHjcKJLQ8etBCBTRPG4Rg2mjijMafBaDI+eTbfQh+mzxcA+vygCAugFc6bhI8exRUeOFCIOZhvbHcUU0Y6TX5l/drwS7G4gITIDioCcLEHg07y0PHHREZT3bextkWgCCB/KfiyYoV3nXM2L/1gQOHt+Iq1LnaXdCCurbB4UIbPPGbn70Q4kyXdsGx4dmnY07Cl1bbs05F86fx92oGgAzsS1XumknFnKzbouUShzCxzEVbLnJk5+Ocy0jfG1Pf2kZa8rmMuCdZOL+MSVnaZNTTYk/lspnzbly9dY28dyG8GPiFoOmHvM4XsZFfvKOjHfVA1UwNtXMg1gjObUSaXj8STiXoGboSLC7UNUGaVITaqq5cMBepHw8ahftDRUWsWmC7ajIpXZ6ePrB2lNkPEUg4/xa8Ibs+1t7RECzpE9DA1jGqiwgHMOEdJkpWGbeJw9JQzxibGDqBs6lGyZKX9iAAfKeGMwERey9QytQyCEdedSJt8j682jlr3Wr0acvTfzbtoY2mLFrumlmW9mH9X27mrtdVMqBtkL/MvWt3N2C7mvZS9OJC9BB4zC7uSLatuh63HF/xytiCxYv4WfNx/SH7K2oUNp1i/ARMYI3arEozQrl4t5eNLgwDzijvmVWPl0ffa2Vmeoe/S7gprdVdfxKYI75A0Hj+ICIDBJH5xeJpPxPZj02+j1lZuEkZsjPDWVYAgXEFieKpPxLYIj7Lxys28dxfdv5Y6nMC6A+HYXJdWE0F8oauFJl6AyeEkjkoRdQ+5dn+tCVmvB4Hu/CSMpuifwZLL7SQstmitCQyGEAFdoXsGlfJMZL44PPfvQF0NmARGF+naLCwbrsDGPXzzxf+Jwmeq064IApCYamztizgeIcuK8W1O9zVkeGkipwLuR8giVm7UjGmZzl8CpBx6RN/b6qZ2HG6mSaCTp0V3iL4g+vyarRVWGuesjua07rZdPsynYPsiJlJNGI8adgilgQxsT02i4v0PTe2JxFEOWXeX2EqFzVePymhJNVLCcAgoBOPKoBooaektnhG7IqRBf/ng0BBobrxcydkLwa44n6C/pBHALNF4euCND+KLan404qwunHO99gNDpmFPww4Bzo6bKcocmQ0/g7MZNoWeTqLqcURnL/Lx7PQ5CICfH7gLMQz3IXSasRQQ2oTDgqkABHbBsPB8PNOXR6sIDMZORkku/OE8HjztlknwYzxlAPI445U8GwAM4+o5rL6u5guVxVcPMoMEBgIQFBsQrZQaWTnBfq6mC1XFVw4y5QIjAZCTtldJDaxcwJlHehDPmc1zVGSBFA4mzLumtcBHwv5NyFNdXY1FXQ3XZXcqSNy/u5xTFozQkXmX1pUvNPxtm/nre+f7I++zQnL1blhL3LzcAIZL84FZTUUhoi6kpF5e8LUmB9qsKm+NDIOU9CntjM6tE17Kd0rhxezAc474My4vO9BhheybE1vLWty0uZ7l2dIYF161jd7sQhEhH2Qi7kGh9BXyeMRU4JD6EC1ktE2ZJKn7Q1I9z61cLc6up/S4UHdSXMPgcdwMqpeikvd/KlNXGuXMEACQji3/7opYxjYhz3ocTZzcBttUpACVLBhQKEHvTQ2S16teqCG1Gfd5N0K/IspiBauP336e92DDXyYFF7BCQC3T9S+p2f462HA+I41o87r6Xx2kTpjXC13xBzw7/kJM1GqfHd+DDgL6AEf6gtacjcGA9G6nC7sf3uE7mdgaWpAyfNm3AqGt/Bt+3fBBta8aPuDbNZ4Y2ppSwDhUkNISmrizw28A7jG4Aea57S2h+akO75T8kJbEcZ8OeN9LXb9vZ8OWlHzvzQWp9aoTHb6mOMi0lPGxlFRNa2BKSmDbosD2lOTW0qSOJaeMe8qmG2cdaeGlKz88JAIJgWd/BJR54wDs/OSlfZBa2h/IvNboBcQ9/6NVmczVMyJiGd4VaxN6UTgbfieJOYPv15RElLL1HBPTXU/P+B5eMBZ9srfRr9gDxEuy3OV53YbEJVFl7KLez///sZStXffHLksPvqP9IjREDEeE/IV1oZyOn+OAUqGHZcsfLG/WC8d/W7UN9pfpr8r6Vu+nJTpd/u8YpdhSGFBzsknk0y+XJnkKK8nf8SBvjmRPgeXP5w+mP5U1yDzPvQVKm1zO1FWo5XV15Sa33gtMKhQjBccjQqFBCg7QsQibQ6lg3NRMNIX1pxJUn6c85iaMalLVEkaAV9ijR309eCc0j8qIUhItbIlQnFQepcng4Moc0zERoVItmnMUmOmJ8xs3zi8GojaXU9wr6MEvdtxeh6KwKukhd85eu5YUzqTTOApUl/ipv3Qc3BAv/Ced59h5a1mCh7BSrqwVTQ1Mr3APO9r16AMN2HTuHqLi85kz3+XrdXty5Q9J726lk++i8tDuobYBN4tJqfcKMvpgnGYRidU9EkBsgyvAYBDkdQXV0AuRg/wJrOy3RU/Eb0REEMpr/ZN/zmPuI/Jr6sXAOUU2KBrYxEbHiYceOGHOJ05cs+f0Z21cb9ST64m+CTcKekQLgMn+HdGEbgEazx9CCHw2wGkMciq5Jp5jE9OckNy0whYQcC1kvcsvztr4HBTNCcXpRXOhGvAjgPrV+5CGQFYfPiBuqr96pb4p4HqMpvaZQquP+s7Ai5pTaS8dUVzzD7imtrVuU88D6h07fFEVrnkCS0AyNrLh+In6SHSiXy115ALATQ7rdG7SYLQdN3WR+Gle7T0bVPnTbm1etBD7GK+1el5fS0B57LhNL+gUHMeZg6PQUX00zBEyA4pENiMb8ajVaPq0ZVMcmwela6TvhUTJUch8OHngo6dcvRy4OUCp9P2CWY0loRuhvO1XbsHJg1hgMNaY6wrF7CTaiQyCjXgRHdA90EKt8LhMTHFWUo/8e4y8Fm7/4nyrp+AfXwH7cMA/csv1lPPOxBQALMSQMNXBQbrOLS/Ot6xN/4eGdkfjpS2n1DUrNmmbzoBAhbvWJlr+1xHkhFK83V1OzJeb2tZoS/K3fql9cGg/YlfrzTgXn0g4EgyBtyAwC7FCHyI+rYKAEYGIUBciVf3vk3/V1ODaP691Q8BIFPStmpFYoXN31UQui3RVh3//958r4Rg6k1Dqm/5Xr6mQIUiXjTph513nYJwI+rWc1PWW9THdm7EXvpCQIBL8tra4+xszvfEpW30KsI+12FNCYSgS2lOfFWSSb3bKpQN3zsY8ubo75pklKJtaz2J2X30SQ9HUWoelBYrqMG7hsS4zT/Xwvjvew8HdWxv9uY44fT3f0exi0m0rxFa3Ajy8qIM3Y3Gy1w/4MHVbUwEJJ9xMWpx4M4s6hsErbHUE0zFazKTSQ0VdSiho2HHZpRsxjqisqOr4KiprI77KyjE2RKPryuBVaJ907OvBqeHwbpna1VJpNSygp6K1E75MTbUCLbF0QJSCxNLczA/X3LptixgYHtbrm2hNhXaQPRAcRHZ2ov2sHWtY+QZOv3HGigWLMSaN2fA0J4e4jq22E+yFlFN66RKzBb1+eLg53Hb7thZ4+/UuYgrBXQalHTEFD5qVz4j5s4C8I3fZwooSu16NlYUaWn3V3A6bi3ibT9seD2KmiOx5/LEoFJs+ZWA2tWkGP/ydfiSQ11j8cMBoi7SvpTt7aJ/FEAiRBgl4Aq98y3R3z2HLVXp6etp8vhc/UDCc5SJ591QdUhgkntl/ZL9Y3hiivmtygbGW8fGNG0kV5YWpsXFDIUhvgIBv/z/HQiCkgwe/PNLEXkpq89j0GC6KUEmIgvxUpU97GTDv1I7I6fPjP97YqpLea+1A8gV97izxpYJuFBb+bWMLR/gYMtznE2HW+xcxBkxMz87NznaoqLvdP0gi2lYVFRNbOzochKg8WCortm0tnJsD9qwUyiINwWGU78WJokBfSnomRX+bfZsrVivETJdBkNGDVQFWUEJdCvKOMDrLhPkzX/ZjnQ8difDHZmk8P8bg3Z+5YmIwbi/cOE46V6q7fxfrjjo8wCWOSXTlqpVHg1+Q7VR/B/VfGn//Jsper1PeJz1PZfg3673qsLJCMtMa8hI5H3gsrt4ardeMwep0DQMMQ0KBDptnp5H6l6JBgyvYe257aLEvLN5ZRRxwkigyCrJOlu0fV14cF/Qk+O+nHc7SdBm5gxuYKU3Jr24I4wvO/a7kXgGBlRhrRZCPO69brs+tQP6CEN8xS3h+AZyzyrvqs+oDgOMK/blQJHzur4+poFkMU2na6CwNPQndn9ufiGZoHppaCc/UanU2wwOyAwLWd4pWnqljVRNHm2aJsnIryTaozNcIyUTG0KO5RwRcbdOAJfWzRHUtMt33uZWcbjeRTmX4RlxTST5ZUoGau+QB3cA1Xl2zdReoltJ9DIASeOqkIPJBj60OKAaJKYacZeyvPPrsjX9QtmRVrUlibhqEM527nO70dkXe8SwMJG+GOhaWr1jhTK4N/Xhgw/okT/875/7auuLxD8g45F+r9m3969wdf/YvywI948X8OPjgpiRm1RpH9S5obHi+Bzat2PG2x+eXp+jm4MeQ8Mp0mkmsOave+Nt0eXRMbUzfPQXjt43qsxoxzRhdGQ6xJh7aJjRc2kzbvB/T61EkkVzoyEjPDx0Qnj0bj376S4/PjrcrDo2rYqyBvFW+LVIyVbBLpl6+fc8hzdOxjwYq1SKwItg4NtqJ5EYGQj9eUP9UtKo5TLG39YSa9HpzdTqiJj2c+XtJ8N6w5lWfRy6oEdXW3wzCAfDqy9ilY7DNlQD3tk4jf84FFjp+X7S0TdBnpc9BGmWwuHhm5poVHtBhWzPFxYMUbEw+lo/NjwG+3MWyc+BYWvq+iFWxzhvCW11o0C2JTnL41t2J0CYn9tkrGlJWcWCvt5UQKzovyzclFsjkMSmZMSzqwfUSomUICYDb9rUMGllIcjn/hq6+5OEEEkNedC9f0hXp0amtLIv98ID18Gaw92U+sTOdK8HQtmrKgaAUQgFvCsaO2wfjPBJIPHLz/8AShqkQhK8u9yAi0OIDuLl2CvqWYLtTbAnepXJb2vGHbTwUMN1u3yF2xR77BXcZIp3LJlF+/0yWfiMJSAiTWE/4JjfQrGpOpOtVIEtT7Lubc7Xkv4OI7AVuEYHBRh7cKl0EXBefI6HhyXCQBKqoAcXbYB7gRpAczIWSZCQOAFET2IruYZVIiZRAQL0TBMmDAmioUxH8Tzr5BxIvTEoAEetz13lEKi/whfoHXHZVDhkGp2sCeXKQuJlTwVXBRiEIN022iUfIqVcmAOv6ZUB0toHyB2z7n+IXiVAr+2CDeIJN8uFwI4iBxLiu7CGDEEw4uvqUiH0pSMpt5ovPbgHLIQXSeickxOoniZMqnMEJagGwYhJErQOtpkSKoFwaGChYk50t5IP+4mrzpODbTmzI9xAqlCxCfT8E9gGxewgAxCwFczc4OV1P4QuLRH+y32+Fi2s6fxWHTgBCfjvvPY8LppwU1RAZw0FQEBnsBKHQnBKL+Pv4NDiIAAXzgkkwK3xTKBXCr2WL83cgYQgW1Aso4hAgICKIAwKJe7n9QRQoOGAW9JLYAIi4SdDEHoUTwgUN7QpJtV1Uko56QSl57AQ5wZOjy18/lwCEJIKgAuNrR0GgoZu95DwFCAU8fG647P8GSkIicRNoKwQi51xuVHLY0DoCADpaC+Fa2XEFaJBkga6Gg+LygkGgLWAnH7ho7D+EWxd0OQIItJLZt83tpTqJf0hsXC17hsgIRx7b0x+aoE7PrGu6oI6KjFLFyMjpxOsy8lAk0Irnc+hmfjz1q/vwMxrIHrEq5RlL4xubco/MFDfZ1yqrqpRrpwgFbWTfWl9RXa5S5OuadNqWIQU11gXEugjj3aSfh5bk/cRrbm5yJ1y1wD/zF6dX35a/n6f/GdxbPIIhX3et8a703Z+/mbYA1NV0tvN135GpXeTXYFob/0av4UvIM0HUdm/sLr/NnruRNzGR3sr3gHZqQwGvvejc6YoFqZs1DQ2azYcE1HizJnVXa21jrVZdYmo3GjpWAWDOJElwSa735/8FROVsQR6k56gmPS7Dn6vy2ErXFx5knW90x57vuEKAE+rru92TPQO9PZzYv8O/QVQi18HXMZ08vLVODWLtybDzrjQQpZwHPq5aVFL4+tzKX1qk2EHsALYJm+ovLaQ0auf6Qillj2lVUmzz5LXjIPalRGplvI3d5TF0XKn+v8hO0sugzjSXiCpn1Bl6qKCY1by9MRuOCPGGUynL/vfJCjd/JT9FBJtuMhzQjv84iiUNbqnr98Cr3TrSBk908KLklFjsoxPB60OdpUVFgwh7/6JTnCWvh4e4HMrQuV9LumDYOn0gK7TsGEgJ/JFbt3lB2acuR5+TIhJ3ssnj9ERLzbZlNflFq2kYlWF+oilLlLOksqxztVMPObW4hI50cKjWEvCf31U9ZIeGzvGwUIixjj1aa4z2V8WQFYJWeX7bOMqD+SyutDCieZuV464w3mjjWwZaFWI4HmF/DCiggYOe1tlxuH66s/Pwz51h1u+/AEuoNh3sr4ol8i0eHA19B0RvGKbvBiRxncCDbkMz/JlZbseEDnZ61aApV7spkvfP7qyLo9WuYhwN2QilOa/5CdaUu5Ekc9PKtS5f2bluMrndpdNVum9nAR/EVb2uHY9jqCP+tNGXueq8q0YmG+iHrNUwF5urkaRjms8RoAaRBSLgnvJ5TQ6JjQ9ZxuyI+MvX9X6eux0vCleJ9u48GtoZEhcbDAfLYoxBzF0DgJidRq4kU6Jdi8BJG6ztT9K3TqSecPIiCZ1xkXiM0e162DHmyZYDOI+Pm71DGH4k8cKcGn4Z7yZgQrSTgN2Q5B3lFeQ2Tga73MMQn58MxEK8Q7GuAeSccHtiU6I97OE5D22GRU+TTnAryyJNguNNtqv2B07bWFOAp7qTe8sceUiZVH3Z75nfI99PfnkbY8V+n31J6swM1Y90fWdwvFkXFkry/ewbXtdxOUmqUxyy8J1xGhwJsmhceYF4j3QPZ8Mz6IYO5zHafAHuySvNOkT8UxAoIOE0+BBk3b7kS0h8JU6Le4TXXv5KThPxa3hlXudr8GB/I7vhvezy+ouhpm3Xh+LUvXj9s+NE2K4CIxyPWy7eI133SOLvDd+vKAYyy7M5JuKT82MByJZQ7P4X6pzwRHuTPTHs4UcfrSVj+RqauO+mX08kvKt2nT3axbowW7MzPMoBR4eeYRmS+GTmdTcjBh+JcxaSvHD82Mdt1vh0bLVnkix7lfGq+f7l2Xg2I8R780cP3IGWk8xjBta6PJfwHHKAKzbEB4jNSYu3lHlksDnpF+/0wH7V1nRcYIosq+ROSGn6DIvW49zDsMRc20TqJ0Q0nOPaANw14u1yy+6zWt4VdkIKx8+vX1CcjxnLXzYjS4+/A4/wyvjVWemJPcrYGfuoj7av0141YeL19DuuyW7JoHzpGy2H54iL+POGHIgF0nIA97ogF7tLE8nfdDZ2Jqk+XRC4OOdXs/x0wSLyD1Kfd0SCm6tGZnNdu75goN3Fn9TkYnc2eCg8iZux54Zig1EHEmPD3egG77cL9KH+i3jfhc7xL4kldnfA78CfwXFxIdjNIKUnQHsd5D7OAhJrK4Ws8dTnHcdGuQbefRjcTv/Ff77AxC1PL04+Weq+PmLKXU7SstexDBG25IgFZ5xCVu9iKTpfE+XGaFm7+r/Au727heP7oWyyFyREXCoiT/CU9HTixRJQOozjfhPHyyiQnxed3RcTIV0QIVP87UDhmMssxd8k/XuN0nmqPPoLpqOxrBJ38q/V8YfdmefTks6k4l1teRas4cgPFNuxVPxaWij5t+rUK0aMm3T6BiZ6Wa3nxhZ+bVivxC/fmyCVghrf+mQ6azL5e5fKZNGZyYDAuH2jixish9Gdnk3kJpd6mcBlyo2ij97HGncHnDp8NbKp4DfVTBcfJSGSKNdZtEOmcLHIGLo74FLob7uNoSKpWVkt08TIcFItb5N1n/AwLtxuC+fNX+I8LheBzs/QfDQZfYaEJK03zVXrgqSZgnHBP2jCqa42VwRVSYwCKRXBb5SXycsY/pzHfwhZkyxG5J7uLgjRHP6vN8xV50rz0SpJeHs+HOEqB/LlBRm8uOssiMhT5UGjjoabsCWHKxftlZr8LVrjLmOFA29n5S2QRsSgz4rC40eTPDK84FFkF60rftuZpMPhzGnHOrKM33bMply+pBfLlLphVl5Jhcf2nq5d9gCz9XvS+/S+NYLKq1WupDeslr/6rwhDwPgZUd87lwXuk6x90Xql25RLgkzv8qrjiXhQwWKsSdkX9+THitDJFH8KWQ5wdNBrC0u+O6GPfbMc9BAGLILlNxymKhRuMnuK3/xBzpuqxSsTpJPblVEK3ynUTxuHP06yMDYyo4gcbsIE8WUpheawbOnvTYt/EX1pt4CWVrR//MWiXHx3N+RR7Lc7vXZRTq+hEm/D//n2c4O3/feFOvd4khmmpb07unXzjd9BUiU68Xb8z4lNbu3uOqoq5KefgrMp8qOvI281fX8dbwNkcr7DQW29u3tHBO4Y33EAccqj52Dij/sdi8B1InczfPY7fl3RhSD7bQMFehS+E8FYCJwMiNjfn8Wx7Soh3YoOl5BIcBohxQzInmoPTgEs2JY/Opl8ilA3twXDCjhqD08y6JgztBmSJDr8VglpF8eWlWje2FG/V3vKwKDTgHBCkHM+RKoX2Rn7PY7E7nJa6ap5gXHKoXbTcpwwD+Itfap9VST8Y5xrCUSSA2FgH+GIhNy3vUwN5zcnnDPfe4GqgeMS60u5lO3CyIYwcI/xxIDOLw1hsTMYWDZ+CJcNw8zEho3evUFjQDGhKDjnAEVFDYHrI2JcNWF95E0KIv4xIF0hC+IH/xDjwyTylDAUVTEjMc07g7DnPeW8JYVEf4I4hXhC310xIySq1RbO4JZUp66XsU+xZesXZpg14xPA0CWXBoer3db2P1/LX/u8f23rhgeXJjN0AdmlJeaoI/If5ksNWQu7u/MSx1hj+UmawMMMlzjhwqFlnXwD488LGs2FPw0MfufQMmBeDj35fyeQCszK99rVpEn9QctZdB8b6eOxqaw9zN/Z38dKmY+E/poQmnw/coExdFN3oeFr1UBYpHOAjxLxJTQ5YZppMnLQaMub1HCHbB0N2p5OYZJE7v6wtPC0QXKVb7S3cadRqIpSGUzCQUV+rGFT76aAZSAYNAGBDiMJb8c9fTrMBJwdTzNgXQvcIQgNrAbD1YuN4s9/GbgVwFvHE5kS5pL6KsQ4ohLF37cXWfFiAYQUGRTWcvclRJpk2MCYGA1BNtocpgkr84+5SpdtJBT0tmHBhZ4N0TEyTPqdA5kMV9ZF2SRZRCvMAELEB01c3dx5bY4fU0v6H4mNAQU/iArYClZcUc2O3tXFNaw4kZN7xV8DMTnuMMy3+7enw8MkMQysqTeBPvoEM5FCQcag2IWZOJCDR7yF+M5z8Hy47ZuZmATXIeXuMbIuNYtW7ovXKws8FlmMljBSFCTo943co90biXELTxjiy6xot63naOdiZvetJoWLQ1kQTyewRXvI35lAkf+31jyR8APQBr54I/P+dhFlYrqrmP6rBI/Nx6y/FQIG3Qh2k1UjiiBoPnREbkzTpwHBnSTqH4RKmULU4T+IwAevPeFfNhgu859cOwgWfcA/yZrt68JPqDilUioVP0Th17aMnTylUA1eCnj+LCnYKJuADm65VRjfFi+8teXg9AxXfR1HfkX3+qNlZmTeUoHMSCNZk0CpnKTVLBIOabr7KBaM/sSthlNopLvDKonIg5ObXP8AhSg17GYQkwqrC+7ACL2DJAKhocPwKN6G1MO8rUHvQRGXLAACHJo5De11de3xnp8bzDtOX4PuiEoK4jFcPRCS/Ay3CeJRwLmYG2bXAYpXlGCr3U52RM6sjD2m2cQvikAaEFpfGL156G72G/2Ca6USDJqJBDTN5PVHK2fdgEl4Y9aKXQe9HfgjNdU+KGMIj4HEa+ZPUGmNKweWRIBcdmf+T/zbajcN/onktwE3G7GtMN3+DgJMP1JMcqJJEzr3OVUTJQQnp4NaLZ4GsaJMKTgomSuCiokkECRtVIvT/oENx6XhF6JsJam4iAPO+30Yh7/AhX6MZWuEBzYBFhw7G/gXlHxIbiFw6oIJLqRkNS5KBA3iFp65uDCrA51sAoClI2+JCWBrjK65fsCGe0ru0asGCrJoB6fekVb9iJkw+wlcEI/ibqqwPxTEJbmfuJ8CcI/GgmR4ruD5dhIczLcKNC8VUAk7bNjaXm0PyQm8/cU9tXvxHnN2WZZ/tzJrYJXKOa0rMKvm5rqlxb6L1/PW/XNlM7FzSFUo2IPbIVR554QUefwuuiyKsHpoXOqyF7pZgr+MiuvFysQArWfxQmdzUL17zCZwXGv5BKsGXK0NRUwisjHxzYXZ6Mz87TeaV2Kqkbo9d8vr6mExhMm4ty5Y8tY9f1UlLuPfws3NU1JvjiXwKF6Fjujh44fn4TJ71FYPeNSMMru7T3x1RSyhfvb5NMUqgnqGUzXgP2DHju/K7gBrqHeooe7I3nX8GOwPDdiyk+7aMUU9HKfGrq5GJxKMpLBgG58Dc1QKCFRuo9ykOKgnPU9QHZQbLWTxbTH1uNdxKlwcvyMrr2BXXt5UgeTn+1Cue12nUDvPz7woNC8vdNH9p5TjVPOQKNu0e8GC3aasZe9WB7eVhwlbhsRZbx+sfeEeY/bSu10Z9TjwjUtaWmGROtcZPfCrt0ijEXsFFO9zztMU2hPt2rDxcE1hUVpamX9hYmKhJnwsXHvurD0xLbWoqIBR8ktTlLdYoxH5KoNS/s5x+aVv4Bg+ClkTvtS5INEe2KE5d+7cDuz/WeOSe3pbiBKw+4Yqt71wLi4o9Fx/PlH9S0GxMy5VGeIXfzLgxatETCLgQYQJ+N7jWhxD+tTajh3H2jCWk/cIQb0iLTbE4lzTWlgyom5iqg6jgi/g0x1DGzk4v7VUFTN/Xy2zFUARf/l9dI0us7836zww16m/J/Nuj1dBkXZnZXq6Wr7PO2lnaWHWxrT0dZl/7dJlxelj1yymLLX5uh+OmGY5P0qMWf7uD4EuM35RVpwuoTHa5sP6lsnZzna+rMtc/vYPvjYnFjgtGzp4zfTHr/m8Ce7mMC8K/qHgnGN8DC7iuJ1phwvaneIp+tBS5xqcVStbQbLpqpFIRxaesVBJUKEJ0YAHswQFxFNr8LsGb29l+FEJQ9fsKPXzfFQTyilhjaxwQft8QH/A/IMd+abyjPr6I+V7dpcfPfQyyk35164VWhcJnJhmgtsNukYeFIi/CarGp7+6jYNBSBTBAIcayHK1+a779Lk+oSqGGNDez46jIXPoU/JdgsOIIGoCuhtyIK5SLgSRikWxqaaBGUABBkB1n8wgL+BuNwQED/ym0ry1wCDVH2TDDqLhp9iHkefHcN+pDP9vQMDkP0iGKUoVxF0hb2tGVgQ2DReRmdWU1Q/DB5zSnsx+0plPMsRfe+QoyYUW2TsSi2dKb96U34zAGXARQTfvyG4y8bHI3Z7SCwoW2Ewr2VCEGAM+TRDC8UK2M4S7bcKOj8OXDO8wAinFEpe0IHrW6UidRQ+KlyNJyDT06ht4mQ46P3FocXWNPzs17dvHBCJBvPmksWhhlzAaKhqZAyFBgsP3HSkkpEgVj9jZA4qzJugAAgwNWlDz462o3MgsdlkDCSFPT4YRX95o9gMRift36ESOBF5XLD06c2lPzNLei6sdRU2drWLHhiY+8rG++AkyLz8FzkotMAYkYGFkkd8i3xA1yu4Erru9MtfVU56A/62nl/e9o/joktp1i6FwIaiYAuJ229zmIqtBhyIPhoMxmJ9Afv8fwNztQV3ZWssupo157OOUPUY3GlqM1/I75DtcOtYfbo9oiei0x7jUWr2wyInFfCKj7lEaiAal+OxhoyFfnSzuSnGTPbVM/eZ9IaIAKIDaaDYA/3dwNz2QaEIogZefoNYs+HdBmqPSxdbmSjvn0K3tN9iGBu86pitRQwsIyo0MKQhKax5MLXj76+eAxJ5fQcbEEduS1GiHLVxcm5BYLQ2XxFO30BEcC13Btn6W18T4K+X+jHjJC6yn458kBioqL/3lWcwOUMGt9r2G4B//AV33cWsAgvZ75PXyZfr8WG8nyjGK+2rQkQlDpTagjemnU/pDEf05Q78W336HhwA/c4M84q/97ar7Rqh+YnANCC2KCitBAOMCi3IVkWUxe8v9Fyg8pcrEXHV4ela4QhnurGYlVOUp3n3dy4i0x4ZtL641od6yKemhWc+ukVZ22WxWW3flqWlg6yHJDzsMI31J4W7ct3K83VTPTuHr9Dk+1Z32WPF0VgNu6Uc0jHyytD4nQhe7mOQOawLb7InJHflpAoWzzq3JTdWcEZITXgcG3vu0a2p8qqSHvpyeXcdfF3/4fhlKr6yYQSSmlRetAkTnPFbSKz4hphDDmL7i1HIdcqaigh764vDcLt7a6blfADakk3hEr8hQkS2trHie+7zSSPypt6Lyv9z/9Fmk2bPTRtcx5XMKHbxVbd5AHLRygPzuTmd4bOYajxA3NYZmhDihD2G4Pa5c528y/o1mmYsNva6DJjouFSt7xvmOSzme3UlkF281OLe0qtcbYjJjj65YnuSuY9SzOwlsXDbea6MXbj+Wjk1jRFFaPBuMRdB9SdxKXx2/ynLQh9H+kyJsAhbhBu7vR6YAFXLEGH4S4fKUBZ/CTcGZXeNpTC8P3UeLcyw0/xXqvELLBYZEWEKPQJUmKDeEpOxdi+Yq3Pa6U797TmVtbMe5hLvufCZ7duRZgguufSOL+vw7qvteX47CdcnelGBJToKiiF+hoNCbFMWaVICv/olJGdRoSorteG1f78dPFRXR0finpb23F4HQaAb7MX8hxgGCi/yk/Moe7x0iUMCAbXtW//g1zQn/cD+1hP/7iThm+AngtSvK7UQCeH9rx2Z+bmMXcCepd1nvkhZWg7ovrIkDcAei3/e+Tk5I1UZ7qUChvVRQYe931NAeV2dVKrpgX1wiJ1JtC6mvrWUdbG2b05Kp1nXfdTW7Hl1Sf0h2qBV+5Ertq0sZwOA3/wnAgjfhkuGFjlohckNudz2ir5u0zPL8bytR//ySjvsO1dsZj46Xi8EQ9XAgYWGBEd01vASqAhP7SiWShZA0MHF7HxskAnUvIrLWQiQUBdjzSv15lWwOgciRTso/LGDCoUQxBIWAstVcvYgNAes03hzOvDWT06Bns5dEE8EifCWEUJ7EBRwOjrpdSrV75S/BFjYAuB0BhOSvlrgLiNeA/OUpSwBiFYAYaByAgDPtD6AR9kNnasGPxaDpD66egKTRLRFhRhgNO4N2SQKaESEgaXR9F2aU4iKP4ZgB/yc+cH4lzBQHhW1ugjTFPwwiXf9KoHgFBmoV4DVULyjo3XXUf7E0hCsEgYYwWlI3hF7jidNJysRs0KCuRLff0cJV1/nfOR88Yc2rIVT7nnih/JqRuuZgLolKWDV3oesCUo8AaXLukTmCF0Aa3OAYToVDV9D33UHOQCCXN2yfLvKPrz+R/HXfpvfIWgZfn0uk6nK26tcuuvg6Hjr4sRqZ6DmKrDtUAwWDiPXwP859aq89CwVBcRB04cbzvlmxSJQ04jiHjA/wFoM0Y8Ij105kWbQDzjRQcHWb6+5CilRH5E1Y12kQZviiC5eR2GlLwD4XjBKMXks8tZgCjb+YeotRWeMEBjshXGDgz5VQ9ZCVuxgEbO5wKFILOmApeU4kIriWBZYQmH0gkiSheUgIhyaBAzk2iRKErFH/PX0KE3bj6oSzu6lkfnCraeJ2uhexU6wEO68Qf/dzBlc+7uh/LLSwYUiTjWprBI0i75OP3vU5x9E3rSYLjWBfJ6SQzT9oxAae60o6UzfInNiWoinbXTJs80VigCgq9IdvbumORcYvqAJXg5nax2mCO2di/vBIFQrIapJiyUtJY2eY56r9Lb+WvhCh3kzpgkyHkjYu34HSa/7g5riSNzw5FF9p9qY3gtqrP/fXAU+Yfm/8w+2/HOUQqwn8gz953pNPAdmsiKTTUrnikjdgTLvNQzM3pifvdMPhXESgp1kc7+VeblXvK3FGnpwwU4GYgs/sZecS/3fI6ZAIwAEy1i+ONkR8L2c/29fwbd1AaLzZWWkfwy0pDMqJjzfsIw1kuCWFRTkt2bBm7lMywXNdTs7sYeuZ+O9s8Kuj5XMjdEjcgV+xRiMmMnnV4dmKOiR+fCAI0F8RKOhPnZ0w0ucLKNLkBFNlyapV93hrJZVk2jzoKTBhOlVFk85TmurynI2guTbX3EB9+G6Edu7qQLLnV5fcP3dZCyhAM/ggfJg+wMoxU/PlOU10cRRtdxaNIDozQL90+/abO3aEl+DHvvtuzH2yujrQrG7cfcovUmSkCIej8OOVVRwHStwqG9IX2DlSTJNpLH0SeoNl2jZTbfXM5aJ/CRWsNeFKyWbHmZi7KB8dDMdHyi6mc4whsxgNv20MV0XgVDOIAGTkQffRYFAXMtWw/0zxijWKiGoEqk/Fh6ENum5TyBrEemtPP06FNM7RYeeRN6B7v+lL1kqx5ff61AvAUEWOGgJ9kdX/+PEKMAwXzeAeT18WuX6tPO8Y7EHIwbVR+WsLN2yIsnlmySJkZW9C0fNosVYrVp90AkNBgQE9f4ehkgIVVE8ukQiPP8nSlhS4x/B89WqKNRkU9xeHZGfombqO6RAMhHAfx3hjzwhu8U2DrWCk1MII4/zQAPZnKFd9wJdWZOduozuffjCHPv6Wq3yZ8QCeZc902CrNrfba1X9OJ07PnhgWIUskAVZEAIrhfW2fW+uAN90EY3ZSlr1YhfDE6dnTjX+u5tWaWyttjkx7Fn7AuKzc9RZ9fM5aa13b5/t4SAEiaBT8MpCSVBjso3SifIM6UlfRqKGj+izaOM2SGpfPyju1jusMjt13jI5RGyG30jaOorgt3fIP5L9veDeHgKMjzRs2BAwpil9z89H2rb+bybxzJ1YK//kS8I5aPHeP4/1ei3DCpbks/dPfo3e+14G959r2Xu/N7v7gCSNJgl5Vzcj/4YCj3TIvWffthweEW6Z2/cpTACRrJ3wKbsSMEIfFTv2RbjlvrQ0q5jm2oY3wKQQ6HhCZ8NCGt8fGzdOF1riNEnzRvtd+M2N4UJzlGTojeBsesMz/PdYegIrlKDj1oPplA6wyyk/91tjxtpKSnZ2M3Xe104xtO7ZzYdaGPOskKhthTujsiTE7JcPWGvIWI+zmIMqdJSU2vG0scLPlrFJN1wPTSlJDeEF4O/5TxVH3aEtLbKxknszYuJv65Hq1tFkgFN8PJpXQ3C9tSU7qVHV9sv5GTk4gWKGWltFi3zaiVDBpJ/GuRWAe34bdeWxhVt6GSWs2yozoTIjpgUnXz7B2cZ4dYU4vbFemZ2o0eM0UEutqVxKCwUKazDRZIpvT+I7SGWZXJTAAyF+VinZvw9nx23KjL+LoIcc23gDaQCwaW1mMa8JfahNWKMGNodZ0v4VQNdQS09dps8BV8Ha+h2Moegz3tgISajJjaMhFUAS1Kr1QklRX0NR0XNuy7KlFbNvy+TnZC1dkYAFj89jhOipTvdAavZJJfE3JqtFS1/UY/MOm6yg51+ikZ2fX4qRmZ9ecUWT8pYyDp/LnOn5jZ9ezT1OaqOveP5KOPQnN91cn0MsB2/INuPs4VA+i7xAKuxS9F42A84YJJtFn0eo+cyruF9dH/7RLQsCOT7uo35Uc8d1IQeQGjhOA2Xle7lPOnrMKCDsyy7/hG/lzhqckVpJ1T697Wvk0XQKfl98xgid56gPSnI1K3E+4Otw8TonYussM3bHCXcOyePz3n4eJZXNfgcGwSXrJRK509WIwLCxGgkIAdLDumDhVsruNtZqO+/D844ApovMrWDb9gvyg6OigzqUJ/HWKOXVnKcvb5l2oErRsGkKuhLDziFzNThWHnQ02fDzWZ2UP/QRrPXZ5hVvsVm7D9JNaYOGwPP5BKr3uz0BU0CIY/+KCQ3pHBf80hkBFGEajMo+cGC3cvJ9TTF//62PR8i8/6DekyP3y7wWF5x26uEH+ID96fhTrw+G9BV91WavSZOhgjV6X3t1tlKWAAxp2LnZecoT8vVpBj6ekiZSgaKbiVj7Bok9hF2AXLomGaPhUl2jPxwunvcfy28xZh343Vx3KWckYkv4t2cv/e4eHywFbmFxK8m3+dUXdL56s7teeB/o9l5GfBCz/9X1Z19KYrrcI2fwGiBM1JOFZdy8NvJ/5HL6+Vl6L9yxYn9Wxs2zQdBtm57GOrPz1CZ4Zcl6+1waUJybpyic59Ci/r09WGu2606PtC++2lRJuLv04hcocm8RZjhA+KEZCdaUiGLAGIIJioLFE4QpZv2L5Xgr1dgBorSdGQTlBIjhppdToBwEEQnBiwUfhNUSRVo6gRGOSJTFkE2NNR4OEOTlo1hcoHYxXl6Mb/i9FJcNBj8kC8up0Q/SobPQpzbqmnOAIuEWEAJUjnWpNewnJNBjCPuG9mAVvQsLj4wne5niPm3Emlh1Rox8SmwLwkehW71pW2AS4V3bzpnGtbm12/1BYHlm6xkfGb5+PrIO9Gxqy47Wf2+xnzvQ6vtPk5rz0N4dmqoAQzlwF1xxjVxCEEikc+1zIoogOLDzHaT7uspdW09Co0Vo64pma29dv8Af5NyabbNZmrpbwWN/Pdp+46uq42KyB/qyk6g4rhlt0sKOy9/wBTJcSay9Zqs6TxZ2j43Y8zlvfOty6PvdC0HpZ3FDuYnPVOTp21fvcDeFpT0W5Pu+8cIO5qvoYJE8JPkONFcOS+Rg7VvEjCpm2TWBKEyQTD0QBqyAYZu5iCa6VACS//JgxJ018L6q5Xqz6sHXnYav8Q8CpSxXMa++v64DpT3NBRkBpizlR3wqaMPJSPenxLUceXzuh9qfHx2EZ/KP8CJs9YqSzqb+5b3YYL7gY4TPGA3o7IN60+g27eF9h4b7iyrCMWo7jTNsRO5spYUS3ozKw7vHiztrzP0v7lBur6tbpE8FDERyMtEFlS1i+3GrTfCohNsmBBLGoVFhujC713prmNNCFSKv0q7mytCKyy4zX4o+p0O7pc+qJLqJIcH8HjH4WfFsnpjDA2EFMZjPjsA7y3jaFYooQQkp52oXKHBNvK7O2TenwVOUl3D5IsQ5ZN2x3lu0tVZuldg+kyHuBgHizL+DLmK3Fx0x9m+/97fH0cvD+A5AwzYy01GsMkCQELTzE+LCZTT4za4DOi1kcPfs3G1WXef2wOqCTWbZzV+CunWWheGuXcJp0un90uC6kfAdvIdWLGE2ZHc5BZr86AaERnYhBiQRKdvh+p0CjQQAK86rrthJlwJJdhDkRSSdVEIGFFziO5OgLZCRQJ6Bb7TEkaAFxaKXCc3xcQRQihY5bZCiGJqlqwEGEv2o15IfT3DhNz9KX+g+ScWg9Jy8i0NTYx/BMIonA3NDk9y7eBChptRNMUkxcvZDQCIUgFiudJoZEBSgYGAFqjeRmEbqA5MMlAlwo8xQHreWqbkkdMrpiW+4Fw01WpTF1ho5mUlPev2eSwtOuZif/Hw9/Ghd/7AT3hOYG70RFuUJ5ybwbGqv24kVx8P+Tsz3fW8rKx8mPdSf8b/KsqfyhpWz16oer/8N82AqWdQdm0/kSZOrrloXOeUXDGUqvGvTgmtUgMVBEmOmFNTVr1gBiQtJ1wYhnztShFV4Zw0V5zgvNih1G/0arddm/7MBMt+hMf+MOBSCvhnoUxnzGdgk9GqPBy4/oRteDAeCzFu9otypaPWYH/AC4PbbZyY7JGXdvXv5YG3GoJGUYI1NqSxdk5NxIIg4hCkBZwDbEAkIZ0+im9MqpWlH4EHDc76xca+hCP0hvGbLG1S69lNGGy22jbuhISNrb3UdAOgOUZz4Kq7/aI42Qu55UrwNkCf9nRFalrLOG6kcly8BxDEKd+Wiofp01pSojUhO+R5NDrM6DHLR1DViOFBBN/zenYnAWsFv907HKpHPR+q2aGFVAknv1NWj11SS22j9a88Cit58FJkNa/eRIXmXAD/UoWK1v6+SxtUSEcusBDBhboY8IDasVhKEhhQt+lSofn475VE68BEz8BcWUKFX7q5PO+Pf2KbqujjYCqM+0T6i8qZaQsqDFVlozKkDvr3CpRVnICp+wxywTNnUorjMn+QU+xFkZ1GFAtsLZ53nXGZ4wrdfV/IG/nsMV1NhL658wVZyoHRv0wSAZjrxg6ydCvBGoQNMM/vtBf/kQHF0Yq1s07+nmJ2qqEohzneuGoJLFO9eR4LrnMJc/pufgX6bp/bwTft/rpQIhBzs9D3nyHSeLzNo8raGoxBFbbsJ9F1NqifgIB7WsXtOmLwtUprPrNFN/c5H0+jfaoZUzgOwgxZugwblBXvtR3YdxgfgIfCDuSMKR/tpytcJa9WyBhq+Kz8of0NB/20PCaYDgFyXq1FR19KLjx6KUh9oXHlYqUlLscCSXaE9JvR4akWBvmTp+XOovmKecUrP5E5lo5/70/r1vRSRIuObDB4kkQKEIkJLN5tUAGBOk7nlwA3bw5f5j99BB0q0X3uzn7xp+rnjFb6wlMQxhjoRlIgX5t4PS2E0Z32hTLeuOAdE87nviyLMU5js3lOeRpCNxR5ob0rrpat5PM2rw12Nrrso2hiPdMRrBnaG/ttVjZJiL7zfdLbBi0F572y60/RQ59f3fvxPyD//Pvd+10xPGvvhbulpfvRlB0XzyhHeXEEGQhtqLSgiIcPYF6ZtIhLr98o/uEU4e7O+H1pyKVyIGce3RQhOseOs9PVGp3rHCwjZ96w1ie1CFcNbHK20IdeQ3pBf7AVjcxdo+Mpi4qBbu+VFNQWzK0crSv15QQF0xOx33uZ8v5hPoT95NRr4oPT80b2jY50TGqT5PgfYKsfoqOaiQDnq3s6mPkJ3hpMbsr8fLbf/W+nommoAijv+PVVFMP+ursHqhZGDntyRDPg+m/scR1AKseHKXSglEmKV5Pal0HefMbHpUSsrCr5eP4amdQyB8gPV3LfBVSSMP5yvx7khQHcglPDyBbgDOla+gKj7Wj3CcYt0VxTq0XG9ZVZrCTHdZVWxNoLk4gbR3Hh5y4pLlJjCPIyGw487eWfmBUfq1+mdFNuIW6MJIcaF8herLL94pNOSqqOMKt7/cfHXeXT/BGvczS8JL2ZYUQ6D4EBRpLG/QjYIwZIdfFRtlRi2KzXDpPi4We/tXu1drgfGHqS6G37n8zYCzV2+zrd2EBIG7rZWF2ZJSd6PZ9y+FW2GgQNGHpJl+6tJ6M2RN2PgJJNa3pANcSKi0hzPhTw6ofE3SnGe8edwzamzEwYTh4AiPN48NTTz3TTbZxMc1XIsvz0en5CR7c9PdeL7as3DSuUi/AHWyMcoj2ds/QJ1kGqzgCxf1uqriDSoXrsjuLByUmlZIfIqt4qjmzNxG9fEmnq+F68NJ0ip9eW7pXG9Osk55Lcw3QO3v7REFmwy7nw/gbgyE3sNvRGvE/xKdcQn+Luyb/gm4IcwZdHgHn2Y2A9/kUf8ZZSY+soKJBOKZxIIIZ6Nf70J/BS0GAKSBIasgAd5O8J3YL2iE1RjQR0wkG3BTlxQZgCRumwRb/Bmavs/qBw1r0hhKnF+ZchK6RHBesIekSj7re9+Oi6kBSgICYImJz9hBQWzUv01rtm1f8//Ytm1jK4fl8omJGdg2HwTaFVsStQOWh+TXRHMMorS/XxppNBaRMBiYVCaTOmGxBxVonVn78ePs3OfPcs4ES5OZ+elTZoY2Qtvfp5X8H5QP4Xy3RxrBjvqLMER/WBMcGl/nvCIu7k9HEBUKbzpYjICl61s7Hiw4q4K7Pt0ltHKQzmx4aNx5TsaBAxmccKet1WAHkmMVHrvpeDhH9+4Q9nH85owTG9MDCfdDaw/XHTP4rl3nqz8elOY5EoGXXfjr+Fs0ASEeDuKrWOvbqhHoL2XzKFgm+bFPdFVVtPdC8Vcn1M8XCRjEHzNPXqr4daEQQOkOCrqxSZPafGVXgsrbXDp9NFW96WlG58zMnn/qK8DhYP5BFuPPDX8xWAfP3xb8WFa4ROeX69Gbb/xM1ULKmmiN14T6/PLzUYSYwdtW+sLh+JtrmDDzwIK8UXi0fHO0y0CoWrfIPcy9ZrOGlcIL7uUm43KppS72Ru84TtH7qQHhEIzojCHjpN63KWY0iSZAkLwxNOAL+s6GaHsgDxeij0r8W3KKFEVCzpHW1VDD9NjCw4pz1cpLUMTLkHSKE2qOtLSriIbAZxRhXeNT3ahbXk7hkKaUFi885z3f+WXTzEHGeE7VSVjhkAzBbeFqb31eKa6pDjQEd+VUhv6vby/wdMdk+2KXynSyf3qPcQqW3g3ceBERyMz2zVhRXcio+9K30mUBFL6UUVnMcHf6pePH9I5ajbOeqx29vj0if8mn3XQQNAj8LSx43yU14d/CUi+nVXB0UxUps9H9/CKloeCXFAAc3pHe5ea4nNBqZljqWnP2ULqcWuKfrTLk+oR6WHjz1g2+8HTuzBFLrR2eQpTRu6UXxJQwUWiCPy+DLxAvN0Ty2WbxMbyqzDWvvaKgds1IrfN3y96XORHA2M4r37XfBCZCBMt4FcfSxupZ5jJgkEvgEFCXx0bOyAir0rmoUIMAderKVqwos7onFmkQEIBnjoxwNtRz7EZjY3dbamrasXI+8KmD6iWb7iX3uFArqRqXfnx5GSgyYb6HNFk7W35LejJTXm1kDlztqNM+Vm8KrT0Hn8iJbtLv3NfTs7zY+5WZMl1C3ECNTwiXVV6oJhuxXVa+xAIEWPBPalMAEAQS2+tecefOwTqEE/Rx7V9PWkLyZ7Zd8tTKEx5katVqrwQJaLGmqLvUHf3v/va4zdOWRYcNJirVNZ36+PAitkEu1TEswjC/1P0wVZff4nPSpMa2nMSsDHNO9EAEz1EjparOkdzeMnkihdhrLvjzgFuDdOhx3wLtCGWzUhtE2rPMpunT3OLunV0ijxSdpsiruZCtl0u0DLMw1C/5QM4herKX7+LzksSG5mx7Zpop29IfHke9mqLcf4oHbrwARYDX9aCPVxBJxZPUB4LjK3+fuOyDM+F8Lht7RLkSReK/9fLeJqKLZlSKSw+5F4g8sEAbrnnzxmZPTU1PB7uU6G7dKiqaGroSF3B6emqq3fb17JqIsQjt6ze9vW9e2yKyoRPf1auAqe/qVS4OGZOxmBYu2IBTCFwDjbodcTMdCAdBQm3Dw2ONoQ5MRIQWDQOdQmiGuk/FF6JjEAzdYHuRnY5xR44ucDcVFZv/AAq3991UXIQAiYUYNE8EI8CckbQo7LZKxzDPWZipGbClwe2daQr5YEFr3yf/+XGUPBuWCH2YoQ8L/OYvse0QG+DmTx/pz6NG6WnERCcIJk6kRx524f3HocpLgssk/3dmqaQBzhgzgHFZo/aX2zFKpaILBCBQ12s7Vu6vXuOCAeqwjACVVOx/zo8eUiKnsv/X9xI2gwE8BmuX+wcucsH+fOiOs79UBXQ+FG8ktD46t/LcZWLrBkk2IHMsWvOsTSRudLJ7Q5UpfpV7SoqKdh3IKnTSQTrD03JlPQaguGp3qq8Y6lXo1KiysTsXanZDsyDxqpXlFSPaeGiG0zeK9kbTdpmpUoeVSWp8XBN6XXhzsqTHKeJSoB0nSAhQqEqq5QqYGV5RFf/CNkFWvDbwsh90RJIS0Q7SASZz58IYIzgessycsIgjQTxQLrJhSnHajDWidkbUVtMa0aINexMbmRM2DNNGtLTWtIlmaq0RaTMVMUxJqPvzBowdCCVj9jWjRxpjS6Z0nBhBqcXMOv6ZcMOD8U02+CchYj1c5qMU10Q60xQUpyPj+wVXgDQO+z/u83P82wc9yI+kH2QpUXOm8zUKUUsOLYCSo4b/H+N7GMjGYMBxABhQ1GW1REjY9r5aAEIh3HJZD+TtX4S8iZo3P0M2Qd08FO1Oie9a8eQnHOqO88fsENpZZLIeZJ1xZdi4wuqI7hYUPD9DV8AOSlu9uz5nmx1VOllAD6DhoBUGMQDGNTqB4smE0ukUOd6pUDBAEwEIObZREvEDlCu0ICT6bQvcZG+cnG46ML/xYEnj/g7vv2Ykj77vZLh4Th/MNWdFJAts3z1WszKW98TxZZ5qqjHGf2FE4hblglrL5FnL1MK6zcpEbZ9nTWximWhZbHnawZjwHUZNKhB1N41aXUyjU1/WQWZi2dVpzujbCJLjv6ERQsr+N/cRsO96SAwQi52FOq9DwiXfWVkybXmXqb3g7hGZSBAKGldUcPYP3zEgibRn+ksWG1sWXDUFS+HIxIepLNdvyLSSb6LCVEJK0AcE1a3xQbvMzhlcpqbO7Y/upN+8Uwz325eSfmECre2gtpJaBOk4fdf95rVrglhg9orf86PL/Hdpd9skZwxXAxC73vi3CYBaCmlre1RlgIA05SHualIi2OaZueb49BHOosFyvAmh+KG6OqNseGFtXqiyZObUBlTmgX1pxWmF3llk0uHLf/0Vqhz4YdNePDkZXbLVmfNj7ZUjLC8dRg3Sureerm0uaYTGeV+5eKJ88eTfKBMciCz48W33cOkJW/9S8xngyQwIx3JFH3xTlUPsTCULWs5MftZm4WdJxTi//ylxfG1Ub8BitLT6Wrpue3PzhC7NtibsImiRbybfjrZAcnLYVRoqVO9Uh04XaH1qbLHui9layHJ6oSBekGk5GviB2fSsUT5CsaCLwI3RadGBen5iYjxGTa0KHnjstQpu+dGjceH6BuUBwXKZkrrl34teY05hSH2YunLhp/rwGLc4ggkOj3ajP7z5vb/uJiOdqwY52QLiaLWWdLzyhw4JI8VrO2c/xe67QNn5D9BezvMpOop7fHmvs7Ir9YrvDAjt9GEtwVow62fx+ZkT1ifgt1Cfwqu4KyyuEbDyaw5r/nw5hxHXM8S6J+T1tyaFGjeiRUPymNCp3fZx6q7y1p8+ItD4ESxqkse4hkDO30WFn/o/FRZxkdymxqasyoidNMab5I8JFp0lkiZ5Y/xFgrEWTwZRRFT4JoFYi3OopDGfEtaQ3GbK6N3enDVJ4B9BEiKD6PbOH6sdzD3Ho9Xiw79H7yVfJA0UoPVc6skSZkrL6N2kPwBVVopr6TMh11+pyua1JU46Kb1oj2vu+k0sYvCJ+kkleKe8Q7FT0AWJ4GylSkzYxCfqOHqOjnjrk514nGhrSqWlq2aTjXiMZB+0u9oktpBpy3iBcJCXE8Cz14i7mJ8ICnZvVlSLenz3tLO24LE1MFiesMvd1bX8+nJiiFHqq4sVh9VISm9UHdzs6LGBoRndd5tuQXKzEZ1ozCbXkfb7h0q3d17b/Dz3zLHwI4XrnjTfGk07X5ZrcR1e6Nlz+0CVrj8uYMG3n9F2Edc/KV8wsOp7wufipASg5s3goGSdRM1JUbzji4/zULvyaDd8nvo887n5kkI7qBtwmVju79YUIjVJCsG8zTXO1Kfen7wEqvuPC1y3+HgcKIAYJYGhTW4UBcKfGL+x9hW/7OPJEYioG+ALvvWET1Kit0i3OUOwiNlW/8DgQCehjRV3Uq6MhOgq7h/cO40RvwQlh8oCrCNlt6WdTX5yIpn5Qx0CCECO/XBynW1t5FWjYdwAC2JHP9ta1mR0TG+hV1B0j8lDkdJswVYgprBnPa6xxtQ1qZq8cKhg7P3J9db1UVdMcRgCd4B5spfZsmhx1VJSAjkhzVz/jzo09LEuuKh1U1nWkW2tRRs2NezwGh6iFhIAuBYIq/1s+hwddy7uwB8/TXPYqIygiYnR4GSRpn0JuVquSbZ1yZr75R6wVQfGTsOPwcvgUzDsEfga+JJpvB/i7ToMn4KjHLApxFrEFGwhS8FhF2/3e59tobHoc/BjCES5nWQpBK7MgDiHjg39bHsFxOmpJKcEA8D0nJIq8Ha3RYdnv+HdumtukZsdXzFnROpSy2UV77At03MnON8EHlVXOWfSqwjETcEF0ASSFBQsuRJnB2QHOilViBNZCR1fYb9VUPBMIUc9ZtTPdkgwtgL8f44ErN+4ab2IAEFo1eOlHXNJnY9RMuWzstKzcaOIKV5KLeBteIhRFzENTEdU/4HgyqEltefUbL41kV0xJFkGlgZLc7BJneq+ww6fIsUU/QJrh5YAFRMszS51L9NgvceO9cKqj8ONPookWHs7LAnMbYQfn4WBk0K2FvT2FmwNSQLHpA+fzK6HXGpsvASph42zTnxsq2EXSmYXXsBUMdGlvPyy+fgeVeQk+bLp+O4Gax2nLix7RR4YgSVvXJBsIvVDERABuH/QuzY3LDIZjEBAzqQuUHindBJNzUoYxMouahY2RuZurgcj4NAn09tPdySZCH1OcIgc1DfAb8iLrHKCY60fEhcQTb/HISC5BFjz7xn6na2tO/XHCLW/fucxbC/k6YdTAhst1RuKjC/srlhvuRKelKfx5ll9+yKL6TpB9fPIcgTa9Nu6NxH3x19qEeTZ+WtxdJU9JAC/c/Bt+rp0b5V7nCS0warSMj9avNRkkdewF9cwjf4+aUxXxODzUSQ9YXWV8VFSs0sc1aO2nYqzxZTp2YTdM0/MyF6PPckYYPk0z2ewsxPeQgZD84eAsx4Tj243MErq1VGXnsiv2Y0G2vPnCnQL41dGlZVFrdxKqLaVUVuxH8bjF+oKzp/XAgcnImjJhmq2YEBoORqEOWxABDiGDjCREBc5AAPALuA59Fd0C9A4RG6ZbKEI6uaFooHSoays/v7My9odzFLpq49bacq0NGXoJUbxVF+5fYXVusIu7LCQctqXXTAu8WPFuJySIbW6jzWO9mCQUf1128T08CGedvgCmqpcVa43ngJJBYhfVYMkgoU2UBr3rUSvl4jYizSIASGyRWY+/2u0BPrs9HVB3yZ2fL497ZLXl5au+bqJBY6+UagwWCy7QTEKDfeg3zmc77MBAh3mlblkfOo7NOHVqS9KqEKX3YvTih79/dNgyQB+bnacAKtNYVSkH1Ga1NHOp92+FYFRuv3FfzeSzWy3qMMR7od+jqYWYcLTK+gBRfwU8wuTBfSjrl4ZZ41dvQq8zkjXVFJNvILfSdpkXlFWhx0BFR1iMq6Gq9dnucTV2k4ixJH/Lq0SWKzmpfYVV7jMiIVZQaZoncpf7/WuNY+Q1/puzaLyj9YFmYRZ4hapqq4W5D2LyVaZpkek/pLcpb9SMiGnOuQvNzzIvAX+klghdsEzmqrw+l8vs8tTT276D250ZC0q7K4+BU+PINS9sDDr+NOfhU7KUnTEKN7V4l2v3eXvdogG8CDjjCjTmXjmWQqGQSQCmf8R5hlyPX52/1lpnID4L7FlR9cvdf/W+U+qaCqqreO29gvZlDQlL677WDe952gPvAdrdU923ztae1QTeKxOA7KjPZZO7THeGaqSuoGqQkEldf1ro+10atSc9aMpVZR0MiViGyhKynqU1UhQUQYVfr4PQZlgjhmwWXVKyMbiopXFxSuLfi9q0c7HlCR+LiEV46YI+ggmF8mJb/8NJrp+uH/mK6M9D0Ne1w4GqmtFB3LgZwhfn3oBUskXO95ekG/H2ak+TjLYg+r9Y01ohN0eMTc8d6MzX3O5f4u9Af92kSZfYCDjEgS2UROBozT0Ez7CIu+k9TqxOqnZtI6QXURgux26PxPhv1AK79f7raKVDceoA3Tt6CNSyxUBZTs3xS8fg+wUGe5Jw3QfT4mwbY8FoOxyxQgf7ASQwCQSQafw5JjLJff+S9x9t6iYjOd6lHgEU9nQYCadxxpryzEn9SjeuYM+oa/IYGZ8yhamfWhyaDvj3aJz/Kxc6b3tzjcOEAvedutN3+pr9QPkgMpWNv6fNuIGfS2W8PflGr/Vu99eoDcN5LtvZ+hrxUvlX9dP+v1YbE3ZXPEMW6Afzi0De+yVrf/U4oxVQ+dCH0zqA3DukBAQjNZuT3eVuBbN2m+m/26izdA1zaPKfpS+8I/0e82aV4Pmc7YZRsU4w7YSKifcLvn3NXZZJ0ARLYYPJe0kEU74MBjZQj4YEZvTJwIDhA9GWnX0eeUH/vrL/NWDzY6zTXOXNY36ZkKXqdjWa8yihD5fnFKtJAJ0ENOP9q8nv/agh/RPKozEuSLTHix+T4FUz8tDVGzr9hJdxIJ7b9C1pbp2Clu2eM3d9NBtP8VZOSBgyDrKz4jVjFbX9uyfboFLE7JfBS20hTOYmr799xakHLm3+soo5ODJ3t1bFv0UfbruRP2t0YqPIVXB4DmEUwfti/88cBjAIIz/FsNnS9zBW/ZdUUiMv01r0z6XOZJAsv8+gSIQEuXr35h2KOFV6dRdKq/LmPgTNXTY952uU4w9Xnw4SgRfl3lntoZZH5o5Mxz8ZrLXciKlkgeGlA0ZhLBl+6mt7XRbvxt4garCe2Or282RnOtHUBBxOQe7/Z1hDkx0E4+IhN/7AWMr6kMCokYSRF1cjQbiKIVCJBNmXHcY1Nlu0dNp+7RG4mQiooyInoU0jcKh11CKAZjsHdstC+t8YtpGqmkeW4bytTIqcqTrca5QF/cvOc5BHgbCr1neXOswlG4l+1528X8qYN470nKWwDzrErjYlONtpvzBV92O77hLTjPtPuKdsNIQt6NameC9ZNbkNA+UkaQr621NVbaUtqY0UZK7VqrQPAg1X8yKa6SJ7gHJVcVJqY0laSFt3r8cG/jbCXEcgWM61kQYLJ1KS6ulYfPaBm2LOCUmIcvsi4rJFEtDzdpQucEYRNxGBVGXotNaG1O5FzC/P4lUIfR3tDxPecXQ8gqqOxyY6LjI+8wLUuVw3DPD8Nyfua6nWtwz9oVNKQKLWduziJWexPyK4T3juX4YTGaGHUhmvX6xcXulMJmp0djwdlYqaFOEFU5Lcz/wowPDdfZqmDmU7v7gyOi+sLCD+8KBL48DDOoC8lndBFZAgF5dBD4Lre2OVQskIX7tATRZ51Jp28q+uy4ch8dPtk+R0pd3h8ibXopfeWh8h6qxGtvy0IAt4YVZKvLmq1j344fPghRuVzeryHxlWIH/5uWhGtubBZVWCXGZV4rwlofRa9mRygXFoH+I/4w9m7TltyAYMm1VNj0aAyuGgxU8lt9IuFksrvHJnPClhcVBYM1OmAh69qo0JCyIF2MhnMW6xqDB+lbiRThF2dMp6uxRUuDfEha7+cWgHSfATC+pkaDo5hi29oXOBZpQh0DHoglvCKTgKRkBWRVjij77+8MvRM92ojx2wvkPDO0eSfpIFhARIHgkJd2jYf9E4icU8naiJ/HLw9/3m2Oiq5AE2bFgEv4BEZFJq4PGuele8KNbtcAdZ4qm1jZsUOnRs1d2xzy1BGfjZcPTmN1XZlnvyWjFUsX6+pDJDmgoBFnmgBfD7EL0fGEWsajWO2PEDy1kY4phzauWISGh/BizwyUa03MxEn4RQRGjmJiCuECsDT/laMzwZCIXpFIMziSVhF9u/2vmcmmYe2rBib780KmxlIMNA+PwO955i6MMrdKh2dZVqcV53nfg4w0DB8dSQqfy+04UuKeWhl2e+av9ckl4Jgn83lQL3scbT3HI3mAYnuf5/ZfJfjG+fzRziC/fe/LwsPsfe63pPdC/qsCzrRQNljnT/K7q21tLtpGtPDP3xUjv+ZdobODqbFSvStujMRufsoOqFZjlmiYgYluEj0v8En4kn4iJCM+elvR9gBvRsX7COicijERLRg31xQTe85vWp0DkXGkD1zi1AROGSVH53c192Ary6Z6Q30KpcZW0xIw9XoXbBaSu3LVSAIbaAHzSt3YEKSmA+CwJP6ngWOioGzxZ4KZhviuXGaJc6+G2ME009c/r8PTgN9Uudz5O/d8tlasnb82DkayeLh1NFKzsAp147hxhjg8Jj7dG6tPLCJFKjDKbCpLrxtkvKkp0jSZ8OfXoakx0ulVgZqYmR1Qs83gd95cIL+KOlhNlr5XNQOCWucWhxr9gC9JafOMrZvSh+rGJKv9cvndSdVKhNQkDrkL+Jnq0ljVm8nTVtwW+KL0lbDQZ3FtVWKFhJ99sW+6Yqv/oin8C4mSyAZO+5Ham7R8ydL0ioEh9GRRBdylbnaKcMHWzwVCbovRxVa0BxzihB8aSqletFcuDg/+pwFgRuJzRO5YmAmJT1NLeqzYi5vjP5j7GS9WuyOFfWo/j4kDt30Ahl2iholGIJYlCoaEFv2Cj8uX+Tr442XFoL/zfGWPJTcu9aTY5fDC4Pa2/wVClPrgGHVbQoKuw+c88imJ8H3dYj5fnziF5qHti+Bx1Zob6bPUYAoT7DSKv3rIKWT7HUWdmAjnzb1KNAgF8ioyNBI5ijwIROPIUXMA3pr5uLyV6at0GqYPBeupFg6x4oLh/p9ReOjWpgfhx/v7038TWzwLnoEAEITWFRAhEBLlQP09NSrecXEuF+GmUfMA3lzUVflxWf4vriGFqLY46pQXBPaFMd/AWoYsOhi1rlcaqBcvr/N5gKv2Py83GUuNvfnOp2QxkxVsVVTbGA8p0I5wW5/zApqyyGkWL7Sk5eOaAxcCnT/XM2J5wYVpd80reuEFCVSgcliRSvTP6BRbMN+EUXdmh2xDoefnD9LD+uAPJNvoMEyfFQ6EaomlTo/YRAieNWOtarn/+/S8aBfVpLuehvCISDGKm5qXtEm6ZRhP661UaK09YO3yVW7zsziGhSKn254yMjQf4K9Ui4fmjjguO88eHLwyfj/W44OFB3riWBFxNH17+M7ds1uNhNedaPmvf7asiJvcQDnkJeMTNXELiDnFFzNtXiRtHmJ6dkB2cmagM03NkIyDZJOggp1fKK9NcGKSU05mk5F6pMGH9WUGCz9IQbSZ/LqbtX0KFUY6voJJJaVfTAL+8yv+A/mn6aQyUHlv8M4b6ldVKAiIO4DDfTTMJgsCcpk23xGkaTQ3c9h39egV3R9JXYLdyz+S8gkPCuZ3XT4+qH1ZDjo/9hXJjoM5TPrRt+XKngpKSxLGUbcDTp0AnfT6TaKQXzhcXzxcyR7hAOwqm/MdlRU5ifFRG5HZAcLc0JD6+7stg5mV4QkI4/svMfr6dlyTK/VpXktrT0yXpyStDQYED2fIrbjeUr1ld9tdhmLGiwKItScQpuwO/Pku5Lkfs2/w9qHT1qodr1gCiLzh/hSI9Spkalcgw4AYolQHsuLm5cabGzVW/Fxq/V2fRAUoFdOt2v/NJOcJDVrU8PCnWeGFFYnPzruamqaZGwNY5o0D78CfV6FA9ll4JiYurE8udXBcXCwQ6PvNm4FtiDQOO34R+mTba+YDVSDNnoNrbEgR4DR6qGKJQ3KciJt1Jzu/CS+2ry+zh75zJrDwnsih/M4YiIXgbXpCwoC0DZY4os68utUe8RDfx+eyfFsDnfsAqHIAA8ckA07MmcsU9mCcv3H2kkOPEdsR3CAQgTH8mbewSLKbP9Hnac3bhjeLiG98Drhckvi64nruEOMpSG7jaYL5bupKlITe+6rIgXzpVYsubQbRNdSZCObpFijcS6vbTQAMZmEqnl87pXa8aNWQlK33u9VwFKz93O9Ohxc8JOsd0H3OfY03KT8iMpjKKBclo0hApi1GIttc+iP/rlZnAojWOUTcVKvG1PQOu5aL9c36tdrU952lVFpXE22xp5rZO4dP7h3+UsRTNt3dZF10fm9MpP8bS/uwPRMAjUUAW1NnRU387lCdy1tK9BIlMqcZD9CQAyPxB0+13gTmMzPwVy64vX1Gw5vioM0dEdM7NHVp0ZcWS3JhK9uu042sKlq+4vmJZwZiJW8keD2wW8KnrLB0ttQCmFcUF4Oa6gX5MOqZ/YMF2nBXFJsAyWlqa+sk4Tj9JLvCWcvn5l+s099AaELTJn+evjEpTRfltQc9TtVxtoi4Tsxks5LcJ/RNtPpf1vENnN2D+n/t1/u5A5KesUJxZsPVvzk3wjfwrhqcC3kH/tqcmz4l4gWclAGNN9vLUFY8CaWCzaVny8pFsY/W2kvGY7PWxXZc1MDBF/v2q5nC2vnh13c5dbY1Clgv/6WHp0ftkqiudOdpw+9AbxYP2aHWIoKy/c5Wgzz/X9OxUS1uSklr0yqaShvZjxutTGcPb5HtQf9dulxUuSyQlBqz02r9Re7bJh5W6DXy0Tun5+Wgp2iKBwM0VELVfW0JaY3AvfIFPRnxYA7wfv8NNwSpIEnS9JcdxrOzSJbVKsw+aCSsqOjBVXYQLNV28eE8VYwsPTHcHyNKpe3hiGYnLeEKo0rAEHqPHciqOOZujeWhTAQj6RDPNueR1tWLQmo98OTQj021EQVxjPvt13/nsL0f3138z6NPQSfolzuSgNu50bc198s65ttzWLZ0bXjE/9UweOgtfOGZ48WPTcBTdyjN8PI7GyJWJJEqSJDggZz+3IKJHJRQhJehvfl1ACxkNdB3zxhD+wYMDHt/+/ayVJlLW7llK0FZ2/z5/3Dq6kBh0xJiX6/f47cdpqy1sC/h9FwEd/dk91v+CAyHYvtK6JLmA9unk19PL7y8Q8mdmrBL7x28RXdjjcx2Z6hxKVdSc2mh99AUDlajdOV8OSgvNnxigNthfEeXHPS97tvS+MxX7ah8Eg0PD9ejF1HKPQqEph7S4hyEK8vE8kaYmj40lpwqSDlxICt9/mRNU4GMw+ORX+RRUpFnl43UWBCnnUhtNTSk8XbwmsDU5uS1QnTqmdKwkSuIDR4JYAQbZMsTvFWwzXi34kueoAA3jNv0lIaBknci4NNLEKX3aHk5n1Eqyv8mfvHJPa6c46PfNBMnfFDw89zm31jkP5BICdMU3yqp/xnf6EYp++WF+UMUiHsDLj8sBI1Bx+P2cGBxwE+hKR/p7xZdlMYKFMASdvWkLSuBWh2SSNnC/u7zjXCj4XWgqDu5KTEwka7CZBLX3i4Utc8AlQ/Jd9I3yQc5LgYJhNYh99n5H7CTQYzxUeypxmMOrAmj3amLcgUQWiIb091R9/fQZhE4IhmjTZrSAWYtigVdwvnsUDFWC8jyARVC2E8DR/UmFifQl+PDnHX2cg9P+Sf+R/WP6v1R8G4+ERBnRSBKvDSf4WE6IzG4hrq1lJPbnopwsuQ3EXXpfOkmi25okZNwhR3GMzkW74akD0mSHNrVNbVMB1OKhVhsJwHxxcehkPIzz5awgvaUDp6RtMzjZ+zuMLi521A+WjucaRdUX1y+rvorRdQq7eq4jZq+jXv1emkG3EY84oRMWpzinLSvbFIADcdxKNN/KMHbT+bhQ3/k4cfT5uLAEgvShNwXe3SKEsr053uxQp9c8JbGYl0zUu7nFOYRnIplXPBDOe1Yz12rOJSBGHN7xmtUBqTtr8nUtofHZ/h1ayb7QvNYM45QmBM9jo12jXH9/HaPZhH0LvxrXxRV6e6HApazuJWKiOsAwVbDQqmhq+3cRMzzYEhoeEl40EeSdmRgR7Bvv8dI1NTIsPIzlLUExnzPxrttFVRuUUYL1atPa5Ei2kgF1ZmPcotxefvtg2K5f3eQRmmj3WQWxkEyTTlZUuCieh3GQ0c7JfP1zIefmppugKXLShwtrccvN0ZQvUInoZw6c3/zTcAYcsjg5hjZ4h+Lyj99W/uPKf0QzOs4Yh242cB498fzveGV89et/R72x/tc3J9wIzzvtABDjBGjen1zCWMcZvAb/lUmGLYKD8P4+1Hd4G16XUh0sYB4LO86sZO0Km2IJQpKrgWm57A4XpqNh2VKllXgtfhsileHYbaheb94vUnSUwm8D3Sw3/mzaRaMhlf0+m5e44gq+JMtqnV+Oc7MPhSn2B1KXaLtD0TFO4VKIApMZMMNibdXDG7e4kIAn/+OnigpdNeU+KR13nypcHPWU+7h00t1lEk+HDItr6pAvkj1/PM4uawIr+XWQ5LJl43C1LRZmNgMmQQoRd0rHoNyx+VdStj9McSibO/bKuVaW/KUA57pks0+/CkGjrd25xSg30zf4KRSAYcGhQzrdvNVbP2RnT7Gmbt0ac5/s94U1wGCaCI1eL75Y1OnHPZ2cNJEanW7Io9ehFZiV5REfDqH0ENSj2J86HAg2/n4gMZqbvXrOQ1RwUiUJmVIvvRX0w7sbxRQzVvU5SBbMlddxrrldN7iGJdrDCnbKNB7RZr6Imc8tyry7a5driClivayNnyuMimZglDHCFXG5KbEQ1xCsq92XqjqSMEn6a0TU1zjyOm6wLOjzvXB65uIb734IuiWtT0HCYuAqyHm5pdnLrK3MxrMRId6Op/JEdAg9Bor0qIrqax+JrnGD7Y1Bpc5auoqGsYpdHxFiQp18htFQzU35TJGZ7xGjlu0saKqO0xIS7Hh7tIqmu/ozVfW5bBfSVWgkvzY7y13aGIht3pxtaw3kJir3luk75S/k0zBUjB0DNiy1WkOQXhWxtVut2p890bqNW2Adf+6vnyhbapPnwwdTGOHzM2q3UEqTJH6RPD1qytDqZ5T+J4mNbPtNcYB1TvHbmkEci+X5GwBHR1gdNTYoBWp/v7JGzDcd6pMY9kwtjVmzj2DNz8Lc0wyhppCBnOx+eGbM4cnJ3lwrHx9hnjFNB3Sa7odbGfopSuLmwpJksH0Av4OieZ2ZJa9lCO0G0RsnrdWn3tygfWHbacPZwxTzFp8d4/LegL4n4rUe8636txxxSICvtfcGNXwSMXUHMY6Ihk8h7kzBJ+HqkHoXEZNxTj58xFqExVHYObbsiwmjRZvKfmXEwcbg0aRfUn34sDXweHRKu1d61jcLvFLQ8fA1Oc+W6XlYv69Jo0EwLAAcs0bFFaFhuJGlRDDqDzsc3LcMwwQTYGLrF4GeghbVd9QBLkpZ3OE42VcbfxQPYopkmrxkpyqAHURvGdvvkVl/swTguVm/ttmPaJYEBE57jMbkasXLxVy+U+yqmUbJldPckIV40cgCfRlUYJm+YGQRDllC/uyzndBvlYpbjbXF43LHz8LVr1skqx/uNCJXXMvqVCCrLDtypKwiHTGOyGgVAFCYugBpxF7o9ZC18i02VTfufK/nCrL7ePG3yu4Pw/ILjWzO/RgO0ItWBhtZX+EdAO51rFeBpFQ2hYSY7HhVOXRZ5bippwp6jLz6vdKbhuV+ZVkzS+XDTdtdiCWUZRkajF7+8XGqet8vC75XocO9hT4qqUfZCOuBOX2E3uFo1fcLvtT7xqn8471g5nyd8sP6yOTbaPNg3kG4P17F/YqD8QyvfW3lztoBxv6RWZ9AsONNQhPejj8sn1Qpsy8QQlj4QVAoTIhArbs+G+tTwB6jTK+hFLL7yc1eX/frO3duquQputYEVKSynh5/Tvl0OA2uqarUIOZkI76/HIuNSIu6TzJ0xvXv4zmx4kynpM8ajsRr8S8gmKzhpj+Tx/lX4gAUdVraZ9//J4mfhym0n/x+Ovr4fY6n+UUp09PhSBeH/ep94VRlVDrYNGrk+KrS03szMnoy0JGePqzAGi0DobpifLxC36zTNa/QtRTRmxMWHBqK3D09C6ubpYlJ0ma1StxoS2yQJWjJTbNf/6BdvW9uPVdviUwsTUlatSoxxdIT9WivvzZdpKE87o2yJK9KTFqVUhqZaOHpl921BX+IAr2IAu6Gc4uXcqk33umwb0YqR46XOcE87/zYWZFp+onDUGKS+dXVFpfPeaXj/6V+ZNB34Hwel70vx/03XzVJwwnKblumEOef3uQFloKXfDk9dNqTWMHM2XQG8HBXJyUhCCbvkeSBlqJvInPXdiSIGV15MfsydHQugdHwrzVfDSk4m+wbJ5KMa2wXC6qdZJTosjJLXOlcNkV5UAtIEnj/2Qp/tBfyAyVarYTgYoB0Kh/9y1ZKNj0D+QSrVkOw8JcHb2UrJVb8XZssT1HlGasOSXLNFqGcQiaL90uYH/jT+qf8z4Q/4/cPDV2aSjrW3tZ2aVL9xx/Hju+q7e1vVkVMAE51oDgRsRrPvWeCUMQvE8BsAIGkCLi7i9TAVvhGsG6dmOMiDXP/q3vrxijHkRT/IISVTRDu4nV21gCieqf9aviQDA5lrooblTTjcWhYKPwhpOrk4g82m6JVYMvql2nsGPWylNNly96I7vMFJaoMUgD87ZawxD8W5k0Mo1Yqw+1GyAk3i4B/hQofxxUcdeZ4aLxqZCnLUijoMLIatVeMGl8SjZcHx/loAW4cDgE5FzvWno2uiBvz67BmdJFiQIfXBVe7VAdLO9MAxCSk38bXK7mbWNLrjeV/vap0eQjMxC989Yc5+vi38QjngVBWDFLDEKizDB1wRsR/ezza/Mcr/EIg5WGly6u/rmcbfNZhOJEQSebZHDlB/jF0AhvHkU9MPvQAmvz26UKW5o9XJOlnwWB6Z0pJTYVSrb+cGh+KETMXQnxBw05h+ND1VQaNIVATaA5XjokVCDFF9i0OHMVbDuO2Puq904O8Yd7g6d+k1FUmbTlpahCI+4Lm51crZO8QAI37D62krjxcoUSJ+1DGD4p1z+c6z5EZqCB5yZswbZ+RPIiMXr7ha2rql5s/LxrG3rodHSGdQ1baC7kdhhsZ/PnmF1Pp1w3L0aTI0808ky9Ltjfvi0R6Qc52zT1fp2g3ol1GAXl2DzrJ1KBGpJb4N1IzVY0wNaCTwuwn8mZlTMwbU629fLnJbQc+EXd3tRr+fnoHSi8wM5rNyTXt8T/EB0k29RWY9agdfjpbOK27x6+RmPI9Em7jB/DlDz8i3Qg5UinRx4cuSllnhSToZwkF/cyLQvXxElHaNbejJ+LvnTD4jUFH5LYVaqtfwSOYvsJWLzi2yGS4w/ZF2dMg2jiZEODoSJIWAxC6argq5Nh79Vqvcxx+7ZpIY9+1q8aEHnPCwDrGHBksD/tVlyD1UovxtnEVDz15zs4tpOLeJNoM62wHbAVUOQSvUSwlE4c9voeTnmLnKLYW3/SoR22DOQZR9fyXprBj5rC7fH74BssgBMyP08YbpPR+HBOjnGdaKBUK1WQIDZcUWryVraDYYfrph6md6wslXhNwEOXzLtrAn6sw+AOALzc4FGCgWezZIiaISzzFVgCMhILyII09+kBOg0pxIA5B2bNVtQAGhy1Qbd1AhWcfUKgaOIH6nkZIHgj6+UfFnsvOgyoI0RsefZa2t13gw9GVNEUTfUQYr6c4k87xzhFdKEEe8SNNdEUlLfLfNv8OicRAT0XEA7LOnChdsuQHaRhGiZB256QFKg9fk/GO0ei7Dr/AJQlhd1yFYcixJQpippct0xA00dEavGb58mXLFwpLtI1gW6b67XgbkA0gLl/mhf2/P7VTywoLNZGaz/uxW8WfpD3Jm0+iCb/+P0ty1wig8o12it3NYQA7x++d/qgdsTjPsNYpGWaO6elMMCOyUZPWvA3GzMPbKZoKvfGVEJJDtNl4frsIyh9l4eqRQnwHqUSn8o2BW16Zv7xMCCoynTPIkoxYVqLfhknDla4ZLyUE75UQlF+XohdRmTidaDDdMRg9cKeiSFjbCdQbk7KApMwhdenoqorizPy8peqhpEwgKWsjEPUlAZZshNb0jXbCELs6F5Ga9PE7E0afrqlhGmka18KSkfU7dn2g5SgcEk7pN1WCxKQlVqxW7U3KBFHYJJIr8cDcaDRC7euQbaOGOWewVLXJv9BeYJOv3+8VvSf46qT03uRfo2wVa5xxxVWQ3NC2v6Fln/wFWcBluvKd1MQEVyUNsw8Da49Zq85g+hXBAlPmaKFXqj+2XhLQL+w0h/zGjFPbb3BYR0+uPj54lTUKq+usmK+sXM8ynKj88fqsG/xYeYJlWF9ZWTE/fGT6sWrypyMc7cB7eNuOaYR8Z2qzRS9dZLUFgcjSLN+srqVnO/vPdvTnSF31kKI678rUPanBCCLppSHWM4vRhMgL9CS5p7qngTxbzZ3ECMfQMdGxdo2nfhuyvjLhWQSXGvV5zQvnrBe7bFF3XRURgAI8U8lIqYHjx969y6JAdWd3kPkv1Mx3b8fw8JoUQHKA7NSWA+6B+o0tpokL3WMXUJypWZWkWkKZEUY+lBZ/8QSM41ogPS4skKd27liwafnsgr99IpS4o2ZdMD+6diwtbc/jD39FhymC45UdslXiO/iGLbg28S3NWm31pexsVX+cZ9pkSWXDkpvlzRVpHMOmHCFN50D5S8BhQYFlTa3pfCCClOzUP/Px5Nee+KBRM8lzVIyanXn496rkGIhNacDEMraeYS0TMutmYmGxWk6M5sVZ2HII4OtOupDbrSiHu0ftuI4jALGmc3JKoHIBzQG6Fzq9HX3nj9QLSvbNrQNwZASXNC5W1dhpCr7u6TO7PDwuLDV2lBvniSGRFzHWgnIuEDl95m+erljx5eWSKkIuIF2pSPWCNcjl9yg18sOfS4AX3x54XyPh4OAIGgME9nbUd8X5N/GsLi4aahFHlbMXyJ0JBG5qYG/Jaid/t0xNExWbiKUUis3UJKrBQTUmUcySAgrWjqU2aTLd/KFkzVsYBiycwFFCEddEOKfUE5T2cRZ9wl37VaqkiEIouAkBOJWG17iP2cPt438JRcGplqmjKUUELWsySnkoSjF1bg9P2e1fNDCeVGgMfFgq7xtGWDrFtF/hZ8qN+xB/NgX0ToN1dkyePLWKohshdlXHJlkaoIK0zrYeZ9tgw6lts1qfAFNHApJKD3MmzG9WOOsXdgZjiSMTFgaY/7CsAWOafU7rIzJ1qJB4Gx5zJ4J4B6OYR6oWiswO76TskVhOLpygxdNSf96xxz+9lPKeHT8vW2EtHpEby8kecST2DM01SWvhATSp5WK4eHekVhqzdo9CiZG7rWI5lXhn4bVN0qE5gGmmnxBl+KWLju9EEq7Q8WPuY3j6lX6JC1W64TFteWmPV/9KpOVsTkofTfG7KibjN5N6qvMvrjB4tm+rm8iu3Hwqo7rggLmpN29YHd2sErsX1UTaKR7ZW2LTF00wsiUuOx2Vtxjo2nxwpupWw6rc58okfczXr0FD8FqnItlYp/zNDXtFy0obA2//JC9azdWlWoc9rPCFmB39cGviwMvNBHgHZnv/jjihV3y8qTJ0hLd5jaBFbSyOVMasNBqysi+YJzXO8XRhNfRgDLtVqmMo6PQGwghSVOYV1YrV7g1fuuZy+EGh/NxC06N7NDVloZLmtoKqjLn1/mPM/5RCbXQuE/llX5XLr1rsYi+gLQGeLeaDYaQ1fZ9d2WZeS3zC6aUgKKR/jjAEh6KbzJyHUEwLkh+S939qnhPyUrmfsTc4Kyu412FQ0K7hR3PGek2Gb+8in5RQ2EFq0kZ1bZ1mw14DAztmUlVO4Cdz9LuIguZkxyoCgn7Zy/NihNID6FCQ4yuD/DUeylIY2q3JMTHB0db6eqtlJCZGo8jAje6yiQrT2CQnInug+VMeirbJnLqqraH3Pnpf+i8+U3anjpkYuhjBjY21KsttKxISltvLlLabBU6ktaEeKH8SUs8u+GZhWcrq5Apf3uLGyWwu0qRlJnRYLkqvTAzNRtVCKY6tdBjykPSRQQIWp3KTn0TEtEPcBfboHXmUiS/G9wgDlD7SBQEqsr12LkvZYxnmmwF3kH/FxXOi2hNShVLkjI1mxj2/09PmVv7PICmi3rRsWwsFq0sHmHzAhZNy1CNikBbZyrN9V5YNQWP/BblxFFzfln9ylcOatf9o6tvoL5gwgIvSQLy4yJcA7Yy2WtEkvXOAzpmETrAuGwftMriZuEJrwahEGxpuv94n7u0XH7fD0Xbb0Dgs3xLWG5QkymEYuD0IEMpuR8HtZtO3CU8fJphMdrgNUSTYClPmUqG6uSAlH/aSWFrSALW+3LG+OD+KAaE1qTaHbrRvWi8QwfoTBKNKqYhqNeJ2+BwKSenBtsvUH2QEKjsClAn3lsEPYt712LNXFtm7s6VPHZZTd9ZJ1+r09RJsIWDoyBDY70ZUyQbuP1+FFiiSox6sfzRUu8nPZlM91McAjVsV4jKQfV5zPMt945ybwi0s7WxJzf355U7D2OvZcCdfqIeZbGgM5zQN1EC4eoZJsf/fJlleVfPwD+K8kL5uTnYEo1cpxUYL1vM+71B0d3f0oUuEgh566XFZAGZg+nFm3uWcy24FDw4cHww58W/2N0bj7t1GnHowNGRgMGRWUu7nX1bmp+On6bY1NW3TTRsY2NDpxuSjUvNylZ6dSO9M/y4i8GAMYAGWy1KD3JYF2QAj5klFZ4Wjoiw4w9uQOrKwRFcfBt7kuwlsHl3Jrplq8A7OKGsavPpjA42gVQCuXQPuX3iAVIJuD9G3Vl3Ur0CVkCa+fSNHlZJGPmxaSTro/nWxUL8S/369oT2a668x73ceVf/39WnCbTfVkZre3iK7ffNL2kUXS19mfIlg00IlXD2ps4/Stz27syL8+mTNoCjkYqCi0ThkXOEwDBmUPON54zkHiwXs2p2GGx8uOBU6kR4NN+U4JCGZXBfaaT8sLLH/UGdfEIfchr7AB/hoINn3ZPIRpa93AefAKUv/fk9bhNmSumI+DQhuKN+HHaS/97peXOZLPZ2Vthm7iHH1bK6/yw+0xRigLB02IhBp4SNFw6C8SVkMw825ODJ2QJ4S05XgqVKVjanrN38fSf9q2BhWaF0GgJcZgO0e8Xlvh2RBza4wD76LvQAEX3z42Ftbt/uMhrZOjBRtrfA1oQobRfAynxq/C48fHYnMbrmu/7Ehe/2uNt+1wZOAilonuCX9tzvBS0X55ZFd/X/xyUBEvtqFqm+vpaIaDnonPwCd39WGgk3qcw6r/jaesC9gA7g8yJIf2qOSU6KOBGlspnM+Xi5x1bVxR+yfTjXy9mXkV+dEn3/c/eM9UVUGzj35ZMTJLVt6SqK/d227FGvsiRcHxT5/OKIrAEb/piynDJXcyD4AHeZ2iu525f7ei2mWrM+PDIQmwAqABFRCpKqluRnT83tu172c5ahHDcAe6Ob9KrFW+V0QW++qvivqHFqOBNhVqUwCarBzEYpQnCOkMIVMbY+n/xfvL76ev+vvCenFVHKsJ3W7cBwHQiDQZzcdjrQxw4roFCFV6CJMp1HpRWHLi5yIcHTp1/DfTnNM3D1OoW+PC+djEbAoOH/k7MMUpoCZwhIEHC7cY4jvtsDDouHdyuTNl/cmK7uj4aGYcu+eR5JJH7e/TrUKfhFjl0Krar0n1CbuaaeQt6e5Js6+NyHQ04Ucj/seW/ZhEDcO/0Cu9dhBC8kkUYvdV+3qa6H6SLMHDXvjm+tY2hmBq9RVKPWwR8gPyMO1IdukLtLHcALKFUy6I33uFpEvf/WbrNo7ZqO72/J2aZvUdYOr+4bYM/5PSKuoUyDZxVNcGOb3tjw6/atfnt9v5XHRG1nQVEGzh8Sj2VMy1tuPVdb4gYvROxkH+9U8H8RVxs2+kL0Q302GxIVqXq8NWdviEmOajxg5+rdHfsBv6Zxs/3y/r/bf+VP+zED2faZLfQTzZeBdMsgNRUAsrvyQPO1j7PCLTL1Z+BtglJL0NiAtQP+7/YMX0wsoBI9JxUPP+2vzUVM1KVASN6zkOMb22aue1ZPX2/GEbtCpJQcbDFNZsrQhwUUofOEurnyHYUBv4YcVIaZm3/CNdEdHeipr32VFrLzoEi6QyGHp/JCWu5Rbkn/LrlFLbmvgs7LdItavnMQndt1lSc6ntz333cuvTVMd0hIh3GPmIp+W3JKbt9SigPadVAZEqTi8csXGhsrKkkWOuTVJq6hW0vYmAiuMGG2wpah6Rh7NwapZpxrWZi/gO6iVdyuPwAJqV+VnharAQg4Z7n64RPXcVa163dL6fJ3pbCs1zKh2LCUJ91o+bXTtsm3QMw2Va0iyGe4UbPXXXiktTOF2C5ZrmUSRlTzyoMdR5LBXyu8Tt1uBVMzpzEqnt9BOhOK0nR652DzQ556U1PCsZIrVn++sf8sH86whiheB8uLx+L3uqot6kI4It7+PR264CfkPCV7NtF7uwkTXtl0FaBTmL/VgpCivjkq5LKktDXkeFSnNm3x0tDIXGMiZO4+QUDxcJLIwSrIFH6663GEl+VwaLAkKRCBX2iJt5oXuGOnjD5y1BN0coepFhkd7IbunVbI1b63guMO79nqXpySKfusJ6LWtaeOVC5FR3S5FoiIEWd0uEMeRzkcc8nD1La2wxedhA6tuV8I/NGLVHFo+JN6rauOVtiffFzGCurG+4CyluFSAiOO1QV6oBkgLo33OvqaZ+jTkSy3ucV0a+CnnuRkTkRNoyO1AGmBEGPAcuW4suUNSpUrnVvjMkrUZM6yaBLwi7YoK6TjHKJ899zQMs1qQylHOaKtCQYhJiKskZbe0mDOLcFmZA7pbQ6VDciTK4V5Zw1nk9ZhSioL3AkU6PwqeGg0Q2bqYK5NCew9AN8y6H6BTR3m/NUijh2uD+t2zFCCf75KoSAz4lgoqQuri4QWRLMczvBwheuN77XuyDEhyklyZqT5u8cQtVfKWu2RHCFPZc70jKD1rZ9A+y2Uv9t6RRFszoaI9A7yZE9SZLVwP9vZSF2N3LZFu3sEu7CXEjbc2CZJ2C9/Kd5qhXm/JcrSqpZZzoNwWQdURagK8xdgbK5W2aPFyECInANF0MaRB25wn4KbebS/fc7eI27lKvIetiGVVyok24DXPLnSvSKFedmKelWetSRfJV5f0txNnekt0LGSDTsPwS3UxJ+n5k4KlzZLfMpyMmr1g3flpkLYTN8l27xLJa409blsJk5kDPWBJtzhpVr44rQXOSeCC6+A2i/ar5y3AUXmtsYgPS4QkKQ2t3De21zSq7F7JNJmxSHUtymnwe6TCe5Wl1EXMubIarovKtOO9cB54WmOKtOuJAbLiYUpsCswGgDxuXVsKW9mIRZwI2IypSZNiFBXKKzg7pMgM3rUIHZUFBtsTRwIRymfN+GcM9zZcRsFIP9VtT1uBjndBql9kek6Iu+LFSFm027Fa6DVTRk062nhHGf8hQckaTwRtSuHb+7JEdLLW07l3ehDHnJXBU05SkZFUVKSfOEhDkOWjYCb/t9gnMyz4ZWWfqX4fzW6cTZwUaerks2p+e+opeAIFA4nV4zNKGvcUwVmrRCvPYXr+JEjCCUnKh9kB0yV3RRzR83p1Amk+nPAOi3qsJxXQ5jJBiGSFnhIgoxBiUnrkf6KPfBiAndGNTg75GSvLMm0YTCQfWHZlYVClv7i8uRtOrEnyxq6AeOOiuefX8EWRDnBmVITxIxE9uAzOYPC0Y4e54sxViqejPM/TE2eqBbOoySe3TyZ2rlpPe+++8Emy8TW5tsTJHJS2UoqMWt/396Tv7iifvRonbmOyXTgBeYqlZhA36Wv0g8aifb7iWEQSp9W0+XSfLFYyW1ZJD5zejKnWRultEYuzK4XMlnNPVT90UW9yrYtMOSnKTyG+9qfdcb5UvucT9YsNs+2pj540+GRJi1l6snm0qo5YkITOEsREZFDyKcIAt+852AjMSG7si9mgN7hL/0Vcia2qbtNYIpGrSo6SYvP0E7RT1NdKvE+hY2VPeRnvaJ3Z0dPZlni8+rTb11wkG7IEFTRz385wjinxpHnurGONf8UdApiWPFJiEV+boo8MNsiUbfZTUgtaKOIs6GM5EM/TukWF62CrWa9HyJnE4aMBs+3kUiKvzQnoeCVXRSMYneD8a3xBimfY3hPQYltqv8ETPrpyrOTk2Qj+QQP41pO3gfxdj3df/aDnP9FQAOD1sryrPaJJ194Yd4G3mxKR8ds735RFDrJ+YD/IL73pnG/494Oo7kLJF8sKuhBsOe4HWKG9OqPg4nYCDkXNMPivRj8g7qFF8btaKrmzkRecxBKV6CUm6mZIw3I2rd+xDPJfxoHuCgzUTcpbb6Tbk+mD7IhEetD/NrZLU68CxRkhLtMotmiHjL4P9b3daWPG2PLEkT3KHTtv34IYCDfG0RVx19QvxgBnweOnwaTtcBW1Iv7X8DJBwVPs1fP8SxfxPz9CUT8ihVmr/G1JY7yoZetrPKNbZwNFMXpckD9VsYv/o/LaOryKD3f5O+LZ9UluVv1o/HswEVFu0jYnpKc0kkw4hInWcLYGh+ucReQ8+B3ZlcZE1uhHjS2Ppk20V4YwWpHAkng3PDWkOShgo2vhAbGaiWppZtHDW7od8b4tci1750kLOBj5j7DtANiF4pNx7Oxj4JLbbGzt1dCoG2WTW+rOAcjA4xDkEI6jlHYMKig7ATn0XICUqfsimEyLgoB4GHbNzC8EoDeLELTYQwR6gyDOGyRg9Y0U9FHCNXpSQfRv9fUDfM+UuDH2MT1j9px06+0vbnWkMFgbb7/qj0Psj5oyK4YH3jxziKNJ/LZVSm+8YzKvl0fG4wgjjg+7lHWZ5Jnn3m0HmbNpc7skMCVujP3XP3/vMPvF083x9H9xqyMFH9+Xz//HIfZXbsqsCBF+szmU77wUxqWtEjS9QeMDJvOyTB4nORhxb/Rhl7IuQkaeOQzyYVmWfM+0A9nXjHbWIS7B5gkMmHYl4GgLiUpKIOPjchJsWCUmgUAH1TvsmJHg59NpSCCgeB7mI5ABZxiOABtw9b0IuFoErpmKQIWhNCXkEYmA2n5gIYIIoQ3BDVnZOVkI5HxVEwIWhECeg0C7BQFDkQ4EUuDMEhD87YDEQiptrPMhplxq62Oufe77AAjBCIrhBEnRDCsQisQSqUyuUKrUGq1ObzCazBarze5wutwer8/P8YDEouaRp/qOw20J+g+iNDqDyWLn4OTixp0HgAgTyriQShvrPD8IozhJs7woq7ppu34Yp3lZt/04r/t5PxCCERTDCZKiGZbjBVGSFVXTDdOyHdfzgzCKkzTLi7Kqm7brh3Gal3XbH46n8+V6uz8AEIIRFMMJkqIZluMFUdJodXqD0WS2WG12h9Pl9nh9n9JVltQ6pkQ5ojZMBynWPCjs998O8f8nKgFaVrE+BfXfPYV87lSjkhlYkSXzCExg/hUdaoSobHjl/07zG9U8kfKawVF20vkBMcrPa5AmRnr6eH5u4HXzhib+ltzTXM6EOdBfqzqPA2aIcddiXk9cCfrsVhUl57w2kW7dRFtaUYVjHz6bUmLzb31+ImjkXPgm7+yCJQd/AlUg+JD7tQzXtnc2cJUREGo7+QtaatolUUseNn7RQE4IbkOtxqCqvBlgDRBcEME/UYMYUgUqJf1CxYd9ywe1/DyTVgkPCPTAQAYGAgGSabQxA0rufoNOK1waNVjzL2TG5vwiGKUCypxXiJeeOqwj7lC2/QfVs9kZWaAhC8rFWUre3nE5ZOFEXaGwv1HjXGj40xADejlzDHiUStP2ekKr/7wy3LUFbSHf/FzUjAaJ5Ht7d9ILCn1Puafa81ijPhSQ3gpiW7AVKd0JtzRKmoKUABP/BDGhbYDB8gjaIuEKib4s+3KGnTxNraFIlnAmVMu+WUpzEfUt4gUO9zryUSNsRjHskJjGoie5iG/Qlr3ip3Kui3KOvW+2KpYiDfu+Y3HLfitnHbSRB+oO6C5r9sWZngGN2uLIqR/zT0qbaBZfZXTRjZhlKU6R83pjWoY5+TJKCaMNfl2AxxZyCkg6DTDYO/Bl3CPxQSbjHcaLrolzStgrposaCSWfhBgQ4rRREbAnVEY/NCPFP01+08Irws+NIHbyYlq+Q0wt/ZV5G9hD9ywD35yhu/HIDA1bkBfp3ayRSQ1cOpf+5hS8CqZGT33CMnM2TfVMQI2tzU0HfX4wX+2FDWMfEF25EOyXDf55Z6jzkwM6TV2F12fV3aIC/BshZ7AqO+Uan+RPt9FLJW8rvm7cNT5AkCcZbUZ+oR1arjDx7hml2j2oWurQyymOKU6kjfN9B8rM4mFr4IDKQZ3Pcj0rl0VQY3N11axyRmYZTSbI0kqC5HmZ7rB+UJG6I6rpP/e8rp4tEnjRvdMdTIWplbJUKFfS8Rvb2hB/Pskvk84jW/TscVD2rsQ6mtcVw0tqz9mKbTVkC5p1akzpBEPabUBzwJ0tZwoe6UVJSqL95Wqy2VH6F955h7BTZD8wL6Tko91RsUv5OjHcOmGuquTcd+RitiGrVRz27wOfhVo+nkivm5rrK9nWjbTTYRCtKTHrko4LGlUV+OwZlTiwnDawyRdjdlRvq+AhOTYVkbKwQ9juUr4b5RepwciBshGgqrKunVd0sStRZ5xlcK2mWkqoUzWvnLT6mIK2upRFPtD+lZrLnQXTg6NWQ0deZ4AmLsYG3YCVbecRgPAnW1pAA5o3mIWVHhQftlAGzKjcrTw0XL8NwFKsWCHtauBoSnrD0Q6/sGFe6ZfTMOGBzpIhKQvy7ga/grlxJFf9ZMGfS6YD3GcomiUeV3HSjAlGziqVPeChzLi4kM73yA1L+hMePMb8aPTtMZCidcrzyYExDaEO/zBxmiPmRuYgJtmExL3oYqWqgeK9SSKQQpYBNA0HJpoIaOiNY2w1sgYpfMhvjT6olQgakwiqY5O8GHplf+Ca5U+glCYEOgYwROIT8O01lDdpEc4O6MGJRB8f3TigWuPAy1bRuO9oTCcFqhIXqg+BrXG5k20jvTfFdSjJklJsI7WnvLNbzQEaE6UV14ZFRW2ptkPLcdh1bJYiaSXhd2LjPMmuqZRyAWYK+NLcVJBm1RokOFDPYyGaVlIHepPJQW2G9w3NTi2W3ntzysPH7fAobXN5Z0DXji+SAG2ngwrGuhOWTLdeytCRI6moZl7aQUQeMHqvYVerujz9R+9DF5FEbiaEx23nApR8Blxlx2do3ZywuXOpu6JZ25UjQQuADf6WkYV+tiJrogEdP608iEHlCKTZH7piSuTNeti9O8azZZhYqv3Jr7q7nKUbybVB5ZaBmd7mf8EcoVVcACIGGQSskX+PK3gi7HGkyUQ9qdTvY1pwYwQLKeAOmGgHBoB8lDCQQWPOJgAPMDywmag95HPYhjsB2rVtc1yHAYxlk0zWeC7SetR4Lx+oDqht1v+VLoQ+Djs1i20oD6NmfOgh5qIXdm91c1lhx/Q84VBZ+4BnBKf+/l2PPNJ/r6TtdlLBYlypk5c71URvola3ySa1rEU+jaxI2TtrzdNcr0pmXCpZTxl/uXJl3/lSK5MDf0oSJR47WdrLMsdV8WjFPpuYN/8mR0JOazqp0af7jyfHmKh5cyeH2xvX8INEz6cB3N7+bpSKS+nGaGqlB4DpM38es8XVgnVaBeZyLoPiRaloxc4r1tKrPAmCEC5WHJIBoxb3csuZFsCgkknmJ505YqfI+eHwlR+gxRKpUjFvf1OgqQ7Hzg9iIXXHoZT8rhbqK1L+SAXv32cV1+WFoOVrhQdx73nhSE8TfoSznrRyaP4ymXxQwt/QwsaS75M4QaCSLqCUBphNHt9315uUqJ1UQJiPWQB0hQUm1J30ZtIedkRes82YJ2sQXWUn6MZdObF1wfos4L1fran3CTE3E5HPw3rRzt45MBf0DX0V+Vnq9TdAO6Hh1GuYElSagjjJ75z4wxDX8ZUBC9CzXxI2Ll8JsbBjNVO6m/JR7cRG96tVTYufelqmK6RJ/u60uejIasQ87TRq2alm4bSK63mMw2RFmWDQ1wyMC2/rDDisrnn9aX4hZtkTmmXeeSAtx9TpbFMOqN44JsfaSijOvGxJmL/pSW5aKXEmG0nAL+TsYPW07a5LcVUsLgDXExKX2bZzhkmyOeldjpxGahOr4aoJ03fb9G7GFbSNb1P2+b3aOdVxjEhTlqIwq6Fkv6WBkNlNRxB+w7nljuQo+bizMY/MQer3J/Ofcr1QxUCr9HQVXzHw42i1qxxjgcD55zoPHOcDxlPlKGQg3SZt2i7xDA7dmb3eztmn3f0tnQiEKVC7LQbRvZcqtgF4Pn98Pt3nkDlLbj4a/8j6c0TxmyC8f9AjRAYWySdwsIfAkj+cWqcXJb0anJqjHLMjRmErTecSSky5ddRGscE4BsfKdlQpEl/9VLKN5BuwigqhV26If5W/iRyJ9v7RzfElQPCkc0k0eFixrhr0ROUmWHmJY0D0sA28YuMDqz8luyYiaklgf3V9kX7FDZWA0nsrfUC8G3yJVE1wQRODKcXKIgVbg9WN83Km/V9O3qTt/JvZ54d57VI4r2DRdvJ5ealD9enO2es8Zcc6xMbpjdME0xhylHQtJydPeRNOB5Y2lCOp1fG+CnMkU+gJ4Zxi2IcI9L4nPWJhCRt+nnJHS9pNzNuYcqnc4fLHWPJ+JtGu30N5+8SpbAhk4QF3NLRMHXJmK4KWHhJbvvT5nJCE+5ZOJoNjh3S3/YahXVXeEHbm2Nv96ObYGAjidronamNzzqR1bJHcTcgCeMD5eTVfOJAYdhi1kIexokKH6Ql8FL+ivjhepM8k755WLmuMhpgjOewXzOKl35VUhp38OpLwmP74dlorknwTC1IoUQcVjQPwU6VEGVIaVeXsnw8YHwFAoRI5LExvhlrKO/mmcq7bvz/5eSyJziK5ibO88foZ5DjV6OKwBzTqo/GMoV3HyQ9In0LaI6SsSUqge21hLEcXQaHtViWtdvst7BKJVsXDOVAPzpjmujlQdliJFxnuYWHNRk1F72i6A/lrrRx963LAiLpS62yOzeccpIcc5KRQ7HL0gQ97EFsifHV5um1123rv42afxwJlyUZPNPUXT63hLJF6bFxLk8+U3gEFuAkr4bRAyz1JAvC97wkUfN56PjzOpVVK9iFtvdP1fPbe0PxIx2z6yiig5H06InOg7vXC5Nz+5WwD1HaNKp3oln41SzMlsQqkbNct84qk55c1ci4YX2yic6nL2hdhZHybl91J77ZwB8DpsPVHb0pxpo4Rpp/GL80TDQ0xAYVAZsNZ80U9lLzxxGZyafztxDKeIM0U1vhzMQctQL/eK4m129gU6W8dKSh5xYYVyr3u+osMNvwNgQnVJg+rXSPnr2AkkYAB0heEc0OIT18h4xlPACkHVaiyMtWhJX58378WSedByJfsKgkGe2nAgGKSRg+Wv9TvG2hpLsKGXtdvtbtmDcNS7ncQJSzjcqwY4M2NV3YuFBlhra48+XElp3cqTPjhg3/T/mbObfcxgcxFqTWKrL+msWgRtN892gCetdDa2enj738EaPfEmuuUw9be/RQ9bHpeTo6FM7poxfIjrR/aRKoHqdSPofn02OnnQiAJrzvEZS131P4A') format('woff2'),\n  url('iconfont.woff?t=1578374019685') format('woff'),\n  url('iconfont.ttf?t=1578374019685') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */\n  url('iconfont.svg?t=1578374019685#iconfont') format('svg'); /* iOS 4.1- */\n}\n\n.iconfont {\n  font-family: \"iconfont\" !important;\n  font-size: 16px;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.icon-bars:before {\n  content: \"\\e601\";\n}\n\n.icon-calendar:before {\n  content: \"\\e602\";\n}\n\n.icon-camera:before {\n  content: \"\\e603\";\n}\n\n.icon-check:before {\n  content: \"\\e604\";\n}\n\n.icon-check-square-o:before {\n  content: \"\\e605\";\n}\n\n.icon-clock-o:before {\n  content: \"\\e606\";\n}\n\n.icon-500px:before {\n  content: \"\\e607\";\n}\n\n.icon-address-book-o:before {\n  content: \"\\e608\";\n}\n\n.icon-address-book:before {\n  content: \"\\e609\";\n}\n\n.icon-address-card-o:before {\n  content: \"\\e60a\";\n}\n\n.icon-address-card:before {\n  content: \"\\e60b\";\n}\n\n.icon-adjust:before {\n  content: \"\\e60c\";\n}\n\n.icon-adn:before {\n  content: \"\\e60d\";\n}\n\n.icon-align-center:before {\n  content: \"\\e60e\";\n}\n\n.icon-align-justify:before {\n  content: \"\\e60f\";\n}\n\n.icon-align-left:before {\n  content: \"\\e610\";\n}\n\n.icon-align-right:before {\n  content: \"\\e611\";\n}\n\n.icon-amazon:before {\n  content: \"\\e612\";\n}\n\n.icon-ambulance:before {\n  content: \"\\e613\";\n}\n\n.icon-american-sign-language-interpreting:before {\n  content: \"\\e614\";\n}\n\n.icon-anchor:before {\n  content: \"\\e615\";\n}\n\n.icon-android:before {\n  content: \"\\e616\";\n}\n\n.icon-angellist:before {\n  content: \"\\e617\";\n}\n\n.icon-angle-double-down:before {\n  content: \"\\e618\";\n}\n\n.icon-angle-double-left:before {\n  content: \"\\e619\";\n}\n\n.icon-angle-double-right:before {\n  content: \"\\e61a\";\n}\n\n.icon-angle-double-up:before {\n  content: \"\\e61b\";\n}\n\n.icon-angle-down:before {\n  content: \"\\e61c\";\n}\n\n.icon-angle-left:before {\n  content: \"\\e61d\";\n}\n\n.icon-angle-right:before {\n  content: \"\\e61e\";\n}\n\n.icon-angle-up:before {\n  content: \"\\e61f\";\n}\n\n.icon-apple:before {\n  content: \"\\e620\";\n}\n\n.icon-archive:before {\n  content: \"\\e621\";\n}\n\n.icon-area-chart:before {\n  content: \"\\e622\";\n}\n\n.icon-arrow-circle-down:before {\n  content: \"\\e623\";\n}\n\n.icon-arrow-circle-left:before {\n  content: \"\\e624\";\n}\n\n.icon-arrow-circle-o-down:before {\n  content: \"\\e625\";\n}\n\n.icon-arrow-circle-o-left:before {\n  content: \"\\e626\";\n}\n\n.icon-arrow-circle-o-right:before {\n  content: \"\\e627\";\n}\n\n.icon-arrow-circle-o-up:before {\n  content: \"\\e628\";\n}\n\n.icon-arrow-circle-right:before {\n  content: \"\\e629\";\n}\n\n.icon-arrow-circle-up:before {\n  content: \"\\e62a\";\n}\n\n.icon-arrow-down:before {\n  content: \"\\e62b\";\n}\n\n.icon-arrow-left:before {\n  content: \"\\e62c\";\n}\n\n.icon-arrow-right:before {\n  content: \"\\e62d\";\n}\n\n.icon-arrow-up:before {\n  content: \"\\e62e\";\n}\n\n.icon-arrows-alt:before {\n  content: \"\\e62f\";\n}\n\n.icon-arrows-h:before {\n  content: \"\\e630\";\n}\n\n.icon-arrows-v:before {\n  content: \"\\e631\";\n}\n\n.icon-arrows:before {\n  content: \"\\e632\";\n}\n\n.icon-asl-interpreting:before {\n  content: \"\\e633\";\n}\n\n.icon-assistive-listening-systems:before {\n  content: \"\\e634\";\n}\n\n.icon-asterisk:before {\n  content: \"\\e635\";\n}\n\n.icon-at:before {\n  content: \"\\e636\";\n}\n\n.icon-audio-description:before {\n  content: \"\\e637\";\n}\n\n.icon-automobile:before {\n  content: \"\\e638\";\n}\n\n.icon-backward:before {\n  content: \"\\e639\";\n}\n\n.icon-balance-scale:before {\n  content: \"\\e63a\";\n}\n\n.icon-bandcamp:before {\n  content: \"\\e63b\";\n}\n\n.icon-bank:before {\n  content: \"\\e63c\";\n}\n\n.icon-bars1:before {\n  content: \"\\e63d\";\n}\n\n.icon-bar-chart:before {\n  content: \"\\e63e\";\n}\n\n.icon-bar-chart-o:before {\n  content: \"\\e63f\";\n}\n\n.icon-bathtub:before {\n  content: \"\\e640\";\n}\n\n.icon-barcode:before {\n  content: \"\\e641\";\n}\n\n.icon-bath:before {\n  content: \"\\e642\";\n}\n\n.icon-battery-0:before {\n  content: \"\\e643\";\n}\n\n.icon-battery-1:before {\n  content: \"\\e644\";\n}\n\n.icon-battery-2:before {\n  content: \"\\e645\";\n}\n\n.icon-battery-4:before {\n  content: \"\\e646\";\n}\n\n.icon-battery-3:before {\n  content: \"\\e647\";\n}\n\n.icon-battery-half:before {\n  content: \"\\e648\";\n}\n\n.icon-battery-empty:before {\n  content: \"\\e649\";\n}\n\n.icon-battery-full:before {\n  content: \"\\e64a\";\n}\n\n.icon-battery-quarter:before {\n  content: \"\\e64b\";\n}\n\n.icon-battery-three-quarters:before {\n  content: \"\\e64c\";\n}\n\n.icon-battery:before {\n  content: \"\\e64d\";\n}\n\n.icon-beer:before {\n  content: \"\\e64e\";\n}\n\n.icon-bed:before {\n  content: \"\\e64f\";\n}\n\n.icon-behance:before {\n  content: \"\\e650\";\n}\n\n.icon-behance-square:before {\n  content: \"\\e651\";\n}\n\n.icon-bell-o:before {\n  content: \"\\e652\";\n}\n\n.icon-bell-slash-o:before {\n  content: \"\\e653\";\n}\n\n.icon-bell-slash:before {\n  content: \"\\e654\";\n}\n\n.icon-bicycle:before {\n  content: \"\\e655\";\n}\n\n.icon-bitbucket-square:before {\n  content: \"\\e656\";\n}\n\n.icon-binoculars:before {\n  content: \"\\e657\";\n}\n\n.icon-bell:before {\n  content: \"\\e658\";\n}\n\n.icon-birthday-cake:before {\n  content: \"\\e659\";\n}\n\n.icon-bitbucket:before {\n  content: \"\\e65a\";\n}\n\n.icon-black-tie:before {\n  content: \"\\e65b\";\n}\n\n.icon-bluetooth-b:before {\n  content: \"\\e65c\";\n}\n\n.icon-bitcoin:before {\n  content: \"\\e65d\";\n}\n\n.icon-blind:before {\n  content: \"\\e65e\";\n}\n\n.icon-bluetooth:before {\n  content: \"\\e65f\";\n}\n\n.icon-bold:before {\n  content: \"\\e660\";\n}\n\n.icon-bolt:before {\n  content: \"\\e661\";\n}\n\n.icon-bomb:before {\n  content: \"\\e662\";\n}\n\n.icon-book:before {\n  content: \"\\e663\";\n}\n\n.icon-bug:before {\n  content: \"\\e664\";\n}\n\n.icon-bookmark-o:before {\n  content: \"\\e665\";\n}\n\n.icon-btc:before {\n  content: \"\\e666\";\n}\n\n.icon-bookmark:before {\n  content: \"\\e667\";\n}\n\n.icon-briefcase:before {\n  content: \"\\e668\";\n}\n\n.icon-braille:before {\n  content: \"\\e669\";\n}\n\n.icon-bullhorn:before {\n  content: \"\\e66a\";\n}\n\n.icon-bullseye:before {\n  content: \"\\e66b\";\n}\n\n.icon-bus:before {\n  content: \"\\e66c\";\n}\n\n.icon-building:before {\n  content: \"\\e66d\";\n}\n\n.icon-cab:before {\n  content: \"\\e66e\";\n}\n\n.icon-buysellads:before {\n  content: \"\\e66f\";\n}\n\n.icon-building-o:before {\n  content: \"\\e670\";\n}\n\n.icon-calendar-plus-o:before {\n  content: \"\\e671\";\n}\n\n.icon-calendar-o:before {\n  content: \"\\e672\";\n}\n\n.icon-calendar-times-o:before {\n  content: \"\\e673\";\n}\n\n.icon-calendar-check-o:before {\n  content: \"\\e674\";\n}\n\n.icon-calendar-minus-o:before {\n  content: \"\\e675\";\n}\n\n.icon-calculator:before {\n  content: \"\\e676\";\n}\n\n.icon-caret-down:before {\n  content: \"\\e677\";\n}\n\n.icon-caret-left:before {\n  content: \"\\e678\";\n}\n\n.icon-car:before {\n  content: \"\\e679\";\n}\n\n.icon-camera-retro:before {\n  content: \"\\e67a\";\n}\n\n.icon-caret-right:before {\n  content: \"\\e67b\";\n}\n\n.icon-caret-square-o-left:before {\n  content: \"\\e67c\";\n}\n\n.icon-caret-square-o-right:before {\n  content: \"\\e67d\";\n}\n\n.icon-caret-up:before {\n  content: \"\\e67e\";\n}\n\n.icon-caret-square-o-up:before {\n  content: \"\\e67f\";\n}\n\n.icon-cart-plus:before {\n  content: \"\\e680\";\n}\n\n.icon-cart-arrow-down:before {\n  content: \"\\e681\";\n}\n\n.icon-caret-square-o-down:before {\n  content: \"\\e682\";\n}\n\n.icon-cc-discover:before {\n  content: \"\\e683\";\n}\n\n.icon-cc-diners-club:before {\n  content: \"\\e684\";\n}\n\n.icon-cc-paypal:before {\n  content: \"\\e685\";\n}\n\n.icon-cc-jcb:before {\n  content: \"\\e686\";\n}\n\n.icon-cc-mastercard:before {\n  content: \"\\e687\";\n}\n\n.icon-cc-amex:before {\n  content: \"\\e688\";\n}\n\n.icon-cc:before {\n  content: \"\\e689\";\n}\n\n.icon-cc-visa:before {\n  content: \"\\e68a\";\n}\n\n.icon-cc-stripe:before {\n  content: \"\\e68b\";\n}\n\n.icon-check1:before {\n  content: \"\\e68c\";\n}\n\n.icon-certificate:before {\n  content: \"\\e68d\";\n}\n\n.icon-check-circle:before {\n  content: \"\\e68e\";\n}\n\n.icon-check-circle-o:before {\n  content: \"\\e68f\";\n}\n\n.icon-chain-broken:before {\n  content: \"\\e690\";\n}\n\n.icon-chain:before {\n  content: \"\\e691\";\n}\n\n.icon-chevron-circle-down:before {\n  content: \"\\e692\";\n}\n\n.icon-chevron-circle-left:before {\n  content: \"\\e693\";\n}\n\n.icon-chevron-circle-right:before {\n  content: \"\\e694\";\n}\n\n.icon-chevron-down:before {\n  content: \"\\e695\";\n}\n\n.icon-chevron-circle-up:before {\n  content: \"\\e696\";\n}\n\n.icon-chevron-left:before {\n  content: \"\\e697\";\n}\n\n.icon-chevron-right:before {\n  content: \"\\e698\";\n}\n\n.icon-chevron-up:before {\n  content: \"\\e699\";\n}\n\n.icon-child:before {\n  content: \"\\e69a\";\n}\n\n.icon-circle-thin:before {\n  content: \"\\e69b\";\n}\n\n.icon-circle-o-notch:before {\n  content: \"\\e69c\";\n}\n\n.icon-chrome:before {\n  content: \"\\e69d\";\n}\n\n.icon-circle-o:before {\n  content: \"\\e69e\";\n}\n\n.icon-clipboard:before {\n  content: \"\\e69f\";\n}\n\n.icon-circle:before {\n  content: \"\\e6a0\";\n}\n\n.icon-cloud:before {\n  content: \"\\e6a1\";\n}\n\n.icon-close:before {\n  content: \"\\e6a2\";\n}\n\n.icon-cloud-upload:before {\n  content: \"\\e6a3\";\n}\n\n.icon-clone:before {\n  content: \"\\e6a4\";\n}\n\n.icon-cloud-download:before {\n  content: \"\\e6a5\";\n}\n\n.icon-clock-o1:before {\n  content: \"\\e6a6\";\n}\n\n.icon-cny:before {\n  content: \"\\e6a7\";\n}\n\n.icon-code-fork:before {\n  content: \"\\e6a8\";\n}\n\n.icon-codiepie:before {\n  content: \"\\e6a9\";\n}\n\n.icon-codepen:before {\n  content: \"\\e6aa\";\n}\n\n.icon-code:before {\n  content: \"\\e6ab\";\n}\n\n.icon-cog:before {\n  content: \"\\e6ac\";\n}\n\n.icon-coffee:before {\n  content: \"\\e6ad\";\n}\n\n.icon-columns:before {\n  content: \"\\e6ae\";\n}\n\n.icon-comment-o:before {\n  content: \"\\e6af\";\n}\n\n.icon-commenting-o:before {\n  content: \"\\e6b0\";\n}\n\n.icon-commenting:before {\n  content: \"\\e6b1\";\n}\n\n.icon-comment:before {\n  content: \"\\e6b2\";\n}\n\n.icon-cogs:before {\n  content: \"\\e6b3\";\n}\n\n.icon-compass:before {\n  content: \"\\e6b4\";\n}\n\n.icon-compress:before {\n  content: \"\\e6b5\";\n}\n\n.icon-comments:before {\n  content: \"\\e6b6\";\n}\n\n.icon-comments-o:before {\n  content: \"\\e6b7\";\n}\n\n.icon-connectdevelop:before {\n  content: \"\\e6b8\";\n}\n\n.icon-copy:before {\n  content: \"\\e6b9\";\n}\n\n.icon-contao:before {\n  content: \"\\e6ba\";\n}\n\n.icon-copyright:before {\n  content: \"\\e6bb\";\n}\n\n.icon-credit-card-alt:before {\n  content: \"\\e6bc\";\n}\n\n.icon-credit-card:before {\n  content: \"\\e6bd\";\n}\n\n.icon-crop:before {\n  content: \"\\e6be\";\n}\n\n.icon-creative-commons:before {\n  content: \"\\e6bf\";\n}\n\n.icon-crosshairs:before {\n  content: \"\\e6c0\";\n}\n\n.icon-css3:before {\n  content: \"\\e6c1\";\n}\n\n.icon-cube:before {\n  content: \"\\e6c2\";\n}\n\n.icon-cutlery:before {\n  content: \"\\e6c3\";\n}\n\n.icon-cut:before {\n  content: \"\\e6c4\";\n}\n\n.icon-dashboard:before {\n  content: \"\\e6c5\";\n}\n\n.icon-dashcube:before {\n  content: \"\\e6c6\";\n}\n\n.icon-cubes:before {\n  content: \"\\e6c7\";\n}\n\n.icon-database:before {\n  content: \"\\e6c8\";\n}\n\n.icon-deaf:before {\n  content: \"\\e6c9\";\n}\n\n.icon-delicious:before {\n  content: \"\\e6ca\";\n}\n\n.icon-deviantart:before {\n  content: \"\\e6cb\";\n}\n\n.icon-diamond:before {\n  content: \"\\e6cc\";\n}\n\n.icon-dedent:before {\n  content: \"\\e6cd\";\n}\n\n.icon-desktop:before {\n  content: \"\\e6ce\";\n}\n\n.icon-deafness:before {\n  content: \"\\e6cf\";\n}\n\n.icon-drivers-license-o:before {\n  content: \"\\e6d0\";\n}\n\n.icon-digg:before {\n  content: \"\\e6d1\";\n}\n\n.icon-dribbble:before {\n  content: \"\\e6d2\";\n}\n\n.icon-download:before {\n  content: \"\\e6d3\";\n}\n\n.icon-dollar:before {\n  content: \"\\e6d4\";\n}\n\n.icon-dot-circle-o:before {\n  content: \"\\e6d5\";\n}\n\n.icon-edit:before {\n  content: \"\\e6d6\";\n}\n\n.icon-dropbox:before {\n  content: \"\\e6d7\";\n}\n\n.icon-edge:before {\n  content: \"\\e6d8\";\n}\n\n.icon-drupal:before {\n  content: \"\\e6d9\";\n}\n\n.icon-drivers-license:before {\n  content: \"\\e6da\";\n}\n\n.icon-eject:before {\n  content: \"\\e6db\";\n}\n\n.icon-ellipsis-h:before {\n  content: \"\\e6dc\";\n}\n\n.icon-envelope-o:before {\n  content: \"\\e6dd\";\n}\n\n.icon-ellipsis-v:before {\n  content: \"\\e6de\";\n}\n\n.icon-eercast:before {\n  content: \"\\e6df\";\n}\n\n.icon-empire:before {\n  content: \"\\e6e0\";\n}\n\n.icon-envelope-open-o:before {\n  content: \"\\e6e1\";\n}\n\n.icon-envelope-open:before {\n  content: \"\\e6e2\";\n}\n\n.icon-envelope:before {\n  content: \"\\e6e3\";\n}\n\n.icon-envelope-square:before {\n  content: \"\\e6e4\";\n}\n\n.icon-envira:before {\n  content: \"\\e6e5\";\n}\n\n.icon-etsy:before {\n  content: \"\\e6e6\";\n}\n\n.icon-eraser:before {\n  content: \"\\e6e7\";\n}\n\n.icon-eur:before {\n  content: \"\\e6e8\";\n}\n\n.icon-euro:before {\n  content: \"\\e6e9\";\n}\n\n.icon-exchange:before {\n  content: \"\\e6ea\";\n}\n\n.icon-exclamation-triangle:before {\n  content: \"\\e6eb\";\n}\n\n.icon-expand:before {\n  content: \"\\e6ec\";\n}\n\n.icon-exclamation:before {\n  content: \"\\e6ed\";\n}\n\n.icon-exclamation-circle:before {\n  content: \"\\e6ee\";\n}\n\n.icon-expeditedssl:before {\n  content: \"\\e6ef\";\n}\n\n.icon-external-link-square:before {\n  content: \"\\e6f0\";\n}\n\n.icon-eyedropper:before {\n  content: \"\\e6f1\";\n}\n\n.icon-external-link:before {\n  content: \"\\e6f2\";\n}\n\n.icon-eye:before {\n  content: \"\\e6f3\";\n}\n\n.icon-eye-slash:before {\n  content: \"\\e6f4\";\n}\n\n.icon-fa:before {\n  content: \"\\e6f5\";\n}\n\n.icon-facebook-official:before {\n  content: \"\\e6f6\";\n}\n\n.icon-facebook-f:before {\n  content: \"\\e6f7\";\n}\n\n.icon-facebook-square:before {\n  content: \"\\e6f8\";\n}\n\n.icon-facebook:before {\n  content: \"\\e6f9\";\n}\n\n.icon-fast-backward:before {\n  content: \"\\e6fa\";\n}\n\n.icon-fast-forward:before {\n  content: \"\\e6fb\";\n}\n\n.icon-feed:before {\n  content: \"\\e6fc\";\n}\n\n.icon-file-archive-o:before {\n  content: \"\\e6fd\";\n}\n\n.icon-female:before {\n  content: \"\\e6fe\";\n}\n\n.icon-file-audio-o:before {\n  content: \"\\e6ff\";\n}\n\n.icon-fighter-jet:before {\n  content: \"\\e700\";\n}\n\n.icon-fax:before {\n  content: \"\\e701\";\n}\n\n.icon-file-code-o:before {\n  content: \"\\e702\";\n}\n\n.icon-file-movie-o:before {\n  content: \"\\e703\";\n}\n\n.icon-file-image-o:before {\n  content: \"\\e704\";\n}\n\n.icon-file-excel-o:before {\n  content: \"\\e705\";\n}\n\n.icon-file-o:before {\n  content: \"\\e706\";\n}\n\n.icon-file-photo-o:before {\n  content: \"\\e707\";\n}\n\n.icon-file-pdf-o:before {\n  content: \"\\e708\";\n}\n\n.icon-file-picture-o:before {\n  content: \"\\e709\";\n}\n\n.icon-file-sound-o:before {\n  content: \"\\e70a\";\n}\n\n.icon-file-powerpoint-o:before {\n  content: \"\\e70b\";\n}\n\n.icon-file-text:before {\n  content: \"\\e70c\";\n}\n\n.icon-file-text-o:before {\n  content: \"\\e70d\";\n}\n\n.icon-file:before {\n  content: \"\\e70e\";\n}\n\n.icon-file-video-o:before {\n  content: \"\\e70f\";\n}\n\n.icon-files-o:before {\n  content: \"\\e710\";\n}\n\n.icon-file-zip-o:before {\n  content: \"\\e711\";\n}\n\n.icon-file-word-o:before {\n  content: \"\\e712\";\n}\n\n.icon-film:before {\n  content: \"\\e713\";\n}\n\n.icon-filter:before {\n  content: \"\\e714\";\n}\n\n.icon-fire:before {\n  content: \"\\e715\";\n}\n\n.icon-fire-extinguisher:before {\n  content: \"\\e716\";\n}\n\n.icon-flag-checkered:before {\n  content: \"\\e717\";\n}\n\n.icon-firefox:before {\n  content: \"\\e718\";\n}\n\n.icon-first-order:before {\n  content: \"\\e719\";\n}\n\n.icon-flash:before {\n  content: \"\\e71a\";\n}\n\n.icon-flag:before {\n  content: \"\\e71b\";\n}\n\n.icon-flag-o:before {\n  content: \"\\e71c\";\n}\n\n.icon-flask:before {\n  content: \"\\e71d\";\n}\n\n.icon-flickr:before {\n  content: \"\\e71e\";\n}\n\n.icon-folder-open:before {\n  content: \"\\e71f\";\n}\n\n.icon-folder-o:before {\n  content: \"\\e720\";\n}\n\n.icon-font-awesome:before {\n  content: \"\\e721\";\n}\n\n.icon-folder:before {\n  content: \"\\e722\";\n}\n\n.icon-floppy-o:before {\n  content: \"\\e723\";\n}\n\n.icon-folder-open-o:before {\n  content: \"\\e724\";\n}\n\n.icon-fonticons:before {\n  content: \"\\e725\";\n}\n\n.icon-font:before {\n  content: \"\\e726\";\n}\n\n.icon-forumbee:before {\n  content: \"\\e727\";\n}\n\n.icon-fort-awesome:before {\n  content: \"\\e728\";\n}\n\n.icon-forward:before {\n  content: \"\\e729\";\n}\n\n.icon-foursquare:before {\n  content: \"\\e72a\";\n}\n\n.icon-free-code-camp:before {\n  content: \"\\e72b\";\n}\n\n.icon-frown-o:before {\n  content: \"\\e72c\";\n}\n\n.icon-futbol-o:before {\n  content: \"\\e72d\";\n}\n\n.icon-gamepad:before {\n  content: \"\\e72e\";\n}\n\n.icon-gavel:before {\n  content: \"\\e72f\";\n}\n\n.icon-gbp:before {\n  content: \"\\e730\";\n}\n\n.icon-ge:before {\n  content: \"\\e731\";\n}\n\n.icon-gear:before {\n  content: \"\\e732\";\n}\n\n.icon-gears:before {\n  content: \"\\e733\";\n}\n\n.icon-genderless:before {\n  content: \"\\e734\";\n}\n\n.icon-get-pocket:before {\n  content: \"\\e735\";\n}\n\n.icon-gg-circle:before {\n  content: \"\\e736\";\n}\n\n.icon-gift:before {\n  content: \"\\e737\";\n}\n\n.icon-gg:before {\n  content: \"\\e738\";\n}\n\n.icon-git-square:before {\n  content: \"\\e739\";\n}\n\n.icon-git:before {\n  content: \"\\e73a\";\n}\n\n.icon-github-alt:before {\n  content: \"\\e73b\";\n}\n\n.icon-github-square:before {\n  content: \"\\e73c\";\n}\n\n.icon-github:before {\n  content: \"\\e73d\";\n}\n\n.icon-gitlab:before {\n  content: \"\\e73e\";\n}\n\n.icon-gittip:before {\n  content: \"\\e73f\";\n}\n\n.icon-glass:before {\n  content: \"\\e740\";\n}\n\n.icon-glide-g:before {\n  content: \"\\e741\";\n}\n\n.icon-glide:before {\n  content: \"\\e742\";\n}\n\n.icon-globe:before {\n  content: \"\\e743\";\n}\n\n.icon-google-plus-circle:before {\n  content: \"\\e744\";\n}\n\n.icon-google-plus-official:before {\n  content: \"\\e745\";\n}\n\n.icon-google-plus-square:before {\n  content: \"\\e746\";\n}\n\n.icon-google-plus:before {\n  content: \"\\e747\";\n}\n\n.icon-google-wallet:before {\n  content: \"\\e748\";\n}\n\n.icon-google:before {\n  content: \"\\e749\";\n}\n\n.icon-graduation-cap:before {\n  content: \"\\e74a\";\n}\n\n.icon-gratipay:before {\n  content: \"\\e74b\";\n}\n\n.icon-grav:before {\n  content: \"\\e74c\";\n}\n\n.icon-group:before {\n  content: \"\\e74d\";\n}\n\n.icon-h-square:before {\n  content: \"\\e74e\";\n}\n\n.icon-hacker-news:before {\n  content: \"\\e74f\";\n}\n\n.icon-hand-grab-o:before {\n  content: \"\\e750\";\n}\n\n.icon-hand-o-left:before {\n  content: \"\\e751\";\n}\n\n.icon-hand-lizard-o:before {\n  content: \"\\e752\";\n}\n\n.icon-hand-o-down:before {\n  content: \"\\e753\";\n}\n\n.icon-hand-o-right:before {\n  content: \"\\e754\";\n}\n\n.icon-hand-o-up:before {\n  content: \"\\e755\";\n}\n\n.icon-hand-paper-o:before {\n  content: \"\\e756\";\n}\n\n.icon-hand-pointer-o:before {\n  content: \"\\e757\";\n}\n\n.icon-hand-peace-o:before {\n  content: \"\\e758\";\n}\n\n.icon-hand-spock-o:before {\n  content: \"\\e759\";\n}\n\n.icon-hand-rock-o:before {\n  content: \"\\e75a\";\n}\n\n.icon-hand-scissors-o:before {\n  content: \"\\e75b\";\n}\n\n.icon-hand-stop-o:before {\n  content: \"\\e75c\";\n}\n\n.icon-hard-of-hearing:before {\n  content: \"\\e75d\";\n}\n\n.icon-handshake-o:before {\n  content: \"\\e75e\";\n}\n\n.icon-hashtag:before {\n  content: \"\\e75f\";\n}\n\n.icon-headphones:before {\n  content: \"\\e760\";\n}\n\n.icon-header:before {\n  content: \"\\e761\";\n}\n\n.icon-hdd-o:before {\n  content: \"\\e762\";\n}\n\n.icon-heart-o:before {\n  content: \"\\e763\";\n}\n\n.icon-heart:before {\n  content: \"\\e764\";\n}\n\n.icon-hotel:before {\n  content: \"\\e765\";\n}\n\n.icon-heartbeat:before {\n  content: \"\\e766\";\n}\n\n.icon-hourglass-1:before {\n  content: \"\\e767\";\n}\n\n.icon-home:before {\n  content: \"\\e768\";\n}\n\n.icon-history:before {\n  content: \"\\e769\";\n}\n\n.icon-hourglass-2:before {\n  content: \"\\e76a\";\n}\n\n.icon-hospital-o:before {\n  content: \"\\e76b\";\n}\n\n.icon-hourglass-3:before {\n  content: \"\\e76c\";\n}\n\n.icon-hourglass-half:before {\n  content: \"\\e76d\";\n}\n\n.icon-hourglass-end:before {\n  content: \"\\e76e\";\n}\n\n.icon-hourglass-o:before {\n  content: \"\\e76f\";\n}\n\n.icon-hourglass-start:before {\n  content: \"\\e770\";\n}\n\n.icon-houzz:before {\n  content: \"\\e771\";\n}\n\n.icon-html5:before {\n  content: \"\\e772\";\n}\n\n.icon-hourglass:before {\n  content: \"\\e773\";\n}\n\n.icon-id-badge:before {\n  content: \"\\e774\";\n}\n\n.icon-i-cursor:before {\n  content: \"\\e775\";\n}\n\n.icon-id-card:before {\n  content: \"\\e776\";\n}\n\n.icon-ils:before {\n  content: \"\\e777\";\n}\n\n.icon-id-card-o:before {\n  content: \"\\e778\";\n}\n\n.icon-image:before {\n  content: \"\\e779\";\n}\n\n.icon-inbox:before {\n  content: \"\\e77a\";\n}\n\n.icon-indent:before {\n  content: \"\\e77b\";\n}\n\n.icon-industry:before {\n  content: \"\\e77c\";\n}\n\n.icon-imdb:before {\n  content: \"\\e77d\";\n}\n\n.icon-info:before {\n  content: \"\\e77e\";\n}\n\n.icon-institution:before {\n  content: \"\\e77f\";\n}\n\n.icon-info-circle:before {\n  content: \"\\e780\";\n}\n\n.icon-internet-explorer:before {\n  content: \"\\e781\";\n}\n\n.icon-inr:before {\n  content: \"\\e782\";\n}\n\n.icon-instagram:before {\n  content: \"\\e783\";\n}\n\n.icon-ioxhost:before {\n  content: \"\\e784\";\n}\n\n.icon-joomla:before {\n  content: \"\\e785\";\n}\n\n.icon-jpy:before {\n  content: \"\\e786\";\n}\n\n.icon-intersex:before {\n  content: \"\\e787\";\n}\n\n.icon-jsfiddle:before {\n  content: \"\\e788\";\n}\n\n.icon-italic:before {\n  content: \"\\e789\";\n}\n\n.icon-key:before {\n  content: \"\\e78a\";\n}\n\n.icon-keyboard-o:before {\n  content: \"\\e78b\";\n}\n\n.icon-krw:before {\n  content: \"\\e78c\";\n}\n\n.icon-laptop:before {\n  content: \"\\e78d\";\n}\n\n.icon-language:before {\n  content: \"\\e78e\";\n}\n\n.icon-leaf:before {\n  content: \"\\e78f\";\n}\n\n.icon-lastfm:before {\n  content: \"\\e790\";\n}\n\n.icon-lastfm-square:before {\n  content: \"\\e791\";\n}\n\n.icon-legal:before {\n  content: \"\\e792\";\n}\n\n.icon-leanpub:before {\n  content: \"\\e793\";\n}\n\n.icon-level-down:before {\n  content: \"\\e794\";\n}\n\n.icon-level-up:before {\n  content: \"\\e795\";\n}\n\n.icon-life-ring:before {\n  content: \"\\e796\";\n}\n\n.icon-life-buoy:before {\n  content: \"\\e797\";\n}\n\n.icon-life-bouy:before {\n  content: \"\\e798\";\n}\n\n.icon-lemon-o:before {\n  content: \"\\e799\";\n}\n\n.icon-lightbulb-o:before {\n  content: \"\\e79a\";\n}\n\n.icon-life-saver:before {\n  content: \"\\e79b\";\n}\n\n.icon-line-chart:before {\n  content: \"\\e79c\";\n}\n\n.icon-linkedin:before {\n  content: \"\\e79d\";\n}\n\n.icon-linkedin-square:before {\n  content: \"\\e79e\";\n}\n\n.icon-link:before {\n  content: \"\\e79f\";\n}\n\n.icon-linode:before {\n  content: \"\\e7a0\";\n}\n\n.icon-list:before {\n  content: \"\\e7a1\";\n}\n\n.icon-list-ul:before {\n  content: \"\\e7a2\";\n}\n\n.icon-linux:before {\n  content: \"\\e7a3\";\n}\n\n.icon-list-ol:before {\n  content: \"\\e7a4\";\n}\n\n.icon-list-alt:before {\n  content: \"\\e7a5\";\n}\n\n.icon-location-arrow:before {\n  content: \"\\e7a6\";\n}\n\n.icon-lock:before {\n  content: \"\\e7a7\";\n}\n\n.icon-long-arrow-up:before {\n  content: \"\\e7a8\";\n}\n\n.icon-long-arrow-right:before {\n  content: \"\\e7a9\";\n}\n\n.icon-long-arrow-left:before {\n  content: \"\\e7aa\";\n}\n\n.icon-long-arrow-down:before {\n  content: \"\\e7ab\";\n}\n\n.icon-magic:before {\n  content: \"\\e7ac\";\n}\n\n.icon-magnet:before {\n  content: \"\\e7ad\";\n}\n\n.icon-low-vision:before {\n  content: \"\\e7ae\";\n}\n\n.icon-mail-reply-all:before {\n  content: \"\\e7af\";\n}\n\n.icon-mail-reply:before {\n  content: \"\\e7b0\";\n}\n\n.icon-mail-forward:before {\n  content: \"\\e7b1\";\n}\n\n.icon-male:before {\n  content: \"\\e7b2\";\n}\n\n.icon-map-pin:before {\n  content: \"\\e7b3\";\n}\n\n.icon-map-o:before {\n  content: \"\\e7b4\";\n}\n\n.icon-map-marker:before {\n  content: \"\\e7b5\";\n}\n\n.icon-map:before {\n  content: \"\\e7b6\";\n}\n\n.icon-map-signs:before {\n  content: \"\\e7b7\";\n}\n\n.icon-mars-stroke-h:before {\n  content: \"\\e7b8\";\n}\n\n.icon-mars-stroke:before {\n  content: \"\\e7b9\";\n}\n\n.icon-mars-stroke-v:before {\n  content: \"\\e7ba\";\n}\n\n.icon-mars-double:before {\n  content: \"\\e7bb\";\n}\n\n.icon-mars:before {\n  content: \"\\e7bc\";\n}\n\n.icon-maxcdn:before {\n  content: \"\\e7bd\";\n}\n\n.icon-medium:before {\n  content: \"\\e7be\";\n}\n\n.icon-medkit:before {\n  content: \"\\e7bf\";\n}\n\n.icon-meanpath:before {\n  content: \"\\e7c0\";\n}\n\n.icon-meetup:before {\n  content: \"\\e7c1\";\n}\n\n.icon-meh-o:before {\n  content: \"\\e7c2\";\n}\n\n.icon-mercury:before {\n  content: \"\\e7c3\";\n}\n\n.icon-microphone:before {\n  content: \"\\e7c4\";\n}\n\n.icon-minus-circle:before {\n  content: \"\\e7c5\";\n}\n\n.icon-minus-square:before {\n  content: \"\\e7c6\";\n}\n\n.icon-minus-square-o:before {\n  content: \"\\e7c7\";\n}\n\n.icon-microchip:before {\n  content: \"\\e7c8\";\n}\n\n.icon-microphone-slash:before {\n  content: \"\\e7c9\";\n}\n\n.icon-minus:before {\n  content: \"\\e7ca\";\n}\n\n.icon-mixcloud:before {\n  content: \"\\e7cb\";\n}\n\n.icon-mobile:before {\n  content: \"\\e7cc\";\n}\n\n.icon-modx:before {\n  content: \"\\e7cd\";\n}\n\n.icon-money:before {\n  content: \"\\e7ce\";\n}\n\n.icon-moon-o:before {\n  content: \"\\e7cf\";\n}\n\n.icon-motorcycle:before {\n  content: \"\\e7d0\";\n}\n\n.icon-mouse-pointer:before {\n  content: \"\\e7d1\";\n}\n\n.icon-mortar-board:before {\n  content: \"\\e7d2\";\n}\n\n.icon-navicon:before {\n  content: \"\\e7d3\";\n}\n\n.icon-neuter:before {\n  content: \"\\e7d4\";\n}\n\n.icon-music:before {\n  content: \"\\e7d5\";\n}\n\n.icon-object-group:before {\n  content: \"\\e7d6\";\n}\n\n.icon-newspaper-o:before {\n  content: \"\\e7d7\";\n}\n\n.icon-object-ungroup:before {\n  content: \"\\e7d8\";\n}\n\n.icon-odnoklassniki-square:before {\n  content: \"\\e7d9\";\n}\n\n.icon-odnoklassniki:before {\n  content: \"\\e7da\";\n}\n\n.icon-opencart:before {\n  content: \"\\e7db\";\n}\n\n.icon-openid:before {\n  content: \"\\e7dc\";\n}\n\n.icon-opera:before {\n  content: \"\\e7dd\";\n}\n\n.icon-paper-plane-o:before {\n  content: \"\\e7de\";\n}\n\n.icon-pagelines:before {\n  content: \"\\e7df\";\n}\n\n.icon-outdent:before {\n  content: \"\\e7e0\";\n}\n\n.icon-paper-plane:before {\n  content: \"\\e7e1\";\n}\n\n.icon-paint-brush:before {\n  content: \"\\e7e2\";\n}\n\n.icon-paragraph:before {\n  content: \"\\e7e3\";\n}\n\n.icon-paperclip:before {\n  content: \"\\e7e4\";\n}\n\n.icon-optin-monster:before {\n  content: \"\\e7e5\";\n}\n\n.icon-pause-circle-o:before {\n  content: \"\\e7e6\";\n}\n\n.icon-paste:before {\n  content: \"\\e7e7\";\n}\n\n.icon-pause:before {\n  content: \"\\e7e8\";\n}\n\n.icon-pause-circle:before {\n  content: \"\\e7e9\";\n}\n\n.icon-paw:before {\n  content: \"\\e7ea\";\n}\n\n.icon-paypal:before {\n  content: \"\\e7eb\";\n}\n\n.icon-pencil-square-o:before {\n  content: \"\\e7ec\";\n}\n\n.icon-percent:before {\n  content: \"\\e7ed\";\n}\n\n.icon-pencil-square:before {\n  content: \"\\e7ee\";\n}\n\n.icon-pencil:before {\n  content: \"\\e7ef\";\n}\n\n.icon-phone-square:before {\n  content: \"\\e7f0\";\n}\n\n.icon-phone:before {\n  content: \"\\e7f1\";\n}\n\n.icon-photo:before {\n  content: \"\\e7f2\";\n}\n\n.icon-picture-o:before {\n  content: \"\\e7f3\";\n}\n\n.icon-pie-chart:before {\n  content: \"\\e7f4\";\n}\n\n.icon-pied-piper-pp:before {\n  content: \"\\e7f5\";\n}\n\n.icon-pied-piper-alt:before {\n  content: \"\\e7f6\";\n}\n\n.icon-pinterest-p:before {\n  content: \"\\e7f7\";\n}\n\n.icon-plane:before {\n  content: \"\\e7f8\";\n}\n\n.icon-play-circle-o:before {\n  content: \"\\e7f9\";\n}\n\n.icon-pied-piper:before {\n  content: \"\\e7fa\";\n}\n\n.icon-pinterest:before {\n  content: \"\\e7fb\";\n}\n\n.icon-pinterest-square:before {\n  content: \"\\e7fc\";\n}\n\n.icon-play:before {\n  content: \"\\e7fd\";\n}\n\n.icon-play-circle:before {\n  content: \"\\e7fe\";\n}\n\n.icon-plug:before {\n  content: \"\\e7ff\";\n}\n\n.icon-plus-square-o:before {\n  content: \"\\e800\";\n}\n\n.icon-plus-square:before {\n  content: \"\\e801\";\n}\n\n.icon-plus-circle:before {\n  content: \"\\e802\";\n}\n\n.icon-plus:before {\n  content: \"\\e803\";\n}\n\n.icon-product-hunt:before {\n  content: \"\\e804\";\n}\n\n.icon-print:before {\n  content: \"\\e805\";\n}\n\n.icon-puzzle-piece:before {\n  content: \"\\e806\";\n}\n\n.icon-podcast:before {\n  content: \"\\e807\";\n}\n\n.icon-power-off:before {\n  content: \"\\e808\";\n}\n\n.icon-qq:before {\n  content: \"\\e809\";\n}\n\n.icon-question:before {\n  content: \"\\e80a\";\n}\n\n.icon-qrcode:before {\n  content: \"\\e80b\";\n}\n\n.icon-quora:before {\n  content: \"\\e80c\";\n}\n\n.icon-question-circle-o:before {\n  content: \"\\e80d\";\n}\n\n.icon-question-circle:before {\n  content: \"\\e80e\";\n}\n\n.icon-quote-left:before {\n  content: \"\\e80f\";\n}\n\n.icon-quote-right:before {\n  content: \"\\e810\";\n}\n\n.icon-ra:before {\n  content: \"\\e811\";\n}\n\n.icon-ravelry:before {\n  content: \"\\e812\";\n}\n\n.icon-rebel:before {\n  content: \"\\e813\";\n}\n\n.icon-random:before {\n  content: \"\\e814\";\n}\n\n.icon-reddit-square:before {\n  content: \"\\e815\";\n}\n\n.icon-reddit-alien:before {\n  content: \"\\e816\";\n}\n\n.icon-recycle:before {\n  content: \"\\e817\";\n}\n\n.icon-reddit:before {\n  content: \"\\e818\";\n}\n\n.icon-registered:before {\n  content: \"\\e819\";\n}\n\n.icon-refresh:before {\n  content: \"\\e81a\";\n}\n\n.icon-renren:before {\n  content: \"\\e81b\";\n}\n\n.icon-reorder:before {\n  content: \"\\e81c\";\n}\n\n.icon-repeat:before {\n  content: \"\\e81d\";\n}\n\n.icon-reply-all:before {\n  content: \"\\e81e\";\n}\n\n.icon-remove:before {\n  content: \"\\e81f\";\n}\n\n.icon-rmb:before {\n  content: \"\\e820\";\n}\n\n.icon-resistance:before {\n  content: \"\\e821\";\n}\n\n.icon-road:before {\n  content: \"\\e822\";\n}\n\n.icon-retweet:before {\n  content: \"\\e823\";\n}\n\n.icon-reply:before {\n  content: \"\\e824\";\n}\n\n.icon-rocket:before {\n  content: \"\\e825\";\n}\n\n.icon-rotate-left:before {\n  content: \"\\e826\";\n}\n\n.icon-rouble:before {\n  content: \"\\e827\";\n}\n\n.icon-rotate-right:before {\n  content: \"\\e828\";\n}\n\n.icon-rss:before {\n  content: \"\\e829\";\n}\n\n.icon-rss-square:before {\n  content: \"\\e82a\";\n}\n\n.icon-ruble:before {\n  content: \"\\e82b\";\n}\n\n.icon-rub:before {\n  content: \"\\e82c\";\n}\n\n.icon-s15:before {\n  content: \"\\e82d\";\n}\n\n.icon-save:before {\n  content: \"\\e82e\";\n}\n\n.icon-rupee:before {\n  content: \"\\e82f\";\n}\n\n.icon-safari:before {\n  content: \"\\e830\";\n}\n\n.icon-scissors:before {\n  content: \"\\e831\";\n}\n\n.icon-scribd:before {\n  content: \"\\e832\";\n}\n\n.icon-search-plus:before {\n  content: \"\\e833\";\n}\n\n.icon-search:before {\n  content: \"\\e834\";\n}\n\n.icon-sellsy:before {\n  content: \"\\e835\";\n}\n\n.icon-send:before {\n  content: \"\\e836\";\n}\n\n.icon-send-o:before {\n  content: \"\\e837\";\n}\n\n.icon-search-minus:before {\n  content: \"\\e838\";\n}\n\n.icon-server:before {\n  content: \"\\e839\";\n}\n\n.icon-share-alt-square:before {\n  content: \"\\e83a\";\n}\n\n.icon-share-alt:before {\n  content: \"\\e83b\";\n}\n\n.icon-share-square-o:before {\n  content: \"\\e83c\";\n}\n\n.icon-share:before {\n  content: \"\\e83d\";\n}\n\n.icon-share-square:before {\n  content: \"\\e83e\";\n}\n\n.icon-shekel:before {\n  content: \"\\e83f\";\n}\n\n.icon-sheqel:before {\n  content: \"\\e840\";\n}\n\n.icon-shield:before {\n  content: \"\\e841\";\n}\n\n.icon-ship:before {\n  content: \"\\e842\";\n}\n\n.icon-shirtsinbulk:before {\n  content: \"\\e843\";\n}\n\n.icon-shower:before {\n  content: \"\\e844\";\n}\n\n.icon-sign-in:before {\n  content: \"\\e845\";\n}\n\n.icon-shopping-basket:before {\n  content: \"\\e846\";\n}\n\n.icon-shopping-cart:before {\n  content: \"\\e847\";\n}\n\n.icon-shopping-bag:before {\n  content: \"\\e848\";\n}\n\n.icon-sign-language:before {\n  content: \"\\e849\";\n}\n\n.icon-sign-out:before {\n  content: \"\\e84a\";\n}\n\n.icon-signal:before {\n  content: \"\\e84b\";\n}\n\n.icon-simplybuilt:before {\n  content: \"\\e84c\";\n}\n\n.icon-sitemap:before {\n  content: \"\\e84d\";\n}\n\n.icon-signing:before {\n  content: \"\\e84e\";\n}\n\n.icon-sliders:before {\n  content: \"\\e84f\";\n}\n\n.icon-skype:before {\n  content: \"\\e850\";\n}\n\n.icon-skyatlas:before {\n  content: \"\\e851\";\n}\n\n.icon-slack:before {\n  content: \"\\e852\";\n}\n\n.icon-slideshare:before {\n  content: \"\\e853\";\n}\n\n.icon-snapchat-square:before {\n  content: \"\\e854\";\n}\n\n.icon-snapchat-ghost:before {\n  content: \"\\e855\";\n}\n\n.icon-smile-o:before {\n  content: \"\\e856\";\n}\n\n.icon-snapchat:before {\n  content: \"\\e857\";\n}\n\n.icon-snowflake-o:before {\n  content: \"\\e858\";\n}\n\n.icon-soccer-ball-o:before {\n  content: \"\\e859\";\n}\n\n.icon-sort-alpha-asc:before {\n  content: \"\\e85a\";\n}\n\n.icon-sort-alpha-desc:before {\n  content: \"\\e85b\";\n}\n\n.icon-sort-amount-asc:before {\n  content: \"\\e85c\";\n}\n\n.icon-sort-desc:before {\n  content: \"\\e85d\";\n}\n\n.icon-sort-down:before {\n  content: \"\\e85e\";\n}\n\n.icon-sort-numeric-asc:before {\n  content: \"\\e85f\";\n}\n\n.icon-sort-asc:before {\n  content: \"\\e860\";\n}\n\n.icon-sort-amount-desc:before {\n  content: \"\\e861\";\n}\n\n.icon-sort-numeric-desc:before {\n  content: \"\\e862\";\n}\n\n.icon-sort-up:before {\n  content: \"\\e863\";\n}\n\n.icon-sort:before {\n  content: \"\\e864\";\n}\n\n.icon-soundcloud:before {\n  content: \"\\e865\";\n}\n\n.icon-space-shuttle:before {\n  content: \"\\e866\";\n}\n\n.icon-spinner:before {\n  content: \"\\e867\";\n}\n\n.icon-spoon:before {\n  content: \"\\e868\";\n}\n\n.icon-square-o:before {\n  content: \"\\e869\";\n}\n\n.icon-spotify:before {\n  content: \"\\e86a\";\n}\n\n.icon-square:before {\n  content: \"\\e86b\";\n}\n\n.icon-stack-exchange:before {\n  content: \"\\e86c\";\n}\n\n.icon-star-half-empty:before {\n  content: \"\\e86d\";\n}\n\n.icon-stack-overflow:before {\n  content: \"\\e86e\";\n}\n\n.icon-star-half:before {\n  content: \"\\e86f\";\n}\n\n.icon-star:before {\n  content: \"\\e870\";\n}\n\n.icon-star-half-o:before {\n  content: \"\\e871\";\n}\n\n.icon-star-o:before {\n  content: \"\\e872\";\n}\n\n.icon-star-half-full:before {\n  content: \"\\e873\";\n}\n\n.icon-sticky-note-o:before {\n  content: \"\\e874\";\n}\n\n.icon-step-forward:before {\n  content: \"\\e875\";\n}\n\n.icon-steam:before {\n  content: \"\\e876\";\n}\n\n.icon-steam-square:before {\n  content: \"\\e877\";\n}\n\n.icon-stethoscope:before {\n  content: \"\\e878\";\n}\n\n.icon-step-backward:before {\n  content: \"\\e879\";\n}\n\n.icon-stop:before {\n  content: \"\\e87a\";\n}\n\n.icon-stop-circle:before {\n  content: \"\\e87b\";\n}\n\n.icon-stop-circle-o:before {\n  content: \"\\e87c\";\n}\n\n.icon-sticky-note:before {\n  content: \"\\e87d\";\n}\n\n.icon-street-view:before {\n  content: \"\\e87e\";\n}\n\n.icon-strikethrough:before {\n  content: \"\\e87f\";\n}\n\n.icon-stumbleupon:before {\n  content: \"\\e880\";\n}\n\n.icon-subway:before {\n  content: \"\\e881\";\n}\n\n.icon-stumbleupon-circle:before {\n  content: \"\\e882\";\n}\n\n.icon-suitcase:before {\n  content: \"\\e883\";\n}\n\n.icon-subscript:before {\n  content: \"\\e884\";\n}\n\n.icon-sun-o:before {\n  content: \"\\e885\";\n}\n\n.icon-superpowers:before {\n  content: \"\\e886\";\n}\n\n.icon-tablet:before {\n  content: \"\\e887\";\n}\n\n.icon-table:before {\n  content: \"\\e888\";\n}\n\n.icon-support:before {\n  content: \"\\e889\";\n}\n\n.icon-superscript:before {\n  content: \"\\e88a\";\n}\n\n.icon-tasks:before {\n  content: \"\\e88b\";\n}\n\n.icon-tags:before {\n  content: \"\\e88c\";\n}\n\n.icon-tag:before {\n  content: \"\\e88d\";\n}\n\n.icon-tachometer:before {\n  content: \"\\e88e\";\n}\n\n.icon-telegram:before {\n  content: \"\\e88f\";\n}\n\n.icon-taxi:before {\n  content: \"\\e890\";\n}\n\n.icon-terminal:before {\n  content: \"\\e891\";\n}\n\n.icon-tencent-weibo:before {\n  content: \"\\e892\";\n}\n\n.icon-television:before {\n  content: \"\\e893\";\n}\n\n.icon-text-height:before {\n  content: \"\\e894\";\n}\n\n.icon-text-width:before {\n  content: \"\\e895\";\n}\n\n.icon-th-large:before {\n  content: \"\\e896\";\n}\n\n.icon-th-list:before {\n  content: \"\\e897\";\n}\n\n.icon-thermometer-0:before {\n  content: \"\\e898\";\n}\n\n.icon-th:before {\n  content: \"\\e899\";\n}\n\n.icon-themeisle:before {\n  content: \"\\e89a\";\n}\n\n.icon-thermometer-1:before {\n  content: \"\\e89b\";\n}\n\n.icon-thermometer-2:before {\n  content: \"\\e89c\";\n}\n\n.icon-thermometer-3:before {\n  content: \"\\e89d\";\n}\n\n.icon-thermometer-4:before {\n  content: \"\\e89e\";\n}\n\n.icon-thermometer-empty:before {\n  content: \"\\e89f\";\n}\n\n.icon-thermometer-full:before {\n  content: \"\\e8a0\";\n}\n\n.icon-thermometer-half:before {\n  content: \"\\e8a1\";\n}\n\n.icon-thumb-tack:before {\n  content: \"\\e8a2\";\n}\n\n.icon-thermometer-three-quarters:before {\n  content: \"\\e8a3\";\n}\n\n.icon-thermometer-quarter:before {\n  content: \"\\e8a4\";\n}\n\n.icon-thermometer:before {\n  content: \"\\e8a5\";\n}\n\n.icon-thumbs-down:before {\n  content: \"\\e8a6\";\n}\n\n.icon-times-circle:before {\n  content: \"\\e8a7\";\n}\n\n.icon-thumbs-up:before {\n  content: \"\\e8a8\";\n}\n\n.icon-ticket:before {\n  content: \"\\e8a9\";\n}\n\n.icon-thumbs-o-down:before {\n  content: \"\\e8aa\";\n}\n\n.icon-thumbs-o-up:before {\n  content: \"\\e8ab\";\n}\n\n.icon-times-circle-o:before {\n  content: \"\\e8ac\";\n}\n\n.icon-times-rectangle-o:before {\n  content: \"\\e8ad\";\n}\n\n.icon-times-rectangle:before {\n  content: \"\\e8ae\";\n}\n\n.icon-times:before {\n  content: \"\\e8af\";\n}\n\n.icon-tint:before {\n  content: \"\\e8b0\";\n}\n\n.icon-toggle-left:before {\n  content: \"\\e8b1\";\n}\n\n.icon-toggle-down:before {\n  content: \"\\e8b2\";\n}\n\n.icon-toggle-off:before {\n  content: \"\\e8b3\";\n}\n\n.icon-toggle-right:before {\n  content: \"\\e8b4\";\n}\n\n.icon-toggle-on:before {\n  content: \"\\e8b5\";\n}\n\n.icon-toggle-up:before {\n  content: \"\\e8b6\";\n}\n\n.icon-transgender-alt:before {\n  content: \"\\e8b7\";\n}\n\n.icon-trademark:before {\n  content: \"\\e8b8\";\n}\n\n.icon-train:before {\n  content: \"\\e8b9\";\n}\n\n.icon-trash-o:before {\n  content: \"\\e8ba\";\n}\n\n.icon-trash:before {\n  content: \"\\e8bb\";\n}\n\n.icon-transgender:before {\n  content: \"\\e8bc\";\n}\n\n.icon-tree:before {\n  content: \"\\e8bd\";\n}\n\n.icon-try:before {\n  content: \"\\e8be\";\n}\n\n.icon-trello:before {\n  content: \"\\e8bf\";\n}\n\n.icon-trophy:before {\n  content: \"\\e8c0\";\n}\n\n.icon-tty:before {\n  content: \"\\e8c1\";\n}\n\n.icon-truck:before {\n  content: \"\\e8c2\";\n}\n\n.icon-tripadvisor:before {\n  content: \"\\e8c3\";\n}\n\n.icon-tumblr-square:before {\n  content: \"\\e8c4\";\n}\n\n.icon-turkish-lira:before {\n  content: \"\\e8c5\";\n}\n\n.icon-tumblr:before {\n  content: \"\\e8c6\";\n}\n\n.icon-tv:before {\n  content: \"\\e8c7\";\n}\n\n.icon-twitter:before {\n  content: \"\\e8c8\";\n}\n\n.icon-twitter-square:before {\n  content: \"\\e8c9\";\n}\n\n.icon-twitch:before {\n  content: \"\\e8ca\";\n}\n\n.icon-underline:before {\n  content: \"\\e8cb\";\n}\n\n.icon-umbrella:before {\n  content: \"\\e8cc\";\n}\n\n.icon-undo:before {\n  content: \"\\e8cd\";\n}\n\n.icon-unlink:before {\n  content: \"\\e8ce\";\n}\n\n.icon-university:before {\n  content: \"\\e8cf\";\n}\n\n.icon-universal-access:before {\n  content: \"\\e8d0\";\n}\n\n.icon-unlock-alt:before {\n  content: \"\\e8d1\";\n}\n\n.icon-unlock:before {\n  content: \"\\e8d2\";\n}\n\n.icon-upload:before {\n  content: \"\\e8d3\";\n}\n\n.icon-unsorted:before {\n  content: \"\\e8d4\";\n}\n\n.icon-usd:before {\n  content: \"\\e8d5\";\n}\n\n.icon-usb:before {\n  content: \"\\e8d6\";\n}\n\n.icon-user-circle:before {\n  content: \"\\e8d7\";\n}\n\n.icon-user-o:before {\n  content: \"\\e8d8\";\n}\n\n.icon-user-circle-o:before {\n  content: \"\\e8d9\";\n}\n\n.icon-user-plus:before {\n  content: \"\\e8da\";\n}\n\n.icon-user-md:before {\n  content: \"\\e8db\";\n}\n\n.icon-user-secret:before {\n  content: \"\\e8dc\";\n}\n\n.icon-user:before {\n  content: \"\\e8dd\";\n}\n\n.icon-user-times:before {\n  content: \"\\e8de\";\n}\n\n.icon-users:before {\n  content: \"\\e8df\";\n}\n\n.icon-vcard-o:before {\n  content: \"\\e8e0\";\n}\n\n.icon-vcard:before {\n  content: \"\\e8e1\";\n}\n\n.icon-venus:before {\n  content: \"\\e8e2\";\n}\n\n.icon-venus-mars:before {\n  content: \"\\e8e3\";\n}\n\n.icon-venus-double:before {\n  content: \"\\e8e4\";\n}\n\n.icon-viadeo-square:before {\n  content: \"\\e8e5\";\n}\n\n.icon-viacoin:before {\n  content: \"\\e8e6\";\n}\n\n.icon-viadeo:before {\n  content: \"\\e8e7\";\n}\n\n.icon-video-camera:before {\n  content: \"\\e8e8\";\n}\n\n.icon-vimeo-square:before {\n  content: \"\\e8e9\";\n}\n\n.icon-vine:before {\n  content: \"\\e8ea\";\n}\n\n.icon-vimeo:before {\n  content: \"\\e8eb\";\n}\n\n.icon-vk:before {\n  content: \"\\e8ec\";\n}\n\n.icon-volume-control-phone:before {\n  content: \"\\e8ed\";\n}\n\n.icon-volume-off:before {\n  content: \"\\e8ee\";\n}\n\n.icon-volume-down:before {\n  content: \"\\e8ef\";\n}\n\n.icon-warning:before {\n  content: \"\\e8f0\";\n}\n\n.icon-volume-up:before {\n  content: \"\\e8f1\";\n}\n\n.icon-wechat:before {\n  content: \"\\e8f2\";\n}\n\n.icon-weibo:before {\n  content: \"\\e8f3\";\n}\n\n.icon-whatsapp:before {\n  content: \"\\e8f4\";\n}\n\n.icon-weixin:before {\n  content: \"\\e8f5\";\n}\n\n.icon-wheelchair-alt:before {\n  content: \"\\e8f6\";\n}\n\n.icon-wheelchair:before {\n  content: \"\\e8f7\";\n}\n\n.icon-wikipedia-w:before {\n  content: \"\\e8f8\";\n}\n\n.icon-wifi:before {\n  content: \"\\e8f9\";\n}\n\n.icon-window-close:before {\n  content: \"\\e8fa\";\n}\n\n.icon-window-close-o:before {\n  content: \"\\e8fb\";\n}\n\n.icon-window-maximize:before {\n  content: \"\\e8fc\";\n}\n\n.icon-window-minimize:before {\n  content: \"\\e8fd\";\n}\n\n.icon-window-restore:before {\n  content: \"\\e8fe\";\n}\n\n.icon-windows:before {\n  content: \"\\e8ff\";\n}\n\n.icon-won:before {\n  content: \"\\e900\";\n}\n\n.icon-wordpress:before {\n  content: \"\\e901\";\n}\n\n.icon-wpexplorer:before {\n  content: \"\\e902\";\n}\n\n.icon-wpbeginner:before {\n  content: \"\\e903\";\n}\n\n.icon-xing-square:before {\n  content: \"\\e904\";\n}\n\n.icon-wrench:before {\n  content: \"\\e905\";\n}\n\n.icon-wpforms:before {\n  content: \"\\e906\";\n}\n\n.icon-y-combinator:before {\n  content: \"\\e907\";\n}\n\n.icon-xing:before {\n  content: \"\\e908\";\n}\n\n.icon-y-combinator-square:before {\n  content: \"\\e909\";\n}\n\n.icon-yahoo:before {\n  content: \"\\e90a\";\n}\n\n.icon-yc:before {\n  content: \"\\e90b\";\n}\n\n.icon-yc-square:before {\n  content: \"\\e90c\";\n}\n\n.icon-yen:before {\n  content: \"\\e90d\";\n}\n\n.icon-yelp:before {\n  content: \"\\e90e\";\n}\n\n.icon-yoast:before {\n  content: \"\\e90f\";\n}\n\n.icon-youtube-play:before {\n  content: \"\\e910\";\n}\n\n.icon-youtube-square:before {\n  content: \"\\e911\";\n}\n\n.icon-youtube:before {\n  content: \"\\e912\";\n}\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/iconfont/iconfont.js",
    "content": "!function(m){var q,v='<svg><symbol id=\"icon-bars\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 768v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-73.142857q0-14.857143 10.857143-25.714286t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z m0-292.571429v73.142858q0 14.857143-10.857143 25.714285t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143T73.142857 548.571429V475.428571q0-14.857143 10.857143-25.714285t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714285z m0-292.571428v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143T73.142857 256V182.857143q0-14.857143 10.857143-25.714286t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-calendar\" viewBox=\"0 0 1024 1024\"><path d=\"M107.352983 950.857143h164.571428v-164.571429H107.352983v164.571429z m201.142857 0h182.857143v-164.571429H308.49584v164.571429z m-201.142857-201.142857h164.571428V566.857143H107.352983v182.857143z m201.142857 0h182.857143V566.857143H308.49584v182.857143zM107.352983 530.285714h164.571428V365.714286H107.352983v164.571428z m420.571428 420.571429h182.857143v-164.571429H527.924411v164.571429zM308.49584 530.285714h182.857143V365.714286H308.49584v164.571428z m438.857143 420.571429h164.571428v-164.571429h-164.571428v164.571429z m-219.428572-201.142857h182.857143V566.857143H527.924411v182.857143zM326.781554 256V91.428571q0-7.428571-5.428571-12.857142T308.49584 73.142857h-36.571429q-7.428571 0-12.857142 5.428572T253.638697 91.428571v164.571429q0 7.428571 5.428572 12.857143T271.924411 274.285714h36.571429q7.428571 0 12.857143-5.428571T326.781554 256z m420.571429 493.714286h164.571428V566.857143h-164.571428v182.857143zM527.924411 530.285714h182.857143V365.714286H527.924411v164.571428z m219.428572 0h164.571428V365.714286h-164.571428v164.571428z m18.285714-274.285714V91.428571q0-7.428571-5.428571-12.857142T747.352983 73.142857h-36.571429q-7.428571 0-12.857143 5.428572T692.49584 91.428571v164.571429q0 7.428571 5.428571 12.857143t12.857143 5.428571h36.571429q7.428571 0 12.857143-5.428571t5.428571-12.857143z m219.428572-36.571429v731.428572q0 29.714286-21.714286 51.428571t-51.428572 21.714286H107.352983q-29.714286 0-51.428572-21.714286t-21.714285-51.428571V219.428571q0-29.714286 21.714285-51.428571t51.428572-21.714286h73.142857v-54.857143q0-37.714286 26.857143-64.571428T271.924411 0h36.571429q37.714286 0 64.571429 26.857143t26.857142 64.571428v54.857143h219.428572v-54.857143q0-37.714286 26.857143-64.571428t64.571428-26.857143h36.571429q37.714286 0 64.571428 26.857143t26.857143 64.571428v54.857143h73.142857q29.714286 0 51.428572 21.714286t21.714286 51.428571z\"  ></path></symbol><symbol id=\"icon-camera\" viewBox=\"0 0 1097 1024\"><path d=\"M548.571429 384q68 0 116.285714 48.285714T713.142857 548.571429t-48.285714 116.285714T548.571429 713.142857t-116.285715-48.285714T384 548.571429t48.285714-116.285715T548.571429 384z m402.285714-237.714286q60.571429 0 103.428571 42.857143t42.857143 103.428572v512q0 60.571429-42.857143 103.428571t-103.428571 42.857143H146.285714q-60.571429 0-103.428571-42.857143T0 804.571429V292.571429q0-60.571429 42.857143-103.428572t103.428571-42.857143h128l29.142857-77.714285q10.857143-28 39.714286-48.285715T402.285714 0h292.571429q30.285714 0 59.142857 20.285714T793.714286 68.571429l29.142857 77.714285h128zM548.571429 804.571429q105.714286 0 180.857142-75.142858T804.571429 548.571429t-75.142858-180.857143T548.571429 292.571429 367.714286 367.714286 292.571429 548.571429t75.142857 180.857142T548.571429 804.571429z\"  ></path></symbol><symbol id=\"icon-check\" viewBox=\"0 0 1024 1024\"><path d=\"M954.857143 323.428571q0 22.857143-16 38.857143l-413.714286 413.714286-77.714286 77.714286q-16 16-38.857142 16t-38.857143-16l-77.714286-77.714286-206.857143-206.857143q-16-16-16-38.857143t16-38.857143l77.714286-77.714285q16-16 38.857143-16t38.857143 16l168 168.571428 374.857142-375.428571q16-16 38.857143-16t38.857143 16l77.714286 77.714286q16 16 16 38.857142z\"  ></path></symbol><symbol id=\"icon-check-square-o\" viewBox=\"0 0 1024 1024\"><path d=\"M841.142857 531.428571v181.714286q0 68-48.285714 116.285714T676.571429 877.714286H201.142857q-68 0-116.285714-48.285715T36.571429 713.142857V237.714286q0-68 48.285714-116.285715T201.142857 73.142857h475.428572q36 0 66.857142 14.285714 8.571429 4 10.285715 13.142858 1.714286 9.714286-5.142857 16.571428l-28 28q-5.714286 5.714286-13.142858 5.714286-1.714286 0-5.142857-1.142857-13.142857-3.428571-25.714285-3.428572H201.142857q-37.714286 0-64.571428 26.857143t-26.857143 64.571429v475.428571q0 37.714286 26.857143 64.571429t64.571428 26.857143h475.428572q37.714286 0 64.571428-26.857143t26.857143-64.571429V568q0-7.428571 5.142857-12.571429l36.571429-36.571428q5.714286-5.714286 13.142857-5.714286 3.428571 0 6.857143 1.714286 11.428571 4.571429 11.428571 16.571428z m132-279.428571l-465.142857 465.142857q-13.714286 13.714286-32.571429 13.714286t-32.571428-13.714286L197.142857 471.428571q-13.714286-13.714286-13.714286-32.571428t13.714286-32.571429l62.857143-62.857143q13.714286-13.714286 32.571429-13.714285t32.571428 13.714285l150.285714 150.285715 369.714286-369.714286q13.714286-13.714286 32.571429-13.714286t32.571428 13.714286l62.857143 62.857143q13.714286 13.714286 13.714286 32.571428t-13.714286 32.571429z\"  ></path></symbol><symbol id=\"icon-clock-o\" viewBox=\"0 0 1024 1024\"><path d=\"M585.142857 310.857143v256q0 8-5.142857 13.142857t-13.142857 5.142857H384q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h128V310.857143q0-8 5.142857-13.142857t13.142857-5.142857h36.571429q8 0 13.142857 5.142857t5.142857 13.142857z m237.714286 201.142857q0-84.571429-41.714286-156t-113.142857-113.142857-156-41.714286-156 41.714286-113.142857 113.142857-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286 156-41.714286 113.142857-113.142857 41.714286-156z m128 0q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-500px\" viewBox=\"0 0 1024 1024\"><path d=\"M873.714286 884l-3.428572 3.428571q-64.571429 64.571429-148 100-88 36.571429-181.142857 36.571429-94.285714 0-181.142857-36.571429-84.571429-36-148-100-64.571429-64-100-147.428571-24-58.857143-30.857143-108-2.285714-16 27.428572-20.571429 29.142857-4.571429 32 11.428572 0.571429 0.571429 0.571428 2.285714 10.285714 51.428571 26.285714 90.857143 28.571429 70.857143 86.857143 129.142857 56 56 129.142857 86.857143 75.428571 32 157.714286 32 81.714286 0 157.714286-32 73.142857-31.428571 128.571428-86.857143l3.428572-3.428571q5.714286-5.714286 14.285714-3.428572 6.857143 1.714286 18.857143 12.571429 20.571429 21.142857 9.714286 33.142857zM604 532.571429l-37.714286 37.714285 36 36q12 12-4 28-9.714286 9.714286-18.285714 9.714286-5.714286 0-10.857143-5.714286l-35.428571-34.857143-37.714286 37.714286q-2.857143 2.857143-8.571429 2.857143-8.571429 0-17.714285-9.142857l-1.142857-1.142857q-10.285714-8.571429-10.285715-16.571429 0-4 4.571429-9.714286l37.714286-37.142857-37.714286-37.714285q-9.142857-9.142857 8-25.714286 10.285714-10.285714 17.714286-10.285714 3.428571 0 7.428571 2.857142l37.142857 37.714286 37.142857-37.142857q10.285714-9.714286 27.428572 7.428571 15.428571 15.428571 6.285714 25.142858z m269.142857 32.571428q0 67.428571-26.285714 130.285714-25.714286 60-72 106.285715-45.714286 45.714286-106.857143 72t-130.285714 26.285714-130.285715-26.285714-106.857142-72q-46.857143-46.857143-71.428572-106.285715-8.571429-18.857143-8.571428-22.857142h-0.571429q-5.142857-15.428571 24.571429-25.142858 28.571429-9.142857 34.285714 6.857143 21.142857 56.571429 55.428571 95.428572h0.571429V554.857143q1.714286-77.714286 58.285714-132.571429 60-58.857143 144.571429-58.857143 84 0 143.428571 58.857143t59.428572 142.285715q0 84-59.714286 143.428571T537.714286 767.428571q-33.142857 0-64-9.142857-16-6.285714-7.428572-34.857143 9.142857-29.142857 25.142857-24.571428l8 1.714286q8 1.714286 18.857143 3.428571t17.142857 1.714286q59.428571 0 100.571429-40.857143t41.142857-99.714286q0-57.714286-41.142857-97.714286-40.571429-40.571429-100-40.571428-61.142857 0-101.714286 45.714286-36.571429 41.142857-36.571428 91.428571v236q62.857143 38.285714 138.285714 38.285714 54.857143 0 105.714286-20.857143t89.142857-59.142857 59.142857-88.571428 20.857143-104.571429q0-113.142857-80.571429-193.714286-80-80-193.714285-80-114.285714 0-194.285715 80-30.285714 30.285714-44 49.714286l-1.142857 1.142857q-4.571429 6.285714-7.428571 8.857143t-12.285715 5.428572-22-1.714286q-12-2.857143-20.857142-9.428572T225.714286 410.285714V21.714286q0-8.571429 6-15.142857T247.428571 0h501.142858q17.142857 0 17.142857 31.428571t-17.142857 31.428572H285.142857v276h0.571429q22.857143-24 58.285714-48t61.714286-34.857143q62.285714-26.285714 132-26.285714 69.142857 0 130.285714 26.285714t106.857143 72q46.285714 46.285714 72 106.285714 26.285714 64 26.285714 130.857143z m-17.714286-332q5.142857 4.571429 5.142858 10.285714t-3.142858 10.285715-9.428571 12q-14.857143 14.857143-22.285714 14.857143-5.142857 0-9.142857-4-60.571429-52-118.285715-76-73.142857-32-157.714285-32-76 0-149.714286 28-15.428571 5.714286-25.714286-21.142858-5.142857-14.285714-4.571428-21.714285 1.714286-9.142857 9.142857-11.428572 74.285714-32.571429 170.857143-32.571428 93.714286 0 180.571428 36.571428 78.285714 33.142857 134.285714 86.857143z\"  ></path></symbol><symbol id=\"icon-address-book-o\" viewBox=\"0 0 1024 1024\"><path d=\"M624 368q0 61.142857-43.714286 104.571429T475.428571 516t-104.857142-43.428571T326.857143 368q0-61.714286 43.714286-105.142857T475.428571 219.428571t104.857143 43.428572 43.714286 105.142857z m-27.428571 125.714286q26.285714 0 47.142857 9.714285t34.285714 27.142858 22.571429 38.285714 13.714285 46.285714 6.571429 47.142857 2 45.142857q0 38.285714-22.571429 67.714286T640 804.571429H310.857143q-37.714286 0-60.285714-29.428572T228 707.428571q0-27.428571 2.571429-53.428571T241.142857 597.714286t20.857143-52.285715 36-36.857142 53.428571-14.857143h2.857143q4 2.285714 18.285715 11.142857t20.285714 12 18.857143 9.714286 21.142857 9.142857 20 5.142857T475.428571 543.428571t22.571429-2.571428 20-5.142857 21.142857-9.142857 18.857143-9.714286 20.285714-12 18.285715-11.142857z m390.857142-146.285715q0 7.428571-5.428571 12.857143T969.142857 365.714286h-54.857143v73.142857h54.857143q7.428571 0 12.857143 5.428571t5.428571 12.857143v109.714286q0 7.428571-5.428571 12.857143t-12.857143 5.428571h-54.857143v73.142857h54.857143q7.428571 0 12.857143 5.428572t5.428571 12.857143v109.714285q0 7.428571-5.428571 12.857143t-12.857143 5.428572h-54.857143v128q0 37.714286-26.857143 64.571428t-64.571428 26.857143H128q-37.714286 0-64.571429-26.857143T36.571429 932.571429V91.428571Q36.571429 53.714286 63.428571 26.857143T128 0h694.857143q37.714286 0 64.571428 26.857143t26.857143 64.571428v128h54.857143q7.428571 0 12.857143 5.428572t5.428571 12.857143v109.714285z m-146.285714 585.142858V91.428571q0-7.428571-5.428571-12.857142T822.857143 73.142857H128q-7.428571 0-12.857143 5.428572T109.714286 91.428571v841.142858q0 7.428571 5.428571 12.857142t12.857143 5.428572h694.857143q7.428571 0 12.857143-5.428572t5.428571-12.857142z\"  ></path></symbol><symbol id=\"icon-address-book\" viewBox=\"0 0 1024 1024\"><path d=\"M722.857143 707.428571q0-32.571429-3.142857-61.142857t-12-57.428571-22.571429-49.142857-36.571428-33.142857-52-12.857143q-3.428571 2.285714-19.142858 11.714285T553.142857 519.428571t-23.142857 11.428572-28 9.714286-26.571429 2.857142-26.571428-2.857142-28-9.714286-23.142857-11.428572-24.285715-14T354.285714 493.714286q-29.142857 0-52 12.857143t-36.571428 33.142857-22.571429 49.142857-12 57.428571-3.142857 61.142857q0 41.714286 24 69.428572t58.857143 27.714286h329.142857q34.857143 0 58.857143-27.714286t24-69.428572z m-98.857143-339.428571q0-61.714286-43.714286-105.142857T475.428571 219.428571t-104.857142 43.428572T326.857143 368q0 61.142857 43.714286 104.571429T475.428571 516t104.857143-43.428571 43.714286-104.571429z m363.428571 308.571429v109.714285q0 8-5.142857 13.142857t-13.142857 5.142858h-54.857143v128q0 37.714286-26.857143 64.571428t-64.571428 26.857143H128q-37.714286 0-64.571429-26.857143T36.571429 932.571429V91.428571Q36.571429 53.714286 63.428571 26.857143T128 0h694.857143q37.714286 0 64.571428 26.857143t26.857143 64.571428v128h54.857143q8 0 13.142857 5.142858t5.142857 13.142857v109.714285q0 8-5.142857 13.142858t-13.142857 5.142857h-54.857143v73.142857h54.857143q8 0 13.142857 5.142857t5.142857 13.142857v109.714286q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143v73.142857h54.857143q8 0 13.142857 5.142857t5.142857 13.142858z\"  ></path></symbol><symbol id=\"icon-address-card-o\" viewBox=\"0 0 1170 1024\"><path d=\"M585.142857 646.285714q0 36.571429-21.142857 60.857143t-52 24.285714H219.428571q-30.857143 0-52-24.285714T146.285714 646.285714t5.142857-67.142857 16.857143-58.857143 34.571429-44.571428 55.428571-16.285715q3.428571 2.285714 17.142857 10.285715t21.428572 12.285714T317.142857 492t24.571429 8.285714 24 2.571429 24-2.571429 24.571428-8.285714 20.285715-10T456 469.714286t17.142857-10.285715q32.571429 0 55.428572 16.285715t34.571428 44.571428 16.857143 58.857143 5.142857 67.142857zM495.428571 349.142857q0 53.714286-38 91.714286T365.714286 478.857143t-91.714286-38T236 349.142857t38-91.714286T365.714286 219.428571t91.714285 38T495.428571 349.142857z m528.571429 254.285714v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-329.142857q-8 0-13.142858-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142858-5.142857h329.142857q8 0 13.142857 5.142857t5.142857 13.142857z m0-144v32q0 8.571429-6 14.571429T1003.428571 512h-324.571428q-8.571429 0-14.571429-6T658.285714 491.428571v-32q0-8.571429 6-14.571428T678.857143 438.857143h324.571428q8.571429 0 14.571429 6T1024 459.428571z m0-148.571428v36.571428q0 8-5.142857 13.142858t-13.142857 5.142857h-329.142857q-8 0-13.142858-5.142857t-5.142857-13.142858v-36.571428q0-8 5.142857-13.142857t13.142858-5.142857h329.142857q8 0 13.142857 5.142857t5.142857 13.142857z m73.142857 548.571428V164.571429q0-7.428571-5.428571-12.857143T1078.857143 146.285714H91.428571q-7.428571 0-12.857142 5.428572T73.142857 164.571429v694.857142q0 7.428571 5.428572 12.857143t12.857142 5.428572h201.142858v-54.857143q0-8 5.142857-13.142857t13.142857-5.142857h36.571428q8 0 13.142858 5.142857t5.142857 13.142857v54.857143h438.857143v-54.857143q0-8 5.142857-13.142857t13.142857-5.142857h36.571428q8 0 13.142858 5.142857t5.142857 13.142857v54.857143h201.142857q7.428571 0 12.857143-5.428572t5.428571-12.857143z m73.142857-694.857142v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h987.428572q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-address-card\" viewBox=\"0 0 1170 1024\"><path d=\"M585.142857 646.285714q0-36.571429-5.142857-67.142857t-16.857143-58.857143-34.571428-44.571428-55.428572-16.285715q-3.428571 2.285714-17.142857 10.285715t-21.428571 12.285714T414.285714 492t-24.571428 8.285714-24 2.571429-24-2.571429-24.571429-8.285714-20.285714-10T275.428571 469.714286t-17.142857-10.285715q-32.571429 0-55.428571 16.285715t-34.571429 44.571428-16.857143 58.857143-5.142857 67.142857 21.142857 60.857143 52 24.285714h292.571429q30.857143 0 52-24.285714t21.142857-60.857143zM495.428571 349.142857q0-53.714286-38-91.714286T365.714286 219.428571t-91.714286 38T236 349.142857t38 91.714286T365.714286 478.857143t91.714285-38T495.428571 349.142857z m528.571429 290.857143v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857h-329.142857q-8 0-13.142858 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142858 5.142857h329.142857q8 0 13.142857-5.142857t5.142857-13.142857z m0-148.571429v-32q0-8.571429-6-14.571428T1003.428571 438.857143h-324.571428q-8.571429 0-14.571429 6T658.285714 459.428571v32q0 8.571429 6 14.571429T678.857143 512h324.571428q8.571429 0 14.571429-6T1024 491.428571z m0-144v-36.571428q0-8-5.142857-13.142857t-13.142857-5.142857h-329.142857q-8 0-13.142858 5.142857t-5.142857 13.142857v36.571428q0 8 5.142857 13.142858t13.142858 5.142857h329.142857q8 0 13.142857-5.142857t5.142857-13.142858z m146.285714-182.857142v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143h-201.142857v-54.857143q0-8-5.142857-13.142857t-13.142858-5.142857h-36.571428q-8 0-13.142857 5.142857t-5.142857 13.142857v54.857143H365.714286v-54.857143q0-8-5.142857-13.142857t-13.142858-5.142857h-36.571428q-8 0-13.142857 5.142857t-5.142857 13.142857v54.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h987.428572q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-adjust\" viewBox=\"0 0 1024 1024\"><path d=\"M512 822.857143V201.142857q-84.571429 0-156 41.714286T242.857143 356t-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286z m438.857143-310.857143q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-adn\" viewBox=\"0 0 1024 1024\"><path d=\"M512 355.428571l114.857143 174.857143H397.142857z m208.571429 302.857143h53.714285L512 263.428571l-262.285714 394.857143h53.714285l59.428572-91.428571h298.285714z m230.285714-146.285714q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-align-center\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 768v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H36.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-73.142857q0-14.857143 10.857143-25.714286t25.714286-10.857143h950.857142q14.857143 0 25.714286 10.857143t10.857143 25.714286z m-219.428571-219.428571v73.142857q0 14.857143-10.857143 25.714285t-25.714286 10.857143H256q-14.857143 0-25.714286-10.857143t-10.857143-25.714285V548.571429q0-14.857143 10.857143-25.714286t25.714286-10.857143h512q14.857143 0 25.714286 10.857143t10.857143 25.714286z m146.285714-219.428572v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V329.142857q0-14.857143 10.857143-25.714286t25.714286-10.857142h804.571428q14.857143 0 25.714286 10.857142t10.857143 25.714286z m-219.428572-219.428571v73.142857q0 14.857143-10.857142 25.714286t-25.714286 10.857142H329.142857q-14.857143 0-25.714286-10.857142t-10.857142-25.714286V109.714286q0-14.857143 10.857142-25.714286t25.714286-10.857143h365.714286q14.857143 0 25.714286 10.857143t10.857142 25.714286z\"  ></path></symbol><symbol id=\"icon-align-justify\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 768v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H36.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-73.142857q0-14.857143 10.857143-25.714286t25.714286-10.857143h950.857142q14.857143 0 25.714286 10.857143t10.857143 25.714286z m0-219.428571v73.142857q0 14.857143-10.857143 25.714285t-25.714286 10.857143H36.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714285V548.571429q0-14.857143 10.857143-25.714286t25.714286-10.857143h950.857142q14.857143 0 25.714286 10.857143t10.857143 25.714286z m0-219.428572v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H36.571429q-14.857143 0-25.714286-10.857143T0 402.285714V329.142857q0-14.857143 10.857143-25.714286t25.714286-10.857142h950.857142q14.857143 0 25.714286 10.857142t10.857143 25.714286z m0-219.428571v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857142H36.571429q-14.857143 0-25.714286-10.857142T0 182.857143V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h950.857142q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-align-left\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 768v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H36.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-73.142857q0-14.857143 10.857143-25.714286t25.714286-10.857143h950.857142q14.857143 0 25.714286 10.857143t10.857143 25.714286z m-219.428571-219.428571v73.142857q0 14.857143-10.857143 25.714285t-25.714286 10.857143H36.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714285V548.571429q0-14.857143 10.857143-25.714286t25.714286-10.857143h731.428571q14.857143 0 25.714286 10.857143t10.857143 25.714286z m146.285714-219.428572v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H36.571429q-14.857143 0-25.714286-10.857143T0 402.285714V329.142857q0-14.857143 10.857143-25.714286t25.714286-10.857142h877.714285q14.857143 0 25.714286 10.857142t10.857143 25.714286z m-219.428572-219.428571v73.142857q0 14.857143-10.857142 25.714286t-25.714286 10.857142H36.571429q-14.857143 0-25.714286-10.857142T0 182.857143V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h658.285714q14.857143 0 25.714286 10.857143t10.857142 25.714286z\"  ></path></symbol><symbol id=\"icon-align-right\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 768v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H36.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-73.142857q0-14.857143 10.857143-25.714286t25.714286-10.857143h950.857142q14.857143 0 25.714286 10.857143t10.857143 25.714286z m0-219.428571v73.142857q0 14.857143-10.857143 25.714285t-25.714286 10.857143H256q-14.857143 0-25.714286-10.857143t-10.857143-25.714285V548.571429q0-14.857143 10.857143-25.714286t25.714286-10.857143h731.428571q14.857143 0 25.714286 10.857143t10.857143 25.714286z m0-219.428572v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V329.142857q0-14.857143 10.857143-25.714286t25.714286-10.857142h877.714285q14.857143 0 25.714286 10.857142t10.857143 25.714286z m0-219.428571v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857142H329.142857q-14.857143 0-25.714286-10.857142t-10.857142-25.714286V109.714286q0-14.857143 10.857142-25.714286t25.714286-10.857143h658.285714q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-amazon\" viewBox=\"0 0 1024 1024\"><path d=\"M886.285714 843.428571q8.571429-3.428571 14.857143-1.714285t6.285714 10-8.571428 19.142857q-7.428571 9.142857-25.142857 24.857143t-54.571429 38.857143-80.571428 42.285714-107.428572 33.142857T500 1024q-68 0-136-17.714286t-119.428571-43.714285-98.571429-59.428572-75.714286-60-48-50q-4.571429-5.142857-5.714285-9.428571t0.571428-6.857143 4.571429-4 6.571428-1.142857T34.857143 774.285714q109.714286 66.857143 171.428571 94.857143 222.285714 100.571429 456.571429 51.428572 108.571429-22.857143 223.428571-77.142858z m118.285715-65.714285q6.285714 9.142857 1.428571 39.714285T989.714286 876q-19.428571 47.428571-48.571429 70.857143-9.714286 8-14.857143 5.142857t0-13.714286q12-25.714286 25.428572-69.428571t3.714285-56.285714q-2.857143-4-8.857142-6.571429t-15.428572-3.428571-16.857143-1.428572-20 0-18 1.142857-17.714285 1.714286-12.857143 1.142857q-3.428571 0.571429-7.428572 0.857143t-6.285714 0.571429-4.857143 0.571428-4 0.285714h-5.714286l-1.714285-0.285714-1.142857-0.857143-0.857143-1.714285q-3.428571-9.142857 26.857143-22.857143t58.857142-17.142857q26.285714-4 61.714286-0.571429t43.428572 13.714286z m-225.142858-253.142857q0 17.714286 7.714286 36.571428t18.285714 33.142857 21.428572 26.285715 18.857143 18.285714l7.428571 6.285714-129.714286 128q-22.857143-21.142857-45.142857-43.142857t-33.142857-33.428571l-10.857143-11.428572q-6.285714-6.285714-14.285714-18.857143-21.714286 33.714286-55.714286 58.571429T491.428571 761.142857t-80 13.142857-78.571428-12-67.142857-37.428571-47.428572-64.571429T200.571429 567.428571q0-48 16-88t41.142857-66.571428 60.857143-47.428572 70-32.571428T462.857143 313.142857t68.285714-10.571428 56.857143-3.714286V226.285714q0-37.142857-12-55.428571-19.428571-30.285714-69.142857-30.285714-3.428571 0-9.428572 0.571428T474.285714 148t-32 16.857143-32 34-27.428571 54.857143l-168-15.428572q0-34.285714 12.571428-68t38.285715-64.571428 61.714285-54.285715 86.571429-37.428571T522.857143 0q57.142857 0 103.428571 14.285714t74 35.142857 46.285715 47.428572 25.714285 49.142857T779.428571 188v336.571429z m-384 12q0 49.142857 40 76 37.714286 25.142857 79.428572 12.571428 48-14.285714 65.142857-70.285714 8-25.714286 8-57.714286V404.571429q-33.714286 1.142857-63.428571 6.857142t-60.857143 19.142858-49.714286 40.571428T395.428571 536.571429z\"  ></path></symbol><symbol id=\"icon-ambulance\" viewBox=\"0 0 1097 1024\"><path d=\"M365.714286 804.571429q0-30.285714-21.428572-51.714286T292.571429 731.428571t-51.714286 21.428572T219.428571 804.571429t21.428572 51.714285T292.571429 877.714286t51.714285-21.428572T365.714286 804.571429zM146.285714 512h219.428572V365.714286H275.428571q-8 1.142857-12.571428 5.142857L151.428571 482.285714q-4 6.857143-5.142857 12.571429v17.142857z m731.428572 292.571429q0-30.285714-21.428572-51.714286T804.571429 731.428571t-51.714286 21.428572-21.428572 51.714286 21.428572 51.714285 51.714286 21.428572 51.714285-21.428572 21.428572-51.714285z m73.142857-384V310.857143q0-8-5.142857-13.142857t-13.142857-5.142857h-128V164.571429q0-8-5.142858-13.142858t-13.142857-5.142857h-109.714285q-8 0-13.142858 5.142857t-5.142857 13.142858v128H530.285714q-8 0-13.142857 5.142857t-5.142857 13.142857v109.714286q0 8 5.142857 13.142857t13.142857 5.142857h128v128q0 8 5.142857 13.142857t13.142858 5.142857h109.714285q8 0 13.142857-5.142857t5.142858-13.142857V438.857143h128q8 0 13.142857-5.142857t5.142857-13.142857z m146.285714-310.857143v658.285714q0 14.857143-10.857143 25.714286t-25.714285 10.857143h-109.714286q0 60.571429-42.857143 103.428571t-103.428571 42.857143-103.428572-42.857143-42.857143-103.428571H438.857143q0 60.571429-42.857143 103.428571t-103.428571 42.857143-103.428572-42.857143-42.857143-103.428571H73.142857q-14.857143 0-25.714286-10.857143t-10.857142-25.714286 10.857142-25.714286 25.714286-10.857143V493.714286q0-14.857143 7.428572-33.142857t18.285714-29.142858l113.142857-113.142857q10.857143-10.857143 29.142857-18.285714t33.142857-7.428571h91.428572V109.714286q0-14.857143 10.857143-25.714286t25.714285-10.857143h658.285715q14.857143 0 25.714285 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-american-sign-language-interpreting\" viewBox=\"0 0 1316 1024\"><path d=\"M589.714286 548.571429q-33.714286-1.142857-48-31.428572-9.714286-19.428571-27.428572-30.571428T475.428571 475.428571q-30.285714 0-51.714285 21.428572T402.285714 548.571429q0 32 20.571429 50.857142l5.714286 4.571429q19.428571 17.714286 46.857142 17.714286 21.142857 0 38.857143-11.142857t27.428572-30.571429q14.285714-30.285714 48-31.428571z m324.571428-73.142858q0-32-20.571428-50.857142l-5.714286-4.571429q-19.428571-17.714286-46.857143-17.714286-21.142857 0-38.857143 11.142857t-27.428571 30.571429q-14.285714 30.285714-48 31.428571 33.714286 1.142857 48 31.428572 9.714286 19.428571 27.428571 30.571428t38.857143 11.142858q30.285714 0 51.714286-21.428572T914.285714 475.428571z m-243.428571-126.285714q-9.714286 20-31.428572 27.428572t-41.714285-2.285715q-35.428571-17.714286-76.571429-17.714285-29.142857 0-56.571428 9.714285 1.714286 0 5.428571-0.285714t5.428571-0.285714q52.571429 0 97.428572 28.571428T640.571429 470.285714q9.714286 20.571429 2 42T614.285714 543.428571q-10.285714 5.142857-22.285714 5.142858 12 0 22.285714 5.142857 20.571429 9.714286 28.285715 31.142857t-2 42q-22.857143 47.428571-67.714286 76T475.428571 731.428571h-3.428571q-9.142857-1.142857-25.142857-2.285714l-165.714286-15.428571-136.571428 68.571428q-8 4-16.571429 4-22.857143 0-32.571429-20L4 583.428571q-6.285714-13.142857-2.285714-27.142857T18.285714 534.857143l119.428572-68 84.571428-152.571429q9.714286-88.571429 52.285715-166.571428T386.285714 12.571429Q404-1.714286 426.571429 0.285714T463.428571 20t12.285715 40-19.714286 37.142857q-40 33.714286-66.857143 73.142857 70.285714-48 152.571429-57.714285 22.857143-2.857143 40.857143 10.857142t20.285714 36.571429q2.857143 22.857143-10.857143 40.857143T555.428571 221.142857q-48 5.714286-90.857142 31.428572 26.285714-5.714286 56.571428-5.714286 65.714286 0 124.571429 28.571428 20.571429 10.285714 28 31.714286t-2.857143 42z m550.285714-91.428571l91.428572 182.857143q6.285714 13.142857 2.285714 27.142857t-16.571429 21.428571l-119.428571 68-84.571429 152.571429q-9.714286 88.571429-52.285714 166.571428T930.285714 1011.428571q-14.857143 12.571429-34.857143 12.571429-25.714286 0-42.285714-20-14.285714-17.714286-12.285714-40t19.714286-37.142857q40-33.714286 66.857142-73.142857-70.285714 48-152.571428 57.714285-2.285714 0.571429-6.857143 0.571429-20.571429 0-36.285714-13.714286t-18-34.285714q-2.857143-22.857143 10.857143-40.857143t36.571428-20.285714q48-5.714286 90.857143-31.428572-26.285714 5.714286-56.571429 5.714286-65.714286 0-124.571428-28.571428-20.571429-10.285714-28-31.714286t2.857143-42q9.714286-20 31.428571-27.428572t41.714286 2.285715q35.428571 17.714286 76.571428 17.714285 29.142857 0 56.571429-9.714285-1.714286 0-5.428571 0.285714t-5.428572 0.285714q-52.571429 0-97.428571-28.571428T676 553.714286q-9.714286-20.571429-2-42T702.285714 480.571429q10.285714-5.142857 22.285715-5.142858-12 0-22.285715-5.142857-20.571429-9.714286-28.285714-31.142857t2-42q22.857143-47.428571 67.714286-76t97.428571-28.571428h4q8 1.142857 24 2.285714l166.285714 15.428571 136.571429-68.571428q8-4 16.571429-4 22.857143 0 32.571428 20z\"  ></path></symbol><symbol id=\"icon-anchor\" viewBox=\"0 0 1024 1024\"><path d=\"M548.571429 146.285714q0-14.857143-10.857143-25.714285t-25.714286-10.857143-25.714286 10.857143-10.857143 25.714285 10.857143 25.714286 25.714286 10.857143 25.714286-10.857143 10.857143-25.714286z m475.428571 530.285715v201.142857q0 12.571429-11.428571 17.142857-4.571429 1.142857-6.857143 1.142857-6.857143 0-13.142857-5.142857l-53.142858-53.142857q-68 81.714286-182 129.428571T512 1014.857143t-245.428571-47.714286T84.571429 837.714286l-53.142858 53.142857q-5.142857 5.142857-13.142857 5.142857-2.285714 0-6.857143-1.142857-11.428571-4.571429-11.428571-17.142857v-201.142857q0-8 5.142857-13.142858t13.142857-5.142857h201.142857q12.571429 0 17.142858 11.428572 4.571429 10.857143-4 20l-57.142858 57.142857q38.285714 52 108.285715 87.714286T438.857143 881.714286V512H329.142857q-14.857143 0-25.714286-10.857143t-10.857142-25.714286V402.285714q0-14.857143 10.857142-25.714285t25.714286-10.857143h109.714286V272.571429q-33.142857-19.428571-53.142857-52.857143T365.714286 146.285714q0-60.571429 42.857143-103.428571T512 0t103.428571 42.857143 42.857143 103.428571q0 40-20 73.428572t-53.142857 52.857143v93.142857h109.714286q14.857143 0 25.714286 10.857143t10.857142 25.714285v73.142857q0 14.857143-10.857142 25.714286t-25.714286 10.857143h-109.714286v369.714286q85.142857-11.428571 155.142857-47.142857T848.571429 746.857143l-57.142858-57.142857q-8.571429-9.142857-4-20 4.571429-11.428571 17.142858-11.428572h201.142857q8 0 13.142857 5.142857t5.142857 13.142858z\"  ></path></symbol><symbol id=\"icon-android\" viewBox=\"0 0 1024 1024\"><path d=\"M391.428571 276q9.142857 0 15.714286-6.571429T413.714286 253.714286t-6.571429-15.714286T391.428571 231.428571t-15.428571 6.571429-6.285714 15.714286 6.285714 15.714285 15.428571 6.571429z m241.142858 0q9.142857 0 15.428571-6.571429t6.285714-15.714285-6.285714-15.714286-15.428571-6.571429-15.714286 6.571429T610.285714 253.714286t6.571429 15.714285T632.571429 276zM168.571429 381.142857q24 0 41.142857 17.142857t17.142857 41.142857v245.714286q0 24.571429-16.857143 41.714286t-41.428571 17.142857-41.714286-17.142857-17.142857-41.714286V439.428571q0-24 17.142857-41.142857t41.714286-17.142857z m605.714285 10.857143v380.571429q0 26.285714-18.285714 44.571428t-44 18.285714h-42.857143v129.714286q0 24.571429-17.142857 41.714286t-41.714286 17.142857-41.714285-17.142857-17.142858-41.714286v-129.714286H472.571429v129.714286q0 24.571429-17.142858 41.714286t-41.714285 17.142857q-24 0-41.142857-17.142857t-17.142858-41.714286l-0.571428-129.714286h-42.285714q-26.285714 0-44.571429-18.285714t-18.285714-44.571428V392h524.571428zM641.714286 160.571429q61.142857 31.428571 97.714285 87.714285t36.571429 123.142857H247.428571q0-66.857143 36.571429-123.142857T382.285714 160.571429l-40.571428-74.857143q-4-7.428571 2.857143-11.428572 7.428571-3.428571 11.428571 3.428572l41.142857 75.428571q54.285714-24 114.857143-24t114.857143 24l41.142857-75.428571q4-6.857143 11.428571-3.428572 6.857143 4 2.857143 11.428572z m272.571428 278.857142v245.714286q0 24.571429-17.142857 41.714286t-41.714286 17.142857q-24 0-41.142857-17.142857t-17.142857-41.714286V439.428571q0-24.571429 17.142857-41.428571t41.142857-16.857143q24.571429 0 41.714286 16.857143t17.142857 41.428571z\"  ></path></symbol><symbol id=\"icon-angellist\" viewBox=\"0 0 1024 1024\"><path d=\"M690.084434 216L624.941577 403.428571l66.857143 12q94.285714-257.714286 94.285714-296 0-32-21.714285-32-32.571429 0-74.285715 128.571429z m-170.857143 392.571429l18.857143 50.285714q21.142857-24 40.571429-38.285714l-18.857143-3.142858-22-4-18.571429-4.857142zM352.370149 96.571429q0 56 90.857142 297.714285 9.714286-5.714286 28-5.714285 8.571429 0 42.857143 2.857142L444.941577 190.857143q-42.857143-125.714286-70.285714-125.714286-10.857143 0-16.571429 10T352.370149 96.571429z m-45.142858 433.714285q0 20.571429 29.428572 68T403.79872 685.714286t57.142857 40q8 0 14.571429-7.428572t6.571428-15.428571q0-13.714286-18.285714-58.285714-7.428571-18.285714-18.285714-41.142858t-27.142857-50.857142-35.142858-46.285715-35.428571-18.285714q-11.428571 0-26 15.428571T307.227291 530.285714z m-90.285714 191.428572q0 23.428571 14.285714 59.428571 33.714286 82.857143 104.857143 129.714286t160.857143 46.857143q129.714286 0 218.285714-97.142857 86.857143-96.571429 86.857143-244 0-24.571429-0.571428-38.285715t-6.571429-35.428571-17.428571-32q-32-28-120.857143-43.142857T502.084434 452.571429q-21.142857 0-28 6.285714-6.857143 2.857143-6.857143 20 0 19.428571 12.285715 34.285714t31.714285 22.857143 44.285715 13.428571T605.513006 556t48.571428 2.285714 40 0h13.142857q13.714286 0 22.857143 10.857143 8.571429 10.857143 10.857143 31.428572-16 16-54.857143 30.857142-34.857143 12.571429-53.142857 26.285715-36.571429 26.285714-62 65.142857T545.513006 801.142857q0 17.714286 10.571428 50.571429T566.655863 901.714286l-1.714286 6.857143q-2.285714 6.857143-2.285714 8-78.285714-5.714286-83.428572-123.428572-4.571429 1.142857-23.428571 1.142857 1.142857 4 1.142857 12 0 30.285714-23.142857 51.142857T379.79872 878.285714q-46.857143 0-95.142857-44.571428T236.370149 742.857143q0-19.428571 18.857142-38.285714 29.714286 36.571429 34.285715 43.428571 44 59.428571 76 59.428571 6.857143 0 15.142857-4.857142T388.941577 790.857143q0-19.428571-50-82.857143T272.370149 644.571429q-24.571429 0-40 25.428571t-15.428572 51.714286z m-65.142857 5.142857q0-57.714286 24.285714-93.142857t78-50.285715q-16-42.285714-16-59.428571 0-35.428571 34.857143-70.285714t69.714286-34.857143q16.571429 0 40 8.571428-93.142857-264-93.142857-324 0-45.714286 23.428571-74.571428T380.941577 0q74.857143 0 185.714286 332 3.428571 9.714286 4.571428 13.142857 3.428571-9.142857 16.571429-45.428571T612.655863 232t30.857143-72.857143 36.857143-70.285714 40.285714-49.428572 43.714286-20.571428q40.571429 0 64 28t23.428571 69.714286q0 61.714286-90.857143 314.285714 34.857143 8.571429 57.428572 26.285714t33.428571 44.571429 14.857143 53.428571 4 63.142857q0 85.714286-26.857143 160t-75.428571 128.571429-120.571429 85.714286-158.857143 31.428571q-63.428571 0-127.428571-24-85.142857-32.571429-147.428572-109.428571T151.79872 726.857143z\"  ></path></symbol><symbol id=\"icon-angle-double-down\" viewBox=\"0 0 1024 1024\"><path d=\"M797.142857 493.714286q0 7.428571-5.714286 13.142857l-266.285714 266.285714q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286L232.571429 506.857143q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l28.571428-28.571429q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l224.571429 224.571429 224.571429-224.571429q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l28.571428 28.571429q5.714286 5.714286 5.714286 13.142857z m0-219.428572q0 7.428571-5.714286 13.142857L525.142857 553.714286q-5.714286 5.714286-13.142857 5.714285t-13.142857-5.714285L232.571429 287.428571q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l28.571428-28.571428q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l224.571429 224.571428 224.571429-224.571428q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l28.571428 28.571428q5.714286 5.714286 5.714286 13.142857z\"  ></path></symbol><symbol id=\"icon-angle-double-left\" viewBox=\"0 0 1024 1024\"><path d=\"M534.814203 786.285714q0 7.428571-5.714286 13.142857l-28.571428 28.571429q-5.714286 5.714286-13.142858 5.714286t-13.142857-5.714286L207.95706 561.714286q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142858l266.285714-266.285714q5.714286-5.714286 13.142857-5.714286t13.142858 5.714286l28.571428 28.571429q5.714286 5.714286 5.714286 13.142857t-5.714286 13.142857L304.528489 548.571429l224.571428 224.571428q5.714286 5.714286 5.714286 13.142857z m219.428571 0q0 7.428571-5.714285 13.142857l-28.571429 28.571429q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286L427.385631 561.714286q-5.714286-5.714286-5.714285-13.142857t5.714285-13.142858l266.285715-266.285714q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l28.571429 28.571429q5.714286 5.714286 5.714285 13.142857t-5.714285 13.142857L523.95706 548.571429l224.571429 224.571428q5.714286 5.714286 5.714285 13.142857z\"  ></path></symbol><symbol id=\"icon-angle-double-right\" viewBox=\"0 0 1024 1024\"><path d=\"M559.428571 548.571429q0 7.428571-5.714285 13.142857l-266.285715 266.285714q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-28.571428-28.571429q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l224.571428-224.571428L232.571429 324q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l28.571428-28.571429q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l266.285715 266.285714q5.714286 5.714286 5.714285 13.142858z m219.428572 0q0 7.428571-5.714286 13.142857l-266.285714 266.285714q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-28.571429-28.571429q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l224.571429-224.571428-224.571429-224.571429q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l28.571429-28.571429q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l266.285714 266.285714q5.714286 5.714286 5.714286 13.142858z\"  ></path></symbol><symbol id=\"icon-angle-double-up\" viewBox=\"0 0 1024 1024\"><path d=\"M788.776729 749.714286q0 7.428571-5.714286 13.142857l-28.571429 28.571428q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286L503.633871 566.857143l-224.571428 224.571428q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-28.571429-28.571428q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l266.285714-266.285715q5.714286-5.714286 13.142857-5.714285t13.142858 5.714285l266.285714 266.285715q5.714286 5.714286 5.714286 13.142857z m0-219.428572q0 7.428571-5.714286 13.142857l-28.571429 28.571429q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286L503.633871 347.428571l-224.571428 224.571429q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-28.571429-28.571429q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l266.285714-266.285714q5.714286-5.714286 13.142857-5.714286t13.142858 5.714286l266.285714 266.285714q5.714286 5.714286 5.714286 13.142857z\"  ></path></symbol><symbol id=\"icon-angle-down\" viewBox=\"0 0 1024 1024\"><path d=\"M797.142857 420.571429q0 7.428571-5.714286 13.142857l-266.285714 266.285714q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286L232.571429 433.714286q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142858l28.571428-28.571428q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l224.571429 224.571428 224.571429-224.571428q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l28.571428 28.571428q5.714286 5.714286 5.714286 13.142858z\"  ></path></symbol><symbol id=\"icon-angle-left\" viewBox=\"0 0 1024 1024\"><path d=\"M595.772223 310.857143q0 7.428571-5.714286 13.142857L365.486509 548.571429l224.571428 224.571428q5.714286 5.714286 5.714286 13.142857t-5.714286 13.142857l-28.571428 28.571429q-5.714286 5.714286-13.142858 5.714286t-13.142857-5.714286L268.91508 561.714286q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142858l266.285714-266.285714q5.714286-5.714286 13.142857-5.714286t13.142858 5.714286l28.571428 28.571429q5.714286 5.714286 5.714286 13.142857z\"  ></path></symbol><symbol id=\"icon-angle-right\" viewBox=\"0 0 1024 1024\"><path d=\"M635.385631 548.571429q0 7.428571-5.714285 13.142857l-266.285715 266.285714q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-28.571428-28.571429q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l224.571428-224.571428L308.528489 324q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l28.571428-28.571429q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l266.285715 266.285714q5.714286 5.714286 5.714285 13.142858z\"  ></path></symbol><symbol id=\"icon-angle-up\" viewBox=\"0 0 1024 1024\"><path d=\"M797.142857 676.571429q0 7.428571-5.714286 13.142857l-28.571428 28.571428q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286L512 493.714286l-224.571429 224.571428q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-28.571428-28.571428q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142858l266.285714-266.285714q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l266.285714 266.285714q5.714286 5.714286 5.714286 13.142858z\"  ></path></symbol><symbol id=\"icon-apple\" viewBox=\"0 0 1024 1024\"><path d=\"M905.714286 694.285714q-22.285714 71.428571-70.285715 142.857143-73.714286 112-146.857142 112-28 0-80-18.285714-49.142857-18.285714-86.285715-18.285714-34.857143 0-81.142857 18.857142-46.285714 19.428571-75.428571 19.428572-86.857143 0-172-148Q109.714286 653.714286 109.714286 515.428571q0-130.285714 64.571428-213.714285 64.571429-82.285714 162.285715-82.285715 41.142857 0 101.142857 17.142858 59.428571 17.142857 78.857143 17.142857 25.714286 0 81.714285-19.428572 58.285714-19.428571 98.857143-19.428571 68 0 121.714286 37.142857 29.714286 20.571429 59.428571 57.142857-45.142857 38.285714-65.142857 67.428572-37.142857 53.714286-37.142857 118.285714 0 70.857143 39.428571 127.428571t90.285715 72zM690.857143 24q0 34.857143-16.571429 77.714286-17.142857 42.857143-53.142857 78.857143-30.857143 30.857143-61.714286 41.142857-21.142857 6.285714-59.428571 9.714285 1.714286-85.142857 44.571429-146.857142Q586.857143 23.428571 687.428571 0q0.571429 1.714286 1.428572 6.285714t1.428571 6.285715q0 2.285714 0.285715 5.714285t0.285714 5.714286z\"  ></path></symbol><symbol id=\"icon-archive\" viewBox=\"0 0 1024 1024\"><path d=\"M621.714286 475.428571q0-14.857143-10.857143-25.714285t-25.714286-10.857143H438.857143q-14.857143 0-25.714286 10.857143t-10.857143 25.714285 10.857143 25.714286 25.714286 10.857143h146.285714q14.857143 0 25.714286-10.857143t10.857143-25.714286z m329.142857-109.714285v548.571428q0 14.857143-10.857143 25.714286t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V365.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z m36.571428-256v146.285714q0 14.857143-10.857142 25.714286t-25.714286 10.857143H73.142857q-14.857143 0-25.714286-10.857143t-10.857142-25.714286V109.714286q0-14.857143 10.857142-25.714286t25.714286-10.857143h877.714286q14.857143 0 25.714286 10.857143t10.857142 25.714286z\"  ></path></symbol><symbol id=\"icon-area-chart\" viewBox=\"0 0 1170 1024\"><path d=\"M1170.285714 877.714286v73.142857H0V73.142857h73.142857v804.571429h1097.142857zM950.857143 292.571429l146.285714 512H146.285714V475.428571l256-329.142857 329.142857 329.142857z\"  ></path></symbol><symbol id=\"icon-arrow-circle-down\" viewBox=\"0 0 1024 1024\"><path d=\"M806.857143 512.571429q0-15.428571-10.285714-25.714286l-52-52q-10.285714-10.285714-25.714286-10.285714t-25.714286 10.285714L585.142857 542.857143V256q0-14.857143-10.857143-25.714286t-25.714285-10.857143H475.428571q-14.857143 0-25.714285 10.857143t-10.857143 25.714286v286.857143L330.857143 434.857143q-10.857143-10.857143-25.714286-10.857143t-25.714286 10.857143l-52 52q-10.285714 10.285714-10.285714 25.714286t10.285714 25.714285l206.857143 206.857143 52 52q10.285714 10.285714 25.714286 10.285714t25.714286-10.285714l52-52 206.857143-206.857143q10.285714-10.285714 10.285714-25.714285z m144-0.571429q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-arrow-circle-left\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 548.571429V475.428571q0-14.857143-10.857143-25.714285t-25.714286-10.857143H481.142857l108-108q10.857143-10.857143 10.857143-25.714286t-10.857143-25.714286l-52-52q-10.285714-10.285714-25.714286-10.285714t-25.714285 10.285714L278.857143 434.285714l-52 52q-10.285714 10.285714-10.285714 25.714286t10.285714 25.714286l52 52 206.857143 206.857143q10.285714 10.285714 25.714285 10.285714t25.714286-10.285714l52-52q10.285714-10.285714 10.285714-25.714286t-10.285714-25.714286l-108-108h286.857143q14.857143 0 25.714286-10.857143t10.857143-25.714285z m146.285714-36.571429q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-arrow-circle-o-down\" viewBox=\"0 0 1024 1024\"><path d=\"M713.142857 530.285714q0 6.857143-5.714286 13.714286l-182.285714 182.285714q-6.285714 5.142857-13.142857 5.142857t-13.142857-5.142857L316 543.428571q-8.571429-9.142857-4-20 4.571429-11.428571 17.142857-11.428571h109.714286V310.857143q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857v201.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857zM512 201.142857q-84.571429 0-156 41.714286T242.857143 356t-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286 156-41.714286 113.142857-113.142857 41.714286-156-41.714286-156-113.142857-113.142857-156-41.714286z m438.857143 310.857143q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-arrow-circle-o-left\" viewBox=\"0 0 1024 1024\"><path d=\"M731.428571 457.142857v109.714286q0 7.428571-5.428571 12.857143t-12.857143 5.428571H512v109.714286q0 8-5.142857 13.142857t-13.142857 5.142857q-6.857143 0-13.714286-5.714286L297.714286 525.142857q-5.142857-5.142857-5.142857-13.142857t5.142857-13.142857l182.857143-182.857143q5.142857-5.142857 13.142857-5.142857 7.428571 0 12.857143 5.428571T512 329.142857v109.714286h201.142857q7.428571 0 12.857143 5.428571t5.428571 12.857143z m91.428572 54.857143q0-84.571429-41.714286-156t-113.142857-113.142857-156-41.714286-156 41.714286-113.142857 113.142857-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286 156-41.714286 113.142857-113.142857 41.714286-156z m128 0q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-arrow-circle-o-right\" viewBox=\"0 0 1024 1024\"><path d=\"M731.428571 512q0 8-5.142857 13.142857l-182.857143 182.857143q-5.142857 5.142857-13.142857 5.142857-7.428571 0-12.857143-5.428571T512 694.857143v-109.714286H310.857143q-7.428571 0-12.857143-5.428571T292.571429 566.857143V457.142857q0-7.428571 5.428571-12.857143T310.857143 438.857143h201.142857V329.142857q0-8 5.142857-13.142857t13.142857-5.142857q6.857143 0 13.714286 5.714286l182.285714 182.285714q5.142857 5.142857 5.142857 13.142857z m91.428572 0q0-84.571429-41.714286-156t-113.142857-113.142857-156-41.714286-156 41.714286-113.142857 113.142857-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286 156-41.714286 113.142857-113.142857 41.714286-156z m128 0q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-arrow-circle-o-up\" viewBox=\"0 0 1024 1024\"><path d=\"M712 500.571429q-4.571429 11.428571-17.142857 11.428571H585.142857v201.142857q0 8-5.142857 13.142857t-13.142857 5.142857H457.142857q-8 0-13.142857-5.142857t-5.142857-13.142857V512H329.142857q-8 0-13.142857-5.142857t-5.142857-13.142857q0-6.857143 5.714286-13.714286l182.285714-182.285714q6.285714-5.142857 13.142857-5.142857t13.142857 5.142857l182.857143 182.857143q8.571429 9.142857 4 20zM512 201.142857q-84.571429 0-156 41.714286T242.857143 356t-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286 156-41.714286 113.142857-113.142857 41.714286-156-41.714286-156-113.142857-113.142857-156-41.714286z m438.857143 310.857143q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-arrow-circle-right\" viewBox=\"0 0 1024 1024\"><path d=\"M807.428571 512q0-15.428571-10.285714-25.714286l-52-52-206.857143-206.857143q-10.285714-10.285714-25.714285-10.285714t-25.714286 10.285714l-52 52q-10.285714 10.285714-10.285714 25.714286t10.285714 25.714286l108 108H256q-14.857143 0-25.714286 10.857143t-10.857143 25.714285v73.142858q0 14.857143 10.857143 25.714285t25.714286 10.857143h286.857143l-108 108q-10.857143 10.857143-10.857143 25.714286t10.857143 25.714286l52 52q10.285714 10.285714 25.714286 10.285714t25.714285-10.285714l206.857143-206.857143 52-52q10.285714-10.285714 10.285714-25.714286z m143.428572 0q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-arrow-circle-up\" viewBox=\"0 0 1024 1024\"><path d=\"M806.857143 511.428571q0-15.428571-10.285714-25.714285L589.714286 278.857143l-52-52q-10.285714-10.285714-25.714286-10.285714t-25.714286 10.285714l-52 52-206.857143 206.857143q-10.285714 10.285714-10.285714 25.714285t10.285714 25.714286l52 52q10.285714 10.285714 25.714286 10.285714t25.714286-10.285714l108-108v286.857143q0 14.857143 10.857143 25.714286t25.714285 10.857143h73.142858q14.857143 0 25.714285-10.857143t10.857143-25.714286V481.142857l108 108q10.857143 10.857143 25.714286 10.857143t25.714286-10.857143l52-52q10.285714-10.285714 10.285714-25.714286z m144 0.571429q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-arrow-down\" viewBox=\"0 0 1024 1024\"><path d=\"M957.142857 475.428571q0 30.285714-21.142857 51.428572l-372 372.571428q-22.285714 21.142857-52 21.142858-30.285714 0-51.428571-21.142858L88.571429 526.857143q-21.714286-20.571429-21.714286-51.428572 0-30.285714 21.714286-52l42.285714-42.857142q22.285714-21.142857 52-21.142858 30.285714 0 51.428571 21.142858l168 168V146.285714q0-29.714286 21.714286-51.428571t51.428571-21.714286h73.142858q29.714286 0 51.428571 21.714286t21.714286 51.428571v402.285715l168-168q21.142857-21.142857 51.428571-21.142858 29.714286 0 52 21.142858l42.857143 42.857142q21.142857 22.285714 21.142857 52z\"  ></path></symbol><symbol id=\"icon-arrow-left\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 512v73.142857q0 30.285714-18.571429 51.714286T884 658.285714H481.714286l167.428571 168q21.714286 20.571429 21.714286 51.428572t-21.714286 51.428571l-42.857143 43.428572q-21.142857 21.142857-51.428571 21.142857-29.714286 0-52-21.142857l-372-372.571429q-21.142857-21.142857-21.142857-51.428571 0-29.714286 21.142857-52l372-371.428572q21.714286-21.714286 52-21.714286 29.714286 0 51.428571 21.714286l42.857143 42.285714q21.714286 21.714286 21.714286 52t-21.714286 52L481.714286 438.857143h402.285714q29.714286 0 48.285714 21.428571T950.857143 512z\"  ></path></symbol><symbol id=\"icon-arrow-right\" viewBox=\"0 0 1024 1024\"><path d=\"M914.285714 548.571429q0 30.857143-21.142857 52l-372 372q-22.285714 21.142857-52 21.142857-29.142857 0-51.428571-21.142857l-42.857143-42.857143q-21.714286-21.714286-21.714286-52t21.714286-52l167.428571-167.428572H140q-29.714286 0-48.285714-21.428571T73.142857 585.142857V512q0-30.285714 18.571429-51.714286T140 438.857143h402.285714L374.857143 270.857143q-21.714286-20.571429-21.714286-51.428572t21.714286-51.428571l42.857143-42.857143q21.714286-21.714286 51.428571-21.714286 30.285714 0 52 21.714286l372 372q21.142857 20 21.142857 51.428572z\"  ></path></symbol><symbol id=\"icon-arrow-up\" viewBox=\"0 0 1024 1024\"><path d=\"M957.142857 554.857143q0 29.142857-21.142857 51.428571l-42.857143 42.857143q-21.714286 21.714286-52 21.714286-30.857143 0-51.428571-21.714286l-168-167.428571v402.285714q0 29.714286-21.428572 48.285714T548.571429 950.857143H475.428571q-30.285714 0-51.714285-18.571429T402.285714 884V481.714286l-168 167.428571q-20.571429 21.714286-51.428571 21.714286t-51.428572-21.714286l-42.857142-42.857143q-21.714286-21.714286-21.714286-51.428571 0-30.285714 21.714286-52l372-372q20-21.142857 51.428571-21.142857 30.857143 0 52 21.142857l372 372q21.142857 22.285714 21.142857 52z\"  ></path></symbol><symbol id=\"icon-arrows-alt\" viewBox=\"0 0 1024 1024\"><path d=\"M797.396034 309.142857L594.538891 512l202.857143 202.857143 82.285715-82.285714q16.571429-17.714286 40-8 22.285714 9.714286 22.285714 33.714285v256q0 14.857143-10.857143 25.714286t-25.714286 10.857143h-256q-24 0-33.714285-22.857143-9.714286-22.285714 8-39.428571l82.285714-82.285715-202.857143-202.857143-202.857143 202.857143 82.285714 82.285715q17.714286 17.142857 8 39.428571-9.714286 22.857143-33.714285 22.857143H100.824606q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-256q0-24 22.857143-33.714285 22.285714-9.714286 39.428571 8l82.285715 82.285714 202.857143-202.857143-202.857143-202.857143-82.285715 82.285714q-10.857143 10.857143-25.714285 10.857143-6.857143 0-13.714286-2.857143-22.857143-9.714286-22.857143-33.714285V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h256q24 0 33.714285 22.857143 9.714286 22.285714-8 39.428571L300.253177 217.714286l202.857143 202.857143 202.857143-202.857143-82.285714-82.285715q-17.714286-17.142857-8-39.428571 9.714286-22.857143 33.714285-22.857143h256q14.857143 0 25.714286 10.857143t10.857143 25.714286v256q0 24-22.285714 33.714285-7.428571 2.857143-14.285715 2.857143-14.857143 0-25.714285-10.857143z\"  ></path></symbol><symbol id=\"icon-arrows-h\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 512q0 14.857143-10.857143 25.714286l-146.285714 146.285714q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143-10.857142-25.714286v-73.142857H219.428571v73.142857q0 14.857143-10.857142 25.714286t-25.714286 10.857143-25.714286-10.857143L10.857143 537.714286Q0 526.857143 0 512t10.857143-25.714286l146.285714-146.285714q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143 10.857142 25.714286v73.142857h585.142858V365.714286q0-14.857143 10.857142-25.714286t25.714286-10.857143 25.714286 10.857143l146.285714 146.285714q10.857143 10.857143 10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-arrows-v\" viewBox=\"0 0 1024 1024\"><path d=\"M615.007206 182.857143q0 14.857143-10.857143 25.714286t-25.714286 10.857142H505.29292v585.142858h73.142857q14.857143 0 25.714286 10.857142t10.857143 25.714286-10.857143 25.714286l-146.285714 146.285714q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143L260.150063 866.857143q-10.857143-10.857143-10.857143-25.714286t10.857143-25.714286 25.714286-10.857142h73.142857V219.428571H285.864349q-14.857143 0-25.714286-10.857142t-10.857143-25.714286 10.857143-25.714286L406.435777 10.857143q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l146.285714 146.285714q10.857143 10.857143 10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-arrows\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 512q0 14.857143-10.857143 25.714286l-146.285714 146.285714q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143-10.857142-25.714286v-73.142857h-219.428572v219.428572h73.142857q14.857143 0 25.714286 10.857142t10.857143 25.714286-10.857143 25.714286l-146.285714 146.285714q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143l-146.285714-146.285714q-10.857143-10.857143-10.857143-25.714286t10.857143-25.714286 25.714286-10.857142h73.142857v-219.428572H219.428571v73.142857q0 14.857143-10.857142 25.714286t-25.714286 10.857143-25.714286-10.857143L10.857143 537.714286Q0 526.857143 0 512t10.857143-25.714286l146.285714-146.285714q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143 10.857142 25.714286v73.142857h219.428572V219.428571H365.714286q-14.857143 0-25.714286-10.857142t-10.857143-25.714286 10.857143-25.714286L486.285714 10.857143q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l146.285714 146.285714q10.857143 10.857143 10.857143 25.714286t-10.857143 25.714286-25.714286 10.857142h-73.142857v219.428572h219.428572V365.714286q0-14.857143 10.857142-25.714286t25.714286-10.857143 25.714286 10.857143l146.285714 146.285714q10.857143 10.857143 10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-asl-interpreting\" viewBox=\"0 0 1316 1024\"><path d=\"M589.714286 548.571429q-33.714286-1.142857-48-31.428572-9.714286-19.428571-27.428572-30.571428T475.428571 475.428571q-30.285714 0-51.714285 21.428572T402.285714 548.571429q0 32 20.571429 50.857142l5.714286 4.571429q19.428571 17.714286 46.857142 17.714286 21.142857 0 38.857143-11.142857t27.428572-30.571429q14.285714-30.285714 48-31.428571z m324.571428-73.142858q0-32-20.571428-50.857142l-5.714286-4.571429q-19.428571-17.714286-46.857143-17.714286-21.142857 0-38.857143 11.142857t-27.428571 30.571429q-14.285714 30.285714-48 31.428571 33.714286 1.142857 48 31.428572 9.714286 19.428571 27.428571 30.571428t38.857143 11.142858q30.285714 0 51.714286-21.428572T914.285714 475.428571z m-243.428571-126.285714q-9.714286 20-31.428572 27.428572t-41.714285-2.285715q-35.428571-17.714286-76.571429-17.714285-29.142857 0-56.571428 9.714285 1.714286 0 5.428571-0.285714t5.428571-0.285714q52.571429 0 97.428572 28.571428T640.571429 470.285714q9.714286 20.571429 2 42T614.285714 543.428571q-10.285714 5.142857-22.285714 5.142858 12 0 22.285714 5.142857 20.571429 9.714286 28.285715 31.142857t-2 42q-22.857143 47.428571-67.714286 76T475.428571 731.428571h-3.428571q-9.142857-1.142857-25.142857-2.285714l-165.714286-15.428571-136.571428 68.571428q-8 4-16.571429 4-22.857143 0-32.571429-20L4 583.428571q-6.285714-13.142857-2.285714-27.142857T18.285714 534.857143l119.428572-68 84.571428-152.571429q9.714286-88.571429 52.285715-166.571428T386.285714 12.571429Q404-1.714286 426.571429 0.285714T463.428571 20t12.285715 40-19.714286 37.142857q-40 33.714286-66.857143 73.142857 70.285714-48 152.571429-57.714285 22.857143-2.857143 40.857143 10.857142t20.285714 36.571429q2.857143 22.857143-10.857143 40.857143T555.428571 221.142857q-48 5.714286-90.857142 31.428572 26.285714-5.714286 56.571428-5.714286 65.714286 0 124.571429 28.571428 20.571429 10.285714 28 31.714286t-2.857143 42z m550.285714-91.428571l91.428572 182.857143q6.285714 13.142857 2.285714 27.142857t-16.571429 21.428571l-119.428571 68-84.571429 152.571429q-9.714286 88.571429-52.285714 166.571428T930.285714 1011.428571q-14.857143 12.571429-34.857143 12.571429-25.714286 0-42.285714-20-14.285714-17.714286-12.285714-40t19.714286-37.142857q40-33.714286 66.857142-73.142857-70.285714 48-152.571428 57.714285-2.285714 0.571429-6.857143 0.571429-20.571429 0-36.285714-13.714286t-18-34.285714q-2.857143-22.857143 10.857143-40.857143t36.571428-20.285714q48-5.714286 90.857143-31.428572-26.285714 5.714286-56.571429 5.714286-65.714286 0-124.571428-28.571428-20.571429-10.285714-28-31.714286t2.857143-42q9.714286-20 31.428571-27.428572t41.714286 2.285715q35.428571 17.714286 76.571428 17.714285 29.142857 0 56.571429-9.714285-1.714286 0-5.428571 0.285714t-5.428572 0.285714q-52.571429 0-97.428571-28.571428T676 553.714286q-9.714286-20.571429-2-42T702.285714 480.571429q10.285714-5.142857 22.285715-5.142858-12 0-22.285715-5.142857-20.571429-9.714286-28.285714-31.142857t2-42q22.857143-47.428571 67.714286-76t97.428571-28.571428h4q8 1.142857 24 2.285714l166.285714 15.428571 136.571429-68.571428q8-4 16.571429-4 22.857143 0 32.571428 20z\"  ></path></symbol><symbol id=\"icon-assistive-listening-systems\" viewBox=\"0 0 1024 1024\"><path d=\"M73.142857 987.428571q0 14.857143-10.857143 25.714286t-25.714285 10.857143-25.714286-10.857143-10.857143-25.714286 10.857143-25.714285 25.714286-10.857143 25.714285 10.857143 10.857143 25.714285z m109.714286-109.714285q0 14.857143-10.857143 25.714285t-25.714286 10.857143-25.714285-10.857143-10.857143-25.714285 10.857143-25.714286 25.714285-10.857143 25.714286 10.857143 10.857143 25.714286z m25.714286-208.571429l146.285714 146.285714-51.428572 51.428572-146.285714-146.285714z m193.714285-10.857143q0 14.857143-10.857143 25.714286t-25.714285 10.857143-25.714286-10.857143-10.857143-25.714286 10.857143-25.714285 25.714286-10.857143 25.714285 10.857143 10.857143 25.714285z m404-182.857143q0 33.714286-6.571428 62T778.285714 590.857143t-25.142857 38.571428-30.285714 36.857143q-17.714286 20-26 30.857143t-19.142857 28.571429-15.142857 36.571428-4.285715 42.285715q0 90.857143-64.285714 155.142857T438.857143 1024q-14.857143 0-25.714286-10.857143t-10.857143-25.714286 10.857143-25.714285 25.714286-10.857143q60.571429 0 103.428571-42.857143t42.857143-103.428571q0-32.571429 6.571429-60.285715t21.142857-52 24.857143-38 29.714285-36q22.857143-26.285714 34-41.142857t21.428572-42.571428 10.285714-59.142858q0-105.714286-75.142857-180.857142T477.142857 219.428571 296.285714 294.571429 221.142857 475.428571q0 14.857143-10.857143 25.714286t-25.714285 10.857143-25.714286-10.857143-10.857143-25.714286q0-66.857143 26-127.714285t70.285714-105.142857 105.142857-70.285715T477.142857 146.285714t127.714286 26 105.142857 70.285715 70.285714 105.142857T806.285714 475.428571zM512 548.571429q0 14.857143-10.857143 25.714285t-25.714286 10.857143-25.714285-10.857143-10.857143-25.714285 10.857143-25.714286 25.714285-10.857143 25.714286 10.857143 10.857143 25.714286z m164.571429-73.142858q0 14.857143-10.857143 25.714286t-25.714286 10.857143-25.714286-10.857143-10.857143-25.714286q0-53.142857-37.428571-90.571428T475.428571 347.428571q-52.571429 0-90.285714 37.428572T347.428571 475.428571q0 14.857143-10.857142 25.714286t-25.714286 10.857143-25.714286-10.857143-10.857143-25.714286q0-83.428571 58.857143-142.285714t142.285714-58.857143 142.285715 58.857143 58.857143 142.285714z m225.142857-165.142857q5.714286 14.285714-0.571429 28t-20.571428 19.428572q-5.142857 2.285714-13.142858 2.285714-10.857143 0-20.285714-6.285714t-13.428571-17.142857q-38.857143-101.714286-128-168.571429-12-9.142857-14.285715-24t6.857143-26.857143q9.714286-12 24.571429-14.285714t26.857143 6.857143q104.571429 78.285714 152 200.571428z m120-46.285714q5.142857 14.285714-0.857143 28t-20.285714 19.428571q-6.285714 2.285714-13.142858 2.285715-25.142857 0-34.285714-23.428572-52.571429-136-169.714286-224.571428-12.571429-9.142857-14.571428-24t7.142857-26.857143q9.142857-12.571429 24-14.571429t26.857143 7.142857q134.285714 100 194.857143 256.571429z\"  ></path></symbol><symbol id=\"icon-asterisk\" viewBox=\"0 0 1024 1024\"><path d=\"M883.428571 600q26.285714 14.857143 34 44.285714T910.285714 700l-36.571428 62.857143q-14.857143 26.285714-44.285715 34T773.714286 789.714286l-152-87.428572v175.428572q0 29.714286-21.714286 51.428571t-51.428571 21.714286H475.428571q-29.714286 0-51.428571-21.714286t-21.714286-51.428571v-175.428572l-152 87.428572q-26.285714 14.857143-55.714285 7.142857T150.285714 762.857143l-36.571428-62.857143q-14.857143-26.285714-7.142857-55.714286T140.571429 600l152-88-152-88q-26.285714-14.857143-34-44.285714T113.714286 324l36.571428-62.857143q14.857143-26.285714 44.285715-34T250.285714 234.285714l152 87.428572V146.285714q0-29.714286 21.714286-51.428571t51.428571-21.714286h73.142858q29.714286 0 51.428571 21.714286t21.714286 51.428571v175.428572l152-87.428572q26.285714-14.857143 55.714285-7.142857T873.714286 261.142857l36.571428 62.857143q14.857143 26.285714 7.142857 55.714286T883.428571 424l-152 88z\"  ></path></symbol><symbol id=\"icon-at\" viewBox=\"0 0 1024 1024\"><path d=\"M628.571429 442.857143q0-61.714286-30.571429-96.571429T513.714286 311.428571q-36 0-70.857143 17.428572T380 377.142857t-45.428571 78.285714T317.142857 558.285714q0 64 30.571429 98.857143t86 34.857143q54.857143 0 100.571428-38t70-94.857143T628.571429 442.857143z m322.285714 69.142857q0 63.428571-21.142857 112.571429t-56.285715 77.142857-75.142857 42.571428-82.857143 15.714286q-3.428571 0-8.857142 0.285714t-9.428572 0.285715q-54.285714 0-81.142857-30.285715-16-18.857143-18.857143-47.428571-29.714286 37.714286-75.142857 62.857143T422.857143 770.857143q-92 0-142.571429-54.571429T229.714286 562.285714q0-89.714286 37.714285-165.714285t102.285715-120.285715T510.285714 232q49.714286 0 88.571429 20.285714t60.571428 56.857143l1.142858-10.857143 6.285714-32q0.571429-3.428571 3.142857-6.857143t5.428571-3.428571h67.428572q2.857143 0 7.428571 6.285714 2.857143 2.857143 1.714286 9.142857l-68.571429 350.857143q-2.857143 13.714286-2.857142 27.428572 0 22.285714 7.142857 29.714285t25.428571 7.428572q16-0.571429 32.571429-3.142857t41.714285-13.714286 44-28.571429 32.571429-51.142857 13.714286-78.285714q0-166.857143-99.428572-266.285714T512 146.285714q-74.285714 0-142 29.142857t-116.571429 78-78 116.571429T146.285714 512t29.142857 142 78 116.571429 116.571429 78 142 29.142857q130.285714 0 231.428571-82.285715 6.285714-5.142857 13.714286-4.571428t12 6.857143l23.428572 28q4.571429 6.857143 4 13.714285-1.142857 7.428571-6.857143 12.571429-58.285714 47.428571-130 73.142857T512 950.857143q-89.142857 0-170.285714-34.857143t-140-93.714286-93.714286-140T73.142857 512t34.857143-170.285714 93.714286-140 140-93.714286 170.285714-34.857143q196.571429 0 317.714286 121.142857t121.142857 317.714286z\"  ></path></symbol><symbol id=\"icon-audio-description\" viewBox=\"0 0 1316 1024\"><path d=\"M288 568h97.714286l-0.571429-151.428571z m586.285714-56.571429q0-49.714286-28.857143-80T761.714286 401.142857h-30.857143v221.714286h29.714286q52 0 82.857142-32.571429t30.857143-78.857143zM546.285714 296l0.571429 432q0 8-5.428572 13.714286t-13.428571 5.714285H404.571429q-8 0-13.428572-5.714285t-5.428571-13.714286v-35.428571H219.428571l-31.428571 46.285714q-5.714286 8.571429-16 8.571428H19.428571q-12 0-17.428571-10.285714t2-20l317.714286-432.571428q5.142857-8 15.428571-8h189.714286q8 0 13.714286 5.714285t5.714285 13.714286z m472.571429 215.428571q0 110.285714-71.714286 173.142858T761.714286 747.428571h-154.285715q-8 0-13.714285-5.714285t-5.714286-13.714286V296q0-8 5.714286-13.714286t13.714285-5.714285h153.142858q114.285714 0 186.285714 62.285714t72 172.571428z m89.142857 0.571429q0 6.285714-0.285714 16.571429t-4.571429 40.857142-12.285714 58.285715-25.428572 61.714285T1023.428571 748h-29.142857q21.714286-25.714286 38-59.714286t23.714286-64 12-56 5.142857-41.428571l0.571429-15.428572q0-4.571429-0.285715-12.857142t-4.285714-34.285715-11.428571-52.285714-23.428572-63.714286-37.714285-71.142857h24.571428q23.428571 26.857143 41.142857 61.142857t26 63.714286 13.142857 54.857143T1107.428571 497.142857z m105.142857 0q0 6.285714-0.285714 16.571429t-4.571429 40.857142-12.285714 58.285715-25.714286 61.714285-42.285714 58.571429h-29.142857q21.714286-25.714286 38-59.714286t23.714286-64 12-56 5.142857-41.428571l0.571428-15.428572q0-4.571429-0.285714-12.857142t-4.285714-34.285715-11.142857-52.285714-23.142858-63.714286-37.714285-71.142857h24.571428q23.428571 26.857143 41.142857 61.142857t26 63.714286 13.142858 54.857143T1212.571429 497.142857z m103.428572 0q0 6.285714-0.285715 16.571429t-4.571428 40.857142-12.285715 58.285715-25.428571 61.714285T1232 748h-29.142857q21.714286-25.714286 37.714286-59.714286t23.428571-64 12-56 5.142857-41.428571l0.571429-15.428572q0-4.571429-0.285715-12.857142t-4.285714-34.285715-11.142857-52.285714-23.142857-63.714286-37.714286-71.142857h24.571429q23.428571 26.857143 41.142857 61.142857t26 63.714286 13.142857 54.857143 5.428571 40.285714z\"  ></path></symbol><symbol id=\"icon-automobile\" viewBox=\"0 0 1170 1024\"><path d=\"M274.285714 621.714286q0-37.714286-26.857143-64.571429t-64.571428-26.857143-64.571429 26.857143-26.857143 64.571429 26.857143 64.571428 64.571429 26.857143 64.571428-26.857143 26.857143-64.571428z m20.571429-182.857143h580.571428l-50.857142-204q-1.142857-4.571429-8-10t-12-5.428572H365.714286q-5.142857 0-12 5.428572T345.714286 234.857143z m784 182.857143q0-37.714286-26.857143-64.571429t-64.571429-26.857143-64.571428 26.857143-26.857143 64.571429 26.857143 64.571428 64.571428 26.857143 64.571429-26.857143 26.857143-64.571428z m91.428571-54.857143v219.428571q0 8-5.142857 13.142857t-13.142857 5.142858h-54.857143v73.142857q0 45.714286-32 77.714285t-77.714286 32-77.714285-32-32-77.714285v-73.142857H292.571429v73.142857q0 45.714286-32 77.714285t-77.714286 32-77.714286-32-32-77.714285v-73.142857H18.285714q-8 0-13.142857-5.142858t-5.142857-13.142857V566.857143q0-53.142857 37.428571-90.571429T128 438.857143h16l60-239.428572q13.142857-53.714286 59.428571-90T365.714286 73.142857h438.857143q56 0 102.285714 36.285714T966.285714 199.428571l60 239.428572h16q53.142857 0 90.571429 37.428571T1170.285714 566.857143z\"  ></path></symbol><symbol id=\"icon-backward\" viewBox=\"0 0 1024 1024\"><path d=\"M961.714286 80.571429q10.857143-10.857143 18.285714-7.428572t7.428571 18.285714v841.142858q0 14.857143-7.428571 18.285714t-18.285714-7.428572L556 537.714286q-5.142857-5.142857-7.428571-10.857143v405.714286q0 14.857143-7.428572 18.285714t-18.285714-7.428572L117.142857 537.714286q-10.857143-10.857143-10.857143-25.714286t10.857143-25.714286l405.714286-405.714285q10.857143-10.857143 18.285714-7.428572t7.428572 18.285714v405.714286q2.285714-5.714286 7.428571-10.857143z\"  ></path></symbol><symbol id=\"icon-balance-scale\" viewBox=\"0 0 1316 1024\"><path d=\"M987.428571 256l-219.428571 402.285714h438.857143z m-731.428571 0L36.571429 658.285714h438.857142z m469.142857-109.714286q-8 22.857143-26 40.857143T658.285714 213.142857v737.714286h347.428572q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H237.714286q-8 0-13.142857-5.142857t-5.142858-13.142857v-36.571429q0-8 5.142858-13.142857t13.142857-5.142857h347.428571V213.142857q-22.857143-8-40.857143-26T518.285714 146.285714H237.714286q-8 0-13.142857-5.142857t-5.142858-13.142857v-36.571429q0-8 5.142858-13.142857t13.142857-5.142857h280.571428q12-32.571429 40-52.857143T621.714286 0t63.428571 20.285714 40 52.857143h280.571429q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-280.571429z m-103.428571 9.142857q18.857143 0 32.285714-13.428571T667.428571 109.714286t-13.428571-32.285715T621.714286 64t-32.285715 13.428571T576 109.714286t13.428571 32.285714T621.714286 155.428571z m621.714285 502.857143q0 41.714286-26.571428 74.857143t-67.142857 52-82.571429 28.285714T987.428571 822.857143t-79.714285-9.428572T825.142857 785.142857t-67.142857-52-26.571429-74.857143q0-6.285714 20-46.285714t52.571429-99.714286T865.142857 400.571429t58.285714-105.142858 32-57.142857q10.285714-18.857143 32-18.857143t32 18.857143q2.285714 4 32 57.142857t58.285715 105.142858 61.142857 111.714285 52.571428 99.714286 20 46.285714z m-731.428571 0q0 41.714286-26.571429 74.857143T418.285714 785.142857t-82.571428 28.285714T256 822.857143t-79.714286-9.428572T93.714286 785.142857t-67.142857-52T0 658.285714q0-6.285714 20-46.285714t52.571429-99.714286T133.714286 400.571429t58.285714-105.142858 32-57.142857q10.285714-18.857143 32-18.857143t32 18.857143q2.285714 4 32 57.142857t58.285714 105.142858 61.142857 111.714285 52.571429 99.714286 20 46.285714z\"  ></path></symbol><symbol id=\"icon-bandcamp\" viewBox=\"0 0 1024 1024\"><path d=\"M611.428571 673.142857l174.857143-322.285714H412.571429l-174.857143 322.285714h373.714285z m412.571429-161.142857q0 104-40.571429 198.857143t-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0t198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-bank\" viewBox=\"0 0 1170 1024\"><path d=\"M548.571429 0l548.571428 219.428571v73.142858h-73.142857q0 14.857143-11.714286 25.714285t-27.714285 10.857143H112.571429q-16 0-27.714286-10.857143T73.142857 292.571429H0V219.428571zM146.285714 365.714286h146.285715v438.857143h73.142857V365.714286h146.285714v438.857143h73.142857V365.714286h146.285714v438.857143h73.142858V365.714286h146.285714v438.857143h33.714286q16 0 27.714285 10.857142t11.714286 25.714286v36.571429H73.142857v-36.571429q0-14.857143 11.714286-25.714286t27.714286-10.857142h33.714285V365.714286z m911.428572 548.571428q16 0 27.714285 10.857143t11.714286 25.714286v73.142857H0v-73.142857q0-14.857143 11.714286-25.714286t27.714285-10.857143h1018.285715z\"  ></path></symbol><symbol id=\"icon-bars1\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 768v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-73.142857q0-14.857143 10.857143-25.714286t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z m0-292.571429v73.142858q0 14.857143-10.857143 25.714285t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143T73.142857 548.571429V475.428571q0-14.857143 10.857143-25.714285t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714285z m0-292.571428v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143T73.142857 256V182.857143q0-14.857143 10.857143-25.714286t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-bar-chart\" viewBox=\"0 0 1170 1024\"><path d=\"M365.714286 512v292.571429H219.428571V512h146.285715z m219.428571-292.571429v585.142858H438.857143V219.428571h146.285714z m585.142857 658.285715v73.142857H0V73.142857h73.142857v804.571429h1097.142857z m-365.714285-512v438.857143h-146.285715V365.714286h146.285715z m219.428571-219.428572v658.285715h-146.285714V146.285714h146.285714z\"  ></path></symbol><symbol id=\"icon-bar-chart-o\" viewBox=\"0 0 1170 1024\"><path d=\"M365.714286 512v292.571429H219.428571V512h146.285715z m219.428571-292.571429v585.142858H438.857143V219.428571h146.285714z m585.142857 658.285715v73.142857H0V73.142857h73.142857v804.571429h1097.142857z m-365.714285-512v438.857143h-146.285715V365.714286h146.285715z m219.428571-219.428572v658.285715h-146.285714V146.285714h146.285714z\"  ></path></symbol><symbol id=\"icon-bathtub\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 621.714286v109.714285q0 96.571429-73.142857 163.428572v110.857143q0 8-5.142857 13.142857t-13.142858 5.142857h-36.571428q-8 0-13.142857-5.142857t-5.142857-13.142857v-67.428572q-36 12.571429-73.142858 12.571429H292.571429q-37.142857 0-73.142858-12.571429v62.857143q0 9.714286-5.428571 16.285714T201.142857 1024h-36.571428q-7.428571 0-12.857143-6.571429T146.285714 1001.142857v-106.285714q-73.142857-66.857143-73.142857-163.428572v-109.714285h877.714286zM402.285714 384q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m36.571429-36.571429q0 8-5.142857 13.142858t-13.142857 5.142857-13.142858-5.142857-5.142857-13.142858 5.142857-13.142857 13.142858-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571429-36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m73.142857 0q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571428-36.571429q0 8-5.142857 13.142857t-13.142857 5.142858-13.142858-5.142858-5.142857-13.142857 5.142857-13.142857 13.142858-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571429-36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142858 13.142857 5.142858 5.142857 13.142857z m621.714286 292.571428v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143V146.285714q0-60.571429 42.857143-103.428571T219.428571 0q61.714286 0 105.142858 44.571429 26.285714-10.857143 56-6.857143t53.142857 22.285714l12.571428-12.571429q6.285714-6.285714 12.571429 0l24 24q6.285714 6.285714 0 12.571429L303.428571 263.428571q-6.285714 6.285714-12.571428 0l-24-24q-6.285714-6.285714 0-12.571428l12.571428-12.571429q-20.571429-26.285714-23.142857-59.428571T269.714286 93.142857q-21.142857-20-50.285715-20-30.285714 0-51.714285 21.428572T146.285714 146.285714v365.714286h859.428572q8 0 13.142857 5.142857t5.142857 13.142857zM512 274.285714q0 8-5.142857 13.142857t-13.142857 5.142858-13.142857-5.142858-5.142858-13.142857 5.142858-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571429-36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142858 13.142857 5.142858 5.142857 13.142857z m-36.571428-36.571429q0 8-5.142857 13.142857t-13.142857 5.142857-13.142858-5.142857-5.142857-13.142857 5.142857-13.142857 13.142858-5.142857 13.142857 5.142857 5.142857 13.142857z m109.714286 36.571429q0 8-5.142858 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142858 13.142857 5.142858 5.142858 13.142857z m-36.571429-36.571429q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142858-13.142857 5.142858-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571429-36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142858 13.142857-5.142857 13.142857 5.142857 5.142857 13.142858z m109.714286 36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571428-36.571428q0 8-5.142858 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142858 13.142857-5.142857 13.142857 5.142857 5.142858 13.142858z m73.142857 0q0 8-5.142857 13.142857t-13.142858 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142858 13.142857-5.142857 13.142858 5.142857 5.142857 13.142858z\"  ></path></symbol><symbol id=\"icon-barcode\" viewBox=\"0 0 1024 1024\"><path d=\"M36 877.714286H0V73.142857h36v804.571429z m36-0.571429H53.714286V73.142857h18.285714v804z m53.714286 0h-17.714286V73.142857h17.714286v804z m89.714285 0h-17.714285V73.142857h17.714285v804z m89.714286 0h-35.428571V73.142857h35.428571v804z m72 0h-17.714286V73.142857h17.714286v804z m36 0h-17.714286V73.142857h17.714286v804z m36 0h-17.714286V73.142857h17.714286v804z m89.714286 0h-36V73.142857h36v804z m89.714286 0h-36V73.142857h36v804z m72 0h-36V73.142857h36v804z m72 0h-36V73.142857h36v804z m53.714285 0h-36V73.142857h36v804z m108 0h-53.714285V73.142857h53.714285v804z m36 0h-18.285714V73.142857h18.285714v804z m53.714286 0.571429h-36V73.142857h36v804.571429z\"  ></path></symbol><symbol id=\"icon-bath\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 621.714286v109.714285q0 96.571429-73.142857 163.428572v110.857143q0 8-5.142857 13.142857t-13.142858 5.142857h-36.571428q-8 0-13.142857-5.142857t-5.142857-13.142857v-67.428572q-36 12.571429-73.142858 12.571429H292.571429q-37.142857 0-73.142858-12.571429v62.857143q0 9.714286-5.428571 16.285714T201.142857 1024h-36.571428q-7.428571 0-12.857143-6.571429T146.285714 1001.142857v-106.285714q-73.142857-66.857143-73.142857-163.428572v-109.714285h877.714286zM402.285714 384q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m36.571429-36.571429q0 8-5.142857 13.142858t-13.142857 5.142857-13.142858-5.142857-5.142857-13.142858 5.142857-13.142857 13.142858-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571429-36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m73.142857 0q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571428-36.571429q0 8-5.142857 13.142857t-13.142857 5.142858-13.142858-5.142858-5.142857-13.142857 5.142857-13.142857 13.142858-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571429-36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142858 13.142857 5.142858 5.142857 13.142857z m621.714286 292.571428v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143V146.285714q0-60.571429 42.857143-103.428571T219.428571 0q61.714286 0 105.142858 44.571429 26.285714-10.857143 56-6.857143t53.142857 22.285714l12.571428-12.571429q6.285714-6.285714 12.571429 0l24 24q6.285714 6.285714 0 12.571429L303.428571 263.428571q-6.285714 6.285714-12.571428 0l-24-24q-6.285714-6.285714 0-12.571428l12.571428-12.571429q-20.571429-26.285714-23.142857-59.428571T269.714286 93.142857q-21.142857-20-50.285715-20-30.285714 0-51.714285 21.428572T146.285714 146.285714v365.714286h859.428572q8 0 13.142857 5.142857t5.142857 13.142857zM512 274.285714q0 8-5.142857 13.142857t-13.142857 5.142858-13.142857-5.142858-5.142858-13.142857 5.142858-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571429-36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142858 13.142857 5.142858 5.142857 13.142857z m-36.571428-36.571429q0 8-5.142857 13.142857t-13.142857 5.142857-13.142858-5.142857-5.142857-13.142857 5.142857-13.142857 13.142858-5.142857 13.142857 5.142857 5.142857 13.142857z m109.714286 36.571429q0 8-5.142858 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142858 13.142857 5.142858 5.142858 13.142857z m-36.571429-36.571429q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142858-13.142857 5.142858-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571429-36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142858 13.142857-5.142857 13.142857 5.142857 5.142857 13.142858z m109.714286 36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571428-36.571428q0 8-5.142858 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142858 13.142857-5.142857 13.142857 5.142857 5.142858 13.142858z m73.142857 0q0 8-5.142857 13.142857t-13.142858 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142858 13.142857-5.142857 13.142858 5.142857 5.142857 13.142858z\"  ></path></symbol><symbol id=\"icon-battery-0\" viewBox=\"0 0 1316 1024\"><path d=\"M1243.428571 329.142857q30.285714 0 51.714286 21.428572T1316.571429 402.285714v219.428572q0 30.285714-21.428572 51.714285T1243.428571 694.857143v91.428571q0 37.714286-26.857142 64.571429t-64.571429 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 786.285714V237.714286q0-37.714286 26.857143-64.571429t64.571428-26.857143h1060.571429q37.714286 0 64.571429 26.857143t26.857142 64.571429v91.428571z m0 292.571429V402.285714h-73.142857V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858H91.428571q-8 0-13.142857 5.142858t-5.142857 13.142857v548.571428q0 8 5.142857 13.142857t13.142857 5.142858h1060.571429q8 0 13.142857-5.142858t5.142857-13.142857v-164.571428h73.142857z\"  ></path></symbol><symbol id=\"icon-battery-1\" viewBox=\"0 0 1316 1024\"><path d=\"M146.285714 731.428571V292.571429h292.571429v438.857142H146.285714z m1097.142857-402.285714q30.285714 0 51.714286 21.428572T1316.571429 402.285714v219.428572q0 30.285714-21.428572 51.714285T1243.428571 694.857143v91.428571q0 37.714286-26.857142 64.571429t-64.571429 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 786.285714V237.714286q0-37.714286 26.857143-64.571429t64.571428-26.857143h1060.571429q37.714286 0 64.571429 26.857143t26.857142 64.571429v91.428571z m0 292.571429V402.285714h-73.142857V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858H91.428571q-8 0-13.142857 5.142858t-5.142857 13.142857v548.571428q0 8 5.142857 13.142857t13.142857 5.142858h1060.571429q8 0 13.142857-5.142858t5.142857-13.142857v-164.571428h73.142857z\"  ></path></symbol><symbol id=\"icon-battery-2\" viewBox=\"0 0 1316 1024\"><path d=\"M146.285714 731.428571V292.571429h512v438.857142H146.285714z m1097.142857-402.285714q30.285714 0 51.714286 21.428572T1316.571429 402.285714v219.428572q0 30.285714-21.428572 51.714285T1243.428571 694.857143v91.428571q0 37.714286-26.857142 64.571429t-64.571429 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 786.285714V237.714286q0-37.714286 26.857143-64.571429t64.571428-26.857143h1060.571429q37.714286 0 64.571429 26.857143t26.857142 64.571429v91.428571z m0 292.571429V402.285714h-73.142857V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858H91.428571q-8 0-13.142857 5.142858t-5.142857 13.142857v548.571428q0 8 5.142857 13.142857t13.142857 5.142858h1060.571429q8 0 13.142857-5.142858t5.142857-13.142857v-164.571428h73.142857z\"  ></path></symbol><symbol id=\"icon-battery-4\" viewBox=\"0 0 1316 1024\"><path d=\"M1097.142857 292.571429v438.857142H146.285714V292.571429h950.857143z m73.142857 329.142857h73.142857V402.285714h-73.142857V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858H91.428571q-8 0-13.142857 5.142858t-5.142857 13.142857v548.571428q0 8 5.142857 13.142857t13.142857 5.142858h1060.571429q8 0 13.142857-5.142858t5.142857-13.142857v-164.571428z m146.285715-219.428572v219.428572q0 30.285714-21.428572 51.714285T1243.428571 694.857143v91.428571q0 37.714286-26.857142 64.571429t-64.571429 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 786.285714V237.714286q0-37.714286 26.857143-64.571429t64.571428-26.857143h1060.571429q37.714286 0 64.571429 26.857143t26.857142 64.571429v91.428571q30.285714 0 51.714286 21.428572T1316.571429 402.285714z\"  ></path></symbol><symbol id=\"icon-battery-3\" viewBox=\"0 0 1316 1024\"><path d=\"M146.285714 731.428571V292.571429h731.428572v438.857142H146.285714z m1097.142857-402.285714q30.285714 0 51.714286 21.428572T1316.571429 402.285714v219.428572q0 30.285714-21.428572 51.714285T1243.428571 694.857143v91.428571q0 37.714286-26.857142 64.571429t-64.571429 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 786.285714V237.714286q0-37.714286 26.857143-64.571429t64.571428-26.857143h1060.571429q37.714286 0 64.571429 26.857143t26.857142 64.571429v91.428571z m0 292.571429V402.285714h-73.142857V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858H91.428571q-8 0-13.142857 5.142858t-5.142857 13.142857v548.571428q0 8 5.142857 13.142857t13.142857 5.142858h1060.571429q8 0 13.142857-5.142858t5.142857-13.142857v-164.571428h73.142857z\"  ></path></symbol><symbol id=\"icon-battery-half\" viewBox=\"0 0 1316 1024\"><path d=\"M146.285714 731.428571V292.571429h512v438.857142H146.285714z m1097.142857-402.285714q30.285714 0 51.714286 21.428572T1316.571429 402.285714v219.428572q0 30.285714-21.428572 51.714285T1243.428571 694.857143v91.428571q0 37.714286-26.857142 64.571429t-64.571429 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 786.285714V237.714286q0-37.714286 26.857143-64.571429t64.571428-26.857143h1060.571429q37.714286 0 64.571429 26.857143t26.857142 64.571429v91.428571z m0 292.571429V402.285714h-73.142857V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858H91.428571q-8 0-13.142857 5.142858t-5.142857 13.142857v548.571428q0 8 5.142857 13.142857t13.142857 5.142858h1060.571429q8 0 13.142857-5.142858t5.142857-13.142857v-164.571428h73.142857z\"  ></path></symbol><symbol id=\"icon-battery-empty\" viewBox=\"0 0 1316 1024\"><path d=\"M1243.428571 329.142857q30.285714 0 51.714286 21.428572T1316.571429 402.285714v219.428572q0 30.285714-21.428572 51.714285T1243.428571 694.857143v91.428571q0 37.714286-26.857142 64.571429t-64.571429 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 786.285714V237.714286q0-37.714286 26.857143-64.571429t64.571428-26.857143h1060.571429q37.714286 0 64.571429 26.857143t26.857142 64.571429v91.428571z m0 292.571429V402.285714h-73.142857V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858H91.428571q-8 0-13.142857 5.142858t-5.142857 13.142857v548.571428q0 8 5.142857 13.142857t13.142857 5.142858h1060.571429q8 0 13.142857-5.142858t5.142857-13.142857v-164.571428h73.142857z\"  ></path></symbol><symbol id=\"icon-battery-full\" viewBox=\"0 0 1316 1024\"><path d=\"M1097.142857 292.571429v438.857142H146.285714V292.571429h950.857143z m73.142857 329.142857h73.142857V402.285714h-73.142857V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858H91.428571q-8 0-13.142857 5.142858t-5.142857 13.142857v548.571428q0 8 5.142857 13.142857t13.142857 5.142858h1060.571429q8 0 13.142857-5.142858t5.142857-13.142857v-164.571428z m146.285715-219.428572v219.428572q0 30.285714-21.428572 51.714285T1243.428571 694.857143v91.428571q0 37.714286-26.857142 64.571429t-64.571429 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 786.285714V237.714286q0-37.714286 26.857143-64.571429t64.571428-26.857143h1060.571429q37.714286 0 64.571429 26.857143t26.857142 64.571429v91.428571q30.285714 0 51.714286 21.428572T1316.571429 402.285714z\"  ></path></symbol><symbol id=\"icon-battery-quarter\" viewBox=\"0 0 1316 1024\"><path d=\"M146.285714 731.428571V292.571429h292.571429v438.857142H146.285714z m1097.142857-402.285714q30.285714 0 51.714286 21.428572T1316.571429 402.285714v219.428572q0 30.285714-21.428572 51.714285T1243.428571 694.857143v91.428571q0 37.714286-26.857142 64.571429t-64.571429 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 786.285714V237.714286q0-37.714286 26.857143-64.571429t64.571428-26.857143h1060.571429q37.714286 0 64.571429 26.857143t26.857142 64.571429v91.428571z m0 292.571429V402.285714h-73.142857V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858H91.428571q-8 0-13.142857 5.142858t-5.142857 13.142857v548.571428q0 8 5.142857 13.142857t13.142857 5.142858h1060.571429q8 0 13.142857-5.142858t5.142857-13.142857v-164.571428h73.142857z\"  ></path></symbol><symbol id=\"icon-battery-three-quarters\" viewBox=\"0 0 1316 1024\"><path d=\"M146.285714 731.428571V292.571429h731.428572v438.857142H146.285714z m1097.142857-402.285714q30.285714 0 51.714286 21.428572T1316.571429 402.285714v219.428572q0 30.285714-21.428572 51.714285T1243.428571 694.857143v91.428571q0 37.714286-26.857142 64.571429t-64.571429 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 786.285714V237.714286q0-37.714286 26.857143-64.571429t64.571428-26.857143h1060.571429q37.714286 0 64.571429 26.857143t26.857142 64.571429v91.428571z m0 292.571429V402.285714h-73.142857V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858H91.428571q-8 0-13.142857 5.142858t-5.142857 13.142857v548.571428q0 8 5.142857 13.142857t13.142857 5.142858h1060.571429q8 0 13.142857-5.142858t5.142857-13.142857v-164.571428h73.142857z\"  ></path></symbol><symbol id=\"icon-battery\" viewBox=\"0 0 1316 1024\"><path d=\"M1097.142857 292.571429v438.857142H146.285714V292.571429h950.857143z m73.142857 329.142857h73.142857V402.285714h-73.142857V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858H91.428571q-8 0-13.142857 5.142858t-5.142857 13.142857v548.571428q0 8 5.142857 13.142857t13.142857 5.142858h1060.571429q8 0 13.142857-5.142858t5.142857-13.142857v-164.571428z m146.285715-219.428572v219.428572q0 30.285714-21.428572 51.714285T1243.428571 694.857143v91.428571q0 37.714286-26.857142 64.571429t-64.571429 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 786.285714V237.714286q0-37.714286 26.857143-64.571429t64.571428-26.857143h1060.571429q37.714286 0 64.571429 26.857143t26.857142 64.571429v91.428571q30.285714 0 51.714286 21.428572T1316.571429 402.285714z\"  ></path></symbol><symbol id=\"icon-beer\" viewBox=\"0 0 1024 1024\"><path d=\"M402.285714 512V292.571429H256v146.285714q0 30.285714 21.428571 51.714286T329.142857 512h73.142857z m585.142857 256v109.714286H329.142857v-109.714286l73.142857-109.714286H329.142857q-90.857143 0-155.142857-64.285714T109.714286 438.857143V256l-36.571429-36.571429 18.285714-73.142857h274.285715l18.285714-73.142857h548.571429l18.285714 109.714286-36.571429 18.285714v457.142857z\"  ></path></symbol><symbol id=\"icon-bed\" viewBox=\"0 0 1170 1024\"><path d=\"M146.285714 585.142857h987.428572q14.857143 0 25.714285 10.857143t10.857143 25.714286v256h-146.285714v-146.285715H146.285714v146.285715H0V182.857143q0-14.857143 10.857143-25.714286t25.714286-10.857143h73.142857q14.857143 0 25.714285 10.857143t10.857143 25.714286v402.285714z m329.142857-182.857143q0-60.571429-42.857142-103.428571t-103.428572-42.857143-103.428571 42.857143-42.857143 103.428571 42.857143 103.428572 103.428571 42.857143 103.428572-42.857143 42.857142-103.428572z m694.857143 146.285715v-36.571429q0-90.857143-64.285714-155.142857T950.857143 292.571429H548.571429q-14.857143 0-25.714286 10.857142t-10.857143 25.714286v219.428572h658.285714z\"  ></path></symbol><symbol id=\"icon-behance\" viewBox=\"0 0 1170 1024\"><path d=\"M1056 193.714286h-292v70.857143h292V193.714286z m-144 243.428571q-51.428571 0-83.428571 30T793.142857 548.571429h233.142857q-10.285714-111.428571-114.285714-111.428572z m9.142857 334.285714q36 0 69.714286-18.285714t43.428571-49.714286h126.285715q-57.142857 175.428571-244 175.428572-122.285714 0-194.571429-75.428572T649.714286 605.142857q0-118.857143 74.571428-197.428571T916.571429 329.142857q78.857143 0 137.428571 38.857143t87.428571 102.285714 28.857143 141.714286q0 9.714286-1.142857 26.857143h-376q0 63.428571 32.857143 98T921.142857 771.428571z m-762.857143-28.571428h169.142857q117.142857 0 117.142858-95.428572 0-102.857143-113.714286-102.857142H158.285714v198.285714z m0-306.857143h160.571429q44.571429 0 70.571428-20.857143T415.428571 350.285714q0-82.285714-108.571428-82.285714H158.285714v168zM0 145.142857h339.428571q49.714286 0 88.571429 8t72.285714 27.142857 51.428572 55.142857T569.714286 323.428571q0 103.428571-98.285715 150.285715 65.142857 18.285714 98.285715 65.714285t33.142857 116.571429q0 42.857143-14 78t-37.714286 59.142857-56.285714 40.571429-69.142857 24-76.571429 7.428571H0V145.142857z\"  ></path></symbol><symbol id=\"icon-behance-square\" viewBox=\"0 0 1024 1024\"><path d=\"M786.285714 73.142857q68 0 116.285715 48.285714T950.857143 237.714286v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428zM358.285714 282.857143H146.285714v449.714286h218.285715q66.857143 0 112.571428-32.857143t45.714286-97.428572q0-90.285714-81.714286-114.285714 61.142857-29.714286 61.142857-93.714286 0-32.571429-11.142857-55.142857T458.857143 304.571429t-45.142857-16.857143-55.428572-4.857143z m-12.571428 181.714286H245.142857V359.428571h93.142857q68 0 68 51.428572 0 53.714286-60.571428 53.714286z m5.142857 191.428571H245.142857V532h108q70.857143 0 70.857143 64.571429 0 59.428571-73.142857 59.428571z m371.428571 18.285714q-38.857143 0-59.428571-21.714285t-20.571429-61.142858h234.857143q0.571429-5.714286 0.571429-17.142857 0-75.428571-42.571429-126T718.857143 397.714286q-73.142857 0-120 49.142857t-46.857143 123.428571q0 77.142857 45.142857 124t121.714286 46.857143q117.142857 0 152.571428-109.142857h-78.857142q-6.285714 19.428571-27.142858 30.857143t-43.142857 11.428571z m-5.714285-209.142857q64.571429 0 70.857142 69.714286H642.285714q2.285714-32 22.285715-50.857143t52-18.857143zM624 313.142857h182.285714v44H624v-44z\"  ></path></symbol><symbol id=\"icon-bell-o\" viewBox=\"0 0 1024 1024\"><path d=\"M521.142857 969.142857q0-9.142857-9.142857-9.142857-33.714286 0-58-24.285714T429.714286 877.714286q0-9.142857-9.142857-9.142857t-9.142858 9.142857q0 41.714286 29.428572 71.142857T512 978.285714q9.142857 0 9.142857-9.142857z m-380.571428-164.571428h742.857142q-152-171.428571-152-475.428572 0-29.142857-13.714285-60t-39.428572-58.857143-69.428571-46T512 146.285714t-96.857143 18T345.714286 210.285714t-39.428572 58.857143-13.714285 60q0 304-152 475.428572z m846.857142 0q0 29.714286-21.714285 51.428571t-51.428572 21.714286h-256q0 60.571429-42.857143 103.428571t-103.428571 42.857143-103.428571-42.857143-42.857143-103.428571H109.714286q-29.714286 0-51.428572-21.714286t-21.714285-51.428571q28.571429-24 52-50.285715t48.571428-68.285714 42.571429-90.571429 28.571428-117.714285T219.428571 329.142857q0-86.857143 66.857143-161.428571T461.714286 77.142857q-4.571429-10.857143-4.571429-22.285714 0-22.857143 16-38.857143t38.857143-16 38.857143 16 16 38.857143q0 11.428571-4.571429 22.285714 108.571429 16 175.428572 90.571429T804.571429 329.142857q0 79.428571 11.142857 148.571429t28.571428 117.714285 42.571429 90.571429 48.571428 68.285714 52 50.285715z\"  ></path></symbol><symbol id=\"icon-bell-slash-o\" viewBox=\"0 0 1170 1024\"><path d=\"M594.285714 969.142857q0-9.142857-9.142857-9.142857-33.714286 0-58-24.285714T502.857143 877.714286q0-9.142857-9.142857-9.142857t-9.142857 9.142857q0 41.714286 29.428571 71.142857T585.142857 978.285714q9.142857 0 9.142857-9.142857z m-306.857143-271.428571l501.142858-434.285715q-24-50.285714-75.714286-83.714285T585.142857 146.285714q-53.142857 0-96.857143 18T418.857143 210.285714t-39.428572 58.857143-13.714285 60q0 219.428571-78.285715 368.571429z m773.142858 106.857143q0 29.714286-21.714286 51.428571t-51.428572 21.714286h-256q0 60.571429-42.857142 103.428571t-103.428572 42.857143-103.142857-42.571429T438.857143 878.285714l85.142857-73.714285h432.571429q-94.857143-106.857143-129.714286-262.285715l63.428571-55.428571q34.857143 203.428571 170.285715 317.714286z m49.142857-795.428572l48 54.857143q4.571429 5.714286 4.285714 13.428571T1156 90.285714L86.285714 1017.142857q-5.714286 4.571429-13.428571 4t-12.285714-6.285714l-48-54.857143q-4.571429-5.714286-4.285715-13.428571T14.285714 934.285714l106.285715-92q-10.857143-18.285714-10.857143-37.714285 28.571429-24 52-50.285715t48.571428-68.285714 42.571429-90.571429 28.571428-117.714285T292.571429 329.142857q0-86.857143 66.857142-161.428571T534.857143 77.142857q-4.571429-10.857143-4.571429-22.285714 0-22.857143 16-38.857143t38.857143-16 38.857143 16 16 38.857143q0 11.428571-4.571429 22.285714 70.857143 10.285714 125.142858 47.142857T845.142857 214.285714l238.857143-207.428571q5.714286-4.571429 13.428571-4t12.285715 6.285714z\"  ></path></symbol><symbol id=\"icon-bell-slash\" viewBox=\"0 0 1170 1024\"><path d=\"M890.285714 486.857143q34.857143 203.428571 170.285715 317.714286 0 29.714286-21.714286 51.428571t-51.428572 21.714286h-256q0 60.571429-42.857142 103.428571t-103.428572 42.857143-103.142857-42.571429T438.857143 878.285714z m-305.142857 491.428571q9.142857 0 9.142857-9.142857t-9.142857-9.142857q-33.714286 0-58-24.285714T502.857143 877.714286q0-9.142857-9.142857-9.142857t-9.142857 9.142857q0 41.714286 29.428571 71.142857T585.142857 978.285714zM1157.714286 64q4.571429 5.714286 4.285714 13.428571T1156 90.285714L86.285714 1017.142857q-5.714286 4.571429-13.428571 4t-12.285714-6.285714l-48-54.857143q-4.571429-5.714286-4.285715-13.428571T14.285714 934.285714l106.285715-92q-10.857143-18.285714-10.857143-37.714285 28.571429-24 52-50.285715t48.571428-68.285714 42.571429-90.571429 28.571428-117.714285T292.571429 329.142857q0-86.857143 66.857142-161.428571T534.857143 77.142857q-4.571429-10.857143-4.571429-22.285714 0-22.857143 16-38.857143t38.857143-16 38.857143 16 16 38.857143q0 11.428571-4.571429 22.285714 70.857143 10.285714 125.142858 47.142857T845.142857 214.285714l238.857143-207.428571q5.714286-4.571429 13.428571-4t12.285715 6.285714z\"  ></path></symbol><symbol id=\"icon-bicycle\" viewBox=\"0 0 1316 1024\"><path d=\"M435.428571 658.285714H256q-22.857143 0-32.857143-20t3.714286-38.285714l107.428571-143.428571q-37.142857-17.714286-78.285714-17.714286-75.428571 0-129.142857 53.714286t-53.714286 129.142857 53.714286 129.142857 129.142857 53.714286q65.714286 0 116-41.428572T435.428571 658.285714z m-106.285714-73.142857h106.285714q-10.285714-48.571429-42.857142-84.571428z m274.285714 0l164.571429-219.428571H493.714286l-56.571429 75.428571q60 58.857143 72 144h94.285714z m640 36.571429q0-75.428571-53.714285-129.142857t-129.142857-53.714286q-34.285714 0-69.142858 13.714286l99.428572 148.571428q8.571429 13.142857 5.714286 28t-15.428572 22.857143q-8.571429 6.285714-20.571428 6.285714-20 0-30.285715-16.571428l-99.428571-148.571429q-53.142857 54.285714-53.142857 128.571429 0 75.428571 53.714285 129.142857t129.142858 53.714286 129.142857-53.714286 53.714285-129.142857z m73.142858 0q0 105.714286-75.142858 180.857143T1060.571429 877.714286t-180.857143-75.142857T804.571429 621.714286q0-55.428571 22.571428-104.857143T889.714286 431.428571l-37.142857-56-201.714286 268q-10.285714 14.857143-29.142857 14.857143H509.142857q-13.142857 93.714286-85.142857 156.571429t-168 62.857143q-105.714286 0-180.857143-75.142857T0 621.714286t75.142857-180.857143T256 365.714286q65.142857 0 122.857143 31.428571l78.285714-104.571428H329.142857q-14.857143 0-25.714286-10.857143t-10.857142-25.714286 10.857142-25.714286 25.714286-10.857143h219.428572v73.142858h248.571428l-48.571428-73.142858h-126.857143q-14.857143 0-25.714286-10.857142t-10.857143-25.714286 10.857143-25.714286 25.714286-10.857143h146.285714q18.857143 0 30.285714 16l152.571429 228.571429q52-25.142857 109.714286-25.142857 105.714286 0 180.857142 75.142857T1316.571429 621.714286z\"  ></path></symbol><symbol id=\"icon-bitbucket-square\" viewBox=\"0 0 1024 1024\"><path d=\"M557.714286 497.142857q0-24.571429-23.428572-37.714286t-44-0.571428q-24.571429 11.428571-24.285714 41.428571T490.857143 540.571429q22.285714 13.142857 46.285714-2.285715t20.571429-41.142857z m45.714285-9.142857q4.571429 37.714286-20.571428 69.142857t-62.857143 34.857143-68-22.857143-32-64.571428q-1.142857-28 14.571429-53.142858t41.428571-36.571428q40-17.714286 80.857143 5.714286T603.428571 488z m98.285715-223.428571q-11.428571 12-30.571429 19.428571t-30.285714 9.142857-36.285714 4.571429q-88.571429 11.428571-185.142858 0-25.142857-3.428571-36-5.428572t-30-9.142857T322.285714 264.571429q7.428571-10.857143 20.571429-17.714286t22.857143-8.857143 26.857143-4.857143q113.142857-20 233.142857-0.571428 18.857143 2.857143 29.142857 4.857142t24.571428 9.142858 22.285715 18z m24 426.285714q0-4 3.142857-15.142857t1.714286-18.285715-10-9.428571q-92 60.571429-208.571429 60.571429t-209.142857-60.571429l-6.857143 3.428571-2.857143 6.857143q14.857143 88 23.428572 120 26.857143 46.285714 116.571428 61.714286 142.285714 26.285714 244.571429-30.285714 19.428571-10.857143 28-29.428572t12.857143-48.857143 7.142857-40.571428z m74.285714-396q5.142857-30.285714-4.571429-42.857143-24.571429-31.428571-88.571428-50.285714-123.428571-36-278.285714-20.571429-75.428571 6.857143-129.142858 26.285714-21.714286 8.571429-34 14.285715t-26.857142 19.428571-16.857143 30.857143q4.571429 38.857143 10.857143 78.857143t16.571428 97.714286 13.714286 78.285714q0.571429 2.857143 2.857143 17.714286t4 20.571428 6.857143 15.428572 12.571428 16q60 45.714286 162.285714 57.142857 148 16 251.428572-36 13.714286-7.428571 22.571428-13.142857t17.714286-16.571429 11.142857-22.857143q27.428571-152.571429 45.714286-270.285714z m150.857143-57.142857v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-binoculars\" viewBox=\"0 0 1024 1024\"><path d=\"M402.285714 182.857143v438.857143q0 14.857143-10.857143 25.714285t-25.714285 10.857143v329.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H36.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-292.571428l142.285714-498.857143q4-13.142857 17.714286-13.142857h242.285714z m182.857143 0v402.285714H438.857143V182.857143h146.285714z m438.857143 512v292.571428q0 14.857143-10.857143 25.714286t-25.714286 10.857143h-292.571428q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-329.142857q-14.857143 0-25.714285-10.857143t-10.857143-25.714285V182.857143h242.285714q13.714286 0 17.714286 13.142857zM420.571429 18.285714v128H219.428571V18.285714q0-8 5.142858-13.142857t13.142857-5.142857h164.571428q8 0 13.142857 5.142857t5.142858 13.142857z m384 0v128h-201.142858V18.285714q0-8 5.142858-13.142857t13.142857-5.142857h164.571428q8 0 13.142857 5.142857t5.142858 13.142857z\"  ></path></symbol><symbol id=\"icon-bell\" viewBox=\"0 0 1024 1024\"><path d=\"M521.142857 969.142857q0-9.142857-9.142857-9.142857-33.714286 0-58-24.285714T429.714286 877.714286q0-9.142857-9.142857-9.142857t-9.142858 9.142857q0 41.714286 29.428572 71.142857T512 978.285714q9.142857 0 9.142857-9.142857z m466.285714-164.571428q0 29.714286-21.714285 51.428571t-51.428572 21.714286h-256q0 60.571429-42.857143 103.428571t-103.428571 42.857143-103.428571-42.857143-42.857143-103.428571H109.714286q-29.714286 0-51.428572-21.714286t-21.714285-51.428571q28.571429-24 52-50.285715t48.571428-68.285714 42.571429-90.571429 28.571428-117.714285T219.428571 329.142857q0-86.857143 66.857143-161.428571T461.714286 77.142857q-4.571429-10.857143-4.571429-22.285714 0-22.857143 16-38.857143t38.857143-16 38.857143 16 16 38.857143q0 11.428571-4.571429 22.285714 108.571429 16 175.428572 90.571429T804.571429 329.142857q0 79.428571 11.142857 148.571429t28.571428 117.714285 42.571429 90.571429 48.571428 68.285714 52 50.285715z\"  ></path></symbol><symbol id=\"icon-birthday-cake\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 804.571429v219.428571H0v-219.428571q25.714286 0 48.571429-8t33.714285-15.714286 26.857143-21.428572q17.142857-15.428571 29.428572-21.714285t32.285714-6.285715q13.714286 0 25.142857 4t17.714286 8.571429 18.857143 15.428571q16.571429 14.285714 26.857142 21.714286t33.142858 15.428572 49.142857 8q25.714286 0 48.571428-8.285715t33.142857-15.428571 27.428572-21.428572q12-10.857143 18.571428-15.428571t17.714286-8.571429 24.857143-4q20 0 32.285714 6.285715t29.428572 21.714285q16 13.714286 26.857143 21.428572t33.714285 15.714286 48.571429 8 48.571428-8 33.714286-15.714286 26.857143-21.428572q17.142857-15.428571 29.428571-21.714285t32.285715-6.285715q19.428571 0 31.714285 6.285715t29.428572 21.714285q16 13.714286 26.857143 21.428572t33.714285 15.714286 48.571429 8z m0-182.857143v109.714285q-13.714286 0-25.142857-4t-17.714286-8.571428-18.857143-15.428572q-16.571429-14.285714-26.857143-21.714285t-33.142857-15.428572-48.571428-8q-26.285714 0-49.142857 8t-33.142858 15.428572-26.857142 21.714285q-12.571429 10.857143-18.857143 15.428572t-17.714286 8.571428-25.142857 4q-20 0-32.285714-6.285714t-29.428572-21.714286q-16.571429-14.285714-26.857143-21.714285t-33.142857-15.428572-49.142857-8q-25.714286 0-48.571429 8.285715t-33.142857 15.428571-27.428571 21.428571q-12 10.857143-18.571429 15.428572t-17.714285 8.571428-24.857143 4q-20 0-32.285715-6.285714t-29.428571-21.714286q-16-13.714286-26.857143-21.428571t-33.714286-15.714286-48.571428-8q-26.285714 0-49.142857 8t-33.142857 15.428572-26.857143 21.714285q-17.142857 15.428571-29.428572 21.714286T0 731.428571v-109.714285q0-45.714286 32-77.714286t77.714286-32h36.571428V256h146.285715v256h146.285714V256h146.285714v256h146.285714V256h146.285715v256h36.571428q45.714286 0 77.714286 32t32 77.714286zM292.571429 128q0 44-20.571429 67.714286T219.428571 219.428571q-30.285714 0-51.714285-21.428571T146.285714 146.285714q0-16.571429 5.428572-29.142857t13.428571-19.428571 17.714286-16 17.714286-18T214 38.285714 219.428571 0q21.714286 0 47.428572 42.285714t25.714286 85.714286z m292.571428 0q0 44-20.571428 67.714286T512 219.428571q-30.285714 0-51.714286-21.428571T438.857143 146.285714q0-16.571429 5.428571-29.142857t13.428572-19.428571 17.714285-16 17.714286-18T506.571429 38.285714 512 0q21.714286 0 47.428571 42.285714t25.714286 85.714286z m292.571429 0q0 44-20.571429 67.714286t-52.571428 23.714285q-30.285714 0-51.714286-21.428571T731.428571 146.285714q0-16.571429 5.428572-29.142857t13.428571-19.428571 17.714286-16 17.714286-18 13.428571-25.428572 5.428572-38.285714q21.714286 0 47.428571 42.285714t25.714286 85.714286z\"  ></path></symbol><symbol id=\"icon-bitbucket\" viewBox=\"0 0 1024 1024\"><path d=\"M575.285691 490.857143q4.571429 36-28.857142 57.714286T482.714263 552q-22.285714-9.714286-30.571429-33.142857t-0.285714-46.857143 29.714286-33.142857q20.571429-10.285714 41.428571-6.857143t36.571429 20.285714T575.285691 490.857143z m63.428572-12q-8-61.142857-64.571429-93.714286t-112.571428-7.428571q-36 16-57.428572 50.571428T384.428549 502.285714q2.285714 52 44.285714 88.571429t94.571428 32q52-4.571429 86.857143-48t28.571429-96z m136.571428-309.714286q-11.428571-15.428571-32-25.428571t-33.142857-12.571429-40.571428-7.142857q-166.285714-26.857143-323.428572 1.142857-24.571429 4-37.714285 6.857143t-31.428572 12.571429-28.571428 24.571428q17.142857 16 43.428571 26t42 12.571429T383.85712 214.285714q130.285714 16.571429 256 0.571429 36-4.571429 51.142857-6.857143t41.428572-12.285714 42.857142-26.571429z m32.571429 591.428572q-4.571429 14.857143-8.857143 43.714285t-8 48-16.285714 40-33.142857 32.285715q-49.142857 27.428571-108.285715 40.857142t-115.428571 12.571429T402.714263 967.428571q-26.285714-4.571429-46.571429-10.285714t-43.714285-15.428571-41.714286-24.857143-29.714286-35.142857q-14.285714-54.857143-32.571428-166.857143l3.428571-9.142857 10.285714-5.142857q127.428571 84.571429 289.428572 84.571428t290-84.571428q12 3.428571 13.714285 13.142857t-2.857142 25.714285-4.571429 21.142858z m103.428571-549.142858q-14.857143 95.428571-63.428571 374.285715-2.857143 17.142857-15.428571 32t-24.857143 22.857143-31.142857 17.714285q-144 72-348.571429 50.285715-141.714286-15.428571-225.142857-79.428572-8.571429-6.857143-14.571429-15.142857t-9.714285-20-5.142858-19.428571-3.428571-22.571429-3.142857-20q-5.142857-28.571429-15.142857-85.714286t-16-92.285714T122.142834 269.714286 109.571406 179.428571q1.714286-14.857143 10-27.714285T137.571406 130.285714t25.714285-17.142857 26.285715-12.857143 27.428571-10.571428q71.428571-26.285714 178.857143-36.571429 216.571429-21.142857 386.285714 28.571429 88.571429 26.285714 122.857143 69.714285 9.142857 11.428571 9.428572 29.142858t-3.142858 30.857142z\"  ></path></symbol><symbol id=\"icon-black-tie\" viewBox=\"0 0 1024 1024\"><path d=\"M73.142857 73.142857h877.714286v877.714286H73.142857V73.142857z m620 637.142857L566.857143 349.714286l126.285714-169.714286H330.857143l126.285714 169.714286-126.285714 360.571428 181.142857 173.714286z\"  ></path></symbol><symbol id=\"icon-bluetooth-b\" viewBox=\"0 0 1024 1024\"><path d=\"M560 813.142857l98.857143-98.285714-98.857143-98.285714v196.571428z m0-405.714286l98.857143-98.285714-98.857143-98.285714v196.571428z m18.285714 104.571429l203.428572 203.428571-308 308.571429v-406.285714l-169.714286 169.142857-61.714286-61.714286 212.571429-213.142857L242.285714 298.857143l61.714286-61.714286 169.714286 169.142857V0l308 308.571429z\"  ></path></symbol><symbol id=\"icon-bitcoin\" viewBox=\"0 0 1024 1024\"><path d=\"M813.142857 365.714286q10.285714 104-74.857143 147.428571 66.857143 16 100 58.857143t25.714286 122.285714q-4 40.571429-18.571429 71.428572t-36.857142 50.857143-55.428572 33.428571-69.428571 19.714286-83.142857 8.571428v145.714286H512.571429v-143.428571q-45.714286 0-69.714286-0.571429v144H354.857143v-145.714286q-10.285714 0-30.857143-0.285714t-31.428571-0.285714H178.285714l17.714286-104.571429h63.428571q28.571429 0 33.142858-29.142857V514.285714h9.142857q-3.428571-0.571429-9.142857-0.571428V349.714286q-7.428571-38.857143-50.857143-38.857143H178.285714V217.142857l121.142857 0.571429q36.571429 0 55.428572-0.571429V73.142857h88v141.142857q46.857143-1.142857 69.714286-1.142857V73.142857h88v144q45.142857 4 80 12.857143t64.571428 25.714286 47.142857 44.571428T813.142857 365.714286z m-122.857143 311.428571q0-20.571429-8.571428-36.571428t-21.142857-26.285715-32.857143-17.428571T590.285714 586.285714t-42.285714-5.142857-39.428571-1.714286-36.857143 0.571429-27.142857 0.571429v193.142857q4.571429 0 21.142857 0.285714t27.428571 0.285714 30.285714-0.857143 33.428572-2.285714 32.571428-4.857143 31.714286-8 27.142857-12 22.571429-17.142857 14-22.857143 5.428571-29.142857z m-40.571428-272q0-18.857143-7.142857-33.428571t-17.428572-24-27.428571-16-31.428572-9.428572-35.142857-4.571428-33.142857-1.428572-30.857143 0.571429-22.571428 0.285714v175.428572q2.857143 0 19.714285 0.285714t26.571429 0 28.571428-1.142857 31.428572-3.142857 29.428571-6.285715 27.714286-10.571428 21.142857-15.428572 15.428572-22 5.142857-29.142857z\"  ></path></symbol><symbol id=\"icon-blind\" viewBox=\"0 0 1024 1024\"><path d=\"M281.194786 177.714286q-36.571429 0-62.857143-26T192.051929 88.571429q0-36.571429 26.285714-62.571429T281.194786 0t62.571428 26T369.766214 88.571429q0 37.142857-26 63.142857T281.194786 177.714286z m314.857143 366.857143q0 28.571429-17.142858 38.571428t-36.285714 3.714286-27.142857-19.428572L305.766214 317.142857q-4-6.857143-8-8.857143t-6.285714-0.857143l-1.714286 1.714286q-4 4.571429 2.285715 12l69.714285 79.428572 0.571429 202.285714-92 261.142857q-38.285714 109.714286-52.571429 133.714286-8.571429 14.857143-16 18.285714-28.571429 14.857143-58.857143 0.571429-16.571429-7.428571-23.714285-24.571429t-5.428572-32.571429q1.142857-9.714286 112.571429-353.142857l2.857143-237.714285-48.571429 93.714285 20 126.857143q2.285714 13.714286-0.571428 24t-8 15.714286-10.857143 9.142857-9.714286 4.285714l-4 1.142857q-10.857143 1.714286-19.714286-1.714285t-13.714285-9.142857-8-12.571429-4.285715-11.142857-1.142857-5.428572L94.337643 432.571429l120.571428-217.714286q13.142857-19.428571 64.571429-19.428572 42.857143 0 61.142857 22.857143l242.285714 297.714286q4 2.857143 8 9.714286l1.714286 1.714285-0.571428 0.571429q4 7.428571 4 16.571429z m-230.285715 85.714285q24.571429 64.571429 50.571429 128.571429t39.714286 96l13.714285 31.428571q20.571429 53.142857 24 71.428572 6.285714 40-20.571428 55.428571-20 12.571429-37.714286 9.142857t-29.142857-12.571428-16.571429-20h-0.571428q-3.428571-9.142857-4.571429-14.285715l-70.857143-200.571428z m470.857143 338.285715q17.714286 28 17.714286 32.571428 0 2.857143-1.714286 4-5.142857 2.857143-8.285714-0.285714t-8.857143-14.857143-9.142857-17.428571q-65.142857-98.285714-241.714286-377.714286 1.714286 0.571429 4-0.571429t4-2.285714l1.714286-1.142857q6.285714-5.142857 6.285714-9.714286z\"  ></path></symbol><symbol id=\"icon-bluetooth\" viewBox=\"0 0 1024 1024\"><path d=\"M553.714286 601.714286l84.571428 84.571428-85.142857 85.142857z m-0.571429-349.142857l85.142857 85.142857-84.571428 84.571428zM478.857143 952l265.142857-265.142857-174.857143-174.857143 174.857143-174.857143-265.142857-265.142857v349.142857L333.142857 275.428571l-53.142857 53.142858 182.857143 183.428571-182.857143 183.428571 53.142857 53.142858 145.714286-145.714286v349.142857z m410.857143-440q0 119.428571-18.285715 208.857143t-50 146.857143T741.142857 960.571429t-103.714286 49.428571T512 1024t-125.428571-14T282.857143 960.571429t-80.285714-92.857143-50-146.857143T134.285714 512t18.285715-208.857143 50-146.857143T282.857143 63.428571t103.714286-49.428571T512 0t125.428571 14T741.142857 63.428571t80.285714 92.857143 50 146.857143 18.285715 208.857143z\"  ></path></symbol><symbol id=\"icon-bold\" viewBox=\"0 0 1024 1024\"><path d=\"M426.857143 869.142857q42.285714 18.285714 80 18.285714 214.857143 0 214.857143-191.428571 0-65.142857-23.428572-102.857143-15.428571-25.142857-35.142857-42.285714T624.571429 524.285714t-46-14.285714-48-6-54-1.142857q-41.714286 0-57.714286 5.714286 0 30.285714-0.285714 90.857142t-0.285715 90.285715q0 4.571429-0.571428 38.571428t-0.285715 55.142857 2.571429 47.714286 6.857143 38z m-8-426.285714q24 4 62.285714 4 46.857143 0 81.714286-7.428572t62.857143-25.428571 42.571428-51.142857 14.571429-81.142857q0-40-16.571429-70t-45.142857-46.857143T559.428571 140t-70.857142-8q-28.571429 0-74.285715 7.428571 0 28.571429 2.285715 86.285715t2.285714 86.857143q0 15.428571-0.285714 45.714285t-0.285715 45.142857q0 26.285714 0.571429 39.428572zM109.714286 950.857143l1.142857-53.714286q8.571429-2.285714 48.571428-9.142857t60.571429-15.428571q4-6.857143 7.142857-15.428572t4.857143-19.142857 3.142857-18.571429 1.714286-21.428571 0.285714-19.428571V741.142857q0-561.142857-12.571428-585.714286-2.285714-4.571429-12.571429-8.285714t-25.428571-6.285714-28.285715-4-27.714285-2.571429T113.142857 132.571429l-2.285714-47.428572q56-1.142857 194.285714-6.571428t213.142857-5.428572q13.142857 0 38.857143 0.285714t38.857143 0.285715q40 0 78 7.428571t73.428571 24 61.714286 40.571429 42.285714 59.714285 16 78.571429q0 29.714286-9.428571 54.571429t-22.285714 41.142857T798.857143 412.571429t-41.714286 25.714285-48 22.857143q88 20 146.571429 76.571429t58.571428 141.714285q0 57.142857-20 102.571429t-53.428571 74.571429-78.857143 48.857142T668.571429 933.142857t-100.571429 8q-25.142857 0-75.428571-1.714286t-75.428572-1.714285q-60.571429 0-175.428571 6.285714T109.714286 950.857143z\"  ></path></symbol><symbol id=\"icon-bolt\" viewBox=\"0 0 1024 1024\"><path d=\"M739.412991 323.428571q10.285714 11.428571 4 25.142858L434.841563 1009.714286q-7.428571 14.285714-24 14.285714-2.285714 0-8-1.142857-9.714286-2.857143-14.571429-10.857143t-2.571428-17.142857l112.571428-461.714286-232 57.714286q-2.285714 0.571429-6.857143 0.571428-10.285714 0-17.714285-6.285714-10.285714-8.571429-7.428572-22.285714l114.857143-471.428572q2.285714-8 9.142857-13.142857t16-5.142857h187.428572q10.857143 0 18.285714 7.142857t7.428571 16.857143q0 4.571429-2.857142 10.285714L486.841563 372l226.285714-56q4.571429-1.142857 6.857143-1.142857 10.857143 0 19.428571 8.571428z\"  ></path></symbol><symbol id=\"icon-bomb\" viewBox=\"0 0 1024 1024\"><path d=\"M326.285714 336.571429q-5.714286-14.285714-19.428571-20t-28 0q-61.714286 25.142857-109.142857 72.571428T97.142857 498.285714q-5.714286 14.285714 0 28t20 19.428572q7.428571 2.857143 13.714286 2.857143 24 0 34.285714-22.857143 19.428571-48 56.285714-84.857143T306.285714 384.571429q14.285714-6.285714 20-20t0-28z m538.285715-203.428572l26.285714 26.285714-139.428572 138.857143 38.857143 38.857143q10.857143 10.857143 10.857143 26t-10.857143 26l-36.571428 36.571429q50.857143 92 50.857143 196 0 81.714286-31.714286 156.285714t-85.714286 128.571429-128.571428 85.714285T402.285714 1024t-156.285714-31.714286-128.571429-85.714285-85.714285-128.571429T0 621.714286t31.714286-156.285715 85.714285-128.571428 128.571429-85.714286T402.285714 219.428571q104 0 196 50.857143l36.571429-36.571428q10.857143-10.857143 26-10.857143t26 10.857143l38.857143 38.857143z m4.571428-32q-5.714286 5.714286-12.571428 5.714286-7.428571 0-13.142858-5.714286l-52-51.428571q-5.142857-5.714286-5.142857-13.142857t5.142857-13.142858q5.714286-5.142857 13.142858-5.142857t13.142857 5.142857l51.428571 52q5.714286 5.142857 5.714286 12.857143t-5.714286 12.857143z m131.428572 131.428572q-6.285714 5.142857-13.142858 5.142857t-13.142857-5.142857l-51.428571-52q-5.714286-5.142857-5.714286-12.857143t5.714286-12.857143q5.142857-5.714286 12.857143-5.714286t12.857143 5.714286l52 51.428571q5.142857 5.714286 5.142857 13.142857t-5.142857 13.142858z m23.428571-104.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143q-8 0-13.142857-5.142857t-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857h54.857143q8 0 13.142857 5.142857t5.142857 13.142857zM914.285714 18.285714v54.857143q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857V18.285714q0-8 5.142857-13.142857t13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m86.285715 31.428572l-52 51.428571q-5.714286 5.714286-12.571429 5.714286-7.428571 0-13.142857-5.714286-5.714286-5.142857-5.714286-12.857143t5.714286-12.857143l51.428571-52q5.714286-5.142857 13.142857-5.142857t13.142858 5.142857q5.142857 5.714286 5.142857 13.142858t-5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-book\" viewBox=\"0 0 1024 1024\"><path d=\"M973.142857 273.142857q22.857143 32.571429 10.285714 73.714286l-157.142857 517.714286q-10.857143 36.571429-43.714285 61.428571T712.571429 950.857143H185.142857q-44 0-84.857143-30.571429T43.428571 845.142857q-13.714286-38.285714-1.142857-72.571428 0-2.285714 1.714286-15.428572t2.285714-21.142857q0.571429-4.571429-1.714285-12.285714t-1.714286-11.142857q1.142857-6.285714 4.571428-12t9.428572-13.428572T66.285714 673.714286q13.142857-21.714286 25.714286-52.285715t17.142857-52.285714q1.714286-5.714286 0.285714-17.142857t-0.285714-16q1.714286-6.285714 9.714286-16t9.714286-13.142857q12-20.571429 24-52.571429t14.285714-51.428571q0.571429-5.142857-1.428572-18.285714t0.285715-16q2.285714-7.428571 12.571428-17.428572t12.571429-12.857143q10.857143-14.857143 24.285714-48.285714T230.857143 234.857143q0.571429-4.571429-1.714286-14.571429t-1.142857-15.142857q1.142857-4.571429 5.142857-10.285714t10.285714-13.142857 9.714286-12q4.571429-6.857143 9.428572-17.428572t8.571428-20 9.142857-20.571428 11.142857-18.285715 15.142858-13.428571 20.571428-6.571429T354.285714 76.571429l-0.571428 1.714285q21.714286-5.142857 29.142857-5.142857h434.857143q42.285714 0 65.142857 32t10.285714 74.285714l-156.571428 517.714286q-20.571429 68-40.857143 87.714286T622.285714 804.571429H125.714286q-15.428571 0-21.714286 8.571428-6.285714 9.142857-0.571429 24.571429 13.714286 40 82.285715 40h527.428571q16.571429 0 32-8.857143t20-23.714286l171.428572-564q4-12.571429 2.857142-32.571428 21.714286 8.571429 33.714286 24.571428z m-608 1.142857q-2.285714 7.428571 1.142857 12.857143t11.428572 5.428572h347.428571q7.428571 0 14.571429-5.428572T749.142857 274.285714l12-36.571428q2.285714-7.428571-1.142857-12.857143t-11.428571-5.428572H401.142857q-7.428571 0-14.571428 5.428572T377.142857 237.714286z m-47.428571 146.285715q-2.285714 7.428571 1.142857 12.857142t11.428571 5.428572h347.428572q7.428571 0 14.571428-5.428572T701.714286 420.571429l12-36.571429q2.285714-7.428571-1.142857-12.857143t-11.428572-5.428571H353.714286q-7.428571 0-14.571429 5.428571T329.714286 384z\"  ></path></symbol><symbol id=\"icon-bug\" viewBox=\"0 0 1024 1024\"><path d=\"M969.142857 548.571429q0 14.857143-10.857143 25.714285t-25.714285 10.857143h-128q0 97.714286-38.285715 165.714286l118.857143 119.428571q10.857143 10.857143 10.857143 25.714286t-10.857143 25.714286q-10.285714 10.857143-25.714286 10.857143t-25.714285-10.857143l-113.142857-112.571429q-2.857143 2.857143-8.571429 7.428572t-24 16.285714-37.142857 20.857143-46.857143 16.571428-55.428571 7.428572V365.714286H475.428571v512q-29.142857 0-58-7.714286t-49.714285-18.857143-37.714286-22.285714T305.142857 810.285714l-8.571428-8-104.571429 118.285715q-11.428571 12-27.428571 12-13.714286 0-24.571429-9.142858-10.857143-10.285714-11.714286-25.428571T137.142857 871.428571l115.428572-129.714285q-33.142857-65.142857-33.142858-156.571429H91.428571q-14.857143 0-25.714285-10.857143t-10.857143-25.714285 10.857143-25.714286 25.714285-10.857143h128V344L120.571429 245.142857q-10.857143-10.857143-10.857143-25.714286t10.857143-25.714285 25.714285-10.857143 25.714286 10.857143l98.857143 98.857143h482.285714l98.857143-98.857143q10.857143-10.857143 25.714286-10.857143t25.714285 10.857143 10.857143 25.714285-10.857143 25.714286l-98.857142 98.857143v168h128q14.857143 0 25.714285 10.857143t10.857143 25.714286z m-274.285714-329.142858H329.142857q0-76 53.428572-129.428571T512 36.571429t129.428571 53.428571T694.857143 219.428571z\"  ></path></symbol><symbol id=\"icon-bookmark-o\" viewBox=\"0 0 1024 1024\"><path d=\"M770.867497 146.285714H185.72464v709.714286l241.714286-232 50.857143-48.571429 50.857142 48.571429 241.714286 232V146.285714z m6.857143-73.142857q13.142857 0 25.142857 5.142857 18.857143 7.428571 30 23.428572t11.142857 35.428571v736.571429q0 19.428571-11.142857 35.428571t-30 23.428572q-10.857143 4.571429-25.142857 4.571428-27.428571 0-47.428571-18.285714l-252-242.285714-252 242.285714q-20.571429 18.857143-47.428572 18.857143-13.142857 0-25.142857-5.142857-18.857143-7.428571-30-23.428572T112.581783 873.714286V137.142857q0-19.428571 11.142857-35.428571T153.72464 78.285714q12-5.142857 25.142857-5.142857h598.857143z\"  ></path></symbol><symbol id=\"icon-btc\" viewBox=\"0 0 1024 1024\"><path d=\"M813.142857 365.714286q10.285714 104-74.857143 147.428571 66.857143 16 100 58.857143t25.714286 122.285714q-4 40.571429-18.571429 71.428572t-36.857142 50.857143-55.428572 33.428571-69.428571 19.714286-83.142857 8.571428v145.714286H512.571429v-143.428571q-45.714286 0-69.714286-0.571429v144H354.857143v-145.714286q-10.285714 0-30.857143-0.285714t-31.428571-0.285714H178.285714l17.714286-104.571429h63.428571q28.571429 0 33.142858-29.142857V514.285714h9.142857q-3.428571-0.571429-9.142857-0.571428V349.714286q-7.428571-38.857143-50.857143-38.857143H178.285714V217.142857l121.142857 0.571429q36.571429 0 55.428572-0.571429V73.142857h88v141.142857q46.857143-1.142857 69.714286-1.142857V73.142857h88v144q45.142857 4 80 12.857143t64.571428 25.714286 47.142857 44.571428T813.142857 365.714286z m-122.857143 311.428571q0-20.571429-8.571428-36.571428t-21.142857-26.285715-32.857143-17.428571T590.285714 586.285714t-42.285714-5.142857-39.428571-1.714286-36.857143 0.571429-27.142857 0.571429v193.142857q4.571429 0 21.142857 0.285714t27.428571 0.285714 30.285714-0.857143 33.428572-2.285714 32.571428-4.857143 31.714286-8 27.142857-12 22.571429-17.142857 14-22.857143 5.428571-29.142857z m-40.571428-272q0-18.857143-7.142857-33.428571t-17.428572-24-27.428571-16-31.428572-9.428572-35.142857-4.571428-33.142857-1.428572-30.857143 0.571429-22.571428 0.285714v175.428572q2.857143 0 19.714285 0.285714t26.571429 0 28.571428-1.142857 31.428572-3.142857 29.428571-6.285715 27.714286-10.571428 21.142857-15.428572 15.428572-22 5.142857-29.142857z\"  ></path></symbol><symbol id=\"icon-bookmark\" viewBox=\"0 0 1024 1024\"><path d=\"M777.72464 73.142857q13.142857 0 25.142857 5.142857 18.857143 7.428571 30 23.428572t11.142857 35.428571v736.571429q0 19.428571-11.142857 35.428571t-30 23.428572q-10.857143 4.571429-25.142857 4.571428-27.428571 0-47.428571-18.285714l-252-242.285714-252 242.285714q-20.571429 18.857143-47.428572 18.857143-13.142857 0-25.142857-5.142857-18.857143-7.428571-30-23.428572T112.581783 873.714286V137.142857q0-19.428571 11.142857-35.428571T153.72464 78.285714q12-5.142857 25.142857-5.142857h598.857143z\"  ></path></symbol><symbol id=\"icon-briefcase\" viewBox=\"0 0 1024 1024\"><path d=\"M365.714286 146.285714h292.571428V73.142857H365.714286v73.142857z m658.285714 365.714286v274.285714q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 786.285714V512h384v91.428571q0 14.857143 10.857143 25.714286t25.714286 10.857143h182.857142q14.857143 0 25.714286-10.857143t10.857143-25.714286V512h384z m-438.857143 0v73.142857H438.857143V512h146.285714z m438.857143-274.285714v219.428571H0V237.714286q0-37.714286 26.857143-64.571429t64.571428-26.857143h201.142858V54.857143q0-22.857143 16-38.857143t38.857142-16h329.142858q22.857143 0 38.857142 16t16 38.857143v91.428571h201.142858q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-braille\" viewBox=\"0 0 1243 1024\"><path d=\"M109.714286 676.571429q-37.714286 0-64.571429 26.857142t-26.857143 64.571429 26.857143 64.571429 64.571429 26.857142 64.571428-26.857142 26.857143-64.571429-26.857143-64.571429-64.571428-26.857142z m292.571428 0q-37.714286 0-64.571428 26.857142t-26.857143 64.571429 26.857143 64.571429 64.571428 26.857142 64.571429-26.857142 26.857143-64.571429-26.857143-64.571429-64.571429-26.857142z m0-292.571429q-37.714286 0-64.571428 26.857143t-26.857143 64.571428 26.857143 64.571429 64.571428 26.857143 64.571429-26.857143 26.857143-64.571429-26.857143-64.571428-64.571429-26.857143z m438.857143 292.571429q-37.714286 0-64.571428 26.857142t-26.857143 64.571429 26.857143 64.571429 64.571428 26.857142 64.571429-26.857142 26.857143-64.571429-26.857143-64.571429-64.571429-26.857142z m292.571429 0q-37.714286 0-64.571429 26.857142t-26.857143 64.571429 26.857143 64.571429 64.571429 26.857142 64.571428-26.857142 26.857143-64.571429-26.857143-64.571429-64.571428-26.857142z m-292.571429-292.571429q-37.714286 0-64.571428 26.857143t-26.857143 64.571428 26.857143 64.571429 64.571428 26.857143 64.571429-26.857143 26.857143-64.571429-26.857143-64.571428-64.571429-26.857143z m292.571429 0q-37.714286 0-64.571429 26.857143t-26.857143 64.571428 26.857143 64.571429 64.571429 26.857143 64.571428-26.857143 26.857143-64.571429-26.857143-64.571428-64.571428-26.857143z m0-292.571429q-37.714286 0-64.571429 26.857143t-26.857143 64.571429 26.857143 64.571428 64.571429 26.857143 64.571428-26.857143 26.857143-64.571428-26.857143-64.571429-64.571428-26.857143zM219.428571 768q0 45.714286-32 77.714286t-77.714285 32-77.714286-32-32-77.714286 32-77.714286 77.714286-32 77.714285 32 32 77.714286z m292.571429 0q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286 32-77.714286 77.714285-32 77.714286 32 32 77.714286zM219.428571 475.428571q0 45.714286-32 77.714286t-77.714285 32-77.714286-32T0 475.428571t32-77.714285 77.714286-32 77.714285 32 32 77.714285z m292.571429 0q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286 32-77.714285 77.714285-32 77.714286 32 32 77.714285zM219.428571 182.857143q0 45.714286-32 77.714286t-77.714285 32-77.714286-32T0 182.857143t32-77.714286 77.714286-32 77.714285 32 32 77.714286z m731.428572 585.142857q0 45.714286-32 77.714286t-77.714286 32-77.714286-32-32-77.714286 32-77.714286 77.714286-32 77.714286 32 32 77.714286zM512 182.857143q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286 32-77.714286 77.714285-32 77.714286 32 32 77.714286z m731.428571 585.142857q0 45.714286-32 77.714286t-77.714285 32-77.714286-32-32-77.714286 32-77.714286 77.714286-32 77.714285 32 32 77.714286z m-292.571428-292.571429q0 45.714286-32 77.714286t-77.714286 32-77.714286-32-32-77.714286 32-77.714285 77.714286-32 77.714286 32 32 77.714285z m292.571428 0q0 45.714286-32 77.714286t-77.714285 32-77.714286-32-32-77.714286 32-77.714285 77.714286-32 77.714285 32 32 77.714285z m-292.571428-292.571428q0 45.714286-32 77.714286t-77.714286 32-77.714286-32-32-77.714286 32-77.714286 77.714286-32 77.714286 32 32 77.714286z m292.571428 0q0 45.714286-32 77.714286t-77.714285 32-77.714286-32-32-77.714286 32-77.714286 77.714286-32 77.714285 32 32 77.714286z\"  ></path></symbol><symbol id=\"icon-bullhorn\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 365.714286q30.285714 0 51.714286 21.428571T1024 438.857143t-21.428571 51.714286T950.857143 512v219.428571q0 29.714286-21.714286 51.428572t-51.428571 21.714286q-238.285714-198.285714-464-217.142858-33.142857 10.857143-52 37.714286t-17.714286 57.428572 22.857143 52.857142q-11.428571 18.857143-13.142857 37.428572t3.428571 33.142857 19.142857 31.428571 27.428572 28.571429T438.857143 894.857143q-16.571429 33.142857-63.714286 47.428571T278.857143 948.857143 203.428571 917.142857q-4-13.142857-16.857142-50t-18.285715-54-13.142857-50.857143-8.571428-57.714285 2-56.285715 12.571428-63.142857H91.428571q-37.714286 0-64.571428-26.857143T0 493.714286V384q0-37.714286 26.857143-64.571429t64.571428-26.857142h274.285715q248.571429 0 512-219.428572 29.714286 0 51.428571 21.714286t21.714286 51.428571v219.428572z m-73.142857 345.142857V165.714286q-225.142857 172.571429-438.857143 196v154.285714q215.428571 24 438.857143 194.857143z\"  ></path></symbol><symbol id=\"icon-bullseye\" viewBox=\"0 0 1024 1024\"><path d=\"M658.285714 512q0 60.571429-42.857143 103.428571t-103.428571 42.857143-103.428571-42.857143-42.857143-103.428571 42.857143-103.428571 103.428571-42.857143 103.428571 42.857143 42.857143 103.428571z m73.142857 0q0-90.857143-64.285714-155.142857T512 292.571429 356.857143 356.857143 292.571429 512t64.285714 155.142857T512 731.428571t155.142857-64.285714T731.428571 512z m73.142858 0q0 121.142857-85.714286 206.857143t-206.857143 85.714286-206.857143-85.714286-85.714286-206.857143 85.714286-206.857143 206.857143-85.714286 206.857143 85.714286 85.714286 206.857143z m73.142857 0q0-74.285714-29.142857-142t-78-116.571429-116.571429-78T512 146.285714t-142 29.142857-116.571429 78-78 116.571429T146.285714 512t29.142857 142 78 116.571429 116.571429 78 142 29.142857 142-29.142857 116.571429-78 78-116.571429 29.142857-142z m73.142857 0q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-bus\" viewBox=\"0 0 1024 1024\"><path d=\"M292.571429 694.857143q0-30.285714-21.428572-51.714286T219.428571 621.714286t-51.714285 21.428571T146.285714 694.857143t21.428572 51.714286T219.428571 768t51.714286-21.428571T292.571429 694.857143z m585.142857 0q0-30.285714-21.428572-51.714286T804.571429 621.714286t-51.714286 21.428571-21.428572 51.714286 21.428572 51.714286 51.714286 21.428571 51.714285-21.428571 21.428572-51.714286z m-26.285715-226.285714l-41.142857-219.428572q-2.857143-13.142857-12.857143-21.428571T774.285714 219.428571H249.714286q-13.142857 0-23.142857 8.285715T213.714286 249.142857l-41.142857 219.428572q-2.857143 17.142857 8 30.285714t28 13.142857h606.857142q17.142857 0 28-13.142857t8-30.285714z m-129.142857-349.714286q0-11.428571-8-19.428572t-19.428571-8H329.142857q-11.428571 0-19.428571 8t-8 19.428572 8 19.428571 19.428571 8h365.714286q11.428571 0 19.428571-8t8-19.428571z m228.571429 414.285714v344.571429h-73.142857v73.142857q0 30.285714-21.428572 51.714286T804.571429 1024t-51.714286-21.428571-21.428572-51.714286v-73.142857H292.571429v73.142857q0 30.285714-21.428572 51.714286T219.428571 1024t-51.714285-21.428571T146.285714 950.857143v-73.142857H73.142857V533.142857q0-64 14.285714-127.428571l58.857143-259.428572q5.142857-44.571429 55.714286-78.285714t131.428571-50.857143T512 0t178.571429 17.142857 131.428571 50.857143 55.714286 78.285714l60 259.428572q13.142857 58.285714 13.142857 127.428571z\"  ></path></symbol><symbol id=\"icon-building\" viewBox=\"0 0 1024 1024\"><path d=\"M836.442583 0q14.857143 0 25.714286 10.857143t10.857142 25.714286v950.857142q0 14.857143-10.857142 25.714286t-25.714286 10.857143H105.014011q-14.857143 0-25.714285-10.857143t-10.857143-25.714286V36.571429q0-14.857143 10.857143-25.714286T105.014011 0h731.428572zM361.014011 164.571429v36.571428q0 8 5.142858 13.142857t13.142857 5.142857h36.571428q8 0 13.142857-5.142857t5.142858-13.142857v-36.571428q0-8-5.142858-13.142858t-13.142857-5.142857h-36.571428q-8 0-13.142857 5.142857t-5.142858 13.142858z m0 146.285714v36.571428q0 8 5.142858 13.142858t13.142857 5.142857h36.571428q8 0 13.142857-5.142857t5.142858-13.142858v-36.571428q0-8-5.142858-13.142857t-13.142857-5.142857h-36.571428q-8 0-13.142857 5.142857t-5.142858 13.142857z m0 146.285714v36.571429q0 8 5.142858 13.142857t13.142857 5.142857h36.571428q8 0 13.142857-5.142857t5.142858-13.142857v-36.571429q0-8-5.142858-13.142857t-13.142857-5.142857h-36.571428q-8 0-13.142857 5.142857t-5.142858 13.142857z m0 146.285714v36.571429q0 8 5.142858 13.142857t13.142857 5.142857h36.571428q8 0 13.142857-5.142857t5.142858-13.142857v-36.571429q0-8-5.142858-13.142857t-13.142857-5.142857h-36.571428q-8 0-13.142857 5.142857t-5.142858 13.142857z m-73.142857 182.857143v-36.571428q0-8-5.142857-13.142857t-13.142857-5.142858h-36.571429q-8 0-13.142857 5.142858t-5.142857 13.142857v36.571428q0 8 5.142857 13.142857t13.142857 5.142858h36.571429q8 0 13.142857-5.142858t5.142857-13.142857z m0-146.285714v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142857z m0-146.285714v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142857z m0-146.285715v-36.571428q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571428q0 8 5.142857 13.142858t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142858z m0-146.285714v-36.571428q0-8-5.142857-13.142858t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142858v36.571428q0 8 5.142857 13.142857t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142857z m292.571429 731.428572v-109.714286q0-8-5.142857-13.142857t-13.142857-5.142857H379.299726q-8 0-13.142857 5.142857t-5.142858 13.142857v109.714286q0 8 5.142858 13.142857t13.142857 5.142857h182.857143q8 0 13.142857-5.142857t5.142857-13.142857z m0-292.571429v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142857z m0-146.285714v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142857z m0-146.285715v-36.571428q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571428q0 8 5.142857 13.142858t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142858z m0-146.285714v-36.571428q0-8-5.142857-13.142858t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142858v36.571428q0 8 5.142857 13.142857t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142857z m146.285714 585.142857v-36.571428q0-8-5.142857-13.142857t-13.142857-5.142858h-36.571429q-8 0-13.142857 5.142858t-5.142857 13.142857v36.571428q0 8 5.142857 13.142857t13.142857 5.142858h36.571429q8 0 13.142857-5.142858t5.142857-13.142857z m0-146.285714v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142857z m0-146.285714v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142857z m0-146.285715v-36.571428q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571428q0 8 5.142857 13.142858t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142858z m0-146.285714v-36.571428q0-8-5.142857-13.142858t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142858v36.571428q0 8 5.142857 13.142857t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142857z\"  ></path></symbol><symbol id=\"icon-cab\" viewBox=\"0 0 1170 1024\"><path d=\"M1042.285714 512q53.142857 0 90.571429 37.428571T1170.285714 640v219.428571q0 8-5.142857 13.142858t-13.142857 5.142857h-54.857143v36.571428q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286v-36.571428H292.571429v36.571428q0 45.714286-32 77.714286t-77.714286 32-77.714286-32-32-77.714286v-36.571428H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142858v-219.428571q0-53.142857 37.428571-90.571429T128 512h16l60-239.428571q13.142857-53.714286 59.428571-90T365.714286 146.285714h73.142857V18.285714q0-8 5.142857-13.142857t13.142857-5.142857h256q8 0 13.142857 5.142857t5.142857 13.142857v128h73.142858q56 0 102.285714 36.285715T966.285714 272.571429l60 239.428571h16zM182.857143 786.285714q37.714286 0 64.571428-26.857143t26.857143-64.571428-26.857143-64.571429-64.571428-26.857143-64.571429 26.857143-26.857143 64.571429 26.857143 64.571428 64.571429 26.857143z m112-274.285714h580.571428l-50.857142-204q-1.142857-4.571429-8-10t-12-5.428571H365.714286q-5.142857 0-12 5.428571T345.714286 308z m692.571428 274.285714q37.714286 0 64.571429-26.857143t26.857143-64.571428-26.857143-64.571429-64.571429-26.857143-64.571428 26.857143-26.857143 64.571429 26.857143 64.571428 64.571428 26.857143z\"  ></path></symbol><symbol id=\"icon-buysellads\" viewBox=\"0 0 1024 1024\"><path d=\"M596 620.571429H428l84-314.857143z m49.142857 184h177.714286L637.714286 219.428571H386.285714L201.142857 804.571429h177.714286l218.857143-179.428572z m305.714286-566.857143v548.571428q0 67.428571-48.571429 116t-116 48.571429H237.714286q-67.428571 0-116-48.571429T73.142857 786.285714V237.714286q0-67.428571 48.571429-116t116-48.571429h548.571428q67.428571 0 116 48.571429t48.571429 116z\"  ></path></symbol><symbol id=\"icon-building-o\" viewBox=\"0 0 1024 1024\"><path d=\"M287.871154 749.714286v36.571428q0 7.428571-5.428571 12.857143T269.58544 804.571429h-36.571429q-7.428571 0-12.857142-5.428572T214.728297 786.285714v-36.571428q0-7.428571 5.428572-12.857143t12.857142-5.428572h36.571429q7.428571 0 12.857143 5.428572t5.428571 12.857143z m0-146.285715v36.571429q0 7.428571-5.428571 12.857143T269.58544 658.285714h-36.571429q-7.428571 0-12.857142-5.428571T214.728297 640v-36.571429q0-7.428571 5.428572-12.857142t12.857142-5.428572h36.571429q7.428571 0 12.857143 5.428572t5.428571 12.857142z m146.285715 0v36.571429q0 7.428571-5.428572 12.857143T415.871154 658.285714h-36.571428q-7.428571 0-12.857143-5.428571T361.014011 640v-36.571429q0-7.428571 5.428572-12.857142t12.857143-5.428572h36.571428q7.428571 0 12.857143 5.428572t5.428572 12.857142zM287.871154 457.142857v36.571429q0 7.428571-5.428571 12.857143T269.58544 512h-36.571429q-7.428571 0-12.857142-5.428571T214.728297 493.714286v-36.571429q0-7.428571 5.428572-12.857143T233.014011 438.857143h36.571429q7.428571 0 12.857143 5.428571T287.871154 457.142857z m438.857143 292.571429v36.571428q0 7.428571-5.428571 12.857143t-12.857143 5.428572h-36.571429q-7.428571 0-12.857143-5.428572t-5.428571-12.857143v-36.571428q0-7.428571 5.428571-12.857143t12.857143-5.428572h36.571429q7.428571 0 12.857143 5.428572t5.428571 12.857143z m-146.285714-146.285715v36.571429q0 7.428571-5.428572 12.857143T562.156869 658.285714h-36.571429q-7.428571 0-12.857143-5.428571T507.299726 640v-36.571429q0-7.428571 5.428571-12.857142t12.857143-5.428572h36.571429q7.428571 0 12.857142 5.428572t5.428572 12.857142zM434.156869 457.142857v36.571429q0 7.428571-5.428572 12.857143T415.871154 512h-36.571428q-7.428571 0-12.857143-5.428571T361.014011 493.714286v-36.571429q0-7.428571 5.428572-12.857143T379.299726 438.857143h36.571428q7.428571 0 12.857143 5.428571T434.156869 457.142857zM287.871154 310.857143v36.571428q0 7.428571-5.428571 12.857143T269.58544 365.714286h-36.571429q-7.428571 0-12.857142-5.428572T214.728297 347.428571v-36.571428q0-7.428571 5.428572-12.857143T233.014011 292.571429h36.571429q7.428571 0 12.857143 5.428571T287.871154 310.857143z m438.857143 292.571428v36.571429q0 7.428571-5.428571 12.857143t-12.857143 5.428571h-36.571429q-7.428571 0-12.857143-5.428571t-5.428571-12.857143v-36.571429q0-7.428571 5.428571-12.857142t12.857143-5.428572h36.571429q7.428571 0 12.857143 5.428572t5.428571 12.857142zM580.442583 457.142857v36.571429q0 7.428571-5.428572 12.857143T562.156869 512h-36.571429q-7.428571 0-12.857143-5.428571T507.299726 493.714286v-36.571429q0-7.428571 5.428571-12.857143T525.58544 438.857143h36.571429q7.428571 0 12.857142 5.428571T580.442583 457.142857zM434.156869 310.857143v36.571428q0 7.428571-5.428572 12.857143T415.871154 365.714286h-36.571428q-7.428571 0-12.857143-5.428572T361.014011 347.428571v-36.571428q0-7.428571 5.428572-12.857143T379.299726 292.571429h36.571428q7.428571 0 12.857143 5.428571T434.156869 310.857143zM287.871154 164.571429v36.571428q0 7.428571-5.428571 12.857143T269.58544 219.428571h-36.571429q-7.428571 0-12.857142-5.428571T214.728297 201.142857v-36.571428q0-7.428571 5.428572-12.857143T233.014011 146.285714h36.571429q7.428571 0 12.857143 5.428572T287.871154 164.571429z m438.857143 292.571428v36.571429q0 7.428571-5.428571 12.857143T708.442583 512h-36.571429q-7.428571 0-12.857143-5.428571T653.58544 493.714286v-36.571429q0-7.428571 5.428571-12.857143t12.857143-5.428571h36.571429q7.428571 0 12.857143 5.428571t5.428571 12.857143zM580.442583 310.857143v36.571428q0 7.428571-5.428572 12.857143T562.156869 365.714286h-36.571429q-7.428571 0-12.857143-5.428572T507.299726 347.428571v-36.571428q0-7.428571 5.428571-12.857143T525.58544 292.571429h36.571429q7.428571 0 12.857142 5.428571T580.442583 310.857143zM434.156869 164.571429v36.571428q0 7.428571-5.428572 12.857143T415.871154 219.428571h-36.571428q-7.428571 0-12.857143-5.428571T361.014011 201.142857v-36.571428q0-7.428571 5.428572-12.857143T379.299726 146.285714h36.571428q7.428571 0 12.857143 5.428572T434.156869 164.571429z m292.571428 146.285714v36.571428q0 7.428571-5.428571 12.857143T708.442583 365.714286h-36.571429q-7.428571 0-12.857143-5.428572T653.58544 347.428571v-36.571428q0-7.428571 5.428571-12.857143t12.857143-5.428571h36.571429q7.428571 0 12.857143 5.428571t5.428571 12.857143zM580.442583 164.571429v36.571428q0 7.428571-5.428572 12.857143T562.156869 219.428571h-36.571429q-7.428571 0-12.857143-5.428571T507.299726 201.142857v-36.571428q0-7.428571 5.428571-12.857143T525.58544 146.285714h36.571429q7.428571 0 12.857142 5.428572T580.442583 164.571429z m146.285714 0v36.571428q0 7.428571-5.428571 12.857143T708.442583 219.428571h-36.571429q-7.428571 0-12.857143-5.428571T653.58544 201.142857v-36.571428q0-7.428571 5.428571-12.857143t12.857143-5.428572h36.571429q7.428571 0 12.857143 5.428572t5.428571 12.857143zM580.442583 950.857143h219.428571V73.142857H141.58544v877.714286h219.428571v-128q0-7.428571 5.428572-12.857143t12.857143-5.428571h182.857143q7.428571 0 12.857142 5.428571t5.428572 12.857143v128zM873.014011 36.571429v950.857142q0 14.857143-10.857142 25.714286t-25.714286 10.857143H105.014011q-14.857143 0-25.714285-10.857143t-10.857143-25.714286V36.571429q0-14.857143 10.857143-25.714286T105.014011 0h731.428572q14.857143 0 25.714286 10.857143t10.857142 25.714286z\"  ></path></symbol><symbol id=\"icon-calendar-plus-o\" viewBox=\"0 0 1024 1024\"><path d=\"M877.714286 146.285714q29.714286 0 51.428571 21.714286t21.714286 51.428571v731.428572q0 29.714286-21.714286 51.428571t-51.428571 21.714286H73.142857q-29.714286 0-51.428571-21.714286t-21.714286-51.428571V219.428571q0-29.714286 21.714286-51.428571t51.428571-21.714286h73.142857v-54.857143q0-37.714286 26.857143-64.571428T237.714286 0h36.571428q37.714286 0 64.571429 26.857143t26.857143 64.571428v54.857143h219.428571v-54.857143q0-37.714286 26.857143-64.571428t64.571429-26.857143h36.571428q37.714286 0 64.571429 26.857143t26.857143 64.571428v54.857143h73.142857z m-219.428572-54.857143v164.571429q0 8 5.142857 13.142857t13.142858 5.142857h36.571428q8 0 13.142857-5.142857t5.142857-13.142857V91.428571q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571428q-8 0-13.142858 5.142857t-5.142857 13.142857z m-438.857143 0v164.571429q0 8 5.142858 13.142857t13.142857 5.142857h36.571428q8 0 13.142857-5.142857t5.142858-13.142857V91.428571q0-8-5.142858-13.142857t-13.142857-5.142857h-36.571428q-8 0-13.142857 5.142857t-5.142858 13.142857z m658.285715 859.428572V365.714286H73.142857v585.142857h804.571429z m-365.714286-329.142857h128q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H512v128q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857v-128H310.857143q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h128V493.714286q0-8 5.142857-13.142857t13.142857-5.142858h36.571429q8 0 13.142857 5.142858t5.142857 13.142857v128z\"  ></path></symbol><symbol id=\"icon-calendar-o\" viewBox=\"0 0 1024 1024\"><path d=\"M107.352983 950.857143h804.571428V365.714286H107.352983v585.142857zM326.781554 256V91.428571q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142857v164.571429q0 8 5.142857 13.142857t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142857z m438.857143 0V91.428571q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142857v164.571429q0 8 5.142857 13.142857t13.142857 5.142857h36.571429q8 0 13.142857-5.142857t5.142857-13.142857z m219.428572-36.571429v731.428572q0 29.714286-21.714286 51.428571t-51.428572 21.714286H107.352983q-29.714286 0-51.428572-21.714286t-21.714285-51.428571V219.428571q0-29.714286 21.714285-51.428571t51.428572-21.714286h73.142857v-54.857143q0-37.714286 26.857143-64.571428T271.924411 0h36.571429q37.714286 0 64.571429 26.857143t26.857142 64.571428v54.857143h219.428572v-54.857143q0-37.714286 26.857143-64.571428t64.571428-26.857143h36.571429q37.714286 0 64.571428 26.857143t26.857143 64.571428v54.857143h73.142857q29.714286 0 51.428572 21.714286t21.714286 51.428571z\"  ></path></symbol><symbol id=\"icon-calendar-times-o\" viewBox=\"0 0 1024 1024\"><path d=\"M634.857143 791.428571l-26.285714 26.285715q-5.142857 5.142857-12.571429 5.142857t-13.142857-5.142857l-107.428572-108-107.428571 108q-5.714286 5.142857-13.142857 5.142857t-12.571429-5.142857l-26.285714-26.285715q-5.142857-5.142857-5.142857-12.571428t5.142857-13.142857l108-107.428572-108-107.428571q-5.142857-5.714286-5.142857-13.142857t5.142857-12.571429l26.285714-26.285714q5.142857-5.142857 12.571429-5.142857t13.142857 5.142857l107.428571 107.428571 107.428572-107.428571q5.714286-5.142857 13.142857-5.142857t12.571429 5.142857l26.285714 26.285714q5.142857 5.142857 5.142857 12.571429t-5.142857 13.142857l-107.428572 107.428571 107.428572 107.428572q5.142857 5.714286 5.142857 13.142857t-5.142857 12.571428z m-561.714286 159.428572h804.571429V365.714286H73.142857v585.142857zM292.571429 256V91.428571q0-8-5.142858-13.142857t-13.142857-5.142857h-36.571428q-8 0-13.142857 5.142857t-5.142858 13.142857v164.571429q0 8 5.142858 13.142857t13.142857 5.142857h36.571428q8 0 13.142857-5.142857t5.142858-13.142857z m438.857142 0V91.428571q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571428q-8 0-13.142858 5.142857t-5.142857 13.142857v164.571429q0 8 5.142857 13.142857t13.142858 5.142857h36.571428q8 0 13.142857-5.142857t5.142857-13.142857z m219.428572-36.571429v731.428572q0 29.714286-21.714286 51.428571t-51.428571 21.714286H73.142857q-29.714286 0-51.428571-21.714286t-21.714286-51.428571V219.428571q0-29.714286 21.714286-51.428571t51.428571-21.714286h73.142857v-54.857143q0-37.714286 26.857143-64.571428T237.714286 0h36.571428q37.714286 0 64.571429 26.857143t26.857143 64.571428v54.857143h219.428571v-54.857143q0-37.714286 26.857143-64.571428t64.571429-26.857143h36.571428q37.714286 0 64.571429 26.857143t26.857143 64.571428v54.857143h73.142857q29.714286 0 51.428571 21.714286t21.714286 51.428571z\"  ></path></symbol><symbol id=\"icon-calendar-check-o\" viewBox=\"0 0 1024 1024\"><path d=\"M744.571429 550.857143l-292.571429 292.571428q-5.714286 5.142857-13.142857 5.142858t-13.142857-5.142858l-164.571429-164.571428q-5.142857-5.714286-5.142857-13.142857t5.142857-12.571429l26.285714-26.285714q5.142857-5.142857 12.571429-5.142857t13.142857 5.142857l125.714286 125.714286 253.714286-253.714286q5.714286-5.142857 13.142857-5.142857t12.571428 5.142857l26.285715 26.285714q5.142857 5.142857 5.142857 12.571429t-5.142857 13.142857zM73.142857 950.857143h804.571429V365.714286H73.142857v585.142857zM292.571429 256V91.428571q0-8-5.142858-13.142857t-13.142857-5.142857h-36.571428q-8 0-13.142857 5.142857t-5.142858 13.142857v164.571429q0 8 5.142858 13.142857t13.142857 5.142857h36.571428q8 0 13.142857-5.142857t5.142858-13.142857z m438.857142 0V91.428571q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571428q-8 0-13.142858 5.142857t-5.142857 13.142857v164.571429q0 8 5.142857 13.142857t13.142858 5.142857h36.571428q8 0 13.142857-5.142857t5.142857-13.142857z m219.428572-36.571429v731.428572q0 29.714286-21.714286 51.428571t-51.428571 21.714286H73.142857q-29.714286 0-51.428571-21.714286t-21.714286-51.428571V219.428571q0-29.714286 21.714286-51.428571t51.428571-21.714286h73.142857v-54.857143q0-37.714286 26.857143-64.571428T237.714286 0h36.571428q37.714286 0 64.571429 26.857143t26.857143 64.571428v54.857143h219.428571v-54.857143q0-37.714286 26.857143-64.571428t64.571429-26.857143h36.571428q37.714286 0 64.571429 26.857143t26.857143 64.571428v54.857143h73.142857q29.714286 0 51.428571 21.714286t21.714286 51.428571z\"  ></path></symbol><symbol id=\"icon-calendar-minus-o\" viewBox=\"0 0 1024 1024\"><path d=\"M658.285714 640v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H310.857143q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h329.142857q8 0 13.142857 5.142857t5.142857 13.142857zM73.142857 950.857143h804.571429V365.714286H73.142857v585.142857zM292.571429 256V91.428571q0-8-5.142858-13.142857t-13.142857-5.142857h-36.571428q-8 0-13.142857 5.142857t-5.142858 13.142857v164.571429q0 8 5.142858 13.142857t13.142857 5.142857h36.571428q8 0 13.142857-5.142857t5.142858-13.142857z m438.857142 0V91.428571q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571428q-8 0-13.142858 5.142857t-5.142857 13.142857v164.571429q0 8 5.142857 13.142857t13.142858 5.142857h36.571428q8 0 13.142857-5.142857t5.142857-13.142857z m219.428572-36.571429v731.428572q0 29.714286-21.714286 51.428571t-51.428571 21.714286H73.142857q-29.714286 0-51.428571-21.714286t-21.714286-51.428571V219.428571q0-29.714286 21.714286-51.428571t51.428571-21.714286h73.142857v-54.857143q0-37.714286 26.857143-64.571428T237.714286 0h36.571428q37.714286 0 64.571429 26.857143t26.857143 64.571428v54.857143h219.428571v-54.857143q0-37.714286 26.857143-64.571428t64.571429-26.857143h36.571428q37.714286 0 64.571429 26.857143t26.857143 64.571428v54.857143h73.142857q29.714286 0 51.428571 21.714286t21.714286 51.428571z\"  ></path></symbol><symbol id=\"icon-calculator\" viewBox=\"0 0 1024 1024\"><path d=\"M219.428571 877.714286q0-30.285714-21.428571-51.714286T146.285714 804.571429t-51.714285 21.428571T73.142857 877.714286t21.428572 51.714285T146.285714 950.857143t51.714286-21.428572T219.428571 877.714286z m219.428572 0q0-30.285714-21.428572-51.714286T365.714286 804.571429t-51.714286 21.428571T292.571429 877.714286t21.428571 51.714285T365.714286 950.857143t51.714285-21.428572T438.857143 877.714286z m-219.428572-219.428572q0-30.285714-21.428571-51.714285T146.285714 585.142857t-51.714285 21.428572T73.142857 658.285714t21.428572 51.714286T146.285714 731.428571t51.714286-21.428571T219.428571 658.285714z m438.857143 219.428572q0-30.285714-21.428571-51.714286T585.142857 804.571429t-51.714286 21.428571T512 877.714286t21.428571 51.714285 51.714286 21.428572 51.714286-21.428572 21.428571-51.714285z m-219.428571-219.428572q0-30.285714-21.428572-51.714285T365.714286 585.142857t-51.714286 21.428572T292.571429 658.285714t21.428571 51.714286T365.714286 731.428571t51.714285-21.428571T438.857143 658.285714zM219.428571 438.857143q0-30.285714-21.428571-51.714286T146.285714 365.714286t-51.714285 21.428571T73.142857 438.857143t21.428572 51.714286T146.285714 512t51.714286-21.428571T219.428571 438.857143z m438.857143 219.428571q0-30.285714-21.428571-51.714285T585.142857 585.142857t-51.714286 21.428572T512 658.285714t21.428571 51.714286 51.714286 21.428571 51.714286-21.428571 21.428571-51.714286zM438.857143 438.857143q0-30.285714-21.428572-51.714286T365.714286 365.714286t-51.714286 21.428571T292.571429 438.857143t21.428571 51.714286T365.714286 512t51.714285-21.428571T438.857143 438.857143z m438.857143 438.857143v-219.428572q0-29.714286-21.714286-51.428571t-51.428571-21.714286-51.428572 21.714286-21.714286 51.428571v219.428572q0 29.714286 21.714286 51.428571t51.428572 21.714286 51.428571-21.714286 21.714286-51.428571z m-219.428572-438.857143q0-30.285714-21.428571-51.714286T585.142857 365.714286t-51.714286 21.428571T512 438.857143t21.428571 51.714286T585.142857 512t51.714286-21.428571T658.285714 438.857143z m219.428572-182.857143V109.714286q0-14.857143-10.857143-25.714286t-25.714286-10.857143H109.714286q-14.857143 0-25.714286 10.857143t-10.857143 25.714286v146.285714q0 14.857143 10.857143 25.714286t25.714286 10.857143h731.428571q14.857143 0 25.714286-10.857143t10.857143-25.714286z m0 182.857143q0-30.285714-21.428572-51.714286T804.571429 365.714286t-51.714286 21.428571T731.428571 438.857143t21.428572 51.714286T804.571429 512t51.714285-21.428571T877.714286 438.857143z m73.142857-365.714286v877.714286q0 29.714286-21.714286 51.428571t-51.428571 21.714286H73.142857q-29.714286 0-51.428571-21.714286t-21.714286-51.428571V73.142857q0-29.714286 21.714286-51.428571t51.428571-21.714286h804.571429q29.714286 0 51.428571 21.714286t21.714286 51.428571z\"  ></path></symbol><symbol id=\"icon-caret-down\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 402.285714q0 14.857143-10.857143 25.714286l-256 256q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143L230.285714 428Q219.428571 417.142857 219.428571 402.285714t10.857143-25.714285 25.714286-10.857143h512q14.857143 0 25.714286 10.857143t10.857143 25.714285z\"  ></path></symbol><symbol id=\"icon-caret-left\" viewBox=\"0 0 1024 1024\"><path d=\"M604.846786 256v512q0 14.857143-10.857143 25.714286t-25.714286 10.857143-25.714286-10.857143L286.561071 537.714286q-10.857143-10.857143-10.857142-25.714286t10.857142-25.714286l256-256q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143 10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-car\" viewBox=\"0 0 1170 1024\"><path d=\"M274.285714 621.714286q0-37.714286-26.857143-64.571429t-64.571428-26.857143-64.571429 26.857143-26.857143 64.571429 26.857143 64.571428 64.571429 26.857143 64.571428-26.857143 26.857143-64.571428z m20.571429-182.857143h580.571428l-50.857142-204q-1.142857-4.571429-8-10t-12-5.428572H365.714286q-5.142857 0-12 5.428572T345.714286 234.857143z m784 182.857143q0-37.714286-26.857143-64.571429t-64.571429-26.857143-64.571428 26.857143-26.857143 64.571429 26.857143 64.571428 64.571428 26.857143 64.571429-26.857143 26.857143-64.571428z m91.428571-54.857143v219.428571q0 8-5.142857 13.142857t-13.142857 5.142858h-54.857143v73.142857q0 45.714286-32 77.714285t-77.714286 32-77.714285-32-32-77.714285v-73.142857H292.571429v73.142857q0 45.714286-32 77.714285t-77.714286 32-77.714286-32-32-77.714285v-73.142857H18.285714q-8 0-13.142857-5.142858t-5.142857-13.142857V566.857143q0-53.142857 37.428571-90.571429T128 438.857143h16l60-239.428572q13.142857-53.714286 59.428571-90T365.714286 73.142857h438.857143q56 0 102.285714 36.285714T966.285714 199.428571l60 239.428572h16q53.142857 0 90.571429 37.428571T1170.285714 566.857143z\"  ></path></symbol><symbol id=\"icon-camera-retro\" viewBox=\"0 0 1024 1024\"><path d=\"M530.285714 475.428571q0-8-5.142857-13.142857t-13.142857-5.142857q-37.714286 0-64.571429 26.857143t-26.857142 64.571429q0 8 5.142857 13.142857t13.142857 5.142857 13.142857-5.142857 5.142857-13.142857q0-22.857143 16-38.857143t38.857143-16q8 0 13.142857-5.142857t5.142857-13.142858z m128 74.285715q0 60.571429-42.857143 103.428571t-103.428571 42.857143-103.428571-42.857143-42.857143-103.428571 42.857143-103.428572 103.428571-42.857143 103.428571 42.857143 42.857143 103.428572zM73.142857 877.714286h877.714286v-73.142857H73.142857v73.142857z m658.285714-328q0-90.857143-64.285714-155.142857T512 330.285714 356.857143 394.571429 292.571429 549.714286t64.285714 155.142857T512 769.142857t155.142857-64.285714T731.428571 549.714286zM146.285714 182.857143h219.428572V109.714286H146.285714v73.142857zM73.142857 292.571429h877.714286V146.285714H477.714286l-36.571429 73.142857H73.142857v73.142858z m950.857143-146.285715v731.428572q0 30.285714-21.428571 51.714285T950.857143 950.857143H73.142857q-30.285714 0-51.714286-21.428572T0 877.714286V146.285714q0-30.285714 21.428571-51.714285T73.142857 73.142857h877.714286q30.285714 0 51.714286 21.428572T1024 146.285714z\"  ></path></symbol><symbol id=\"icon-caret-right\" viewBox=\"0 0 1024 1024\"><path d=\"M635.299726 512q0 14.857143-10.857143 25.714286l-256 256q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143-10.857142-25.714286V256q0-14.857143 10.857142-25.714286t25.714286-10.857143 25.714286 10.857143l256 256q10.857143 10.857143 10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-caret-square-o-left\" viewBox=\"0 0 1024 1024\"><path d=\"M658.285714 329.142857v365.714286q0 14.857143-10.857143 25.714286t-25.714285 10.857142q-11.428571 0-21.142857-6.857142L344.571429 541.714286q-15.428571-10.857143-15.428572-29.714286t15.428572-29.714286l256-182.857143q9.714286-6.857143 21.142857-6.857142 14.857143 0 25.714285 10.857142t10.857143 25.714286z m146.285715 457.142857V237.714286q0-7.428571-5.428572-12.857143T786.285714 219.428571H237.714286q-7.428571 0-12.857143 5.428572T219.428571 237.714286v548.571428q0 7.428571 5.428572 12.857143t12.857143 5.428572h548.571428q7.428571 0 12.857143-5.428572t5.428572-12.857143z m146.285714-548.571428v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-caret-square-o-right\" viewBox=\"0 0 1024 1024\"><path d=\"M694.857143 512q0 18.857143-15.428572 29.714286l-256 182.857143q-17.714286 13.142857-37.714285 2.857142-20-9.714286-20-32.571428V329.142857q0-22.857143 20-32.571428 20-10.285714 37.714285 2.857142l256 182.857143q15.428571 10.857143 15.428572 29.714286z m109.714286 274.285714V237.714286q0-8-5.142858-13.142857t-13.142857-5.142858H237.714286q-8 0-13.142857 5.142858t-5.142858 13.142857v548.571428q0 8 5.142858 13.142857t13.142857 5.142858h548.571428q8 0 13.142857-5.142858t5.142858-13.142857z m146.285714-548.571428v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-caret-up\" viewBox=\"0 0 1024 1024\"><path d=\"M779.527726 694.857143q0 14.857143-10.857143 25.714286t-25.714286 10.857142H230.956297q-14.857143 0-25.714286-10.857142t-10.857142-25.714286 10.857142-25.714286l256-256q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l256 256q10.857143 10.857143 10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-caret-square-o-up\" viewBox=\"0 0 1024 1024\"><path d=\"M727.428571 638.285714q-9.714286 20-32.571428 20H329.142857q-22.857143 0-32.571428-20-10.285714-20 2.857142-37.714285l182.857143-256q10.857143-15.428571 29.714286-15.428572t29.714286 15.428572l182.857143 256q13.142857 17.714286 2.857142 37.714285z m77.142858 148V237.714286q0-7.428571-5.428572-12.857143T786.285714 219.428571H237.714286q-7.428571 0-12.857143 5.428572T219.428571 237.714286v548.571428q0 7.428571 5.428572 12.857143t12.857143 5.428572h548.571428q7.428571 0 12.857143-5.428572t5.428572-12.857143z m146.285714-548.571428v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-cart-plus\" viewBox=\"0 0 1024 1024\"><path d=\"M731.428571 402.285714q0-14.857143-10.857142-25.714285t-25.714286-10.857143h-73.142857V292.571429q0-14.857143-10.857143-25.714286t-25.714286-10.857143-25.714286 10.857143-10.857142 25.714286v73.142857H475.428571q-14.857143 0-25.714285 10.857143t-10.857143 25.714285 10.857143 25.714286 25.714285 10.857143h73.142858v73.142857q0 14.857143 10.857142 25.714286t25.714286 10.857143 25.714286-10.857143 10.857143-25.714286V438.857143h73.142857q14.857143 0 25.714286-10.857143t10.857142-25.714286z m-329.142857 475.428572q0 30.285714-21.428571 51.714285T329.142857 950.857143t-51.714286-21.428572T256 877.714286t21.428571-51.714286T329.142857 804.571429t51.714286 21.428571T402.285714 877.714286z m512 0q0 30.285714-21.428571 51.714285T841.142857 950.857143t-51.714286-21.428572-21.428571-51.714285 21.428571-51.714286 51.714286-21.428571 51.714286 21.428571 21.428571 51.714286z m73.142857-621.714286v292.571429q0 13.714286-9.142857 24.285714t-23.428571 12.285714L358.285714 654.857143q0.571429 4 2.571429 12.285714t3.428571 15.142857 1.428572 12.571429q0 9.142857-13.714286 36.571428h525.714286q14.857143 0 25.714285 10.857143t10.857143 25.714286-10.857143 25.714286-25.714285 10.857143H292.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286q0-8 6.285714-22.571429t16.857143-34 11.714286-21.714285L189.714286 219.428571H73.142857q-14.857143 0-25.714286-10.857142T36.571429 182.857143t10.857142-25.714286 25.714286-10.857143h146.285714q9.142857 0 16.285715 3.714286t11.428571 8.857143 7.428572 14T258.857143 188t3.142857 16.857143T264.571429 219.428571h686.285714q14.857143 0 25.714286 10.857143t10.857142 25.714286z\"  ></path></symbol><symbol id=\"icon-cart-arrow-down\" viewBox=\"0 0 1024 1024\"><path d=\"M768 402.285714q0-14.857143-10.857143-25.714285t-25.714286-10.857143-25.714285 10.857143l-84 83.428571V292.571429q0-14.857143-10.857143-25.714286t-25.714286-10.857143-25.714286 10.857143-10.857142 25.714286v167.428571L464.571429 376.571429q-10.857143-10.857143-25.714286-10.857143t-25.714286 10.857143-10.857143 25.714285 10.857143 25.714286l146.285714 146.285714q10.857143 10.857143 25.714286 10.857143t25.714286-10.857143l146.285714-146.285714q10.857143-10.857143 10.857143-25.714286z m-365.714286 475.428572q0 30.285714-21.428571 51.714285T329.142857 950.857143t-51.714286-21.428572T256 877.714286t21.428571-51.714286T329.142857 804.571429t51.714286 21.428571T402.285714 877.714286z m512 0q0 30.285714-21.428571 51.714285T841.142857 950.857143t-51.714286-21.428572-21.428571-51.714285 21.428571-51.714286 51.714286-21.428571 51.714286 21.428571 21.428571 51.714286z m73.142857-621.714286v292.571429q0 13.714286-9.142857 24.285714t-23.428571 12.285714L358.285714 654.857143q0.571429 4 2.571429 12.285714t3.428571 15.142857 1.428572 12.571429q0 9.142857-13.714286 36.571428h525.714286q14.857143 0 25.714285 10.857143t10.857143 25.714286-10.857143 25.714286-25.714285 10.857143H292.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286q0-8 6.285714-22.571429t16.857143-34 11.714286-21.714285L189.714286 219.428571H73.142857q-14.857143 0-25.714286-10.857142T36.571429 182.857143t10.857142-25.714286 25.714286-10.857143h146.285714q9.142857 0 16.285715 3.714286t11.428571 8.857143 7.428572 14T258.857143 188t3.142857 16.857143T264.571429 219.428571h686.285714q14.857143 0 25.714286 10.857143t10.857142 25.714286z\"  ></path></symbol><symbol id=\"icon-caret-square-o-down\" viewBox=\"0 0 1024 1024\"><path d=\"M727.428571 385.714286q10.285714 20-2.857142 37.714285l-182.857143 256q-10.857143 15.428571-29.714286 15.428572t-29.714286-15.428572L299.428571 423.428571q-13.142857-17.714286-2.857142-37.714285 9.714286-20 32.571428-20h365.714286q22.857143 0 32.571428 20z m77.142858 400.571428V237.714286q0-7.428571-5.428572-12.857143T786.285714 219.428571H237.714286q-7.428571 0-12.857143 5.428572T219.428571 237.714286v548.571428q0 7.428571 5.428572 12.857143t12.857143 5.428572h548.571428q7.428571 0 12.857143-5.428572t5.428572-12.857143z m146.285714-548.571428v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-cc-discover\" viewBox=\"0 0 1316 1024\"><path d=\"M169.142811 419.884869q0 27.560011-19.454126 45.392958-15.671379 14.050202-48.09492 14.050202h-9.18667V360.441708h9.18667q32.963934 0 48.09492 14.590594 19.454125 16.752163 19.454126 44.852567z m959.736842-35.125504q0 28.100403-34.585111 28.100403h-10.267455V358.280139h10.807847q34.044719 0 34.044719 26.479226zM205.349099 419.884869q0-39.989035-27.019618-65.117281T108.618866 329.639343h-51.337275v179.950658h51.337275q39.989035 0 64.306691-20.53491 32.423542-27.560011 32.423542-69.170222z m16.211771 89.705132h35.125504V329.639343h-35.125504v179.950658z m172.925557-54.579629q0-21.615695-11.078043-33.504326T342.60876 398.809566q-15.671379-5.403924-21.345498-10.267455T315.589142 376.113087q0-8.646278 7.295297-14.320398T341.527975 356.118569q15.671379 0 28.640796 14.590594l18.37334-23.777264q-22.156087-19.994518-52.958452-19.994517-23.777264 0-39.989035 14.86079T279.382853 378.274656q0 18.913733 9.727063 29.991777t34.585111 19.724321q19.994518 7.025101 24.317657 10.267455 10.267455 6.484708 10.267455 18.37334 0 10.807847-7.565493 18.103145T331.260521 482.029991q-25.938834 0-38.367859-23.777264l-22.696479 21.615694q23.777264 34.585111 62.145122 34.585112 27.560011 0 44.852567-16.481968t17.292555-42.961193z m150.229078 48.635313v-41.610212q-19.994518 19.994518-42.150604 19.994518-26.479226 0-43.501586-17.562752T442.040956 419.884869q0-25.938834 17.022359-44.041978T500.943723 357.739746q23.236872 0 43.771782 20.53491v-41.610212q-21.615695-10.807847-43.231389-10.807847-39.989035 0-67.819242 27.289814T405.834667 419.884869t27.560011 66.738457T500.943723 513.91314q22.696479 0 43.771782-10.267455z m665.763395 326.39699v-284.786777q-35.125504 21.615695-78.086697 45.392958T1004.049016 653.874763t-178.059284 74.30395T600.375919 800.861487t-272.357753 63.766299h847.875623q14.050202 0 24.317656-10.267455t10.267455-24.317656z m-459.873903-409.077022q0-40.529427-28.640796-69.170223t-69.170223-28.640795-69.170222 28.640795-28.640796 69.170223 28.640796 69.170223 69.170222 28.640796 69.170223-28.640796 28.640796-69.170223z m82.139639 93.48788l77.816501-184.81419h-38.367858l-48.635313 121.04789-48.09492-121.04789h-38.367858l76.735716 184.81419h18.913732z m93.48788-4.863532h99.432195v-30.261972h-64.306691v-48.635313h62.145122v-30.261973h-62.145122v-39.989035h64.306691v-30.802365h-99.432195v179.950658z m211.293415 0h43.231389l-56.741198-75.654931q41.06982-8.646278 41.06982-50.796882 0-25.398441-16.752164-39.448643t-47.014136-14.050202h-52.418059v179.950658h35.125504V437.717817h4.863531z m107.538081-368.007201v685.21752q0 30.261973-20.805106 51.337275t-50.526687 21.075302H71.331792q-29.72158 0-50.526686-21.075302T0 826.80032V141.5828q0-30.261973 20.805106-51.337275t50.526686-21.075302h1102.400427q29.72158 0 50.526687 21.075302t20.805106 51.337275z\"  ></path></symbol><symbol id=\"icon-cc-diners-club\" viewBox=\"0 0 1316 1024\"><path d=\"M463.372052 670.215287V295.953245q-57.246431 22.142487-92.890435 73.178221T334.837613 483.354297t35.644004 114.222831T463.372052 670.215287z m272.190576-186.86099q0-63.187098-35.644004-114.222831T607.028189 295.953245v374.802103q57.246431-22.142487 92.890435-73.17822t35.644004-114.222831z m116.113043 0q0 85.869646-42.394762 158.777836T693.977956 757.435085 535.200121 799.829847q-64.267219 0-122.863802-25.112821t-100.991345-67.507583-67.507583-100.991345T218.72457 483.354297q0-85.869646 42.394762-158.777836T376.422285 209.273508 535.200121 166.878746t158.777835 42.394762T809.280909 324.576461t42.394762 158.777836z m206.843235 3.780424q0-75.068433-29.973367-141.225864T948.886591 234.92639t-115.302952-70.747947-136.365319-25.922912H534.66006q-95.050677 0-174.709626 43.744914t-126.914256 124.213953T185.780869 487.134721q0 92.350374 46.985278 171.469262T360.220465 783.628027t174.439595 45.905157h162.55826q69.667826 0 135.825258-27.273064t115.843013-72.90819 79.658948-109.362285 29.973367-132.854924z m185.78087-348.87919v691.277653q0 28.083155-20.522306 48.60546t-48.60546 20.522305H69.127765q-28.083155 0-48.60546-20.522305t-20.522305-48.60546V138.255531q0-28.083155 20.522305-48.60546t48.60546-20.522306h1106.044245q28.083155 0 48.60546 20.522306t20.522306 48.60546z\"  ></path></symbol><symbol id=\"icon-cc-paypal\" viewBox=\"0 0 1316 1024\"><path d=\"M402.345197 489.294964q0 19.982245-13.771547 33.213731T354.819858 535.740181q-15.661759 0-25.112821-8.64097T320.255975 503.336541q0-19.982245 13.501517-33.753791t33.483761-13.771547q15.121699 0 25.112821 8.911001T402.345197 489.294964z m423.947623-80.469039q0 22.682548-11.881335 30.783458t-35.644004 8.10091l-17.281941 0.54006 9.181031-57.786491q1.080121-5.940667 7.020789-5.940667h9.721092q11.881335 0 18.902123 1.080121t13.501517 6.750758 6.480728 16.471851z m189.561294 80.469039q0 19.442184-13.771547 32.943701t-33.213731 13.501516q-15.661759 0-25.382852-8.64097t-9.721092-23.76267q0-19.982245 13.501517-33.753791t33.483761-13.771547q15.121699 0 25.112821 8.911001T1015.854114 489.294964zM277.051122 396.94459q0-31.863579-20.792336-46.175187T201.982689 336.457795H115.572983q-10.261153 0-11.341274 10.261153l-35.103944 220.344752q-0.540061 3.240364 1.620182 5.940667t5.400607 2.700304h41.044611q10.801213 0 11.881334-10.261153l9.721092-59.406673q0.540061-4.320485 3.780425-7.020789t8.10091-3.510394 9.181031-0.810091 10.261153 0.54006 7.560849 0.540061q46.445217 0 72.90819-26.192942T277.051122 396.94459z m166.878746 168.498928l22.142487-140.955834q0.540061-3.240364-1.620182-5.940667t-5.400606-2.700304h-41.044611q-7.560849 0-9.181031 17.822002-14.581638-21.602427-51.305764-21.602426-38.884368 0-66.157431 29.163276T264.089666 509.817269q0 31.863579 18.632093 50.765703t49.955612 18.902123q15.121699 0 31.323518-6.480728t25.922912-17.281941q-2.160243 6.480728-2.160242 11.341274 0 8.640971 7.020788 8.640971h37.264186q10.261153 0 11.881335-10.261153z m241.407118-142.035955q0-2.700303-2.160243-5.130577t-4.860546-2.430273h-41.584671q-5.940667 0-9.721092 5.400607l-57.246431 84.249464-23.762669-81.0091q-2.700303-8.640971-11.881335-8.640971h-40.50455q-2.700303 0-4.860546 2.430273t-2.160242 5.130577q0 1.080121 10.531183 31.863579t22.682548 66.427462 12.691425 37.804247q-44.284975 60.486795-44.284974 64.80728 0 7.020789 7.020788 7.020788h41.584672q5.940667 0 9.721092-5.400606l137.715469-198.742326q1.080121-1.080121 1.080122-3.780424z m205.223053-26.462973q0-31.863579-20.792336-46.175187T815.491606 336.457795h-85.869646q-10.801213 0-11.881334 10.261153l-35.103944 220.344752q-0.540061 3.240364 1.620182 5.940667t5.400607 2.700304h44.284975q6.480728 0 8.64097-7.020789l9.721092-62.647037q0.540061-4.320485 3.780425-7.020789t8.10091-3.510394 9.181031-0.810091 10.261153 0.54006 7.560849 0.540061q46.445217 0 72.90819-26.192942t26.462973-72.63816z m166.878746 168.498928l22.142487-140.955834q0.540061-3.240364-1.620182-5.940667t-5.400606-2.700304h-41.044611q-7.560849 0-9.181031 17.822002-14.041577-21.602427-51.305764-21.602426-38.884368 0-66.157431 29.163276T877.598583 509.817269q0 31.863579 18.632093 50.765703t49.955612 18.902123q15.661759 0 31.863579-6.480728t25.382851-17.281941q0 0.540061-1.080121 4.860546t-1.080121 6.480728q0 8.640971 7.020788 8.640971h37.264186q10.261153 0 11.881335-10.261153z m117.733225-220.884813v-0.54006q0-7.560849-7.020788-7.56085h-39.96449q-5.940667 0-7.020788 5.940668l-35.103944 224.665237-0.54006 1.080121q0 2.700303 2.160242 5.130577t5.400607 2.430273h35.644004q10.261153 0 11.341274-10.261153zM211.703781 416.926835q-2.700303 18.902123-14.041577 24.84279t-32.40364 5.940668l-17.822002 0.54006 9.181031-57.786491q1.080121-5.940667 7.020789-5.940667h10.261153q21.602427 0 31.323518 6.210697t6.480728 26.192943z m1032.595995-278.671304v691.277653q0 28.083155-20.522306 48.60546t-48.60546 20.522305H69.127765q-28.083155 0-48.60546-20.522305t-20.522305-48.60546V138.255531q0-28.083155 20.522305-48.60546t48.60546-20.522306h1106.044245q28.083155 0 48.60546 20.522306t20.522306 48.60546z\"  ></path></symbol><symbol id=\"icon-cc-jcb\" viewBox=\"0 0 1316 1024\"><path d=\"M1053.65836 538.980545q0 14.041577-8.37094 24.0327T1024.495084 575.704671q-4.320485 1.080121-9.721092 1.080121h-82.629282V501.176299h82.629282q5.400607 0 9.721092 1.080121 12.421395 2.700303 20.792336 12.691426T1053.65836 538.980545z m-9.721092-115.032922q0 13.501517-8.10091 22.682548t-20.522305 11.341274q-1.620182 0.540061-8.10091 0.540061h-75.068433V388.84368h75.068433q1.620182 0 4.590516 0.27003t3.510394 0.270031q12.421395 2.160243 20.522305 11.611304t8.10091 22.952578zM393.164165 512.517573V346.178887H270.030333v166.338686q0 31.323519-20.522305 51.035733T192.801658 583.26552q-58.326552 0-123.673893-31.863579v60.486794q28.623215 8.10091 65.347341 12.421396t58.866613 4.860546l22.682548 0.54006q177.139899 0 177.139898-117.193164z m385.603316 99.371162v-61.026855q-53.466006 28.083155-108.012133 31.863579-58.326552 4.320485-91.270253-22.142487t-32.9437-76.688615 32.9437-76.688614 91.270253-22.142488q54.546127 3.780425 108.012133 31.323519V355.899979q-25.922912-6.480728-54.006067-10.531183t-43.204853-5.130576l-15.121698-1.080121q-68.587705-3.240364-118.003256 7.560849T472.553083 379.122588t-38.344307 47.525339-11.881335 57.24643 11.881335 57.246431 38.344307 47.525339 75.878524 32.40364 118.003256 7.560849q54.546127-2.160243 112.332618-16.741881z m396.404529-62.106976q0-29.163276-23.222608-47.795369T1093.082789 480.653993v-1.620182q30.783458-4.320485 48.065399-22.412517t17.281942-42.934823q0-29.703337-22.142488-47.525339t-57.786491-19.442184q-1.620182 0-6.480728-0.27003t-7.560849-0.270031h-245.727604v275.43094h265.169788q39.964489 0 65.617371-19.712214t25.652881-52.115854z m69.127766-411.526228v691.277653q0 28.083155-20.522306 48.60546t-48.60546 20.522305H69.127765q-28.083155 0-48.60546-20.522305t-20.522305-48.60546V138.255531q0-28.083155 20.522305-48.60546t48.60546-20.522306h1106.044245q28.083155 0 48.60546 20.522306t20.522306 48.60546z\"  ></path></symbol><symbol id=\"icon-cc-mastercard\" viewBox=\"0 0 1316 1024\"><path d=\"M604.327886 184.160687q-69.127765-45.905157-151.757047-45.905156-55.626249 0-106.661982 21.872457T258.148999 218.72457 199.552416 306.214398 177.679959 412.606349q0 56.166309 21.872457 106.932012T258.148999 607.028189t87.489828 58.596583 106.932012 21.872456q82.629282 0 151.757047-45.905156-70.747947-57.786491-96.130799-143.386107t0.270031-170.929201T604.327886 184.160687z m17.822002 12.961456q-68.047644 53.466006-92.890435 134.745137t-0.27003 162.28823 93.160465 134.475106q68.587705-53.466006 93.160465-134.475106t-0.270031-162.28823T622.149888 197.122143z m17.822002-12.961456q70.207887 57.786491 95.860768 143.386107t0.27003 171.199232-96.130798 142.846046q69.127765 45.905157 151.757047 45.905156 56.166309 0 106.932012-21.872456t87.489828-58.596583 58.596582-87.489828 21.872457-106.932012q0-55.626249-21.872457-106.391951T986.150777 218.72457t-87.759858-58.596582T791.728937 138.255531q-82.629282 0-151.757047 45.905156z m400.184954 389.923802h3.780424v-1.620182h-9.181031v1.620182h3.780425v9.181031h1.620182v-9.181031z m15.661759 9.181031h2.160243v-10.801213h-2.700304l-3.240364 7.020788-3.240364-7.020788h-2.700303v10.801213h1.620182v-8.10091l3.240364 7.020789h2.160243l2.700303-7.020789v8.10091z m-4.320485 237.626693v1.080121h-2.700304v-1.620182h2.700304v0.540061z m0 4.860546h1.620182l-2.160243-2.700303h1.080121l0.540061-0.540061q0.540061-0.540061 0.540061-1.620182t-0.540061-1.620182l-0.540061-0.540061h-4.860546v7.020789h1.620182v-2.700303h0.540061z m-681.556561-36.724125q0-10.261153 5.940667-16.741881t16.20182-6.480728q9.721092 0 15.661759 6.750758t5.940668 16.471851q0 10.261153-5.940668 16.74188t-15.661759 6.480728q-10.261153 0-16.20182-6.480728t-5.940667-16.74188z m255.448695-23.76267q16.20182 0 18.902123 17.281942h-37.804246q2.700303-17.281941 18.902123-17.281942z m192.261597 23.76267q0-10.261153 5.940667-16.741881t15.66176-6.480728 15.931789 6.750758 6.210698 16.471851q0 10.261153-5.940667 16.74188t-16.20182 6.480728q-9.721092 0-15.66176-6.480728t-5.940667-16.74188z m146.896501 0q0-9.721092 6.210698-16.471851t15.93179-6.750758 15.931789 6.750758 6.210698 16.471851q0 10.261153-6.210698 16.74188t-15.931789 6.480728-15.93179-6.750758-6.210698-16.47185z m85.329586 38.884368q-1.080121 0-2.160243-0.540061-0.540061 0-1.620182-1.080121t-1.080121-1.620182q-0.540061-1.080121-0.540061-2.160243 0-1.620182 0.540061-2.160243 0-1.080121 1.080121-2.160242l0.540061-0.540061q1.080121 0 1.080121-0.540061 1.080121-0.540061 2.160243-0.54006 1.620182 0 2.160242 0.54006l2.160243 1.080122 1.080121 2.160242v0.540061q0.540061 1.080121 0.540061 1.620182l-0.540061 0.540061v1.620182l-0.54006 0.54006-0.540061 1.080122q-1.080121 1.080121-2.160243 1.080121-0.540061 0.540061-2.160242 0.540061z m-726.381597-2.160243h16.20182v-45.905157q0-12.961456-7.830879-20.792335T310.534883 750.684326q-17.281941 0-25.382851 12.961456-7.560849-12.961456-24.30273-12.961456-12.961456 0-21.062366 10.801214v-8.640971h-16.20182v72.90819h16.20182v-40.50455q0-19.442184 17.822002-19.442184 16.20182 0 16.20182 19.442184v40.50455h15.661759v-40.50455q0-19.442184 17.822002-19.442184 16.20182 0 16.20182 19.442184v40.50455z m89.650071 0h15.661759v-72.90819h-15.661759v8.640971q-9.181031-10.801213-23.222609-10.801214-15.661759 0-25.922912 10.801214t-10.261152 27.543094 10.261152 27.543094 25.922912 10.801213q15.121699 0 23.222609-10.801213v9.181031z m96.130799-22.142487q0-18.362063-25.382852-21.602427l-7.560849-1.080121q-12.421395-2.160243-12.421395-7.56085 0-8.10091 13.501516-8.10091 12.421395 0 23.222609 5.940668l6.480728-12.961456q-11.881335-7.560849-29.703337-7.56085-14.041577 0-22.142487 6.480728t-8.10091 17.281942q0 17.822002 25.382851 21.062366l7.020789 1.080121q12.961456 2.160243 12.961456 7.560849 0 9.181031-16.741881 9.181032-13.501517 0-24.30273-7.56085l-7.020788 12.421396q13.501517 9.181031 31.323518 9.181031 15.661759 0 24.572761-6.480728t8.911001-17.281941z m70.207886 18.362062l-4.320485-13.501516q-7.020789 3.780425-14.041577 3.780424-10.261153 0-10.261153-11.881334v-32.943701h25.922912v-14.581638h-25.922912v-22.142487h-16.20182v22.142487h-15.121699v14.581638h15.121699v32.943701q0 27.003033 25.382851 27.003033 11.341274 0 19.442184-5.400607z m46.445218-71.288008q-15.661759 0-25.922912 10.801214t-10.261153 27.543094q0 17.281941 10.531183 27.813124t26.733003 10.531183q17.822002 0 29.703337-10.261153l-7.56085-11.881334q-9.721092 8.10091-21.062366 8.10091-18.362063 0-22.142487-17.822002h54.546127v-6.480728q0-17.281941-9.721092-27.813125t-24.84279-10.531183z m85.869645 0q-12.421395 0-18.902123 10.801214v-8.640971h-16.20182v72.90819h16.20182v-41.044611q0-18.902123 15.661759-18.902123 5.400607 0 9.721092 2.160243l4.860546-15.121699q-4.860546-2.160243-11.341274-2.160243z m16.20182 38.344308q0 16.741881 10.531183 27.543094t28.353185 10.801213q15.661759 0 25.922912-8.640971l-7.560849-12.961456q-9.721092 7.020789-18.902123 6.480728-9.721092 0-15.93179-6.480728t-6.210698-16.74188 6.210698-16.741881 15.93179-6.480728q10.261153 0 18.902123 6.480728l7.560849-12.961456q-10.801213-8.640971-25.922912-8.640971-17.822002 0-28.353185 10.801214t-10.531183 27.543094z m132.314864 36.724125h16.20182v-72.90819h-16.20182v8.640971q-8.10091-10.801213-22.682548-10.801214-15.661759 0-26.192943 10.801214t-10.531183 27.543094 10.531183 27.543094 26.192943 10.801213q15.121699 0 22.682548-10.801213v9.181031z m71.828068-75.068433q-12.421395 0-18.902123 10.801214v-8.640971h-15.661759v72.90819h15.661759v-41.044611q0-18.902123 15.661759-18.902123 5.400607 0 9.721092 2.160243l4.860546-15.121699q-4.320485-2.160243-11.341274-2.160243z m75.608494 75.068433h15.661759v-102.611527h-15.661759v38.344308q-8.10091-10.801213-23.222609-10.801214t-25.652882 11.071244-10.531183 27.273064 10.531183 27.273063 25.652882 11.071244q15.661759 0 23.222609-10.801213v9.181031z m42.124732-10.801213l-1.080122 0.54006h-1.620182q-1.080121 0.540061-2.160242 1.620182-1.620182 0.540061-1.620182 2.160243-0.540061 1.080121-0.540061 3.240364 0 1.620182 0.540061 2.700303 0 1.080121 1.620182 2.160243 1.080121 1.080121 2.160242 1.620182t2.700304 0.540061q2.160243 0 3.240364-0.540061 0-0.540061 1.080121-1.080121l1.080121-0.540061q0.540061-0.540061 1.620182-2.160243 0.540061-1.080121 0.540061-2.700303 0-2.160243-0.540061-3.240364-0.540061-0.540061-1.620182-2.160243 0-0.540061-1.080121-1.080121l-1.080121-0.540061q-0.540061 0-1.620182-0.27003t-1.620182-0.27003z m194.42184-676.696015v691.277653q0 28.083155-20.522306 48.60546t-48.60546 20.522305H69.127765q-28.083155 0-48.60546-20.522305t-20.522305-48.60546V138.255531q0-28.083155 20.522305-48.60546t48.60546-20.522306h1106.044245q28.083155 0 48.60546 20.522306t20.522306 48.60546z\"  ></path></symbol><symbol id=\"icon-cc-amex\" viewBox=\"0 0 1316 1024\"><path d=\"M64.311374 368.574428h48.098422l-24.319427-58.366625z m335.608093 284.267081l39.991947-42.694106-37.83022-42.694105H313.990825v26.481154h76.741303v29.723744H313.990825v29.183313h85.928642z m85.388211-42.153674l53.502739 59.447488v-117.273681z m155.644333-25.40029q0-17.834247-21.617269-17.834247h-45.396263v37.289788h44.855832q22.1577 0 22.1577-19.455541z m156.184765-2.161727q0-15.67252-22.698132-15.67252h-44.3154v32.966335h43.774968q23.238564 0 23.238564-17.293815z m-150.240016-251.841178q0-15.67252-22.698132-15.67252h-44.315401v32.425903h43.774969q23.238564 0 23.238564-16.753383z m248.058156 37.289788h48.098422l-23.778995-58.366625zM377.761767 284.807512v146.456995h-35.668493V316.692984l-50.800581 114.571523h-30.804608l-50.800581-114.571523v114.571523H138.350518l-13.510792-32.425903H51.881444l-13.510792 32.425903H0.540432l62.690078-146.456995h51.881445l59.447488 138.890951V284.807512h57.285762l45.936695 99.439436 41.613242-99.439436h58.366625z m300.480032 300.480033q0 10.808634-2.972374 18.91511t-7.566044 13.510792-12.159714 8.917124-14.051224 5.404317-17.023599 2.431942-17.023599 0.540432-17.564031-0.270216-15.942735-0.270216v49.179286H505.844083l-43.234537-48.638854-44.855832 48.638854H279.403195V537.189122h140.512246l43.234537 48.098423 44.3154-48.098423h111.869364q58.907057 0 58.907057 48.098423zM520.976171 401.000331v30.264176H403.702489V284.807512h117.273682v30.804608H438.830551v26.481154h79.983893v29.723744H438.830551v29.183313h82.14562z m724.178495 302.101327v123.758862q0 29.723744-20.806621 51.070797T1173.817679 899.27837H71.336986q-29.723744 0-50.530365-21.347053T0 826.86052V460.447819h59.98792l13.510793-32.966334h29.723744l13.510793 32.966334h117.814113v-24.859859l10.268203 24.859859h61.068783l10.808635-25.40029v25.40029h292.373556v-53.50274l5.404317-0.540431q5.404317 0 5.404317 7.566044v46.477127h150.780448v-12.429929q12.429929 6.485181 29.723744 9.72777t28.372665 3.512807 34.047198-0.270216 27.832233-0.540432l13.510793-32.966334h30.264176l13.510793 32.966334h122.677998v-31.345039l18.374679 31.345039h98.358571V256.164632h-97.277708v23.778995l-13.510793-23.778995h-99.979867v23.778995l-12.429929-23.778995h-134.567496q-37.289788 0-58.907057 11.889497v-11.889497h-92.954255v11.889497q-12.970361-11.889498-39.451515-11.889497H298.858737l-23.238564 52.421876-23.238563-52.421876H145.376131v23.778995l-11.889498-23.778995H42.153674L0 352.901908V141.593109q0-29.723744 20.806621-51.070797T71.336986 69.175259h1102.480693q29.723744 0 50.530366 21.347053T1245.154666 141.593109v366.412701h-64.851806q-27.562017 0-43.774969 11.889497v-11.889497h-95.656413q-29.723744 0-42.153673 11.889497v-11.889497h-170.776421v11.889497q-16.753383-11.889498-47.017559-11.889497h-112.950228v11.889497q-12.429929-11.889498-49.179286-11.889497H492.33329l-29.183312 31.345039-27.021586-31.345039H247.517724v204.283187h185.368078l29.723744-31.885471 28.102449 31.885471h114.031091v-48.098422h11.349066q31.885471 0 48.638854-7.025613v55.124035h94.035118v-53.502739h4.323454q4.323454 0 5.404317 1.080863t1.080864 5.404317v47.017559h285.888375q30.804608 0 47.557991-12.970361v12.970361h90.792528q32.425903 0 51.341013-9.187339z m-409.647239-126.461021q0 12.429929-6.48518 23.238564t-18.374678 15.67252q13.510793 4.863885 18.374678 14.051224t4.863885 24.859859v29.183312h-35.128061v-24.319427q0-17.834247-6.485181-23.508779t-24.859858-5.674533h-37.289788v53.502739h-35.128062V537.189122h83.226484q25.940722 0 41.613242 8.106476t15.672519 31.345039z m-149.699584-252.38161q0 12.970361-6.755396 23.778996t-18.104463 15.672519q14.051225 4.863885 18.644894 13.781009t4.59367 25.130075v28.642881h-35.128061q0-4.863885 0.270216-14.321441t0-13.510793-1.621296-9.997986-4.593669-8.646908-9.457555-4.593669-15.942736-1.891511h-37.83022v52.962308h-34.587629V284.807512l82.686052 0.540432q26.481154 0 42.153673 7.83626t15.67252 31.074823z m285.888376 329.122913v30.264176h-116.73325V537.189122h116.73325v30.264176h-81.605189v26.481154h79.983894v29.723744h-79.983894v29.183313z m-230.223909-368.574428v146.456995h-35.668494V284.807512h35.668494z m374.519176 352.361477q0 46.477127-55.124034 46.477127h-68.094396v-31.345039h68.094396q18.374678 0 18.374678-13.510793 0-8.646907-9.187339-11.349066t-22.427916-2.702158-26.75137-1.891511-22.698132-12.159714-9.187339-29.723744q0-21.076837 14.051224-32.425903t35.668493-11.349066h70.256123v30.804608h-64.311374q-19.455542 0-19.455541 13.510793 0 8.646907 9.457555 11.07885t22.698131 2.161727 26.481154 1.351079 22.698132 11.619282 9.457555 29.453528z m129.16318-27.021586v54.583603q-12.970361 18.91511-47.557991 18.91511h-67.553964v-31.345039h67.553964q17.834247 0 17.834246-13.510793 0-7.025612-6.755396-10.268202t-16.753383-2.972375-21.617269-1.080863-21.617268-4.323454-16.753383-12.970361-6.755397-26.210938q0-21.076837 14.321441-32.425903t35.938709-11.349066h69.715691v30.804608h-63.770943q-19.455542 0-19.455541 13.510793 0 10.808634 15.672519 11.889497t37.019573 2.702159 30.534392 14.051224z m-89.171233-324.799459v145.916563h-49.719718l-65.932668-109.707638v109.707638h-71.336987l-14.051224-32.425903h-72.41785l-13.510792 32.425903h-40.532379q-69.715691 0-69.715691-71.877418 0-74.579576 71.877418-74.579577h34.047198v31.885472q-3.783022 0-15.132088-0.540432t-15.402304-0.270216-12.429929 1.080863-11.619282 3.512806-7.83626 7.295829-6.214965 12.429929-1.621295 18.104462q0 20.536405 7.295828 31.34504t26.75137 10.808634h15.67252l49.719717-115.111955h52.421877l58.907056 138.350519V285.347944h53.50274l61.609215 101.601162V285.347944h35.668493z\"  ></path></symbol><symbol id=\"icon-cc\" viewBox=\"0 0 1170 1024\"><path d=\"M448.571429 576h118.285714q-8 90.285714-56.285714 142T388 769.714286q-92.571429 0-145.428571-66.285715T189.714286 522.857143q0-110.857143 53.142857-178T376 277.714286q84.571429 0 132.571429 49.714285t55.428571 141.142858H448q-2.857143-36.571429-20.285714-56.571429T381.142857 392q-32.571429 0-50.571428 34.571429T312.571429 528q0 27.428571 2.857142 48t10.285715 39.714286 22.857143 29.428571 37.714285 10.285714q54.285714 0 62.285715-79.428571z m406.857142 0h117.714286q-8 90.285714-56 142t-122.285714 51.714286q-92.571429 0-145.428572-66.285715T596.571429 522.857143q0-110.857143 53.142857-178T782.857143 277.714286q84.571429 0 132.571428 49.714285t55.428572 141.142858h-116.571429q-2.285714-36.571429-20-56.571429t-46.285714-20q-32.571429 0-50.571429 34.571429T719.428571 528q0 27.428571 2.857143 48t10.285715 39.714286 22.571428 29.428571 37.428572 10.285714q28 0 43.714285-21.714285t19.142857-57.714286z m205.142858-68q0-118.285714-8.857143-175.428571T1017.142857 240.571429q-3.428571-4.571429-7.714286-8t-12.285714-8.571429-9.142857-6.285714q-49.142857-36-398.285714-36-357.142857 0-405.714286 36-2.857143 2.285714-10 6.571428t-12 8T153.714286 240.571429q-25.714286 34.285714-34.285715 91.142857T110.857143 508q0 118.857143 8.571428 175.714286t34.285715 91.714285q3.428571 4.571429 8.571428 8.571429t11.714286 8 10 6.857143q25.142857 18.857143 136.857143 28t268.857143 9.142857q348.571429 0 398.285714-37.142857 2.857143-2.285714 9.714286-6.285714t11.714285-8 7.714286-9.142858q26.285714-34.285714 34.857143-90.857142t8.571429-176.571429z m109.714285-434.857143v877.714286H0V73.142857h1170.285714z\"  ></path></symbol><symbol id=\"icon-cc-visa\" viewBox=\"0 0 1316 1024\"><path d=\"M1066.619816 534.66006h-74.528372q7.560849-19.982245 35.644004-96.670859l1.620182-4.860546q2.160243-5.400607 5.400607-14.041578t4.860546-14.041577l6.480728 29.703337zM286.772214 499.556117l-31.323519-159.317897q-5.940667-29.163276-40.50455-29.163276H70.207887l-1.080122 7.020789q167.958867 42.664793 217.644449 181.460384z m96.670859-188.481173l-87.489828 236.546572-9.181031-48.065399q-14.041577-37.804247-45.905157-69.937857T170.11911 381.822891l72.90819 275.43094h94.510617l140.955834-346.178887H383.443073z m75.068433 346.718948h89.650071l56.166309-346.718948H514.677815z m414.766592-338.077977q-37.264186-14.581638-80.46904-14.581638-66.427462 0-108.552194 31.863579t-42.664792 82.629282q-0.540061 55.086188 78.308796 93.970556 25.922912 12.421395 36.184065 22.142487t10.261153 21.062366q0 16.20182-16.20182 24.842791t-37.264186 8.640971q-46.445217 0-84.249464-17.822002l-11.881335-5.940668-12.421395 77.768736q39.964489 18.362063 99.911223 18.362063 70.207887 0.540061 112.602649-31.863579t43.474884-86.409707q0-57.246431-75.608494-93.970556-26.462973-13.501517-38.344307-22.682548t-11.881335-20.522305q0-11.881335 13.231487-20.792336T785.78827 377.502406q37.804247-0.540061 66.967522 12.961456l8.10091 4.320485z m229.525783-8.640971h-69.127765q-35.103943 0-46.985278 29.163276l-132.854924 317.555672h93.970556l18.902123-51.845824h114.492861q2.700303 11.881335 10.801214 51.845824h83.169342z m141.495895-172.819413v691.277653q0 28.083155-20.522306 48.60546t-48.60546 20.522305H69.127765q-28.083155 0-48.60546-20.522305t-20.522305-48.60546V138.255531q0-28.083155 20.522305-48.60546t48.60546-20.522306h1106.044245q28.083155 0 48.60546 20.522306t20.522306 48.60546z\"  ></path></symbol><symbol id=\"icon-cc-stripe\" viewBox=\"0 0 1316 1024\"><path d=\"M862.476884 487.674782q0 37.264186-11.341274 57.246431-10.261153 18.902123-28.083154 18.902123-12.421395 0-22.142488-4.860546V437.989201q15.661759-16.20182 30.783458-16.20182 30.783458 0 30.783458 65.887401z m236.546572-19.442184h-59.406673q3.240364-52.925945 30.243397-52.925945 27.543094 0 29.163276 52.925945zM257.068877 541.140788q0-31.863579-17.822002-49.415551T184.700748 460.671749q-19.442184-7.020789-28.083155-12.961456t-8.64097-13.501517q0-14.041577 20.522305-14.041577 31.323519 0 66.967523 17.822002l9.721092-60.486795q-36.184065-17.281941-80.46904-17.281941-41.584671 0-66.427462 20.522305-25.922912 21.062366-25.922912 58.866613 0 31.323519 17.551972 48.87549T143.656137 518.998301q21.062366 7.560849 29.433307 13.771547T181.460384 547.621516q0 16.741881-25.922912 16.741881-15.661759 0-37.804247-6.750759t-38.884368-16.47185l-9.721092 61.026855q38.884368 22.142487 90.730192 22.142488 43.744914 0 69.667826-19.982245 27.543094-22.142487 27.543094-63.187098z m159.317897-116.113043l10.261153-59.946734h-51.845824V292.172821l-69.667826 11.341274-9.721092 61.566916-24.842791 4.320485-9.181031 55.626249h33.483761v118.273286q0 45.365096 23.762669 64.80728 20.522305 16.20182 59.946734 16.20182 17.281941 0 42.664793-5.940668v-63.727158q-17.281941 3.780425-23.762669 3.780424-22.682548 0-22.682548-27.003033V425.027745h41.584671z m170.659171 13.501516V363.460829q-8.10091-1.620182-15.121699-1.620182-17.281941 0-29.973367 8.64097T523.858847 395.324408l-5.400607-30.243397H447.710293v254.368574h81.0091V454.191021q14.041577-16.741881 44.284974-16.741881 8.640971 0 14.041578 1.080121z m19.982244 180.920324h81.0091V365.081011h-81.0091v254.368574z m335.917735-134.475106q0-65.887401-24.30273-96.67086-21.602427-28.083155-59.946734-28.083154-34.563883 0-63.187098 30.243397l-4.320486-25.382851h-71.288008v348.339129l81.0091-13.501516v-81.549161q19.442184 5.940667 36.724126 5.940668 44.825035 0 72.368129-30.243398 32.943701-35.103943 32.943701-109.092254z m-252.748392-187.941112q0-17.822002-12.421396-30.243398t-30.243397-12.421395-30.243397 12.421395-12.421395 30.243398 12.421395 30.513427 30.243397 12.691426 30.243397-12.691426 12.421396-30.513427z m484.974478 192.801658q0-61.026855-25.922912-95.050678-27.003033-34.563883-77.768736-34.563882-51.845824 0-81.819191 35.644004T959.687804 493.075389q0 69.127765 34.023822 101.531405 29.703337 29.703337 86.949768 29.703337 54.546127 0 86.409706-21.602427l-8.64097-55.626249q-30.783458 16.741881-69.127766 16.741881-23.222609 0-34.023822-10.261153-12.421395-10.261153-15.121698-35.644004h133.935045q1.080121-7.560849 1.080121-28.083154z m69.127766-351.579494v691.277653q0 28.083155-20.522306 48.60546t-48.60546 20.522305H69.127765q-28.083155 0-48.60546-20.522305t-20.522305-48.60546V138.255531q0-28.083155 20.522305-48.60546t48.60546-20.522306h1106.044245q28.083155 0 48.60546 20.522306t20.522306 48.60546z\"  ></path></symbol><symbol id=\"icon-check1\" viewBox=\"0 0 1024 1024\"><path d=\"M954.857143 323.428571q0 22.857143-16 38.857143l-413.714286 413.714286-77.714286 77.714286q-16 16-38.857142 16t-38.857143-16l-77.714286-77.714286-206.857143-206.857143q-16-16-16-38.857143t16-38.857143l77.714286-77.714285q16-16 38.857143-16t38.857143 16l168 168.571428 374.857142-375.428571q16-16 38.857143-16t38.857143 16l77.714286 77.714286q16 16 16 38.857142z\"  ></path></symbol><symbol id=\"icon-certificate\" viewBox=\"0 0 1024 1024\"><path d=\"M859.428571 512l78.857143 77.142857q17.142857 16 11.428572 40-6.857143 23.428571-29.714286 29.142857l-107.428571 27.428572 30.285714 106.285714q6.857143 23.428571-10.857143 40-16.571429 17.714286-40 10.857143l-106.285714-30.285714-27.428572 107.428571q-5.714286 22.857143-29.142857 29.714286-6.857143 1.142857-10.857143 1.142857-17.714286 0-29.142857-12.571429l-77.142857-78.857143-77.142857 78.857143q-16 17.142857-40 11.428572-23.428571-6.285714-29.142857-29.714286l-27.428572-107.428571-106.285714 30.285714q-23.428571 6.857143-40-10.857143-17.714286-16.571429-10.857143-40l30.285714-106.285714-107.428571-27.428572q-22.857143-5.714286-29.714286-29.142857-5.714286-24 11.428572-40l78.857143-77.142857L85.714286 434.857143q-17.142857-16-11.428572-40 6.857143-23.428571 29.714286-29.142857l107.428571-27.428572-30.285714-106.285714q-6.857143-23.428571 10.857143-40 16.571429-17.714286 40-10.857143l106.285714 30.285714 27.428572-107.428571q5.714286-23.428571 29.142857-29.142857 23.428571-6.857143 40 10.857143l77.142857 79.428571 77.142857-79.428571q16.571429-17.142857 40-10.857143 23.428571 5.714286 29.142857 29.142857l27.428572 107.428571 106.285714-30.285714q23.428571-6.857143 40 10.857143 17.714286 16.571429 10.857143 40l-30.285714 106.285714 107.428571 27.428572q22.857143 5.714286 29.714286 29.142857 5.714286 24-11.428572 40z\"  ></path></symbol><symbol id=\"icon-check-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M806.857143 419.428571q0-16-10.285714-26.285714l-52-51.428571q-10.857143-10.857143-25.714286-10.857143t-25.714286 10.857143l-233.142857 232.571428-129.142857-129.142857q-10.857143-10.857143-25.714286-10.857143t-25.714286 10.857143l-52 51.428572q-10.285714 10.285714-10.285714 26.285714 0 15.428571 10.285714 25.714286l206.857143 206.857142q10.857143 10.857143 25.714286 10.857143 15.428571 0 26.285714-10.857143l310.285715-310.285714q10.285714-10.285714 10.285714-25.714286z m144 92.571429q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-check-circle-o\" viewBox=\"0 0 1024 1024\"><path d=\"M742.285714 464.571429l-241.142857 241.142857q-10.857143 10.857143-25.714286 10.857143t-25.714285-10.857143L281.714286 537.714286q-10.857143-10.857143-10.857143-25.714286t10.857143-25.714286l58.285714-58.285714q10.857143-10.857143 25.714286-10.857143t25.714285 10.857143l84 84 157.142858-157.142857q10.857143-10.857143 25.714285-10.857143t25.714286 10.857143l58.285714 58.285714q10.857143 10.857143 10.857143 25.714286t-10.857143 25.714286z m80.571429 47.428571q0-84.571429-41.714286-156t-113.142857-113.142857-156-41.714286-156 41.714286-113.142857 113.142857-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286 156-41.714286 113.142857-113.142857 41.714286-156z m128 0q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-chain-broken\" viewBox=\"0 0 1024 1024\"><path d=\"M287.428571 726.285714l-146.285714 146.285715q-6.285714 5.142857-13.142857 5.142857t-13.142857-5.142857q-5.142857-5.714286-5.142857-13.142858t5.142857-13.142857l146.285714-146.285714q5.714286-5.142857 13.142857-5.142857t13.142857 5.142857q5.142857 5.714286 5.142858 13.142857t-5.142858 13.142857z m96.571429 23.428572v182.857143q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142858-13.142857v-182.857143q0-8 5.142858-13.142857t13.142857-5.142858 13.142857 5.142858 5.142857 13.142857z m-128-128q0 8-5.142857 13.142857t-13.142857 5.142857H54.857143q-8 0-13.142857-5.142857t-5.142857-13.142857 5.142857-13.142857 13.142857-5.142858h182.857143q8 0 13.142857 5.142858t5.142857 13.142857z m722.285714 73.142857q0 68.571429-48.571428 116l-84 83.428571q-47.428571 47.428571-116 47.428572-69.142857 0-116.571429-48.571429l-190.857143-191.428571q-12-12-24-32l136.571429-10.285715 156 156.571429q15.428571 15.428571 38.857143 15.714286t38.857143-15.142857l84-83.428572q16-16 16-38.285714 0-22.857143-16-38.857143l-156.571429-157.142857 10.285714-136.571429q20 12 32 24l192 192q48 49.142857 48 116.571429z m-352.571428-413.714286l-136.571429 10.285714-156-156.571428q-16-16-38.857143-16-22.285714 0-38.857143 15.428571L171.428571 217.714286q-16 16-16 38.285714 0 22.857143 16 38.857143l156.571429 156.571428-10.285714 137.142858q-20-12-32-24L93.714286 372.571429q-48-49.142857-48-116.571429 0-68.571429 48.571428-116L178.285714 56.571429q47.428571-47.428571 116-47.428572 69.142857 0 116.571429 48.571429l190.857143 191.428571q12 12 24 32z m361.714285 48q0 8-5.142857 13.142857t-13.142857 5.142857h-182.857143q-8 0-13.142857-5.142857t-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857h182.857143q8 0 13.142857 5.142857t5.142857 13.142857zM676.571429 18.285714v182.857143q0 8-5.142858 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857V18.285714q0-8 5.142857-13.142857t13.142857-5.142857 13.142857 5.142857 5.142858 13.142857z m232.571428 86.285715l-146.285714 146.285714q-6.285714 5.142857-13.142857 5.142857t-13.142857-5.142857q-5.142857-5.714286-5.142858-13.142857t5.142858-13.142857l146.285714-146.285715q5.714286-5.142857 13.142857-5.142857t13.142857 5.142857q5.142857 5.714286 5.142857 13.142857t-5.142857 13.142858z\"  ></path></symbol><symbol id=\"icon-chain\" viewBox=\"0 0 1024 1024\"><path d=\"M868.571429 694.857143q0-22.857143-16-38.857143l-118.857143-118.857143q-16-16-38.857143-16-24 0-41.142857 18.285714 1.714286 1.714286 10.857143 10.571429t12.285714 12.285714 8.571428 10.857143 7.428572 14.571429 2 15.714285q0 22.857143-16 38.857143t-38.857143 16q-8.571429 0-15.714286-2t-14.571428-7.428571-10.857143-8.571429-12.285714-12.285714-10.571429-10.857143q-18.857143 17.714286-18.857143 41.714286 0 22.857143 16 38.857143l117.714286 118.285714q15.428571 15.428571 38.857143 15.428571 22.857143 0 38.857143-14.857142l84-83.428572q16-16 16-38.285714zM466.857143 292q0-22.857143-16-38.857143L333.142857 134.857143q-16-16-38.857143-16-22.285714 0-38.857143 15.428571L171.428571 217.714286q-16 16-16 38.285714 0 22.857143 16 38.857143l118.857143 118.857143q15.428571 15.428571 38.857143 15.428571 24 0 41.142857-17.714286-1.714286-1.714286-10.857143-10.571428T347.142857 388.571429t-8.571428-10.857143-7.428572-14.571429T329.142857 347.428571q0-22.857143 16-38.857142t38.857143-16q8.571429 0 15.714286 2t14.571428 7.428571 10.857143 8.571429 12.285714 12.285714 10.571429 10.857143q18.857143-17.714286 18.857143-41.714286z m511.428571 402.857143q0 68.571429-48.571428 116l-84 83.428571q-47.428571 47.428571-116 47.428572-69.142857 0-116.571429-48.571429l-117.714286-118.285714q-47.428571-47.428571-47.428571-116 0-70.285714 50.285714-119.428572l-50.285714-50.285714q-49.142857 50.285714-118.857143 50.285714-68.571429 0-116.571428-48L93.714286 372.571429q-48-48-48-116.571429t48.571428-116L178.285714 56.571429q47.428571-47.428571 116-47.428572 69.142857 0 116.571429 48.571429l117.714286 118.285714q47.428571 47.428571 47.428571 116 0 70.285714-50.285714 119.428571l50.285714 50.285715q49.142857-50.285714 118.857143-50.285715 68.571429 0 116.571428 48l118.857143 118.857143q48 48 48 116.571429z\"  ></path></symbol><symbol id=\"icon-chevron-circle-down\" viewBox=\"0 0 1024 1024\"><path d=\"M537.714286 742.285714l259.428571-259.428571q10.857143-10.857143 10.857143-25.714286t-10.857143-25.714286l-58.285714-58.285714q-10.857143-10.857143-25.714286-10.857143t-25.714286 10.857143L512 548.571429 336.571429 373.142857q-10.857143-10.857143-25.714286-10.857143t-25.714286 10.857143L226.857143 431.428571q-10.857143 10.857143-10.857143 25.714286t10.857143 25.714286l259.428571 259.428571q10.857143 10.857143 25.714286 10.857143t25.714286-10.857143z m413.142857-230.285714q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-chevron-circle-left\" viewBox=\"0 0 1024 1024\"><path d=\"M592.571429 797.142857l58.285714-58.285714q10.857143-10.857143 10.857143-25.714286t-10.857143-25.714286L475.428571 512l175.428572-175.428571q10.857143-10.857143 10.857143-25.714286t-10.857143-25.714286L592.571429 226.857143q-10.857143-10.857143-25.714286-10.857143t-25.714286 10.857143L281.714286 486.285714q-10.857143 10.857143-10.857143 25.714286t10.857143 25.714286l259.428571 259.428571q10.857143 10.857143 25.714286 10.857143t25.714286-10.857143z m358.285714-285.142857q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-chevron-circle-right\" viewBox=\"0 0 1024 1024\"><path d=\"M482.857143 797.142857l259.428571-259.428571q10.857143-10.857143 10.857143-25.714286t-10.857143-25.714286L482.857143 226.857143q-10.857143-10.857143-25.714286-10.857143t-25.714286 10.857143L373.142857 285.142857q-10.857143 10.857143-10.857143 25.714286t10.857143 25.714286l175.428572 175.428571-175.428572 175.428571q-10.857143 10.857143-10.857143 25.714286t10.857143 25.714286l58.285714 58.285714q10.857143 10.857143 25.714286 10.857143t25.714286-10.857143z m468-285.142857q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-chevron-down\" viewBox=\"0 0 1024 1024\"><path d=\"M961.714286 461.714286l-424 423.428571q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143L62.285714 461.714286q-10.857143-10.857143-10.857143-26t10.857143-26l94.857143-94.285715q10.857143-10.857143 25.714286-10.857142t25.714286 10.857142l303.428571 303.428572 303.428571-303.428572q10.857143-10.857143 25.714286-10.857142t25.714286 10.857142l94.857143 94.285715q10.857143 10.857143 10.857143 26t-10.857143 26z\"  ></path></symbol><symbol id=\"icon-chevron-circle-up\" viewBox=\"0 0 1024 1024\"><path d=\"M738.857143 650.857143l58.285714-58.285714q10.857143-10.857143 10.857143-25.714286t-10.857143-25.714286L537.714286 281.714286q-10.857143-10.857143-25.714286-10.857143t-25.714286 10.857143L226.857143 541.142857q-10.857143 10.857143-10.857143 25.714286t10.857143 25.714286l58.285714 58.285714q10.857143 10.857143 25.714286 10.857143t25.714286-10.857143l175.428571-175.428572 175.428571 175.428572q10.857143 10.857143 25.714286 10.857143t25.714286-10.857143z m212-138.857143q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-chevron-left\" viewBox=\"0 0 1024 1024\"><path d=\"M812.805049 172L509.376477 475.428571l303.428572 303.428572q10.857143 10.857143 10.857142 25.714286t-10.857142 25.714285l-94.857143 94.857143q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143L242.519334 501.142857q-10.857143-10.857143-10.857143-25.714286t10.857143-25.714285L666.519334 25.714286q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l94.857143 94.857143q10.857143 10.857143 10.857142 25.714285t-10.857142 25.714286z\"  ></path></symbol><symbol id=\"icon-chevron-right\" viewBox=\"0 0 1024 1024\"><path d=\"M778.857143 501.142857l-424 424q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143l-94.857142-94.857143q-10.857143-10.857143-10.857143-25.714285t10.857143-25.714286l303.428571-303.428572-303.428571-303.428571q-10.857143-10.857143-10.857143-25.714286t10.857143-25.714285L303.428571 25.714286q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l424 424q10.857143 10.857143 10.857143 25.714285t-10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-chevron-up\" viewBox=\"0 0 1024 1024\"><path d=\"M961.714286 760.571429l-94.857143 94.285714q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143L512 551.428571l-303.428571 303.428572q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143l-94.857143-94.285714q-10.857143-10.857143-10.857143-26t10.857143-26l424-423.428572q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l424 423.428572q10.857143 10.857143 10.857143 26t-10.857143 26z\"  ></path></symbol><symbol id=\"icon-child\" viewBox=\"0 0 1024 1024\"><path d=\"M825.142857 313.142857L658.285714 480v470.857143q0 26.285714-18.857143 45.142857t-45.142857 18.857143-45.142857-18.857143-18.857143-45.142857v-219.428572h-36.571428v219.428572q0 26.285714-18.857143 45.142857t-45.142857 18.857143-45.142857-18.857143-18.857143-45.142857V480L198.857143 313.142857q-16-16-16-38.857143t16-38.857143q16.571429-16 39.142857-16t38.571429 16l130.285714 130.285715h210.285714l130.285714-130.285715q16-16 38.857143-16t38.857143 16q16 16.571429 16 39.142858t-16 38.571428zM640 219.428571q0 53.142857-37.428571 90.571429T512 347.428571t-90.571429-37.428571T384 219.428571t37.428571-90.571428T512 91.428571t90.571429 37.428572T640 219.428571z\"  ></path></symbol><symbol id=\"icon-circle-thin\" viewBox=\"0 0 1024 1024\"><path d=\"M512 146.285714q-74.285714 0-142 29.142857t-116.571429 78-78 116.571429T146.285714 512t29.142857 142 78 116.571429 116.571429 78 142 29.142857 142-29.142857 116.571429-78 78-116.571429 29.142857-142-29.142857-142-78-116.571429-116.571429-78T512 146.285714z m438.857143 365.714286q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-circle-o-notch\" viewBox=\"0 0 1024 1024\"><path d=\"M1005.714286 512q0 100.571429-39.142857 192t-105.142858 157.428571-157.428571 105.142858-192 39.142857-192-39.142857-157.428571-105.142858-105.142858-157.428571T18.285714 512q0-121.714286 55.428572-227.714286T225.142857 109.714286 438.857143 23.428571v130.285715q-126.285714 25.714286-209.428572 126.285714T146.285714 512q0 74.285714 29.142857 142t78 116.571429 116.571429 78 142 29.142857 142-29.142857 116.571429-78 78-116.571429 29.142857-142q0-131.428571-83.142857-232T585.142857 153.714286V23.428571q117.714286 17.714286 213.714286 86.285715t151.428571 174.571428 55.428572 227.714286z\"  ></path></symbol><symbol id=\"icon-chrome\" viewBox=\"0 0 1024 1024\"><path d=\"M510.285714 0q137.142857-1.142857 257.714286 68.571429 132.571429 76.571429 201.142857 212.571428l-424-22.285714q-91.428571-5.142857-168 42.571428T271.428571 432.571429L113.714286 190.285714Q186.857143 99.428571 291.428571 50T510.285714 0zM83.428571 231.428571l192.571429 378.857143q41.142857 81.714286 120.571429 124t167.428571 25.714286l-131.428571 257.714286q-121.142857-18.857143-220-90t-155.714286-180.571429T0 512q0-152.571429 83.428571-280.571429z m906.285715 96.571429q33.142857 85.714286 34 177.428571t-27.714286 174.857143-87.428571 155.428572-140.571429 119.714285q-131.428571 76-284.571429 68l231.428572-356q50.285714-74.857143 47.142857-166T701.142857 342.857143z m-477.714286 11.428571q71.428571 0 122 50.571429T684.571429 512t-50.571429 122T512 684.571429t-122-50.571429T339.428571 512t50.571429-122T512 339.428571z\"  ></path></symbol><symbol id=\"icon-circle-o\" viewBox=\"0 0 1024 1024\"><path d=\"M512 201.142857q-84.571429 0-156 41.714286T242.857143 356t-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286 156-41.714286 113.142857-113.142857 41.714286-156-41.714286-156-113.142857-113.142857-156-41.714286z m438.857143 310.857143q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-clipboard\" viewBox=\"0 0 1024 1024\"><path d=\"M438.857143 950.857143h512v-365.714286h-237.714286q-22.857143 0-38.857143-16t-16-38.857143V292.571429H438.857143v658.285714z m146.285714-822.857143v-36.571429q0-7.428571-5.428571-12.857142T566.857143 73.142857H164.571429q-7.428571 0-12.857143 5.428572T146.285714 91.428571v36.571429q0 7.428571 5.428572 12.857143T164.571429 146.285714h402.285714q7.428571 0 12.857143-5.428571t5.428571-12.857143z m146.285714 384h170.857143l-170.857143-170.857143v170.857143z m292.571429 73.142857v384q0 22.857143-16 38.857143t-38.857143 16H420.571429q-22.857143 0-38.857143-16t-16-38.857143v-91.428571H54.857143q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T54.857143 0h621.714286q22.857143 0 38.857142 16t16 38.857143v187.428571q12 7.428571 20.571429 16l233.142857 233.142857q16 16 27.428572 43.428572t11.428571 50.285714z\"  ></path></symbol><symbol id=\"icon-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 512q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-cloud\" viewBox=\"0 0 1097 1024\"><path d=\"M1097.142857 658.285714q0 90.857143-64.285714 155.142857T877.714286 877.714286H256q-105.714286 0-180.857143-75.142857T0 621.714286q0-75.428571 40.571429-138T147.428571 390.285714q-1.142857-16-1.142857-24.571428 0-121.142857 85.714286-206.857143t206.857143-85.714286q90.285714 0 163.714286 50.285714T709.714286 254.857143q40-35.428571 94.857143-35.428572 60.571429 0 103.428571 42.857143t42.857143 103.428572q0 42.857143-23.428572 78.857143 73.714286 17.142857 121.714286 76.857142t48 136.857143z\"  ></path></symbol><symbol id=\"icon-close\" viewBox=\"0 0 1024 1024\"><path d=\"M851.428571 755.428571q0 22.857143-16 38.857143l-77.714285 77.714286q-16 16-38.857143 16t-38.857143-16l-168-168-168 168q-16 16-38.857143 16t-38.857143-16l-77.714285-77.714286q-16-16-16-38.857143t16-38.857142l168-168-168-168q-16-16-16-38.857143t16-38.857143l77.714285-77.714286q16-16 38.857143-16t38.857143 16l168 168 168-168q16-16 38.857143-16t38.857143 16l77.714285 77.714286q16 16 16 38.857143t-16 38.857143L667.428571 548.571429l168 168q16 16 16 38.857142z\"  ></path></symbol><symbol id=\"icon-cloud-upload\" viewBox=\"0 0 1097 1024\"><path d=\"M731.428571 493.714286q0-8-5.142857-13.142857L525.142857 279.428571q-5.142857-5.142857-13.142857-5.142857t-13.142857 5.142857L298.285714 480q-5.714286 6.857143-5.714285 13.714286 0 8 5.142857 13.142857t13.142857 5.142857h128v201.142857q0 7.428571 5.428571 12.857143t12.857143 5.428571h109.714286q7.428571 0 12.857143-5.428571t5.428571-12.857143V512h128q7.428571 0 12.857143-5.428571t5.428571-12.857143z m365.714286 164.571428q0 90.857143-64.285714 155.142857T877.714286 877.714286H256q-105.714286 0-180.857143-75.142857T0 621.714286q0-74.285714 40-137.142857t107.428571-94.285715q-1.142857-17.142857-1.142857-24.571428 0-121.142857 85.714286-206.857143t206.857143-85.714286q89.142857 0 163.142857 49.714286T709.714286 254.857143q40.571429-35.428571 94.857143-35.428572 60.571429 0 103.428571 42.857143t42.857143 103.428572q0 43.428571-23.428572 78.857143 74.285714 17.714286 122 77.428571T1097.142857 658.285714z\"  ></path></symbol><symbol id=\"icon-clone\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 932.571429V310.857143q0-7.428571-5.428572-12.857143T932.571429 292.571429H310.857143q-7.428571 0-12.857143 5.428571T292.571429 310.857143v621.714286q0 7.428571 5.428571 12.857142t12.857143 5.428572h621.714286q7.428571 0 12.857142-5.428572t5.428572-12.857142z m73.142857-621.714286v621.714286q0 37.714286-26.857143 64.571428t-64.571428 26.857143H310.857143q-37.714286 0-64.571429-26.857143t-26.857143-64.571428V310.857143q0-37.714286 26.857143-64.571429t64.571429-26.857143h621.714286q37.714286 0 64.571428 26.857143t26.857143 64.571429z m-219.428571-219.428572v91.428572h-73.142858V91.428571q0-7.428571-5.428571-12.857142T713.142857 73.142857H91.428571q-7.428571 0-12.857142 5.428572T73.142857 91.428571v621.714286q0 7.428571 5.428572 12.857143t12.857142 5.428571h91.428572v73.142858H91.428571q-37.714286 0-64.571428-26.857143T0 713.142857V91.428571Q0 53.714286 26.857143 26.857143T91.428571 0h621.714286q37.714286 0 64.571429 26.857143t26.857143 64.571428z\"  ></path></symbol><symbol id=\"icon-cloud-download\" viewBox=\"0 0 1097 1024\"><path d=\"M731.428571 530.285714q0-8-5.142857-13.142857t-13.142857-5.142857h-128V310.857143q0-7.428571-5.428571-12.857143T566.857143 292.571429H457.142857q-7.428571 0-12.857143 5.428571T438.857143 310.857143v201.142857H310.857143q-7.428571 0-12.857143 5.428571T292.571429 530.285714q0 8 5.142857 13.142857l201.142857 201.142858q5.142857 5.142857 13.142857 5.142857t13.142857-5.142857l200.571429-200.571429q5.714286-6.857143 5.714285-13.714286z m365.714286 128q0 90.857143-64.285714 155.142857T877.714286 877.714286H256q-105.714286 0-180.857143-75.142857T0 621.714286q0-74.285714 40-137.142857t107.428571-94.285715q-1.142857-17.142857-1.142857-24.571428 0-121.142857 85.714286-206.857143t206.857143-85.714286q89.142857 0 163.142857 49.714286T709.714286 254.857143q40.571429-35.428571 94.857143-35.428572 60.571429 0 103.428571 42.857143t42.857143 103.428572q0 43.428571-23.428572 78.857143 74.285714 17.714286 122 77.428571T1097.142857 658.285714z\"  ></path></symbol><symbol id=\"icon-clock-o1\" viewBox=\"0 0 1024 1024\"><path d=\"M585.142857 310.857143v256q0 8-5.142857 13.142857t-13.142857 5.142857H384q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h128V310.857143q0-8 5.142857-13.142857t13.142857-5.142857h36.571429q8 0 13.142857 5.142857t5.142857 13.142857z m237.714286 201.142857q0-84.571429-41.714286-156t-113.142857-113.142857-156-41.714286-156 41.714286-113.142857 113.142857-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286 156-41.714286 113.142857-113.142857 41.714286-156z m128 0q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-cny\" viewBox=\"0 0 1024 1024\"><path d=\"M559.250603 877.714286H460.964889q-7.428571 0-12.857143-5.142857t-5.428572-13.142858v-188.571428H278.107746q-7.428571 0-12.857143-5.142857t-5.428572-13.142857v-58.857143q0-7.428571 5.428572-12.857143t12.857143-5.428572h164.571428v-48.571428H278.107746q-7.428571 0-12.857143-5.142857T259.822031 508.571429V449.142857q0-7.428571 5.428572-12.857143T278.107746 430.857143h122.285714L216.964889 100.571429q-4.571429-9.142857 0-18.285715 5.714286-9.142857 16-9.142857h110.857142q10.857143 0 16.571429 10.285714l122.857143 242.857143q10.857143 21.714286 32 71.428572 5.714286-13.714286 17.428571-38.857143t15.714286-34.857143l109.142857-240q4.571429-10.857143 16.571429-10.857143h109.142857q9.714286 0 15.428571 9.142857 5.142857 8 0.571429 17.714286L620.39346 430.857143h122.857143q7.428571 0 12.857143 5.428571T761.536317 449.142857v59.428572q0 8-5.428571 13.142857t-12.857143 5.142857H577.536317v48.571428h165.714286q7.428571 0 12.857143 5.428572t5.428571 12.857143v58.857143q0 8-5.428571 13.142857t-12.857143 5.142857H577.536317v188.571428q0 7.428571-5.428571 12.857143T559.250603 877.714286z\"  ></path></symbol><symbol id=\"icon-code-fork\" viewBox=\"0 0 1024 1024\"><path d=\"M384 841.142857q0-22.857143-16-38.857143t-38.857143-16-38.857143 16-16 38.857143 16 38.857143 38.857143 16 38.857143-16 16-38.857143z m0-658.285714q0-22.857143-16-38.857143t-38.857143-16-38.857143 16-16 38.857143 16 38.857143 38.857143 16 38.857143-16 16-38.857143z m365.714286 73.142857q0-22.857143-16-38.857143t-38.857143-16-38.857143 16-16 38.857143 16 38.857143 38.857143 16 38.857143-16 16-38.857143z m54.857143 0q0 29.714286-14.857143 55.142857T749.714286 350.857143q-1.142857 164-129.142857 236.571428-38.285714 21.714286-116 46.285715-73.142857 22.857143-96.857143 40.571428T384 731.428571v14.857143q25.142857 14.285714 40 39.714286t14.857143 55.142857q0 45.714286-32 77.714286t-77.714286 32-77.714286-32-32-77.714286q0-29.714286 14.857143-55.142857t40-39.714286V277.714286q-25.142857-14.285714-40-39.714286T219.428571 182.857143q0-45.714286 32-77.714286t77.714286-32 77.714286 32 32 77.714286q0 29.714286-14.857143 55.142857T384 277.714286v284q30.857143-14.857143 88-32.571429 31.428571-9.714286 50-16.857143t40.285714-17.714285 33.714286-22.571429 23.142857-29.142857 16-39.714286T640 350.857143q-25.142857-14.285714-40-39.714286T585.142857 256q0-45.714286 32-77.714286t77.714286-32 77.714286 32 32 77.714286z\"  ></path></symbol><symbol id=\"icon-codiepie\" viewBox=\"0 0 1024 1024\"><path d=\"M905.142857 737.142857l-124.571428-63.428571q-42.285714 68.571429-112.285715 108T517.714286 821.142857q-84 0-154.857143-41.142857t-112-112-41.142857-154.285714q0-62.857143 24.285714-119.714286t65.714286-98.285714 98.285714-65.714286T517.714286 205.714286q74.857143 0 141.428571 34.571428T769.142857 336.571429l122.857143-71.428572q-62.857143-96.571429-163.714286-151.428571T512 58.857143q-92 0-176 36T191.428571 191.428571 94.857143 336t-36 176 36 176 96.571428 144.571429 144.571429 96.571428 176 36q121.714286 0 227.142857-61.142857t166-166.857143z m-316.571428-226.857143l396 201.142857q-66.285714 144.571429-191.142858 228.571429T512 1024q-104 0-198.857143-40.571429t-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0q148.571429 0 268.857143 76.285714T972.571429 285.714286z m293.142857 1.714286h-22.285715v91.428571h-54.857142V402.285714h77.714285q18.285714 0 31.142857 11.428572t16.285715 27.428571 0.571428 32-15.714285 27.428572-32.857143 11.428571z\"  ></path></symbol><symbol id=\"icon-codepen\" viewBox=\"0 0 1024 1024\"><path d=\"M123.428571 668l344.571429 229.714286v-205.142857L277.142857 565.142857z m-35.428571-82.285714l110.285714-73.714286-110.285714-73.714286v147.428572z m468 312l344.571429-229.714286-153.714286-102.857143-190.857143 127.428572v205.142857z m-44-281.714286l155.428571-104-155.428571-104-155.428571 104zM277.142857 458.857143l190.857143-127.428572V126.285714L123.428571 356z m548.571429 53.142857l110.285714 73.714286V438.285714z m-78.857143-53.142857l153.714286-102.857143-344.571429-229.714286v205.142857z m277.142857-102.857143v312q0 23.428571-19.428571 36.571429l-468 312q-12 7.428571-24.571429 7.428571t-24.571429-7.428571L19.428571 704.571429q-19.428571-13.142857-19.428571-36.571429V356q0-23.428571 19.428571-36.571429L487.428571 7.428571q12-7.428571 24.571429-7.428571t24.571429 7.428571l468 312q19.428571 13.142857 19.428571 36.571429z\"  ></path></symbol><symbol id=\"icon-code\" viewBox=\"0 0 1097 1024\"><path d=\"M352.571429 799.428571l-28.571429 28.571429q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286L31.428571 561.714286q-5.714286-5.714286-5.714285-13.142857t5.714285-13.142858l266.285715-266.285714q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l28.571429 28.571429q5.714286 5.714286 5.714285 13.142857t-5.714285 13.142857L128 548.571429l224.571429 224.571428q5.714286 5.714286 5.714285 13.142857t-5.714285 13.142857z m337.714285-609.714285L477.142857 927.428571q-2.285714 7.428571-8.857143 11.142858T454.857143 940l-35.428572-9.714286q-7.428571-2.285714-11.142857-8.857143T406.857143 907.428571l213.142857-737.714285q2.285714-7.428571 8.857143-11.142857t13.428571-1.428572l35.428572 9.714286q7.428571 2.285714 11.142857 8.857143t1.428571 14z m375.428572 372l-266.285715 266.285714q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-28.571428-28.571429q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l224.571428-224.571428-224.571428-224.571429q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l28.571428-28.571429q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l266.285715 266.285714q5.714286 5.714286 5.714285 13.142858t-5.714285 13.142857z\"  ></path></symbol><symbol id=\"icon-cog\" viewBox=\"0 0 1024 1024\"><path d=\"M658.285714 512q0-60.571429-42.857143-103.428571t-103.428571-42.857143-103.428571 42.857143-42.857143 103.428571 42.857143 103.428571 103.428571 42.857143 103.428571-42.857143 42.857143-103.428571z m292.571429-62.285714v126.857143q0 6.857143-4.571429 13.142857t-11.428571 7.428571l-105.714286 16q-10.857143 30.857143-22.285714 52 20 28.571429 61.142857 78.857143 5.714286 6.857143 5.714286 14.285714t-5.142857 13.142857q-15.428571 21.142857-56.571429 61.714286t-53.714286 40.571429q-6.857143 0-14.857143-5.142857l-78.857142-61.714286q-25.142857 13.142857-52 21.714286-9.142857 77.714286-16.571429 106.285714-4 16-20.571429 16H448.571429q-8 0-14-4.857143T428 933.714286l-16-105.142857q-28-9.142857-51.428571-21.142858l-80.571429 61.142858q-5.714286 5.142857-14.285714 5.142857-8 0-14.285715-6.285715-72-65.142857-94.285714-96-4-5.714286-4-13.142857 0-6.857143 4.571429-13.142857 8.571429-12 29.142857-38t30.857143-40.285714q-15.428571-28.571429-23.428572-56.571429l-104.571428-15.428571q-7.428571-1.142857-12-7.142857T73.142857 574.285714V447.428571q0-6.857143 4.571429-13.142857t10.857143-7.428571l106.285714-16q8-26.285714 22.285714-52.571429-22.857143-32.571429-61.142857-78.857143-5.714286-6.857143-5.714286-13.714285 0-5.714286 5.142857-13.142857 14.857143-20.571429 56.285715-61.428572T265.714286 150.285714q7.428571 0 14.857143 5.714286l78.857142 61.142857q25.142857-13.142857 52-21.714286 9.142857-77.714286 16.571429-106.285714 4-16 20.571429-16h126.857142q8 0 14 4.857143T596 90.285714l16 105.142857q28 9.142857 51.428571 21.142858l81.142858-61.142858q5.142857-5.142857 13.714285-5.142857 7.428571 0 14.285715 5.714286 73.714286 68 94.285714 97.142857 4 4.571429 4 12.571429 0 6.857143-4.571429 13.142857-8.571429 12-29.142857 38t-30.857143 40.285714q14.857143 28.571429 23.428572 56l104.571428 16q7.428571 1.142857 12 7.142857t4.571429 13.428572z\"  ></path></symbol><symbol id=\"icon-coffee\" viewBox=\"0 0 1097 1024\"><path d=\"M950.857143 365.714286q0-45.714286-32-77.714286t-77.714286-32h-36.571428v219.428571h36.571428q45.714286 0 77.714286-32t32-77.714285zM0 804.571429h1024q0 60.571429-42.857143 103.428571t-103.428571 42.857143H146.285714q-60.571429 0-103.428571-42.857143T0 804.571429z m1060.571429-438.857143q0 90.857143-64.285715 155.142857T841.142857 585.142857h-36.571428v18.285714q0 52.571429-37.714286 90.285715t-90.285714 37.714285H274.285714q-52.571429 0-90.285714-37.714285t-37.714286-90.285715V182.857143q0-14.857143 10.857143-25.714286t25.714286-10.857143h658.285714q90.857143 0 155.142857 64.285715T1060.571429 365.714286z\"  ></path></symbol><symbol id=\"icon-columns\" viewBox=\"0 0 1024 1024\"><path d=\"M128 877.714286h347.428571V219.428571H109.714286v640q0 7.428571 5.428571 12.857143t12.857143 5.428572z m786.285714-18.285715V219.428571H548.571429v658.285715h347.428571q7.428571 0 12.857143-5.428572t5.428571-12.857143z m73.142857-694.857142v694.857142q0 37.714286-26.857142 64.571429t-64.571429 26.857143H128q-37.714286 0-64.571429-26.857143T36.571429 859.428571V164.571429q0-37.714286 26.857142-64.571429t64.571429-26.857143h768q37.714286 0 64.571429 26.857143t26.857142 64.571429z\"  ></path></symbol><symbol id=\"icon-comment-o\" viewBox=\"0 0 1024 1024\"><path d=\"M512 219.428571q-116.571429 0-218 39.714286T132.857143 366.285714 73.142857 512q0 64 40.857143 122T229.142857 734.285714l49.714286 28.571429-15.428572 54.857143q-13.714286 52-40 98.285714 86.857143-36 157.142858-97.714286l24.571428-21.714285 32.571429 3.428571q39.428571 4.571429 74.285714 4.571429 116.571429 0 218-39.714286t161.142857-107.142857T950.857143 512t-59.714286-145.714286-161.142857-107.142857T512 219.428571z m512 292.571429q0 99.428571-68.571429 183.714286t-186.285714 133.142857-257.142857 48.857143q-40 0-82.857143-4.571429-113.142857 100-262.857143 138.285714-28 8-65.142857 12.571429h-2.857143q-8.571429 0-15.428571-6t-9.142857-15.714286v-0.571428q-1.714286-2.285714-0.285715-6.857143t1.142858-5.714286 2.571428-5.428571l3.428572-5.142857 4-4.857143 4.571428-5.142857q4-4.571429 17.714286-19.714286t19.714286-21.714286 17.714285-22.571428 18.571429-29.142858 15.428571-33.714285 14.857143-43.428572q-89.714286-50.857143-141.428571-125.714285T0 512q0-99.428571 68.571429-183.714286t186.285714-133.142857T512 146.285714t257.142857 48.857143 186.285714 133.142857T1024 512z\"  ></path></symbol><symbol id=\"icon-commenting-o\" viewBox=\"0 0 1024 1024\"><path d=\"M365.714286 512q0 30.285714-21.428572 51.714286T292.571429 585.142857t-51.714286-21.428571T219.428571 512t21.428572-51.714286T292.571429 438.857143t51.714285 21.428571T365.714286 512z m219.428571 0q0 30.285714-21.428571 51.714286T512 585.142857t-51.714286-21.428571T438.857143 512t21.428571-51.714286T512 438.857143t51.714286 21.428571T585.142857 512z m219.428572 0q0 30.285714-21.428572 51.714286T731.428571 585.142857t-51.714285-21.428571T658.285714 512t21.428572-51.714286T731.428571 438.857143t51.714286 21.428571T804.571429 512zM512 219.428571q-116.571429 0-218 39.714286T132.857143 366.285714 73.142857 512q0 64 40.857143 122T229.142857 734.285714l49.714286 28.571429-15.428572 54.857143q-13.714286 52-40 98.285714 86.857143-36 157.142858-97.714286l24.571428-21.714285 32.571429 3.428571q39.428571 4.571429 74.285714 4.571429 116.571429 0 218-39.714286t161.142857-107.142857T950.857143 512t-59.714286-145.714286-161.142857-107.142857T512 219.428571z m512 292.571429q0 99.428571-68.571429 183.714286t-186.285714 133.142857-257.142857 48.857143q-40 0-82.857143-4.571429-113.142857 100-262.857143 138.285714-28 8-65.142857 12.571429h-2.857143q-8.571429 0-15.428571-6t-9.142857-15.714286v-0.571428q-1.714286-2.285714-0.285715-6.857143t1.142858-5.714286 2.571428-5.428571l3.428572-5.142857 4-4.857143 4.571428-5.142857q4-4.571429 17.714286-19.714286t19.714286-21.714286 17.714285-22.571428 18.571429-29.142858 15.428571-33.714285 14.857143-43.428572q-89.714286-50.857143-141.428571-125.714285T0 512q0-74.285714 40.571429-142T149.714286 253.142857t163.428571-78T512 146.285714t198.857143 28.857143T874.285714 253.142857t109.142857 116.857143 40.571429 142z\"  ></path></symbol><symbol id=\"icon-commenting\" viewBox=\"0 0 1024 1024\"><path d=\"M365.714286 512q0-30.285714-21.428572-51.714286T292.571429 438.857143t-51.714286 21.428571T219.428571 512t21.428572 51.714286T292.571429 585.142857t51.714285-21.428571T365.714286 512z m219.428571 0q0-30.285714-21.428571-51.714286T512 438.857143t-51.714286 21.428571T438.857143 512t21.428571 51.714286T512 585.142857t51.714286-21.428571T585.142857 512z m219.428572 0q0-30.285714-21.428572-51.714286T731.428571 438.857143t-51.714285 21.428571T658.285714 512t21.428572 51.714286 51.714285 21.428571 51.714286-21.428571T804.571429 512z m219.428571 0q0 99.428571-68.571429 183.714286t-186.285714 133.142857-257.142857 48.857143q-62.857143 0-120.571429-10.285715-98.857143 98.857143-248.571428 130.857143-29.714286 5.714286-49.142857 7.428572-6.857143 0.571429-12.571429-3.428572t-7.428571-10.285714q-2.285714-8.571429 11.428571-21.142857 2.857143-2.857143 13.428572-12.285714T113.142857 945.142857t13.428572-14.571428 13.714285-18 11.714286-21.142858 11.428571-27.428571 8.285715-32.857143T178.857143 789.714286q-83.428571-51.428571-131.142857-123.714286T0 512q0-99.428571 68.571429-183.714286t186.285714-133.142857T512 146.285714t257.142857 48.857143 186.285714 133.142857T1024 512z\"  ></path></symbol><symbol id=\"icon-comment\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 512q0 99.428571-68.571429 183.714286t-186.285714 133.142857-257.142857 48.857143q-40 0-82.857143-4.571429-113.142857 100-262.857143 138.285714-28 8-65.142857 12.571429-9.714286 1.142857-17.428571-5.142857t-10-16.571429v-0.571428q-1.714286-2.285714-0.285715-6.857143t1.142858-5.714286 2.571428-5.428571l3.428572-5.142857 4-4.857143 4.571428-5.142857q4-4.571429 17.714286-19.714286t19.714286-21.714286 17.714285-22.571428 18.571429-29.142858 15.428571-33.714285 14.857143-43.428572q-89.714286-50.857143-141.428571-125.714285T0 512q0-74.285714 40.571429-142T149.714286 253.142857t163.428571-78T512 146.285714q139.428571 0 257.142857 48.857143t186.285714 133.142857T1024 512z\"  ></path></symbol><symbol id=\"icon-cogs\" viewBox=\"0 0 1097 1024\"><path d=\"M512 512q0-60.571429-42.857143-103.428571t-103.428571-42.857143-103.428572 42.857143-42.857143 103.428571 42.857143 103.428571 103.428572 42.857143 103.428571-42.857143 42.857143-103.428571z m438.857143 292.571429q0-29.714286-21.714286-51.428572t-51.428571-21.714286-51.428572 21.714286-21.714285 51.428572q0 30.285714 21.428571 51.714285t51.714286 21.428572 51.714285-21.428572 21.428572-51.714285z m0-585.142858q0-29.714286-21.714286-51.428571t-51.428571-21.714286-51.428572 21.714286-21.714285 51.428571q0 30.285714 21.428571 51.714286T877.714286 292.571429t51.714285-21.428572T950.857143 219.428571z m-219.428572 240.571429v105.714286q0 5.714286-4 11.142857t-9.142857 6l-88.571428 13.714286q-6.285714 20-18.285715 43.428571 19.428571 27.428571 51.428572 65.714286 4 6.285714 4 11.428571 0 6.857143-4 10.857143-13.142857 17.142857-47.142857 51.142857T570.857143 813.142857q-6.285714 0-12-4l-65.714286-51.428571q-21.142857 10.857143-44 17.714285-6.285714 61.714286-13.142857 88.571429-4 13.714286-17.142857 13.714286H312.571429q-6.285714 0-11.428572-4.285715t-5.714286-10l-13.142857-87.428571q-19.428571-5.714286-42.857143-17.714286l-67.428571 50.857143q-4 4-11.428571 4-6.285714 0-12-4.571428-82.285714-76-82.285715-91.428572 0-5.142857 4-10.857143 5.714286-8 23.428572-30.285714t26.857143-34.857143q-13.142857-25.142857-20-46.857143l-86.857143-13.714285q-5.714286-0.571429-9.714286-5.428572T0 564V458.285714q0-5.714286 4-11.142857T13.142857 441.142857l88.571429-13.714286q6.285714-20 18.285714-43.428571-19.428571-27.428571-51.428571-65.714286-4-6.285714-4-11.428571 0-6.857143 4-11.428572 12.571429-17.142857 46.857142-50.857142t45.142858-33.714286q6.285714 0 12 4l65.714285 51.428571q19.428571-10.285714 44-18.285714 6.285714-61.714286 13.142857-88 4-13.714286 17.142858-13.714286h106.285714q6.285714 0 11.428571 4.285715t5.714286 10l13.142857 87.428571q19.428571 5.714286 42.857143 17.714286l67.428571-50.857143q4.571429-4 11.428572-4 6.285714 0 12 4.571428 82.285714 76 82.285714 91.428572 0 4.571429-4 10.857143-6.857143 9.142857-24 30.857143t-25.714286 34.285714q13.142857 27.428571 19.428572 46.857143l86.857143 13.142857q5.714286 1.142857 9.714285 6t4 11.142857z m365.714286 304.571429v80q0 9.142857-85.142857 17.714285-6.857143 15.428571-17.142857 29.714286 29.142857 64.571429 29.142857 78.857143 0 2.285714-2.285714 4-69.714286 40.571429-70.857143 40.571428-4.571429 0-26.285714-26.857142t-29.714286-38.857143q-11.428571 1.142857-17.142857 1.142857t-17.142857-1.142857q-8 12-29.714286 38.857143t-26.285714 26.857142q-1.142857 0-70.857143-40.571428-2.285714-1.714286-2.285715-4 0-14.285714 29.142858-78.857143-10.285714-14.285714-17.142858-29.714286-85.142857-8.571429-85.142857-17.714285v-80q0-9.142857 85.142857-17.714286 7.428571-16.571429 17.142858-29.714286-29.142857-64.571429-29.142858-78.857143 0-2.285714 2.285715-4 2.285714-1.142857 20-11.428571t33.714285-19.428572 17.142858-9.142857q4.571429 0 26.285714 26.571429t29.714286 38.571428q11.428571-1.142857 17.142857-1.142857t17.142857 1.142857q29.142857-40.571429 52.571428-64l3.428572-1.142857q2.285714 0 70.857143 40 2.285714 1.714286 2.285714 4 0 14.285714-29.142857 78.857143 9.714286 13.142857 17.142857 29.714286 85.142857 8.571429 85.142857 17.714286z m0-585.142858v80q0 9.142857-85.142857 17.714286-6.857143 15.428571-17.142857 29.714286 29.142857 64.571429 29.142857 78.857143 0 2.285714-2.285714 4-69.714286 40.571429-70.857143 40.571428-4.571429 0-26.285714-26.857143t-29.714286-38.857142q-11.428571 1.142857-17.142857 1.142857t-17.142857-1.142857q-8 12-29.714286 38.857142t-26.285714 26.857143q-1.142857 0-70.857143-40.571428-2.285714-1.714286-2.285715-4 0-14.285714 29.142858-78.857143-10.285714-14.285714-17.142858-29.714286-85.142857-8.571429-85.142857-17.714286V179.428571q0-9.142857 85.142857-17.714285 7.428571-16.571429 17.142858-29.714286-29.142857-64.571429-29.142858-78.857143 0-2.285714 2.285715-4 2.285714-1.142857 20-11.428571t33.714285-19.428572 17.142858-9.142857q4.571429 0 26.285714 26.571429t29.714286 38.571428q11.428571-1.142857 17.142857-1.142857t17.142857 1.142857q29.142857-40.571429 52.571428-64l3.428572-1.142857q2.285714 0 70.857143 40 2.285714 1.714286 2.285714 4 0 14.285714-29.142857 78.857143 9.714286 13.142857 17.142857 29.714286 85.142857 8.571429 85.142857 17.714285z\"  ></path></symbol><symbol id=\"icon-compass\" viewBox=\"0 0 1024 1024\"><path d=\"M438.857143 621.714286l146.285714-73.142857-146.285714-73.142858v146.285715z m219.428571-337.714286v309.714286l-292.571428 146.285714V430.285714z m164.571429 228q0-84.571429-41.714286-156t-113.142857-113.142857-156-41.714286-156 41.714286-113.142857 113.142857-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286 156-41.714286 113.142857-113.142857 41.714286-156z m128 0q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-compress\" viewBox=\"0 0 1024 1024\"><path d=\"M512 548.571429v256q0 14.857143-10.857143 25.714285t-25.714286 10.857143-25.714285-10.857143l-82.285715-82.285714-189.714285 189.714286q-5.714286 5.714286-13.142857 5.714285t-13.142858-5.714285L86.285714 872.571429q-5.714286-5.714286-5.714285-13.142858t5.714285-13.142857l189.714286-189.714285-82.285714-82.285715q-10.857143-10.857143-10.857143-25.714285t10.857143-25.714286 25.714285-10.857143h256q14.857143 0 25.714286 10.857143t10.857143 25.714286z m431.428571-384q0 7.428571-5.714285 13.142857l-189.714286 189.714285 82.285714 82.285715q10.857143 10.857143 10.857143 25.714285t-10.857143 25.714286-25.714285 10.857143H548.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V219.428571q0-14.857143 10.857143-25.714285t25.714286-10.857143 25.714285 10.857143l82.285715 82.285714 189.714285-189.714286q5.714286-5.714286 13.142857-5.714285t13.142858 5.714285l65.142857 65.142857q5.714286 5.714286 5.714285 13.142858z\"  ></path></symbol><symbol id=\"icon-comments\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 438.857143q0 79.428571-53.714286 146.857143t-146.571429 106.571428T402.285714 731.428571q-49.142857 0-100.571428-9.142857-70.857143 50.285714-158.857143 73.142857-20.571429 5.142857-49.142857 9.142858h-1.714286q-6.285714 0-11.714286-4.571429t-6.571428-12q-0.571429-1.714286-0.571429-3.714286t0.285714-3.714285 1.142858-3.428572l1.428571-2.857143 2-3.142857 2.285714-2.857143 2.571429-2.857143 2.285714-2.571428q2.857143-3.428571 13.142857-14.285714t14.857143-16.857143 12.857143-16.571429 14.285714-22 11.714286-25.142857q-70.857143-41.142857-111.428571-101.142857T0 438.857143q0-79.428571 53.714286-146.857143t146.571428-106.571429T402.285714 146.285714t202 39.142857T750.857143 292t53.714286 146.857143z m219.428571 146.285714q0 68.571429-40.571429 128.285714T872 814.285714q5.714286 13.714286 11.714286 25.142857t14.285714 22 12.857143 16.571429 14.857143 16.857143 13.142857 14.285714q0.571429 0.571429 2.285714 2.571429t2.571429 2.857143 2.285714 2.857142 2 3.142858l1.428571 2.857142 1.142858 3.428572 0.285714 3.714286-0.571429 3.714285q-1.714286 8-7.428571 12.571429t-12.571429 4q-28.571429-4-49.142857-9.142857-88-22.857143-158.857143-73.142857-51.428571 9.142857-100.571428 9.142857-154.857143 0-269.714286-75.428572 33.142857 2.285714 50.285714 2.285715 92 0 176.571429-25.714286t150.857143-73.714286q71.428571-52.571429 109.714285-121.142857t38.285715-145.142857q0-44-13.142857-86.857143 73.714286 40.571429 116.571428 101.714286t42.857143 131.428571z\"  ></path></symbol><symbol id=\"icon-comments-o\" viewBox=\"0 0 1024 1024\"><path d=\"M402.285714 219.428571q-87.428571 0-163.428571 29.714286T118 329.714286 73.142857 438.857143q0 46.857143 30.285714 90.285714t85.142858 75.428572l55.428571 32-20 48q19.428571-11.428571 35.428571-22.285715l25.142858-17.714285 30.285714 5.714285q44.571429 8 87.428571 8 87.428571 0 163.428572-29.714285t120.857143-80.571429 44.857142-109.142857-44.857142-109.142857T565.714286 249.142857t-163.428572-29.714286z m0-73.142857q109.142857 0 202 39.142857T750.857143 292t53.714286 146.857143-53.714286 146.857143-146.571429 106.571428T402.285714 731.428571q-49.142857 0-100.571428-9.142857-70.857143 50.285714-158.857143 73.142857-20.571429 5.142857-49.142857 9.142858h-1.714286q-6.285714 0-11.714286-4.571429t-6.571428-12q-0.571429-1.714286-0.571429-3.714286t0.285714-3.714285 1.142858-3.428572l1.428571-2.857143 2-3.142857 2.285714-2.857143 2.571429-2.857143 2.285714-2.571428q2.857143-3.428571 13.142857-14.285714t14.857143-16.857143 12.857143-16.571429 14.285714-22 11.714286-25.142857q-70.857143-41.142857-111.428571-101.142857T0 438.857143q0-79.428571 53.714286-146.857143t146.571428-106.571429T402.285714 146.285714z m469.714286 668q5.714286 13.714286 11.714286 25.142857t14.285714 22 12.857143 16.571429 14.857143 16.857143 13.142857 14.285714q0.571429 0.571429 2.285714 2.571429t2.571429 2.857143 2.285714 2.857142 2 3.142858l1.428571 2.857142 1.142858 3.428572 0.285714 3.714286-0.571429 3.714285q-1.714286 8-7.428571 12.571429t-12.571429 4q-28.571429-4-49.142857-9.142857-88-22.857143-158.857143-73.142857-51.428571 9.142857-100.571428 9.142857-154.857143 0-269.714286-75.428572 33.142857 2.285714 50.285714 2.285715 92 0 176.571429-25.714286t150.857143-73.714286q71.428571-52.571429 109.714285-121.142857t38.285715-145.142857q0-44-13.142857-86.857143 73.714286 40.571429 116.571428 101.714286t42.857143 131.428571q0 68.571429-40.571429 128.285714T872 814.285714z\"  ></path></symbol><symbol id=\"icon-connectdevelop\" viewBox=\"0 0 1170 1024\"><path d=\"M1170.285714 511.428571q0 12-7.428571 20.857143t-18.857143 11.142857l-117.142857 203.428572q1.714286 5.142857 1.714286 10.285714 0 11.428571-7.142858 20.285714T1002.857143 788.571429l-110.285714 192.571428q1.714286 4.571429 1.714285 9.142857 0 13.142857-9.428571 22.857143t-23.142857 9.714286q-14.285714 0-23.428572-10.285714h-228.571428q-9.714286 11.428571-24.571429 11.428571t-24.571428-11.428571H332.571429q-9.714286 11.428571-24.571429 11.428571-13.142857 0-22.857143-9.428571t-9.714286-23.142858q0-4.571429 2.285715-11.428571l-110.285715-191.428571q-11.428571-2.285714-18.571428-11.142858T141.714286 757.142857q0-5.142857 1.714285-10.285714L25.714286 543.428571q-11.428571-2.857143-18.571429-11.714285T0 511.428571q0-12 7.714286-20.857142T26.857143 479.428571l113.714286-196.571428q0-0.571429-0.285715-1.714286t-0.285714-1.714286q0-20.571429 19.428571-29.142857L278.857143 42.857143q-2.285714-5.714286-2.285714-10.285714 0-13.714286 9.714285-23.142858T309.142857 0q14.857143 0 25.142857 12h226.285715q9.142857-12 24.571428-12t24.571429 12h227.428571q10.285714-12 25.142857-12 13.142857 0 22.857143 9.428571t9.714286 23.142858q0 3.428571-2.285714 10.285714l118.285714 204.571428q13.142857 0.571429 22.285714 10t9.142857 22q0 7.428571-4 15.428572l106.857143 185.142857q10.857143 2.285714 18 11.142857T1170.285714 511.428571z m-562.857143 456.571429h222.285715l-195.428572-202.285714H552.571429l-195.428572 202.285714h205.714286q10.285714-9.142857 22.285714-9.142857t22.285714 9.142857zM64 504q0.571429 2.285714 0.571429 7.428571 0 5.714286-1.142858 8.571429l118.857143 205.714286 8.571429 3.428571 107.428571-113.714286V417.142857L191.428571 306.285714q-7.428571 4.571429-16.571428 5.714286zM563.428571 56H341.714286l108.571428 114.285714 316.571429-114.285714h-160q-9.142857 9.142857-21.714286 9.142857t-21.714286-9.142857z m401.714286 692.571429q0.571429-3.428571 2.857143-6.285715l-36.571429-38.857143-9.714285 45.142858h43.428571z m-60.571428 0l12.571428-60-144-152-169.142857 175.428571 36 36.571429h264.571429z m-50.285715 210.285714l9.142857-16 37.142858-177.142857h-244l190.285714 196q4.571429-2.285714 7.428571-2.857143z m-524 9.142857h2.857143l195.428572-202.285714H315.428571v191.428571l2.285715 3.428572q8 2.857143 12.571428 7.428571z m-14.857143-219.428571h229.714286l36.571429-37.714286-176.571429-183.428572-89.714286 94.857143v126.285715z m-110.285714 0h93.142857v-108l-96 101.142857q2.285714 4.571429 2.857143 6.857143z m-0.571428-471.428572q0 0.571429 0.285714 1.142857t0.285714 1.142857q0 9.142857-4.571428 16.571429l97.714285 101.142857V243.428571z m110.857142-40v177.714286l87.428572 89.714286 169.714286-179.428572-127.428572-134.857143z m2.285715-173.714286l-2.285715 4.571429v150.857143l117.142858-42.285714-109.142858-114.857143q-3.428571 1.142857-5.714285 1.714285z m509.142857-7.428571h-9.142857L462.857143 184l121.714286 128.571429z m-242.285714 281.142857L414.857143 517.142857l177.714286 182.285714 169.142857-175.428571zM393.142857 515.428571L315.428571 434.857143v162.285714z m200 208l-24 25.142858h48.571429z m192-198.857142l136 143.428571 75.428572-356.571429-1.714286-2.857142-0.571429-0.571429z m196.571429-228.571429q-4.571429-7.428571-4.571429-16.571429v-1.142857l-123.428571-214.857143q-2.857143-0.571429-7.428572-2.857142l-249.714285 264.571428 177.142857 186.857143zM298.285714 225.142857V97.714286L205.142857 258.857143z m0 540.571429H205.142857l93.142857 161.714285v-161.714285z m620 0l-27.428571 129.714285 74.285714-129.714285h-46.857143z m69.714286-40l118.285714-206.285715q-1.142857-5.714286-1.142857-8 0-0.571429 1.714286-9.142857l-97.714286-169.142857-73.714286 349.714286 44 46.857143q2.857143-1.714286 8.571429-4z\"  ></path></symbol><symbol id=\"icon-copy\" viewBox=\"0 0 1024 1024\"><path d=\"M969.142857 219.428571q22.857143 0 38.857143 16t16 38.857143v694.857143q0 22.857143-16 38.857143t-38.857143 16H420.571429q-22.857143 0-38.857143-16t-16-38.857143v-164.571428H54.857143q-22.857143 0-38.857143-16t-16-38.857143V365.714286q0-22.857143 11.428571-50.285715t27.428572-43.428571L272 38.857143q16-16 43.428571-27.428572t50.285715-11.428571h237.714285q22.857143 0 38.857143 16t16 38.857143v187.428571q38.857143-22.857143 73.142857-22.857143h237.714286z m-310.857143 121.714286L487.428571 512h170.857143V341.142857zM292.571429 121.714286L121.714286 292.571429h170.857143V121.714286z m112 369.714285l180.571428-180.571428V73.142857H365.714286v237.714286q0 22.857143-16 38.857143t-38.857143 16H73.142857v365.714285h292.571429v-146.285714q0-22.857143 11.428571-50.285714t27.428572-43.428572z m546.285714 459.428572V292.571429h-219.428572v237.714285q0 22.857143-16 38.857143t-38.857142 16H438.857143v365.714286h512z\"  ></path></symbol><symbol id=\"icon-contao\" viewBox=\"0 0 1024 1024\"><path d=\"M78.857143 73.142857h112.571428q-40 36.571429-72 85.142857-20.571429 32-33.714285 65.714286t-17.142857 71.714286-4.857143 68.571428 6 75.428572 12 72 16 78q2.285714 10.857143 3.428571 16 29.142857 136 46.285714 188 32.571429 97.714286 86.857143 157.142857H78.857143q-27.428571 0-46.857143-19.428572t-19.428571-46.857142V139.428571q0-27.428571 19.428571-46.857142t46.857143-19.428572z m690.285714 0h176q27.428571 0 46.857143 19.428572t19.428571 46.857142v745.142858q0 27.428571-19.428571 46.857142t-46.857143 19.428572h-101.714286q121.142857-120 112-322.857143l-268 57.714286q-1.142857 25.714286-6.857142 46.857143t-17.714286 41.142857-34 34-53.428572 20.857143q-70.285714 14.857143-113.714285-22.857143-18.285714-15.428571-30.285715-34.857143t-29.428571-73.714286T365.142857 549.714286q-20-93.142857-26-150.285715T336 320t13.142857-44q11.428571-23.428571 35.714286-41.714286T443.428571 208.571429q25.714286-6.857143 47.714286-3.714286t38.285714 9.714286 30.857143 20 24.571429 27.428571T604.571429 294.285714l267.428571-57.142857q-38.857143-100-102.857143-164z\"  ></path></symbol><symbol id=\"icon-copyright\" viewBox=\"0 0 1024 1024\"><path d=\"M730.285714 613.714286v62.285714q0 28.571429-20.857143 50.857143t-53.714285 34.571428-67.428572 18.571429-67.142857 6.285714q-117.142857 0-195.714286-79.428571T246.857143 509.142857q0-116 77.714286-193.714286t193.714285-77.714285q19.428571 0 43.142857 2.571428t53.142858 10.285715 52.857142 19.428571 39.428572 32.285714 16 46.285715v62.285714q0 9.142857-9.142857 9.142857h-67.428572q-9.142857 0-9.142857-9.142857v-40q0-24.571429-37.428571-38.571429T521.142857 318.285714q-80 0-130.571428 52.285715T340 506.285714q0 86.285714 52.285714 142.571429T525.714286 705.142857q38.857143 0 78.857143-13.714286t40-37.714285v-40q0-4 2.571428-6.571429t6-2.571428h68q3.428571 0 6.285714 2.571428t2.857143 6.571429zM512 146.285714q-74.285714 0-142 29.142857t-116.571429 78-78 116.571429T146.285714 512t29.142857 142 78 116.571429 116.571429 78 142 29.142857 142-29.142857 116.571429-78 78-116.571429 29.142857-142-29.142857-142-78-116.571429-116.571429-78T512 146.285714z m438.857143 365.714286q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-credit-card-alt\" viewBox=\"0 0 1316 1024\"><path d=\"M0 817.650162V487.110735h1252.57046v330.539427q0 35.880925-25.551567 61.432492t-61.432493 25.551567H86.98406q-35.880925 0-61.432492-25.551567T0 817.650162z m347.936239-121.777684v69.587248h208.761743v-69.587248H347.936239z m-208.761743 0v69.587248h139.174495v-69.587248H139.174496zM1165.5864 69.587248q35.880925 0 61.432493 25.551567t25.551567 61.432493v121.777683H0V156.571308q0-35.880925 25.551568-61.432493t61.432492-25.551567h1078.60234z\"  ></path></symbol><symbol id=\"icon-credit-card\" viewBox=\"0 0 1097 1024\"><path d=\"M1005.714286 73.142857q37.714286 0 64.571428 26.857143t26.857143 64.571429v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h914.285715zM91.428571 146.285714q-7.428571 0-12.857142 5.428572T73.142857 164.571429v128h950.857143V164.571429q0-7.428571-5.428571-12.857143T1005.714286 146.285714H91.428571z m914.285715 731.428572q7.428571 0 12.857143-5.428572t5.428571-12.857143V512H73.142857v347.428571q0 7.428571 5.428572 12.857143t12.857142 5.428572h914.285715zM146.285714 804.571429v-73.142858h146.285715v73.142858H146.285714z m219.428572 0v-73.142858h219.428571v73.142858H365.714286z\"  ></path></symbol><symbol id=\"icon-crop\" viewBox=\"0 0 1024 1024\"><path d=\"M354.857143 731.428571h340V391.428571z m-25.714286-25.714285l340-340H329.142857v340z m658.285714 44v109.714285q0 8-5.142857 13.142858t-13.142857 5.142857h-128v128q0 8-5.142857 13.142857t-13.142857 5.142857h-109.714286q-8 0-13.142857-5.142857t-5.142857-13.142857v-128H201.142857q-8 0-13.142857-5.142857t-5.142857-13.142858V365.714286H54.857143q-8 0-13.142857-5.142857t-5.142857-13.142858V237.714286q0-8 5.142857-13.142857t13.142857-5.142858h128V91.428571q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857v128h486.285714l140.571429-141.142857q5.714286-5.142857 13.142857-5.142857t13.142857 5.142857q5.142857 5.714286 5.142857 13.142857t-5.142857 13.142858l-141.142857 140.571428v486.285714h128q8 0 13.142857 5.142858t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-creative-commons\" viewBox=\"0 0 1024 1024\"><path d=\"M345.714286 704.571429q87.428571 0 146.857143-59.428572 8-10.285714 1.714285-20.571428l-25.714285-46.857143q-3.428571-7.428571-13.714286-9.714286-9.142857-1.142857-15.428572 6.285714l-2.285714 1.714286q-2.285714 2.285714-6.571428 5.714286t-10 7.714285-13.428572 8.285715-16.285714 7.428571-19.142857 5.428572-21.428572 2q-43.428571 0-71.428571-28.571429t-28-72.571429q0-43.428571 27.428571-71.714285T348 411.428571q21.142857 0 40.857143 8t28.857143 16l9.142857 8q6.285714 6.285714 14.857143 5.714286 9.142857-1.142857 13.714285-8l30.285715-44.571428q7.428571-11.428571-1.142857-22.285715-1.714286-2.285714-6.285715-6.857143t-17.142857-13.428571-27.714286-16T394.857143 325.142857t-49.142857-5.714286q-84.571429 0-140.571429 55.142858T149.142857 512q0 83.428571 55.428572 138t141.142857 54.571429z m360 0q87.428571 0 146.857143-59.428572 8-10.285714 2.285714-20.571428l-25.714286-46.857143q-4.571429-8-14.285714-9.714286-9.142857-1.142857-15.428572 6.285714l-2.285714 1.714286q-2.285714 2.285714-6.571428 5.714286t-10 7.714285-13.428572 8.285715-16.285714 7.428571-19.142857 5.428572-21.428572 2q-43.428571 0-71.428571-28.571429t-28-72.571429q0-43.428571 27.428571-71.714285t69.714286-28.285715q21.142857 0 40.857143 8t28.857143 16l9.142857 8q6.285714 6.285714 14.857143 5.714286 9.142857-1.142857 13.714285-8l30.285715-44.571428q7.428571-11.428571-1.142857-22.285715-1.714286-2.285714-6.285715-6.857143t-17.142857-13.428571-27.714286-16T754.857143 325.142857t-49.142857-5.714286q-84 0-140.285715 55.142858T509.142857 512q0 83.428571 55.428572 138t141.142857 54.571429zM512 91.428571q-85.714286 0-163.428571 33.428572t-134 89.714286-89.714286 134T91.428571 512t33.428572 163.428571 89.714286 134 134 89.714286 163.428571 33.428572 163.428571-33.428572 134-89.714286 89.714286-134 33.428572-163.428571-33.428572-163.428571-89.714286-134-134-89.714286T512 91.428571z m0-91.428571q104 0 198.857143 40.571429t163.428571 109.142857 109.142857 163.428571 40.571429 198.857143-40.571429 198.857143-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0z\"  ></path></symbol><symbol id=\"icon-crosshairs\" viewBox=\"0 0 1024 1024\"><path d=\"M757.142857 585.142857h-62.285714q-14.857143 0-25.714286-10.857143t-10.857143-25.714285V475.428571q0-14.857143 10.857143-25.714285t25.714286-10.857143h62.285714q-18.285714-61.714286-64.285714-107.714286T585.142857 266.857143v62.285714q0 14.857143-10.857143 25.714286t-25.714285 10.857143H475.428571q-14.857143 0-25.714285-10.857143t-10.857143-25.714286V266.857143q-61.714286 18.285714-107.714286 64.285714T266.857143 438.857143h62.285714q14.857143 0 25.714286 10.857143t10.857143 25.714285v73.142858q0 14.857143-10.857143 25.714285t-25.714286 10.857143H266.857143q18.285714 61.714286 64.285714 107.714286T438.857143 757.142857v-62.285714q0-14.857143 10.857143-25.714286t25.714285-10.857143h73.142858q14.857143 0 25.714285 10.857143t10.857143 25.714286v62.285714q61.714286-18.285714 107.714286-64.285714T757.142857 585.142857z m193.714286-109.714286v73.142858q0 14.857143-10.857143 25.714285t-25.714286 10.857143h-81.714285q-21.142857 92-88.285715 159.142857T585.142857 832.571429v81.714285q0 14.857143-10.857143 25.714286t-25.714285 10.857143H475.428571q-14.857143 0-25.714285-10.857143t-10.857143-25.714286v-81.714285q-92-21.142857-159.142857-88.285715T191.428571 585.142857H109.714286q-14.857143 0-25.714286-10.857143T73.142857 548.571429V475.428571q0-14.857143 10.857143-25.714285t25.714286-10.857143h81.714285q21.142857-92 88.285715-159.142857T438.857143 191.428571V109.714286q0-14.857143 10.857143-25.714286t25.714285-10.857143h73.142858q14.857143 0 25.714285 10.857143t10.857143 25.714286v81.714285q92 21.142857 159.142857 88.285715T832.571429 438.857143h81.714285q14.857143 0 25.714286 10.857143t10.857143 25.714285z\"  ></path></symbol><symbol id=\"icon-css3\" viewBox=\"0 0 1024 1024\"><path d=\"M157.142857 73.142857h860l-152 761.714286-459.428571 152.571428-398.857143-152.571428 40.571428-203.428572h169.714286l-16.571428 84 241.142857 92 277.714285-92 38.857143-193.714285H68l33.142857-169.714286h690.857143l21.714286-109.142857H123.428571z\"  ></path></symbol><symbol id=\"icon-cube\" viewBox=\"0 0 1024 1024\"><path d=\"M512 930.857143l365.714286-199.428572V368L512 501.142857v429.714286z m-36.571429-494.285714l398.857143-145.142858-398.857143-145.142857-398.857142 145.142857z m475.428572-144v438.857142q0 20-10.285714 37.142858t-28 26.857142l-402.285715 219.428572q-16 9.142857-34.857143 9.142857t-34.857142-9.142857L38.285714 795.428571q-17.714286-9.714286-28-26.857142t-10.285714-37.142858V292.571429q0-22.857143 13.142857-41.714286t34.857143-26.857143l402.285714-146.285714q12.571429-4.571429 25.142857-4.571429t25.142858 4.571429l402.285714 146.285714q21.714286 8 34.857143 26.857143t13.142857 41.714286z\"  ></path></symbol><symbol id=\"icon-cutlery\" viewBox=\"0 0 1024 1024\"><path d=\"M441.536754 36.571429v365.714285q0 34.857143-20.285714 63.428572T368.393897 505.714286v445.142857q0 29.714286-21.714286 51.428571t-51.428571 21.714286H222.108183q-29.714286 0-51.428572-21.714286t-21.714285-51.428571V505.714286q-32.571429-11.428571-52.857143-40T75.822469 402.285714V36.571429q0-14.857143 10.857142-25.714286T112.393897 0t25.714286 10.857143 10.857143 25.714286v237.714285q0 14.857143 10.857143 25.714286t25.714285 10.857143 25.714286-10.857143 10.857143-25.714286V36.571429q0-14.857143 10.857143-25.714286t25.714285-10.857143 25.714286 10.857143 10.857143 25.714286v237.714285q0 14.857143 10.857143 25.714286t25.714286 10.857143 25.714285-10.857143 10.857143-25.714286V36.571429q0-14.857143 10.857143-25.714286t25.714286-10.857143 25.714285 10.857143 10.857143 25.714286z m438.857143 0v914.285714q0 29.714286-21.714286 51.428571t-51.428571 21.714286h-73.142857q-29.714286 0-51.428572-21.714286t-21.714285-51.428571v-292.571429H532.965326q-7.428571 0-12.857143-5.428571T514.679611 640V182.857143q0-75.428571 53.714286-129.142857t129.142857-53.714286h146.285715q14.857143 0 25.714285 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-cut\" viewBox=\"0 0 1024 1024\"><path d=\"M548.571429 512q14.857143 0 25.714285 10.857143t10.857143 25.714286-10.857143 25.714285-25.714285 10.857143-25.714286-10.857143-10.857143-25.714285 10.857143-25.714286 25.714286-10.857143z m171.428571 36.571429l289.714286 227.428571q16 11.428571 14.285714 32-2.857143 20-20 29.142857l-73.142857 36.571429q-7.428571 4-16.571429 4-9.714286 0-17.714285-4.571429l-394.285715-221.142857-62.857143 37.714286q-4.571429 2.285714-6.857142 2.857143 8 28 5.714285 55.428571-4 44-32 84.285714T330.857143 902.857143q-75.428571 48-158.285714 48-77.714286 0-126.857143-44.571429-51.428571-48-45.142857-118.285714 4-43.428571 32-84t74.857142-70.857143q75.428571-48 158.857143-48 47.428571 0 86.285715 17.714286 5.142857-7.428571 12.571428-12.571429l69.714286-41.714285-69.714286-41.714286q-7.428571-5.142857-12.571428-12.571429-38.857143 17.714286-86.285715 17.714286-83.428571 0-158.857143-48-46.857143-30.285714-74.857142-70.857143T0.571429 309.142857q-2.857143-33.714286 8.857142-64.571428T45.714286 191.428571q48.571429-45.142857 126.857143-45.142857 82.857143 0 158.285714 48 47.428571 29.714286 75.428571 70.285715t32 84.571428q2.285714 27.428571-5.714285 55.428572 2.285714 0.571429 6.857142 2.857142l62.857143 37.714286 394.285715-221.142857q8-4.571429 17.714285-4.571429 9.142857 0 16.571429 4l73.142857 36.571429q17.142857 9.142857 20 29.142857 1.714286 20.571429-14.285714 32zM330.857143 400q26.285714-24 12-61.714286T282.285714 271.428571q-52.571429-33.714286-109.714285-33.714285-42.285714 0-64.571429 20.571428-26.285714 24-12 61.714286t60.571429 66.857143q52.571429 33.714286 109.714285 33.714286 42.285714 0 64.571429-20.571429z m-48.571429 425.714286q46.285714-29.142857 60.571429-66.857143t-12-61.714286q-22.285714-20.571429-64.571429-20.571428-57.142857 0-109.714285 33.714285-46.285714 29.142857-60.571429 66.857143t12 61.714286q22.285714 20.571429 64.571429 20.571428 57.142857 0 109.714285-33.714285z m101.714286-350.285715l54.857143 33.142858v-6.285715q0-20.571429 18.857143-32l8-4.571428-45.142857-26.857143-14.857143 14.857143q-1.714286 1.714286-5.714286 6.285714t-6.857143 6.857143q-1.142857 1.142857-2.285714 2t-1.714286 1.428571z m128 128l54.857143 18.285715 420.571428-329.142857-73.142857-36.571429-438.857143 246.285714v64.571429l-91.428571 54.857143 5.142857 4.571428q1.142857 1.142857 4 3.428572 2.285714 2.285714 6.285714 6.857143t6.285715 6.857142l14.857143 14.857143z m402.285714 237.714286l73.142857-36.571428-297.142857-233.142858-101.142857 78.857143q-1.142857 1.714286-7.428571 4z\"  ></path></symbol><symbol id=\"icon-dashboard\" viewBox=\"0 0 1024 1024\"><path d=\"M219.428571 658.285714q0-30.285714-21.428571-51.714285T146.285714 585.142857t-51.714285 21.428572T73.142857 658.285714t21.428572 51.714286T146.285714 731.428571t51.714286-21.428571T219.428571 658.285714z m109.714286-256q0-30.285714-21.428571-51.714285T256 329.142857t-51.714286 21.428572T182.857143 402.285714t21.428571 51.714286T256 475.428571t51.714286-21.428571T329.142857 402.285714z m244.571429 274.857143l57.714285-218.285714q3.428571-14.857143-4.285714-27.714286T605.142857 414.285714t-27.428571 3.714286-17.142857 22.571429l-57.714286 218.285714q-34.285714 2.857143-61.142857 24.857143t-36 56.285714q-11.428571 44 11.428571 83.428571t66.857143 50.857143 83.428571-11.428571 50.857143-66.857143q9.142857-34.285714-3.428571-66.857143t-41.142857-52z m377.142857-18.857143q0-30.285714-21.428572-51.714285T877.714286 585.142857t-51.714286 21.428572-21.428571 51.714285 21.428571 51.714286 51.714286 21.428571 51.714285-21.428571 21.428572-51.714286z m-365.714286-365.714285q0-30.285714-21.428571-51.714286T512 219.428571t-51.714286 21.428572T438.857143 292.571429t21.428571 51.714285T512 365.714286t51.714286-21.428572T585.142857 292.571429z m256 109.714285q0-30.285714-21.428571-51.714285T768 329.142857t-51.714286 21.428572T694.857143 402.285714t21.428571 51.714286T768 475.428571t51.714286-21.428571T841.142857 402.285714z m182.857143 256q0 149.142857-80.571429 276-10.857143 16.571429-30.857142 16.571429H111.428571q-20 0-30.857142-16.571429Q0 808 0 658.285714q0-104 40.571429-198.857143t109.142857-163.428571 163.428571-109.142857 198.857143-40.571429 198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-dashcube\" viewBox=\"0 0 1024 1024\"><path d=\"M73.142857 388.571429q0-74.857143 52.285714-129.428572T252.571429 204.571429h424L877.714286 0v840q0 75.428571-52.285715 129.714286t-127.142857 54.285714H252.571429q-74.857143 0-127.142858-54.285714T73.142857 840V388.571429z m704 430.857142l-100.571428-102.857142V473.714286q0-26.285714-18.285715-45.142857t-44.571428-18.857143H337.142857q-26.285714 0-44.571428 18.857143t-18.285715 45.142857v281.142857q0 26.285714 18.571429 45.428571T337.142857 819.428571h440z\"  ></path></symbol><symbol id=\"icon-cubes\" viewBox=\"0 0 1316 1024\"><path d=\"M365.561552 932.181956l219.336931-109.668465v-179.353636l-219.336931 93.675147v195.346954z m-36.556156-259.320225l230.76073-98.815857-230.76073-98.815857-230.760729 98.815857z m621.454638 259.320225l219.336931-109.668465v-179.353636l-219.336931 93.675147v195.346954z m-36.556155-259.320225l230.760729-98.815857-230.760729-98.815857-230.76073 98.815857z m-255.893086-167.358648l219.336931-94.246337V259.320226l-219.336931 93.675147v152.50771z m-36.556155-216.480981l251.894756-107.954896-251.894756-107.954896-251.894757 107.954896z m621.454637 295.876381v237.615008q0 20.562837-10.852608 38.269725t-29.701876 26.845926l-255.893086 127.946543q-14.279748 7.996659-32.557826 7.996659t-32.557826-7.996659l-255.893086-127.946543q-2.28476-1.14238-3.998329-2.284759-1.14238 1.14238-3.99833 2.284759l-255.893086 127.946543q-14.279748 7.996659-32.557826 7.996659t-32.557825-7.996659L40.554485 887.629142q-18.849268-9.139039-29.701876-26.845926t-10.852609-38.269725v-237.615008q0-21.705217 12.280583-39.983295T44.552814 517.498071l247.896427-106.241325V182.780776q0-21.705217 12.280584-39.983295t32.27223-27.417116l255.893086-109.668466q13.137368-5.711899 28.559497-5.711899t28.559496 5.711899l255.893086 109.668466q19.991647 9.139039 32.272231 27.417116t12.280583 39.983295v228.47597l247.896427 106.241325q20.562837 9.139039 32.557826 27.417117t11.994988 39.983295z\"  ></path></symbol><symbol id=\"icon-database\" viewBox=\"0 0 1024 1024\"><path d=\"M510.084723 438.857143q135.428571 0 253.142857-24.571429t185.714286-72.571428v97.142857q0 39.428571-58.857143 73.142857t-160 53.428571-220 19.714286-220-19.714286T130.084723 512 71.22758 438.857143V341.714286q68 48 185.714286 72.571428t253.142857 24.571429z m0 438.857143q135.428571 0 253.142857-24.571429t185.714286-72.571428v97.142857q0 39.428571-58.857143 73.142857t-160 53.428571-220 19.714286-220-19.714286-160-53.428571T71.22758 877.714286v-97.142857q68 48 185.714286 72.571428t253.142857 24.571429z m0-219.428572q135.428571 0 253.142857-24.571428t185.714286-72.571429v97.142857q0 39.428571-58.857143 73.142857t-160 53.428572-220 19.714286-220-19.714286-160-53.428572T71.22758 658.285714V561.142857q68 48 185.714286 72.571429t253.142857 24.571428zM510.084723 0q118.857143 0 220 19.714286t160 53.428571 58.857143 73.142857v73.142857q0 39.428571-58.857143 73.142858t-160 53.428571T510.084723 365.714286t-220-19.714286T130.084723 292.571429 71.22758 219.428571V146.285714q0-39.428571 58.857143-73.142857t160-53.428571T510.084723 0z\"  ></path></symbol><symbol id=\"icon-deaf\" viewBox=\"0 0 1024 1024\"><path d=\"M603.428571 475.428571q0 14.857143 10.857143 25.714286t25.714286 10.857143 25.714286-10.857143 10.857143-25.714286q0-83.428571-58.857143-142.285714T475.428571 274.285714 333.142857 333.142857 274.285714 475.428571q0 14.857143 10.857143 25.714286t25.714286 10.857143 25.714286-10.857143 10.857142-25.714286q0-53.142857 37.714286-90.571428T475.428571 347.428571t90.285715 37.428572 37.714285 90.571428zM477.142857 146.285714q-66.857143 0-127.714286 26t-105.142857 70.285715-70.285714 105.142857T148 475.428571q0 14.857143 10.857143 25.714286t25.714286 10.857143 25.714285-10.857143 10.857143-25.714286q0-105.714286 75.142857-180.857142T477.142857 219.428571t180.857143 75.142858T733.142857 475.428571q0 31.428571-10.285714 59.142858t-21.428572 42.571428-34 41.142857q-19.428571 22.285714-29.714285 36t-24.857143 38-21.142857 52T585.142857 804.571429q0 60.571429-42.857143 103.428571t-103.428571 42.857143q-14.857143 0-25.714286 10.857143t-10.857143 25.714285 10.857143 25.714286 25.714286 10.857143q90.857143 0 155.142857-64.285714T658.285714 804.571429q0-23.428571 4.285715-42.285715t15.142857-36.571428 19.142857-28.571429 26-30.857143q20-23.428571 30.285714-36.857143t25.142857-38.571428 21.428572-53.428572T806.285714 475.428571q0-66.857143-26-127.714285t-70.285714-105.142857-105.142857-70.285715T477.142857 146.285714zM337.714286 557.142857l129.142857 129.142857-330.857143 330.857143q-6.857143 6.857143-16.571429 6.857143t-16.571428-6.857143L6.857143 921.142857q-6.857143-6.857143-6.857143-16.571428t6.857143-16.571429zM921.142857 6.857143l96 96q6.857143 6.857143 6.857143 16.571428t-6.857143 17.142858l-133.142857 133.142857-14.857143 14.285714-40.571428 40.571429q-37.714286-87.428571-111.428572-147.428572l52-52 118.285714-118.285714q7.428571-6.857143 17.142858-6.857143t16.571428 6.857143z\"  ></path></symbol><symbol id=\"icon-delicious\" viewBox=\"0 0 1024 1024\"><path d=\"M914.285714 786.285714V512H512V109.714286H237.714286q-53.142857 0-90.571429 37.428571T109.714286 237.714286v274.285714h402.285714v402.285714h274.285714q53.142857 0 90.571429-37.428571T914.285714 786.285714z m36.571429-548.571428v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-deviantart\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 173.142857L631.428571 505.714286l13.714286 17.714285h159.428572v237.142858H514.857143l-25.142857 17.142857-81.142857 156-17.142858 17.142857H219.428571v-173.142857l173.142858-333.142857-13.714286-17.142858H219.428571V190.285714h289.714286l25.142857-17.142857L615.428571 17.142857l17.142858-17.142857h172v173.142857z\"  ></path></symbol><symbol id=\"icon-diamond\" viewBox=\"0 0 1170 1024\"><path d=\"M121.143131 438.857143l356 380-171.428571-380H121.143131z m464 441.142857l199.428572-441.142857H385.71456zM307.428846 365.714286l116.571428-219.428572H274.285989L109.71456 365.714286h197.714286z m385.714285 453.142857l356-380h-184.571428zM390.285989 365.714286h389.714285l-116.571428-219.428572H506.857417z m472.571428 0h197.714286l-164.571429-219.428572h-149.714285z m80.571429-277.714286l219.428571 292.571429q8 10.285714 7.428572 23.714285t-9.714286 23.142857l-548.571429 585.142858q-10.285714 11.428571-26.857143 11.428571t-26.857142-11.428571L9.71456 427.428571Q0.571703 417.714286 0.000274 404.285714T7.428846 380.571429l219.428571-292.571429q10.285714-14.857143 29.142857-14.857143h658.285715q18.857143 0 29.142857 14.857143z\"  ></path></symbol><symbol id=\"icon-dedent\" viewBox=\"0 0 1024 1024\"><path d=\"M219.428571 310.857143v329.142857q0 7.428571-5.428571 12.857143T201.142857 658.285714q-8 0-13.142857-5.142857L23.428571 488.571429q-5.142857-5.142857-5.142857-13.142858t5.142857-13.142857l164.571429-164.571428q5.142857-5.142857 13.142857-5.142857 7.428571 0 12.857143 5.428571T219.428571 310.857143z m804.571429 438.857143v109.714285q0 7.428571-5.428571 12.857143t-12.857143 5.428572H18.285714q-7.428571 0-12.857143-5.428572T0 859.428571v-109.714285q0-7.428571 5.428571-12.857143T18.285714 731.428571h987.428572q7.428571 0 12.857143 5.428572t5.428571 12.857143z m0-219.428572v109.714286q0 7.428571-5.428571 12.857143t-12.857143 5.428571H384q-7.428571 0-12.857143-5.428571T365.714286 640V530.285714q0-7.428571 5.428571-12.857143T384 512h621.714286q7.428571 0 12.857143 5.428571t5.428571 12.857143z m0-219.428571v109.714286q0 7.428571-5.428571 12.857142T1005.714286 438.857143H384q-7.428571 0-12.857143-5.428572T365.714286 420.571429V310.857143q0-7.428571 5.428571-12.857143T384 292.571429h621.714286q7.428571 0 12.857143 5.428571t5.428571 12.857143z m0-219.428572v109.714286q0 7.428571-5.428571 12.857143T1005.714286 219.428571H18.285714q-7.428571 0-12.857143-5.428571T0 201.142857V91.428571q0-7.428571 5.428571-12.857142T18.285714 73.142857h987.428572q7.428571 0 12.857143 5.428572t5.428571 12.857142z\"  ></path></symbol><symbol id=\"icon-desktop\" viewBox=\"0 0 1097 1024\"><path d=\"M1024 566.857143V91.428571q0-7.428571-5.428571-12.857142T1005.714286 73.142857H91.428571q-7.428571 0-12.857142 5.428572T73.142857 91.428571v475.428572q0 7.428571 5.428572 12.857143t12.857142 5.428571h914.285715q7.428571 0 12.857143-5.428571t5.428571-12.857143z m73.142857-475.428572v621.714286q0 37.714286-26.857143 64.571429t-64.571428 26.857143h-310.857143q0 21.142857 9.142857 44.285714t18.285714 40.571428 9.142857 24.857143q0 14.857143-10.857142 25.714286t-25.714286 10.857143H402.285714q-14.857143 0-25.714285-10.857143t-10.857143-25.714286q0-8 9.142857-25.142857t18.285714-40 9.142857-44.571428H91.428571q-37.714286 0-64.571428-26.857143T0 713.142857V91.428571Q0 53.714286 26.857143 26.857143T91.428571 0h914.285715q37.714286 0 64.571428 26.857143t26.857143 64.571428z\"  ></path></symbol><symbol id=\"icon-deafness\" viewBox=\"0 0 1024 1024\"><path d=\"M603.428571 475.428571q0 14.857143 10.857143 25.714286t25.714286 10.857143 25.714286-10.857143 10.857143-25.714286q0-83.428571-58.857143-142.285714T475.428571 274.285714 333.142857 333.142857 274.285714 475.428571q0 14.857143 10.857143 25.714286t25.714286 10.857143 25.714286-10.857143 10.857142-25.714286q0-53.142857 37.714286-90.571428T475.428571 347.428571t90.285715 37.428572 37.714285 90.571428zM477.142857 146.285714q-66.857143 0-127.714286 26t-105.142857 70.285715-70.285714 105.142857T148 475.428571q0 14.857143 10.857143 25.714286t25.714286 10.857143 25.714285-10.857143 10.857143-25.714286q0-105.714286 75.142857-180.857142T477.142857 219.428571t180.857143 75.142858T733.142857 475.428571q0 31.428571-10.285714 59.142858t-21.428572 42.571428-34 41.142857q-19.428571 22.285714-29.714285 36t-24.857143 38-21.142857 52T585.142857 804.571429q0 60.571429-42.857143 103.428571t-103.428571 42.857143q-14.857143 0-25.714286 10.857143t-10.857143 25.714285 10.857143 25.714286 25.714286 10.857143q90.857143 0 155.142857-64.285714T658.285714 804.571429q0-23.428571 4.285715-42.285715t15.142857-36.571428 19.142857-28.571429 26-30.857143q20-23.428571 30.285714-36.857143t25.142857-38.571428 21.428572-53.428572T806.285714 475.428571q0-66.857143-26-127.714285t-70.285714-105.142857-105.142857-70.285715T477.142857 146.285714zM337.714286 557.142857l129.142857 129.142857-330.857143 330.857143q-6.857143 6.857143-16.571429 6.857143t-16.571428-6.857143L6.857143 921.142857q-6.857143-6.857143-6.857143-16.571428t6.857143-16.571429zM921.142857 6.857143l96 96q6.857143 6.857143 6.857143 16.571428t-6.857143 17.142858l-133.142857 133.142857-14.857143 14.285714-40.571428 40.571429q-37.714286-87.428571-111.428572-147.428572l52-52 118.285714-118.285714q7.428571-6.857143 17.142858-6.857143t16.571428 6.857143z\"  ></path></symbol><symbol id=\"icon-drivers-license-o\" viewBox=\"0 0 1170 1024\"><path d=\"M512 692.571429q0 31.428571-18 53.428571T450.857143 768H207.428571q-25.142857 0-43.142857-22T146.285714 692.571429q0-30.857143 4.285715-57.428572t14-51.428571 29.142857-39.142857 46.285714-14.285715q36.571429 36.571429 89.142857 36.571429t89.142857-36.571429q26.857143 0 46.285715 14.285715t29.142857 39.142857 14 51.428571T512 692.571429zM438.857143 438.857143q0 45.714286-32 77.714286t-77.714286 32-77.714286-32-32-77.714286 32-77.714286 77.714286-32 77.714286 32 32 77.714286z m585.142857 237.714286v36.571428q0 8-5.142857 13.142857t-13.142857 5.142857h-402.285715q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571428q0-8 5.142857-13.142858t13.142857-5.142857h402.285715q8 0 13.142857 5.142857t5.142857 13.142858z m-219.428571-146.285715v36.571429q0 8-5.142858 13.142857t-13.142857 5.142857h-182.857143q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h182.857143q8 0 13.142857 5.142857t5.142858 13.142857z m219.428571 0v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-109.714286q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857z m0-146.285714v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-402.285715q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h402.285715q8 0 13.142857 5.142857t5.142857 13.142857z m73.142857 475.428571V219.428571H73.142857v640q0 7.428571 5.428572 12.857143t12.857142 5.428572h987.428572q7.428571 0 12.857143-5.428572t5.428571-12.857143z m73.142857-694.857142v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h987.428572q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-digg\" viewBox=\"0 0 1170 1024\"><path d=\"M187.428571 161.142857h116.571429v561.714286H0V324.571429h187.428571V161.142857z m0 468V418.285714H117.142857v210.857143h70.285714z m163.428572-304.571428v398.285714h117.142857V324.571429H350.857143z m0-163.428572v116.571429h117.142857V161.142857H350.857143z m164 163.428572h304.571428v538.285714H514.857143v-93.142857h187.428571v-46.857143H514.857143V324.571429z m187.428571 304.571428V418.285714h-70.285714v210.857143h70.285714z m164-304.571428h304v538.285714h-304v-93.142857h186.857143v-46.857143h-186.857143V324.571429z m186.857143 304.571428V418.285714h-70.285714v210.857143h70.285714z\"  ></path></symbol><symbol id=\"icon-dribbble\" viewBox=\"0 0 1024 1024\"><path d=\"M658.285714 857.142857q-24-137.714286-80-284.571428h-1.142857l-1.142857 0.571428q-9.142857 3.428571-24.571429 9.428572t-57.714285 28-78.285715 46.857142T340.571429 722.857143t-58.857143 84.571428l-8.571429-6.285714q105.142857 85.714286 238.857143 85.714286 75.428571 0 146.285714-29.714286zM552.571429 510.285714q-12-28-30.285715-63.428571-177.714286 53.142857-384.571428 53.142857-0.571429 4-0.571429 12 0 70.857143 25.142857 135.142857T233.142857 762.285714q28.571429-50.857143 70.571429-95.142857T385.142857 596t74.571429-46.285714 56.857143-27.428572l21.142857-7.428571q2.285714-0.571429 7.428571-2t7.428572-2.571429zM491.428571 389.142857Q422.857143 267.428571 352 173.142857q-78.857143 37.142857-133.714286 106.285714T145.142857 434.857143q172.571429 0 346.285714-45.714286z m390.857143 182.285714q-120-34.285714-233.714285-16.571428 49.714286 136.571429 73.142857 268 63.428571-42.857143 105.714285-108.285714t54.857143-143.142858zM422.285714 148q-0.571429 0-1.142857 0.571429 0.571429-0.571429 1.142857-0.571429z m337.142857 82.857143q-105.714286-93.714286-247.428571-93.714286-43.428571 0-88.571429 10.857143 74.857143 97.142857 140.571429 218.285714 39.428571-14.857143 74.285714-34.571428t55.142857-35.142857 37.428572-32.571429 21.428571-23.142857z m127.428572 277.142857q-1.714286-132.571429-85.142857-234.285714l-0.571429 0.571428q-5.142857 6.857143-10.857143 14t-24.857143 25.428572-40.571428 34.571428-57.142857 37.142857T592.571429 422.285714q14.285714 30.285714 25.142857 54.285715 1.142857 2.857143 3.714285 9.714285t4.285715 9.714286q20.571429-2.857143 42.571428-4t42-1.142857 39.428572 0.857143 36.571428 2.285714 32.285715 3.142857 27.428571 3.714286 20.857143 3.428571 14.285714 2.571429z m64 4q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-download\" viewBox=\"0 0 1024 1024\"><path d=\"M768 768q0-14.857143-10.857143-25.714286t-25.714286-10.857143-25.714285 10.857143-10.857143 25.714286 10.857143 25.714286 25.714285 10.857143 25.714286-10.857143 10.857143-25.714286z m146.285714 0q0-14.857143-10.857143-25.714286t-25.714285-10.857143-25.714286 10.857143-10.857143 25.714286 10.857143 25.714286 25.714286 10.857143 25.714285-10.857143 10.857143-25.714286z m73.142857-128v182.857143q0 22.857143-16 38.857143t-38.857142 16H91.428571q-22.857143 0-38.857142-16t-16-38.857143v-182.857143q0-22.857143 16-38.857143t38.857142-16h265.714286l77.142857 77.714286q33.142857 32 77.714286 32t77.714286-32l77.714285-77.714286h265.142858q22.857143 0 38.857142 16t16 38.857143z m-185.714285-325.142857q9.714286 23.428571-8 40l-256 256q-10.285714 10.857143-25.714286 10.857143t-25.714286-10.857143L230.285714 354.857143q-17.714286-16.571429-8-40 9.714286-22.285714 33.714286-22.285714h146.285714V36.571429q0-14.857143 10.857143-25.714286t25.714286-10.857143h146.285714q14.857143 0 25.714286 10.857143t10.857143 25.714286v256h146.285714q24 0 33.714286 22.285714z\"  ></path></symbol><symbol id=\"icon-dollar\" viewBox=\"0 0 1024 1024\"><path d=\"M748.526129 677.142857q0 87.428571-56.857143 150.571429T543.9547 905.714286v100q0 8-5.142857 13.142857t-13.142857 5.142857H448.526129q-7.428571 0-12.857143-5.428571T430.240414 1005.714286v-100q-37.714286-5.142857-72.857143-17.714286T299.383271 862.571429t-42.285714-27.428572-26.571428-21.428571-10-10.285715q-9.714286-12-1.142858-23.428571l58.857143-77.142857q4-5.714286 13.142857-6.857143 8.571429-1.142857 13.714286 5.142857l1.142857 1.142857q64.571429 56.571429 138.857143 71.428572 21.142857 4.571429 42.285714 4.571428 46.285714 0 81.428572-24.571428t35.142857-69.714286q0-16-8.571429-30.285714t-19.142857-24-33.428571-21.428572-37.714286-18.285714-45.714286-18.571429q-22.285714-9.142857-35.142857-14.285714T389.097557 542t-35.714286-17.714286T321.097557 504t-30.571428-24.285714-24.857143-28-20.285715-33.142857-12-38-4.857142-44.571429q0-78.857143 56-138.285714t145.714285-76.571429V18.285714q0-7.428571 5.428572-12.857143T448.526129 0h77.142857q8 0 13.142857 5.142857t5.142857 13.142857v100.571429q32.571429 3.428571 63.142857 13.142857t49.714286 19.142857T693.097557 172.571429t22.285714 16.571428 8.571429 8q9.714286 10.285714 2.857143 21.714286l-46.285714 83.428571q-4.571429 8.571429-13.142858 9.142857-8 1.714286-15.428571-4-1.714286-1.714286-8.285714-6.857142t-22.285715-15.142858-33.428571-18.285714-42.571429-14.857143T496.526129 245.714286q-54.285714 0-88.571429 24.571428t-34.285714 63.428572q0 14.857143 4.857143 27.428571t16.857142 23.714286 22.571429 18.857143 32 17.714285 34.571429 15.428572 40 15.714286q30.285714 11.428571 46.285714 18t43.428571 20 43.142857 24.285714 35.428572 28.571428 30.285714 36.285715T741.097557 623.428571t7.428572 53.714286z\"  ></path></symbol><symbol id=\"icon-dot-circle-o\" viewBox=\"0 0 1024 1024\"><path d=\"M658.285714 512q0 60.571429-42.857143 103.428571t-103.428571 42.857143-103.428571-42.857143-42.857143-103.428571 42.857143-103.428571 103.428571-42.857143 103.428571 42.857143 42.857143 103.428571zM512 201.142857q-84.571429 0-156 41.714286T242.857143 356t-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286 156-41.714286 113.142857-113.142857 41.714286-156-41.714286-156-113.142857-113.142857-156-41.714286z m438.857143 310.857143q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-edit\" viewBox=\"0 0 1024 1024\"><path d=\"M507.428571 676.571429l66.285715-66.285715-86.857143-86.857143-66.285714 66.285715v32h54.857142v54.857143h32z m251.428572-411.428572q-9.142857-9.142857-18.857143 0.571429L540 465.714286q-9.714286 9.714286-0.571429 18.857143t18.857143-0.571429l200-200q9.714286-9.714286 0.571429-18.857143z m45.714286 339.428572v108.571428q0 68-48.285715 116.285714T640 877.714286H164.571429q-68 0-116.285715-48.285715T0 713.142857V237.714286q0-68 48.285714-116.285715T164.571429 73.142857h475.428571q36 0 66.857143 14.285714 8.571429 4 10.285714 13.142858 1.714286 9.714286-5.142857 16.571428l-28 28q-8 8-18.285714 4.571429-13.142857-3.428571-25.714286-3.428572H164.571429q-37.714286 0-64.571429 26.857143t-26.857143 64.571429v475.428571q0 37.714286 26.857143 64.571429t64.571429 26.857143h475.428571q37.714286 0 64.571429-26.857143t26.857142-64.571429v-72q0-7.428571 5.142858-12.571428l36.571428-36.571429q8.571429-8.571429 20-4t11.428572 16.571429z m-54.857143-421.714286l164.571428 164.571428-384 384H365.714286V566.857143z m253.714285 75.428571l-52.571428 52.571429-164.571429-164.571429 52.571429-52.571428q16-16 38.857143-16t38.857143 16l86.857142 86.857143q16 16 16 38.857142t-16 38.857143z\"  ></path></symbol><symbol id=\"icon-dropbox\" viewBox=\"0 0 1024 1024\"><path d=\"M229.714286 404l282.285714 174.285714-195.428571 162.857143L36.571429 558.857143z m563.428571 317.142857v61.714286l-280 167.428571v0.571429l-0.571428-0.571429-0.571429 0.571429v-0.571429l-279.428571-167.428571v-61.714286l84 54.857143 195.428571-162.285714v-1.142857l0.571429 0.571428 0.571428-0.571428v1.142857l196 162.285714zM316.571429 67.428571l195.428571 162.857143-282.285714 173.714286L36.571429 249.714286z m477.714285 336.571429l193.142857 154.857143-279.428571 182.285714-196-162.857143z m-86.285714-336.571429l279.428571 182.285715-193.142857 154.285714-282.285714-173.714286z\"  ></path></symbol><symbol id=\"icon-edge\" viewBox=\"0 0 1024 1024\"><path d=\"M39.428571 454.285714h0.571429q9.142857-72 33.428571-138t65.714286-124 95.714286-100.571428T362.571429 24.571429 520.571429 0q132 0 236.571428 60.285714T925.142857 233.714286q59.428571 106.857143 59.428572 252.571428v107.428572H341.714286q0.571429 63.428571 30.571428 110T450.285714 773.714286t108.285715 32.571428 121.714285 1.714286 118.857143-26.571429T898.285714 733.142857v215.428572q-52.571429 31.428571-131.142857 52.571428t-178.571428 21.714286-180.571429-30.285714q-108-41.714286-178-142.285715T158.857143 637.714286q-1.714286-138.285714 63.428571-235.428572t185.714286-153.142857q-27.428571 34.285714-44.571429 71.714286T337.142857 412h362.857143q4.571429-44-4.571429-80t-26.857142-58-40.285715-38-46-23.428571-42.857143-11.714286-32-4.857143l-12.571428-0.571429q-77.142857 2.857143-148.285714 25.428572T218.857143 280.571429 118.285714 360.857143 39.428571 454.285714z\"  ></path></symbol><symbol id=\"icon-drupal\" viewBox=\"0 0 1024 1024\"><path d=\"M740 906.285714q-2.857143-10.857143-13.714286-2.857143-17.142857 12.571429-49.714285 22.285715t-74.857143 9.714285q-73.714286 0-110.285715-28-2.857143-2.285714-7.428571-2.285714-6.285714 0-14.857143 6.857143-4 3.428571-4.285714 9.142857t4.285714 11.428572q19.428571 18.285714 50 26.285714t58.571429 7.142857 56.571428-2.571429q23.428571-2.285714 48.285715-11.714285t37.142857-17.142857 16.285714-11.714286q6.857143-6.857143 4-16.571429z m-22.285714-65.714285q-10.857143-26.857143-22.285715-34.857143-13.142857-8.571429-43.428571-8.571429-26.857143 0-40.571429 5.714286-16.571429 6.857143-44.571428 32-14.857143 13.714286-6.857143 25.142857 5.142857 4.571429 10 2.571429T588 849.142857q1.714286-1.142857 6-4.857143t6-4.857143 5.714286-4 6.571428-4 7.142857-2.857142 8.571429-2.571429 9.428571-1.428571 11.714286-0.571429q15.428571 0 25.428572 4.285714t13.142857 8.285715 7.714285 12.571428q5.714286 9.714286 7.142858 11.428572t7.142857-0.571429q13.142857-6.857143 8-19.428571z m202.857143-160.571429q0-12.571429-2.857143-25.428571t-9.428572-25.714286-19.428571-20.857143-30-8q-18.857143 0-55.428572 23.714286t-73.714285 47.714285-57.714286 24q-15.428571 0.571429-36.285714-10.857142t-43.428572-28-47.714285-33.142858-57.142858-28-63.428571-10.857142q-65.714286 0.571429-112.571429 44.857142T263.428571 731.428571q-1.142857 64 42.285715 93.714286 16.571429 11.428571 35.714285 16.285714T400.571429 846.285714q32.571429 0 75.428571-18.571428t76.571429-40.571429 68.571428-40.285714 53.142857-17.714286q14.857143 0.571429 37.142857 18t40.857143 38.285714 38.857143 38.571429 31.714286 18.285714q20 1.714286 33.428571-8t31.714286-36q16-23.428571 24.285714-57.714285t8.285715-60.571429z m30.285714-91.428571q0 93.714286-35.428572 174t-94.857142 134.857142-138.571429 85.428572-166 30.857143-167.428571-32.857143-141.428572-89.714286T109.714286 753.142857 73.142857 580.571429q0-50.857143 11.142857-98.571429t28-83.142857T152.571429 331.142857t44.857142-53.714286T242.285714 237.714286t36.857143-26.571429T303.428571 197.142857q8-4.571429 29.142858-15.142857t31.142857-16.285714 27.428571-17.142857 34.571429-25.142858q20.571429-16 33.142857-41.428571T476 10.285714q73.714286 88.571429 106.285714 110.285715 25.142857 16.571429 74.285715 38.857142t73.714285 37.714286q12 7.428571 22.285715 14.285714t34.571428 26.571429 43.428572 40.285714 42.857142 54.285715 39.428572 69.714285 26.857143 84.857143T950.857143 588.571429z\"  ></path></symbol><symbol id=\"icon-drivers-license\" viewBox=\"0 0 1170 1024\"><path d=\"M512 692.571429q0-30.857143-4.285714-57.428572t-14-51.428571-29.142857-39.142857-46.285715-14.285715q-36.571429 36.571429-89.142857 36.571429t-89.142857-36.571429q-26.857143 0-46.285714 14.285715t-29.142857 39.142857-14 51.428571T146.285714 692.571429q0 31.428571 18 53.428571T207.428571 768h243.428572q25.142857 0 43.142857-22T512 692.571429zM438.857143 438.857143q0-45.714286-32-77.714286t-77.714286-32-77.714286 32-32 77.714286 32 77.714286 77.714286 32 77.714286-32 32-77.714286z m585.142857 274.285714v-36.571428q0-8-5.142857-13.142858t-13.142857-5.142857h-402.285715q-8 0-13.142857 5.142857t-5.142857 13.142858v36.571428q0 8 5.142857 13.142857t13.142857 5.142857h402.285715q8 0 13.142857-5.142857t5.142857-13.142857z m-219.428571-146.285714v-36.571429q0-8-5.142858-13.142857t-13.142857-5.142857h-182.857143q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142857 5.142857h182.857143q8 0 13.142857-5.142857t5.142858-13.142857z m219.428571 0v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857h-109.714286q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142857 5.142857h109.714286q8 0 13.142857-5.142857t5.142857-13.142857z m0-146.285714v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857h-402.285715q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142857 5.142857h402.285715q8 0 13.142857-5.142857t5.142857-13.142857zM73.142857 219.428571h1024v-54.857142q0-8-5.142857-13.142858t-13.142857-5.142857H91.428571q-8 0-13.142857 5.142857t-5.142857 13.142858v54.857142z m1097.142857-54.857142v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h987.428572q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-eject\" viewBox=\"0 0 1024 1024\"><path d=\"M80.571429 559.428571l405.714285-405.714285q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l405.714285 405.714285q10.857143 10.857143 7.428572 18.285715t-18.285714 7.428571H91.428571q-14.857143 0-18.285714-7.428571t7.428572-18.285715z m833.714285 318.285715H109.714286q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-146.285714q0-14.857143 10.857143-25.714286t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286v146.285714q0 14.857143-10.857143 25.714286t-25.714286 10.857143z\"  ></path></symbol><symbol id=\"icon-ellipsis-h\" viewBox=\"0 0 1024 1024\"><path d=\"M329.142857 420.571429v109.714285q0 22.857143-16 38.857143t-38.857143 16H164.571429q-22.857143 0-38.857143-16T109.714286 530.285714V420.571429q0-22.857143 16-38.857143t38.857143-16h109.714285q22.857143 0 38.857143 16t16 38.857143z m292.571429 0v109.714285q0 22.857143-16 38.857143t-38.857143 16H457.142857q-22.857143 0-38.857143-16t-16-38.857143V420.571429q0-22.857143 16-38.857143t38.857143-16h109.714286q22.857143 0 38.857143 16t16 38.857143z m292.571428 0v109.714285q0 22.857143-16 38.857143t-38.857143 16h-109.714285q-22.857143 0-38.857143-16t-16-38.857143V420.571429q0-22.857143 16-38.857143t38.857143-16h109.714285q22.857143 0 38.857143 16t16 38.857143z\"  ></path></symbol><symbol id=\"icon-envelope-o\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 859.428571V420.571429q-18.285714 20.571429-39.428572 37.714285-153.142857 117.714286-243.428571 193.142857-29.142857 24.571429-47.428571 38.285715t-49.428572 27.714285T512.571429 731.428571h-1.142858q-27.428571 0-58.571428-14T403.428571 689.714286t-47.428571-38.285715q-90.285714-75.428571-243.428571-193.142857-21.142857-17.142857-39.428572-37.714285v438.857142q0 7.428571 5.428572 12.857143t12.857142 5.428572h841.142858q7.428571 0 12.857142-5.428572t5.428572-12.857143z m0-600.571428v-14l-0.285714-7.428572-1.714286-7.142857-3.142857-5.142857-5.142857-4.285714-8-1.428572H91.428571q-7.428571 0-12.857142 5.428572T73.142857 237.714286q0 96 84 162.285714 110.285714 86.857143 229.142857 181.142857 3.428571 2.857143 20 16.857143t26.285715 21.428571 25.428571 18T486.857143 653.142857t24.571428 5.142857h1.142858q11.428571 0 24.571428-5.142857t28.857143-15.714286 25.428571-18 26.285715-21.428571 20-16.857143q118.857143-94.285714 229.142857-181.142857 30.857143-24.571429 57.428571-66T950.857143 258.857143z m73.142857-21.142857v621.714285q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V237.714286q0-37.714286 26.857143-64.571429t64.571428-26.857143h841.142858q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-ellipsis-v\" viewBox=\"0 0 1024 1024\"><path d=\"M486.572871 713.142857v109.714286q0 22.857143-16 38.857143t-38.857142 16H322.001443q-22.857143 0-38.857143-16t-16-38.857143v-109.714286q0-22.857143 16-38.857143t38.857143-16h109.714286q22.857143 0 38.857142 16t16 38.857143z m0-292.571428v109.714285q0 22.857143-16 38.857143t-38.857142 16H322.001443q-22.857143 0-38.857143-16T267.1443 530.285714V420.571429q0-22.857143 16-38.857143t38.857143-16h109.714286q22.857143 0 38.857142 16t16 38.857143z m0-292.571429v109.714286q0 22.857143-16 38.857143t-38.857142 16H322.001443q-22.857143 0-38.857143-16T267.1443 237.714286V128q0-22.857143 16-38.857143t38.857143-16h109.714286q22.857143 0 38.857142 16t16 38.857143z\"  ></path></symbol><symbol id=\"icon-eercast\" viewBox=\"0 0 1024 1024\"><path d=\"M766.285714 448q16.571429-25.142857-3.714285-74T693.142857 292.571429q-33.142857-22.285714-71.714286-30.571429t-67.428571-2.571429-39.142857 21.142858q-6.857143 13.142857-2.571429 16t24.285715 5.714285q13.142857 1.714286 22 2.857143t25.428571 5.428572 32 10q20.571429 7.428571 38.571429 18t30.285714 21.142857 22.857143 22 17.428571 21.714285 12.571429 19.714286 9.428571 16.285714 6.857143 10.571429 6 3.428571 6.285714-5.428571z m207.428572 328q-29.714286 72.571429-84.857143 125.714286T766.285714 982.571429t-144.571428 34.571428-152-7.714286-143.428572-52T206.285714 865.142857t-80.857143-134.571428T98.857143 557.142857q0.571429-23.428571 4.857143-48.285714t7.142857-36.571429 13.714286-46 13.142857-41.714285q-29.142857 118.857143 0.571428 226.857142t98.857143 181.714286 166.285714 117.714286 197.714286 47.428571 199.428572-42.571428 165.142857-139.714286q11.428571-15.428571 10.285714-8 0 2.285714-2.285714 8z m-136.571429-256.571429q0 59.428571-23.142857 113.714286T752 726.857143t-92.571429 62.571428-113.142857 23.142858-113.142857-23.142858T340.571429 726.857143t-62-93.714286T255.428571 519.428571t23.142858-113.714285T340.571429 312t92.571428-62.571429T546.285714 226.285714t113.142857 23.142857T752 312t62 93.714286 23.142857 113.714285z m164-164.571428q-37.142857-84-103.142857-143.428572t-144.571429-87.714285-166.857142-30.571429-172 20.857143-157.428572 73.714286T131.428571 308.571429 56.571429 478.285714t-5.714286 213.142857q-28-92-29.428572-178T41.714286 357.714286t62.285714-129.714286 94.571429-103.142857 118.285714-72 132.571428-40.571429 138.571429-5.142857 134.857143 30.857143T846.285714 109.142857t101.714286 112.571429q18.857143 28.571429 35.428571 69.142857t17.714286 64z m-35.428571 195.428571q6.857143-139.428571-78-237.714285T661.142857 175.428571q-4.571429 0-5.714286-2.857142t13.714286-4.571429q71.428571 2.285714 131.428572 28.571429t98.857142 68.571428 66.285715 96.285714 33.428571 113.714286-0.571428 118.857143T963.428571 706.857143t-70 95.428571-105.714285 67.142857T645.714286 896q61.714286-17.142857 115.142857-45.714286t99.428571-70.285714 74-100.857143 31.428572-128.857143z\"  ></path></symbol><symbol id=\"icon-empire\" viewBox=\"0 0 1024 1024\"><path d=\"M499.428571 936v37.714286q-118.857143-3.428571-220-62.571429T117.714286 753.714286l33.142857-19.428572q16.571429 28 41.714286 56.571429l37.142857-32.571429q84.571429 96 210.285714 121.142857l-9.714286 49.142858q37.142857 6.857143 69.142857 7.428571z m-341.714285-302.857143l-47.428572 16q12.571429 34.285714 28 64l-32.571428 18.857143q-56-102.857143-56-220t56-220l32.571428 18.857143q-17.142857 32-28 64l46.857143 16q-20 57.142857-20 121.142857 0 62.285714 20.571429 121.142857z m715.428571 101.142857l33.142857 19.428572q-60.571429 98.285714-161.714285 157.428571T524.571429 973.714286v-37.714286q32-0.571429 69.142857-7.428571l-9.714286-49.142858q125.714286-25.142857 210.285714-121.142857l37.142857 32.571429q25.142857-28.571429 41.714286-56.571429z m-86.285714-316.571428l-133.142857 45.714285q8 24 8 48.571429t-8 48.571429l132.571428 45.714285q-17.714286 52.571429-56 96.571429l-105.714285-92.571429q-32.571429 38.285714-84 48.571429l27.428571 137.714286q-29.714286 5.714286-56 5.714285t-56-5.714285l27.428571-137.714286q-51.428571-10.285714-84-48.571429l-105.714285 92.571429q-38.285714-44-56-96.571429l132.571428-45.714285q-8-24-8-48.571429t8-48.571429l-133.142857-45.714285q18.857143-53.142857 56.571429-96.571429l105.714285 92.571429q33.714286-38.857143 84-49.142857l-27.428571-137.142858q25.142857-5.714286 56-5.714285t56 5.714285l-27.428571 137.142858q50.285714 10.285714 84 49.142857l105.714285-92.571429q37.714286 43.428571 56.571429 96.571429zM499.428571 50.285714v37.714286q-37.142857 1.142857-69.142857 7.428571l9.714286 49.142858q-125.714286 24-210.285714 120.571428l-37.142857-32q-21.714286 24-41.714286 56l-32.571429-18.857143q60.571429-98.285714 161.142857-157.428571T499.428571 50.285714z m474.857143 461.714286q0 117.142857-56 220l-32.571428-18.857143q15.428571-29.714286 28-64l-47.428572-16q20.571429-58.857143 20.571429-121.142857 0-64-20-121.142857l46.857143-16q-10.857143-32-28-64l32.571428-18.857143q56 102.857143 56 220z m-68.571428-241.714286l-32.571429 18.857143q-20-32-41.714286-56l-37.142857 32q-84.571429-96.571429-210.285714-120.571428l9.714286-49.142858q-32-6.285714-69.142857-7.428571V50.285714q119.428571 3.428571 220 62.571429T905.714286 270.285714z m93.142857 241.714286q0-98.857143-38.571429-189.142857T856.571429 167.428571t-155.428572-103.714285T512 25.142857t-189.142857 38.571429T167.428571 167.428571 63.714286 322.857143 25.142857 512t38.571429 189.142857T167.428571 856.571429t155.428572 103.714285 189.142857 38.571429 189.142857-38.571429 155.428572-103.714285 103.714285-155.428572 38.571429-189.142857z m25.142857 0q0 104-40.571429 198.857143t-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0t198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-envelope-open-o\" viewBox=\"0 0 1024 1024\"><path d=\"M842.285714 521.714286l22.285715 29.142857q4.571429 6.285714 3.714285 13.428571T861.714286 576q-24.571429 19.428571-72.285715 56.285714t-83.714285 64.571429-38.285715 29.428571q-22.285714 18.285714-34.285714 27.428572t-34.571428 23.428571-43.714286 20.857143-42.285714 6.571429h-1.142858q-21.142857 0-42.285714-6.571429t-43.428571-20.857143-34.857143-23.714286-34.285714-27.142857q-2.857143-2.285714-37.142858-28.857143t-82-63.428571T167.428571 580q-6.285714-4.571429-7.142857-11.714286T164 554.857143l21.142857-29.714286q4.571429-6.285714 12.285714-7.428571t14 4q53.714286 41.714286 174.857143 134.857143 2.857143 2.285714 24.857143 20t34.571429 26.571428 32.285714 18.571429 33.428571 9.714285h1.142858q13.714286 0 33.428571-9.714285t32.285714-18.571429 34.571429-26.571428 24.857143-20q147.428571-113.142857 178.857143-138.285715 6.285714-4.571429 13.714285-3.714285t12 7.142857z m108.571429 410.857143V402.285714q-51.428571-47.428571-90.857143-79.428571-52-42.285714-222.285714-173.714286-1.714286-1.142857-24.571429-20t-34.857143-27.428571-32-18.571429-33.714285-10h-1.142858q-13.714286 0-33.714285 10T445.714286 101.714286t-34.857143 27.428571-24.571429 20Q263.428571 244 206 289.428571T132 348.857143 85.142857 391.428571q-8 6.857143-12 10.857143v530.285715q0 7.428571 5.428572 12.857142t12.857142 5.428572h841.142858q7.428571 0 12.857142-5.428572t5.428572-12.857142z m73.142857-530.285715v530.285715q0 37.714286-26.857143 64.571428t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 932.571429V402.285714q0-32 23.428571-53.714285 70.285714-65.142857 200-166T356.571429 78.857143q20.571429-17.142857 33.714285-27.142857t35.142857-24 43.428572-20.857143T511.428571 0h1.142858q21.142857 0 42.571428 6.857143t43.428572 20.857143 35.142857 24 33.714285 27.142857q24.571429 20.571429 89.142858 69.714286t129.142857 101.142857 114.857143 98.857143q23.428571 21.714286 23.428571 53.714285z\"  ></path></symbol><symbol id=\"icon-envelope-open\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 373.714286v558.857143q0 37.714286-26.857143 64.571428t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 932.571429V373.714286q0-8.571429 6.285714-13.714286 4.571429-4 22.285715-19.714286t23.714285-20.571428T78.285714 298.285714t40-31.714285 54.857143-41.714286 82-61.142857T365.142857 83.428571q2.857143-2.285714 30-22.857142T436 30.571429t36.571429-20T512 0t39.428571 10.571429 37.142858 20.285714 40.571428 29.714286 29.714286 22.857142q62.857143 45.714286 110 80.285715t82 61.142857 54.857143 41.714286 40 31.714285 26 21.428572 23.714285 20.571428 22.285715 19.714286q6.285714 5.142857 6.285714 13.714286z m-322.285714 334.285714q150.285714-109.142857 197.142857-144 6.285714-4.571429 7.142857-11.714286T902.285714 538.857143l-21.714285-29.714286q-4.571429-6.285714-12-7.142857t-13.714286 3.714286q-132 96.571429-196 142.857143-2.857143 1.714286-29.714286 22.285714t-40.857143 30-36.857143 20-39.428571 10.571428-39.428571-10.571428-36.857143-20T394.857143 670.857143t-29.714286-22.285714q-106.285714-76.571429-196-142.857143-6.285714-4.571429-13.714286-3.714286T143.428571 509.142857l-21.714285 29.714286q-4.571429 6.285714-3.714286 13.428571T125.142857 564q46.857143 34.857143 197.142857 144 5.714286 4.571429 28.571429 21.714286t37.142857 26.857143 36.571429 22.571428 44.285714 19.142857 43.142857 6.285715 43.142857-6.285715 45.142857-19.714285 36.857143-22.571429 37.142857-27.142857 27.428572-20.857143z\"  ></path></symbol><symbol id=\"icon-envelope\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 405.714286v453.714285q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V405.714286q25.142857 28 57.714286 49.714285 206.857143 140.571429 284 197.142858 32.571429 24 52.857143 37.428571t54 27.428571 62.857142 14h1.142858q29.142857 0 62.857142-14t54-27.428571 52.857143-37.428571q97.142857-70.285714 284.571429-197.142858 32.571429-22.285714 57.142857-49.714285z m0-168q0 45.142857-28 86.285714t-69.714286 70.285714q-214.857143 149.142857-267.428571 185.714286-5.714286 4-24.285714 17.428571t-30.857143 21.714286-29.714286 18.571429-32.857143 15.428571-28.571428 5.142857h-1.142858q-13.142857 0-28.571428-5.142857t-32.857143-15.428571-29.714286-18.571429-30.857143-21.714286T365.142857 580q-52-36.571429-149.714286-104.285714T98.285714 394.285714q-35.428571-24-66.857143-66T0 250.285714q0-44.571429 23.714286-74.285714T91.428571 146.285714h841.142858q37.142857 0 64.285714 26.857143t27.142857 64.571429z\"  ></path></symbol><symbol id=\"icon-envelope-square\" viewBox=\"0 0 1024 1024\"><path d=\"M786.285714 73.142857q68 0 116.285715 48.285714T950.857143 237.714286v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428z m18.285715 603.428572V427.428571q-17.714286 20-36.571429 31.428572-19.428571 12.571429-75.714286 48.571428T605.714286 564q-56 39.428571-93.714286 39.428571t-93.714286-39.428571q-26.857143-18.285714-81.142857-52.857143T256 458.285714q-6.857143-4.571429-18.857143-15.428571t-17.714286-15.428572v249.142858q0 22.857143 16 38.857142t38.857143 16h475.428572q22.857143 0 38.857143-16t16-38.857142z m0-327.428572q0-23.428571-15.714286-40t-39.142857-16.571428H274.285714q-22.857143 0-38.857143 16t-16 38.857142q0 21.142857 17.428572 43.714286T275.428571 428q26.857143 18.285714 78.571429 50.857143T428 526.285714q1.714286 1.142857 9.714286 6.571429t12 8 12 7.428571 13.428571 7.428572T487.428571 561.142857t12.857143 4.285714T512 566.857143t11.714286-1.428572T536.571429 561.142857t12.285714-5.428571 13.428571-7.428572 12-7.428571 12-8 9.714286-6.571429l152.571429-99.428571q20-13.142857 38-35.714286T804.571429 349.142857z\"  ></path></symbol><symbol id=\"icon-envira\" viewBox=\"0 0 1024 1024\"><path d=\"M512 466.285714Q452.571429 354.285714 420.571429 307.428571 341.142857 192 222.285714 125.714286q-19.428571-10.857143-40-20.571429-50.857143-22.857143-53.714285-18.285714t19.428571 21.714286l22.285714 17.714285q35.428571 24.571429 64.285715 53.428572T288.571429 246.285714t40.285714 64.571429T369.142857 385.714286q5.142857 9.714286 7.428572 14.285714 25.142857 48 48 87.428571t56 88 66 85.714286 74.857142 70.571429T706.285714 783.428571q87.428571 37.714286 88 34.285715 0.571429-1.714286-28-21.142857-30.285714-20.571429-46.285714-32.571429-44-33.142857-102.285714-120.571429T512 466.285714z m-198.285714 310.285715q-43.428571-34.285714-75.714286-71.428572t-56-82-40.571429-88.285714T108 428.571429t-29.714286-119.428572-34.571428-144T0 0q156 0 284.285714 20.571429t216.571429 52.571428 154.857143 82.571429T761.714286 254.285714t62.857143 113.428572 32 114 7.142857 113.428571-5.428572 98.857143-11.428571 82-7.428572 61.142857l184.571429 186.857143h-59.428571l-160.571429-162.857143q-12.571429 1.142857-52.285714 8t-69.428572 10.857143-78.857143 3.428571-91.714285-9.714285-95.714286-33.714286-102.285714-63.428571z\"  ></path></symbol><symbol id=\"icon-etsy\" viewBox=\"0 0 1024 1024\"><path d=\"M362.064843 104.571429v374.285714q58.857143 0.571429 109.428571-0.857143T543.2077 474.857143l21.142857-1.714286q38.857143-1.142857 51.714286-14T638.636271 405.142857l18.857143-81.142857h58.857143l-8 184 4 182.285714h-58.857143l-16.571428-72.571428q-8.571429-38.857143-25.714286-53.142857t-48-14.857143q-49.714286-4.571429-201.142857-4.571429v317.714286q0 44.571429 24.857143 66T463.2077 950.285714h204q20 0 34-1.142857t31.428571-4.285714 30.857143-10.285714 27.714286-18.285715 26.285714-28.857143 22.285715-41.714285l53.142857-123.428572h50.857143q-3.428571 21.142857-18 144t-17.428572 157.714286q-83.428571-2.857143-150.571428-4.571429t-92.857143-2.285714H280.921986L66.064843 1024v-58.285714l72.571428-14.285715q38.285714-7.428571 52.285715-21.142857t14.571428-45.142857l4.571429-367.428571q1.714286-229.714286-4.571429-368.571429-1.142857-34.857143-14.571428-48T138.636271 80.571429L66.064843 66.857143V8.571429l214.857143 6.857142h401.142857q79.428571 0 213.714286-15.428571-3.428571 38.857143-8 111.142857T880.921986 236.571429l-2.857143 52.571428h-53.142857l-18.285715-70.857143q-17.714286-69.142857-42.285714-102.571428T699.779129 82.285714H386.636271q-16 0-20.285714 4.857143T362.064843 104.571429z\"  ></path></symbol><symbol id=\"icon-eraser\" viewBox=\"0 0 1097 1024\"><path d=\"M512 804.571429l192-219.428572H265.142857l-192 219.428572h438.857143zM1090.857143 189.142857q8.571429 19.428571 5.428571 40.857143T1078.857143 267.428571L566.857143 852.571429q-21.714286 25.142857-54.857143 25.142857H73.142857q-21.714286 0-39.714286-11.714286T6.285714 834.857143q-8.571429-19.428571-5.428571-40.857143T18.285714 756.571429L530.285714 171.428571q21.714286-25.142857 54.857143-25.142857h438.857143q21.714286 0 39.714286 11.714286T1090.857143 189.142857z\"  ></path></symbol><symbol id=\"icon-eur\" viewBox=\"0 0 1024 1024\"><path d=\"M721.485909 746.857143l20 90.857143q1.714286 6.857143-1.714286 12.857143t-9.714286 8.285714l-2.857143 0.571428q-2.285714 1.142857-6 2t-9.142857 2.571429-12.285714 3.142857-14.571429 2.857143-17.142857 2.857143-19.142857 2.571428-20.857143 1.714286-22 0.571429q-133.714286 0-233.714286-74.571429T236.343051 602.285714H182.057337q-7.428571 0-12.857143-5.428571T163.771623 584V519.428571q0-7.428571 5.428571-12.857142T182.057337 501.142857h37.714286q-1.142857-32.571429 0.571428-60H182.057337q-8 0-13.142857-5.142857t-5.142857-13.142857V357.714286q0-8 5.142857-13.142857t13.142857-5.142858h56q38.285714-120 139.142857-193.142857T606.057337 73.142857q58.285714 0 110.857143 13.142857 6.285714 1.714286 11.428571 8.571429 3.428571 6.285714 1.714286 13.714286l-24.571428 90.857142q-1.714286 7.428571-8 11.142858t-13.714286 1.428571l-2.285714-0.571429q-2.285714-0.571429-6.571429-1.428571L664.91448 208l-12.857143-2-14.857143-1.714286-16.571428-1.428571-16.857143-0.571429q-72 0-129.142857 36.571429T388.91448 339.428571h267.428571q9.142857 0 14.285715 6.857143 5.714286 6.857143 4 14.857143l-13.714286 65.142857q-2.857143 14.857143-18.285714 14.857143H363.771623q-1.714286 21.142857 0 60h262.285714q8.571429 0 14.285714 6.857143 5.142857 6.857143 3.428572 15.428571l-13.714286 64q-1.142857 6.285714-6.285714 10.571429t-11.428572 4.285714H391.200194q27.428571 66.857143 85.428572 106T607.200194 747.428571q10.285714 0 20.571429-0.857142t19.142857-2 16.857143-2.571429 14-2.857143 10.571428-2.571428l6.857143-1.714286 2.857143-1.142857q7.428571-2.857143 14.857143 1.142857 6.857143 4 8.571429 12z\"  ></path></symbol><symbol id=\"icon-euro\" viewBox=\"0 0 1024 1024\"><path d=\"M721.485909 746.857143l20 90.857143q1.714286 6.857143-1.714286 12.857143t-9.714286 8.285714l-2.857143 0.571428q-2.285714 1.142857-6 2t-9.142857 2.571429-12.285714 3.142857-14.571429 2.857143-17.142857 2.857143-19.142857 2.571428-20.857143 1.714286-22 0.571429q-133.714286 0-233.714286-74.571429T236.343051 602.285714H182.057337q-7.428571 0-12.857143-5.428571T163.771623 584V519.428571q0-7.428571 5.428571-12.857142T182.057337 501.142857h37.714286q-1.142857-32.571429 0.571428-60H182.057337q-8 0-13.142857-5.142857t-5.142857-13.142857V357.714286q0-8 5.142857-13.142857t13.142857-5.142858h56q38.285714-120 139.142857-193.142857T606.057337 73.142857q58.285714 0 110.857143 13.142857 6.285714 1.714286 11.428571 8.571429 3.428571 6.285714 1.714286 13.714286l-24.571428 90.857142q-1.714286 7.428571-8 11.142858t-13.714286 1.428571l-2.285714-0.571429q-2.285714-0.571429-6.571429-1.428571L664.91448 208l-12.857143-2-14.857143-1.714286-16.571428-1.428571-16.857143-0.571429q-72 0-129.142857 36.571429T388.91448 339.428571h267.428571q9.142857 0 14.285715 6.857143 5.714286 6.857143 4 14.857143l-13.714286 65.142857q-2.857143 14.857143-18.285714 14.857143H363.771623q-1.714286 21.142857 0 60h262.285714q8.571429 0 14.285714 6.857143 5.142857 6.857143 3.428572 15.428571l-13.714286 64q-1.142857 6.285714-6.285714 10.571429t-11.428572 4.285714H391.200194q27.428571 66.857143 85.428572 106T607.200194 747.428571q10.285714 0 20.571429-0.857142t19.142857-2 16.857143-2.571429 14-2.857143 10.571428-2.571428l6.857143-1.714286 2.857143-1.142857q7.428571-2.857143 14.857143 1.142857 6.857143 4 8.571429 12z\"  ></path></symbol><symbol id=\"icon-exchange\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 676.571429v109.714285q0 7.428571-5.428571 12.857143t-12.857143 5.428572H219.428571v109.714285q0 7.428571-5.428571 12.857143T201.142857 932.571429q-6.857143 0-13.714286-5.714286L5.142857 744q-5.142857-5.142857-5.142857-12.571429 0-8 5.142857-13.142857l182.857143-182.857143q5.142857-5.142857 13.142857-5.142857 7.428571 0 12.857143 5.428572T219.428571 548.571429v109.714285h786.285715q7.428571 0 12.857143 5.428572t5.428571 12.857143z m0-310.857143q0 8-5.142857 13.142857l-182.857143 182.857143q-5.142857 5.142857-13.142857 5.142857-7.428571 0-12.857143-5.428572T804.571429 548.571429V438.857143H18.285714q-7.428571 0-12.857143-5.428572T0 420.571429V310.857143q0-7.428571 5.428571-12.857143T18.285714 292.571429h786.285715V182.857143q0-8 5.142857-13.142857t13.142857-5.142857q6.857143 0 13.714286 5.714285l182.285714 182.285715q5.142857 5.142857 5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-exclamation-triangle\" viewBox=\"0 0 1024 1024\"><path d=\"M585.142857 785.714286v-108.571429q0-8-5.428571-13.428571T566.857143 658.285714H457.142857q-7.428571 0-12.857143 5.428572T438.857143 677.142857v108.571429q0 8 5.428571 13.428571t12.857143 5.428572h109.714286q7.428571 0 12.857143-5.428572t5.428571-13.428571z m-1.142857-213.714286l10.285714-262.285714q0-6.857143-5.714285-10.857143-7.428571-6.285714-13.714286-6.285714H449.142857q-6.285714 0-13.714286 6.285714-5.714286 4-5.714285 12l9.714285 261.142857q0 5.714286 5.714286 9.428571t13.714286 3.714286h105.714286q8 0 13.428571-3.714286t6-9.428571z m-8-533.714286l438.857143 804.571429q20 36-1.142857 72-9.714286 16.571429-26.571429 26.285714t-36.285714 9.714286H73.142857q-19.428571 0-36.285714-9.714286T10.285714 914.857143q-21.142857-36-1.142857-72L448 38.285714q9.714286-17.714286 26.857143-28t37.142857-10.285714 37.142857 10.285714 26.857143 28z\"  ></path></symbol><symbol id=\"icon-expand\" viewBox=\"0 0 1024 1024\"><path d=\"M504.571429 603.428571q0 7.428571-5.714286 13.142858l-189.714286 189.714285 82.285714 82.285715q10.857143 10.857143 10.857143 25.714285t-10.857143 25.714286-25.714285 10.857143H109.714286q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-256q0-14.857143 10.857143-25.714285t25.714286-10.857143 25.714285 10.857143l82.285715 82.285714 189.714285-189.714286q5.714286-5.714286 13.142858-5.714286t13.142857 5.714286l65.142857 65.142857q5.714286 5.714286 5.714286 13.142857z m446.285714-493.714285v256q0 14.857143-10.857143 25.714285t-25.714286 10.857143-25.714285-10.857143l-82.285715-82.285714-189.714285 189.714286q-5.714286 5.714286-13.142858 5.714286t-13.142857-5.714286L525.142857 433.714286q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142858l189.714286-189.714285-82.285714-82.285715q-10.857143-10.857143-10.857143-25.714285t10.857143-25.714286 25.714285-10.857143h256q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-exclamation\" viewBox=\"0 0 1024 1024\"><path d=\"M535.77286 713.142857v128q0 14.857143-10.857143 25.714286t-25.714286 10.857143H352.915717q-14.857143 0-25.714286-10.857143t-10.857142-25.714286v-128q0-14.857143 10.857142-25.714286t25.714286-10.857142h146.285714q14.857143 0 25.714286 10.857142t10.857143 25.714286z m17.142857-603.428571l-16 438.857143q-0.571429 14.857143-11.714286 25.714285t-26 10.857143H352.915717q-14.857143 0-26-10.857143T315.201431 548.571429L299.201431 109.714286q-0.571429-14.857143 10-25.714286t25.428572-10.857143h182.857143q14.857143 0 25.428571 10.857143t10 25.714286z\"  ></path></symbol><symbol id=\"icon-exclamation-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M512 73.142857q119.428571 0 220.285714 58.857143T892 291.714286 950.857143 512t-58.857143 220.285714-159.714286 159.714286T512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857z m73.142857 712.571429v-108.571429q0-8-5.142857-13.428571t-12.571429-5.428572H457.714286q-7.428571 0-13.142857 5.714286t-5.714286 13.142857v108.571429q0 7.428571 5.714286 13.142857t13.142857 5.714286h109.714285q7.428571 0 12.571429-5.428572t5.142857-13.428571z m-1.142857-196.571429l10.285714-354.857143q0-6.857143-5.714285-10.285714-5.714286-4.571429-13.714286-4.571429H449.142857q-8 0-13.714286 4.571429-5.714286 3.428571-5.714285 10.285714l9.714285 354.857143q0 5.714286 5.714286 10t13.714286 4.285714h105.714286q8 0 13.428571-4.285714T584 589.142857z\"  ></path></symbol><symbol id=\"icon-expeditedssl\" viewBox=\"0 0 1024 1024\"><path d=\"M512 36.571429q-96.571429 0-184.571429 37.714285T175.714286 175.714286 74.285714 327.428571 36.571429 512t37.714285 184.571429 101.428572 151.714285T327.428571 949.714286t184.571429 37.714285 184.571429-37.714285 151.714285-101.428572T949.714286 696.571429t37.714285-184.571429-37.714285-184.571429-101.428572-151.714285T696.571429 74.285714 512 36.571429z m0-36.571429q104 0 198.857143 40.571429t163.428571 109.142857 109.142857 163.428571 40.571429 198.857143-40.571429 198.857143-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0zM283.428571 475.428571q9.142857 0 9.142858 9.142858v274.285714q0 9.142857-9.142858 9.142857h-18.285714q-9.142857 0-9.142857-9.142857V484.571429q0-9.142857 9.142857-9.142858h18.285714z m228.571429 36.571429q30.285714 0 51.714286 21.428571t21.428571 51.714286q0 20-10 36.571429t-26.571428 26.285714v65.142857q0 8-5.142858 13.142857t-13.142857 5.142857h-36.571428q-8 0-13.142857-5.142857t-5.142858-13.142857v-65.142857q-16.571429-9.714286-26.571428-26.285714t-10-36.571429q0-30.285714 21.428571-51.714286T512 512z m0-438.857143q119.428571 0 220.285714 58.857143T892 291.714286 950.857143 512t-58.857143 220.285714-159.714286 159.714286T512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857zM310.857143 347.428571v54.857143q0 8 5.142857 13.142857t13.142857 5.142858h36.571429q8 0 13.142857-5.142858t5.142857-13.142857v-54.857143q0-53.142857 37.428571-90.571428T512 219.428571t90.571429 37.428572T640 347.428571v54.857143q0 8 5.142857 13.142857t13.142857 5.142858h36.571429q8 0 13.142857-5.142858t5.142857-13.142857v-54.857143q0-83.428571-58.857143-142.285714T512 146.285714 369.714286 205.142857 310.857143 347.428571z m493.714286 420.571429V475.428571q0-14.857143-10.857143-25.714285t-25.714286-10.857143H256q-14.857143 0-25.714286 10.857143t-10.857143 25.714285v292.571429q0 14.857143 10.857143 25.714286t25.714286 10.857143h512q14.857143 0 25.714286-10.857143t10.857143-25.714286z\"  ></path></symbol><symbol id=\"icon-external-link-square\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 530.285714V256q0-14.857143-10.857143-25.714286t-25.714286-10.857143H493.714286q-24 0-33.714286 22.285715-9.714286 23.428571 8 40l82.285714 82.285714-305.142857 305.142857q-10.857143 10.857143-10.857143 25.714286t10.857143 25.714286l58.285714 58.285714q10.857143 10.857143 25.714286 10.857143t25.714286-10.857143l305.142857-305.142857 82.285714 82.285714q10.285714 10.857143 25.714286 10.857143 6.857143 0 14.285714-2.857143 22.285714-9.714286 22.285715-33.714286z m146.285714-292.571428v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-eyedropper\" viewBox=\"0 0 1024 1024\"><path d=\"M970.285714 53.714286q53.714286 53.714286 53.714286 129.428571T970.285714 312l-128.571428 127.428571 59.428571 59.428572q5.714286 5.714286 5.714286 13.142857t-5.714286 13.142857l-120 120q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-60-60-344.571429 344.571429q-21.142857 21.142857-51.428571 21.142857H182.857143L36.571429 1024l-36.571429-36.571429 73.142857-146.285714v-116q0-30.285714 21.142857-51.428571l344.571429-344.571429-60-60q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l120-120q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l59.428572 59.428571 127.428571-128.571428q53.142857-53.714286 128.857143-53.714286T970.285714 53.714286zM292.571429 841.142857l329.142857-329.142857-109.714286-109.714286-329.142857 329.142857v109.714286h109.714286z\"  ></path></symbol><symbol id=\"icon-external-link\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 530.285714v182.857143q0 68-48.285715 116.285714T640 877.714286H164.571429q-68 0-116.285715-48.285715T0 713.142857V237.714286q0-68 48.285714-116.285715T164.571429 73.142857h402.285714q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H164.571429q-37.714286 0-64.571429 26.857143t-26.857143 64.571429v475.428571q0 37.714286 26.857143 64.571429t64.571429 26.857143h475.428571q37.714286 0 64.571429-26.857143t26.857142-64.571429V530.285714q0-8 5.142858-13.142857t13.142857-5.142857h36.571428q8 0 13.142857 5.142857t5.142858 13.142857z m219.428571-493.714285v292.571428q0 14.857143-10.857143 25.714286t-25.714286 10.857143-25.714285-10.857143l-100.571429-100.571429-372.571428 372.571429q-5.714286 5.714286-13.142858 5.714286t-13.142857-5.714286L397.142857 561.714286q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142858l372.571429-372.571428-100.571429-100.571429q-10.857143-10.857143-10.857143-25.714285t10.857143-25.714286 25.714286-10.857143h292.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-eye\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 548.571429q-86.857143-134.857143-217.714286-201.714286 34.857143 59.428571 34.857143 128.571428 0 105.714286-75.142857 180.857143T512 731.428571t-180.857143-75.142857T256 475.428571q0-69.142857 34.857143-128.571428-130.857143 66.857143-217.714286 201.714286 76 117.142857 190.571429 186.571428T512 804.571429t248.285714-69.428572T950.857143 548.571429zM539.428571 329.142857q0-11.428571-8-19.428571t-19.428571-8q-71.428571 0-122.571429 51.142857T338.285714 475.428571q0 11.428571 8 19.428572t19.428572 8 19.428571-8 8-19.428572q0-49.142857 34.857143-84t84-34.857142q11.428571 0 19.428571-8t8-19.428572z m484.571429 219.428572q0 19.428571-11.428571 39.428571-80 131.428571-215.142858 210.571429T512 877.714286t-285.428571-79.428572T11.428571 588Q0 568 0 548.571429t11.428571-39.428572q80-130.857143 215.142858-210.285714T512 219.428571t285.428571 79.428572T1012.571429 509.142857q11.428571 20 11.428571 39.428572z\"  ></path></symbol><symbol id=\"icon-eye-slash\" viewBox=\"0 0 1024 1024\"><path d=\"M317.142857 762.857143l44.571429-80.571429q-49.714286-36-77.714286-90.857143t-28-116q0-69.142857 34.857143-128.571428-130.857143 66.857143-217.714286 201.714286 95.428571 147.428571 244 214.285714z m222.285714-433.714286q0-11.428571-8-19.428571t-19.428571-8q-71.428571 0-122.571429 51.142857T338.285714 475.428571q0 11.428571 8 19.428572t19.428572 8 19.428571-8 8-19.428572q0-49.142857 34.857143-84t84-34.857142q11.428571 0 19.428571-8t8-19.428572z m207.428572-109.142857q0 4-0.571429 5.142857-60.571429 108-180.571428 324t-180 323.428572l-28 50.857142q-5.714286 9.142857-16 9.142858-6.857143 0-76.571429-40-9.142857-5.714286-9.142857-16 0-6.857143 25.142857-49.714286-81.714286-37.142857-150.571428-98.857143T11.428571 588Q0 570.285714 0 548.571429t11.428571-39.428572q87.428571-134.285714 217.142858-212t283.428571-77.714286q50.857143 0 102.857143 9.714286l30.857143-55.428571q5.714286-9.142857 16-9.142857 2.857143 0 10.285714 3.428571t17.714286 8.857143 18.857143 10.571428 18 10.571429T737.714286 204.571429q9.142857 5.714286 9.142857 15.428571z m21.142857 255.428571q0 79.428571-45.142857 144.857143T603.428571 714.285714l160-286.857143q4.571429 25.714286 4.571429 48z m256 73.142858q0 20-11.428571 39.428571-22.285714 36.571429-62.285715 82.857143-85.714286 98.285714-198.571428 152.571428T512 877.714286l42.285714-75.428572q121.142857-10.285714 224.285715-78.285714T950.857143 548.571429q-65.714286-102.285714-161.142857-168l36-64q54.285714 36.571429 104.285714 87.428571T1012.571429 509.142857q11.428571 19.428571 11.428571 39.428572z\"  ></path></symbol><symbol id=\"icon-fa\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 292.571429v479.428571q0 27.428571-28 35.428571-99.428571 29.714286-193.142857 29.714286-41.714286 0-123.142857-16.857143T476.571429 803.428571q-93.714286 0-211.428572 27.428572v193.142857H173.714286V242.285714q-36-14.285714-57.714286-46.285714T94.285714 125.142857q0-52 36.571429-88.571428T219.428571 0t88.571429 36.571429 36.571429 88.571428q0 38.857143-21.714286 70.857143t-57.714286 46.285714v38.857143q108.571429-25.142857 196-25.142857 56.571429 0 113.142857 8.571429 8 1.142857 63.714286 12.857142T723.428571 289.142857q44 0 94.285715-10.285714 6.285714-1.142857 45.714285-12t50.857143-10.857143q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-facebook-official\" viewBox=\"0 0 1024 1024\"><path d=\"M895.637709 73.142857q20 0 34.285714 14.285714t14.285714 34.285715v780.571428q0 20-14.285714 34.285715t-34.285714 14.285714h-223.428572v-340h113.714286l17.142857-132.571429h-130.857143V393.714286q0-32 13.428572-48t52.285714-16l69.714286-0.571429V210.857143q-36-5.142857-101.714286-5.142857-77.714286 0-124.285714 45.714285T535.06628 380.571429v97.714285H420.780566v132.571429h114.285714v340H115.06628q-20 0-34.285714-14.285714t-14.285715-34.285715V121.714286q0-20 14.285715-34.285715t34.285714-14.285714h780.571429z\"  ></path></symbol><symbol id=\"icon-facebook-f\" viewBox=\"0 0 1024 1024\"><path d=\"M767.428571 6.857143v150.857143H677.714286q-49.142857 0-66.285715 20.571428t-17.142857 61.714286v108h167.428572l-22.285715 169.142857H594.285714v433.714286H419.428571V517.142857H273.714286V348h145.714285V223.428571q0-106.285714 59.428572-164.857142T637.142857 0q84 0 130.285714 6.857143z\"  ></path></symbol><symbol id=\"icon-facebook-square\" viewBox=\"0 0 1024 1024\"><path d=\"M786.285714 73.142857q68 0 116.285715 48.285714T950.857143 237.714286v548.571428q0 68-48.285714 116.285715T786.285714 950.857143h-107.428571v-340h113.714286l17.142857-132.571429h-130.857143V393.714286q0-32 13.428571-48t52.285715-16l69.714285-0.571429V210.857143q-36-5.142857-101.714285-5.142857-77.714286 0-124.285715 45.714285T541.714286 380.571429v97.714285H427.428571v132.571429h114.285715v340H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428z\"  ></path></symbol><symbol id=\"icon-facebook\" viewBox=\"0 0 1024 1024\"><path d=\"M767.428571 6.857143v150.857143H677.714286q-49.142857 0-66.285715 20.571428t-17.142857 61.714286v108h167.428572l-22.285715 169.142857H594.285714v433.714286H419.428571V517.142857H273.714286V348h145.714285V223.428571q0-106.285714 59.428572-164.857142T637.142857 0q84 0 130.285714 6.857143z\"  ></path></symbol><symbol id=\"icon-fast-backward\" viewBox=\"0 0 1024 1024\"><path d=\"M998.285714 80.571429q10.857143-10.857143 18.285715-7.428572t7.428571 18.285714v841.142858q0 14.857143-7.428571 18.285714t-18.285715-7.428572l-405.714285-405.714285q-5.142857-5.142857-7.428572-10.857143v405.714286q0 14.857143-7.428571 18.285714t-18.285715-7.428572L153.714286 537.714286q-5.142857-5.142857-7.428572-10.857143v387.428571q0 14.857143-10.857143 25.714286t-25.714285 10.857143H36.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h73.142857q14.857143 0 25.714285 10.857143t10.857143 25.714286v387.428571q2.285714-5.714286 7.428572-10.857143l405.714285-405.714285q10.857143-10.857143 18.285715-7.428572t7.428571 18.285714v405.714286q2.285714-5.714286 7.428572-10.857143z\"  ></path></symbol><symbol id=\"icon-fast-forward\" viewBox=\"0 0 1024 1024\"><path d=\"M25.714286 943.428571q-10.857143 10.857143-18.285715 7.428572t-7.428571-18.285714V91.428571q0-14.857143 7.428571-18.285714t18.285715 7.428572l405.714285 405.714285q5.142857 5.142857 7.428572 10.857143V91.428571q0-14.857143 7.428571-18.285714t18.285715 7.428572l405.714285 405.714285q5.142857 5.142857 7.428572 10.857143V109.714286q0-14.857143 10.857143-25.714286t25.714285-10.857143h73.142857q14.857143 0 25.714286 10.857143t10.857143 25.714286v804.571428q0 14.857143-10.857143 25.714286t-25.714286 10.857143h-73.142857q-14.857143 0-25.714285-10.857143t-10.857143-25.714286V526.857143q-2.285714 5.714286-7.428572 10.857143l-405.714285 405.714285q-10.857143 10.857143-18.285715 7.428572t-7.428571-18.285714V526.857143q-2.285714 5.714286-7.428572 10.857143z\"  ></path></symbol><symbol id=\"icon-feed\" viewBox=\"0 0 1024 1024\"><path d=\"M320.374394 768q0 45.714286-32 77.714286t-77.714285 32-77.714286-32-32-77.714286 32-77.714286 77.714286-32 77.714285 32 32 77.714286z m292.571429 70.285714q1.142857 16-9.714286 27.428572-10.285714 12-26.857143 12H499.231537q-14.285714 0-24.571428-9.428572t-11.428572-23.714285q-12.571429-130.857143-105.428571-223.714286T134.08868 515.428571q-14.285714-1.142857-23.714286-11.428571T100.945823 479.428571V402.285714q0-16.571429 12-26.857143 9.714286-9.714286 24.571428-9.714285h2.857143q91.428571 7.428571 174.857143 46T463.231537 515.428571q65.142857 64.571429 103.714286 148t46 174.857143z m292.571428 1.142857q1.142857 15.428571-10.285714 26.857143-10.285714 11.428571-26.285714 11.428572h-81.714286q-14.857143 0-25.428571-10T750.660109 843.428571q-6.857143-122.857143-57.714286-233.428571t-132.285714-192-192-132.285714T135.231537 227.428571q-14.285714-0.571429-24.285714-11.142857T100.945823 191.428571V109.714286q0-16 11.428571-26.285715 10.285714-10.285714 25.142857-10.285714h1.714286q149.714286 7.428571 286.571429 68.571429T668.945823 309.714286q106.857143 106.285714 168 243.142857t68.571428 286.571428z\"  ></path></symbol><symbol id=\"icon-file-archive-o\" viewBox=\"0 0 1024 1024\"><path d=\"M417.357186 219.428571V146.285714H344.214329v73.142857h73.142857z m73.142857 73.142858V219.428571H417.357186v73.142858h73.142857zM417.357186 365.714286V292.571429H344.214329v73.142857h73.142857z m73.142857 73.142857V365.714286H417.357186v73.142857h73.142857z m400-221.714286q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H490.500043v73.142857H417.357186V73.142857H124.785757v877.714286h731.428572zM497.928614 538.857143l61.142857 199.428571q4.571429 15.428571 4.571429 29.714286 0 47.428571-41.428571 78.571429T417.357186 877.714286t-104.857143-31.142857T271.071471 768q0-14.285714 4.571429-29.714286 12-36 68.571429-226.285714V438.857143h73.142857v73.142857h45.142857q12.571429 0 22.285714 7.428571t13.142857 19.428572z m-80.571428 265.714286q30.285714 0 51.714285-10.857143t21.428572-25.714286-21.428572-25.714286-51.714285-10.857143-51.714286 10.857143-21.428571 25.714286 21.428571 25.714286 51.714286 10.857143z\"  ></path></symbol><symbol id=\"icon-female\" viewBox=\"0 0 1024 1024\"><path d=\"M877.714286 603.428571q0 22.857143-16 38.857143t-38.857143 16q-29.142857 0-45.714286-24.571428L647.428571 438.857143h-25.714285v75.428571l141.142857 234.857143q5.142857 8.571429 5.142857 18.857143 0 14.857143-10.857143 25.714286t-25.714286 10.857143H621.714286v155.428571q0 26.285714-18.857143 45.142857t-45.142857 18.857143H466.285714q-26.285714 0-45.142857-18.857143t-18.857143-45.142857v-155.428571H292.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286q0-10.285714 5.142857-18.857143l141.142857-234.857143V438.857143h-25.714285l-129.714286 194.857143q-16.571429 24.571429-45.714286 24.571428-22.857143 0-38.857143-16t-16-38.857143q0-16.571429 9.142857-30.285714l146.285715-219.428571q41.714286-61.142857 100.571428-61.142857h219.428572q58.857143 0 100.571428 61.142857l146.285715 219.428571q9.142857 13.714286 9.142857 30.285714zM640 146.285714q0 53.142857-37.428571 90.571429T512 274.285714t-90.571429-37.428571T384 146.285714t37.428571-90.571428T512 18.285714t90.571429 37.428572T640 146.285714z\"  ></path></symbol><symbol id=\"icon-file-audio-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572zM405.928614 485.714286q11.428571 4.571429 11.428572 17.142857v310.857143q0 12.571429-11.428572 17.142857-4.571429 1.142857-6.857143 1.142857-6.857143 0-13.142857-5.142857l-94.857143-95.428572H216.214329q-8 0-13.142858-5.142857t-5.142857-13.142857v-109.714286q0-8 5.142857-13.142857t13.142858-5.142857h74.857142l94.857143-95.428571q9.142857-8.571429 20-4z m238.285715 393.714285q17.714286 0 28.571428-13.714285 73.714286-90.857143 73.714286-207.428572t-73.714286-207.428571q-9.142857-12-24.571428-13.714286t-26.857143 8q-12 9.714286-13.428572 24.857143T616.214329 497.142857q57.142857 70.285714 57.142857 161.142857t-57.142857 161.142857q-9.714286 12-8.285715 27.142858T621.357186 870.857143q10.285714 8.571429 22.857143 8.571428z m-120.571429-84.571428q15.428571 0 26.857143-11.428572 49.714286-53.142857 49.714286-125.142857t-49.714286-125.142857q-10.285714-10.857143-25.714286-11.428571t-26.285714 9.714285-11.428572 25.428572 10.285715 26.571428q29.714286 32.571429 29.714285 74.857143t-29.714285 74.857143q-10.857143 11.428571-10.285715 26.571429t11.428572 25.428571q11.428571 9.714286 25.142857 9.714286z\"  ></path></symbol><symbol id=\"icon-fighter-jet\" viewBox=\"0 0 1097 1024\"><path d=\"M1097.142857 548.571429q-0.571429 18.285714-164.571428 54.857142l-201.142858 18.285715-128 36.571428h-36.571428l-167.428572 201.142857h39.428572q14.857143 0 25.714286 2.571429t10.857142 6.571429-10.857142 6.571428-25.714286 2.571429H256v-18.285715h36.571429v-237.714285H201.142857l-109.714286 128H36.571429l-18.285715-18.285715v-109.714285h18.285715v-18.285715h73.142857v-4.571428L0 585.142857V512l109.714286-13.714286v-4.571428H36.571429v-18.285715H18.285714V365.714286l18.285715-18.285715h54.857142l109.714286 128h91.428572V237.714286h-36.571429v-18.285715h182.857143q14.857143 0 25.714286 2.571429t10.857142 6.571429-10.857142 6.571428-25.714286 2.571429h-39.428572l167.428572 201.142857h36.571428l128 36.571428 201.142858 18.285715q73.142857 16 114.285714 29.714285t45.714286 19.428572z\"  ></path></symbol><symbol id=\"icon-fax\" viewBox=\"0 0 1024 1024\"><path d=\"M164.571429 219.428571q37.714286 0 64.571428 26.857143t26.857143 64.571429v621.714286q0 37.714286-26.857143 64.571428t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 932.571429V310.857143q0-37.714286 26.857143-64.571429t64.571428-26.857143h73.142858z m786.285714 93.142858q33.142857 19.428571 53.142857 53.142857t20 73.142857v438.857143q0 60.571429-42.857143 103.428571t-103.428571 42.857143H384q-37.714286 0-64.571429-26.857143t-26.857142-64.571428V54.857143q0-22.857143 16-38.857143t38.857142-16h384q22.857143 0 50.285715 11.428571t43.428571 27.428572l86.857143 86.857143q16 16 27.428571 43.428571t11.428572 50.285714v93.142858z m-420.571429 565.142857v-73.142857q0-8-5.142857-13.142858t-13.142857-5.142857H438.857143q-8 0-13.142857 5.142857t-5.142857 13.142858v73.142857q0 8 5.142857 13.142857t13.142857 5.142857h73.142857q8 0 13.142857-5.142857t5.142857-13.142857z m0-146.285715v-73.142857q0-8-5.142857-13.142857t-13.142857-5.142857H438.857143q-8 0-13.142857 5.142857t-5.142857 13.142857v73.142857q0 8 5.142857 13.142858t13.142857 5.142857h73.142857q8 0 13.142857-5.142857t5.142857-13.142858z m0-146.285714V512q0-8-5.142857-13.142857t-13.142857-5.142857H438.857143q-8 0-13.142857 5.142857t-5.142857 13.142857v73.142857q0 8 5.142857 13.142857t13.142857 5.142857h73.142857q8 0 13.142857-5.142857t5.142857-13.142857z m146.285715 292.571429v-73.142857q0-8-5.142858-13.142858t-13.142857-5.142857h-73.142857q-8 0-13.142857 5.142857t-5.142857 13.142858v73.142857q0 8 5.142857 13.142857t13.142857 5.142857h73.142857q8 0 13.142857-5.142857t5.142858-13.142857z m0-146.285715v-73.142857q0-8-5.142858-13.142857t-13.142857-5.142857h-73.142857q-8 0-13.142857 5.142857t-5.142857 13.142857v73.142857q0 8 5.142857 13.142858t13.142857 5.142857h73.142857q8 0 13.142857-5.142857t5.142858-13.142858z m0-146.285714V512q0-8-5.142858-13.142857t-13.142857-5.142857h-73.142857q-8 0-13.142857 5.142857t-5.142857 13.142857v73.142857q0 8 5.142857 13.142857t13.142857 5.142857h73.142857q8 0 13.142857-5.142857t5.142858-13.142857z m146.285714 292.571429v-73.142857q0-8-5.142857-13.142858t-13.142857-5.142857h-73.142858q-8 0-13.142857 5.142857t-5.142857 13.142858v73.142857q0 8 5.142857 13.142857t13.142857 5.142857h73.142858q8 0 13.142857-5.142857t5.142857-13.142857z m0-146.285715v-73.142857q0-8-5.142857-13.142857t-13.142857-5.142857h-73.142858q-8 0-13.142857 5.142857t-5.142857 13.142857v73.142857q0 8 5.142857 13.142858t13.142857 5.142857h73.142858q8 0 13.142857-5.142857t5.142857-13.142858z m0-146.285714V512q0-8-5.142857-13.142857t-13.142857-5.142857h-73.142858q-8 0-13.142857 5.142857t-5.142857 13.142857v73.142857q0 8 5.142857 13.142857t13.142857 5.142857h73.142858q8 0 13.142857-5.142857t5.142857-13.142857z m54.857143-219.428571V219.428571h-91.428572q-22.857143 0-38.857143-16t-16-38.857142V73.142857H365.714286v292.571429h512z\"  ></path></symbol><symbol id=\"icon-file-code-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572zM325.928614 438.857143q4.571429-6.285714 12-7.142857t13.714286 3.714285l29.142857 21.714286q6.285714 4.571429 7.142857 12t-3.714285 13.714286l-104 138.857143 104 138.857143q4.571429 6.285714 3.714285 13.714285t-7.142857 12l-29.142857 21.714286q-6.285714 4.571429-13.714286 3.714286t-12-7.142857l-129.142857-172q-8-10.857143 0-21.714286z m458.285715 172q8 10.857143 0 21.714286l-129.142858 172q-4.571429 6.285714-12 7.142857t-13.714285-3.714286l-29.142857-21.714286q-6.285714-4.571429-7.142858-12t3.714286-13.714285l104-138.857143-104-138.857143q-4.571429-6.285714-3.714286-13.714286t7.142858-12l29.142857-21.714286q6.285714-4.571429 13.714285-3.714285t12 7.142857z m-354.285715 263.428571q-7.428571-1.142857-11.714285-7.428571t-3.142858-13.714286l78.857143-474.857143q1.142857-7.428571 7.428572-11.714285t13.714285-3.142858l36 5.714286q7.428571 1.142857 11.714286 7.428572t3.142857 13.714285l-78.857143 474.857143q-1.142857 7.428571-7.428571 11.714286t-13.714286 3.142857z\"  ></path></symbol><symbol id=\"icon-file-movie-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572zM490.500043 438.857143q29.714286 0 51.428571 21.714286t21.714286 51.428571v219.428571q0 29.714286-21.714286 51.428572t-51.428571 21.714286H271.071471q-29.714286 0-51.428571-21.714286t-21.714286-51.428572V512q0-29.714286 21.714286-51.428571t51.428571-21.714286h219.428572z m281.142857 1.142857q11.428571 4.571429 11.428571 17.142857v329.142857q0 12.571429-11.428571 17.142857-4.571429 1.142857-6.857143 1.142858-8 0-13.142857-5.142858l-151.428571-152v-51.428571l151.428571-152q5.142857-5.142857 13.142857-5.142857 2.285714 0 6.857143 1.142857z\"  ></path></symbol><symbol id=\"icon-file-image-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572z m-73.142858-256v182.857143H197.928614v-109.714286l109.714286-109.714286 73.142857 73.142857 219.428572-219.428571z m-475.428571-109.714286q-45.714286 0-77.714286-32t-32-77.714286 32-77.714285 77.714286-32 77.714286 32 32 77.714285-32 77.714286-77.714286 32z\"  ></path></symbol><symbol id=\"icon-file-excel-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572z m-559.428572-133.714286v60.571429h160.571429v-60.571429h-42.857143l58.857143-92q2.857143-4 5.714285-9.428571t4.285715-7.714286 2-2.285714h1.142857q0.571429 2.285714 2.857143 5.714285 1.142857 2.285714 2.571428 4.285715t3.428572 4.571428 3.714285 4.857143l61.142858 92h-43.428572v60.571429h166.285714v-60.571429h-38.857142l-109.714286-156 111.428571-161.142857h38.285715V438.857143H524.785757v61.142857h42.285714l-58.857142 90.857143q-2.285714 4-5.714286 9.428571t-5.142857 7.714286l-1.142857 1.714286h-1.142858q-0.571429-2.285714-2.857142-5.714286-3.428571-6.285714-9.714286-13.142857L421.928614 500h43.428572V438.857143H299.6429v61.142857h38.857143l108 155.428571-110.857143 161.714286h-38.857143z\"  ></path></symbol><symbol id=\"icon-file-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572z\"  ></path></symbol><symbol id=\"icon-file-photo-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572z m-73.142858-256v182.857143H197.928614v-109.714286l109.714286-109.714286 73.142857 73.142857 219.428572-219.428571z m-475.428571-109.714286q-45.714286 0-77.714286-32t-32-77.714286 32-77.714285 77.714286-32 77.714286 32 32 77.714285-32 77.714286-77.714286 32z\"  ></path></symbol><symbol id=\"icon-file-pdf-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572z m-293.714286-338.857143q18.857143 14.857143 48 32 33.714286-4 66.857143-4 84 0 101.142857 28 9.142857 12.571429 1.142857 29.714286 0 0.571429-0.571429 1.142857l-1.142857 1.142857v0.571429q-3.428571 21.714286-40.571428 21.714285-27.428571 0-65.714286-11.428571t-74.285714-30.285714q-126.285714 13.714286-224 47.428571-87.428571 149.714286-138.285715 149.714286-8.571429 0-16-4l-13.714285-6.857143q-0.571429-0.571429-3.428572-2.857143-5.714286-5.714286-3.428571-20.571429 5.142857-22.857143 32-52.285714t75.428571-55.142857q8-5.142857 13.142857 3.428571 1.142857 1.142857 1.142858 2.285715 29.714286-48.571429 61.142857-112.571429 38.857143-77.714286 59.428571-149.714286-13.714286-46.857143-17.428571-91.142857T427.071471 315.428571q6.285714-22.857143 24-22.857142h12.571429q13.142857 0 20 8.571428 10.285714 12 5.142857 38.857143-1.142857 3.428571-2.285714 4.571429 0.571429 1.714286 0.571428 4.571428v17.142857q-1.142857 70.285714-8 109.714286 31.428571 93.714286 83.428572 136z m-329.142857 234.857143q29.714286-13.714286 78.285714-90.285714-29.142857 22.857143-50 48t-28.285714 42.285714z m227.428571-525.714286q-8.571429 24-1.142857 75.428572 0.571429-4 4-25.142858 0-1.714286 4-24.571428 0.571429-2.285714 2.285714-4.571429-0.571429-0.571429-0.571428-1.142857-0.571429-1.142857-0.571429-1.714286-0.571429-12.571429-7.428571-20.571428 0 0.571429-0.571429 1.142857v1.142857z m-70.857143 377.714286q77.142857-30.857143 162.285715-46.285714-1.142857-0.571429-7.428572-5.428572t-9.142857-7.714286q-43.428571-38.285714-72.571429-100.571428-15.428571 49.142857-47.428571 112.571428-17.142857 32-25.714286 47.428572z m369.142857-9.142857q-13.714286-13.714286-80-13.714286 43.428571 16 70.857143 16 8 0 10.285715-0.571429 0-0.571429-1.142858-1.714285z\"  ></path></symbol><symbol id=\"icon-file-picture-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572z m-73.142858-256v182.857143H197.928614v-109.714286l109.714286-109.714286 73.142857 73.142857 219.428572-219.428571z m-475.428571-109.714286q-45.714286 0-77.714286-32t-32-77.714286 32-77.714285 77.714286-32 77.714286 32 32 77.714285-32 77.714286-77.714286 32z\"  ></path></symbol><symbol id=\"icon-file-sound-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572zM405.928614 485.714286q11.428571 4.571429 11.428572 17.142857v310.857143q0 12.571429-11.428572 17.142857-4.571429 1.142857-6.857143 1.142857-6.857143 0-13.142857-5.142857l-94.857143-95.428572H216.214329q-8 0-13.142858-5.142857t-5.142857-13.142857v-109.714286q0-8 5.142857-13.142857t13.142858-5.142857h74.857142l94.857143-95.428571q9.142857-8.571429 20-4z m238.285715 393.714285q17.714286 0 28.571428-13.714285 73.714286-90.857143 73.714286-207.428572t-73.714286-207.428571q-9.142857-12-24.571428-13.714286t-26.857143 8q-12 9.714286-13.428572 24.857143T616.214329 497.142857q57.142857 70.285714 57.142857 161.142857t-57.142857 161.142857q-9.714286 12-8.285715 27.142858T621.357186 870.857143q10.285714 8.571429 22.857143 8.571428z m-120.571429-84.571428q15.428571 0 26.857143-11.428572 49.714286-53.142857 49.714286-125.142857t-49.714286-125.142857q-10.285714-10.857143-25.714286-11.428571t-26.285714 9.714285-11.428572 25.428572 10.285715 26.571428q29.714286 32.571429 29.714285 74.857143t-29.714285 74.857143q-10.857143 11.428571-10.285715 26.571429t11.428572 25.428571q11.428571 9.714286 25.142857 9.714286z\"  ></path></symbol><symbol id=\"icon-file-powerpoint-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572z m-566.857143-133.714286v60.571429h186.857143v-60.571429h-53.142858v-95.428571h78.285715q43.428571 0 67.428571-8.571429 38.285714-13.142857 60.857143-49.714286t22.571429-83.428571q0-46.285714-21.142858-80.571429t-57.142857-49.714285q-27.428571-10.857143-74.285714-10.857143H289.357186v61.142857h52.571428v317.142857h-52.571428z m201.714285-160H423.071471V504h68.571429q29.714286 0 47.428571 10.285714 32 18.857143 32 65.714286 0 50.857143-35.428571 68.571429-17.714286 8.571429-44.571429 8.571428z\"  ></path></symbol><symbol id=\"icon-file-text\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 272q8 8 16 20.571429h-269.714286V22.857143q12.571429 8 20.571429 16zM618.500043 365.714286h310.857143v603.428571q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h457.142857v310.857143q0 22.857143 16 38.857143t38.857143 16z m91.428571 420.571428v-36.571428q0-8-5.142857-13.142857t-13.142857-5.142858H289.357186q-8 0-13.142857 5.142858t-5.142858 13.142857v36.571428q0 8 5.142858 13.142857t13.142857 5.142858h402.285714q8 0 13.142857-5.142858t5.142857-13.142857z m0-146.285714v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857H289.357186q-8 0-13.142857 5.142857t-5.142858 13.142857v36.571429q0 8 5.142858 13.142857t13.142857 5.142857h402.285714q8 0 13.142857-5.142857t5.142857-13.142857z m0-146.285714v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857H289.357186q-8 0-13.142857 5.142857t-5.142858 13.142857v36.571429q0 8 5.142858 13.142857t13.142857 5.142857h402.285714q8 0 13.142857-5.142857t5.142857-13.142857z\"  ></path></symbol><symbol id=\"icon-file-text-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572zM271.071471 457.142857q0-8 5.142858-13.142857t13.142857-5.142857h402.285714q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H289.357186q-8 0-13.142857-5.142857t-5.142858-13.142857v-36.571429z m420.571429 128q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H289.357186q-8 0-13.142857-5.142857t-5.142858-13.142857v-36.571429q0-8 5.142858-13.142857t13.142857-5.142857h402.285714z m0 146.285714q8 0 13.142857 5.142858t5.142857 13.142857v36.571428q0 8-5.142857 13.142857t-13.142857 5.142858H289.357186q-8 0-13.142857-5.142858t-5.142858-13.142857v-36.571428q0-8 5.142858-13.142857t13.142857-5.142858h402.285714z\"  ></path></symbol><symbol id=\"icon-file\" viewBox=\"0 0 1024 1024\"><path d=\"M636.785757 292.571429V22.857143q12.571429 8 20.571429 16l233.142857 233.142857q8 8 16 20.571429h-269.714286z m-73.142857 18.285714q0 22.857143 16 38.857143t38.857143 16h310.857143v603.428571q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h457.142857v310.857143z\"  ></path></symbol><symbol id=\"icon-file-video-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572zM490.500043 438.857143q29.714286 0 51.428571 21.714286t21.714286 51.428571v219.428571q0 29.714286-21.714286 51.428572t-51.428571 21.714286H271.071471q-29.714286 0-51.428571-21.714286t-21.714286-51.428572V512q0-29.714286 21.714286-51.428571t51.428571-21.714286h219.428572z m281.142857 1.142857q11.428571 4.571429 11.428571 17.142857v329.142857q0 12.571429-11.428571 17.142857-4.571429 1.142857-6.857143 1.142858-8 0-13.142857-5.142858l-151.428571-152v-51.428571l151.428571-152q5.142857-5.142857 13.142857-5.142857 2.285714 0 6.857143 1.142857z\"  ></path></symbol><symbol id=\"icon-files-o\" viewBox=\"0 0 1024 1024\"><path d=\"M969.142857 219.428571q22.857143 0 38.857143 16t16 38.857143v694.857143q0 22.857143-16 38.857143t-38.857143 16H420.571429q-22.857143 0-38.857143-16t-16-38.857143v-164.571428H54.857143q-22.857143 0-38.857143-16t-16-38.857143V365.714286q0-22.857143 11.428571-50.285715t27.428572-43.428571L272 38.857143q16-16 43.428571-27.428572t50.285715-11.428571h237.714285q22.857143 0 38.857143 16t16 38.857143v187.428571q38.857143-22.857143 73.142857-22.857143h237.714286z m-310.857143 121.714286L487.428571 512h170.857143V341.142857zM292.571429 121.714286L121.714286 292.571429h170.857143V121.714286z m112 369.714285l180.571428-180.571428V73.142857H365.714286v237.714286q0 22.857143-16 38.857143t-38.857143 16H73.142857v365.714285h292.571429v-146.285714q0-22.857143 11.428571-50.285714t27.428572-43.428572z m546.285714 459.428572V292.571429h-219.428572v237.714285q0 22.857143-16 38.857143t-38.857142 16H438.857143v365.714286h512z\"  ></path></symbol><symbol id=\"icon-file-zip-o\" viewBox=\"0 0 1024 1024\"><path d=\"M417.357186 219.428571V146.285714H344.214329v73.142857h73.142857z m73.142857 73.142858V219.428571H417.357186v73.142858h73.142857zM417.357186 365.714286V292.571429H344.214329v73.142857h73.142857z m73.142857 73.142857V365.714286H417.357186v73.142857h73.142857z m400-221.714286q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H490.500043v73.142857H417.357186V73.142857H124.785757v877.714286h731.428572zM497.928614 538.857143l61.142857 199.428571q4.571429 15.428571 4.571429 29.714286 0 47.428571-41.428571 78.571429T417.357186 877.714286t-104.857143-31.142857T271.071471 768q0-14.285714 4.571429-29.714286 12-36 68.571429-226.285714V438.857143h73.142857v73.142857h45.142857q12.571429 0 22.285714 7.428571t13.142857 19.428572z m-80.571428 265.714286q30.285714 0 51.714285-10.857143t21.428572-25.714286-21.428572-25.714286-51.714285-10.857143-51.714286 10.857143-21.428571 25.714286 21.428571 25.714286 51.714286 10.857143z\"  ></path></symbol><symbol id=\"icon-file-word-o\" viewBox=\"0 0 1024 1024\"><path d=\"M890.500043 217.142857q16 16 27.428571 43.428572t11.428572 50.285714v658.285714q0 22.857143-16 38.857143t-38.857143 16H106.500043q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T106.500043 0h512q22.857143 0 50.285714 11.428571t43.428572 27.428572z m-253.714286-139.428571v214.857143h214.857143q-5.714286-16.571429-12.571429-23.428572l-178.857142-178.857143q-6.857143-6.857143-23.428572-12.571428z m219.428572 873.142857V365.714286H618.500043q-22.857143 0-38.857143-16t-16-38.857143V73.142857H124.785757v877.714286h731.428572zM184.785757 438.857143v61.142857h40l93.714286 377.714286h90.857143l73.142857-277.142857q4-11.428571 5.714286-26.285715 1.142857-9.142857 1.142857-13.714285h2.285714l1.714286 13.714285q0.571429 1.714286 2 11.428572t3.142857 14.857143l73.142857 277.142857h90.857143l93.714286-377.714286h40V438.857143h-171.428572v61.142857h51.428572l-56.571429 250.285714q-2.857143 11.428571-4 26.285715l-1.142857 12h-2.285714q0-1.714286-0.285715-3.714286t-0.857143-4.571429-0.571428-3.714285q-0.571429-2.857143-2.285714-12t-2.857143-14.285715L523.071471 438.857143H457.928614l-82.285714 311.428571q-1.142857 5.142857-2.571429 14T371.071471 776.571429l-2.285714 12h-2.285714l-1.142857-12q-1.142857-14.857143-4-26.285715l-56.571429-250.285714h51.428572V438.857143H184.785757z\"  ></path></symbol><symbol id=\"icon-film\" viewBox=\"0 0 1097 1024\"><path d=\"M219.305782 913.774093v-73.101928q0-14.848829-10.851067-25.699896t-25.699896-10.851068H109.652891q-14.848829 0-25.699896 10.851068t-10.851068 25.699896v73.101928q0 14.848829 10.851068 25.699896t25.699896 10.851067h73.101928q14.848829 0 25.699896-10.851067t10.851067-25.699896z m0-219.305783v-73.101927q0-14.848829-10.851067-25.699896t-25.699896-10.851068H109.652891q-14.848829 0-25.699896 10.851068t-10.851068 25.699896v73.101927q0 14.848829 10.851068 25.699897t25.699896 10.851067h73.101928q14.848829 0 25.699896-10.851067t10.851067-25.699897z m0-219.305782V402.060601q0-14.848829-10.851067-25.699897t-25.699896-10.851067H109.652891q-14.848829 0-25.699896 10.851067t-10.851068 25.699897v73.101927q0 14.848829 10.851068 25.699896t25.699896 10.851068h73.101928q14.848829 0 25.699896-10.851068t10.851067-25.699896z m584.815419 438.611565v-292.40771q0-14.848829-10.851067-25.699896t-25.699896-10.851068H328.958673q-14.848829 0-25.699896 10.851068t-10.851067 25.699896v292.40771q0 14.848829 10.851067 25.699896t25.699896 10.851067h438.611565q14.848829 0 25.699896-10.851067t10.851067-25.699896zM219.305782 255.856746V182.754819q0-14.848829-10.851067-25.699897t-25.699896-10.851067H109.652891q-14.848829 0-25.699896 10.851067t-10.851068 25.699897v73.101927q0 14.848829 10.851068 25.699896t25.699896 10.851068h73.101928q14.848829 0 25.699896-10.851068t10.851067-25.699896z m804.121202 657.917347v-73.101928q0-14.848829-10.851068-25.699896t-25.699896-10.851068h-73.101927q-14.848829 0-25.699897 10.851068t-10.851067 25.699896v73.101928q0 14.848829 10.851067 25.699896t25.699897 10.851067h73.101927q14.848829 0 25.699896-10.851067t10.851068-25.699896z m-219.305783-438.611565V182.754819q0-14.848829-10.851067-25.699897t-25.699896-10.851067H328.958673q-14.848829 0-25.699896 10.851067t-10.851067 25.699897v292.407709q0 14.848829 10.851067 25.699896t25.699896 10.851068h438.611565q14.848829 0 25.699896-10.851068t10.851067-25.699896z m219.305783 219.305782v-73.101927q0-14.848829-10.851068-25.699896t-25.699896-10.851068h-73.101927q-14.848829 0-25.699897 10.851068t-10.851067 25.699896v73.101927q0 14.848829 10.851067 25.699897t25.699897 10.851067h73.101927q14.848829 0 25.699896-10.851067t10.851068-25.699897z m0-219.305782V402.060601q0-14.848829-10.851068-25.699897t-25.699896-10.851067h-73.101927q-14.848829 0-25.699897 10.851067t-10.851067 25.699897v73.101927q0 14.848829 10.851067 25.699896t25.699897 10.851068h73.101927q14.848829 0 25.699896-10.851068t10.851068-25.699896z m0-219.305782V182.754819q0-14.848829-10.851068-25.699897t-25.699896-10.851067h-73.101927q-14.848829 0-25.699897 10.851067t-10.851067 25.699897v73.101927q0 14.848829 10.851067 25.699896t25.699897 10.851068h73.101927q14.848829 0 25.699896-10.851068t10.851068-25.699896z m73.101927-91.377409v767.570237q0 37.693181-26.842114 64.535296t-64.535295 26.842114H91.377409q-37.693181 0-64.535295-26.842114T0 932.049574V164.479337q0-37.693181 26.842114-64.535296t64.535295-26.842114h913.774093q37.693181 0 64.535295 26.842114t26.842114 64.535296z\"  ></path></symbol><symbol id=\"icon-filter\" viewBox=\"0 0 1024 1024\"><path d=\"M911.428571 168.571429q9.714286 23.428571-8 40L621.714286 490.285714v424q0 24-22.285715 33.714286-7.428571 2.857143-14.285714 2.857143-15.428571 0-25.714286-10.857143l-146.285714-146.285714q-10.857143-10.857143-10.857143-25.714286V490.285714L120.571429 208.571429q-17.714286-16.571429-8-40 9.714286-22.285714 33.714285-22.285715h731.428572q24 0 33.714285 22.285715z\"  ></path></symbol><symbol id=\"icon-fire\" viewBox=\"0 0 1024 1024\"><path d=\"M869.280537 969.142857v36.571429q0 7.428571-5.428571 12.857143t-12.857143 5.428571H82.994823q-7.428571 0-12.857143-5.428571T64.709109 1005.714286v-36.571429q0-7.428571 5.428571-12.857143T82.994823 950.857143h768q7.428571 0 12.857143 5.428571t5.428571 12.857143zM722.994823 365.714286q0 44.571429-14 82.285714t-36.571429 64.285714-50 50.285715-54.857143 44.285714-50 41.142857-36.571428 46.571429T466.994823 749.714286q0 54.857143 38.285714 128l-2.285714-0.571429 0.571428 0.571429q-51.428571-23.428571-91.428571-47.428572t-79.142857-57.142857T268.13768 703.142857 226.709109 617.142857 210.994823 512q0-44.571429 14-82.285714t36.571428-64.285715 50-50.285714 54.857143-44.285714 50-41.142857 36.571429-46.571429T466.994823 128q0-53.714286-37.714286-128l1.714286 0.571429-0.571429-0.571429q51.428571 23.428571 91.428572 47.428571t79.142857 57.142858T665.851966 174.571429t41.428571 86 15.714286 105.142857z\"  ></path></symbol><symbol id=\"icon-fire-extinguisher\" viewBox=\"0 0 1024 1024\"><path d=\"M402.285714 109.714286q0-14.857143-10.857143-25.714286t-25.714285-10.857143-25.714286 10.857143-10.857143 25.714286 10.857143 25.714285 25.714286 10.857143 25.714285-10.857143 10.857143-25.714285z m512-18.285715v182.857143q0 9.142857-6.857143 14.285715-4.571429 4-11.428571 4-2.285714 0-4-0.571429l-256-54.857143q-6.285714-1.142857-10.285714-6.285714t-4-11.428572H475.428571v58.285715q63.428571 13.142857 104.857143 63.428571T621.714286 457.142857v457.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H292.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V457.142857q0-60.571429 35.714286-108.857143T384 282.857143V219.428571h-18.285714q-33.714286 0-65.714286 13.428572t-52.285714 30.285714-37.714286 38-23.142857 30.571429-8 14q-9.714286 20-32.571429 20-9.142857 0-16.571428-4-13.142857-6.857143-18-21.142857T113.714286 312.571429q2.857143-5.714286 8.285714-14.857143T143.428571 267.142857t34.571429-40 48.571429-38.285714T288.571429 158.857143q-14.285714-24-14.285715-49.142857 0-37.714286 26.857143-64.571429t64.571429-26.857143 64.571428 26.857143 26.857143 64.571429q0 18.857143-8 36.571428h172.571429q0-6.285714 4-11.428571t10.285714-6.285714l256-54.857143q1.714286-0.571429 4-0.571429 6.857143 0 11.428571 4 6.857143 5.142857 6.857143 14.285714z\"  ></path></symbol><symbol id=\"icon-flag-checkered\" viewBox=\"0 0 1024 1024\"><path d=\"M475.428571 571.428571V461.714286q-103.428571 9.142857-219.428571 66.857143v105.714285q117.142857-54.857143 219.428571-62.857143z m0-238.857142V220q-98.285714 4.571429-219.428571 72v108q122.857143-63.428571 219.428571-67.428571z m475.428572 264.571428V492q-134.285714 66.285714-219.428572 40.571429V404.571429q-11.428571-3.428571-22.285714-8.571429-2.857143-1.714286-18.857143-9.714286t-19.714285-9.714285-18-8.571429-19.714286-8.857143-18.571429-7.428571-20.571428-7.142857-20-4.857143-22.571429-4.285715-22.571428-2.285714-25.142858-1.142857q-13.142857 0-28 1.714286v126.857143h10.857143q58.285714 0 110 16.571428t112.857143 46.857143q10.857143 5.142857 22.285714 8.571429v107.428571q24 9.714286 52 9.714286 68.571429 0 167.428572-52.571429z m0-244V245.142857q-96.571429 52-174.857143 52-25.714286 0-44.571429-4.571428v112q84.571429 24 219.428572-51.428572zM182.857143 146.285714q0 20-10 36.571429T146.285714 209.142857v723.428572q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857V209.142857q-16.571429-9.714286-26.571428-26.285714T36.571429 146.285714q0-30.285714 21.428571-51.714285T109.714286 73.142857t51.714285 21.428572T182.857143 146.285714z m841.142857 36.571429v436q0 22.285714-20 32.571428-5.714286 2.857143-9.714286 5.142858-124.571429 66.285714-210.857143 66.285714-50.285714 0-90.285714-20l-16-8q-36.571429-18.857143-56.571428-27.428572t-52-16.571428-65.142858-8q-58.285714 0-134.571428 25.142857T238.285714 726.285714q-8.571429 5.142857-18.857143 5.142857-9.142857 0-18.285714-4.571428-18.285714-10.857143-18.285714-32V270.857143q0-20 17.714286-31.428572 20-12 44.857142-24.285714t65.142858-29.714286T397.714286 157.142857t88.571428-10.857143q64 0 119.428572 17.714286t119.428571 49.142857q21.714286 10.857143 50.857143 10.857143 69.714286 0 177.142857-64 12.571429-6.857143 17.714286-9.714286 17.714286-9.142857 35.428571 1.142857 17.714286 11.428571 17.714286 31.428572z\"  ></path></symbol><symbol id=\"icon-firefox\" viewBox=\"0 0 1024 1024\"><path d=\"M516 1024q-161.714286 0-288.285714-86T39.428571 710.285714Q6.285714 635.428571 1.142857 538.285714t14.857143-190 63.428571-178.285714T181.714286 31.428571l-6.285715 160.571429q6.285714-8 38.857143-8.857143t40 8.857143q24-46.285714 91.714286-78.857143T480 79.428571q-30.857143 25.714286-68.285714 84.857143T378.285714 257.714286q14.285714 4.571429 35.714286 7.714285t36 4.285715 38.857143 2.285714 28.857143 1.714286q8.571429 2.857143 5.428571 26T505.714286 342.857143q-2.857143 4-9.428572 10.571428T464 373.714286t-57.714286 19.428571l8.571429 108-79.428572-38.285714q-10.285714 24.571429-4.285714 46.571428t20.571429 38 37.428571 23.714286 46.285714 3.714286q29.142857-5.142857 56-19.714286t47.714286-25.714286T581.142857 519.428571q34.857143 2.285714 51.142857 18.857143t11.142857 37.142857q-0.571429 1.142857-1.428571 3.142858t-4.857143 7.142857-10.285714 8.857143-18 6-26.571429 0.571428q-34.285714 54.285714-82.571428 77.428572T380 695.428571q42.285714 34.857143 92.857143 47.142858t96.285714 3.428571 88.285714-29.714286 73.142858-50 46-59.428571q24.571429-52 22.285714-110T777.428571 389.142857 732.571429 317.714286q49.714286 21.714286 78.285714 45.428571t44 64.285714q8.571429-97.142857-32.857143-196T702.285714 69.142857q151.428571 44 235.428572 159.714286T1024 524.571429q1.142857 72.571429-23.142857 145.714285T930.285714 806.285714t-108 112-141.428571 77.428572T516 1024z\"  ></path></symbol><symbol id=\"icon-first-order\" viewBox=\"0 0 1024 1024\"><path d=\"M828.571429 512q0 25.714286-2.857143 43.428571l-134.857143-8 128 44.571429q-10.857143 41.714286-33.142857 80.571429l-122.285715-58.857143 101.142858 90.285714q-25.142857 34.857143-61.142858 61.714286l-89.714285-101.714286 58.857143 122.857143q-34.857143 21.142857-80 33.714286l-45.142858-130.285715 8 137.142857q-21.714286 3.428571-43.428571 3.428572t-43.428571-3.428572l8-136-44.571429 129.142858q-42.285714-10.857143-80-33.714286l58.857143-122.857143-89.714286 101.714286q-33.714286-24.571429-61.714286-61.714286l101.714286-90.285714-122.285714 59.428571q-22.285714-39.428571-33.142857-80.571428l128-45.142858-135.428572 8q-2.857143-24-2.857143-43.428571 0-20 2.857143-44l136 8-128.571428-45.142857q10.857143-41.714286 33.142857-80l122.285714 59.428571-101.142857-90.857143q26.285714-34.857143 61.142857-61.714285l90.285714 101.714285-58.857142-122.857142q38.285714-22.285714 80-33.142858l44 128-7.428572-134.857142q20.571429-3.428571 42.857143-3.428572 21.714286 0 43.428571 3.428572l-8 135.428571 44.571429-128.571429q42.285714 10.857143 80 33.714286L613.142857 359.428571l90.285714-101.714285q34.857143 26.857143 61.142858 61.714285l-101.142858 90.857143 121.714286-59.428571q21.142857 35.428571 33.142857 80.571428l-128 44.571429 135.428572-8q2.857143 17.714286 2.857143 44z m17.142857 0q0-91.428571-44.857143-168.857143t-121.714286-122.285714T512 176q-68 0-129.714286 26.571429t-106.571428 71.428571T204.571429 381.142857t-26.285715 130.857143q0 68 26.285715 130.285714t71.142857 107.142857 106.571428 71.428572 129.714286 26.571428q90.285714 0 167.142857-44.857142t121.714286-122.285715T845.714286 512z m41.714285-218.857143v437.714286l-375.428571 218.857143-375.428571-218.857143V293.142857l375.428571-218.857143zM512 982.285714l404.571429-235.428571V276.571429L512 41.714286 107.428571 276.571429v470.285714z m438.857143-726.285714v512l-438.857143 256L73.142857 768V256L512 0z\"  ></path></symbol><symbol id=\"icon-flash\" viewBox=\"0 0 1024 1024\"><path d=\"M739.412991 323.428571q10.285714 11.428571 4 25.142858L434.841563 1009.714286q-7.428571 14.285714-24 14.285714-2.285714 0-8-1.142857-9.714286-2.857143-14.571429-10.857143t-2.571428-17.142857l112.571428-461.714286-232 57.714286q-2.285714 0.571429-6.857143 0.571428-10.285714 0-17.714285-6.285714-10.285714-8.571429-7.428572-22.285714l114.857143-471.428572q2.285714-8 9.142857-13.142857t16-5.142857h187.428572q10.857143 0 18.285714 7.142857t7.428571 16.857143q0 4.571429-2.857142 10.285714L486.841563 372l226.285714-56q4.571429-1.142857 6.857143-1.142857 10.857143 0 19.428571 8.571428z\"  ></path></symbol><symbol id=\"icon-flag\" viewBox=\"0 0 1024 1024\"><path d=\"M182.857143 146.285714q0 41.142857-36.571429 62.857143v723.428572q0 7.428571-5.428571 12.857142T128 950.857143h-36.571429q-7.428571 0-12.857142-5.428572T73.142857 932.571429V209.142857q-36.571429-21.714286-36.571428-62.857143 0-30.285714 21.428571-51.714285T109.714286 73.142857t51.714285 21.428572T182.857143 146.285714z m841.142857 36.571429v436q0 14.285714-7.142857 22T994.285714 656.571429q-122.857143 66.285714-210.857143 66.285714-34.857143 0-70.571428-12.571429t-62-27.428571-66-27.428572-81.428572-12.571428q-109.714286 0-265.142857 83.428571-9.714286 5.142857-18.857143 5.142857-14.857143 0-25.714285-10.857142t-10.857143-25.714286V270.857143q0-18.285714 17.714286-31.428572 12-8 45.142857-24.571428 134.857143-68.571429 240.571428-68.571429 61.142857 0 114.285715 16.571429t125.142857 50.285714q21.714286 10.857143 50.285714 10.857143 30.857143 0 67.142857-12t62.857143-26.857143 50.285714-26.857143 31.142857-12q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-flag-o\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 597.142857V245.142857q-96.571429 52-174.857143 52-46.857143 0-82.857143-18.285714-57.142857-28-105.142857-43.714286T486.285714 219.428571q-98.857143 0-230.285714 72.571429v342.285714q140-64.571429 247.428571-64.571428 31.428571 0 59.142858 4.285714t56 14.857143 44 17.714286 47.142857 22.571428l16 8q25.142857 12.571429 57.714285 12.571429 68.571429 0 167.428572-52.571429zM182.857143 146.285714q0 20-10 36.571429T146.285714 209.142857v723.428572q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857V209.142857q-16.571429-9.714286-26.571428-26.285714T36.571429 146.285714q0-30.285714 21.428571-51.714285T109.714286 73.142857t51.714285 21.428572T182.857143 146.285714z m841.142857 36.571429v436q0 22.285714-20 32.571428-5.714286 2.857143-9.714286 5.142858-124.571429 66.285714-210.857143 66.285714-50.285714 0-90.285714-20l-16-8q-36.571429-18.857143-56.571428-27.428572t-52-16.571428-65.142858-8q-58.285714 0-134.571428 25.142857T238.285714 726.285714q-8.571429 5.142857-18.857143 5.142857-9.142857 0-18.285714-4.571428-18.285714-10.857143-18.285714-32V270.857143q0-20 17.714286-31.428572 20-12 44.857142-24.285714t65.142858-29.714286T397.714286 157.142857t88.571428-10.857143q64 0 119.428572 17.714286t119.428571 49.142857q21.714286 10.857143 50.857143 10.857143 69.714286 0 177.142857-64 12.571429-6.857143 17.714286-9.714286 17.714286-9.142857 35.428571 1.142857 17.714286 11.428571 17.714286 31.428572z\"  ></path></symbol><symbol id=\"icon-flask\" viewBox=\"0 0 1024 1024\"><path d=\"M909.142857 827.428571q32 50.857143 12.285714 87.142858T841.142857 950.857143H182.857143q-60.571429 0-80.285714-36.285714T114.857143 827.428571l287.428571-453.142857V146.285714h-36.571428q-14.857143 0-25.714286-10.857143t-10.857143-25.714285 10.857143-25.714286 25.714286-10.857143h292.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286-10.857143 25.714285-25.714286 10.857143h-36.571428v228zM464 413.142857l-155.428571 245.142857h406.857142L560 413.142857l-11.428571-17.714286V146.285714H475.428571v249.142857z\"  ></path></symbol><symbol id=\"icon-flickr\" viewBox=\"0 0 1024 1024\"><path d=\"M786.285714 73.142857q68 0 116.285715 48.285714T950.857143 237.714286v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428zM472 512q0-50.285714-35.428571-85.714286t-85.714286-35.428571-85.714286 35.428571-35.428571 85.714286 35.428571 85.714286 85.714286 35.428571 85.714286-35.428571 35.428571-85.714286z m322.285714 0q0-50.285714-35.428571-85.714286t-85.714286-35.428571-85.714286 35.428571-35.428571 85.714286 35.428571 85.714286 85.714286 35.428571 85.714286-35.428571 35.428571-85.714286z\"  ></path></symbol><symbol id=\"icon-folder-open\" viewBox=\"0 0 1097 1024\"><path d=\"M1073.714286 544q0 17.714286-17.714286 37.714286l-192 226.285714q-24.571429 29.142857-68.857143 49.428571T713.142857 877.714286H91.428571q-19.428571 0-34.571428-7.428572T41.714286 845.714286q0-17.714286 17.714285-37.714286l192-226.285714q24.571429-29.142857 68.857143-49.428572T402.285714 512h621.714286q19.428571 0 34.571429 7.428571t15.142857 24.571429z m-196-196.571429v91.428572H402.285714q-53.714286 0-112.571428 27.142857T196 534.285714L3.428571 760.571429l-2.857142 3.428571q0-2.285714-0.285715-7.142857T0 749.714286V201.142857q0-52.571429 37.714286-90.285714t90.285714-37.714286h182.857143q52.571429 0 90.285714 37.714286t37.714286 90.285714v18.285714h310.857143q52.571429 0 90.285714 37.714286t37.714286 90.285714z\"  ></path></symbol><symbol id=\"icon-folder-o\" viewBox=\"0 0 1024 1024\"><path d=\"M914.285714 749.714286V347.428571q0-22.857143-16-38.857142t-38.857143-16H457.142857q-22.857143 0-38.857143-16t-16-38.857143v-36.571429q0-22.857143-16-38.857143t-38.857143-16H164.571429q-22.857143 0-38.857143 16t-16 38.857143v548.571429q0 22.857143 16 38.857143t38.857143 16h694.857142q22.857143 0 38.857143-16t16-38.857143z m73.142857-402.285715v402.285715q0 52.571429-37.714285 90.285714t-90.285715 37.714286H164.571429q-52.571429 0-90.285715-37.714286T36.571429 749.714286V201.142857q0-52.571429 37.714285-90.285714t90.285715-37.714286h182.857142q52.571429 0 90.285715 37.714286t37.714285 90.285714v18.285714h384q52.571429 0 90.285715 37.714286t37.714285 90.285714z\"  ></path></symbol><symbol id=\"icon-font-awesome\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 292.571429v479.428571q0 27.428571-28 35.428571-99.428571 29.714286-193.142857 29.714286-41.714286 0-123.142857-16.857143T476.571429 803.428571q-93.714286 0-211.428572 27.428572v193.142857H173.714286V242.285714q-36-14.285714-57.714286-46.285714T94.285714 125.142857q0-52 36.571429-88.571428T219.428571 0t88.571429 36.571429 36.571429 88.571428q0 38.857143-21.714286 70.857143t-57.714286 46.285714v38.857143q108.571429-25.142857 196-25.142857 56.571429 0 113.142857 8.571429 8 1.142857 63.714286 12.857142T723.428571 289.142857q44 0 94.285715-10.285714 6.285714-1.142857 45.714285-12t50.857143-10.857143q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-folder\" viewBox=\"0 0 1024 1024\"><path d=\"M987.428571 347.428571v402.285715q0 52.571429-37.714285 90.285714t-90.285715 37.714286H164.571429q-52.571429 0-90.285715-37.714286T36.571429 749.714286V201.142857q0-52.571429 37.714285-90.285714t90.285715-37.714286h182.857142q52.571429 0 90.285715 37.714286t37.714285 90.285714v18.285714h384q52.571429 0 90.285715 37.714286t37.714285 90.285714z\"  ></path></symbol><symbol id=\"icon-floppy-o\" viewBox=\"0 0 1024 1024\"><path d=\"M287.026374 877.714286h438.857143v-219.428572H287.026374v219.428572z m512 0h73.142857V365.714286q0-8-5.714285-22t-11.428572-19.714286l-160.571428-160.571429q-5.714286-5.714286-19.428572-11.428571t-22.285714-5.714286v237.714286q0 22.857143-16 38.857143t-38.857143 16H268.74066q-22.857143 0-38.857143-16t-16-38.857143V146.285714H140.74066v731.428572h73.142857v-237.714286q0-22.857143 16-38.857143t38.857143-16h475.428571q22.857143 0 38.857143 16t16 38.857143v237.714286zM579.597803 347.428571V164.571429q0-7.428571-5.428572-12.857143T561.312089 146.285714H451.597803q-7.428571 0-12.857143 5.428572T433.312089 164.571429v182.857142q0 7.428571 5.428571 12.857143T451.597803 365.714286h109.714286q7.428571 0 12.857142-5.428572T579.597803 347.428571z m365.714286 18.285715v530.285714q0 22.857143-16 38.857143t-38.857143 16H122.454946q-22.857143 0-38.857143-16t-16-38.857143V128q0-22.857143 16-38.857143t38.857143-16h530.285714q22.857143 0 50.285714 11.428572t43.428572 27.428571l160 160q16 16 27.428571 43.428571t11.428572 50.285715z\"  ></path></symbol><symbol id=\"icon-folder-open-o\" viewBox=\"0 0 1097 1024\"><path d=\"M1017.714286 532q0-20-30.285715-20H365.714286q-22.857143 0-48.857143 12.285714T276 554.285714l-168 207.428572q-10.285714 13.714286-10.285714 22.857143 0 20 30.285714 20h621.714286q22.857143 0 49.142857-12.571429t40.571428-30.285714l168-207.428572q10.285714-12.571429 10.285715-22.285714zM365.714286 438.857143h438.857143V347.428571q0-22.857143-16-38.857142t-38.857143-16H420.571429q-22.857143 0-38.857143-16t-16-38.857143v-36.571429q0-22.857143-16-38.857143t-38.857143-16H128q-22.857143 0-38.857143 16t-16 38.857143v487.428572l146.285714-180q25.142857-30.285714 66.285715-50T365.714286 438.857143z m725.142857 93.142857q0 35.428571-26.285714 68.571429l-168.571429 207.428571q-24.571429 30.285714-66.285714 50t-80 19.714286H128q-52.571429 0-90.285714-37.714286T0 749.714286V201.142857q0-52.571429 37.714286-90.285714t90.285714-37.714286h182.857143q52.571429 0 90.285714 37.714286t37.714286 90.285714v18.285714h310.857143q52.571429 0 90.285714 37.714286t37.714286 90.285714v91.428572h109.714285q30.857143 0 56.571429 14t38.285714 40.285714q8.571429 18.285714 8.571429 38.857143z\"  ></path></symbol><symbol id=\"icon-fonticons\" viewBox=\"0 0 1024 1024\"><path d=\"M73.142857 73.142857h877.714286v877.714286H73.142857V73.142857z m518.857143 182.857143l-6.857143 18.857143 42.857143 47.428571-17.714286 65.142857 14.285715 14.285715 61.142857-32.571429 61.142857 32.571429 14.285714-14.285715-17.714286-65.142857 42.857143-47.428571-6.857143-18.857143h-54.285714l-30.285714-54.857143h-18.285714l-30.285715 54.857143h-54.285714zM439.428571 349.142857q18.285714 0 25.428572 9.142857t6.571428 36l99.428572-12q0-31.428571-10-52.857143t-28.857143-32-39.428571-14.571428-48.571429-4q-76 0-113.714286 32.857143T292.571429 416v41.142857h-54.857143v73.142857h43.428571q11.428571 0 11.428572 4.571429v218.285714q0 8-2.857143 11.428572t-10.285715 4l-41.714285 4v50.285714h256v-49.142857l-85.142857-8q-3.428571-0.571429-4.857143-0.857143t-2-1.428572-0.285715-2.285714 0.571429-4 0.285714-5.714286V530.285714h109.142857l21.714286-73.142857H401.142857q-3.428571 0-1.142857-3.428571t2.285714-5.142857v-45.714286q0-15.428571 0.857143-23.142857t4.285714-16 11.142858-11.428572T439.428571 349.142857z m346.857143 473.714286v-49.142857l-30.857143-5.142857q-4-0.571429-5.428571-1.428572t-1.428571-1.714286 0.571428-4.285714 0.571429-6.857143V457.142857H592.571429l-13.142858 57.714286 47.428572 12.571428q13.142857 4 13.142857 15.428572v211.428571q0 8-3.428571 10.571429t-11.428572 3.714286l-40 5.142857v49.142857h201.142857z\"  ></path></symbol><symbol id=\"icon-font\" viewBox=\"0 0 1024 1024\"><path d=\"M450.857143 319.428571l-97.142857 257.142858q18.857143 0 78 1.142857t91.714285 1.142857q10.857143 0 32.571429-1.142857-49.714286-144.571429-105.142857-258.285715zM36.571429 950.857143l1.142857-45.142857q13.142857-4 32-7.142857t32.571428-6 28.285715-8.285715 25.428571-16.571428 17.714286-28.857143l135.428571-352 160-413.714286h73.142857q4.571429 8 6.285715 12l117.142857 274.285714q18.857143 44.571429 60.571428 147.142858t65.142857 156.857142q8.571429 19.428571 33.142858 82.571429t41.142857 96.285714q11.428571 25.714286 20 32.571429 10.857143 8.571429 50.285714 16.857143t48 11.714285q3.428571 21.714286 3.428571 32.571429 0 2.857143-0.285714 7.714286t-0.285714 7.142857q-36 0-108.571429-4.571429t-109.142857-4.571428q-43.428571 0-122.857143 4t-101.714285 4.571428q0-24.571429 2.285714-44.571428l74.857143-16q0.571429 0 7.142857-1.428572t8.857143-2 8.285714-2.571428 8.571429-3.714286 6.285714-4.571429 5.142857-6.285714 1.428571-8q0-9.142857-17.714285-55.142857t-41.142857-101.428571-24-57.142858l-257.142858-1.142857q-14.857143 33.142857-43.714285 111.714286T254.857143 850.857143q0 12.571429 8 21.428571t24.857143 14 27.714285 7.714286 32.571429 4.857143 23.428571 2.285714q0.571429 10.857143 0.571429 33.142857 0 5.142857-1.142857 15.428572-33.142857 0-99.714286-5.714286T171.428571 938.285714q-4.571429 0-15.142857 2.285715t-12.285714 2.285714q-45.714286 8-107.428571 8z\"  ></path></symbol><symbol id=\"icon-forumbee\" viewBox=\"0 0 1024 1024\"><path d=\"M606.857143 85.714286Q425.714286 154.857143 289.142857 292.857143T84.571429 613.142857Q73.142857 562.285714 73.142857 512.571429q0-118.857143 58.571429-219.714286t159.142857-159.428572T510.285714 74.857143q46.857143 0 96.571429 10.857143z m153.714286 68q53.142857 37.142857 93.714285 88.571428-222.285714 64.571429-385.428571 228.857143T242.285714 857.714286q-53.142857-41.142857-88.571428-92.571429 64-220.571429 225.714285-383.428571t381.142858-228zM341.714286 916q65.714286-203.428571 216.857143-355.428571T912.571429 341.142857q22.857143 52.571429 30.857142 111.428572-166.857143 68.571429-294.857142 197.142857t-196 296q-58.857143-8-110.857143-29.714286z m609.142857 33.142857q-110.285714-28.571429-209.714286-65.714286-77.142857 48-165.714286 61.142858 62.285714-117.142857 156.571429-211.714286t210.857143-157.428572q-12 86.857143-57.714286 162.285715 37.142857 100 65.714286 211.428571z\"  ></path></symbol><symbol id=\"icon-fort-awesome\" viewBox=\"0 0 1024 1024\"><path d=\"M365.714286 576V448q0-9.142857-9.142857-9.142857h-54.857143q-9.142857 0-9.142857 9.142857v128q0 9.142857 9.142857 9.142857h54.857143q9.142857 0 9.142857-9.142857z m292.571428 0V448q0-9.142857-9.142857-9.142857h-54.857143q-9.142857 0-9.142857 9.142857v128q0 9.142857 9.142857 9.142857h54.857143q9.142857 0 9.142857-9.142857z m292.571429 18.285714v429.714286h-365.714286v-182.857143q0-45.714286-32-77.714286t-77.714286-32-77.714285 32-32 77.714286v182.857143H0v-429.714286q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857v64h73.142857V301.714286q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857v64h73.142858V301.714286q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857v64h73.142857V301.714286q0-3.428571 1.428571-5.428572t4.857143-2.857143 5.428572-1.142857 6.571428 0 5.142857 0.285715V69.142857q-18.285714-8.571429-18.285714-28.571428 0-13.142857 9.428571-22.285715T475.428571 9.142857t22 9.142857T506.857143 40.571429q0 20-18.285714 28.571428v9.714286q25.714286-5.714286 47.428571-5.714286 12 0 34 4.285714t31.142857 4.285715q9.714286 0 26.857143-4.285715t21.142857-4.285714q9.142857 0 9.142857 9.142857v120q0 8.571429-20 12.285715t-35.428571 3.714285q-10.285714 0-31.142857-4.285714T540 209.714286q-22.857143 0-51.428571 6.857143v76q0.571429 0 5.142857-0.285715t6.571428 0 5.428572 1.142857 4.857143 2.857143 1.428571 5.428572v64h73.142857V301.714286q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857v64h73.142857V301.714286q0-9.142857 9.142858-9.142857h54.857142q9.142857 0 9.142858 9.142857v356.571428h73.142857v-64q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857z\"  ></path></symbol><symbol id=\"icon-forward\" viewBox=\"0 0 1024 1024\"><path d=\"M62.285714 943.428571q-10.857143 10.857143-18.285714 7.428572t-7.428571-18.285714V91.428571q0-14.857143 7.428571-18.285714t18.285714 7.428572l405.714286 405.714285q5.142857 5.142857 7.428571 10.857143V91.428571q0-14.857143 7.428572-18.285714t18.285714 7.428572l405.714286 405.714285q10.857143 10.857143 10.857143 25.714286t-10.857143 25.714286l-405.714286 405.714285q-10.857143 10.857143-18.285714 7.428572t-7.428572-18.285714V526.857143q-2.285714 5.714286-7.428571 10.857143z\"  ></path></symbol><symbol id=\"icon-foursquare\" viewBox=\"0 0 1024 1024\"><path d=\"M717.714286 248l21.142857-110.857143q2.857143-13.142857-5.142857-22.857143t-20-9.714285H306.857143q-13.142857 0-22 9.714285T276 135.428571v629.142858q0 4 3.428571 0.571428l166.285715-201.142857q13.142857-14.857143 21.714285-19.142857t27.428572-4.285714h136.571428q12.571429 0 21.142858-8.285715t10.285714-16.857143q13.714286-74.285714 21.142857-109.142857 2.285714-12-6.571429-22.857143T656.571429 372.571429H488.571429q-16.571429 0-27.428572-10.857143t-10.857143-27.428572v-24q0-16.571429 10.857143-27.142857t27.428572-10.571428h197.714285q10.285714 0 20-7.714286t11.428572-16.857143z m129.714285-126.857143q-8.571429 41.714286-30.571428 152.285714t-39.714286 200-20 99.142858q-3.428571 12.571429-5.142857 18.571428t-8 18.571429-14 18.857143-22 12-33.142857 5.714285H520q-7.428571 0-12.571429 5.714286-4.571429 5.142857-243.428571 282.285714-12.571429 14.285714-33.428571 16.285715T202.857143 947.428571q-31.428571-12.571429-31.428572-56V85.714286q0-31.428571 21.714286-58.571429T261.714286 0h507.428571q54.285714 0 72.571429 30.285714t5.714285 90.857143z m0 0l-90.285714 451.428572q2.285714-9.714286 20-99.142858t39.714286-200T847.428571 121.142857z\"  ></path></symbol><symbol id=\"icon-free-code-camp\" viewBox=\"0 0 1316 1024\"><path d=\"M258.857143 935.428571q0 12-9.142857 21.428572t-21.142857 9.428571q-0.571429 0-7.428572-1.714285-36-8.571429-92.571428-80Q0 722.285714 0 498.285714q0-194.857143 121.714286-350.857143 22.285714-29.142857 54.285714-59.142857t53.714286-30q10.857143 0 20 7.714286t9.142857 18.571429q0 15.428571-36 51.428571-56 58.285714-84 105.142857-68 113.714286-68 256.571429 0 160.571429 70.285714 280.571428 28.571429 48.571429 77.714286 98.857143 1.142857 1.714286 8.285714 9.142857t11.142857 12 9.714286 11.714286 8.285714 13.428571 2.571429 12z m767.428571-76.571428q0 16.571429-10 27.714286T989.714286 897.714286H372q-14.857143 0-25.714286-10.857143t-10.857143-25.714286q0-16.571429 10-27.714286T372 822.285714h617.714286q14.857143 0 25.714285 10.857143t10.857143 25.714286z m-122.857143-349.142857q0 76.571429-38.285714 133.142857-14.285714 21.714286-39.714286 44.857143T777.714286 722.285714q-9.142857 5.714286-15.428572 5.714286-4 0-8.571428-3.428571t-4.571429-6.857143q0-5.142857 10.857143-17.142857t24-26.285715 24-38.571428 10.857143-50.571429q0-43.428571-20-74.285714-16.571429-24-26.285714-24-1.714286 0-1.714286 2.857143 0 6.857143 4.285714 20.285714t4.285714 20.857143q0 12.571429-12.285714 20t-25.428571 7.428571q-37.714286 0-37.714286-43.428571 0-8.571429 0.857143-25.142857t0.857143-25.142857q0-14.285714-5.714286-26.285715-7.428571-14.285714-24-30.571428t-29.142857-16.285715q-2.857143 0-4 0.285715t-2 1.428571-0.857143 3.428572q0 1.142857 9.142857 14.857142t9.142857 30.857143q0 21.142857-10.857143 38.857143t-26.285714 30.857143-30.571428 26.285714-26 30.857143-10.857143 38.857143q0 56 24 91.428571 16.571429 24.571429 45.142857 36 9.142857 2.857143 9.714286 5.714286 0.571429 1.142857 0.571428 2.857143 0 9.142857-10.285714 9.142857-3.428571 0-18.857143-6.285714-68-24.571429-111.428571-79.714286T449.142857 542.285714q0-31.428571 14-66t34.285714-65.714285T537.714286 348.571429t34-64.857143T585.714286 220q0-30.285714-14.285715-53.714286-16.571429-27.428571-32-36.571428-10.857143-5.142857-10.857142-12 0-11.428571 23.428571-11.428572 28.571429 0 62.857143 16.571429 23.428571 10.857143 40.571428 25.428571t28.285715 29.142857T702.857143 213.142857t12.571428 39.428572 9.142858 45.714285q0 0.571429 1.714285 10t2.571429 14.285715 3.142857 14.285714 5.142857 15.428571 6.285714 12.285715 8.285715 9.428571 10.571428 3.142857q13.142857 0 21.142857-8t8-21.142857q0-14.285714-11.428571-38.285714t-11.428571-29.714286 5.714285-5.714286q15.428571 0 53.142857 40 41.142857 43.428571 58.571429 89.142857t17.428571 106.285715z m413.142858 16.571428q0 156.571429-78.857143 287.428572-10.857143 18.285714-27.428572 41.142857t-38.857143 49.428571-46.285714 44-42.285714 17.428572q-9.142857 0-17.714286-8.857143t-8.571428-18q0-8.571429 16.571428-28.857143t39.142857-44 27.714286-30q104.571429-131.428571 104.571429-303.428571 0-74.857143-11.714286-134.285715T1191.428571 277.714286q-33.142857-68-93.142857-130.285715-1.142857-1.714286-7.428571-7.714285t-9.428572-9.428572-8.571428-10-8.571429-11.428571-5.428571-10.571429-2.285714-10.857143q0-10.857143 9.142857-20.285714t20-9.428571q40 0 112 96.571428 56 74.857143 83.428571 156t34.285714 179.428572q1.142857 24 1.142858 36.571428z\"  ></path></symbol><symbol id=\"icon-frown-o\" viewBox=\"0 0 1024 1024\"><path d=\"M721.142857 702.285714q4.571429 14.285714-2.285714 27.714286t-21.142857 18-28-2.285714-18.285715-21.714286q-14.285714-45.714286-52.857142-74T512 621.714286t-86.571429 28.285714T372.571429 724q-4.571429 14.857143-18 21.714286t-27.714286 2.285714q-14.857143-4.571429-21.714286-18t-2.285714-27.714286q21.142857-69.142857 78.857143-111.428571t130.285714-42.285714 130.285714 42.285714 78.857143 111.428571zM438.857143 365.714286q0 30.285714-21.428572 51.714285T365.714286 438.857143t-51.714286-21.428572T292.571429 365.714286t21.428571-51.714286T365.714286 292.571429t51.714285 21.428571T438.857143 365.714286z m292.571428 0q0 30.285714-21.428571 51.714285T658.285714 438.857143t-51.714285-21.428572T585.142857 365.714286t21.428572-51.714286T658.285714 292.571429t51.714286 21.428571T731.428571 365.714286z m146.285715 146.285714q0-74.285714-29.142857-142t-78-116.571429-116.571429-78T512 146.285714t-142 29.142857-116.571429 78-78 116.571429T146.285714 512t29.142857 142 78 116.571429 116.571429 78 142 29.142857 142-29.142857 116.571429-78 78-116.571429 29.142857-142z m73.142857 0q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-futbol-o\" viewBox=\"0 0 1024 1024\"><path d=\"M348 466.285714l164-118.857143 164 118.857143-62.285714 192H410.857143zM512 0q104 0 198.857143 40.571429t163.428571 109.142857 109.142857 163.428571 40.571429 198.857143-40.571429 198.857143-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0z m353.714286 771.428571q85.142857-116 85.142857-259.428571v-1.714286l-58.285714 50.857143-137.142858-128 36-184.571428 76.571429 6.857142q-85.714286-117.714286-222.285714-161.142857l30.285714 70.857143-164 90.857143-164-90.857143 30.285714-70.857143q-136.571429 43.428571-222.285714 161.142857l77.142857-6.857142 35.428572 184.571428-137.142858 128-58.285714-50.857143v1.714286q0 143.428571 85.142857 259.428571l17.142857-75.428571 186.285715 22.857143 79.428571 170.285714-66.285714 39.428572q66.857143 22.285714 137.142857 22.285714t137.142857-22.285714l-66.285714-39.428572 79.428571-170.285714 186.285715-22.857143z\"  ></path></symbol><symbol id=\"icon-gamepad\" viewBox=\"0 0 1097 1024\"><path d=\"M475.428571 621.714286V548.571429q0-8-5.142857-13.142858t-13.142857-5.142857H347.428571V420.571429q0-8-5.142857-13.142858t-13.142857-5.142857H256q-8 0-13.142857 5.142857t-5.142857 13.142858v109.714285H128q-8 0-13.142857 5.142857t-5.142857 13.142858v73.142857q0 8 5.142857 13.142857t13.142857 5.142857h109.714286v109.714286q0 8 5.142857 13.142857t13.142857 5.142857h73.142857q8 0 13.142857-5.142857t5.142857-13.142857v-109.714286h109.714286q8 0 13.142857-5.142857t5.142857-13.142857z m329.142858 36.571428q0-30.285714-21.428572-51.714285T731.428571 585.142857t-51.714285 21.428572-21.428572 51.714285 21.428572 51.714286 51.714285 21.428571 51.714286-21.428571 21.428572-51.714286z m146.285714-146.285714q0-30.285714-21.428572-51.714286T877.714286 438.857143t-51.714286 21.428571T804.571429 512t21.428571 51.714286 51.714286 21.428571 51.714285-21.428571T950.857143 512z m146.285714 73.142857q0 121.142857-85.714286 206.857143t-206.857142 85.714286q-109.714286 0-193.142858-73.142857H485.714286q-83.428571 73.142857-193.142857 73.142857-121.142857 0-206.857143-85.714286T0 585.142857t85.714286-206.857143 206.857143-85.714285h512q121.142857 0 206.857142 85.714285t85.714286 206.857143z\"  ></path></symbol><symbol id=\"icon-gavel\" viewBox=\"0 0 1024 1024\"><path d=\"M1012 877.714286q0 30.285714-21.142857 51.428571l-61.142857 61.714286q-22.285714 21.142857-52 21.142857-30.285714 0-51.428572-21.142857l-207.428571-208q-21.714286-20.571429-21.714286-51.428572 0-30.285714 24.571429-54.857142L475.428571 530.285714l-72 72q-8 8-19.428571 8t-19.428571-8q1.142857 1.142857 7.142857 6.857143t7.142857 7.428572 5.714286 6.571428 5.714285 7.714286 3.428572 7.714286 3.142857 9.428571 0.857143 10.285714q0 21.714286-16 38.857143-1.714286 1.714286-9.428572 10.285714t-10.857143 11.714286T350.857143 728.571429t-12.571429 8.857142-12.571428 5.142858-14.857143 2.571428q-22.857143 0-38.857143-16L38.857143 496q-16-16-16-38.857143 0-7.428571 2.571428-14.857143t5.142858-12.571428T39.428571 417.142857t9.428572-10.571428 11.714286-10.857143 10.285714-9.428572q17.142857-16 38.857143-16 5.714286 0 10.285714 0.857143t9.428571 3.142857 7.714286 3.428572 7.714286 5.714285 6.571428 5.714286 7.428572 7.142857 6.857143 7.142857q-8-8-8-19.428571t8-19.428571l198.857143-198.857143q8-8 19.428571-8t19.428571 8q-1.142857-1.142857-7.142857-6.857143T389.142857 151.428571t-5.714286-6.571428-5.714285-7.714286-3.428572-7.714286-3.142857-9.428571-0.857143-10.285714q0-21.714286 16-38.857143 1.714286-1.714286 9.428572-10.285714t10.857143-11.714286T417.142857 39.428571t12.571429-8.857142 12.571428-5.142858 14.857143-2.571428q22.857143 0 38.857143 16l233.142857 233.142857q16 16 16 38.857143 0 7.428571-2.571428 14.857143t-5.142858 12.571428-8.857142 12.571429-9.428572 10.571428-11.714286 10.857143-10.285714 9.428572q-17.142857 16-38.857143 16-5.714286 0-10.285714-0.857143t-9.428571-3.142857-7.714286-3.428572-7.714286-5.714285-6.571428-5.714286-7.428572-7.142857-6.857143-7.142857q8 8 8 19.428571t-8 19.428571L530.285714 475.428571l146.285715 146.285715q24.571429-24.571429 54.857142-24.571429 29.714286 0 52 21.142857l207.428572 207.428572q21.142857 22.285714 21.142857 52z\"  ></path></symbol><symbol id=\"icon-gbp\" viewBox=\"0 0 1024 1024\"><path d=\"M741.53808 649.714286v209.714285q0 8-5.142857 13.142858t-13.142857 5.142857H176.966651q-8 0-13.142857-5.142857t-5.142857-13.142858v-85.714285q0-7.428571 5.428572-12.857143T176.966651 755.428571h55.428572V536.571429H178.109509q-8 0-13.142858-5.428572T159.823794 518.285714V443.428571q0-8 5.142857-13.142857t13.142858-5.142857h54.285714V297.714286q0-97.714286 70.571428-161.142857T482.680937 73.142857q105.714286 0 191.428572 71.428572 5.142857 4.571429 5.714285 11.714285t-4 12.857143L616.966651 241.714286q-5.142857 6.285714-12.571428 6.857143-7.428571 1.142857-13.142857-4-2.857143-2.857143-14.857143-10.857143t-39.428572-18.285715-53.142857-10.285714q-48.571429 0-78.285714 26.857143t-29.714286 70.285714v122.857143h174.285715q7.428571 0 12.857142 5.142857t5.428572 13.142857v74.857143q0 7.428571-5.428572 12.857143T550.109509 536.571429H375.823794v216.571428h236.571429v-103.428571q0-7.428571 5.142857-12.857143t13.142857-5.428572h92.571429q8 0 13.142857 5.428572t5.142857 12.857143z\"  ></path></symbol><symbol id=\"icon-ge\" viewBox=\"0 0 1024 1024\"><path d=\"M499.428571 936v37.714286q-118.857143-3.428571-220-62.571429T117.714286 753.714286l33.142857-19.428572q16.571429 28 41.714286 56.571429l37.142857-32.571429q84.571429 96 210.285714 121.142857l-9.714286 49.142858q37.142857 6.857143 69.142857 7.428571z m-341.714285-302.857143l-47.428572 16q12.571429 34.285714 28 64l-32.571428 18.857143q-56-102.857143-56-220t56-220l32.571428 18.857143q-17.142857 32-28 64l46.857143 16q-20 57.142857-20 121.142857 0 62.285714 20.571429 121.142857z m715.428571 101.142857l33.142857 19.428572q-60.571429 98.285714-161.714285 157.428571T524.571429 973.714286v-37.714286q32-0.571429 69.142857-7.428571l-9.714286-49.142858q125.714286-25.142857 210.285714-121.142857l37.142857 32.571429q25.142857-28.571429 41.714286-56.571429z m-86.285714-316.571428l-133.142857 45.714285q8 24 8 48.571429t-8 48.571429l132.571428 45.714285q-17.714286 52.571429-56 96.571429l-105.714285-92.571429q-32.571429 38.285714-84 48.571429l27.428571 137.714286q-29.714286 5.714286-56 5.714285t-56-5.714285l27.428571-137.714286q-51.428571-10.285714-84-48.571429l-105.714285 92.571429q-38.285714-44-56-96.571429l132.571428-45.714285q-8-24-8-48.571429t8-48.571429l-133.142857-45.714285q18.857143-53.142857 56.571429-96.571429l105.714285 92.571429q33.714286-38.857143 84-49.142857l-27.428571-137.142858q25.142857-5.714286 56-5.714285t56 5.714285l-27.428571 137.142858q50.285714 10.285714 84 49.142857l105.714285-92.571429q37.714286 43.428571 56.571429 96.571429zM499.428571 50.285714v37.714286q-37.142857 1.142857-69.142857 7.428571l9.714286 49.142858q-125.714286 24-210.285714 120.571428l-37.142857-32q-21.714286 24-41.714286 56l-32.571429-18.857143q60.571429-98.285714 161.142857-157.428571T499.428571 50.285714z m474.857143 461.714286q0 117.142857-56 220l-32.571428-18.857143q15.428571-29.714286 28-64l-47.428572-16q20.571429-58.857143 20.571429-121.142857 0-64-20-121.142857l46.857143-16q-10.857143-32-28-64l32.571428-18.857143q56 102.857143 56 220z m-68.571428-241.714286l-32.571429 18.857143q-20-32-41.714286-56l-37.142857 32q-84.571429-96.571429-210.285714-120.571428l9.714286-49.142858q-32-6.285714-69.142857-7.428571V50.285714q119.428571 3.428571 220 62.571429T905.714286 270.285714z m93.142857 241.714286q0-98.857143-38.571429-189.142857T856.571429 167.428571t-155.428572-103.714285T512 25.142857t-189.142857 38.571429T167.428571 167.428571 63.714286 322.857143 25.142857 512t38.571429 189.142857T167.428571 856.571429t155.428572 103.714285 189.142857 38.571429 189.142857-38.571429 155.428572-103.714285 103.714285-155.428572 38.571429-189.142857z m25.142857 0q0 104-40.571429 198.857143t-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0t198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-gear\" viewBox=\"0 0 1024 1024\"><path d=\"M658.285714 512q0-60.571429-42.857143-103.428571t-103.428571-42.857143-103.428571 42.857143-42.857143 103.428571 42.857143 103.428571 103.428571 42.857143 103.428571-42.857143 42.857143-103.428571z m292.571429-62.285714v126.857143q0 6.857143-4.571429 13.142857t-11.428571 7.428571l-105.714286 16q-10.857143 30.857143-22.285714 52 20 28.571429 61.142857 78.857143 5.714286 6.857143 5.714286 14.285714t-5.142857 13.142857q-15.428571 21.142857-56.571429 61.714286t-53.714286 40.571429q-6.857143 0-14.857143-5.142857l-78.857142-61.714286q-25.142857 13.142857-52 21.714286-9.142857 77.714286-16.571429 106.285714-4 16-20.571429 16H448.571429q-8 0-14-4.857143T428 933.714286l-16-105.142857q-28-9.142857-51.428571-21.142858l-80.571429 61.142858q-5.714286 5.142857-14.285714 5.142857-8 0-14.285715-6.285715-72-65.142857-94.285714-96-4-5.714286-4-13.142857 0-6.857143 4.571429-13.142857 8.571429-12 29.142857-38t30.857143-40.285714q-15.428571-28.571429-23.428572-56.571429l-104.571428-15.428571q-7.428571-1.142857-12-7.142857T73.142857 574.285714V447.428571q0-6.857143 4.571429-13.142857t10.857143-7.428571l106.285714-16q8-26.285714 22.285714-52.571429-22.857143-32.571429-61.142857-78.857143-5.714286-6.857143-5.714286-13.714285 0-5.714286 5.142857-13.142857 14.857143-20.571429 56.285715-61.428572T265.714286 150.285714q7.428571 0 14.857143 5.714286l78.857142 61.142857q25.142857-13.142857 52-21.714286 9.142857-77.714286 16.571429-106.285714 4-16 20.571429-16h126.857142q8 0 14 4.857143T596 90.285714l16 105.142857q28 9.142857 51.428571 21.142858l81.142858-61.142858q5.142857-5.142857 13.714285-5.142857 7.428571 0 14.285715 5.714286 73.714286 68 94.285714 97.142857 4 4.571429 4 12.571429 0 6.857143-4.571429 13.142857-8.571429 12-29.142857 38t-30.857143 40.285714q14.857143 28.571429 23.428572 56l104.571428 16q7.428571 1.142857 12 7.142857t4.571429 13.428572z\"  ></path></symbol><symbol id=\"icon-gears\" viewBox=\"0 0 1097 1024\"><path d=\"M512 512q0-60.571429-42.857143-103.428571t-103.428571-42.857143-103.428572 42.857143-42.857143 103.428571 42.857143 103.428571 103.428572 42.857143 103.428571-42.857143 42.857143-103.428571z m438.857143 292.571429q0-29.714286-21.714286-51.428572t-51.428571-21.714286-51.428572 21.714286-21.714285 51.428572q0 30.285714 21.428571 51.714285t51.714286 21.428572 51.714285-21.428572 21.428572-51.714285z m0-585.142858q0-29.714286-21.714286-51.428571t-51.428571-21.714286-51.428572 21.714286-21.714285 51.428571q0 30.285714 21.428571 51.714286T877.714286 292.571429t51.714285-21.428572T950.857143 219.428571z m-219.428572 240.571429v105.714286q0 5.714286-4 11.142857t-9.142857 6l-88.571428 13.714286q-6.285714 20-18.285715 43.428571 19.428571 27.428571 51.428572 65.714286 4 6.285714 4 11.428571 0 6.857143-4 10.857143-13.142857 17.142857-47.142857 51.142857T570.857143 813.142857q-6.285714 0-12-4l-65.714286-51.428571q-21.142857 10.857143-44 17.714285-6.285714 61.714286-13.142857 88.571429-4 13.714286-17.142857 13.714286H312.571429q-6.285714 0-11.428572-4.285715t-5.714286-10l-13.142857-87.428571q-19.428571-5.714286-42.857143-17.714286l-67.428571 50.857143q-4 4-11.428571 4-6.285714 0-12-4.571428-82.285714-76-82.285715-91.428572 0-5.142857 4-10.857143 5.714286-8 23.428572-30.285714t26.857143-34.857143q-13.142857-25.142857-20-46.857143l-86.857143-13.714285q-5.714286-0.571429-9.714286-5.428572T0 564V458.285714q0-5.714286 4-11.142857T13.142857 441.142857l88.571429-13.714286q6.285714-20 18.285714-43.428571-19.428571-27.428571-51.428571-65.714286-4-6.285714-4-11.428571 0-6.857143 4-11.428572 12.571429-17.142857 46.857142-50.857142t45.142858-33.714286q6.285714 0 12 4l65.714285 51.428571q19.428571-10.285714 44-18.285714 6.285714-61.714286 13.142857-88 4-13.714286 17.142858-13.714286h106.285714q6.285714 0 11.428571 4.285715t5.714286 10l13.142857 87.428571q19.428571 5.714286 42.857143 17.714286l67.428571-50.857143q4.571429-4 11.428572-4 6.285714 0 12 4.571428 82.285714 76 82.285714 91.428572 0 4.571429-4 10.857143-6.857143 9.142857-24 30.857143t-25.714286 34.285714q13.142857 27.428571 19.428572 46.857143l86.857143 13.142857q5.714286 1.142857 9.714285 6t4 11.142857z m365.714286 304.571429v80q0 9.142857-85.142857 17.714285-6.857143 15.428571-17.142857 29.714286 29.142857 64.571429 29.142857 78.857143 0 2.285714-2.285714 4-69.714286 40.571429-70.857143 40.571428-4.571429 0-26.285714-26.857142t-29.714286-38.857143q-11.428571 1.142857-17.142857 1.142857t-17.142857-1.142857q-8 12-29.714286 38.857143t-26.285714 26.857142q-1.142857 0-70.857143-40.571428-2.285714-1.714286-2.285715-4 0-14.285714 29.142858-78.857143-10.285714-14.285714-17.142858-29.714286-85.142857-8.571429-85.142857-17.714285v-80q0-9.142857 85.142857-17.714286 7.428571-16.571429 17.142858-29.714286-29.142857-64.571429-29.142858-78.857143 0-2.285714 2.285715-4 2.285714-1.142857 20-11.428571t33.714285-19.428572 17.142858-9.142857q4.571429 0 26.285714 26.571429t29.714286 38.571428q11.428571-1.142857 17.142857-1.142857t17.142857 1.142857q29.142857-40.571429 52.571428-64l3.428572-1.142857q2.285714 0 70.857143 40 2.285714 1.714286 2.285714 4 0 14.285714-29.142857 78.857143 9.714286 13.142857 17.142857 29.714286 85.142857 8.571429 85.142857 17.714286z m0-585.142858v80q0 9.142857-85.142857 17.714286-6.857143 15.428571-17.142857 29.714286 29.142857 64.571429 29.142857 78.857143 0 2.285714-2.285714 4-69.714286 40.571429-70.857143 40.571428-4.571429 0-26.285714-26.857143t-29.714286-38.857142q-11.428571 1.142857-17.142857 1.142857t-17.142857-1.142857q-8 12-29.714286 38.857142t-26.285714 26.857143q-1.142857 0-70.857143-40.571428-2.285714-1.714286-2.285715-4 0-14.285714 29.142858-78.857143-10.285714-14.285714-17.142858-29.714286-85.142857-8.571429-85.142857-17.714286V179.428571q0-9.142857 85.142857-17.714285 7.428571-16.571429 17.142858-29.714286-29.142857-64.571429-29.142858-78.857143 0-2.285714 2.285715-4 2.285714-1.142857 20-11.428571t33.714285-19.428572 17.142858-9.142857q4.571429 0 26.285714 26.571429t29.714286 38.571428q11.428571-1.142857 17.142857-1.142857t17.142857 1.142857q29.142857-40.571429 52.571428-64l3.428572-1.142857q2.285714 0 70.857143 40 2.285714 1.714286 2.285714 4 0 14.285714-29.142857 78.857143 9.714286 13.142857 17.142857 29.714286 85.142857 8.571429 85.142857 17.714285z\"  ></path></symbol><symbol id=\"icon-genderless\" viewBox=\"0 0 1024 1024\"><path d=\"M731.428571 548.571429q0-105.714286-75.142857-180.857143T475.428571 292.571429 294.571429 367.714286 219.428571 548.571429t75.142858 180.857142T475.428571 804.571429t180.857143-75.142858T731.428571 548.571429z m73.142858 0q0 66.857143-26 127.714285t-70.285715 105.142857-105.142857 70.285715T475.428571 877.714286t-127.714285-26-105.142857-70.285715-70.285715-105.142857T146.285714 548.571429t26-127.714286 70.285715-105.142857 105.142857-70.285715T475.428571 219.428571t127.714286 26 105.142857 70.285715 70.285715 105.142857T804.571429 548.571429z\"  ></path></symbol><symbol id=\"icon-get-pocket\" viewBox=\"0 0 1024 1024\"><path d=\"M914.857143 73.142857q37.142857 0 62.857143 26t25.714285 63.142857v296.571429q0 100.571429-38.857142 192t-104.285715 157.142857-156.571428 104.285714T512.571429 950.857143q-100.571429 0-191.714286-38.571429T164 808 59.428571 650.857143 20.571429 458.857143V162.285714q0-36.571429 26.285714-62.857143t62.857143-26.285714h805.142857zM512.571429 681.142857q26.857143 0 46.857142-18.857143l230.857143-221.714285q21.142857-20 21.142857-48.571429 0-28-19.714285-47.714286T744 324.571429q-26.857143 0-46.857143 18.857142L512.571429 520.571429 328 343.428571q-20-18.857143-46.285714-18.857142-28 0-47.714286 19.714285T214.285714 392q0 29.142857 20.571429 48.571429l231.428571 221.714285q18.857143 18.857143 46.285715 18.857143z\"  ></path></symbol><symbol id=\"icon-gg-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M409.714286 773.714286l154.857143-154.857143-159.428572-159.428572-50.285714 50.285715 109.714286 109.142857-54.857143 54.857143-159.428572-159.428572 159.428572-159.428571 22.857143 22.857143 49.714285-49.714286-72.571428-73.142857-259.428572 259.428571z m204.571428-4.571429l259.428572-259.428571-259.428572-259.428572-154.857143 154.857143 159.428572 159.428572 50.285714-50.285715-109.714286-109.142857 54.857143-54.857143 159.428572 159.428572-159.428572 159.428571-22.857143-22.857143-49.714285 50.285715z m409.714286-257.142857q0 104-40.571429 198.857143t-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0t198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-gift\" viewBox=\"0 0 1024 1024\"><path d=\"M603.428571 774.857143V365.714286H420.571429v409.142857q0 14.285714 10.285714 22t26.285714 7.714286h109.714286q16 0 26.285714-7.714286t10.285714-22zM342.857143 292.571429h111.428571L382.285714 200.571429q-14.857143-17.714286-39.428571-17.714286-22.857143 0-38.857143 16t-16 38.857143 16 38.857143 38.857143 16z m393.142857-54.857143q0-22.857143-16-38.857143t-38.857143-16q-24.571429 0-39.428571 17.714286L570.285714 292.571429h110.857143q22.857143 0 38.857143-16t16-38.857143z m214.857143 146.285714v182.857143q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143v237.714286q0 22.857143-16 38.857143t-38.857143 16H201.142857q-22.857143 0-38.857143-16t-16-38.857143v-237.714286H91.428571q-8 0-13.142857-5.142857t-5.142857-13.142857V384q0-8 5.142857-13.142857t13.142857-5.142857h251.428572q-53.142857 0-90.571429-37.428572T214.857143 237.714286t37.428571-90.571429T342.857143 109.714286q61.142857 0 96 44l73.142857 94.285714 73.142857-94.285714q34.857143-44 96-44 53.142857 0 90.571429 37.428571T809.142857 237.714286t-37.428571 90.571428T681.142857 365.714286h251.428572q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-gg\" viewBox=\"0 0 1170 1024\"><path d=\"M420.571429 457.142857l219.428571 219.428572-219.428571 219.428571L36.571429 512l384-384 96 96-54.857143 54.857143-41.142857-41.142857-274.285715 274.285714 274.285715 274.285714 110.285714-110.285714-165.142857-164z m329.142857-329.142857l384 384-384 384-96-96 54.857143-54.857143 41.142857 41.142857 274.285714-274.285714-274.285714-274.285714-110.285715 110.285714 165.142858 164-54.857143 54.857143-219.428572-219.428572z\"  ></path></symbol><symbol id=\"icon-git-square\" viewBox=\"0 0 1024 1024\"><path d=\"M405.714286 747.428571q0 37.714286-53.142857 37.714286-61.142857 0-61.142858-36 0-36.571429 56-36.571428 58.285714 0 58.285715 34.857142z m-20.571429-266.285714q0 48.571429-42.285714 48.571429-44 0-44-48 0-51.428571 44-51.428572 20.571429 0 31.428571 14.571429t10.857143 36.285714z m94.857143-42.857143V366.857143q-44.571429 16.571429-77.142857 16.571428-28.571429-16.571429-62.857143-16.571428-49.142857 0-82.857143 32.571428t-33.714286 81.714286q0 28.571429 16.857143 58.285714t42 38.285715v1.714285q-21.714286 9.714286-21.714285 48.571429 0 30.285714 23.428571 44v1.714286q-64.571429 21.142857-64.571429 79.428571 0 25.714286 11.428572 44.857143t30.857143 29.142857 41.142857 14.571429 46.285714 4.571428q128 0 128-107.428571 0-38.285714-27.428571-56.571429t-72-26.285714q-15.428571-2.857143-29.428572-11.714286T334.285714 621.714286q0-25.142857 28-29.714286 44-8.571429 69.714286-40t25.714286-76.571429q0-13.714286-5.714286-29.714285 21.142857-5.142857 28-7.428572z m33.714286 239.428572h78.285714q-1.142857-15.428571-1.142857-46.857143V409.714286q0-26.285714 1.142857-39.428572H513.714286q1.714286 13.142857 1.714285 40.571429v224q0 28.571429-1.714285 42.857143z m290.857143-9.142857v-69.142858q-17.142857 12-38.857143 12-30.285714 0-30.285715-46.857142V436h29.714286q5.142857 0 15.142857 0.571429t15.142857 0.571428V370.285714h-60q0-46.857143 1.714286-58.285714h-80q2.285714 13.714286 2.285714 31.428571v26.857143h-34.285714v66.857143q20.571429-1.714286 21.142857-1.714286 1.714286 0 6.285715 0.285715t6.857142 0.285714v1.142857h-1.142857v124q0 21.142857 1.428572 36.571429t6.571428 32.285714 14 27.714286 24.857143 17.714285 37.714286 6.857143q36.571429 0 61.714286-13.714285zM601.142857 265.142857q0-20.571429-13.714286-36.285714T553.142857 213.142857t-34.571428 15.428572-14 36.571428q0 20.571429 14.285714 35.714286t34.285714 15.142857 34-15.428571 14-35.428572z m349.714286-27.428571v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-git\" viewBox=\"0 0 1024 1024\"><path d=\"M340 865.142857q0-57.142857-94.285714-57.142857-90.285714 0-90.285715 59.428571 0 57.714286 98.285715 57.714286 86.285714 0 86.285714-60z m-33.714286-431.428571q0-34.857143-17.142857-58.285715t-50.857143-23.428571q-70.857143 0-70.857143 82.857143 0 77.142857 70.857143 77.142857 68 0 68-78.285714z m153.714286-185.142857v115.428571q-20.571429 6.857143-45.142857 12.571429 9.142857 24.571429 9.142857 48 0 72.571429-41.714286 123.714285T269.714286 612.571429q-22.857143 4.571429-34 15.428571t-11.142857 33.142857q0 17.714286 12.857142 29.428572t33.142858 18.285714 44.857142 12.571428 49.142858 14.571429 44.857142 21.428571 33.142858 36.571429T455.428571 850.285714q0 173.714286-207.428571 173.714286-39.428571 0-74.285714-7.142857t-66.285715-23.428572-50-46.857142T38.857143 873.714286q0-94.285714 104-128.571429v-2.285714q-38.285714-23.428571-38.285714-72 0-62.285714 36-78.285714v-2.285715q-41.142857-13.714286-68.285715-62T45.142857 433.714286q0-79.428571 54.285714-132.285715T233.714286 248.571429q54.857143 0 101.714285 26.857142 56 0 124.571429-26.857142z m181.714286 503.428571H514.857143q2.285714-25.714286 2.285714-76.571429V327.428571q0-53.714286-2.285714-73.142857h126.857143q-2.285714 18.857143-2.285715 70.857143v350.285714q0 50.857143 2.285715 76.571429z m343.428571-126.857143v112q-40.571429 22.285714-99.428571 22.285714-35.428571 0-61.142857-11.428571t-40-28.571429-22.571429-44.571428-10.571429-52.571429-2.285714-58.857143V362.857143h1.142857v-2.285714q-4 0-10.857143-0.571429t-10.285714-0.571429q-12 0-33.714286 3.428572V254.285714h54.857143v-43.428571q0-30.857143-3.428571-50.857143h129.714286q-3.428571 23.428571-3.428572 94.285714h97.714286v108.571429q-8.571429 0-24.857143-1.142857t-24.285714-1.142857h-48.571429v208.571428q0 74.857143 49.714286 74.857143 34.857143 0 62.285714-18.857143z m-329.142857-541.142857q0 33.142857-22.285714 58t-54.857143 24.857143q-33.142857 0-56-24.857143T500 84q0-33.714286 22.571429-58.857143T578.857143 0q33.142857 0 55.142857 25.428571T656 84z\"  ></path></symbol><symbol id=\"icon-github-alt\" viewBox=\"0 0 1024 1024\"><path d=\"M402.285714 694.857143q0 22.857143-7.142857 46.857143t-24.571428 43.428571-41.428572 19.428572-41.428571-19.428572-24.571429-43.428571-7.142857-46.857143 7.142857-46.857143 24.571429-43.428571 41.428571-19.428572 41.428572 19.428572 24.571428 43.428571 7.142857 46.857143z m365.714286 0q0 22.857143-7.142857 46.857143t-24.571429 43.428571-41.428571 19.428572-41.428572-19.428572-24.571428-43.428571-7.142857-46.857143 7.142857-46.857143 24.571428-43.428571 41.428572-19.428572 41.428571 19.428572 24.571429 43.428571 7.142857 46.857143z m91.428571 0q0-68.571429-39.428571-116.571429t-106.857143-48q-23.428571 0-111.428571 12-40.571429 6.285714-89.714286 6.285715t-89.714286-6.285715q-86.857143-12-111.428571-12-67.428571 0-106.857143 48t-39.428571 116.571429q0 50.285714 18.285714 87.714286t46.285714 58.857142 69.714286 34.285715 80 16.857143 85.142857 4h96q46.857143 0 85.142857-4t80-16.857143 69.714286-34.285715 46.285714-58.857142 18.285714-87.714286z m128-100.571429q0 118.285714-34.857142 189.142857-21.714286 44-60.285715 76t-80.571428 49.142858-97.142857 27.142857-98 12.571428-95.428572 2.571429q-44.571429 0-81.142857-1.714286t-84.285714-7.142857-87.142857-17.142857-78.285715-29.428572-69.142857-46.285714-49.142857-65.714286Q36.571429 713.142857 36.571429 594.285714q0-135.428571 77.714285-226.285714-15.428571-46.857143-15.428571-97.142857 0-66.285714 29.142857-124.571429 61.714286 0 108.571429 22.571429T344.571429 239.428571q84-20 176.571428-20 84.571429 0 160 18.285715 60-46.857143 106.857143-69.142857t108-22.285715q29.142857 58.285714 29.142857 124.571429 0 49.714286-15.428571 96 77.714286 91.428571 77.714285 227.428571z\"  ></path></symbol><symbol id=\"icon-github-square\" viewBox=\"0 0 1024 1024\"><path d=\"M369.714286 685.714286q2.285714-3.428571-1.714286-7.428572-5.142857-4-8-1.142857-2.285714 3.428571 1.714286 7.428572 5.142857 4 8 1.142857z m-16-23.428572q-2.857143-4-6.857143-2.285714-3.428571 2.285714 0 6.857143 4 4.571429 6.857143 2.857143 3.428571-2.285714 0-7.428572z m-23.428572-22.857143q1.142857-2.285714-2.857143-4.571428-4-1.142857-4.571428 1.142857-1.714286 2.857143 2.285714 4.571429 4.571429 1.142857 5.142857-1.142858z m12 13.142858q1.142857-0.571429 0.857143-2.571429t-2-3.142857q-3.428571-4-5.714286-1.714286t0.571429 6.285714q3.428571 3.428571 6.285714 1.142858z m49.142857 42.857142q1.142857-4-5.142857-6.285714-5.142857-1.714286-7.428571 2.285714-1.142857 4 5.142857 6.285715 5.142857 1.714286 7.428571-2.285715z m24 1.714286q0-4.571429-6.857142-4.571428-5.714286 0-5.714286 4.571428t6.285714 4.571429 6.285714-4.571429z m22.285715-4q-1.142857-4-7.428572-2.857143t-5.142857 5.142857q1.142857 4.571429 6.857143 3.428572t5.714286-5.714286z m366.857143-181.142857q0-121.142857-85.714286-206.857143T512 219.428571 305.142857 305.142857 219.428571 512q0 95.428571 56 171.714286T419.428571 789.714286q10.285714 1.714286 15.142858-2.857143t4.857142-11.428572q0-29.714286-0.571428-54.285714-3.428571 0.571429-8.857143 1.428572t-20.285714 1.142857-27.428572-2.285715-24.857143-11.428571T340.571429 686.285714q-13.142857-33.714286-32.571429-42.285714-1.142857-0.571429-2.571429-2l-4.571428-4.571429-4-5.428571 2.285714-4.285714 11.142857-2q3.428571 0 8.571429 1.142857t17.142857 8.857143 18.857143 20.285714q9.142857 16 21.428571 24t24.857143 8 21.714286-2 17.142857-5.428571q4-26.857143 18.857143-39.428572-28-3.428571-49.142857-10.571428t-41.714286-22.285715-31.714286-43.428571T325.142857 496.571429q0-45.142857 30.285714-78.285715-13.714286-35.428571 2.857143-77.714285 10.857143-3.428571 31.142857 4.285714T424 361.714286l14.857143 9.142857q33.142857-9.714286 73.142857-9.714286t73.142857 9.714286q6.285714-4 16.285714-10.285714t31.714286-14.857143 32.571429-5.142857q16.571429 42.285714 2.857143 77.714285 30.285714 33.142857 30.285714 78.285715 0 32.571429-8 57.428571t-20.285714 40T640 619.428571t-35.714286 14.857143-39.142857 6.857143q20 17.714286 20 54.285714 0 22.857143-0.285714 50.857143t-0.285714 29.142857q0 6.857143 4.857142 11.428572t15.142858 2.857143q88-29.714286 144-106t56-171.714286z m146.285714-274.285714v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-github\" viewBox=\"0 0 1024 1024\"><path d=\"M512 73.142857q119.428571 0 220.285714 58.857143T892 291.714286 950.857143 512q0 143.428571-83.714286 258T650.857143 928.571429q-15.428571 2.857143-22.857143-4t-7.428571-17.142858q0-1.714286 0.285714-43.714285t0.285714-76.857143q0-55.428571-29.714286-81.142857 32.571429-3.428571 58.571429-10.285715t53.714286-22.285714 46.285714-38 30.285714-60T792 489.142857q0-68-45.142857-117.714286 21.142857-52-4.571429-116.571428-16-5.142857-46.285714 6.285714t-52.571429 25.142857l-21.714285 13.714286q-53.142857-14.857143-109.714286-14.857143t-109.714286 14.857143q-9.142857-6.285714-24.285714-15.428571T330.285714 262.571429 281.714286 254.857143q-25.714286 64.571429-4.571429 116.571428-45.142857 49.714286-45.142857 117.714286 0 48.571429 11.714286 85.714286t30 60 46 38.285714 53.714285 22.285714 58.571429 10.285715q-22.285714 20.571429-28 58.857143-12 5.714286-25.714286 8.571428t-32.571428 2.857143-37.428572-12.285714T276.571429 728q-10.857143-18.285714-27.714286-29.714286t-28.285714-13.714285l-11.428572-1.714286q-12 0-16.571428 2.571428t-2.857143 6.571429 5.142857 8 7.428571 6.857143l4 2.857143q12.571429 5.714286 24.857143 21.714285t18 29.142858l5.714286 13.142857q7.428571 21.714286 25.142857 35.142857t38.285714 17.142857 39.714286 4 31.714286-2l13.142857-2.285714q0 21.714286 0.285714 50.571428t0.285714 31.142857q0 10.285714-7.428571 17.142858t-22.857143 4q-132.571429-44-216.285714-158.571429T73.142857 512q0-119.428571 58.857143-220.285714T291.714286 132 512 73.142857zM239.428571 703.428571q1.714286-4-4-6.857142-5.714286-1.714286-7.428571 1.142857-1.714286 4 4 6.857143 5.142857 3.428571 7.428571-1.142858z m17.714286 19.428572q4-2.857143-1.142857-9.142857-5.714286-5.142857-9.142857-1.714286-4 2.857143 1.142857 9.142857 5.714286 5.714286 9.142857 1.714286z m17.142857 25.714286q5.142857-4 0-10.857143-4.571429-7.428571-9.714285-3.428572-5.142857 2.857143 0 10.285715t9.714285 4z m24 24q4.571429-4.571429-2.285714-10.857143-6.857143-6.857143-11.428571-1.714286-5.142857 4.571429 2.285714 10.857143 6.857143 6.857143 11.428571 1.714286z m32.571429 14.285714q1.714286-6.285714-7.428572-9.142857-8.571429-2.285714-10.857142 4t7.428571 8.571428q8.571429 3.428571 10.857143-3.428571z m36 2.857143q0-7.428571-9.714286-6.285715-9.142857 0-9.142857 6.285715 0 7.428571 9.714286 6.285714 9.142857 0 9.142857-6.285714z m33.142857-5.714286q-1.142857-6.285714-10.285714-5.142857-9.142857 1.714286-8 8.571428t10.285714 4.571429 8-8z\"  ></path></symbol><symbol id=\"icon-gitlab\" viewBox=\"0 0 1024 1024\"><path d=\"M59.428571 403.428571l452.571429 580-496-360q-10.285714-7.428571-14.285714-19.714285t0-24.285715l57.714285-176z m264 0h377.142858L512 983.428571zM210.285714 53.714286l113.142857 349.714285H59.428571L172.571429 53.714286q4.571429-13.142857 18.857142-13.142857t18.857143 13.142857z m754.285715 349.714285l57.714285 176q4 12 0 24.285715t-14.285714 19.714285l-496 360 452.571429-580z m0 0h-264l113.142857-349.714285q4.571429-13.142857 18.857143-13.142857t18.857142 13.142857z\"  ></path></symbol><symbol id=\"icon-gittip\" viewBox=\"0 0 1024 1024\"><path d=\"M514.857143 744l200-270.285714q9.142857-12.571429 14-33.714286t-3.428572-48.571429-35.142857-45.142857q-22.857143-14.857143-47.428571-14.571428T600.857143 341.714286 569.714286 367.428571q-20.571429 22.857143-54.857143 22.857143-33.714286 0-54.285714-22.857143-13.714286-16-31.142858-25.714285T387.428571 331.714286 339.428571 346.285714q-26.285714 17.714286-34.571428 45.142857t-3.428572 48.571429 14 33.714286z m436-232q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-glass\" viewBox=\"0 0 1024 1024\"><path d=\"M970.857143 106.285714q0 20-24.571429 44.571429l-361.142857 361.142857v438.857143h182.857143q14.857143 0 25.714286 10.857143t10.857143 25.714285-10.857143 25.714286-25.714286 10.857143H256q-14.857143 0-25.714286-10.857143t-10.857143-25.714286 10.857143-25.714285 25.714286-10.857143h182.857143V512L77.714286 150.857143q-24.571429-24.571429-24.571429-44.571429 0-13.142857 10.285714-20.857143t21.714286-10 24.571429-2.285714h804.571428q13.142857 0 24.571429 2.285714t21.714286 10 10.285714 20.857143z\"  ></path></symbol><symbol id=\"icon-glide-g\" viewBox=\"0 0 1024 1024\"><path d=\"M498.571429 174.285714q0-13.714286-1.142858-22t-4.857142-17.142857-12-13.142857T459.142857 117.714286q-22.285714 0-44.571428 13.142857-60 33.142857-90.857143 108.857143T292.857143 393.714286q0 25.142857 4.857143 48.857143T312.857143 488.571429t30 35.714285T389.428571 537.714286q2.285714 0 10.285715 0.285714t11.428571 0 9.142857-1.714286 8.571429-4.857143 4-9.142857q9.142857-44 27.428571-132.285714T487.714286 257.714286q10.857143-52 10.857143-83.428572z m430.857142 374.857143q0 4-4.285714 7.714286T916.285714 560.571429l-3.428571-0.571429q-12.571429-1.714286-35.428572-6.285714t-41.142857-7.142857-36-2.571429q-95.428571 0-200.571428 53.142857-8.571429 4.571429-12 15.428572-5.714286 20.571429-14 60.285714T560.857143 730.285714q-13.142857 52-40 102.571429T456.571429 926.857143 368.285714 997.142857t-105.714285 26.857143q-77.142857 0-122.571429-47.714286T94.571429 850.857143q0-30.285714 11.142857-66.857143t36-66.571429T197.428571 687.428571q21.714286 0 68.571429 19.142858t47.428571 35.142857q0 0.571429-9.428571 7.142857t-22.571429 17.714286-26.285714 25.428571-22.285714 34.857143-9.142857 42.285714q0 18.857143 9.428571 30.285714t27.714286 11.428572q25.714286 0 48.571428-18t38-44.571429 27.428572-60.285714 18.571428-61.142857 9.142858-51.428572v-5.142857q0-1.142857-2-2t-4.857143-0.857143h-5.714286l-5.714286 0.285715-3.428571 0.285714q-129.714286 0-201.142857-70T108.285714 398.857143q0-61.714286 19.714286-126.285714t54.857143-120 89.142857-95.714286T388.857143 5.714286q29.714286-5.142857 60.571428-5.142857 213.714286 0 213.714286 205.714285 0 56-21.714286 156t-24.571428 120.571429l1.714286 1.714286q57.714286-32.571429 104.285714-50.285715t95.714286-17.714285q12.571429 0 30.285714 7.428571 10.857143 4 45.714286 58.571429t34.857142 66.571428z\"  ></path></symbol><symbol id=\"icon-glide\" viewBox=\"0 0 1024 1024\"><path d=\"M568 294.285714q0 15.428571-7.428571 53.714286-6.285714 28.571429-18 85.714286T525.142857 519.428571q-1.142857 6.285714-2.571428 7.142858T514.857143 528q-11.428571 1.142857-17.714286 1.142857-33.142857 0-48-28.285714T434.285714 436q0-50.285714 20-99.428571t58.857143-70.857143q16-8 29.142857-8 16 0 20.857143 9.428571T568 294.285714z m277.714286 242.285715q0-8-22.285715-43.142858t-29.714285-38q-12-4.571429-19.428572-4.571428-52 0-129.142857 44l-1.142857-1.142857q1.714286-12.571429 15.714286-77.142857t14-101.714286q0-133.142857-138.285715-133.142857-13.714286 0-38.857142 3.428571-53.714286 9.714286-96.285715 51.142857T336.571429 331.428571t-21.142858 108q0 83.428571 46 128.571429t130 45.142857q14.285714 0 14.285715 1.714286t-0.571429 2.857143q-2.285714 19.428571-14.857143 66.857143-8 29.714286-29.428571 57.714285t-47.142857 28q-24 0-24-26.857143 0-13.714286 6-27.142857t14.285714-22.571428 16.857143-16.285715 14.857143-11.428571 6.285714-4.857143q0-1.714286-4-5.714286-13.714286-12.571429-33.428571-20.857142T373.142857 626.285714q-20 0-36.285714 19.428572t-23.428572 42.857143-7.142857 42.857142q0 50.285714 29.428572 81.142858t79.142857 30.857142q46.857143 0 88.571428-30.285714t67.142858-72 37.428571-87.428571q3.428571-12.571429 8.857143-38T625.142857 577.714286q1.714286-6.857143 8-10.285715 67.428571-34.285714 129.714286-34.285714 27.428571 0 72.571428 10.285714 0.571429 0.571429 2.285715 0.571429 2.857143 0 5.428571-2.571429t2.571429-4.857142z m105.142857-298.857143v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-globe\" viewBox=\"0 0 1024 1024\"><path d=\"M512 73.142857q119.428571 0 220.285714 58.857143T892 291.714286 950.857143 512t-58.857143 220.285714-159.714286 159.714286T512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857z m156.571429 297.714286q-1.142857 0.571429-5.428572 5.428571T655.428571 381.714286q1.142857 0 2.571429-2.857143t2.857143-6.285714 2-4q3.428571-4 12.571428-8.571429 8-3.428571 29.714286-6.857143 19.428571-4.571429 29.142857 6.285714-1.142857-1.142857 5.428572-7.428571t8.285714-6.857143q1.714286-1.142857 8.571429-2.571428t8.571428-4.285715l1.142857-12.571428q-6.857143 0.571429-10-4t-3.714285-12q0 1.142857-3.428572 4.571428 0-4-2.571428-4.571428t-6.571429 0.571428-5.142857 0.571429q-5.714286-1.714286-8.571429-4.285714t-4.571428-9.428572-2.285715-8.571428q-1.142857-2.857143-5.428571-6.285715t-5.428571-5.714285q-0.571429-1.142857-1.428572-3.142858t-1.714286-3.714285-2.285714-3.142857-3.142857-1.428572-4 2.857143-4.285714 5.714286-2.571429 2.857143q-1.714286-1.142857-3.428571-0.857143t-2.571429 0.571428-2.571428 1.714286-2.857143 2q-1.714286 1.142857-4.857143 1.714286t-4.857143 1.142857q8.571429-2.857143-0.571429-6.285714-5.714286-2.285714-9.142857-1.714286 5.142857-2.285714 4.285715-6.857143t-4.857143-8h2.857143q-0.571429-2.285714-4.857143-4.857143T645.714286 250.285714t-7.428572-3.428571q-4.571429-2.857143-19.428571-5.428572t-18.857143-0.285714q-2.857143 3.428571-2.571429 6t2.285715 8T601.714286 262.285714q0.571429 3.428571-3.142857 7.428572t-3.714286 6.857143q0 4 8 8.857142t5.714286 12.285715q-1.714286 4.571429-9.142858 9.142857t-9.142857 6.857143q-2.857143 4.571429-0.857143 10.571428T595.428571 333.714286q1.142857 1.142857 0.857143 2.285714t-2 2.571429-3.142857 2.285714-3.714286 2l-1.714285 1.142857q-6.285714 2.857143-11.714286-3.428571T566.285714 325.714286q-4-14.285714-9.142857-17.142857-13.142857-4.571429-16.571428 0.571428-2.857143-7.428571-23.428572-14.857143-14.285714-5.142857-33.142857-2.285714 3.428571-0.571429 0-8.571429-4-8.571429-10.857143-6.857142 1.714286-3.428571 2.285714-10t0.571429-7.714286q1.714286-7.428571 6.857143-13.142857 0.571429-0.571429 4-4.857143t5.428571-7.714286 0.285715-3.428571q20 2.285714 28.571428-6.285715 2.857143-2.857143 6.571429-9.714285t6-9.714286q5.142857-3.428571 8-3.142857t8.285714 3.142857 8.285714 2.857143q8 0.571429 8.857143-6.285714t-4.285714-11.428572q6.857143 0.571429 1.714286-9.714286-2.285714-4-4.571429-5.142857-6.857143-2.285714-15.428571 2.857143-4.571429 2.285714 1.142857 4.571429-0.571429-0.571429-5.428572 6T530.857143 197.714286t-9.142857-2.857143q-0.571429-0.571429-3.142857-7.714286T513.142857 179.428571q-4.571429 0-9.142857 8.571429 1.714286-4.571429-6.285714-8.571429t-13.714286-4.571428q10.857143-6.857143-4.571429-15.428572-4-2.285714-11.714285-2.857142t-11.142857 2.285714q-2.857143 4-3.142858 6.571428t2.857143 4.571429T462.285714 173.142857t6.571429 2.285714 4.857143 1.714286q8 5.714286 4.571428 8-1.142857 0.571429-4.857143 2T466.857143 189.714286t-3.428572 2.285714q-1.714286 2.285714 0 8t-1.142857 8q-2.857143-2.857143-5.142857-10t-4-9.428571q4 5.142857-14.285714 3.428571l-5.714286-0.571429q-2.285714 0-9.142857 1.142858t-11.714286 0.571428-7.714285-4.571428q-2.285714-4.571429 0-11.428572 0.571429-2.285714 2.285714-1.142857-2.285714-1.714286-6.285714-5.428571t-5.714286-4.857143q-26.285714 8.571429-53.714286 23.428571 3.428571 0.571429 6.857143-0.571428 2.857143-1.142857 7.428571-3.714286t5.714286-3.142857q19.428571-8 24-4l2.857143-2.857143q8 9.142857 11.428571 14.285714-4-2.285714-17.142857-0.571428-11.428571 3.428571-12.571428 6.857142 4 6.857143 2.857143 10.285715-2.285714-1.714286-6.571429-5.714286T357.714286 193.714286t-8.571429-2.857143q-9.142857 0-12.571428 0.571428-83.428571 45.714286-134.285715 126.857143 4 4 6.857143 4.571429 2.285714 0.571429 2.857143 5.142857t1.428571 6.285714 6.571429-1.714285q5.142857 4.571429 1.714286 10.857142 0.571429-0.571429 25.142857 15.428572 10.857143 9.714286 12 12 1.714286 6.285714-5.714286 10.285714-0.571429-1.142857-5.142857-5.142857t-5.142857-2.285714q-1.714286 2.857143 0.285714 10.571428T249.142857 391.428571q-4 0-5.428571 9.142858t-1.428572 20.285714-0.571428 13.428571l1.142857 0.571429q-1.714286 6.857143 3.142857 19.714286T258.285714 465.714286q-7.428571 1.714286 11.428572 24.571428 3.428571 4.571429 4.571428 5.142857 1.714286 1.142857 6.857143 4.285715t8.571429 5.714285 5.714285 6q2.285714 2.857143 5.714286 12.857143t8 13.428572q-1.142857 3.428571 5.428572 11.428571t6 13.142857q-0.571429 0-1.428572 0.571429t-1.428571 0.571428q1.714286 4 8.857143 8t8.857142 7.428572q0.571429 1.714286 1.142858 5.714286t1.714285 6.285714 4.571429 1.142857q1.142857-11.428571-13.714286-35.428571-8.571429-14.285714-9.714286-16.571429-1.714286-2.857143-3.142857-8.857143T313.714286 522.857143q1.142857 0 3.428571 0.857143t4.857143 2 4.285714 2.285714 1.142857 1.714286q-1.714286 4 1.142858 10t6.857142 10.571428 9.714286 10.857143 6.857143 7.428572q3.428571 3.428571 8 11.142857t0 7.714285q5.142857 0 11.428571 6t9.714286 11.142858q2.857143 4.571429 4.571429 14.857142t2.857143 13.714286q1.142857 4 4.857142 7.714286t7.142858 5.428571l9.142857 4.571429 7.428571 4q2.857143 1.142857 10.571429 6T440 667.428571q5.714286 2.285714 9.142857 2.285715t8.285714-1.428572 7.714286-2q8.571429-1.142857 16.571429 8.571429t12 12q20.571429 10.857143 31.428571 6.285714-1.142857 0.571429 0.285714 4.285714t4.571429 8.857143 5.142857 8.285715 3.142857 4.857142q2.857143 3.428571 10.285715 8.571429t10.285714 8.571429q3.428571-2.285714 4-5.142858-1.714286 4.571429 4 11.428572t10.285714 5.714286q8-1.714286 8-18.285715-17.714286 8.571429-28-10.285714 0-0.571429-1.428571-3.142857t-2.285715-4.857143-1.428571-4.857143 0-4.285714 2.857143-1.714286q5.142857 0 5.714286-2t-1.142858-7.142857-2.285714-7.428571q-0.571429-4.571429-6.285714-11.428572t-6.857143-8.571428q-2.857143 5.142857-9.142857 4.571428t-9.142857-5.142857q0 0.571429-0.857143 3.142857t-0.857143 3.714286q-7.428571 0-8.571429-0.571429 0.571429-1.714286 1.428572-10t2-12.857143q0.571429-2.285714 3.142857-6.857142t4.285714-8.285715 2.285715-7.142857-2.571429-5.428571-10-1.428572q-10.857143 0.571429-14.857143 11.428572-0.571429 1.714286-1.714286 6t-2.857142 6.571428-5.142858 4q-4 1.714286-13.714285 1.142857t-13.714286-2.857142q-7.428571-4.571429-12.857143-16.571429t-5.428571-21.142857q0-5.714286 1.428571-15.142857t1.714286-14.285715T445.714286 563.428571q1.714286-1.142857 5.142857-5.428571t5.714286-6q1.142857-0.571429 2.571428-0.857143t2.571429 0 2.285714-0.857143 1.714286-3.428571q-0.571429-0.571429-2.285715-1.714286-1.714286-1.714286-2.285714-1.714286 4 1.714286 16.285714-0.857142T493.142857 543.428571q8.571429 6.285714 12.571429-1.142857 0-0.571429-1.428572-5.428571T504 529.142857q2.857143 15.428571 16.571429 5.142857 1.714286 1.714286 8.857142 2.857143t10 2.857143q1.714286 1.142857 4 3.142857t3.142858 2.571429 2.857142-0.285715 4.857143-3.714285q5.714286 8 6.857143 13.714285 6.285714 22.857143 10.857143 25.142858 4 1.714286 6.285714 1.142857t2.571429-5.428572 0-8T580 561.142857l-0.571429-4.571428v-10.285715l-0.571428-4.571428q-8.571429-1.714286-10.571429-6.857143t0.857143-10.571429 8.571429-10.571428q0.571429-0.571429 4.571428-2t8.857143-3.714286 7.142857-4.571429q12-10.857143 8.571429-20 4 0 6.285714-5.142857-0.571429 0-2.857143-1.714285t-4.285714-2.857143-2.571429-1.142857q5.142857-2.857143 1.142858-9.142858 2.857143-1.714286 4.285714-6.285714t4.285714-5.714286q5.142857 6.857143 12 1.142858 4.571429-4.571429 0.571429-9.142858 2.857143-4 11.714285-6t10.571429-5.428571q4 1.142857 4.571429-1.142857t0.571428-6.857143 1.714286-6.857143q2.285714-2.857143 8.571428-5.142857t7.428572-2.857143l9.714286-6.285714q1.714286-2.285714 0-2.285714 10.285714 1.142857 17.714285-6.285715 5.714286-6.285714-3.428571-11.428571 1.714286-3.428571-1.714286-5.428572t-8.571428-3.142857q1.714286-0.571429 6.571428-0.285714t6-0.857143q8.571429-5.714286-4-9.142857-9.714286-2.857143-24.571428 6.857143z m-93.142858 501.142857q117.714286-20.571429 200.571429-108-1.714286-1.714286-7.142857-2.571429t-7.142857-2q-10.285714-4-13.714286-4.571428 0.571429-4-1.428571-7.428572t-4.571429-5.142857-7.142857-4.571428-6.285714-4q-1.142857-1.142857-4-3.428572t-4-3.142857-4.285715-2.571428-4.857143-1.142858-5.714285 0.571429l-1.714286 0.571429q-1.714286 0.571429-3.142857 1.428571t-3.142857 1.714286-2.285715 1.714285 0 1.428572q-12-9.714286-20.571428-12.571429-2.857143-0.571429-6.285714-3.142857t-6-4-5.714286-0.857143-6.571429 4q-2.857143 2.857143-3.428571 8.571429t-1.142857 7.428571q-4-2.857143 0-10t1.142857-10.571428q-1.714286-3.428571-6-2.571429t-6.857143 2.571429-6.571429 4.857143-5.142857 3.714285-4.857143 3.142857-4.857142 4.285715q-1.714286 2.285714-3.428572 6.857143t-2.857143 6.285714q-1.142857-2.285714-6.571428-3.714286t-5.428572-3.142857q1.142857 5.714286 2.285715 20t2.857142 21.714286q4 17.714286-6.857142 27.428571-15.428571 14.285714-16.571429 22.857143-2.285714 12.571429 6.857143 14.857143 0 4-4.571429 11.714286t-4 12.285714q0 3.428571 1.142857 9.142857z\"  ></path></symbol><symbol id=\"icon-google-plus-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M597.142857 517.142857q0-18.857143-3.428571-36.571428H386.857143v75.428571h124q-6.857143 43.428571-42.571429 68.857143T386.857143 650.285714q-56.571429 0-96.571429-40.857143T250.285714 512t40-97.428571T386.857143 373.714286q53.142857 0 87.428571 33.714285l59.428572-57.714285Q472 292.571429 386.857143 292.571429q-91.428571 0-155.428572 64.285714T167.428571 512t64 155.142857T386.857143 731.428571q94.285714 0 152.285714-60T597.142857 517.142857z m197.142857 26.285714h62.285715V480.571429h-62.285715V417.714286h-62.857143v62.857143h-62.857142v62.857142h62.857142v62.857143h62.857143V543.428571z m156.571429-31.428571q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-google-plus-official\" viewBox=\"0 0 1024 1024\"><path d=\"M597.142857 517.142857q0-18.857143-3.428571-36.571428H386.857143v75.428571h124q-6.857143 43.428571-42.571429 68.857143T386.857143 650.285714q-56.571429 0-96.571429-40.857143T250.285714 512t40-97.428571T386.857143 373.714286q53.142857 0 87.428571 33.714285l59.428572-57.714285Q472 292.571429 386.857143 292.571429q-91.428571 0-155.428572 64.285714T167.428571 512t64 155.142857T386.857143 731.428571q94.285714 0 152.285714-60T597.142857 517.142857z m197.142857 26.285714h62.285715V480.571429h-62.285715V417.714286h-62.857143v62.857143h-62.857142v62.857142h62.857142v62.857143h62.857143V543.428571z m156.571429-31.428571q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-google-plus-square\" viewBox=\"0 0 1024 1024\"><path d=\"M597.142857 517.142857q0-14.857143-3.428571-36.571428H386.857143v75.428571h124q-1.714286 13.714286-9.428572 28.571429t-21.428571 30.285714-38 25.428571T386.857143 650.285714q-56.571429 0-96.571429-40.571428t-40-97.714286 40-97.714286 96.571429-40.571428q52.571429 0 87.428571 33.714285l59.428572-57.714285Q472 292.571429 386.857143 292.571429q-91.428571 0-155.428572 64.285714T167.428571 512t64 155.142857T386.857143 731.428571q94.285714 0 152.285714-60T597.142857 517.142857z m197.142857 26.285714h62.285715V480.571429h-62.285715V417.714286h-62.857143v62.857143h-62.857142v62.857142h62.857142v62.857143h62.857143V543.428571z m156.571429-305.714285v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-google-plus\" viewBox=\"0 0 1316 1024\"><path d=\"M821.142857 521.714286q0 118.857143-49.714286 211.714285t-141.714285 145.142858-210.857143 52.285714q-85.142857 0-162.857143-33.142857t-133.714286-89.142857-89.142857-133.714286T0 512t33.142857-162.857143 89.142857-133.714286 133.714286-89.142857 162.857143-33.142857q163.428571 0 280.571428 109.714286l-113.714285 109.142857Q518.857143 247.428571 418.857143 247.428571q-70.285714 0-130 35.428572T194.285714 379.142857 159.428571 512t34.857143 132.857143T288.857143 741.142857t130 35.428572q47.428571 0 87.142857-13.142858t65.428571-32.857142 44.857143-44.857143 28-47.428572 12.285715-42.285714H418.857143V452h395.428571q6.857143 36 6.857143 69.714286z m495.428572-69.714286v120h-119.428572v119.428571h-120v-119.428571h-119.428571V452h119.428571V332.571429h120v119.428571h119.428572z\"  ></path></symbol><symbol id=\"icon-google-wallet\" viewBox=\"0 0 1024 1024\"><path d=\"M252 384q18.857143 0 29.714286 14.857143 152 208 206.857143 442.285714H233.714286Q161.142857 589.142857 24 413.142857q-6.857143-9.142857-1.714286-19.142857T38.857143 384h213.142857z m319.428571 204q-28 113.714286-71.428571 224.571429-45.142857-177.142857-146.285714-339.428572 22.857143-126.285714 25.142857-256.571428 120.571429 194.285714 192.571428 371.428571z m56.571429-405.142857q134.285714 185.142857 219.714286 399.142857T953.142857 1024h-257.714286q-23.428571-380-316-841.142857h248.571429z m396 329.142857q0 242.285714-57.714286 464-38.285714-320-205.142857-618.857143-14.285714-172-60.571428-333.714286-2.285714-9.142857 3.142857-16.285714T718.285714 0h205.142857q12 0 22 7.428571t12.857143 18.857143q65.714286 233.714286 65.714286 485.714286z\"  ></path></symbol><symbol id=\"icon-google\" viewBox=\"0 0 1024 1024\"><path d=\"M512 449.142857h414.285714q6.857143 38.285714 6.857143 73.142857 0 124-52 221.428572T732.857143 896 512 950.857143q-89.714286 0-170.857143-34.571429T201.142857 822.857143 107.714286 682.857143 73.142857 512t34.571429-170.857143T201.142857 201.142857t140-93.428571T512 73.142857q171.428571 0 294.285714 114.857143l-119.428571 114.857143Q616.571429 234.857143 512 234.857143q-73.714286 0-136.285714 37.142857T276.571429 372.857143 240 512t36.571429 139.142857T375.714286 752t136.285714 37.142857q49.714286 0 91.428571-13.714286t68.571429-34.285714 46.857143-46.857143 29.428571-49.714285 12.857143-44.571429H512V449.142857z\"  ></path></symbol><symbol id=\"icon-graduation-cap\" viewBox=\"0 0 1316 1024\"><path d=\"M1013.714286 477.714286l10.285714 180.571428q2.285714 39.428571-46.857143 73.142857t-134.285714 53.428572-184.571429 19.714286-184.571428-19.714286-134.285715-53.428572-46.857142-73.142857l10.285714-180.571428 328 103.428571q12.571429 4 27.428571 4t27.428572-4z m302.857143-185.142857q0 13.142857-12.571429 17.714285L664 511.428571q-2.285714 0.571429-5.714286 0.571429t-5.714285-0.571429L280 393.714286q-24.571429 19.428571-40.571429 63.714285T220 559.428571q36 20.571429 36 62.285715 0 39.428571-33.142857 61.142857l33.142857 247.428571q1.142857 8-4.571429 14.285715-5.142857 6.285714-13.714285 6.285714H128q-8.571429 0-13.714286-6.285714-5.714286-6.285714-4.571428-14.285715l33.142857-247.428571q-33.142857-21.714286-33.142857-61.142857 0-41.714286 37.142857-63.428572 6.285714-118.285714 56-188.571428L12.571429 310.285714q-12.571429-4.571429-12.571429-17.714285t12.571429-17.714286l640-201.142857q2.285714-0.571429 5.714285-0.571429t5.714286 0.571429l640 201.142857q12.571429 4.571429 12.571429 17.714286z\"  ></path></symbol><symbol id=\"icon-gratipay\" viewBox=\"0 0 1024 1024\"><path d=\"M514.857143 744l200-270.285714q9.142857-12.571429 14-33.714286t-3.428572-48.571429-35.142857-45.142857q-22.857143-14.857143-47.428571-14.571428T600.857143 341.714286 569.714286 367.428571q-20.571429 22.857143-54.857143 22.857143-33.714286 0-54.285714-22.857143-13.714286-16-31.142858-25.714285T387.428571 331.714286 339.428571 346.285714q-26.285714 17.714286-34.571428 45.142857t-3.428572 48.571429 14 33.714286z m436-232q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-grav\" viewBox=\"0 0 1025 1024\"><path d=\"M737.714286 272q-8.571429-9.714286-20-4.857143t-14.857143 16.285714 2.857143 21.714286q8 9.714286 22.857143 8.285714t19.428571-11.714285-10.285714-29.714286zM511.428571 412.571429q-4.571429 4.571429-11.142857 4.571428t-10.571428-4.571428q-4.571429-4.571429-4.571429-10.857143t4.571429-10.285715q4-4.571429 10.571428-4.571428t11.142857 4.571428q4 4 4 10.285715t-4 10.857143z m94.285715 42.285714l-20 20q-6.857143 7.428571-16.857143 7.428571T551.428571 474.857143l-21.714285-21.714286q-6.857143-7.428571-6.857143-17.142857t6.857143-17.142857l20-20q6.857143-6.857143 16.857143-6.857143t17.428571 6.857143l21.714286 22.285714q6.857143 6.857143 6.857143 16.857143t-6.857143 16.857143zM543.428571 380.571429q-4 4.571429-10.571428 4.571428t-11.142857-4.571428q-4-4.571429-4-10.857143t4-10.857143q4.571429-4.571429 10.857143-4.571429t10.857142 4.571429 4.571429 10.857143-4.571429 10.857143z m230.285715-56q-19.428571 36.571429-61.428572 48.857142T639.428571 364q-21.714286-16-34.857142-38t-12-50 22.285714-52.571429 43.142857-30.285714 40.285714 2.857143 40 29.142857q1.142857 1.142857 7.428572 7.142857t8.285714 7.714286 7.428571 7.714286T768.571429 256.571429t5.714285 8.857142 4.857143 10.285715 2.285714 10.571428 0.571429 12-2.857143 12.571429-5.428571 13.714286z m114.857143 275.428571q1.714286-11.428571-4.857143-19.714286T868 568t-18.857143-9.714286-13.142857-11.428571q-22.857143-40.571429-48-56.285714T723.428571 484q10.857143-7.428571 22.857143-10.571429t18.857143-2.571428l6.857143 0.571428q1.142857-25.714286-19.428571-51.428571 3.428571-11.428571 3.714285-23.142857T754.857143 379.428571l-1.714286-5.714285q24.571429-13.714286 40.571429-37.142857t19.428571-52q5.714286-48-24.571428-86T710.285714 154.857143q-34.285714-4-65.142857 10.571428t-46.857143 42.571429q-17.142857 29.142857-19.142857 57.714286t8.285714 49.714285 24.857143 36.571429 32.285715 24q-25.714286-2.285714-50.285715-20.571429t-32.571428-50.285714q-16-61.714286 18.285714-126.857143-9.142857-12-16.571429-18.285714-28.571429 0-50.857142 10.857143 10.857143-13.714286 24-21.142857t20.571428-8l7.428572-0.571429q0-28.571429-7.428572-44.571428-5.714286-12-18.571428-16.285715t-26.857143 2-21.428572 22.857143q1.142857-2.285714 2.285715-4-4 16-3.714286 43.142857t10.857143 66.857143T527.428571 281.142857q-14.285714 8-26.857142 20.571429-20 9.142857-48.857143 40.285714T403.428571 400l-18.857142 26.285714q-51.428571 19.428571-103.428572 71.714286T238.285714 590.857143q0.571429 9.142857 6.285715 15.428571-8.571429 6.857143-17.142858 17.142857-12 14.285714-12 30.857143t12.285715 22.857143 36.285714-3.428571q23.428571-10.857143 44-28.285715t31.428571-34.571428q-1.142857-1.142857-3.714285-2.857143t-11.714286-4.285714-18.857143-2q13.142857-2.857143 29.142857-7.142857t22.857143-5.714286 15.714286-3.428572 14.857143-2.285714 13.428571-0.285714q8 4 12.571429-19.428572 4-21.142857 4-51.428571 0-58.285714-22.857143-85.714286 60.571429 58.857143 57.714286 125.142857-0.571429 16.571429-8.571429 28.571429t-15.428571 15.428571l-7.428572 3.428572q-2.285714 4-10.857143 18.285714t-14.857143 26-15.142857 29.714286-14.285714 34.857143-9.714286 36-3.714285 38 5.714285 36q-20-30.857143-21.142857-45.714286-12.571429 13.714286-19.714286 22.285714t-19.142857 24-17.428571 26.285715-9.428572 23.428571-0.285714 21.714286 14.571429 15.428571q25.714286 14.285714 82.285714-36.571428t108.857143-126.571429T546.857143 611.428571q49.142857-29.714286 82.857143-66t49.142857-68.285714q26.857143 53.142857 88 101.714286 59.428571 47.428571 95.428571 45.714286 22.285714-1.142857 26.285715-24.571429z m136.571428-88q0 104-40.571428 198.857143t-109.142858 163.428571-163.714285 109.142857-199.142857 40.571429-199.142858-40.571429T149.714286 874.285714 40.571429 710.857143 0 512t40.571429-198.857143 109.142857-163.428571T313.428571 40.571429 512.571429 0t199.142857 40.571429T875.428571 149.714286t109.142858 163.428571 40.571428 198.857143z\"  ></path></symbol><symbol id=\"icon-group\" viewBox=\"0 0 1097 1024\"><path d=\"M338.857143 512q-92.571429 2.857143-151.428572 73.142857H110.857143q-46.857143 0-78.857143-23.142857T0 494.285714q0-201.714286 70.857143-201.714285 3.428571 0 24.857143 12t55.714285 24.285714T219.428571 341.142857q38.285714 0 76-13.142857-2.857143 21.142857-2.857142 37.714286 0 79.428571 46.285714 146.285714z m612 364q0 68.571429-41.714286 108.285714t-110.857143 39.714286H298.857143q-69.142857 0-110.857143-39.714286T146.285714 876q0-30.285714 2-59.142857t8-62.285714T171.428571 692.571429t24.571429-55.714286 35.428571-46.285714 48.857143-30.571429T344 548.571429q5.714286 0 24.571429 12.285714t41.714285 27.428571 61.142857 27.428572 77.142858 12.285714 77.142857-12.285714 61.142857-27.428572 41.714286-27.428571 24.571428-12.285714q34.857143 0 63.714286 11.428571t48.857143 30.571429 35.428571 46.285714 24.571429 55.714286 15.142857 62 8 62.285714 2 59.142857zM365.714286 146.285714q0 60.571429-42.857143 103.428572t-103.428572 42.857143-103.428571-42.857143-42.857143-103.428572 42.857143-103.428571T219.428571 0t103.428572 42.857143 42.857143 103.428571z m402.285714 219.428572q0 90.857143-64.285714 155.142857T548.571429 585.142857 393.428571 520.857143 329.142857 365.714286t64.285714-155.142857T548.571429 146.285714t155.142857 64.285715T768 365.714286z m329.142857 128.571428q0 44.571429-32 67.714286t-78.857143 23.142857h-76.571428q-58.857143-70.285714-151.428572-73.142857 46.285714-66.857143 46.285715-146.285714 0-16.571429-2.857143-37.714286 37.714286 13.142857 76 13.142857 33.714286 0 68-12.285714t55.714285-24.285714 24.857143-12q70.857143 0 70.857143 201.714285z m-73.142857-348q0 60.571429-42.857143 103.428572t-103.428571 42.857143-103.428572-42.857143-42.857143-103.428572 42.857143-103.428571 103.428572-42.857143 103.428571 42.857143 42.857143 103.428571z\"  ></path></symbol><symbol id=\"icon-h-square\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 768V256q0-14.857143-10.857143-25.714286t-25.714286-10.857143h-73.142857q-14.857143 0-25.714286 10.857143t-10.857143 25.714286v182.857143H365.714286V256q0-14.857143-10.857143-25.714286t-25.714286-10.857143H256q-14.857143 0-25.714286 10.857143t-10.857143 25.714286v512q0 14.857143 10.857143 25.714286t25.714286 10.857143h73.142857q14.857143 0 25.714286-10.857143t10.857143-25.714286v-182.857143h292.571428v182.857143q0 14.857143 10.857143 25.714286t25.714286 10.857143h73.142857q14.857143 0 25.714286-10.857143t10.857143-25.714286z m146.285714-530.285714v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-hacker-news\" viewBox=\"0 0 1024 1024\"><path d=\"M535.428571 573.714286l152-285.142857H623.428571L533.714286 466.857143q-13.714286 27.428571-25.142857 52.571428l-24-52.571428-88.571429-178.285714H327.428571l150.285715 281.714285v185.142857h57.714285v-181.714285z m415.428572-336v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-hand-grab-o\" viewBox=\"0 0 1024 1024\"><path d=\"M512 219.428571q-30.285714 0-51.714286 21.428572T438.857143 292.571429v73.142857h-18.285714v-53.142857q0-27.428571-18.285715-46.571429T356.571429 246.857143q-26.285714 0-45.142858 18.857143t-18.857142 45.142857v245.142857l-18.285715-17.142857V440.571429q0-27.428571-18.285714-46.571429T210.285714 374.857143q-26.285714 0-45.142857 18.857143t-18.857143 45.142857v128q0 26.857143 20 46.857143l177.142857 169.142857q22.285714 22.285714 22.285715 58.285714 0 14.857143 10.857143 25.714286t25.714285 10.857143h365.714286q14.857143 0 25.714286-10.857143t10.857143-25.714286v-14.285714q0-23.428571 5.714285-44l61.714286-249.142857q5.714286-20.571429 5.714286-44V349.142857q0-27.428571-18.285715-46.571428t-45.714285-19.142858q-26.285714 0-45.142857 18.857143t-18.857143 45.142857v18.285715h-18.285715V294.285714q0-22.857143-14.285714-41.428571t-36.571428-23.142857q-8-1.142857-13.142858-1.142857-26.285714 0-45.142857 18.857142t-18.857143 45.142858v73.142857h-18.285714V296q0-29.142857-18.571428-51.142857T519.428571 220q-2.857143-0.571429-7.428571-0.571429z m0-73.142857q48 0 85.142857 28.571429 32.571429-19.428571 70.285714-19.428572 33.714286 0 63.428572 15.428572t49.142857 43.428571q15.428571-4 33.714286-4 57.142857 0 97.142857 40.857143t40 98v140.571429q0 29.142857-7.428572 61.714285l-62.285714 249.142858q-3.428571 13.714286-3.428571 40.571428 0 45.714286-32 77.714286t-77.714286 32H402.285714q-48 0-78.857143-33.428572T292.571429 836L116.571429 666.857143Q73.142857 625.142857 73.142857 566.857143V438.857143q0-56.571429 40.285714-96.857143T210.285714 301.714286q6.285714 0 9.142857 0.571428 3.428571-54.285714 43.142858-91.428571T356.571429 173.714286q29.714286 0 56 12 41.142857-39.428571 99.428571-39.428572z\"  ></path></symbol><symbol id=\"icon-hand-o-left\" viewBox=\"0 0 1024 1024\"><path d=\"M786.285714 804.571429h18.285715V438.857143h-18.285715q-20 0-38.571428-6.857143t-35.714286-21.142857-28.571429-26.285714-28-30.857143q-4.571429-5.142857-6.857142-8-41.142857-46.285714-64-82.857143-8-12.571429-21.714286-38.857143-0.571429-1.714286-6-12.857143t-10.571429-20.571428-11.428571-20.285715-12.285714-17.428571T512 146.285714q-40.571429 0-66 17.428572T420.571429 219.428571q0 24.571429 8.571428 48.285715t18.857143 38.857143 18.857143 31.428571 8.571428 27.714286H146.285714q-28.571429 0-50.857143 22T73.142857 438.857143q0 29.714286 21.714286 51.428571t51.428571 21.714286h189.142857q-8.571429 9.714286-14.285714 27.142857T315.428571 570.857143q0 39.428571 30.285715 68-10.285714 18.285714-10.285715 39.428571t10 42T372.571429 750.285714q-2.285714 13.714286-2.285715 32 0 48.571429 27.714286 72t77.428571 23.428572q48 0 104.571429-18.285715t110.857143-36.571428 95.428571-18.285714z m164.571429-36.571429q0-14.857143-10.857143-25.714286t-25.714286-10.857143-25.714285 10.857143-10.857143 25.714286 10.857143 25.714286 25.714285 10.857143 25.714286-10.857143 10.857143-25.714286z m73.142857-329.142857v365.714286q0 30.285714-21.428571 51.714285T950.857143 877.714286h-164.571429q-33.714286 0-127.428571 33.714285-108.571429 39.428571-181.142857 39.428572-81.142857 0-131.428572-44.285714T296.571429 782.285714l0.571428-2.857143q-34.857143-43.428571-34.857143-101.714285 0-12.571429 1.714286-24.571429-18.857143-32.571429-21.142857-68H146.285714q-60 0-103.142857-43.428571T0 438.285714q0-58.857143 43.428571-102.285714t102.857143-43.428571h213.714286q-12.571429-34.285714-12.571429-73.142858 0-69.714286 46.571429-108T512 73.142857q21.714286 0 39.714286 10t31.428571 28.285714 23.142857 36 21.142857 41.142858 18.857143 35.428571q20 31.428571 57.142857 73.714286 1.142857 1.714286 8 9.714285t10.857143 12.285715 11.714286 12.285714 13.714286 12.857143 12.857143 10.285714 13.428571 8 12.285714 2.571429h164.571429q30.285714 0 51.714286 21.428571T1024 438.857143z\"  ></path></symbol><symbol id=\"icon-hand-lizard-o\" viewBox=\"0 0 1170 1024\"><path d=\"M643.769991 0q34.118132 0 64.880381 15.660782t50.89754 43.067149l319.927398 436.823947q65.999009 88.930868 65.999009 200.793594v198.556339q0 44.745091-31.321564 76.066654t-76.066654 31.321564h-214.776434q-44.745091 0-76.066654-31.321564t-31.321564-76.066654v-98.998512l-159.963699-79.98185H250.572507q-44.745091 0-76.066654-31.321563t-31.321563-76.066654v-17.898036q0-66.558322 47.262002-113.820325T304.266616 429.552869h234.911725l23.491173-71.592144H178.980362q-55.931363 0-97.040915-37.753671T36.355386 227.081335Q0 182.895558 0 125.286254v-17.898037q0-44.745091 31.321563-76.066654T107.388217 0h536.381774z m430.112183 894.901811v-198.556339q0-87.81224-52.016168-158.845071l-320.486711-436.823947q-21.813232-29.084309-57.609304-29.084309H107.388217q-14.542154 0-25.169113 10.626959t-10.626959 25.169113q0 17.898036 0.83897 27.686025T77.744595 157.726444t13.982841 24.050486q5.593136-17.338723 19.855634-27.965681t31.60122-10.626959h465.348942v17.898036H143.18429q-14.542154 0-25.169114 10.626959t-10.626959 25.169114q0 24.6098 1.677941 32.44019 4.474509 24.6098 24.6098 40.829895t45.304404 16.220096h408.858265q22.372545 0 38.033327 15.660781t15.660782 38.033327q0 8.389704-2.796568 16.779409l-35.796073 107.388218q-5.593136 16.220095-19.575977 26.567397T552.042555 501.145014H304.266616q-36.9147 0-63.202441 26.287741t-26.28774 63.202441v17.898036q0 14.542154 10.626959 25.169113t25.169113 10.626959h313.774948q8.949018 0 16.220095 3.915196l177.302422 88.371554q13.423527 7.271077 21.533574 20.13529t8.110048 27.965682v110.184785q0 14.542154 10.626959 25.169114t25.169114 10.626959h214.776434q14.542154 0 25.169114-10.626959t10.626959-25.169114z\"  ></path></symbol><symbol id=\"icon-hand-o-down\" viewBox=\"0 0 1024 1024\"><path d=\"M877.714286 548.571429q0-48-18.285715-104.571429t-36.571428-110.857143-18.285714-95.428571v-18.285715H438.857143v18.285715q0 20-6.857143 38.571428T410.857143 312t-26.285714 28.571429-30.857143 28q-5.142857 4.571429-8 6.857142-46.285714 41.142857-82.857143 64-12.571429 8-38.857143 21.714286-1.714286 0.571429-12.857143 6t-20.571428 10.571429-20.285715 11.428571-17.428571 12.285714T146.285714 512q0 40.571429 17.428572 66T219.428571 603.428571q24.571429 0 48.285715-8.571428t38.857143-18.857143 31.428571-18.857143 27.714286-8.571428v329.142857q0 28.571429 22 50.857143t51.142857 22.285714q29.714286 0 51.428571-21.714286t21.714286-51.428571v-189.142857q26.285714 20 58.857143 20 39.428571 0 68-30.285715 18.285714 10.285714 39.428571 10.285715t42-10 30-27.142858q13.714286 2.285714 32 2.285715 48.571429 0 72-27.714286t23.428572-77.428571z m-73.142857-438.857143q0-14.857143-10.857143-25.714286t-25.714286-10.857143-25.714286 10.857143-10.857143 25.714286 10.857143 25.714285 25.714286 10.857143 25.714286-10.857143 10.857143-25.714285z m146.285714 436.571428q0 81.142857-44.285714 131.428572t-124.285715 49.714285l-2.857143-0.571428q-43.428571 34.857143-101.714285 34.857143-12.571429 0-24.571429-1.714286-30.857143 17.142857-68 21.142857v96.571429q0 60-43.428571 103.142857T438.285714 1024q-58.857143 0-102.285714-43.428571t-43.428571-102.857143v-213.714286q-30.857143 12.571429-73.142858 12.571429-69.142857 0-107.714285-46.571429T73.142857 512q0-21.714286 10-39.714286t28.285714-31.428571 36-23.142857 41.142858-21.142857 35.428571-18.857143q31.428571-20 73.714286-57.142857 1.714286-1.142857 9.714285-8t12.285715-10.857143 12.285714-11.714286 12.857143-13.714286 10.285714-12.857143 8-13.428571T365.714286 237.714286V73.142857q0-30.285714 21.428571-51.714286T438.857143 0h365.714286q30.285714 0 51.714285 21.428571T877.714286 73.142857v164.571429q0 33.714286 33.714285 127.428571 39.428571 108.571429 39.428572 181.142857z\"  ></path></symbol><symbol id=\"icon-hand-o-right\" viewBox=\"0 0 1024 1024\"><path d=\"M146.285714 768q0-14.857143-10.857143-25.714286t-25.714285-10.857143-25.714286 10.857143-10.857143 25.714286 10.857143 25.714286 25.714286 10.857143 25.714285-10.857143 10.857143-25.714286z m804.571429-329.142857q0-29.142857-22.285714-51.142857t-50.857143-22H548.571429q0-11.428571 8.571428-27.714286t18.857143-31.428571 18.857143-38.857143 8.571428-48.285715q0-38.285714-25.428571-55.714285T512 146.285714q-13.714286 0-51.428571 79.428572-13.714286 25.142857-21.142858 37.142857-22.857143 36.571429-64 82.857143-40.571429 46.285714-57.714285 60.571428-39.428571 32.571429-80 32.571429h-18.285715v365.714286h18.285715q41.142857 0 95.428571 18.285714t110.571429 36.571428 102.571428 18.285715q108 0 108-95.428572 0-14.857143-2.857143-32 17.142857-9.142857 27.142858-30t10-42-10.285715-39.428571q30.285714-28.571429 30.285715-68 0-14.285714-5.714286-31.714286t-14.285714-27.142857h189.142857q29.714286 0 51.428571-21.714286t21.714286-51.428571z m73.142857-0.571429q0 60-43.142857 103.428572t-103.142857 43.428571h-96.571429q-2.285714 35.428571-21.142857 68 1.714286 12 1.714286 24.571429 0 57.714286-34.285715 101.714285 0.571429 79.428571-48.571428 125.428572T549.142857 950.857143q-76 0-184-39.428572-93.714286-33.714286-127.428571-33.714285H73.142857q-30.285714 0-51.714286-21.428572T0 804.571429V438.857143q0-30.285714 21.428571-51.714286T73.142857 365.714286h164.571429q5.714286 0 12.285714-2.571429t13.428571-8 12.857143-10.285714 13.714286-12.857143 11.714286-12.285714 10.857143-12.285715 8-9.714285q37.142857-42.285714 57.142857-73.714286 7.428571-12 18.857143-35.428571t21.142857-41.142858 23.142857-36 31.428571-28.285714T512 73.142857q71.428571 0 118 38.285714t46.571429 108q0 38.857143-12.571429 73.142858h213.714286q59.428571 0 102.857143 43.428571t43.428571 102.285714z\"  ></path></symbol><symbol id=\"icon-hand-o-up\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 914.285714q0-14.857143-10.857143-25.714285t-25.714286-10.857143-25.714286 10.857143-10.857143 25.714285 10.857143 25.714286 25.714286 10.857143 25.714286-10.857143 10.857143-25.714286z m73.142857-436.571428q0-108-95.428572-108-14.857143 0-32 2.857143-9.142857-17.142857-30-27.142858T678.285714 335.428571t-39.428571 10.285715q-28.571429-30.285714-68-30.285715-14.285714 0-31.714286 5.714286T512 335.428571V146.285714q0-29.714286-21.714286-51.428571t-51.428571-21.714286q-29.142857 0-51.142857 22.285714T365.714286 146.285714v329.142857q-11.428571 0-27.714286-8.571428t-31.428571-18.857143-38.857143-18.857143-48.285715-8.571428q-38.285714 0-55.714285 25.428571T146.285714 512q0 13.714286 79.428572 51.428571 25.142857 13.714286 37.142857 21.142858 36.571429 22.857143 82.857143 64 46.285714 40.571429 60.571428 57.714285 32.571429 39.428571 32.571429 80v18.285715h365.714286v-18.285715q0-41.142857 18.285714-95.428571t36.571428-110.571429 18.285715-102.571428z m73.142857-2.857143q0 76-39.428572 184-33.714286 93.714286-33.714285 127.428571v164.571429q0 30.285714-21.428572 51.714286T804.571429 1024H438.857143q-30.285714 0-51.714286-21.428571T365.714286 950.857143v-164.571429q0-5.714286-2.571429-12.285714t-8-13.428571-10.285714-12.857143-12.857143-13.714286-12.285714-11.714286-12.285715-10.857143-9.714285-8q-42.285714-37.142857-73.714286-57.142857-12-7.428571-35.428571-18.857143t-41.142858-21.142857-36-23.142857-28.285714-31.428571T73.142857 512q0-71.428571 38.285714-118T219.428571 347.428571q38.857143 0 73.142858 12.571429V146.285714q0-59.428571 43.428571-102.857143T438.285714 0q60 0 103.428572 43.142857T585.142857 146.285714v96.571429q35.428571 2.285714 68 21.142857 12-1.714286 24.571429-1.714286 57.714286 0 101.714285 34.285715 79.428571-0.571429 125.428572 48.571428t46 129.714286z\"  ></path></symbol><symbol id=\"icon-hand-paper-o\" viewBox=\"0 0 1024 1024\"><path d=\"M502.857143 73.142857q-26.285714 0-45.142857 18.857143t-18.857143 45.142857v374.857143h-18.285714V210.285714q0-26.285714-18.857143-45.142857t-45.142857-18.857143-45.142858 18.857143-18.857142 45.142857v448L204.571429 541.142857q-21.714286-29.142857-58.285715-29.142857-30.285714 0-51.714285 21.428571T73.142857 585.142857q0 24.571429 14.857143 44l219.428571 292.571429q21.714286 29.142857 58.285715 29.142857h393.142857q19.428571 0 34.857143-12.571429t19.428571-32l43.428572-231.428571q2.857143-18.285714 2.857142-33.714286V356.571429q0-26.285714-18.857142-45.142858t-45.142858-18.857142-45.142857 18.857142-18.857143 45.142858v155.428571h-18.285714V210.285714q0-26.285714-18.857143-45.142857t-45.142857-18.857143-45.142857 18.857143-18.857143 45.142857v301.714286h-18.285714V137.142857q0-26.285714-18.857143-45.142857t-45.142857-18.857143z m0-73.142857q38.857143 0 71.714286 20.285714T625.142857 75.428571q10.857143-2.285714 24-2.285714 56.571429 0 96.857143 40.285714T786.285714 210.285714v9.714286q60-3.428571 103.142857 36.571429t43.142858 100v284.571428q0 22.857143-4.571429 47.428572l-43.428571 230.857142q-8 45.142857-43.714286 74.857143t-82 29.714286H365.714286q-34.285714 0-65.428572-15.714286T248.571429 965.714286L29.142857 673.142857q-29.142857-38.857143-29.142857-88 0-60.571429 42.857143-103.428571t103.428571-42.857143q44.571429 0 73.142857 19.428571V210.285714q0-56.571429 40.285715-96.857143T356.571429 73.142857q13.142857 0 24 2.285714 17.714286-34.857143 50.571428-55.142857T502.857143 0z\"  ></path></symbol><symbol id=\"icon-hand-pointer-o\" viewBox=\"0 0 1024 1024\"><path d=\"M365.714286 73.142857q-30.285714 0-51.714286 21.428572T292.571429 146.285714v512L206.285714 542.857143q-23.428571-30.857143-61.142857-30.857143-29.714286 0-50.857143 21.714286t-21.142857 51.428571q0 24.571429 14.857143 44l219.428571 292.571429q21.714286 29.142857 58.285715 29.142857h410.285714q12.571429 0 22.571429-7.714286t12.857142-19.714286l52.571429-210.285714q13.714286-54.857143 13.714286-110.857143V478.285714q0-23.428571-16-40.571428t-38.857143-17.142857-38.857143 16-16 38.857142h-18.285714v-34.857142q0-27.428571-18.285715-46.571429t-45.714285-19.142857q-26.285714 0-45.142857 18.857143t-18.857143 45.142857v36.571428h-18.285715v-51.428571q0-31.428571-21.142857-54T530.285714 347.428571q-30.285714 0-51.714285 21.428572T457.142857 420.571429v54.857142h-18.285714V149.714286q0-31.428571-21.142857-54T365.714286 73.142857z m0-73.142857q61.142857 0 103.714285 44.285714T512 149.714286v125.714285q12.571429-1.142857 18.285714-1.142857 56.571429 0 98.857143 39.428572 26.857143-12 56.571429-12 64.571429 0 105.142857 49.714285 15.428571-4 32-4 53.714286 0 90.857143 38.571429t37.142857 92.285714v124q0 66.285714-16 128.571429l-52.571429 210.285714q-9.142857 36.571429-38.857143 59.714286t-67.428571 23.142857H365.714286q-34.285714 0-65.428572-15.714286T248.571429 965.714286L29.142857 673.142857q-29.142857-38.857143-29.142857-88 0-60 42.571429-103.142857T145.142857 438.857143q40.571429 0 74.285714 20V146.285714q0-60.571429 42.857143-103.428571T365.714286 0z m73.142857 804.571429v-219.428572h-18.285714v219.428572h18.285714z m146.285714 0v-219.428572h-18.285714v219.428572h18.285714z m146.285714 0v-219.428572h-18.285714v219.428572h18.285714z\"  ></path></symbol><symbol id=\"icon-hand-peace-o\" viewBox=\"0 0 1024 1024\"><path d=\"M809.142857 369.714286q34.285714 0 61.142857 13.142857 80.571429 36 80.571429 129.142857v101.142857q0 53.714286-13.142857 106.285714l-48.571429 193.714286q-12 49.142857-51.714286 80t-90 30.857143H365.714286q-60.571429 0-103.428572-42.857143t-42.857143-103.428571v-229.142857L82.857143 289.714286Q73.142857 264 73.142857 237.714286q0-60.571429 42.857143-103.428572t103.428571-42.857143q45.714286 0 83.142858 26T356 185.714286l9.714286 25.142857V146.285714q0-60.571429 42.857143-103.428571T512 0t103.428571 42.857143 42.857143 103.428571v149.142857q15.428571-2.857143 27.428572-2.857142 39.428571 0 72.857143 20.857142T809.142857 369.714286z m-123.428571-4q-18.857143 0-34.571429 10.285714T627.428571 403.428571l-42.285714 93.142858-40.571428 88.571428h31.428571q28.571429 0 51.428571 18t28.571429 46l88-193.142857q5.714286-11.428571 5.714286-26.285714 0-26.285714-18.857143-45.142857t-45.142857-18.857143z m126.285714 77.142857q-12.571429 0-23.142857 4.571428t-16.571429 9.142858-13.428571 16.857142-9.714286 17.428572-9.714286 21.142857l-75.428571 165.714286q-5.714286 11.428571-5.714286 26.285714 0 26.285714 18.857143 45.142857t45.142857 18.857143q18.857143 0 34.571429-10.285714t23.714286-27.428572l91.428571-201.142857q5.142857-10.285714 5.142857-21.714286 0-28.571429-18.285714-46.571428t-46.857143-18zM146.285714 237.714286q0 12.571429 4.571429 26.285714l141.714286 371.428571v39.428572l58.285714-63.428572q24.571429-26.285714 60.571428-26.285714h113.142858l60.571428-133.142857V146.285714q0-30.285714-21.428571-51.714285T512 73.142857t-51.714286 21.428572T438.857143 146.285714v365.714286h-36.571429L288 211.428571q-8-21.142857-26.857143-34T219.428571 164.571429q-30.285714 0-51.714285 21.428571T146.285714 237.714286z m601.142857 713.142857q25.142857 0 44.857143-15.428572t26-40l48.571429-193.714285q10.857143-41.714286 10.857143-88.571429v-52l-80.571429 177.142857q-9.714286 21.714286-30.285714 34.857143t-44.571429 13.142857q-30.285714 0-53.428571-19.714285T641.142857 717.142857q-25.142857 32.571429-65.142857 32.571429H457.142857v-18.285715h118.857143q26.285714 0 46.285714-18.857142t20-45.142858-17.714285-45.142857-44-18.857143H411.428571q-28 0-46.857142 20.571429l-72 77.714286v176q0 30.285714 21.428571 51.714285T365.714286 950.857143h381.714285z\"  ></path></symbol><symbol id=\"icon-hand-spock-o\" viewBox=\"0 0 1170 1024\"><path d=\"M262.285714 1024q-44 0-78.571428-27.142857T138.285714 926.857143l-57.714285-229.142857q-7.428571-32.571429-7.428572-61.714286 0-25.714286-2.857143-38.285714L4 325.142857q-4-15.428571-4-32.571428 0-53.142857 35.428571-92t88.571429-44.571429q9.714286-48.571429 47.142857-79.428571T258.285714 45.714286q47.428571 0 84.571429 29.428571T391.428571 150.857143l47.428572 198.857143 58.857143-244.571429q11.428571-46.285714 48.571428-75.714286T630.857143 0q50.857143 0 88.857143 32.857143T765.714286 115.428571q52.571429 5.714286 86.857143 45.142858t34.285714 92.571428q0 13.714286-4 33.714286l-70.285714 292.571428q5.714286-4 21.428571-16.285714T856 546.285714t20-13.142857 23.428571-11.714286 23.714286-6.285714 28.285714-3.142857q60 0 102.857143 42.285714t42.857143 102.285715q0 35.428571-16.285714 67.428571t-44.857143 53.714286l-289.714286 217.142857q-38.857143 29.142857-87.428571 29.142857H262.285714z m368.571429-950.857143q-21.714286 0-39.142857 13.714286T569.142857 122.285714L475.428571 512H402.857143L320 168q-5.142857-21.714286-22.571429-35.428571T258.285714 118.857143q-27.428571 0-45.714285 18.857143t-18.285715 45.714285q0 8.571429 1.714286 16l75.428571 312.571429h-14.857142l-56.571429-233.142857q-5.142857-21.142857-22.857143-35.714286T137.714286 228.571429q-26.857143 0-45.714286 18.857142t-18.857143 45.142858q0 8 1.714286 14.857142l66.285714 273.142858q4 16 5.142857 49.142857t5.714286 50.285714l57.142857 229.142857q4.571429 18.285714 19.428572 30t33.714285 11.714286h396.571429q24 0 43.428571-14.857143l289.714286-216.571429q32-24.571429 32-62.857142 0-29.714286-21.428571-50.571429T951.428571 585.142857q-24.571429 0-44 14.857143l-175.428571 131.428571v-129.714285q0-2.285714 18.285714-78.857143t38.857143-161.142857 22.285714-92q2.285714-10.285714 2.285715-16.571429 0-26.857143-18.285715-46.285714t-45.142857-19.428572q-22.285714 0-39.714285 13.714286t-22.571429 35.428572l-66.285714 275.428571h-14.857143l85.714286-356.571429q1.714286-8 1.714285-16 0-27.428571-18-46.857142t-45.428571-19.428572z\"  ></path></symbol><symbol id=\"icon-hand-rock-o\" viewBox=\"0 0 1024 1024\"><path d=\"M512 219.428571q-30.285714 0-51.714286 21.428572T438.857143 292.571429v73.142857h-18.285714v-53.142857q0-27.428571-18.285715-46.571429T356.571429 246.857143q-26.285714 0-45.142858 18.857143t-18.857142 45.142857v245.142857l-18.285715-17.142857V440.571429q0-27.428571-18.285714-46.571429T210.285714 374.857143q-26.285714 0-45.142857 18.857143t-18.857143 45.142857v128q0 26.857143 20 46.857143l177.142857 169.142857q22.285714 22.285714 22.285715 58.285714 0 14.857143 10.857143 25.714286t25.714285 10.857143h365.714286q14.857143 0 25.714286-10.857143t10.857143-25.714286v-14.285714q0-23.428571 5.714285-44l61.714286-249.142857q5.714286-20.571429 5.714286-44V349.142857q0-27.428571-18.285715-46.571428t-45.714285-19.142858q-26.285714 0-45.142857 18.857143t-18.857143 45.142857v18.285715h-18.285715V294.285714q0-22.857143-14.285714-41.428571t-36.571428-23.142857q-8-1.142857-13.142858-1.142857-26.285714 0-45.142857 18.857142t-18.857143 45.142858v73.142857h-18.285714V296q0-29.142857-18.571428-51.142857T519.428571 220q-2.857143-0.571429-7.428571-0.571429z m0-73.142857q48 0 85.142857 28.571429 32.571429-19.428571 70.285714-19.428572 33.714286 0 63.428572 15.428572t49.142857 43.428571q15.428571-4 33.714286-4 57.142857 0 97.142857 40.857143t40 98v140.571429q0 29.142857-7.428572 61.714285l-62.285714 249.142858q-3.428571 13.714286-3.428571 40.571428 0 45.714286-32 77.714286t-77.714286 32H402.285714q-48 0-78.857143-33.428572T292.571429 836L116.571429 666.857143Q73.142857 625.142857 73.142857 566.857143V438.857143q0-56.571429 40.285714-96.857143T210.285714 301.714286q6.285714 0 9.142857 0.571428 3.428571-54.285714 43.142858-91.428571T356.571429 173.714286q29.714286 0 56 12 41.142857-39.428571 99.428571-39.428572z\"  ></path></symbol><symbol id=\"icon-hand-scissors-o\" viewBox=\"0 0 1024 1024\"><path d=\"M613.142857 950.857143H512q-93.142857 0-129.142857-80.571429-13.142857-28-13.142857-58.285714v-2.857143q-35.428571-17.142857-56.285715-50.571428T292.571429 685.714286q0-21.714286 2.857142-27.428572H146.285714q-60.571429 0-103.428571-42.857143T0 512t42.857143-103.428571 103.428571-42.857143h64.571429l-25.142857-9.714286q-42.285714-16-68.285715-53.428571T91.428571 219.428571q0-60.571429 42.857143-103.428571t103.428572-42.857143q26.285714 0 52 9.714286l358.857143 136.571428h229.142857q60.571429 0 103.428571 42.857143t42.857143 103.428572v381.714285q0 50.285714-30.857143 90t-80 51.714286l-193.714286 48.571429q-52.571429 13.142857-106.285714 13.142857z m-28-406.285714l-88.571428 40.571428-93.142858 42.285714q-17.142857 8-27.428571 23.714286t-10.285714 34.571429q0 26.285714 18.857143 45.142857t45.142857 18.857143q14.857143 0 26.285714-5.714286l193.142857-88q-28-5.714286-46-28.571429t-18-51.428571v-31.428571z m182.857143 177.714285q0-26.285714-18.857143-45.142857t-45.142857-18.857143q-14.857143 0-26.285714 5.714286l-165.714286 75.428571q-16 7.428571-21.142857 9.714286t-17.428572 9.714286-16.857142 13.428571-9.142858 16.571429-4.571428 23.142857q0 28.571429 18 46.857143t46.571428 18.285714q11.428571 0 21.714286-5.142857l201.142857-91.428571q17.142857-8 27.428572-23.714286t10.285714-34.571429z m-132.571429-429.714285L264 150.857143q-13.714286-4.571429-26.285714-4.571429-30.285714 0-51.714286 21.428572T164.571429 219.428571q0 22.857143 12.857142 41.714286t34 26.857143l300.571429 114.285714v36.571429H146.285714q-30.285714 0-51.714285 21.428571T73.142857 512t21.428572 51.714286T146.285714 585.142857h305.714286l133.142857-60.571428V411.428571q0-36 26.285714-60.571428l63.428572-58.285714h-39.428572z m-22.285714 585.142857q46.857143 0 88.571429-10.857143l193.714285-48.571429q24.571429-6.285714 40-26t15.428572-44.857143V365.714286q0-30.285714-21.428572-51.714286T877.714286 292.571429h-176l-77.714286 72q-20.571429 18.857143-20.571429 46.857142v169.142858q0 26.285714 18.857143 44t45.142857 17.714285 45.142858-20 18.857142-46.285714V457.142857h18.285715v118.857143q0 40-32.571429 65.142857 29.714286 4.571429 49.428572 27.714286t19.714285 53.428571q0 24-13.142857 44.571429t-34.857143 30.285714l-177.142857 80.571429h52z\"  ></path></symbol><symbol id=\"icon-hand-stop-o\" viewBox=\"0 0 1024 1024\"><path d=\"M502.857143 73.142857q-26.285714 0-45.142857 18.857143t-18.857143 45.142857v374.857143h-18.285714V210.285714q0-26.285714-18.857143-45.142857t-45.142857-18.857143-45.142858 18.857143-18.857142 45.142857v448L204.571429 541.142857q-21.714286-29.142857-58.285715-29.142857-30.285714 0-51.714285 21.428571T73.142857 585.142857q0 24.571429 14.857143 44l219.428571 292.571429q21.714286 29.142857 58.285715 29.142857h393.142857q19.428571 0 34.857143-12.571429t19.428571-32l43.428572-231.428571q2.857143-18.285714 2.857142-33.714286V356.571429q0-26.285714-18.857142-45.142858t-45.142858-18.857142-45.142857 18.857142-18.857143 45.142858v155.428571h-18.285714V210.285714q0-26.285714-18.857143-45.142857t-45.142857-18.857143-45.142857 18.857143-18.857143 45.142857v301.714286h-18.285714V137.142857q0-26.285714-18.857143-45.142857t-45.142857-18.857143z m0-73.142857q38.857143 0 71.714286 20.285714T625.142857 75.428571q10.857143-2.285714 24-2.285714 56.571429 0 96.857143 40.285714T786.285714 210.285714v9.714286q60-3.428571 103.142857 36.571429t43.142858 100v284.571428q0 22.857143-4.571429 47.428572l-43.428571 230.857142q-8 45.142857-43.714286 74.857143t-82 29.714286H365.714286q-34.285714 0-65.428572-15.714286T248.571429 965.714286L29.142857 673.142857q-29.142857-38.857143-29.142857-88 0-60.571429 42.857143-103.428571t103.428571-42.857143q44.571429 0 73.142857 19.428571V210.285714q0-56.571429 40.285715-96.857143T356.571429 73.142857q13.142857 0 24 2.285714 17.714286-34.857143 50.571428-55.142857T502.857143 0z\"  ></path></symbol><symbol id=\"icon-hard-of-hearing\" viewBox=\"0 0 1024 1024\"><path d=\"M603.428571 475.428571q0 14.857143 10.857143 25.714286t25.714286 10.857143 25.714286-10.857143 10.857143-25.714286q0-83.428571-58.857143-142.285714T475.428571 274.285714 333.142857 333.142857 274.285714 475.428571q0 14.857143 10.857143 25.714286t25.714286 10.857143 25.714286-10.857143 10.857142-25.714286q0-53.142857 37.714286-90.571428T475.428571 347.428571t90.285715 37.428572 37.714285 90.571428zM477.142857 146.285714q-66.857143 0-127.714286 26t-105.142857 70.285715-70.285714 105.142857T148 475.428571q0 14.857143 10.857143 25.714286t25.714286 10.857143 25.714285-10.857143 10.857143-25.714286q0-105.714286 75.142857-180.857142T477.142857 219.428571t180.857143 75.142858T733.142857 475.428571q0 31.428571-10.285714 59.142858t-21.428572 42.571428-34 41.142857q-19.428571 22.285714-29.714285 36t-24.857143 38-21.142857 52T585.142857 804.571429q0 60.571429-42.857143 103.428571t-103.428571 42.857143q-14.857143 0-25.714286 10.857143t-10.857143 25.714285 10.857143 25.714286 25.714286 10.857143q90.857143 0 155.142857-64.285714T658.285714 804.571429q0-23.428571 4.285715-42.285715t15.142857-36.571428 19.142857-28.571429 26-30.857143q20-23.428571 30.285714-36.857143t25.142857-38.571428 21.428572-53.428572T806.285714 475.428571q0-66.857143-26-127.714285t-70.285714-105.142857-105.142857-70.285715T477.142857 146.285714zM337.714286 557.142857l129.142857 129.142857-330.857143 330.857143q-6.857143 6.857143-16.571429 6.857143t-16.571428-6.857143L6.857143 921.142857q-6.857143-6.857143-6.857143-16.571428t6.857143-16.571429zM921.142857 6.857143l96 96q6.857143 6.857143 6.857143 16.571428t-6.857143 17.142858l-133.142857 133.142857-14.857143 14.285714-40.571428 40.571429q-37.714286-87.428571-111.428572-147.428572l52-52 118.285714-118.285714q7.428571-6.857143 17.142858-6.857143t16.571428 6.857143z\"  ></path></symbol><symbol id=\"icon-handshake-o\" viewBox=\"0 0 1316 1024\"><path d=\"M109.714286 658.285714q22.857143 0 32-18.285714t0-36.571429-32-18.285714-32 18.285714 0 36.571429 32 18.285714z m841.714285-33.142857q-5.714286-7.428571-22-28.571428t-23.714285-30.857143-21.714286-28-24.285714-30.285715-23.142857-26.857142-25.714286-28l-71.428572 80q-47.428571 53.714286-119.142857 52.571428T502.857143 529.142857q-32.571429-39.428571-32.285714-90.285714T504 349.142857l101.142857-117.714286q-12.571429-6.285714-29.142857-9.428571t-27.142857-3.428571-32.285714 0.285714-28 0.571428q-52.571429 0-90.285715 37.714286L308 347.428571H219.428571v310.857143q2.857143 0 12-0.285714t12.571429 0 11.142857 1.142857 11.714286 2.571429 10 4.857143T287.428571 674.285714l169.714286 166.857143q65.714286 63.428571 129.714286 63.428572 44.571429 0 71.428571-26.857143 32.571429 11.428571 64.285715-4.571429t41.428571-48.571428q42.285714 3.428571 72.571429-25.142858 11.428571-10.285714 20.571428-26t8-28.857142q5.714286 5.714286 24.571429 5.714285 24.571429 0 44-12t28.285714-30.285714 6.857143-40.857143-17.428572-42z m90.857143 33.142857h54.857143V365.714286h-53.142857l-89.714286-102.857143q-37.714286-43.428571-96.571428-43.428572h-95.428572q-50.857143 0-83.428571 38.285715L559.428571 396.571429q-16 18.857143-16 42.857142t15.428572 42.857143q24.571429 29.142857 62.857143 29.714286t63.428571-28l110.285714-124.571429q14.285714-13.142857 30.571429-12.285714t26.857143 15.428572 4.857143 32.285714q9.142857 10.857143 32 36t34.285714 38.857143q16.571429 20.571429 47.142857 60.285714t36.857143 48.285714q29.714286 37.714286 34.285714 80z m164.571429 0q22.857143 0 32-18.285714t0-36.571429-32-18.285714-32 18.285714 0 36.571429 32 18.285714z m109.714286-329.142857v365.714286q0 14.857143-10.857143 25.714286t-25.714286 10.857142h-248q-15.428571 37.142857-46.857143 60.857143t-71.428571 29.428572q-18.857143 27.428571-46 46.571428T809.142857 894.285714q-24 30.285714-59.714286 46.571429T676 954.857143q-34.285714 19.428571-72 22.571428t-72.857143-8-66.857143-30.571428-59.142857-46.285714l-164-161.142858H36.571429q-14.857143 0-25.714286-10.857142t-10.857143-25.714286V310.857143q0-14.857143 10.857143-25.714286t25.714286-10.857143h240.571428q8-8 26.857143-27.428571t27.142857-27.428572 25.142857-22.857142 28.857143-21.428572 29.142857-14.571428 35.428572-11.142858 38.857143-3.142857h66.857142q56.571429 0 103.428572 32 46.857143-32 103.428571-32h95.428572q20 0 38.285714 3.428572t32.285714 8.285714T957.714286 173.142857t25.428571 17.714286 24.571429 22.571428 22.285714 24 23.428571 27.428572T1077.142857 292.571429h202.857143q14.857143 0 25.714286 10.857142t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-hashtag\" viewBox=\"0 0 1024 1024\"><path d=\"M566.285714 585.142857l36.571429-146.285714H457.714286l-36.571429 146.285714h145.142857z m438.857143-288l-32 128q-4 13.714286-17.714286 13.714286h-186.857142l-36.571429 146.285714h177.714286q8.571429 0 14.285714 6.857143 5.714286 8 3.428571 16l-32 128q-2.857143 13.714286-17.714285 13.714286h-186.857143l-46.285714 187.428571q-4 13.714286-17.714286 13.714286H498.857143q-9.142857 0-14.857143-6.857143-5.142857-6.857143-3.428571-16l44.571428-178.285714H380l-46.285714 187.428571q-4 13.714286-17.714286 13.714286H187.428571q-8.571429 0-14.285714-6.857143-5.142857-6.857143-3.428571-16l44.571428-178.285714H36.571429q-8.571429 0-14.285715-6.857143-5.142857-6.857143-3.428571-16l32-128q4-13.714286 17.714286-13.714286h186.857142l36.571429-146.285714H114.285714q-8.571429 0-14.285714-6.857143-5.714286-8-3.428571-16l32-128q2.857143-13.714286 17.714285-13.714286h186.857143l46.285714-187.428571q4-13.714286 18.285715-13.714286h128q8.571429 0 14.285714 6.857143 5.142857 6.857143 3.428571 16l-44.571428 178.285714h145.142857l46.285714-187.428571q4-13.714286 18.285715-13.714286h128q8.571429 0 14.285714 6.857143 5.142857 6.857143 3.428571 16l-44.571428 178.285714h177.714285q8.571429 0 14.285715 6.857143 5.142857 6.857143 3.428571 16z\"  ></path></symbol><symbol id=\"icon-headphones\" viewBox=\"0 0 1024 1024\"><path d=\"M987.428571 506.285714q0 94.857143-34.285714 179.428572l-11.428571 28-105.714286 18.857143q-12.571429 47.428571-51.714286 78T694.857143 841.142857v18.285714q0 8-5.142857 13.142858t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142858V530.285714q0-8 5.142857-13.142857t13.142857-5.142857h36.571429q8 0 13.142857 5.142857t5.142857 13.142857v18.285715q40.571429 0 74.285714 20.285714t53.142857 54.571428l38.857143-6.857142q16.571429-54.285714 16.571429-110.285715 0-84.571429-50.285715-159.428571t-135.142857-119.428572T512 182.857143t-180.285714 44.571428T196.571429 346.857143t-50.285715 159.428571q0 56 16.571429 110.285715l38.857143 6.857142q19.428571-34.285714 53.142857-54.571428T329.142857 548.571429v-18.285715q0-8 5.142857-13.142857t13.142857-5.142857h36.571429q8 0 13.142857 5.142857t5.142857 13.142857v329.142857q0 8-5.142857 13.142858t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142858v-18.285714q-50.285714 0-89.428571-30.571428T188 732.571429l-105.714286-18.857143-11.428571-28Q36.571429 601.142857 36.571429 506.285714q0-86.285714 38.285714-166.285714t102.285714-138.571429T329.142857 108t182.857143-34.857143 182.857143 34.857143 152 93.428571T949.142857 340t38.285714 166.285714z\"  ></path></symbol><symbol id=\"icon-header\" viewBox=\"0 0 1024 1024\"><path d=\"M961.142857 950.857143q-25.142857 0-75.714286-2T809.142857 946.857143q-25.142857 0-75.428571 2t-75.428572 2q-13.714286 0-21.142857-11.714286t-7.428571-26q0-17.714286 9.714285-26.285714t22.285715-9.714286 29.142857-4 25.714286-8.571428q18.857143-12 18.857142-80l-0.571428-223.428572q0-12-0.571429-17.714286-7.428571-2.285714-28.571428-2.285714H320q-21.714286 0-29.142857 2.285714-0.571429 5.714286-0.571429 17.714286l-0.571428 212q0 81.142857 21.142857 93.714286 9.142857 5.714286 27.428571 7.428571t32.571429 2 25.714286 8.571429 11.428571 26q0 14.857143-7.142857 27.428571t-20.857143 12.571429q-26.857143 0-79.714286-2T221.142857 946.857143q-24.571429 0-73.142857 2t-72.571429 2q-13.142857 0-20.285714-12T48 913.142857q0-17.142857 8.857143-25.714286t20.571428-10 27.142858-4.285714 24-8.571428q18.857143-13.142857 18.857142-81.714286l-0.571428-32.571429V285.714286q0-1.714286 0.285714-14.857143t0-20.857143T146.285714 228t-2-24-3.714285-20.857143-6.285715-18-9.142857-10.285714q-8.571429-5.714286-25.714286-6.857143t-30.285714-1.142857-23.428571-8-10.285715-25.714286q0-14.857143 6.857143-27.428571t20.571429-12.571429q26.285714 0 79.142857 2T221.142857 77.142857q24 0 72.285714-2T365.714286 73.142857q14.285714 0 21.428571 12.571429t7.142857 27.428571q0 17.142857-9.714285 24.857143T362.571429 146.285714t-28.285715 2.285715-24.571428 7.428571q-20 12-20 91.428571l0.571428 182.857143q0 12 0.571429 18.285715 7.428571 1.714286 22.285714 1.714285h399.428572q14.285714 0 21.714285-1.714285 0.571429-6.285714 0.571429-18.285715l0.571428-182.857143q0-79.428571-20-91.428571-10.285714-6.285714-33.428571-7.142857t-37.714286-7.428572T629.714286 113.142857q0-14.857143 7.142857-27.428571t21.428571-12.571429q25.142857 0 75.428572 2t75.428571 2q24.571429 0 73.714286-2t73.714286-2q14.285714 0 21.428571 12.571429t7.142857 27.428571q0 17.142857-10 25.142857t-22.857143 8.285715-29.428571 1.714285-25.142857 7.142857q-20 13.142857-20 92l0.571428 538.857143q0 68 19.428572 80 9.142857 5.714286 26.285714 7.714286t30.571429 2.571429 23.714285 8.857142 10.285715 25.428572q0 14.857143-6.857143 27.428571t-20.571429 12.571429z\"  ></path></symbol><symbol id=\"icon-hdd-o\" viewBox=\"0 0 1024 1024\"><path d=\"M667.428571 694.857143q0 18.857143-13.428571 32.285714T621.714286 740.571429t-32.285715-13.428572T576 694.857143t13.428571-32.285714T621.714286 649.142857t32.285714 13.428572 13.428571 32.285714z m146.285715 0q0 18.857143-13.428572 32.285714T768 740.571429t-32.285714-13.428572-13.428572-32.285714 13.428572-32.285714 32.285714-13.428572 32.285714 13.428572 13.428572 32.285714z m64 91.428571v-182.857143q0-7.428571-5.428572-12.857142t-12.857143-5.428572H164.571429q-7.428571 0-12.857143 5.428572T146.285714 603.428571v182.857143q0 7.428571 5.428572 12.857143t12.857143 5.428572h694.857142q7.428571 0 12.857143-5.428572t5.428572-12.857143zM174.857143 512h674.285714l-89.714286-275.428571q-2.285714-7.428571-9.142857-12.285715t-14.857143-4.857143H288.571429q-8 0-14.857143 4.857143T264.571429 236.571429z m776 91.428571v182.857143q0 37.714286-26.857143 64.571429t-64.571429 26.857143H164.571429q-37.714286 0-64.571429-26.857143T73.142857 786.285714v-182.857143q0-14.285714 9.142857-42.857142l112.571429-346.285715q9.714286-30.285714 36-49.142857t57.714286-18.857143h446.857142q31.428571 0 57.714286 18.857143t36 49.142857l112.571429 346.285715q9.142857 28.571429 9.142857 42.857142z\"  ></path></symbol><symbol id=\"icon-heart-o\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 340.571429q0-46.285714-12.285714-81.714286t-31.428572-56.285714T860.571429 168.571429t-53.714286-17.714286-56-4.571429-64 14.571429-63.142857 36.571428-49.428572 41.142858-34.285714 35.142857q-10.285714 12.571429-28 12.571428t-28-12.571428q-13.714286-16-34.285714-35.142857t-49.428572-41.142858-63.142857-36.571428T273.142857 146.285714t-56 4.571429-53.714286 17.714286-46.571428 34-31.428572 56.285714T73.142857 340.571429q0 96 106.857143 202.857142l332 320 331.428571-319.428571q107.428571-107.428571 107.428572-203.428571z m73.142857 0q0 126.285714-130.857143 257.142857l-356 342.857143q-10.285714 10.285714-25.142857 10.285714t-25.142857-10.285714l-356.571429-344q-5.714286-4.571429-15.714285-14.857143T82.857143 544.285714 44 488.571429 13.428571 419.428571 0 340.571429q0-125.714286 72.571429-196.571429t200.571428-70.857143q35.428571 0 72.285714 12.285714t68.571429 33.142858T468.571429 157.714286t43.428571 38.857143q20.571429-20.571429 43.428571-38.857143t54.571429-39.142857 68.571429-33.142858T750.857143 73.142857q128 0 200.571428 70.857143t72.571429 196.571429z\"  ></path></symbol><symbol id=\"icon-heart\" viewBox=\"0 0 1024 1024\"><path d=\"M512 950.857143q-14.857143 0-25.142857-10.285714l-356.571429-344q-5.714286-4.571429-15.714285-14.857143T82.857143 544.285714 44 488.571429 13.428571 419.428571 0 340.571429q0-125.714286 72.571429-196.571429t200.571428-70.857143q35.428571 0 72.285714 12.285714t68.571429 33.142858T468.571429 157.714286t43.428571 38.857143q20.571429-20.571429 43.428571-38.857143t54.571429-39.142857 68.571429-33.142858T750.857143 73.142857q128 0 200.571428 70.857143t72.571429 196.571429q0 126.285714-130.857143 257.142857l-356 342.857143q-10.285714 10.285714-25.142857 10.285714z\"  ></path></symbol><symbol id=\"icon-hotel\" viewBox=\"0 0 1170 1024\"><path d=\"M146.285714 585.142857h987.428572q14.857143 0 25.714285 10.857143t10.857143 25.714286v256h-146.285714v-146.285715H146.285714v146.285715H0V182.857143q0-14.857143 10.857143-25.714286t25.714286-10.857143h73.142857q14.857143 0 25.714285 10.857143t10.857143 25.714286v402.285714z m329.142857-182.857143q0-60.571429-42.857142-103.428571t-103.428572-42.857143-103.428571 42.857143-42.857143 103.428571 42.857143 103.428572 103.428571 42.857143 103.428572-42.857143 42.857142-103.428572z m694.857143 146.285715v-36.571429q0-90.857143-64.285714-155.142857T950.857143 292.571429H548.571429q-14.857143 0-25.714286 10.857142t-10.857143 25.714286v219.428572h658.285714z\"  ></path></symbol><symbol id=\"icon-heartbeat\" viewBox=\"0 0 1024 1024\"><path d=\"M731.428571 585.142857h174.285715q-2.857143 3.428571-5.714286 6t-5.142857 4.285714l-1.714286 2.285715-356 342.857143q-10.285714 10.285714-25.142857 10.285714t-25.142857-10.285714l-356.571429-344q-2.857143-1.142857-12-11.428572h210.857143q12.571429 0 22.571429-7.714286T364.571429 557.714286l40-160.571429 108.571428 381.142857q3.428571 11.428571 13.142857 18.857143t22.285715 7.428572q12 0 21.714285-7.428572t13.142857-18.857143l83.428572-277.142857 32 64q10.285714 20 32.571428 20z m292.571429-244.571428q0 82.857143-58.857143 171.428571h-210.857143l-63.428571-126.285714q-4.571429-9.714286-14.571429-15.428572t-20.857143-4.571428q-25.714286 2.857143-32 26.285714l-73.714285 245.714286-112-392q-3.428571-11.428571-13.428572-18.857143T401.714286 219.428571t-22.285715 7.714286-12.571428 19.714286L300.571429 512H58.857143Q0 423.428571 0 340.571429q0-125.714286 72.571429-196.571429t200.571428-70.857143q35.428571 0 72.285714 12.285714t68.571429 33.142858T468.571429 157.714286t43.428571 38.857143q20.571429-20.571429 43.428571-38.857143t54.571429-39.142857 68.571429-33.142858T750.857143 73.142857q128 0 200.571428 70.857143t72.571429 196.571429z\"  ></path></symbol><symbol id=\"icon-hourglass-1\" viewBox=\"0 0 1024 1024\"><path d=\"M848.832114 73.142857q0 149.142857-60.857143 263.714286T635.689257 512q91.428571 60.571429 152.285714 175.142857T848.832114 950.857143h54.857143q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H62.5464q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143q0-149.142857 60.857143-263.714286T330.5464 512Q239.117829 451.428571 178.260686 336.857143T117.403543 73.142857H62.5464q-8 0-13.142857-5.142857T44.260686 54.857143V18.285714Q44.260686 10.285714 49.403543 5.142857t13.142857-5.142857h841.142857q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143z m-73.142857 0H190.5464q0 37.714286 5.142857 73.142857h574.857143q5.142857-34.857143 5.142857-73.142857z m0 877.714286q0-74.285714-19.428571-142.571429t-51.714286-118.857143-72.285714-86.857142T548.832114 548.571429H417.403543q-43.428571 17.714286-83.428572 54t-72.285714 86.857142-51.714286 118.857143-19.428571 142.571429h585.142857z\"  ></path></symbol><symbol id=\"icon-home\" viewBox=\"0 0 1024 1024\"><path d=\"M841.142857 566.857143v274.285714q0 14.857143-10.857143 25.714286t-25.714285 10.857143H585.142857v-219.428572H438.857143v219.428572H219.428571q-14.857143 0-25.714285-10.857143t-10.857143-25.714286V566.857143q0-0.571429 0.285714-1.714286t0.285714-1.714286l328.571429-270.857142 328.571429 270.857142q0.571429 1.142857 0.571428 3.428572z m127.428572-39.428572l-35.428572 42.285715q-4.571429 5.142857-12 6.285714h-1.714286q-7.428571 0-12-4L512 242.285714l-395.428571 329.714286q-6.857143 4.571429-13.714286 4-7.428571-1.142857-12-6.285714l-35.428572-42.285715q-4.571429-5.714286-4-13.428571T57.714286 501.714286l410.857143-342.285715q18.285714-14.857143 43.428571-14.857142t43.428571 14.857142l139.428572 116.571429V164.571429q0-8 5.142857-13.142858t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142858v233.142857l125.142857 104q5.714286 4.571429 6.285715 12.285714t-4 13.428571z\"  ></path></symbol><symbol id=\"icon-history\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 512q0 89.142857-34.857143 170.285714t-93.714286 140-140 93.714286-170.285714 34.857143q-98.285714 0-186.857143-41.428572T174.285714 792.571429q-4-5.714286-3.714285-12.857143t4.857142-11.714286l78.285715-78.857143q5.714286-5.142857 14.285714-5.142857 9.142857 1.142857 13.142857 6.857143 41.714286 54.285714 102.285714 84t128.571429 29.714286q59.428571 0 113.428571-23.142858T718.857143 718.857143t62.571428-93.428572T804.571429 512t-23.142858-113.428571T718.857143 305.142857 625.428571 242.571429 512 219.428571q-56 0-107.428571 20.285715T313.142857 297.714286l78.285714 78.857143q17.714286 17.142857 8 39.428571-9.714286 22.857143-33.714285 22.857143H109.714286q-14.857143 0-25.714286-10.857143T73.142857 402.285714V146.285714q0-24 22.857143-33.714285 22.285714-9.714286 39.428571 8l74.285715 73.714285q61.142857-57.714286 139.714285-89.428571T512 73.142857q89.142857 0 170.285714 34.857143t140 93.714286 93.714286 140 34.857143 170.285714zM585.142857 347.428571v256q0 8-5.142857 13.142858t-13.142857 5.142857H384q-8 0-13.142857-5.142857t-5.142857-13.142858v-36.571428q0-8 5.142857-13.142857t13.142857-5.142857h128V347.428571q0-8 5.142857-13.142857t13.142857-5.142857h36.571429q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-hourglass-2\" viewBox=\"0 0 1024 1024\"><path d=\"M848.832114 73.142857q0 149.142857-60.857143 263.714286T635.689257 512q91.428571 60.571429 152.285714 175.142857T848.832114 950.857143h54.857143q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H62.5464q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143q0-149.142857 60.857143-263.714286T330.5464 512Q239.117829 451.428571 178.260686 336.857143T117.403543 73.142857H62.5464q-8 0-13.142857-5.142857T44.260686 54.857143V18.285714Q44.260686 10.285714 49.403543 5.142857t13.142857-5.142857h841.142857q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143z m-73.142857 0H190.5464q0 117.714286 48.571429 219.428572h488q48.571429-101.714286 48.571428-219.428572z m-32.571428 694.857143q-30.857143-80.571429-83.142858-138T548.832114 548.571429H417.403543q-58.857143 24-111.142857 81.428571T223.117829 768h520z\"  ></path></symbol><symbol id=\"icon-hospital-o\" viewBox=\"0 0 1024 1024\"><path d=\"M287.871154 749.714286v36.571428q0 7.428571-5.428571 12.857143T269.58544 804.571429h-36.571429q-7.428571 0-12.857142-5.428572T214.728297 786.285714v-36.571428q0-7.428571 5.428572-12.857143t12.857142-5.428572h36.571429q7.428571 0 12.857143 5.428572t5.428571 12.857143z m0-146.285715v36.571429q0 7.428571-5.428571 12.857143T269.58544 658.285714h-36.571429q-7.428571 0-12.857142-5.428571T214.728297 640v-36.571429q0-7.428571 5.428572-12.857142t12.857142-5.428572h36.571429q7.428571 0 12.857143 5.428572t5.428571 12.857142z m146.285715 0v36.571429q0 7.428571-5.428572 12.857143T415.871154 658.285714h-36.571428q-7.428571 0-12.857143-5.428571T361.014011 640v-36.571429q0-7.428571 5.428572-12.857142t12.857143-5.428572h36.571428q7.428571 0 12.857143 5.428572t5.428572 12.857142zM287.871154 457.142857v36.571429q0 7.428571-5.428571 12.857143T269.58544 512h-36.571429q-7.428571 0-12.857142-5.428571T214.728297 493.714286v-36.571429q0-7.428571 5.428572-12.857143T233.014011 438.857143h36.571429q7.428571 0 12.857143 5.428571T287.871154 457.142857z m438.857143 292.571429v36.571428q0 7.428571-5.428571 12.857143t-12.857143 5.428572h-36.571429q-7.428571 0-12.857143-5.428572t-5.428571-12.857143v-36.571428q0-7.428571 5.428571-12.857143t12.857143-5.428572h36.571429q7.428571 0 12.857143 5.428572t5.428571 12.857143z m-146.285714-146.285715v36.571429q0 7.428571-5.428572 12.857143T562.156869 658.285714h-36.571429q-7.428571 0-12.857143-5.428571T507.299726 640v-36.571429q0-7.428571 5.428571-12.857142t12.857143-5.428572h36.571429q7.428571 0 12.857142 5.428572t5.428572 12.857142zM434.156869 457.142857v36.571429q0 7.428571-5.428572 12.857143T415.871154 512h-36.571428q-7.428571 0-12.857143-5.428571T361.014011 493.714286v-36.571429q0-7.428571 5.428572-12.857143T379.299726 438.857143h36.571428q7.428571 0 12.857143 5.428571T434.156869 457.142857z m292.571428 146.285714v36.571429q0 7.428571-5.428571 12.857143t-12.857143 5.428571h-36.571429q-7.428571 0-12.857143-5.428571t-5.428571-12.857143v-36.571429q0-7.428571 5.428571-12.857142t12.857143-5.428572h36.571429q7.428571 0 12.857143 5.428572t5.428571 12.857142zM580.442583 457.142857v36.571429q0 7.428571-5.428572 12.857143T562.156869 512h-36.571429q-7.428571 0-12.857143-5.428571T507.299726 493.714286v-36.571429q0-7.428571 5.428571-12.857143T525.58544 438.857143h36.571429q7.428571 0 12.857142 5.428571T580.442583 457.142857z m146.285714 0v36.571429q0 7.428571-5.428571 12.857143T708.442583 512h-36.571429q-7.428571 0-12.857143-5.428571T653.58544 493.714286v-36.571429q0-7.428571 5.428571-12.857143t12.857143-5.428571h36.571429q7.428571 0 12.857143 5.428571t5.428571 12.857143z m-146.285714 493.714286h219.428571V292.571429h-146.285714v18.285714q0 22.857143-16 38.857143t-38.857143 16H342.728297q-22.857143 0-38.857143-16t-16-38.857143v-18.285714H141.58544v658.285714h219.428571v-128q0-7.428571 5.428572-12.857143t12.857143-5.428571h182.857143q7.428571 0 12.857142 5.428571t5.428572 12.857143v128z m0-676.571429V91.428571q0-7.428571-5.428572-12.857142T562.156869 73.142857h-36.571429q-7.428571 0-12.857143 5.428572T507.299726 91.428571v54.857143H434.156869v-54.857143q0-7.428571-5.428572-12.857142T415.871154 73.142857h-36.571428q-7.428571 0-12.857143 5.428572T361.014011 91.428571v182.857143q0 7.428571 5.428572 12.857143T379.299726 292.571429h36.571428q7.428571 0 12.857143-5.428572T434.156869 274.285714v-54.857143h73.142857v54.857143q0 7.428571 5.428571 12.857143T525.58544 292.571429h36.571429q7.428571 0 12.857142-5.428572T580.442583 274.285714z m292.571428-18.285714v731.428571q0 14.857143-10.857142 25.714286t-25.714286 10.857143H105.014011q-14.857143 0-25.714285-10.857143t-10.857143-25.714286V256q0-14.857143 10.857143-25.714286t25.714285-10.857143h182.857143V54.857143q0-22.857143 16-38.857143t38.857143-16h256q22.857143 0 38.857143 16t16 38.857143v164.571428h182.857143q14.857143 0 25.714286 10.857143t10.857142 25.714286z\"  ></path></symbol><symbol id=\"icon-hourglass-3\" viewBox=\"0 0 1024 1024\"><path d=\"M848.832114 73.142857q0 149.142857-60.857143 263.714286T635.689257 512q91.428571 60.571429 152.285714 175.142857T848.832114 950.857143h54.857143q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H62.5464q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143q0-149.142857 60.857143-263.714286T330.5464 512Q239.117829 451.428571 178.260686 336.857143T117.403543 73.142857H62.5464q-8 0-13.142857-5.142857T44.260686 54.857143V18.285714Q44.260686 10.285714 49.403543 5.142857t13.142857-5.142857h841.142857q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143zM543.689257 477.714286q44-16.571429 85.142857-52.857143T702.832114 337.714286t52.857143-120 20-144.571429H190.5464q0 75.428571 20 144.571429t52.857143 120T337.403543 424.857143 422.5464 477.714286q10.857143 4 17.428571 13.428571T446.5464 512t-6.571429 20.857143T422.5464 546.285714q-78.285714 29.142857-139.428571 112h400q-61.142857-82.857143-139.428572-112-10.857143-4-17.428571-13.428571T519.689257 512t6.571429-20.857143T543.689257 477.714286z\"  ></path></symbol><symbol id=\"icon-hourglass-half\" viewBox=\"0 0 1024 1024\"><path d=\"M848.832114 73.142857q0 149.142857-60.857143 263.714286T635.689257 512q91.428571 60.571429 152.285714 175.142857T848.832114 950.857143h54.857143q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H62.5464q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143q0-149.142857 60.857143-263.714286T330.5464 512Q239.117829 451.428571 178.260686 336.857143T117.403543 73.142857H62.5464q-8 0-13.142857-5.142857T44.260686 54.857143V18.285714Q44.260686 10.285714 49.403543 5.142857t13.142857-5.142857h841.142857q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143z m-73.142857 0H190.5464q0 117.714286 48.571429 219.428572h488q48.571429-101.714286 48.571428-219.428572z m-32.571428 694.857143q-30.857143-80.571429-83.142858-138T548.832114 548.571429H417.403543q-58.857143 24-111.142857 81.428571T223.117829 768h520z\"  ></path></symbol><symbol id=\"icon-hourglass-end\" viewBox=\"0 0 1024 1024\"><path d=\"M848.832114 73.142857q0 149.142857-60.857143 263.714286T635.689257 512q91.428571 60.571429 152.285714 175.142857T848.832114 950.857143h54.857143q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H62.5464q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143q0-149.142857 60.857143-263.714286T330.5464 512Q239.117829 451.428571 178.260686 336.857143T117.403543 73.142857H62.5464q-8 0-13.142857-5.142857T44.260686 54.857143V18.285714Q44.260686 10.285714 49.403543 5.142857t13.142857-5.142857h841.142857q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143zM543.689257 477.714286q44-16.571429 85.142857-52.857143T702.832114 337.714286t52.857143-120 20-144.571429H190.5464q0 75.428571 20 144.571429t52.857143 120T337.403543 424.857143 422.5464 477.714286q10.857143 4 17.428571 13.428571T446.5464 512t-6.571429 20.857143T422.5464 546.285714q-78.285714 29.142857-139.428571 112h400q-61.142857-82.857143-139.428572-112-10.857143-4-17.428571-13.428571T519.689257 512t6.571429-20.857143T543.689257 477.714286z\"  ></path></symbol><symbol id=\"icon-hourglass-o\" viewBox=\"0 0 1024 1024\"><path d=\"M848.832114 73.142857q0 149.142857-60.857143 263.714286T635.689257 512q91.428571 60.571429 152.285714 175.142857T848.832114 950.857143h54.857143q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H62.5464q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143q0-149.142857 60.857143-263.714286T330.5464 512Q239.117829 451.428571 178.260686 336.857143T117.403543 73.142857H62.5464q-8 0-13.142857-5.142857T44.260686 54.857143V18.285714Q44.260686 10.285714 49.403543 5.142857t13.142857-5.142857h841.142857q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143zM543.689257 477.714286q44-16.571429 85.142857-52.857143T702.832114 337.714286t52.857143-120 20-144.571429H190.5464q0 75.428571 20 144.571429t52.857143 120T337.403543 424.857143 422.5464 477.714286q10.857143 4 17.428571 13.428571T446.5464 512t-6.571429 20.857143T422.5464 546.285714q-44 16.571429-85.142857 52.857143T263.403543 686.285714 210.5464 806.285714t-20 144.571429h585.142857q0-75.428571-20-144.571429t-52.857143-120-74-87.142857T543.689257 546.285714q-10.857143-4-17.428571-13.428571T519.689257 512t6.571429-20.857143T543.689257 477.714286z\"  ></path></symbol><symbol id=\"icon-hourglass-start\" viewBox=\"0 0 1024 1024\"><path d=\"M848.832114 73.142857q0 149.142857-60.857143 263.714286T635.689257 512q91.428571 60.571429 152.285714 175.142857T848.832114 950.857143h54.857143q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H62.5464q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143q0-149.142857 60.857143-263.714286T330.5464 512Q239.117829 451.428571 178.260686 336.857143T117.403543 73.142857H62.5464q-8 0-13.142857-5.142857T44.260686 54.857143V18.285714Q44.260686 10.285714 49.403543 5.142857t13.142857-5.142857h841.142857q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143z m-73.142857 0H190.5464q0 37.714286 5.142857 73.142857h574.857143q5.142857-34.857143 5.142857-73.142857z m0 877.714286q0-74.285714-19.428571-142.571429t-51.714286-118.857143-72.285714-86.857142T548.832114 548.571429H417.403543q-43.428571 17.714286-83.428572 54t-72.285714 86.857142-51.714286 118.857143-19.428571 142.571429h585.142857z\"  ></path></symbol><symbol id=\"icon-houzz\" viewBox=\"0 0 1024 1024\"><path d=\"M512 680.571429l292.571429-168.571429v337.714286l-292.571429 169.142857v-338.285714zM219.428571 512v337.714286l292.571429-169.142857zM512 5.142857v337.714286L219.428571 512V174.285714z m0 337.714286l292.571429-168.571429v337.714286z\"  ></path></symbol><symbol id=\"icon-html5\" viewBox=\"0 0 1024 1024\"><path d=\"M755.428571 341.142857l9.142858-100H259.428571l26.857143 305.142857h349.714286l-12.571429 130.285715-112.571428 30.285714-112-30.285714-7.428572-80H291.428571l12.571429 158.857142 206.857143 57.142858h2.285714v-0.571429l205.142857-56.571429 28.571429-310.857142H378.857143l-8.571429-103.428572h385.142857zM109.714286 73.142857h804.571428l-73.142857 821.714286-330.285714 92.571428-328-92.571428z\"  ></path></symbol><symbol id=\"icon-hourglass\" viewBox=\"0 0 1024 1024\"><path d=\"M903.689257 914.285714q8 0 13.142857 5.142857t5.142857 13.142858v73.142857q0 8-5.142857 13.142857t-13.142857 5.142857H62.5464q-8 0-13.142857-5.142857t-5.142857-13.142857v-73.142857q0-8 5.142857-13.142858t13.142857-5.142857h841.142857z m-785.142857-36.571428q1.714286-31.428571 9.142857-61.142857t17.142857-54.285715 26.285715-49.714285 30.571428-43.428572 36.857143-39.714286 37.714286-34.285714 40.285714-31.428571T354.5464 536.571429t37.142857-24.571429q-24.571429-16-37.142857-24.571429t-38-27.142857-40.285714-31.428571-37.714286-34.285714-36.857143-39.714286-30.571428-43.428572-26.285715-49.714285-17.142857-54.285715-9.142857-61.142857h729.142857q-1.714286 31.428571-9.142857 61.142857t-17.142857 54.285715-26.285714 49.714285-30.571429 43.428572-36.857143 39.714286-37.714286 34.285714-40.285714 31.428571T611.689257 487.428571t-37.142857 24.571429q24.571429 16 37.142857 24.571429t38 27.142857 40.285714 31.428571 37.714286 34.285714 36.857143 39.714286 30.571429 43.428572 26.285714 49.714285 17.142857 54.285715 9.142857 61.142857H118.5464zM903.689257 0q8 0 13.142857 5.142857t5.142857 13.142857v73.142857q0 8-5.142857 13.142858t-13.142857 5.142857H62.5464q-8 0-13.142857-5.142857t-5.142857-13.142858V18.285714Q44.260686 10.285714 49.403543 5.142857t13.142857-5.142857h841.142857z\"  ></path></symbol><symbol id=\"icon-id-badge\" viewBox=\"0 0 1024 1024\"><path d=\"M684.897443 718.857143q0 36.571429-21.142857 61.142857t-52 24.571429H319.183157q-30.857143 0-52-24.571429t-21.142857-61.142857 5.142857-67.428572 16.857143-59.428571 34.857143-44.857143T358.0403 530.857143q45.714286 42.857143 107.428571 42.857143t107.428572-42.857143q32 0 55.142857 16.285714t34.857143 44.857143 16.857143 59.428571 5.142857 67.428572zM596.897443 422.285714q0 53.714286-38.571429 91.714286T465.468871 552t-92.857142-38T334.0403 422.285714t38.571429-91.714285T465.468871 292.571429t92.857143 38T596.897443 422.285714z m161.142857 510.285715V146.285714H172.897443v786.285715q0 7.428571 5.428571 12.857142t12.857143 5.428572h548.571429q7.428571 0 12.857143-5.428572t5.428571-12.857142z m73.142857-841.142858v841.142858q0 37.714286-26.857143 64.571428t-64.571428 26.857143H191.183157q-37.714286 0-64.571428-26.857143T99.754586 932.571429V91.428571Q99.754586 53.714286 126.611729 26.857143T191.183157 0h201.142857v54.857143q0 8 5.142857 13.142857t13.142858 5.142857h109.714285q8 0 13.142857-5.142857t5.142858-13.142857V0h201.142857q37.714286 0 64.571428 26.857143t26.857143 64.571428z\"  ></path></symbol><symbol id=\"icon-i-cursor\" viewBox=\"0 0 1024 1024\"><path d=\"M669.575871 73.142857q-182.857143 0-182.857142 128v237.714286h73.142857v73.142857H486.718729v310.857143q0 128 182.857142 128h36.571429v73.142857h-36.571429q-155.428571 0-219.428571-83.428571-64 83.428571-219.428571 83.428571H194.1473v-73.142857h36.571429q182.857143 0 182.857142-128V512H340.433014V438.857143h73.142857V201.142857q0-128-182.857142-128H194.1473V0h36.571429q155.428571 0 219.428571 83.428571Q514.1473 0 669.575871 0h36.571429v73.142857h-36.571429z\"  ></path></symbol><symbol id=\"icon-id-card\" viewBox=\"0 0 1170 1024\"><path d=\"M512 692.571429q0-30.857143-4.285714-57.428572t-14-51.428571-29.142857-39.142857-46.285715-14.285715q-36.571429 36.571429-89.142857 36.571429t-89.142857-36.571429q-26.857143 0-46.285714 14.285715t-29.142857 39.142857-14 51.428571T146.285714 692.571429q0 31.428571 18 53.428571T207.428571 768h243.428572q25.142857 0 43.142857-22T512 692.571429zM438.857143 438.857143q0-45.714286-32-77.714286t-77.714286-32-77.714286 32-32 77.714286 32 77.714286 77.714286 32 77.714286-32 32-77.714286z m585.142857 274.285714v-36.571428q0-8-5.142857-13.142858t-13.142857-5.142857h-402.285715q-8 0-13.142857 5.142857t-5.142857 13.142858v36.571428q0 8 5.142857 13.142857t13.142857 5.142857h402.285715q8 0 13.142857-5.142857t5.142857-13.142857z m-219.428571-146.285714v-36.571429q0-8-5.142858-13.142857t-13.142857-5.142857h-182.857143q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142857 5.142857h182.857143q8 0 13.142857-5.142857t5.142858-13.142857z m219.428571 0v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857h-109.714286q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142857 5.142857h109.714286q8 0 13.142857-5.142857t5.142857-13.142857z m0-146.285714v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857h-402.285715q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142857 5.142857h402.285715q8 0 13.142857-5.142857t5.142857-13.142857zM73.142857 219.428571h1024v-54.857142q0-8-5.142857-13.142858t-13.142857-5.142857H91.428571q-8 0-13.142857 5.142857t-5.142857 13.142858v54.857142z m1097.142857-54.857142v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h987.428572q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-ils\" viewBox=\"0 0 1024 1024\"><path d=\"M640 356.571429v283.428571q0 8-5.142857 13.142857t-13.142857 5.142857H530.285714q-8 0-13.142857-5.142857t-5.142857-13.142857V356.571429q0-64-45.714286-109.714286t-109.714285-45.714286H201.142857v658.285714q0 8-5.142857 13.142858t-13.142857 5.142857H91.428571q-8 0-13.142857-5.142857t-5.142857-13.142858V91.428571q0-8 5.142857-13.142857t13.142857-5.142857h265.142858q77.142857 0 142.285714 38T602 214.285714 640 356.571429z m219.428571-265.142858v502.857143q0 77.142857-38 142.285715T718.285714 839.714286 576 877.714286H310.857143q-8 0-13.142857-5.142857t-5.142857-13.142858V310.857143q0-8 5.142857-13.142857t13.142857-5.142857h91.428571q8 0 13.142857 5.142857t5.142858 13.142857v438.857143h155.428571q64 0 109.714286-45.714286t45.714285-109.714286V91.428571q0-8 5.142858-13.142857t13.142857-5.142857h91.428571q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-id-card-o\" viewBox=\"0 0 1170 1024\"><path d=\"M512 692.571429q0 31.428571-18 53.428571T450.857143 768H207.428571q-25.142857 0-43.142857-22T146.285714 692.571429q0-30.857143 4.285715-57.428572t14-51.428571 29.142857-39.142857 46.285714-14.285715q36.571429 36.571429 89.142857 36.571429t89.142857-36.571429q26.857143 0 46.285715 14.285715t29.142857 39.142857 14 51.428571T512 692.571429zM438.857143 438.857143q0 45.714286-32 77.714286t-77.714286 32-77.714286-32-32-77.714286 32-77.714286 77.714286-32 77.714286 32 32 77.714286z m585.142857 237.714286v36.571428q0 8-5.142857 13.142857t-13.142857 5.142857h-402.285715q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571428q0-8 5.142857-13.142858t13.142857-5.142857h402.285715q8 0 13.142857 5.142857t5.142857 13.142858z m-219.428571-146.285715v36.571429q0 8-5.142858 13.142857t-13.142857 5.142857h-182.857143q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h182.857143q8 0 13.142857 5.142857t5.142858 13.142857z m219.428571 0v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-109.714286q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857z m0-146.285714v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-402.285715q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h402.285715q8 0 13.142857 5.142857t5.142857 13.142857z m73.142857 475.428571V219.428571H73.142857v640q0 7.428571 5.428572 12.857143t12.857142 5.428572h987.428572q7.428571 0 12.857143-5.428572t5.428571-12.857143z m73.142857-694.857142v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h987.428572q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-image\" viewBox=\"0 0 1097 1024\"><path d=\"M365.714286 329.142857q0 45.714286-32 77.714286t-77.714286 32-77.714286-32-32-77.714286 32-77.714286 77.714286-32 77.714286 32 32 77.714286z m585.142857 219.428572v256H146.285714v-109.714286l182.857143-182.857143 91.428572 91.428571 292.571428-292.571428z m54.857143-402.285715H91.428571q-7.428571 0-12.857142 5.428572T73.142857 164.571429v694.857142q0 7.428571 5.428572 12.857143t12.857142 5.428572h914.285715q7.428571 0 12.857143-5.428572t5.428571-12.857143V164.571429q0-7.428571-5.428571-12.857143T1005.714286 146.285714z m91.428571 18.285715v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h914.285715q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-inbox\" viewBox=\"0 0 1024 1024\"><path d=\"M657.714286 548.571429h180.571428q-0.571429-1.714286-1.428571-4.857143t-1.428572-4.285715l-121.142857-283.428571H309.714286L188.571429 539.428571q-0.571429 1.714286-1.428572 4.857143T185.714286 548.571429h180.571428l54.285715 109.714285h182.857142z m293.142857 17.142857v275.428571q0 14.857143-10.857143 25.714286t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V565.714286q0-35.428571 14.285714-70.285715l136-315.428571q5.714286-14.285714 20.857143-24t30-9.714286h475.428572q14.857143 0 30 9.714286t20.857143 24l136 315.428571q14.285714 34.857143 14.285714 70.285715z\"  ></path></symbol><symbol id=\"icon-indent\" viewBox=\"0 0 1024 1024\"><path d=\"M201.142857 475.428571q0 8-5.142857 13.142858L31.428571 653.142857q-5.142857 5.142857-13.142857 5.142857-7.428571 0-12.857143-5.428571T0 640V310.857143q0-7.428571 5.428571-12.857143T18.285714 292.571429q8 0 13.142857 5.142857l164.571429 164.571428q5.142857 5.142857 5.142857 13.142857z m822.857143 274.285715v109.714285q0 7.428571-5.428571 12.857143t-12.857143 5.428572H18.285714q-7.428571 0-12.857143-5.428572T0 859.428571v-109.714285q0-7.428571 5.428571-12.857143T18.285714 731.428571h987.428572q7.428571 0 12.857143 5.428572t5.428571 12.857143z m0-219.428572v109.714286q0 7.428571-5.428571 12.857143t-12.857143 5.428571H384q-7.428571 0-12.857143-5.428571T365.714286 640V530.285714q0-7.428571 5.428571-12.857143T384 512h621.714286q7.428571 0 12.857143 5.428571t5.428571 12.857143z m0-219.428571v109.714286q0 7.428571-5.428571 12.857142T1005.714286 438.857143H384q-7.428571 0-12.857143-5.428572T365.714286 420.571429V310.857143q0-7.428571 5.428571-12.857143T384 292.571429h621.714286q7.428571 0 12.857143 5.428571t5.428571 12.857143z m0-219.428572v109.714286q0 7.428571-5.428571 12.857143T1005.714286 219.428571H18.285714q-7.428571 0-12.857143-5.428571T0 201.142857V91.428571q0-7.428571 5.428571-12.857142T18.285714 73.142857h987.428572q7.428571 0 12.857143 5.428572t5.428571 12.857142z\"  ></path></symbol><symbol id=\"icon-industry\" viewBox=\"0 0 1024 1024\"><path d=\"M256 0q14.857143 0 25.714286 10.857143t10.857143 25.714286v509.142857l306.285714-245.142857q9.714286-8 22.857143-8 14.857143 0 25.714285 10.857142t10.857143 25.714286v216.571429l306.285715-245.142857q9.714286-8 22.857142-8 14.857143 0 25.714286 10.857142t10.857143 25.714286v658.285714q0 14.857143-10.857143 25.714286t-25.714286 10.857143H36.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V36.571429q0-14.857143 10.857143-25.714286T36.571429 0h219.428571z\"  ></path></symbol><symbol id=\"icon-imdb\" viewBox=\"0 0 1024 1024\"><path d=\"M599.713331 455.428571v104q0 2.285714 0.285715 8.571429t0 8.571429l-0.857143 6.857142-2 6.571429-3.714286 4.285714-6.285714 3.142857-9.142857 0.857143V421.714286q5.142857 0 9.142857 0.571428t6.285714 2.857143 3.714286 3.142857 2 5.428572 0.571428 6V455.428571z m180.571429 54.857143v69.142857q0 0.571429 0.285714 7.142858t0 8.857142-1.428571 6.571429-4.285714 6-7.714286 1.714286q-5.142857 0-8-5.142857-2.285714-5.714286-2.285714-94.285715v-14l0.857142-4.857143 2-4 2.857143-3.142857 4.571429-0.857143q3.428571 0 5.714286 0.857143t3.714285 2.571429 2.285715 3.428571 1.142857 4.857143 0.285714 4.571429V510.285714zM175.713331 645.142857h69.714286V375.428571H175.713331v269.714286z m248 0h60.571429V375.428571H393.427617l-16 126.285715q-11.428571-84.571429-18.285714-126.285715H268.856189v269.714286h61.142857V466.857143l25.714285 178.285714h43.428572l24.571428-182.285714v182.285714z m242.857143-174.285714q0-38.285714-2.857143-51.428572-1.714286-9.142857-6.285714-16.285714t-9.714286-11.714286-14.285714-8-15.142857-4.857142-17.714286-2.285715-16.571428-0.857143H508.28476v269.714286h32q96.571429 0.571429 112.571429-14t14.285714-103.142857q-0.571429-35.428571-0.571429-57.142857z m181.142857 112.571428V507.428571q0-16.571429-1.142857-25.714285t-5.428571-19.142857-14-14.285715-26.285714-4.285714q-26.285714 0-44 19.428571V375.428571h-66.857143v269.714286h62.857143l4-17.142857q17.142857 20.571429 44 20.571429 28.571429 0 37.714285-17.428572t9.142857-47.714286z m102.857143-418.857142v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H164.28476q-37.714286 0-64.571429-26.857143T72.856189 859.428571V164.571429q0-37.714286 26.857142-64.571429t64.571429-26.857143h694.857143q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-info\" viewBox=\"0 0 1024 1024\"><path d=\"M588.595943 768v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H259.453086q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-73.142857q0-14.857143 10.857143-25.714286t25.714286-10.857143h36.571428V512H259.453086q-14.857143 0-25.714286-10.857143T222.881657 475.428571V402.285714q0-14.857143 10.857143-25.714285t25.714286-10.857143h219.428571q14.857143 0 25.714286 10.857143t10.857143 25.714285v329.142857h36.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286zM515.453086 109.714286v109.714285q0 14.857143-10.857143 25.714286t-25.714286 10.857143H332.595943q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h146.285714q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-institution\" viewBox=\"0 0 1170 1024\"><path d=\"M548.571429 0l548.571428 219.428571v73.142858h-73.142857q0 14.857143-11.714286 25.714285t-27.714285 10.857143H112.571429q-16 0-27.714286-10.857143T73.142857 292.571429H0V219.428571zM146.285714 365.714286h146.285715v438.857143h73.142857V365.714286h146.285714v438.857143h73.142857V365.714286h146.285714v438.857143h73.142858V365.714286h146.285714v438.857143h33.714286q16 0 27.714285 10.857142t11.714286 25.714286v36.571429H73.142857v-36.571429q0-14.857143 11.714286-25.714286t27.714286-10.857142h33.714285V365.714286z m911.428572 548.571428q16 0 27.714285 10.857143t11.714286 25.714286v73.142857H0v-73.142857q0-14.857143 11.714286-25.714286t27.714285-10.857143h1018.285715z\"  ></path></symbol><symbol id=\"icon-info-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M658.285714 786.285714v-91.428571q0-8-5.142857-13.142857t-13.142857-5.142857h-54.857143V384q0-8-5.142857-13.142857t-13.142857-5.142857H384q-8 0-13.142857 5.142857t-5.142857 13.142857v91.428571q0 8 5.142857 13.142858t13.142857 5.142857h54.857143v182.857143h-54.857143q-8 0-13.142857 5.142857t-5.142857 13.142857v91.428571q0 8 5.142857 13.142857t13.142857 5.142858h256q8 0 13.142857-5.142858t5.142857-13.142857zM585.142857 274.285714V182.857143q0-8-5.142857-13.142857t-13.142857-5.142857H457.142857q-8 0-13.142857 5.142857t-5.142857 13.142857v91.428571q0 8 5.142857 13.142857t13.142857 5.142858h109.714286q8 0 13.142857-5.142858t5.142857-13.142857z m365.714286 237.714286q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-internet-explorer\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 535.428571q0 32-4 59.428572H362.285714q0 83.428571 62.571429 139.714286T572 790.857143q56.571429 0 106-26.571429T756 689.714286h241.714286q-32 90.857143-97.428572 160.571428T747.428571 958 564 996q-106.857143 0-203.428571-47.428571-130.285714 66.285714-225.142858 66.285714-135.428571 0-135.428571-150.285714 0-65.714286 25.714286-157.142858 9.714286-34.285714 62.285714-130.857142 113.714286-205.714286 271.428571-346.285715-105.142857 45.142857-244 202.285715 36-156.571429 162-256.857143T564 75.428571q17.142857 0 25.714286 0.571429 145.714286-66.857143 247.428571-66.857143 36.571429 0 66.285714 7.428572t54 23.142857T995.428571 83.428571t13.714286 65.714286q0 66.285714-42.857143 163.428572 57.714286 104 57.714286 222.857142z m-40-365.714285q0-47.428571-30.285714-75.428572t-78.285715-28q-61.714286 0-145.142857 40 69.142857 26.857143 127.142857 75.142857T954.857143 293.142857q29.142857-77.142857 29.142857-123.428571zM73.142857 876.571429q0 49.142857 27.714286 75.714285T177.714286 978.857143q65.714286 0 152-47.428572-69.714286-41.142857-122-104.571428T129.142857 686.857143q-56 117.142857-56 189.714286z m288-407.428572h416q-2.857143-81.142857-64.571428-135.428571t-143.428572-54.285715q-82.285714 0-143.714286 54.285715T361.142857 469.142857z\"  ></path></symbol><symbol id=\"icon-inr\" viewBox=\"0 0 1024 1024\"><path d=\"M713.617211 268.571429v58.285714q0 8-5.142857 13.142857t-13.142857 5.142857H599.331497q-13.142857 82.285714-73.714286 133.714286T367.902926 541.714286q95.428571 101.714286 262.285714 306.285714 8 9.142857 2.285714 19.428571-4.571429 10.285714-16.571428 10.285715H504.474354q-9.142857 0-14.285714-6.857143Q315.331497 661.142857 205.617211 544.571429q-5.142857-5.142857-5.142857-12.571429V459.428571q0-7.428571 5.428572-12.857142T218.760069 441.142857h64q75.428571 0 121.428571-24.571428T462.760069 345.142857H218.760069q-8 0-13.142858-5.142857t-5.142857-13.142857V268.571429q0-8 5.142857-13.142858t13.142858-5.142857h236q-32.571429-64.571429-153.142858-64.571428H218.760069q-7.428571 0-12.857143-5.428572T200.474354 167.428571V91.428571q0-8 5.142857-13.142857t13.142858-5.142857h475.428571q8 0 13.142857 5.142857t5.142857 13.142857v58.285715q0 8-5.142857 13.142857t-13.142857 5.142857H561.045783q26.857143 34.857143 36.571428 82.285714h97.714286q8 0 13.142857 5.142857t5.142857 13.142858z\"  ></path></symbol><symbol id=\"icon-instagram\" viewBox=\"0 0 1024 1024\"><path d=\"M658.285714 512q0-60.571429-42.857143-103.428571t-103.428571-42.857143-103.428571 42.857143-42.857143 103.428571 42.857143 103.428571 103.428571 42.857143 103.428571-42.857143 42.857143-103.428571z m78.857143 0q0 93.714286-65.714286 159.428571t-159.428571 65.714286-159.428571-65.714286-65.714286-159.428571 65.714286-159.428571 159.428571-65.714286 159.428571 65.714286 65.714286 159.428571z m61.714286-234.285714q0 21.714286-15.428572 37.142857t-37.142857 15.428571-37.142857-15.428571-15.428571-37.142857 15.428571-37.142857 37.142857-15.428572 37.142857 15.428572 15.428572 37.142857zM512 152q-4 0-43.714286-0.285714t-60.285714 0-55.142857 1.714285-58.857143 5.714286T253.142857 169.714286q-28.571429 11.428571-50.285714 33.142857t-33.142857 50.285714q-6.285714 16.571429-10.571429 40.857143t-5.714286 58.857143-1.714285 55.142857 0 60.285714 0.285714 43.714286-0.285714 43.714286 0 60.285714 1.714285 55.142857 5.714286 58.857143T169.714286 770.857143q11.428571 28.571429 33.142857 50.285714t50.285714 33.142857q16.571429 6.285714 40.857143 10.571429t58.857143 5.714286 55.142857 1.714285 60.285714 0 43.714286-0.285714 43.714286 0.285714 60.285714 0 55.142857-1.714285 58.857143-5.714286 40.857143-10.571429q28.571429-11.428571 50.285714-33.142857t33.142857-50.285714q6.285714-16.571429 10.571429-40.857143t5.714286-58.857143 1.714285-55.142857 0-60.285714-0.285714-43.714286 0.285714-43.714286 0-60.285714-1.714285-55.142857-5.714286-58.857143T854.285714 253.142857q-11.428571-28.571429-33.142857-50.285714t-50.285714-33.142857q-16.571429-6.285714-40.857143-10.571429t-58.857143-5.714286-55.142857-1.714285-60.285714 0-43.714286 0.285714z m438.857143 360q0 130.857143-2.857143 181.142857-5.714286 118.857143-70.857143 184t-184 70.857143q-50.285714 2.857143-181.142857 2.857143t-181.142857-2.857143q-118.857143-5.714286-184-70.857143T76 693.142857q-2.857143-50.285714-2.857143-181.142857t2.857143-181.142857q5.714286-118.857143 70.857143-184t184-70.857143q50.285714-2.857143 181.142857-2.857143t181.142857 2.857143q118.857143 5.714286 184 70.857143t70.857143 184q2.857143 50.285714 2.857143 181.142857z\"  ></path></symbol><symbol id=\"icon-ioxhost\" viewBox=\"0 0 1170 1024\"><path d=\"M836 475.428571q0 20-14.285714 34.571429t-34.857143 14.571429H385.714286q-20.571429 0-34.857143-14.571429T336.571429 475.428571t14.285714-34.571428 34.857143-14.571429h401.142857q20.571429 0 34.857143 14.571429t14.285714 34.571428z m122.285714 0q0-49.142857-13.142857-97.142857H384q-20.571429 0-34.857143-14.285714t-14.285714-34.285714q0-20.571429 14.285714-34.857143t34.857143-14.285714h518.857143q-50.285714-81.714286-134.285714-129.714286t-182.857143-48q-101.142857 0-187.142857 50T262.571429 288.571429 212.571429 475.428571q0 49.142857 13.142857 97.142858h561.142857q20.571429 0 34.857143 14.285714t14.285714 34.285714q0 20.571429-14.285714 34.857143t-34.857143 14.285714H268q50.285714 81.714286 134.571429 129.714286t183.142857 48q75.428571 0 144.571428-29.428571t118.857143-79.428572 79.428572-118.857143 29.714285-144.857143z m212-145.714285q0 20-14.285714 34.285714t-34.857143 14.285714h-74.857143q9.714286 48.571429 9.714286 97.142857 0 95.428571-37.428571 182.571429t-100.285715 150.285714-150 100.571429T585.714286 946.285714q-140.571429 0-256.285715-76T157.142857 670.285714H49.142857q-20.571429 0-34.857143-14.285714t-14.285714-34.857143q0-20 14.285714-34.285714t34.857143-14.285714h75.428572q-9.714286-48.571429-9.714286-97.142858 0-95.428571 37.428571-182.571428t100.285715-150.285714 150-100.571429T585.714286 4.571429q140 0 255.714285 76T1013.714286 280.571429h107.428571q20.571429 0 34.857143 14.285714t14.285714 34.857143z\"  ></path></symbol><symbol id=\"icon-joomla\" viewBox=\"0 0 1024 1024\"><path d=\"M684.571429 613.142857l-91.428572 91.428572-86.285714 86.857142-17.142857 17.142858q-37.142857 36.571429-86.571429 49.714285t-98 1.142857q-9.142857 40-41.142857 65.714286t-73.714286 25.714286q-48.571429 0-82.857143-34.571429T73.142857 833.142857q0-41.142857 25.428572-73.142857t64.857142-41.142857q-12.571429-49.142857 0.571429-98.857143t50.285714-86.857143l6.857143-6.857143 86.285714 86.857143-6.285714 6.285714q-21.142857 21.142857-21.142857 50.857143t21.142857 51.428572q21.142857 21.142857 50.857143 21.142857t50.857143-21.142857l17.142857-17.142857 86.285714-86.857143 92-91.428572zM489.714286 223.428571l6.857143 6.857143-86.857143 86.857143-6.857143-6.857143q-21.142857-21.142857-50.857143-21.142857t-50.857143 21.142857-21.142857 51.142857 21.142857 51.142858l16.571429 16.571428 86.857143 86.857143 91.428571 91.428571-86.285714 86.857143-92-91.428571-86.285715-86.857143-17.142857-17.142857q-38.857143-38.285714-51.428571-91.142857t2.857143-102.571429q-40-8.571429-65.714286-40.571428T74.285714 190.857143q0-48.571429 34.285715-83.142857T191.428571 73.142857q43.428571 0 76.285715 28T307.428571 171.428571q48-11.428571 96.857143 2T489.714286 223.428571z m461.142857 609.714286q0 48.571429-34.285714 83.142857t-82.857143 34.571429q-42.285714 0-74.857143-26.857143t-40.571429-67.428571q-49.142857 16-102.571428 3.428571T523.428571 808.571429l-6.285714-6.857143 86.285714-86.857143 6.857143 6.857143q21.142857 21.142857 50.857143 21.142857t50.857143-21.142857 21.142857-50.857143-21.142857-50.857143l-17.142857-17.142857-86.857143-86.857143-91.428571-91.428571 86.857142-86.857143 91.428572 91.428571 86.857143 86.857143 16.571428 17.142857q36.571429 36.571429 50 86t1.428572 98q43.428571 6.285714 72.285714 39.142857T950.857143 833.142857z m-1.142857-642.285714q0 44-29.142857 77.142857t-72.571429 39.428571q14.857143 48.571429 1.714286 100.857143T798.285714 498.857143l-6.857143 6.857143-86.285714-86.857143 6.857143-6.857143q21.142857-21.142857 21.142857-50.857143t-21.142857-50.857143-50.857143-21.142857-50.857143 21.142857l-17.142857 17.142857-86.857143 86.857143-91.428571 91.428572-86.857143-86.857143 92-91.428572 86.857143-86.857142 16.571428-17.142858q38.285714-38.285714 90.857143-51.142857t101.714286 2q6.285714-42.857143 39.142857-72t77.428572-29.142857q48.571429 0 82.857142 34.571429t34.285715 83.142857z\"  ></path></symbol><symbol id=\"icon-jpy\" viewBox=\"0 0 1024 1024\"><path d=\"M559.250603 877.714286H460.964889q-7.428571 0-12.857143-5.142857t-5.428572-13.142858v-188.571428H278.107746q-7.428571 0-12.857143-5.142857t-5.428572-13.142857v-58.857143q0-7.428571 5.428572-12.857143t12.857143-5.428572h164.571428v-48.571428H278.107746q-7.428571 0-12.857143-5.142857T259.822031 508.571429V449.142857q0-7.428571 5.428572-12.857143T278.107746 430.857143h122.285714L216.964889 100.571429q-4.571429-9.142857 0-18.285715 5.714286-9.142857 16-9.142857h110.857142q10.857143 0 16.571429 10.285714l122.857143 242.857143q10.857143 21.714286 32 71.428572 5.714286-13.714286 17.428571-38.857143t15.714286-34.857143l109.142857-240q4.571429-10.857143 16.571429-10.857143h109.142857q9.714286 0 15.428571 9.142857 5.142857 8 0.571429 17.714286L620.39346 430.857143h122.857143q7.428571 0 12.857143 5.428571T761.536317 449.142857v59.428572q0 8-5.428571 13.142857t-12.857143 5.142857H577.536317v48.571428h165.714286q7.428571 0 12.857143 5.428572t5.428571 12.857143v58.857143q0 8-5.428571 13.142857t-12.857143 5.142857H577.536317v188.571428q0 7.428571-5.428571 12.857143T559.250603 877.714286z\"  ></path></symbol><symbol id=\"icon-intersex\" viewBox=\"0 0 1024 1024\"><path d=\"M658.285714 18.285714q0-8 5.142857-13.142857t13.142858-5.142857h164.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286v164.571428q0 8-5.142857 13.142857t-13.142858 5.142857h-36.571428q-8 0-13.142857-5.142857t-5.142857-13.142857V124.571429l-145.142858 145.714285q72 90.285714 72 205.142857 0 126.285714-84.285714 219.714286T438.857143 802.285714v75.428572h54.857143q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143v54.857143q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857v-54.857143h-54.857143q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143v-75.428572q-85.142857-9.142857-154.571429-58.857143T104.571429 615.714286 74.285714 449.142857q9.142857-116.571429 91.428572-202T364 148.571429q67.428571-8 130.285714 10.857142t113.142857 58.857143l145.714286-145.142857h-76.571428q-8 0-13.142858-5.142857t-5.142857-13.142857V18.285714zM402.285714 731.428571q105.714286 0 180.857143-75.142857T658.285714 475.428571 583.142857 294.571429 402.285714 219.428571 221.428571 294.571429 146.285714 475.428571t75.142857 180.857143T402.285714 731.428571z\"  ></path></symbol><symbol id=\"icon-jsfiddle\" viewBox=\"0 0 1170 1024\"><path d=\"M1028.571429 441.142857q63.428571 26.285714 102.571428 83.142857T1170.285714 650.857143q0 93.714286-67.428571 160.285714T940 877.714286q-2.285714 0-6.571429-0.285715t-6-0.285714H232q-97.142857-5.714286-164.571429-71.714286T0 645.142857q0-62.857143 31.428571-116t84-84q-6.857143-22.285714-6.857142-46.857143 0-65.714286 46.857142-112t113.714286-46.285714q54.285714 0 98.285714 33.142857 42.857143-88 127.142858-141.714286t186.571428-53.714285q94.857143 0 174.857143 46T982.571429 248.571429t46.571428 172q0 3.428571-0.285714 10.285714t-0.285714 10.285714zM267.428571 593.142857q0 69.714286 48 110.285714t118.857143 40.571429q78.285714 0 137.142857-56.571429-9.142857-11.428571-27.142857-32.285714T519.428571 626.285714q-38.285714 37.142857-82.285714 37.142857-31.428571 0-53.428571-19.142857T361.714286 594.285714q0-30.285714 22-49.714285t52.285714-19.428572q25.142857 0 48.285714 12t41.714286 31.428572 37.142857 42.857142 39.428572 46.857143 44 42.857143 55.428571 31.428572 69.428571 12q69.142857 0 116.857143-40.857143T936 594.857143q0-69.142857-48-109.714286t-118.285714-40.571428q-81.714286 0-137.714286 55.428571l53.142857 61.714286q37.714286-36.571429 81.142857-36.571429 29.714286 0 52.571429 18.857143t22.857143 48q0 32.571429-21.142857 52.285714t-53.714286 19.714286q-24.571429 0-47.142857-12t-41.142857-31.428571-37.428572-42.857143-39.714286-46.857143-44.285714-42.857143-55.142857-31.428571T434.285714 444.571429q-69.714286 0-118.285714 40.285714T267.428571 593.142857z\"  ></path></symbol><symbol id=\"icon-italic\" viewBox=\"0 0 1024 1024\"><path d=\"M191.883489 949.714286l9.714285-48.571429q12.571429-4 35.142857-9.428571t41.142858-10.857143T311.883489 867.428571q16-20 23.428571-57.714285 0.571429-4 35.428571-165.142857t65.142858-310.571429T465.597774 164.571429v-14.285715q-13.714286-7.428571-31.142857-10.571428t-39.714286-4.571429-33.142857-3.142857l10.857143-58.857143q18.857143 1.142857 68.571429 3.714286t85.428571 4T595.31206 82.285714q27.428571 0 56.285714-1.428571t69.142857-4 56.285715-3.714286q-2.857143 22.285714-10.857143 50.857143-17.142857 5.714286-58 16.285714T646.169203 159.428571q-4.571429 10.857143-8 24.285715t-5.142857 22.857143-4.285715 26-3.714285 24q-15.428571 84.571429-50 239.714285T530.740631 699.428571q-1.142857 5.142857-7.428571 33.142858t-11.428571 51.428571-9.142858 47.714286-3.428571 32.857143l0.571429 10.285714q9.714286 2.285714 105.714285 17.714286-1.714286 25.142857-9.142857 56.571428-6.285714 0-18.571428 0.857143T559.31206 950.857143q-16.571429 0-49.714286-5.714286t-49.142857-5.714286q-78.857143-1.142857-117.714286-1.142857-29.142857 0-81.714285 5.142857T191.883489 949.714286z\"  ></path></symbol><symbol id=\"icon-key\" viewBox=\"0 0 1024 1024\"><path d=\"M475.428571 292.571429q0-45.714286-32-77.714286t-77.714285-32-77.714286 32-32 77.714286q0 24 10.857143 47.428571-23.428571-10.857143-47.428572-10.857143-45.714286 0-77.714285 32t-32 77.714286 32 77.714286 77.714285 32 77.714286-32 32-77.714286q0-24-10.857143-47.428572 23.428571 10.857143 47.428572 10.857143 45.714286 0 77.714285-32t32-77.714285z m486.285715 402.285714q0 9.714286-28 37.714286t-37.714286 28q-5.142857 0-16.285714-9.142858t-20.857143-18.857142-22-22.857143-14-14.857143l-54.857143 54.857143 125.714286 125.714285q16 16 16 38.857143 0 24-22.285715 46.285715t-46.285714 22.285714q-22.857143 0-38.857143-16l-383.428571-383.428572q-100.571429 74.857143-208.571429 74.857143-93.142857 0-151.714285-58.571428T0 448q0-91.428571 54.285714-178.857143t141.714286-141.714286 178.857143-54.285714q93.142857 0 151.714286 58.571429T585.142857 283.428571q0 108-74.857143 208.571429l202.857143 202.857143 54.857143-54.857143q-1.714286-1.714286-14.857143-14t-22.857143-22-18.857143-20.857143-9.142857-16.285714q0-9.714286 28-37.714286t37.714286-28q7.428571 0 13.142857 5.714286 3.428571 3.428571 26.285714 25.428571t46.857143 45.428572 49.428572 49.142857 41.714285 44.571428 16.285715 23.428572z\"  ></path></symbol><symbol id=\"icon-keyboard-o\" viewBox=\"0 0 1097 1024\"><path d=\"M219.428571 667.428571v54.857143q0 9.142857-9.142857 9.142857h-54.857143q-9.142857 0-9.142857-9.142857v-54.857143q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857z m73.142858-146.285714v54.857143q0 9.142857-9.142858 9.142857H155.428571q-9.142857 0-9.142857-9.142857v-54.857143q0-9.142857 9.142857-9.142857h128q9.142857 0 9.142858 9.142857zM219.428571 374.857143v54.857143q0 9.142857-9.142857 9.142857h-54.857143q-9.142857 0-9.142857-9.142857v-54.857143q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857z m585.142858 292.571428v54.857143q0 9.142857-9.142858 9.142857H301.714286q-9.142857 0-9.142857-9.142857v-54.857143q0-9.142857 9.142857-9.142857h493.714285q9.142857 0 9.142858 9.142857zM438.857143 521.142857v54.857143q0 9.142857-9.142857 9.142857h-54.857143q-9.142857 0-9.142857-9.142857v-54.857143q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857zM365.714286 374.857143v54.857143q0 9.142857-9.142857 9.142857h-54.857143q-9.142857 0-9.142857-9.142857v-54.857143q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857z m219.428571 146.285714v54.857143q0 9.142857-9.142857 9.142857h-54.857143q-9.142857 0-9.142857-9.142857v-54.857143q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857zM512 374.857143v54.857143q0 9.142857-9.142857 9.142857h-54.857143q-9.142857 0-9.142857-9.142857v-54.857143q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857z m219.428571 146.285714v54.857143q0 9.142857-9.142857 9.142857h-54.857143q-9.142857 0-9.142857-9.142857v-54.857143q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857z m219.428572 146.285714v54.857143q0 9.142857-9.142857 9.142857h-54.857143q-9.142857 0-9.142857-9.142857v-54.857143q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857z m-292.571429-292.571428v54.857143q0 9.142857-9.142857 9.142857h-54.857143q-9.142857 0-9.142857-9.142857v-54.857143q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857z m146.285715 0v54.857143q0 9.142857-9.142858 9.142857h-54.857142q-9.142857 0-9.142858-9.142857v-54.857143q0-9.142857 9.142858-9.142857h54.857142q9.142857 0 9.142858 9.142857z m146.285714 0v201.142857q0 9.142857-9.142857 9.142857h-128q-9.142857 0-9.142857-9.142857v-54.857143q0-9.142857 9.142857-9.142857h64V374.857143q0-9.142857 9.142857-9.142857h54.857143q9.142857 0 9.142857 9.142857z m73.142857 429.714286V292.571429H73.142857v512h950.857143z m73.142857-512v512q0 30.285714-21.428571 51.714285T1024 877.714286H73.142857q-30.285714 0-51.714286-21.428572T0 804.571429V292.571429q0-30.285714 21.428571-51.714286T73.142857 219.428571h950.857143q30.285714 0 51.714286 21.428572T1097.142857 292.571429z\"  ></path></symbol><symbol id=\"icon-krw\" viewBox=\"0 0 1024 1024\"><path d=\"M293.714286 682.857143l46.285714-170.857143H249.142857l42.857143 171.428571q0.571429 0.571429 0.571429 1.714286t0.571428 1.714286q0-0.571429 0.285714-2t0.285715-2z m66.285714-244l20-73.142857H213.142857l18.285714 73.142857h128.571429z m109.714286 0h79.428571l-20-73.142857h-40z m256.571428 244.571428l44.571429-171.428571h-92.571429l46.285715 170.857143q0 0.571429 0.285714 2t0.857143 2q0-0.571429 0.285714-1.714286t0.285714-1.714286z m63.428572-244.571428l18.857143-73.142857h-169.714286l19.428571 73.142857h131.428572z m234.285714 18.285714v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-121.714286l-93.714286 352q-4 13.714286-17.714285 13.714286h-90.857143q-13.714286 0-17.714286-13.714286L569.142857 512H449.714286l-95.428572 352q-4 13.714286-17.714285 13.714286H245.714286q-6.285714 0-11.142857-4t-6-9.714286L137.142857 512H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h100l-18.857143-73.142857H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142858v-36.571428q0-8 5.142857-13.142857t13.142857-5.142857h62.285715L29.714286 96q-2.857143-8.571429 2.857143-16 5.714286-6.857143 14.857142-6.857143h78.285715q14.857143 0 17.714285 13.714286l51.428572 205.714286h205.142857l55.428571-205.714286q4-13.714286 17.714286-13.714286h72q13.714286 0 17.714286 13.714286l56 205.714286h208.571428l53.142858-205.714286q2.857143-13.714286 17.714285-13.714286h78.285715q9.142857 0 14.857142 6.857143 5.714286 7.428571 2.857143 16l-52 196.571429h63.428572q8 0 13.142857 5.142857t5.142857 13.142857v36.571428q0 8-5.142857 13.142858t-13.142857 5.142857h-82.857143l-19.428572 73.142857h102.285715q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-laptop\" viewBox=\"0 0 1097 1024\"><path d=\"M237.714286 731.428571q-37.714286 0-64.571429-26.857142t-26.857143-64.571429V237.714286q0-37.714286 26.857143-64.571429t64.571429-26.857143h621.714285q37.714286 0 64.571429 26.857143t26.857143 64.571429v402.285714q0 37.714286-26.857143 64.571429t-64.571429 26.857142H237.714286z m-18.285715-493.714285v402.285714q0 7.428571 5.428572 12.857143t12.857143 5.428571h621.714285q7.428571 0 12.857143-5.428571t5.428572-12.857143V237.714286q0-7.428571-5.428572-12.857143T859.428571 219.428571H237.714286q-7.428571 0-12.857143 5.428572T219.428571 237.714286z m786.285715 530.285714h91.428571v54.857143q0 22.857143-26.857143 38.857143t-64.571428 16H91.428571q-37.714286 0-64.571428-16t-26.857143-38.857143v-54.857143h1005.714286z m-411.428572 54.857143q9.142857 0 9.142857-9.142857t-9.142857-9.142857H502.857143q-9.142857 0-9.142857 9.142857t9.142857 9.142857h91.428571z\"  ></path></symbol><symbol id=\"icon-language\" viewBox=\"0 0 1024 1024\"><path d=\"M446.857143 616q-0.571429 1.714286-7.142857-0.285714T421.714286 609.142857l-11.428572-5.142857q-25.142857-11.428571-49.714285-28-4-2.857143-23.428572-18T315.428571 541.714286q-38.285714 58.857143-76.571428 103.428571-46.285714 54.285714-60 62.857143-2.285714 1.142857-11.142857 2.285714t-10.571429 0q3.428571-2.285714 46.857143-52.571428 12-13.714286 48.857143-65.714286T297.714286 524.571429q9.714286-17.142857 29.142857-56.285715t20.571428-44.285714q-4.571429-0.571429-62.857142 18.857143-4.571429 1.142857-15.714286 4.285714T249.142857 452.571429t-9.714286 2.857142q-1.142857 1.142857-1.142857 6t-0.571428 5.428572q-2.857143 5.714286-17.714286 8.571428-13.142857 4-26.857143 0-10.285714-2.285714-16-12-2.285714-3.428571-2.857143-13.142857 3.428571-1.142857 14-2.857143t16.857143-3.428571q33.142857-9.142857 60-18.285714 57.142857-20 58.285714-20 5.714286-1.142857 24.571429-11.142857t25.142857-12.285715q5.142857-1.714286 12.285714-4.571428t8.285715-3.142857 3.428571 0.285714q1.142857 6.857143-0.571428 18.857143 0 1.142857-7.142858 15.428571T374.285714 439.714286 364.571429 458.857143q-14.285714 28.571429-44 74.857143l36.571428 16q6.857143 3.428571 42.571429 18.285714t38.571428 16q2.285714 0.571429 6 14.571429t2.571429 17.428571zM329.714286 338.285714q1.714286 8.571429-2.285715 16-6.857143 13.142857-28.571428 21.714286-17.142857 6.857143-34.285714 6.857143-14.857143-1.714286-28-14.857143-8-8.571429-10.285715-23.428571l0.571429-1.714286q1.714286 1.714286 11.142857 2.857143t15.142857 0 33.142857-9.142857q20.571429-6.857143 31.428572-8 9.714286 0 12 9.714285z m398.857143 73.714286l36 129.714286-79.428572-24zM95.428571 869.142857l396.571429-132.571428V146.857143L95.428571 280v589.142857z m709.142858-181.142857l58.285714 17.714286-103.428572-375.428572-57.142857-17.714285-123.428571 306.285714 58.285714 17.714286 25.714286-62.857143 120.571428 37.142857zM517.142857 138.285714l327.428572 105.142857V26.285714z m177.714286 756l90.285714 7.428572-30.857143 91.428571-22.857143-37.714286q-74.285714 47.428571-157.714285 61.714286-33.142857 6.857143-52 6.857143h-48q-45.142857 0-114-22.285714T254.857143 953.142857q-4.571429-4-4.571429-9.142857 0-4.571429 2.857143-7.714286t7.428572-3.142857q2.285714 0 10.285714 4.285714t17.428571 9.428572 11.714286 6.285714q41.714286 21.142857 91.142857 35.142857T481.142857 1002.285714q54.285714 0 95.428572-8.285714t89.714285-28.857143q8.571429-4 17.428572-8.857143t19.428571-10.857143 16.285714-9.428571z m256-616.571428v616.571428l-442.285714-140.571428q-8 3.428571-214.285715 72.857143T84 896q-7.428571 0-10.285714-7.428571 0-0.571429-0.571429-1.714286V270.857143q1.714286-5.142857 2.285714-5.714286 2.857143-3.428571 11.428572-6.285714 61.142857-20.571429 85.142857-28.571429V10.857143l318.857143 113.142857q1.142857 0 91.714286-31.428571t180.571428-62T855.428571 0q11.428571 0 11.428572 12v238.857143z\"  ></path></symbol><symbol id=\"icon-leaf\" viewBox=\"0 0 1024 1024\"><path d=\"M731.428571 402.285714q0-14.857143-10.857142-25.714285t-25.714286-10.857143q-98.285714 0-181.714286 28.285714t-148.285714 76.571429T230.285714 596q-10.857143 12-10.857143 25.714286 0 14.857143 10.857143 25.714285t25.714286 10.857143q13.714286 0 25.714286-10.857143 15.428571-13.714286 42.285714-40.571428t38.285714-37.714286q78.285714-70.857143 153.428572-100.571428t179.142857-29.714286q14.857143 0 25.714286-10.857143t10.857142-25.714286z m292.571429-113.142857q0 54.285714-11.428571 110.285714-26.285714 128-105.428572 218.857143T702.857143 771.428571q-122.285714 61.714286-250.285714 61.714286-84.571429 0-163.428572-26.857143-8.571429-2.857143-50.285714-24t-54.857143-21.142857q-9.142857 0-22.571429 18.285714t-25.714285 40-30 40-34.285715 18.285715q-24.571429 0-36.285714-10T9.142857 833.714286q-1.142857-2.285714-3.428571-6.285715t-3.142857-5.714285-1.714286-5.428572T0 808.571429q0-20 17.714286-42t38.857143-37.428572 38.857142-32 17.714286-27.428571q0-2.285714-8-21.714286t-9.142857-25.142857q-5.142857-29.142857-5.142857-59.428572 0-65.714286 24.857143-125.714285t68-105.428572 97.428571-79.428571T397.714286 198.285714q31.428571-10.285714 82.857143-14.571428t102.571428-5.142857 102-3.428572 93.428572-13.714286T843.428571 129.142857l16.857143-16.857143 16.857143-16 15.428572-11.428571 20.857142-9.142857 24.857143-2.571429q22.285714 0 40.285715 26.285714t27.142857 64 13.714285 70.857143 4.571429 54.857143z\"  ></path></symbol><symbol id=\"icon-lastfm\" viewBox=\"0 0 1024 1024\"><path d=\"M738.285714 402.285714q0 3.428571 5.714286 23.428572 5.714286 16.571429 14.285714 28.285714t23.428572 19.428571 25.142857 11.428572 31.428571 9.428571q185.714286 52 185.714286 189.714286 0 83.428571-60.285714 138.571429T818.285714 877.714286q-33.714286 0-63.714285-10.571429T702.285714 841.142857t-44-42.571428-36-50-30.571428-59.142858-24.857143-58.857142T544.285714 569.714286 524 515.428571q-18.285714-46.285714-35.142857-76.285714T446.857143 384t-59.428572-36.571429-81.142857-11.428571q-54.857143 0-104.571428 31.714286T122.857143 450.285714t-29.142857 105.714286q0 91.428571 60.857143 159.714286T305.142857 784q101.142857 0 147.428572-54.285714 32-36 47.428571-66.285715l48 86.857143q-8.571429 19.428571-25.142857 40l0.571428 0.571429q-74.857143 86.857143-221.714285 86.857143-84 0-154-45.142857T38.857143 714 0 557.142857q0-60 24.857143-117.714286t66.285714-100.857142 98.285714-69.428572T306.285714 242.857143q49.714286 0 90.857143 10.857143t70.571429 28.571428 54.285714 45.714286 41.428571 56.571429 33.428572 66.857142 28.857143 71.142858 28.571428 74.571428 31.428572 72.571429q54.857143 114.285714 133.142857 114.285714 46.285714 0 79.142857-27.714286T930.857143 682.857143q0-24-10.857143-41.142857t-28.857143-26.285715-41.428571-18-48.285715-15.428571-50-19.428571-46.285714-29.714286-37.142857-46.857143-22.285714-70q-1.714286-9.142857-1.714286-18.857143 0-62.857143 50-109.714286t113.428571-44.571428q44.571429 1.714286 68.857143 8.285714T928 281.714286h-0.571429q6.857143 6.285714 13.142858 14t14.857142 20.571428 10.857143 15.714286l-73.714285 56.571429q-14.857143-28-30.857143-40v-0.571429q-13.142857-12-55.428572-12-28 0-48 18.857143t-20 47.428571z\"  ></path></symbol><symbol id=\"icon-lastfm-square\" viewBox=\"0 0 1024 1024\"><path d=\"M891.428571 601.142857q0-98.857143-133.714285-136.571428-20-5.714286-30.285715-9.428572t-21.714285-14.285714-16.571429-26.571429q0-1.142857-1.142857-4.857143t-1.714286-6.857142-0.571428-4.285715q0-20.571429 14-34T734.285714 350.857143q30.857143 0 40.571429 8.571428h-0.571429q11.428571 8.571429 22.285715 29.142858l53.142857-40.571429q-22.285714-30.857143-28-36.571429-18.857143-16.571429-38.571429-22.285714t-48.857143-5.714286q-45.714286 0-81.142857 32.857143T617.714286 394.857143q0 4 1.142857 13.142857 9.142857 54.857143 36.857143 80t84.857143 41.714286q16.571429 4.571429 28 8.857143t25.714285 12.285714 22 19.714286 7.714286 26.571428v2.857143q0.571429 33.142857-23.142857 53.142857t-57.428572 20q-55.428571 0-95.428571-82.285714-13.142857-26.857143-29.428571-69.428572t-27.428572-71.714285-30.857143-63.142857-42.285714-54.571429T458.857143 297.428571 374.857143 283.428571q-57.714286 0-109.714286 32T182.857143 400t-28.571429 109.714286v0.571428q2.285714 61.714286 28.857143 113.714286T259.428571 708.285714t112 32.285715q106.285714 0 159.428572-62.857143 11.428571-15.428571 17.714286-29.142857l-34.285715-62.285715q-24 45.714286-56.571428 66.285715t-83.428572 20.571428q-65.714286 0-109.142857-49.714286t-43.428571-116.571428q0-60 46.857143-108t106.285714-48q64 0 97.142857 30.571428T531.428571 480q4.571429 12 14.571429 39.142857T562.285714 562.857143t18 42.571428 22 42.285715 26 35.714285 31.714286 30.571429 37.714286 18.857143 45.714285 7.714286q61.142857 0 104.571429-39.714286t43.428571-99.714286z m59.428572-363.428571v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-legal\" viewBox=\"0 0 1024 1024\"><path d=\"M1012 877.714286q0 30.285714-21.142857 51.428571l-61.142857 61.714286q-22.285714 21.142857-52 21.142857-30.285714 0-51.428572-21.142857l-207.428571-208q-21.714286-20.571429-21.714286-51.428572 0-30.285714 24.571429-54.857142L475.428571 530.285714l-72 72q-8 8-19.428571 8t-19.428571-8q1.142857 1.142857 7.142857 6.857143t7.142857 7.428572 5.714286 6.571428 5.714285 7.714286 3.428572 7.714286 3.142857 9.428571 0.857143 10.285714q0 21.714286-16 38.857143-1.714286 1.714286-9.428572 10.285714t-10.857143 11.714286T350.857143 728.571429t-12.571429 8.857142-12.571428 5.142858-14.857143 2.571428q-22.857143 0-38.857143-16L38.857143 496q-16-16-16-38.857143 0-7.428571 2.571428-14.857143t5.142858-12.571428T39.428571 417.142857t9.428572-10.571428 11.714286-10.857143 10.285714-9.428572q17.142857-16 38.857143-16 5.714286 0 10.285714 0.857143t9.428571 3.142857 7.714286 3.428572 7.714286 5.714285 6.571428 5.714286 7.428572 7.142857 6.857143 7.142857q-8-8-8-19.428571t8-19.428571l198.857143-198.857143q8-8 19.428571-8t19.428571 8q-1.142857-1.142857-7.142857-6.857143T389.142857 151.428571t-5.714286-6.571428-5.714285-7.714286-3.428572-7.714286-3.142857-9.428571-0.857143-10.285714q0-21.714286 16-38.857143 1.714286-1.714286 9.428572-10.285714t10.857143-11.714286T417.142857 39.428571t12.571429-8.857142 12.571428-5.142858 14.857143-2.571428q22.857143 0 38.857143 16l233.142857 233.142857q16 16 16 38.857143 0 7.428571-2.571428 14.857143t-5.142858 12.571428-8.857142 12.571429-9.428572 10.571428-11.714286 10.857143-10.285714 9.428572q-17.142857 16-38.857143 16-5.714286 0-10.285714-0.857143t-9.428571-3.142857-7.714286-3.428572-7.714286-5.714285-6.571428-5.714286-7.428572-7.142857-6.857143-7.142857q8 8 8 19.428571t-8 19.428571L530.285714 475.428571l146.285715 146.285715q24.571429-24.571429 54.857142-24.571429 29.714286 0 52 21.142857l207.428572 207.428572q21.142857 22.285714 21.142857 52z\"  ></path></symbol><symbol id=\"icon-leanpub\" viewBox=\"0 0 1170 1024\"><path d=\"M1081.714286 224l88.571428 726.857143q-74.857143 0-146.857143-32.571429-114.285714-52-224.571428-52-129.142857 0-213.714286 84.571429-84.571429-84.571429-213.714286-84.571429-110.285714 0-224.571428 52-73.142857 32.571429-144 32.571429H0L88.571429 224q128-72.571429 275.428571-72.571429 133.142857 0 221.142857 60.571429 88-60.571429 221.142857-60.571429 147.428571 0 275.428572 72.571429z m-282.857143 564q73.714286 0 132.571428 16.285714t148.571429 53.428572L1009.142857 274.285714q-97.714286-44.571429-210.285714-44.571428-128 0-213.714286 80.571428-85.714286-80.571429-213.714286-80.571428-112.571429 0-210.285714 44.571428L90.285714 857.714286q60-24.571429 94.571429-37.142857t84.857143-22.571429 101.714285-10q115.428571 0 213.714286 61.714286 98.285714-61.714286 213.714286-61.714286z m22.857143-19.428571l-31.428572-518.285715q-120.571429 2.285714-205.142857 88.571429-86.857143-88.571429-213.714286-88.571429-100.571429 0-192 37.714286l-65.142857 537.714286q70.857143-29.142857 130.571429-43.428572t126.571428-14.285714q119.428571 0 213.714286 58.285714 98.285714-61.142857 213.714286-58.285714z\"  ></path></symbol><symbol id=\"icon-level-down\" viewBox=\"0 0 1024 1024\"><path d=\"M214.512703 146.285714h402.285714q7.428571 0 12.857143 5.428572T635.084131 165.142857v493.142857h109.714286q22.857143 0 33.142857 21.142857t-5.142857 39.428572l-182.857143 219.428571q-10.285714 12.571429-28 12.571429t-28-12.571429l-182.857143-219.428571q-14.857143-17.714286-5.142857-39.428572 10.285714-21.142857 33.142857-21.142857h109.714286V292.571429H305.941274q-8 0-14.285714-6.285715L200.226989 176.571429q-7.428571-8-2.285715-19.428572 5.142857-10.857143 16.571429-10.857143z\"  ></path></symbol><symbol id=\"icon-level-up\" viewBox=\"0 0 1024 1024\"><path d=\"M780.39754 344.571429q-10.285714 21.142857-33.142857 21.142857H637.540397v493.714285q0 8-5.142857 13.142858t-13.142857 5.142857H216.968969q-12 0-16.571429-10.285715-4.571429-11.428571 2.285714-20l91.428572-109.714285q5.142857-6.285714 14.285714-6.285715h182.857143V365.714286H381.540397q-22.857143 0-33.142857-21.142857-9.714286-21.142857 5.142857-38.857143l182.857143-219.428572q10.285714-12.571429 28-12.571428t28 12.571428l182.857143 219.428572q15.428571 18.285714 5.142857 38.857143z\"  ></path></symbol><symbol id=\"icon-life-ring\" viewBox=\"0 0 1024 1024\"><path d=\"M512 0q104 0 198.857143 40.571429t163.428571 109.142857 109.142857 163.428571 40.571429 198.857143-40.571429 198.857143-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0z m0 73.142857q-108.571429 0-206.285714 51.428572l110.857143 110.857142q46.857143-16 95.428571-16t95.428571 16l110.857143-110.857142q-97.714286-51.428571-206.285714-51.428572zM124.571429 718.285714l110.857142-110.857143q-16-46.857143-16-95.428571t16-95.428571L124.571429 305.714286q-51.428571 97.714286-51.428572 206.285714t51.428572 206.285714z m387.428571 232.571429q108.571429 0 206.285714-51.428572l-110.857143-110.857142q-46.857143 16-95.428571 16t-95.428571-16l-110.857143 110.857142q97.714286 51.428571 206.285714 51.428572z m0-219.428572q90.857143 0 155.142857-64.285714T731.428571 512t-64.285714-155.142857T512 292.571429 356.857143 356.857143 292.571429 512t64.285714 155.142857T512 731.428571z m276.571429-124l110.857142 110.857143q51.428571-97.714286 51.428572-206.285714t-51.428572-206.285714l-110.857142 110.857143q16 46.857143 16 95.428571t-16 95.428571z\"  ></path></symbol><symbol id=\"icon-life-buoy\" viewBox=\"0 0 1024 1024\"><path d=\"M512 0q104 0 198.857143 40.571429t163.428571 109.142857 109.142857 163.428571 40.571429 198.857143-40.571429 198.857143-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0z m0 73.142857q-108.571429 0-206.285714 51.428572l110.857143 110.857142q46.857143-16 95.428571-16t95.428571 16l110.857143-110.857142q-97.714286-51.428571-206.285714-51.428572zM124.571429 718.285714l110.857142-110.857143q-16-46.857143-16-95.428571t16-95.428571L124.571429 305.714286q-51.428571 97.714286-51.428572 206.285714t51.428572 206.285714z m387.428571 232.571429q108.571429 0 206.285714-51.428572l-110.857143-110.857142q-46.857143 16-95.428571 16t-95.428571-16l-110.857143 110.857142q97.714286 51.428571 206.285714 51.428572z m0-219.428572q90.857143 0 155.142857-64.285714T731.428571 512t-64.285714-155.142857T512 292.571429 356.857143 356.857143 292.571429 512t64.285714 155.142857T512 731.428571z m276.571429-124l110.857142 110.857143q51.428571-97.714286 51.428572-206.285714t-51.428572-206.285714l-110.857142 110.857143q16 46.857143 16 95.428571t-16 95.428571z\"  ></path></symbol><symbol id=\"icon-life-bouy\" viewBox=\"0 0 1024 1024\"><path d=\"M512 0q104 0 198.857143 40.571429t163.428571 109.142857 109.142857 163.428571 40.571429 198.857143-40.571429 198.857143-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0z m0 73.142857q-108.571429 0-206.285714 51.428572l110.857143 110.857142q46.857143-16 95.428571-16t95.428571 16l110.857143-110.857142q-97.714286-51.428571-206.285714-51.428572zM124.571429 718.285714l110.857142-110.857143q-16-46.857143-16-95.428571t16-95.428571L124.571429 305.714286q-51.428571 97.714286-51.428572 206.285714t51.428572 206.285714z m387.428571 232.571429q108.571429 0 206.285714-51.428572l-110.857143-110.857142q-46.857143 16-95.428571 16t-95.428571-16l-110.857143 110.857142q97.714286 51.428571 206.285714 51.428572z m0-219.428572q90.857143 0 155.142857-64.285714T731.428571 512t-64.285714-155.142857T512 292.571429 356.857143 356.857143 292.571429 512t64.285714 155.142857T512 731.428571z m276.571429-124l110.857142 110.857143q51.428571-97.714286 51.428572-206.285714t-51.428572-206.285714l-110.857142 110.857143q16 46.857143 16 95.428571t-16 95.428571z\"  ></path></symbol><symbol id=\"icon-lemon-o\" viewBox=\"0 0 1024 1024\"><path d=\"M877.142857 472q0-25.142857-4-64.857143t-10.285714-55.142857q-6.857143-17.142857-9.714286-25.142857t-5.142857-20.857143-2.285714-27.714286q0-13.142857 2.857143-39.142857t2.857142-38.571428q0-21.142857-5.714285-31.428572-2.285714-0.571429-7.428572-0.571428-10.857143 0-33.142857 2.571428t-33.714286 2.571429q-34.285714 0-100.571428-13.714286t-100-13.714286q-24.571429 0-54 6.571429t-48.571429 13.428571-51.142857 19.428572q-78.285714 30.857143-115.428571 58.857143-54.857143 41.714286-91.142857 108.285714t-50.285715 134.857143T146.285714 629.714286q0 22.857143 7.142857 68.571428t7.142858 69.142857q0 13.142857-6.285715 38t-6.285714 37.428572 6.857143 20.857143 19.428571 8.285714q13.714286 0 41.428572-6.285714t42-6.285715q32.571429 0 96.857143 8.857143T451.428571 877.142857q103.428571 0 162.285715-20.571428 73.714286-25.714286 134.571428-87.142858t94.857143-140.285714 34-157.142857z m73.142857-1.142857q0 94.285714-40 187.142857t-112 164.571429T637.714286 925.714286q-70.857143 25.142857-186.285715 25.142857-32.571429 0-97.142857-8.285714T257.714286 934.285714q-13.714286 0-41.428572 8.285715T174.285714 950.857143q-41.714286 0-70.571428-31.714286T74.857143 845.714286q0-13.714286 6.285714-38.857143t6.285714-38.285714q0-22.857143-7.142857-68.857143T73.142857 630.285714q0-63.428571 10.285714-124.285714T114.571429 386.285714 172 275.428571t85.714286-89.142857q44.571429-33.714286 132.571428-68.571428 110.857143-44.571429 180.571429-44.571429 34.285714 0 100.285714 13.714286t99.142857 13.714286q10.857143 0 32.571429-2.857143t33.142857-2.857143q46.285714 0 67.428571 28.857143t21.142858 76.857143q0 13.142857-2.857143 38.857142t-2.857143 38.857143q0 7.428571 1.142857 14.285715t2 9.428571 4.285714 11.714286 4.571429 11.428571q9.142857 22.857143 14.285714 67.714286t5.142857 78z\"  ></path></symbol><symbol id=\"icon-lightbulb-o\" viewBox=\"0 0 1024 1024\"><path d=\"M622.46242 329.142857q0 7.428571-5.428571 12.857143T604.176706 347.428571t-12.857143-5.428571T585.890991 329.142857q0-26.285714-30.857142-40.571428t-60.571429-14.285715q-7.428571 0-12.857143-5.428571T476.176706 256t5.428571-12.857143T494.46242 237.714286q28.571429 0 56.857143 9.142857t49.714286 30.857143 21.428571 51.428571z m91.428571 0q0-41.142857-19.714285-76.571428t-51.428572-58-70.285714-35.428572T494.46242 146.285714t-78 12.857143-70.285714 35.428572-51.428572 58T275.033849 329.142857q0 57.714286 38.857142 102.857143 5.714286 6.285714 17.428572 18.857143t17.428571 18.857143q73.142857 87.428571 80.571429 170.285714h130.285714q7.428571-82.857143 80.571429-170.285714 5.714286-6.285714 17.428571-18.857143t17.428572-18.857143q38.857143-45.142857 38.857142-102.857143z m73.142858 0q0 88.571429-58.857143 153.142857-25.714286 28-42.571429 49.714286t-34 54.571429-19.428571 61.428571q26.857143 16 26.857143 46.857143 0 21.142857-14.285715 36.571428 14.285714 15.428571 14.285715 36.571429 0 29.714286-25.714286 46.285714 7.428571 13.142857 7.428571 26.857143 0 26.285714-18 40.571429t-44.285714 14.285714q-11.428571 25.142857-34.285714 40t-49.714286 14.857143-49.714286-14.857143-34.285714-40q-26.285714 0-44.285714-14.285714t-18-40.571429q0-13.714286 7.428571-26.857143-25.714286-16.571429-25.714286-46.285714 0-21.142857 14.285715-36.571429-14.285714-15.428571-14.285715-36.571428 0-30.857143 26.857143-46.857143-2.285714-28.571429-19.428571-61.428571T303.319563 532 260.748134 482.285714Q201.890991 417.714286 201.890991 329.142857q0-56.571429 25.428572-105.428571t66.857143-81.142857 93.714285-50.857143T494.46242 73.142857t106.571429 18.571429 93.714285 50.857143 66.857143 81.142857T787.033849 329.142857z\"  ></path></symbol><symbol id=\"icon-life-saver\" viewBox=\"0 0 1024 1024\"><path d=\"M512 0q104 0 198.857143 40.571429t163.428571 109.142857 109.142857 163.428571 40.571429 198.857143-40.571429 198.857143-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0z m0 73.142857q-108.571429 0-206.285714 51.428572l110.857143 110.857142q46.857143-16 95.428571-16t95.428571 16l110.857143-110.857142q-97.714286-51.428571-206.285714-51.428572zM124.571429 718.285714l110.857142-110.857143q-16-46.857143-16-95.428571t16-95.428571L124.571429 305.714286q-51.428571 97.714286-51.428572 206.285714t51.428572 206.285714z m387.428571 232.571429q108.571429 0 206.285714-51.428572l-110.857143-110.857142q-46.857143 16-95.428571 16t-95.428571-16l-110.857143 110.857142q97.714286 51.428571 206.285714 51.428572z m0-219.428572q90.857143 0 155.142857-64.285714T731.428571 512t-64.285714-155.142857T512 292.571429 356.857143 356.857143 292.571429 512t64.285714 155.142857T512 731.428571z m276.571429-124l110.857142 110.857143q51.428571-97.714286 51.428572-206.285714t-51.428572-206.285714l-110.857142 110.857143q16 46.857143 16 95.428571t-16 95.428571z\"  ></path></symbol><symbol id=\"icon-line-chart\" viewBox=\"0 0 1170 1024\"><path d=\"M1170.285714 877.714286v73.142857H0V73.142857h73.142857v804.571429h1097.142857zM1097.142857 164.571429v248.571428q0 12-11.142857 16.857143T1065.714286 425.714286l-69.142857-69.142857-361.714286 361.714285q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-133.142858-133.142857-237.714285 237.714286-109.714286-109.714286 334.285714-334.285714q5.714286-5.714286 13.142857-5.714286t13.142858 5.714286l133.142857 133.142857 265.142857-265.142857-69.142857-69.142857q-9.142857-9.142857-4.285715-20.285715T830.285714 146.285714h248.571429q8 0 13.142857 5.142857t5.142857 13.142858z\"  ></path></symbol><symbol id=\"icon-linkedin\" viewBox=\"0 0 1024 1024\"><path d=\"M272.571429 357.142857v566.285714H84V357.142857h188.571429z m12-174.857143q0.571429 41.714286-28.857143 69.714286T178.285714 280h-1.142857q-46.857143 0-75.428571-28T73.142857 182.285714q0-42.285714 29.428572-70T179.428571 84.571429t76 27.714285T284.571429 182.285714z m666.285714 416.571429v324.571428h-188v-302.857142q0-60-23.142857-94T667.428571 492.571429q-36 0-60.285714 19.714285T570.857143 561.142857q-6.285714 17.142857-6.285714 46.285714v316H376.571429q1.142857-228 1.142857-369.714285t-0.571429-169.142857l-0.571428-27.428572h188v82.285714h-1.142858q11.428571-18.285714 23.428572-32t32.285714-29.714285 49.714286-24.857143T734.285714 344q97.714286 0 157.142857 64.857143t59.428572 190z\"  ></path></symbol><symbol id=\"icon-linkedin-square\" viewBox=\"0 0 1024 1024\"><path d=\"M208.571429 808h132V411.428571H208.571429v396.571429z m140.571428-518.857143q-0.571429-29.714286-20.571428-49.142857t-53.142858-19.428571-54 19.428571-20.857142 49.142857q0 29.142857 20.285714 48.857143T273.714286 357.714286h0.571428q33.714286 0 54.285715-19.714286t20.571428-48.857143z m334.285714 518.857143h132v-227.428571q0-88-41.714285-133.142858t-110.285715-45.142857q-77.714286 0-119.428571 66.857143h1.142857V411.428571H413.142857q1.714286 37.714286 0 396.571429h132v-221.714286q0-21.714286 4-32 8.571429-20 25.714286-34t42.285714-14q66.285714 0 66.285714 89.714286v212z m267.428572-570.285714v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-link\" viewBox=\"0 0 1024 1024\"><path d=\"M868.571429 694.857143q0-22.857143-16-38.857143l-118.857143-118.857143q-16-16-38.857143-16-24 0-41.142857 18.285714 1.714286 1.714286 10.857143 10.571429t12.285714 12.285714 8.571428 10.857143 7.428572 14.571429 2 15.714285q0 22.857143-16 38.857143t-38.857143 16q-8.571429 0-15.714286-2t-14.571428-7.428571-10.857143-8.571429-12.285714-12.285714-10.571429-10.857143q-18.857143 17.714286-18.857143 41.714286 0 22.857143 16 38.857143l117.714286 118.285714q15.428571 15.428571 38.857143 15.428571 22.857143 0 38.857143-14.857142l84-83.428572q16-16 16-38.285714zM466.857143 292q0-22.857143-16-38.857143L333.142857 134.857143q-16-16-38.857143-16-22.285714 0-38.857143 15.428571L171.428571 217.714286q-16 16-16 38.285714 0 22.857143 16 38.857143l118.857143 118.857143q15.428571 15.428571 38.857143 15.428571 24 0 41.142857-17.714286-1.714286-1.714286-10.857143-10.571428T347.142857 388.571429t-8.571428-10.857143-7.428572-14.571429T329.142857 347.428571q0-22.857143 16-38.857142t38.857143-16q8.571429 0 15.714286 2t14.571428 7.428571 10.857143 8.571429 12.285714 12.285714 10.571429 10.857143q18.857143-17.714286 18.857143-41.714286z m511.428571 402.857143q0 68.571429-48.571428 116l-84 83.428571q-47.428571 47.428571-116 47.428572-69.142857 0-116.571429-48.571429l-117.714286-118.285714q-47.428571-47.428571-47.428571-116 0-70.285714 50.285714-119.428572l-50.285714-50.285714q-49.142857 50.285714-118.857143 50.285714-68.571429 0-116.571428-48L93.714286 372.571429q-48-48-48-116.571429t48.571428-116L178.285714 56.571429q47.428571-47.428571 116-47.428572 69.142857 0 116.571429 48.571429l117.714286 118.285714q47.428571 47.428571 47.428571 116 0 70.285714-50.285714 119.428571l50.285714 50.285715q49.142857-50.285714 118.857143-50.285715 68.571429 0 116.571428 48l118.857143 118.857143q48 48 48 116.571429z\"  ></path></symbol><symbol id=\"icon-linode\" viewBox=\"0 0 1024 1024\"><path d=\"M261.714286 877.142857l115.428571 122.285714-19.428571-134.857142-123.428572-121.714286z m129.142857 129.142857l156.571428-124.571428-6.285714-140-171.428571 122.857143z m-177.714286-364.571428l129.714286 121.714285-27.428572-186.857142-140-116.571429z m142.857143 128l181.142857-122.285715-8-185.142857-201.142857 114.285715z m198.857143 6.285714l54.285714 45.714286-1.142857-136.571429-58.857143-45.142857q0 0.571429 0.571429 4.857143t0 6.857143-2.857143 4.285714l-44.571429 29.714286 48.571429 40q4 3.428571 4 50.285714zM152 346.285714l146.285714 114.285715-38.857143-265.714286L100 96z m591.428571 378.857143l8.571429-133.714286-131.428571 93.714286 1.142857 137.142857zM311.428571 465.142857l213.142858-110.857143-10.857143-252-241.714286 93.142857z m487.428572 208.571429l11.428571-133.142857-129.142857-81.142858-1.142857 60 82.285714 54.285715q3.428571 2.285714 2.285715 5.142857l-4 68z m109.142857-79.428572l17.142857-126.857143-102.285714 73.142858-11.428572 130.285714z m-107.428571 95.428572l-40.571429-28-4.571429 66.857143q0 2.857143-2.285714 4.571428l-133.714286 106.857143q-4 2.857143-8 0l-56-47.428571 4 92q0 2.857143-2.285714 4.571428l-167.428571 133.714286q-2.285714 1.142857-3.428572 1.142857-4.571429-1.142857-4.571428-1.714286l-130.285715-138.285714q-2.285714-2.285714-33.714285-158.285714-1.142857-4 2.857143-6.285715l34.857142-21.142857q-53.714286-49.142857-54.285714-52.571428l-41.142857-200.571429q-1.142857-4 3.428571-6.857143l53.714286-25.714285Q141.142857 355.428571 140 350.857143L85.142857 84.571429q-1.142857-5.714286 4-7.428572L336.571429 0q2.857143 0 4.571428 0.571429l181.142857 87.428571q3.428571 2.285714 3.428572 5.142857l11.428571 264.571429q0 4-3.428571 5.714285l-67.428572 34.857143 72 48.571429q2.857143 1.142857 2.857143 4.571428l2.857143 70.285715 69.142857-42.285715q2.857143-2.285714 6.285714 0l48 32 1.714286-62.857142q0-3.428571 2.857143-5.142858l117.714286-72q3.428571-1.714286 6.285714 0l140 77.142858q2.285714 2.285714 2.857143 4t-3.714286 34.285714-10 71.142857-5.714286 40.285714q0 2.857143-2.285714 4l-109.142857 87.428572q-3.428571 2.857143-7.428571 0z\"  ></path></symbol><symbol id=\"icon-list\" viewBox=\"0 0 1024 1024\"><path d=\"M146.285714 749.714286v109.714285q0 7.428571-5.428571 12.857143T128 877.714286H18.285714q-7.428571 0-12.857143-5.428572T0 859.428571v-109.714285q0-7.428571 5.428571-12.857143T18.285714 731.428571h109.714286q7.428571 0 12.857143 5.428572t5.428571 12.857143z m0-219.428572v109.714286q0 7.428571-5.428571 12.857143T128 658.285714H18.285714q-7.428571 0-12.857143-5.428571T0 640V530.285714q0-7.428571 5.428571-12.857143T18.285714 512h109.714286q7.428571 0 12.857143 5.428571T146.285714 530.285714z m0-219.428571v109.714286q0 7.428571-5.428571 12.857142T128 438.857143H18.285714q-7.428571 0-12.857143-5.428572T0 420.571429V310.857143q0-7.428571 5.428571-12.857143T18.285714 292.571429h109.714286q7.428571 0 12.857143 5.428571T146.285714 310.857143z m877.714286 438.857143v109.714285q0 7.428571-5.428571 12.857143t-12.857143 5.428572H237.714286q-7.428571 0-12.857143-5.428572T219.428571 859.428571v-109.714285q0-7.428571 5.428572-12.857143t12.857143-5.428572h768q7.428571 0 12.857143 5.428572t5.428571 12.857143zM146.285714 91.428571v109.714286q0 7.428571-5.428571 12.857143T128 219.428571H18.285714q-7.428571 0-12.857143-5.428571T0 201.142857V91.428571q0-7.428571 5.428571-12.857142T18.285714 73.142857h109.714286q7.428571 0 12.857143 5.428572T146.285714 91.428571z m877.714286 438.857143v109.714286q0 7.428571-5.428571 12.857143t-12.857143 5.428571H237.714286q-7.428571 0-12.857143-5.428571T219.428571 640V530.285714q0-7.428571 5.428572-12.857143T237.714286 512h768q7.428571 0 12.857143 5.428571t5.428571 12.857143z m0-219.428571v109.714286q0 7.428571-5.428571 12.857142T1005.714286 438.857143H237.714286q-7.428571 0-12.857143-5.428572T219.428571 420.571429V310.857143q0-7.428571 5.428572-12.857143T237.714286 292.571429h768q7.428571 0 12.857143 5.428571t5.428571 12.857143z m0-219.428572v109.714286q0 7.428571-5.428571 12.857143T1005.714286 219.428571H237.714286q-7.428571 0-12.857143-5.428571T219.428571 201.142857V91.428571q0-7.428571 5.428572-12.857142T237.714286 73.142857h768q7.428571 0 12.857143 5.428572t5.428571 12.857142z\"  ></path></symbol><symbol id=\"icon-list-ul\" viewBox=\"0 0 1024 1024\"><path d=\"M219.428571 804.571429q0 45.714286-32 77.714285t-77.714285 32-77.714286-32-32-77.714285 32-77.714286 77.714286-32 77.714285 32 32 77.714286z m0-292.571429q0 45.714286-32 77.714286t-77.714285 32-77.714286-32T0 512t32-77.714286 77.714286-32 77.714285 32 32 77.714286z m804.571429 237.714286v109.714285q0 7.428571-5.428571 12.857143t-12.857143 5.428572H310.857143q-7.428571 0-12.857143-5.428572T292.571429 859.428571v-109.714285q0-7.428571 5.428571-12.857143t12.857143-5.428572h694.857143q7.428571 0 12.857143 5.428572t5.428571 12.857143zM219.428571 219.428571q0 45.714286-32 77.714286t-77.714285 32-77.714286-32T0 219.428571t32-77.714285 77.714286-32 77.714285 32 32 77.714285z m804.571429 237.714286v109.714286q0 7.428571-5.428571 12.857143t-12.857143 5.428571H310.857143q-7.428571 0-12.857143-5.428571T292.571429 566.857143V457.142857q0-7.428571 5.428571-12.857143T310.857143 438.857143h694.857143q7.428571 0 12.857143 5.428571t5.428571 12.857143z m0-292.571428v109.714285q0 7.428571-5.428571 12.857143T1005.714286 292.571429H310.857143q-7.428571 0-12.857143-5.428572T292.571429 274.285714V164.571429q0-7.428571 5.428571-12.857143T310.857143 146.285714h694.857143q7.428571 0 12.857143 5.428572t5.428571 12.857143z\"  ></path></symbol><symbol id=\"icon-linux\" viewBox=\"0 0 1024 1024\"><path d=\"M452 234.857143q-6.285714 0.571429-8.857143 6T438.285714 246.285714q-2.857143 0.571429-2.857143-2.857143 0-6.857143 10.857143-8.571428h5.714286z m49.714286 8q-2.285714 0.571429-6.571429-3.714286T485.142857 236.571429q13.714286-6.285714 18.285714 1.142857 1.714286 3.428571-1.714285 5.142857zM301.142857 486.857143q-2.285714-0.571429-3.428571 1.714286t-2.571429 7.142857T292 503.428571t-5.714286 7.428572q-5.714286 6.285714-0.571428 6.857143 2.285714 0.571429 7.142857-4t7.142857-10.285715q0.571429-1.714286 1.142857-4t1.142857-3.428571 0.857143-2.571429 0.285714-2.285714v-1.714286l-0.571428-1.428571-1.714286-1.142857z m488.571429 205.142857q0-10.285714-31.428572-24 2.285714-8.571429 4.285715-15.714286t2.857142-14.857143 1.714286-12.285714 0.285714-12.857143-0.571428-11.142857-2-12.571428-2.285714-11.714286-2.857143-14.285714-3.142857-15.142858q-5.714286-27.428571-26.857143-58.857142t-41.142857-42.857143q13.714286 11.428571 32.571428 47.428571 49.714286 92.571429 30.857143 158.857143-6.285714 22.857143-28.571429 24-17.714286 2.285714-22-10.571429t-4.571428-47.714285-6.571429-61.142857q-5.142857-22.285714-11.142857-39.428572t-11.142857-26-8.857143-14-7.428571-8.571428-4.285715-4q-8-35.428571-17.714285-58.857143t-16.857143-32-13.428572-18.857143-8.571428-22.857143q-2.285714-12 3.428571-30.571429t2.571429-28.285714-25.428572-14.285714q-8.571429-1.714286-25.428571-10.285714T525.714286 239.428571q-4.571429-0.571429-6.285715-14.857142t4.571429-29.142858 20.571429-15.428571q21.142857-1.714286 29.142857 17.142857t2.285714 33.142857q-6.285714 10.857143-1.142857 15.142857t17.142857 0.285715q7.428571-2.285714 7.428571-20.571429v-21.142857q-2.857143-17.142857-7.714285-28.571429t-12-17.428571-13.428572-8.571429-15.428571-4.285714q-61.142857 4.571429-50.857143 76.571429 0 8.571429-0.571429 8.571428-5.142857-5.142857-16.857142-6t-18.857143 0.285715-8.857143-2.857143q0.571429-32.571429-9.142857-51.428572t-25.714286-19.428571q-15.428571-0.571429-23.714286 15.714286T386.857143 200.571429q-0.571429 8.571429 2 21.142857t7.428571 21.428571T405.142857 250.857143q5.714286-1.714286 9.142857-8 2.285714-5.142857-4-4.571429-4 0-8.857143-8.285714T396 210.857143q-0.571429-12.571429 5.142857-21.142857t19.428572-8q9.714286 0 15.428571 12t5.428571 22.285714-0.857142 12.571429q-12.571429 8.571429-17.714286 16.571428-4.571429 6.857143-15.714286 13.428572T395.428571 265.714286q-7.428571 8-8.857142 15.428571t4.285714 10.285714q8 4.571429 14.285714 11.142858t9.142857 10.857142 10.571429 7.428572T445.142857 324.571429q26.857143 1.142857 58.285714-8.571429 1.142857-0.571429 13.142858-4t19.714285-6 16.857143-7.428571 12-10q5.142857-8 11.428572-4.571429 2.857143 1.714286 3.714285 4.857143t-1.714285 6.857143T569.142857 301.142857q-11.428571 3.428571-32.285714 12.285714T510.857143 324.571429q-25.142857 10.857143-40 13.142857-14.285714 2.857143-45.142857-1.142857-5.714286-1.142857-5.142857 1.142857t9.714285 10.857143q14.285714 13.142857 38.285715 12.571428 9.714286-0.571429 20.571428-4t20.571429-8 19.142857-10 17.142857-9.714286 14-6.857142 10-1.428572 4.857143 6.285714q0 1.142857-0.571429 2.571429t-2.285714 2.857143-3.428571 2.571428-4.857143 2.857143-5.142857 2.571429-5.714286 2.857143-5.428572 2.571428q-16 8-38.571428 25.142857T470.857143 396t-28 0.571429q-12-6.285714-36-41.714286-12.571429-17.714286-14.285714-12.571429-0.571429 1.714286-0.571429 5.714286 0 14.285714-8.571429 32.285714T366.571429 412t-12 33.142857 6.571428 36q-13.142857 3.428571-35.714286 51.428572T298.285714 613.142857q-1.142857 10.285714-0.857143 39.428572t-3.142857 33.714285q-4.571429 13.714286-16.571428 1.714286-18.285714-17.714286-20.571429-53.714286-1.142857-16 2.285714-32 2.285714-10.857143-0.571428-10.285714-1.142857 0.571429-2.285714 2.857143-20.571429 37.142857 5.714285 94.857143 2.857143 6.857143 14.285715 16t13.714285 11.428571q11.428571 13.142857 59.428572 51.714286t53.142857 43.714286q9.142857 8.571429 10 21.714285t-8 24.571429-26 13.142857q4.571429 8.571429 16.571428 25.428571t16 30.857143 4 40.285715q26.285714-13.714286 4-52.571429-2.285714-4.571429-6-9.142857t-5.428571-6.857143-1.142857-3.428571q1.714286-2.857143 7.428571-5.428572t11.428572 1.428572q26.285714 29.714286 94.857143 20.571428 76-8.571429 101.142857-49.714286 13.142857-21.714286 19.428571-17.142857 6.857143 3.428571 5.714286 29.714286-0.571429 14.285714-13.142857 52.571429-5.142857 13.142857-3.428572 21.428571t13.714286 8.857143q1.714286-10.857143 8.285714-44t7.714286-51.428572q1.142857-12-3.714286-42t-4.285714-55.428571 13.142857-40.285714q8.571429-10.285714 29.142857-10.285715 0.571429-21.142857 19.714286-30.285714t41.428571-6 34.285715 12.857143zM430.857143 219.428571q1.714286-9.714286-1.428572-17.142857T422.857143 193.714286q-5.142857-1.142857-5.142857 4 1.142857 2.857143 2.857143 3.428571 5.714286 0 4 8.571429-1.714286 11.428571 4.571428 11.428571 1.714286 0 1.714286-1.714286z m239.428571 112.571429q-1.142857-4.571429-3.714285-6.571429t-7.428572-2.857142-8.285714-3.142858q-2.857143-1.714286-5.428572-4.571428t-4-4.571429-3.142857-3.714285-2.285714-2.285715-2.285714 0.857143q-8 9.142857 4 24.857143t22.285714 18q5.142857 0.571429 8.285714-4.571429t2-11.428571zM568.571429 210.285714q0-6.285714-2.857143-11.142857T559.428571 192t-5.142857-1.714286q-3.428571 0-4.571428 1.142857t0 2.285715 2.857143 1.714285q8 2.285714 10.285714 17.714286 0 1.714286 4.571428-1.142857 1.142857-1.142857 1.142858-1.714286z m30.857142-133.142857q0-1.142857-1.428571-2.857143t-5.142857-4-5.428572-3.428571q-8.571429-8.571429-13.714285-8.571429-5.142857 0.571429-6.571429 4.285715t-0.571428 7.428571-0.285715 7.142857q-0.571429 2.285714-3.428571 6t-3.428572 5.142857 1.714286 4.857143q2.285714 1.714286 4.571429 0t6.285714-5.142857 8.571429-5.142857q0.571429-0.571429 5.142857-0.571429t8.571428-1.142857 5.142857-4z m322.857143 766.285714q11.428571 6.857143 17.714286 14t6.857143 13.714286-1.428572 12.857143-8.857142 12.571429-13.428572 11.142857-17.142857 10.571428-18 9.428572-18.285714 8.857143-15.428572 7.428571q-21.714286 10.857143-48.857143 32t-43.142857 36.571429q-9.714286 9.142857-38.857143 11.142857t-50.857142-8.285715q-10.285714-5.142857-16.857143-13.428571T646.285714 987.428571t-12.571428-11.142857-26.857143-5.428571q-25.142857-0.571429-74.285714-0.571429-10.857143 0-32.571429 0.857143t-33.142857 1.428572q-25.142857 0.571429-45.428572 8.571428t-30.571428 17.142857-24.857143 16.285715T335.428571 1021.142857q-16.571429-0.571429-63.428571-17.714286t-83.428571-24.571428q-10.857143-2.285714-29.142858-5.428572t-28.571428-5.142857-22.571429-5.428571-19.142857-8.285714-9.714286-11.142858q-5.714286-13.142857 4-38t10.285715-31.142857q0.571429-9.142857-2.285715-22.857143t-5.714285-24.285714-2.571429-20.857143 6-15.428571q8-6.857143 32.571429-8t34.285714-6.857143q17.142857-10.285714 24-20t6.857143-29.142857q12 41.714286-18.285714 60.571428-18.285714 11.428571-47.428572 8.571429-19.428571-1.714286-24.571428 5.714286-7.428571 8.571429 2.857142 32.571428 1.142857 3.428571 4.571429 10.285715t4.857143 10.285714 2.571428 9.714286 0.571429 12.571428q0 8.571429-9.714286 28t-8 27.428572q1.714286 9.714286 21.142857 14.857142 11.428571 3.428571 48.285715 10.571429T220.571429 969.714286q13.714286 3.428571 42.285714 12.571428t47.142857 13.142857 31.714286 2.285715q24.571429-3.428571 36.857143-16t13.142857-27.428572-4.285715-33.428571-10.857142-29.714286-11.428572-20.857143q-69.142857-108.571429-96.571428-138.285714-38.857143-42.285714-64.571429-22.857143-6.285714 5.142857-8.571429-8.571428-1.714286-9.142857-1.142857-21.714286 0.571429-16.571429 5.714286-29.714286t13.714286-26.857143 12.571428-24q4.571429-12 15.142857-41.142857t16.857143-44.571428 17.142857-34.857143 22.285715-30.857143q62.857143-81.714286 70.857143-111.428572-6.857143-64-9.142858-177.142857-1.142857-51.428571 13.714286-86.571428T433.714286 12Q456 0 493.142857 0q30.285714-0.571429 60.571429 7.714286T604.571429 31.428571q32.571429 24 52.285714 69.428572T673.714286 185.142857q-2.857143 54.285714 17.142857 122.285714 19.428571 64.571429 76 124.571429 31.428571 33.714286 56.857143 93.142857t34 109.142857q4.571429 28 2.857143 48.285715t-6.857143 31.714285-11.428572 12.571429q-5.714286 1.142857-13.428571 10.857143t-15.428572 20.285714-23.142857 19.142857-34.857143 8q-10.285714-0.571429-18-2.857143t-12.857142-7.714285-7.714286-8.857143-6.571429-11.714286-5.142857-11.142857q-12.571429-21.142857-23.428571-17.142857t-16 28 4 55.428571q11.428571 40 0.571428 111.428572-5.714286 37.142857 10.285715 57.428571t41.714285 18.857143 48.571429-20.285714q33.714286-28 51.142857-38T881.142857 914.285714q30.285714-10.285714 44-20.857143t10.571429-19.714285-14.285715-16.285715-29.428571-13.428571q-18.857143-6.285714-28.285714-27.428571t-8.571429-41.428572 8.857143-27.142857q0.571429 17.714286 4.571429 32.285714t8.285714 23.142857 11.714286 16.285715 12 10.857143 12.285714 7.428571 9.428571 5.428571z\"  ></path></symbol><symbol id=\"icon-list-ol\" viewBox=\"0 0 1024 1024\"><path d=\"M217.714286 925.714286q0 45.714286-31.142857 72T109.142857 1024q-60.571429 0-98.285714-37.714286l32.571428-50.285714q28 25.714286 60.571429 25.714286 16.571429 0 28.857143-8.285715T145.142857 929.142857q0-36.571429-60-32l-14.857143-32q4.571429-5.714286 18.571429-24.857143t24.285714-30.857143 21.142857-22v-0.571428q-9.142857 0-27.714285 0.571428t-27.714286 0.571429v30.285714H18.285714v-86.857143h190.285715v50.285715l-54.285715 65.714285q29.142857 6.857143 46.285715 28t17.142857 50.285715z m1.142857-358.285715v90.857143H12q-3.428571-20.571429-3.428571-30.857143 0-29.142857 13.428571-53.142857T54.285714 535.428571t37.714286-27.142857 32.285714-24.857143 13.428572-25.714285q0-14.285714-8.285715-22T106.857143 428q-26.285714 0-46.285714 33.142857l-48.571429-33.714286q13.714286-29.142857 40.857143-45.428571T113.142857 365.714286q41.714286 0 70.285714 23.714285T212 453.714286q0 28.571429-19.428571 52.285714T149.714286 542.857143t-43.142857 28.857143T86.285714 601.714286h72.571429v-34.285715h60z m805.142857 182.285715v109.714285q0 7.428571-5.428571 12.857143t-12.857143 5.428572H310.857143q-7.428571 0-12.857143-5.428572T292.571429 859.428571v-109.714285q0-8 5.142857-13.142857t13.142857-5.142858h694.857143q7.428571 0 12.857143 5.428572t5.428571 12.857143zM219.428571 236v56.571429H28v-56.571429h61.142857q0-23.428571 0.285714-69.428571T89.714286 97.142857v-6.857143h-1.142857q-4.571429 9.714286-28.571429 30.857143l-40.571429-43.428571L97.142857 5.142857h60.571429v230.857143h61.714285z m804.571429 221.142857v109.714286q0 7.428571-5.428571 12.857143t-12.857143 5.428571H310.857143q-7.428571 0-12.857143-5.428571T292.571429 566.857143V457.142857q0-8 5.142857-13.142857t13.142857-5.142857h694.857143q7.428571 0 12.857143 5.428571t5.428571 12.857143z m0-292.571428v109.714285q0 7.428571-5.428571 12.857143T1005.714286 292.571429H310.857143q-7.428571 0-12.857143-5.428572T292.571429 274.285714V164.571429q0-7.428571 5.428571-12.857143T310.857143 146.285714h694.857143q7.428571 0 12.857143 5.428572t5.428571 12.857143z\"  ></path></symbol><symbol id=\"icon-list-alt\" viewBox=\"0 0 1024 1024\"><path d=\"M219.428571 676.571429v36.571428q0 7.428571-5.428571 12.857143T201.142857 731.428571h-36.571428q-7.428571 0-12.857143-5.428571T146.285714 713.142857v-36.571428q0-7.428571 5.428572-12.857143t12.857143-5.428572h36.571428q7.428571 0 12.857143 5.428572t5.428571 12.857143z m0-146.285715v36.571429q0 7.428571-5.428571 12.857143T201.142857 585.142857h-36.571428q-7.428571 0-12.857143-5.428571T146.285714 566.857143v-36.571429q0-7.428571 5.428572-12.857143T164.571429 512h36.571428q7.428571 0 12.857143 5.428571T219.428571 530.285714z m0-146.285714v36.571429q0 7.428571-5.428571 12.857142T201.142857 438.857143h-36.571428q-7.428571 0-12.857143-5.428572T146.285714 420.571429v-36.571429q0-7.428571 5.428572-12.857143T164.571429 365.714286h36.571428q7.428571 0 12.857143 5.428571T219.428571 384z m658.285715 292.571429v36.571428q0 7.428571-5.428572 12.857143t-12.857143 5.428571H310.857143q-7.428571 0-12.857143-5.428571T292.571429 713.142857v-36.571428q0-7.428571 5.428571-12.857143t12.857143-5.428572h548.571428q7.428571 0 12.857143 5.428572t5.428572 12.857143z m0-146.285715v36.571429q0 7.428571-5.428572 12.857143t-12.857143 5.428571H310.857143q-7.428571 0-12.857143-5.428571T292.571429 566.857143v-36.571429q0-7.428571 5.428571-12.857143T310.857143 512h548.571428q7.428571 0 12.857143 5.428571t5.428572 12.857143z m0-146.285714v36.571429q0 7.428571-5.428572 12.857142T859.428571 438.857143H310.857143q-7.428571 0-12.857143-5.428572T292.571429 420.571429v-36.571429q0-7.428571 5.428571-12.857143T310.857143 365.714286h548.571428q7.428571 0 12.857143 5.428571t5.428572 12.857143z m73.142857 402.285714V310.857143q0-7.428571-5.428572-12.857143T932.571429 292.571429H91.428571q-7.428571 0-12.857142 5.428571T73.142857 310.857143v475.428571q0 7.428571 5.428572 12.857143t12.857142 5.428572h841.142858q7.428571 0 12.857142-5.428572t5.428572-12.857143z m73.142857-621.714285v621.714285q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 786.285714V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h841.142858q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-location-arrow\" viewBox=\"0 0 1024 1024\"><path d=\"M910.285714 199.428571L544.571429 930.857143q-9.714286 20-32.571429 20-2.857143 0-8.571429-1.142857-12.571429-2.857143-20.285714-12.857143T475.428571 914.285714v-329.142857H146.285714q-12.571429 0-22.571428-7.714286T110.857143 557.142857t2.285714-24 16.571429-17.142857l731.428571-365.714286q7.428571-4 16.571429-4 15.428571 0 25.714285 10.857143 8.571429 8 10.571429 19.714286T910.285714 199.428571z\"  ></path></symbol><symbol id=\"icon-lock\" viewBox=\"0 0 1024 1024\"><path d=\"M328.025543 438.857143h292.571428V329.142857q0-60.571429-42.857142-103.428571t-103.428572-42.857143-103.428571 42.857143-42.857143 103.428571v109.714286z m475.428571 54.857143v329.142857q0 22.857143-16 38.857143t-38.857143 16H200.025543q-22.857143 0-38.857143-16t-16-38.857143V493.714286q0-22.857143 16-38.857143t38.857143-16h18.285714V329.142857q0-105.142857 75.428572-180.571428t180.571428-75.428572 180.571429 75.428572 75.428571 180.571428v109.714286h18.285714q22.857143 0 38.857143 16t16 38.857143z\"  ></path></symbol><symbol id=\"icon-long-arrow-up\" viewBox=\"0 0 1024 1024\"><path d=\"M643.954951 281.714286q-5.142857 10.857143-16.571428 10.857143H499.383523v713.142857q0 8-5.142857 13.142857t-13.142857 5.142857H371.383523q-8 0-13.142857-5.142857t-5.142857-13.142857V292.571429H225.097809q-12 0-16.571429-10.857143t2.857143-20L411.383523 42.285714q5.714286-5.714286 13.142857-5.714285 8 0 13.714286 5.714285l202.857143 219.428572q7.428571 9.142857 2.857142 20z\"  ></path></symbol><symbol id=\"icon-long-arrow-right\" viewBox=\"0 0 1024 1024\"><path d=\"M987.428571 510.285714q0 8-5.714285 13.714286l-219.428572 202.285714q-9.142857 8-20 3.428572-10.857143-5.142857-10.857143-16.571429v-128H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142857V457.142857q0-8 5.142857-13.142857t13.142857-5.142857h713.142857V310.857143q0-12 10.857143-16.571429t20 2.857143l219.428572 200q5.714286 5.714286 5.714285 13.142857z\"  ></path></symbol><symbol id=\"icon-long-arrow-left\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 457.142857v109.714286q0 8-5.142857 13.142857t-13.142857 5.142857H292.571429v128q0 12-10.857143 16.571429t-20-2.857143L42.285714 526.857143q-5.714286-5.714286-5.714285-13.142857 0-8 5.714285-13.714286l219.428572-202.285714q9.142857-8 20-3.428572 10.857143 5.142857 10.857143 16.571429v128h713.142857q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-long-arrow-down\" viewBox=\"0 0 1024 1024\"><path d=\"M661.23184 742.285714q4.571429 10.857143-2.857143 20l-200 219.428572q-5.714286 5.714286-13.142857 5.714285-8 0-13.714286-5.714285L228.660411 762.285714q-7.428571-9.142857-2.857142-20 5.142857-10.857143 16.571428-10.857143h128V18.285714q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857v713.142857h128q12 0 16.571429 10.857143z\"  ></path></symbol><symbol id=\"icon-magic\" viewBox=\"0 0 1024 1024\"><path d=\"M716.571429 332l167.428571-167.428571-61.142857-61.142858-167.428572 167.428572z m255.428571-167.428571q0 15.428571-10.285714 25.714285L226.857143 925.142857q-10.285714 10.285714-25.714286 10.285714t-25.714286-10.285714L62.285714 812q-10.285714-10.285714-10.285714-25.714286t10.285714-25.714285L797.142857 25.714286q10.285714-10.285714 25.714286-10.285715t25.714286 10.285715l113.142857 113.142857q10.285714 10.285714 10.285714 25.714286zM200 56l56 17.142857-56 17.142857-17.142857 56-17.142857-56-56-17.142857 56-17.142857 17.142857-56z m200 92.571429l112 34.285714-112 34.285714-34.285714 112-34.285715-112-112-34.285714 112-34.285714 34.285715-112z m531.428571 273.142857l56 17.142857-56 17.142857-17.142857 56-17.142857-56-56-17.142857 56-17.142857 17.142857-56zM565.714286 56l56 17.142857-56 17.142857-17.142857 56-17.142858-56-56-17.142857 56-17.142857 17.142858-56z\"  ></path></symbol><symbol id=\"icon-magnet\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 475.428571v73.142858q0 114.857143-56.285714 206.857142t-156.571429 143.714286T512 950.857143t-226-51.714286-156.571429-143.714286T73.142857 548.571429V475.428571q0-14.857143 10.857143-25.714285t25.714286-10.857143h219.428571q14.857143 0 25.714286 10.857143t10.857143 25.714285v73.142858q0 29.714286 13.428571 51.428571t30.571429 32.571429 40.571428 17.142857 36.571429 7.428571 25.142857 1.142857 25.142857-1.142857 36.571429-7.428571 40.571428-17.142857 30.571429-32.571429 13.428571-51.428571V475.428571q0-14.857143 10.857143-25.714285t25.714286-10.857143h219.428571q14.857143 0 25.714286 10.857143t10.857143 25.714285zM365.714286 109.714286v219.428571q0 14.857143-10.857143 25.714286t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143T73.142857 329.142857V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h219.428571q14.857143 0 25.714286 10.857143t10.857143 25.714286z m585.142857 0v219.428571q0 14.857143-10.857143 25.714286t-25.714286 10.857143h-219.428571q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h219.428571q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-low-vision\" viewBox=\"0 0 1024 1024\"><path d=\"M191.428571 774.857143q-1.142857 0-3.428571-1.142857-49.142857-32.571429-96.285714-82.857143T12 588Q0 570.857143 0 548.571429q0-5.142857 1.142857-10.857143t2.285714-10.285715 4-10.285714 4.857143-9.142857T18.285714 498.285714t5.714286-8.571428 6.857143-8.857143T37.142857 472.571429q105.142857-143.428571 258.285714-208.571429-62.857143-113.142857-62.857142-120.571429 0-10.857143 9.714285-16.571428 66.285714-36.571429 73.142857-36.571429 10.285714 0 16 9.142857l70.857143 130.857143q52.571429-10.857143 109.714286-10.857143 152 0 284.285714 78.571429T1012.571429 509.142857q11.428571 17.714286 11.428571 39.428572t-11.428571 39.428571q-52 81.142857-124.857143 144.857143T728.571429 833.142857q62.857143 113.142857 62.857142 120.571429 0 11.428571-9.714285 16.571428-66.285714 36.571429-72.571429 36.571429-10.857143 0-16.571428-9.142857l-70.857143-130.857143-36.571429-68-253.714286-468.571429 4-4q-33.142857 13.714286-56.571428 26.857143 1.714286 2.857143 72.571428 133.714286t138.857143 256.571428 68 127.428572q0 4-5.142857 5.142857-7.428571 1.714286-41.142857 1.714286-32.571429 0-34.285714-4L217.142857 393.142857q-22.285714 16-46.857143 38.857143 13.714286 24.571429 122.285715 224.857143T401.142857 859.428571q0 5.714286-6.285714 5.714286-8 0-47.142857-12.571428t-41.428572-16l-60.571428-112.571429-128-236q-25.142857 30.285714-44.571429 60.571429 1.142857 1.714286 10.285714 14.285714t13.142858 19.428571l100.571428 186.857143q0 5.714286-5.714286 5.714286z m474.285715-58.285714l28 52q156-63.428571 257.142857-220-102.857143-158.285714-262.285714-222.285715 38.285714 36.571429 58.857142 84.857143t20.571429 100.857143q0 60.571429-26.857143 114.571429T665.714286 716.571429zM484.571429 365.714286q0 11.428571 8 19.428571t19.428571 8q49.142857 0 84 34.857143t34.857143 84q0 11.428571 8 19.428571t19.428571 8 19.428572-8 8-19.428571q0-72-50.857143-122.857143t-122.857143-50.857143q-11.428571 0-19.428571 8t-8 19.428572z m209.142857-37.142857l-5.142857-2.285715 4 4z\"  ></path></symbol><symbol id=\"icon-mail-reply-all\" viewBox=\"0 0 1024 1024\"><path d=\"M365.714286 618.285714v40q0 24-22.285715 33.714286-7.428571 2.857143-14.285714 2.857143-15.428571 0-25.714286-10.857143L10.857143 391.428571Q0 380.571429 0 365.714286t10.857143-25.714286L303.428571 47.428571q16.571429-17.714286 40-8 22.285714 9.714286 22.285715 33.714286v39.428572L138.857143 340q-10.857143 10.857143-10.857143 25.714286t10.857143 25.714285z m658.285714 21.714286q0 33.142857-9.714286 76.285714t-22 78.857143-27.428571 71.428572-23.142857 51.714285l-11.428572 22.857143q-4.571429 9.714286-16 9.714286-3.428571 0-5.142857-0.571429-14.285714-4.571429-13.142857-19.428571 24.571429-228.571429-60.571429-322.857143-36.571429-40.571429-97.428571-63.142857T585.142857 514.857143v143.428571q0 24-22.285714 33.714286-7.428571 2.857143-14.285714 2.857143-15.428571 0-25.714286-10.857143L230.285714 391.428571q-10.857143-10.857143-10.857143-25.714285t10.857143-25.714286L522.857143 47.428571q16.571429-17.714286 40-8 22.285714 9.714286 22.285714 33.714286v149.714286q234.857143 16 342.285714 126.285714 96.571429 98.857143 96.571429 290.857143z\"  ></path></symbol><symbol id=\"icon-mail-reply\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 640q0 94.857143-72.571429 257.714286-1.714286 4-6 13.714285t-7.714285 17.142858-7.428572 12.571428q-6.857143 9.714286-16 9.714286-8.571429 0-13.428571-5.714286t-4.857143-14.285714q0-5.142857 1.428571-15.142857t1.428572-13.428572q2.857143-38.857143 2.857143-70.285714 0-57.714286-10-103.428571t-27.714286-79.142858-45.714286-57.714285-60.285714-39.714286-76-24.285714-88-12.285715-100.285714-3.428571H365.714286v146.285714q0 14.857143-10.857143 25.714286t-25.714286 10.857143-25.714286-10.857143L10.857143 391.428571Q0 380.571429 0 365.714286t10.857143-25.714286L303.428571 47.428571q10.857143-10.857143 25.714286-10.857142t25.714286 10.857142 10.857143 25.714286v146.285714h128q407.428571 0 500 230.285715 30.285714 76.571429 30.285714 190.285714z\"  ></path></symbol><symbol id=\"icon-mail-forward\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 365.714286q0 14.857143-10.857143 25.714285l-292.571428 292.571429q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143-10.857143-25.714286V512H530.285714q-56 0-100.285714 3.428571t-88 12.285715-76 24.285714-60.285714 39.714286-45.714286 57.714285-27.714286 79.142858-10 103.428571q0 31.428571 2.857143 70.285714 0 3.428571 1.428572 13.428572t1.428571 15.142857q0 8.571429-4.857143 14.285714t-13.428571 5.714286q-9.142857 0-16-9.714286-4-5.142857-7.428572-12.571428t-7.714285-17.142858-6-13.714285Q0 734.857143 0 640q0-113.714286 30.285714-190.285714 92.571429-230.285714 500-230.285715h128V73.142857q0-14.857143 10.857143-25.714286t25.714286-10.857142 25.714286 10.857142l292.571428 292.571429q10.857143 10.857143 10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-male\" viewBox=\"0 0 1024 1024\"><path d=\"M760.756083 402.285714v237.714286q0 22.857143-16 38.857143t-38.857143 16-38.857143-16-16-38.857143V438.857143h-36.571428v521.142857q0 26.285714-18.857143 45.142857t-45.142857 18.857143-45.142858-18.857143-18.857142-45.142857v-265.142857h-36.571429v265.142857q0 26.285714-18.857143 45.142857t-45.142857 18.857143-45.142857-18.857143-18.857143-45.142857V438.857143h-36.571429v201.142857q0 22.857143-16 38.857143t-38.857142 16-38.857143-16-16-38.857143V402.285714q0-45.714286 32-77.714285t77.714285-32h365.714286q45.714286 0 77.714286 32t32 77.714285zM596.184654 146.285714q0 53.142857-37.428571 90.571429T468.184654 274.285714t-90.571428-37.428571T340.184654 146.285714t37.428572-90.571428T468.184654 18.285714t90.571429 37.428572T596.184654 146.285714z\"  ></path></symbol><symbol id=\"icon-map-pin\" viewBox=\"0 0 1024 1024\"><path d=\"M482.949243 621.714286q37.714286 0 73.142857-8.571429v374.285714q0 14.857143-10.857143 25.714286t-25.714286 10.857143H446.377814q-14.857143 0-25.714285-10.857143t-10.857143-25.714286v-374.285714q35.428571 8.571429 73.142857 8.571429zM482.949243 0q121.142857 0 206.857143 85.714286t85.714285 206.857143-85.714285 206.857142-206.857143 85.714286-206.857143-85.714286T190.377814 292.571429t85.714286-206.857143T482.949243 0z m0 128q8 0 13.142857-5.142857t5.142857-13.142857-5.142857-13.142857-13.142857-5.142858q-83.428571 0-142.285714 58.857143T281.806386 292.571429q0 8 5.142857 13.142857t13.142857 5.142857 13.142857-5.142857 5.142857-13.142857q0-68 48.285715-116.285715T482.949243 128z\"  ></path></symbol><symbol id=\"icon-map-o\" viewBox=\"0 0 1170 1024\"><path d=\"M1154.285714 6.285714q16 11.428571 16 30.285715v804.571428q0 11.428571-6.285714 20.571429t-16.571429 13.142857l-365.714285 146.285714q-13.714286 6.285714-27.428572 0l-352-140.571428-352 140.571428q-5.714286 2.857143-13.714285 2.857143-10.857143 0-20.571429-6.285714-16-11.428571-16-30.285715V182.857143q0-11.428571 6.285714-20.571429t16.571429-13.142857L388.571429 2.857143q13.714286-6.285714 27.428571 0l352 140.571428L1120 2.857143q18.285714-7.428571 34.285714 3.428571zM420.571429 83.428571v725.714286l329.142857 131.428572V214.857143zM73.142857 207.428571v725.714286l310.857143-124V83.428571z m1024 609.142858V90.857143l-310.857143 124v725.714286z\"  ></path></symbol><symbol id=\"icon-map-marker\" viewBox=\"0 0 1024 1024\"><path d=\"M650.887046 365.714286q0-60.571429-42.857143-103.428572t-103.428572-42.857143-103.428571 42.857143-42.857143 103.428572 42.857143 103.428571 103.428571 42.857143 103.428572-42.857143 42.857143-103.428571z m146.285714 0q0 62.285714-18.857143 102.285714l-208 442.285714q-9.142857 18.857143-27.142857 29.714286t-38.571429 10.857143-38.571428-10.857143-26.571429-29.714286L230.887046 468Q212.029903 428 212.029903 365.714286q0-121.142857 85.714286-206.857143t206.857142-85.714286 206.857143 85.714286 85.714286 206.857143z\"  ></path></symbol><symbol id=\"icon-map\" viewBox=\"0 0 1024 1024\"><path d=\"M292.571429 0q7.428571 0 12.857142 5.428571T310.857143 18.285714v841.142857q0 11.428571-9.714286 16L26.857143 1021.714286q-4 2.285714-8.571429 2.285714-7.428571 0-12.857143-5.428571T0 1005.714286V164.571429q0-11.428571 9.714286-16L284 2.285714q4-2.285714 8.571429-2.285714z m713.142857 0q7.428571 0 12.857143 5.428571T1024 18.285714v841.142857q0 11.428571-9.714286 16l-274.285714 146.285715q-4 2.285714-8.571429 2.285714-7.428571 0-12.857142-5.428571t-5.428572-12.857143V164.571429q0-11.428571 9.714286-16L997.142857 2.285714q4-2.285714 8.571429-2.285714zM365.714286 0q4.571429 0 8 1.714286l292.571428 146.285714q10.285714 5.714286 10.285715 16.571429v841.142857q0 7.428571-5.428572 12.857143t-12.857143 5.428571q-4.571429 0-8-1.714286l-292.571428-146.285714q-10.285714-5.714286-10.285715-16.571429V18.285714q0-7.428571 5.428572-12.857143T365.714286 0z\"  ></path></symbol><symbol id=\"icon-map-signs\" viewBox=\"0 0 1024 1024\"><path d=\"M997.142857 169.714286q5.714286 5.714286 5.714286 13.142857t-5.714286 13.142857l-80.571428 80.571429q-16 16-38.857143 16H109.714286q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h329.142857V36.571429q0-14.857143 10.857143-25.714286t25.714285-10.857143h73.142858q14.857143 0 25.714285 10.857143t10.857143 25.714286v36.571428h292.571429q22.857143 0 38.857143 16z m-558.285714 525.142857h146.285714v292.571428q0 14.857143-10.857143 25.714286t-25.714285 10.857143H475.428571q-14.857143 0-25.714285-10.857143t-10.857143-25.714286v-292.571428z m475.428571-256q14.857143 0 25.714286 10.857143t10.857143 25.714285v146.285715q0 14.857143-10.857143 25.714285t-25.714286 10.857143H146.285714q-22.857143 0-38.857143-16L26.857143 561.714286q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142858l80.571428-80.571428q16-16 38.857143-16h292.571429V329.142857h146.285714v109.714286h329.142857z\"  ></path></symbol><symbol id=\"icon-mars-stroke-h\" viewBox=\"0 0 1170 1024\"><path d=\"M1086.285714 522.857143q10.857143 10.857143 10.857143 25.714286t-10.857143 25.714285l-168 168q-5.142857 5.714286-12.857143 5.714286t-12.857142-5.714286l-25.714286-25.714285q-5.714286-5.142857-5.714286-12.857143t5.714286-12.857143l105.714286-105.714286h-168v128q0 8-5.142858 13.142857t-13.142857 5.142857h-36.571428q-8 0-13.142857-5.142857t-5.142858-13.142857v-128h-75.428571q-13.714286 124-107.142857 208.285714T329.142857 877.714286q-95.428571 0-174.857143-49.714286T33.142857 693.142857 2.285714 510.857143q8.571429-76 50.285715-140.285714t107.428571-104T302.285714 220.571429q88.571429-6.857143 166.857143 30t128 106.285714T656 512h75.428571V384q0-8 5.142858-13.142857t13.142857-5.142857h36.571428q8 0 13.142857 5.142857t5.142858 13.142857v128h168l-105.714286-105.714286q-5.714286-5.142857-5.714286-12.857143t5.714286-12.857142l25.714286-25.714286q5.142857-5.714286 12.857142-5.714286t12.857143 5.714286zM329.142857 804.571429q105.714286 0 180.857143-75.142858T585.142857 548.571429 510 367.714286 329.142857 292.571429 148.285714 367.714286 73.142857 548.571429t75.142857 180.857142T329.142857 804.571429z\"  ></path></symbol><symbol id=\"icon-mars-stroke\" viewBox=\"0 0 1024 1024\"><path d=\"M914.285714 73.142857q14.857143 0 25.714286 10.857143t10.857143 25.714286v237.714285q0 8-5.142857 13.142858t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142858V197.714286l-121.714286 122.285714 80 80q5.142857 5.714286 5.142857 13.142857t-5.142857 12.571429l-26.285714 26.285714q-5.142857 5.142857-12.571429 5.142857t-13.142857-5.142857l-80-80.571429-44.571429 45.142858q72 89.142857 72 205.142857 0 66.857143-26 127.714285t-70.285714 105.142858-105.142857 70.285714T402.285714 950.857143t-127.714285-26-105.142858-70.285714-70.285714-105.142858T73.142857 621.714286t26-127.714286 70.285714-105.142857 105.142858-70.285714T402.285714 292.571429q116 0 205.142857 72l44.571429-44.571429-98.285714-98.285714q-5.142857-5.714286-5.142857-13.142857t5.142857-12.571429l26.285714-26.285714q5.142857-5.142857 12.571429-5.142857t13.142857 5.142857l98.285714 98.285714 121.714286-121.714286h-149.142857q-8 0-13.142858-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142858-5.142857h237.714285zM402.285714 877.714286q105.714286 0 180.857143-75.142857T658.285714 621.714286 583.142857 440.857143 402.285714 365.714286 221.428571 440.857143 146.285714 621.714286t75.142857 180.857143T402.285714 877.714286z\"  ></path></symbol><symbol id=\"icon-mars-stroke-v\" viewBox=\"0 0 1024 1024\"><path d=\"M512 368q124 13.714286 208.285714 107.142857T804.571429 694.857143q0 95.428571-49.714286 174.857143t-134.857143 121.142857-182.285714 30.857143q-76-8.571429-140.285715-50.285715t-104-107.428571T147.428571 721.714286q-6.857143-88.571429 30-166.857143t106.285715-128T438.857143 368V292.571429H347.428571q-8 0-13.142857-5.142858t-5.142857-13.142857v-36.571428q0-8 5.142857-13.142857t13.142857-5.142858h91.428572V125.142857l-52.571429 52.571429q-5.714286 5.142857-13.142857 5.142857t-12.571428-5.142857l-26.285715-26.285715q-5.142857-5.142857-5.142857-12.571428t5.142857-13.142857L449.714286 10.857143q10.857143-10.857143 25.714285-10.857143t25.714286 10.857143l115.428572 114.857143q5.142857 5.714286 5.142857 13.142857t-5.142857 12.571428l-26.285715 26.285715q-5.142857 5.142857-12.571428 5.142857t-13.142857-5.142857l-52.571429-52.571429v94.285714h91.428571q8 0 13.142858 5.142858t5.142857 13.142857v36.571428q0 8-5.142857 13.142857t-13.142858 5.142858H512v75.428571z m-36.571429 582.857143q105.714286 0 180.857143-75.142857T731.428571 694.857143 656.285714 514 475.428571 438.857143 294.571429 514 219.428571 694.857143t75.142858 180.857143T475.428571 950.857143z\"  ></path></symbol><symbol id=\"icon-mars-double\" viewBox=\"0 0 1097 1024\"><path d=\"M877.714286 237.714286q0-8 5.142857-13.142857t13.142857-5.142858h164.571429q14.857143 0 25.714285 10.857143t10.857143 25.714286v164.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857V344l-145.142857 145.714286q43.428571 54.285714 61.428571 122.285714t5.428572 141.142857q-17.714286 104-94.857143 178.285714t-181.714286 89.142858q-120 16.571429-219.714286-45.714286T311.428571 803.428571q-66.857143-3.428571-126.285714-32.857142t-101.428571-76T18.857143 584.571429 0.571429 453.142857q5.142857-77.142857 44.571428-144t104-109.428571T290.857143 148.571429q67.428571-8 130 10.857142T534.285714 218.285714l145.714286-145.142857h-76.571429q-8 0-13.142857-5.142857t-5.142857-13.142857V18.285714q0-8 5.142857-13.142857t13.142857-5.142857h164.571429q14.857143 0 25.714286 10.857143t10.857143 25.714286v164.571428q0 8-5.142858 13.142857t-13.142857 5.142857h-36.571428q-8 0-13.142857-5.142857t-5.142858-13.142857V124.571429l-145.142857 145.714285q33.714286 42.285714 53.142857 96.571429 104 5.142857 187.428572 70.857143l145.714286-145.142857h-76.571429q-8 0-13.142857-5.142858t-5.142857-13.142857v-36.571428z m-292.571429 237.714285q0-11.428571-2.285714-33.142857-92.571429 14.285714-154.857143 85.714286t-62.285714 166.857143q0 11.428571 2.285714 33.142857 92.571429-14.285714 154.857143-85.714286t62.285714-166.857143z m-512 0q0 96 63.428572 168t157.714285 85.142858q-1.714286-16.571429-1.714285-33.714286 0-120 77.142857-211.142857T562.857143 371.428571q-30.285714-68.571429-93.428572-110.285714T329.142857 219.428571q-105.714286 0-180.857143 75.142858T73.142857 475.428571z m548.571429 475.428572q105.714286 0 180.857143-75.142857T877.714286 694.857143q0-96-63.428572-168t-157.714285-85.142857q1.714286 16 1.714285 33.714285 0 120-77.142857 211.142858T388 798.857143q30.285714 68.571429 93.428571 110.285714t140.285715 41.714286z\"  ></path></symbol><symbol id=\"icon-mars\" viewBox=\"0 0 1024 1024\"><path d=\"M914.285714 73.142857q14.857143 0 25.714286 10.857143t10.857143 25.714286v237.714285q0 8-5.142857 13.142858t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142858V197.714286l-218.285715 218.857143q72 89.142857 72 205.142857 0 66.857143-26 127.714285t-70.285714 105.142858-105.142857 70.285714T402.285714 950.857143t-127.714285-26-105.142858-70.285714-70.285714-105.142858T73.142857 621.714286t26-127.714286 70.285714-105.142857 105.142858-70.285714T402.285714 292.571429q116 0 205.142857 72l218.285715-218.285715h-149.142857q-8 0-13.142858-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142858-5.142857h237.714285zM402.285714 877.714286q105.714286 0 180.857143-75.142857T658.285714 621.714286 583.142857 440.857143 402.285714 365.714286 221.428571 440.857143 146.285714 621.714286t75.142857 180.857143T402.285714 877.714286z\"  ></path></symbol><symbol id=\"icon-maxcdn\" viewBox=\"0 0 1024 1024\"><path d=\"M997.142857 441.714286l-93.714286 436h-190.857142l101.714285-475.428572q7.428571-32-8.571428-50.285714-15.428571-18.857143-47.428572-18.857143h-96.571428l-116.571429 544.571429H354.285714l116.571429-544.571429H307.428571l-116.571428 544.571429H0l116.571429-544.571429L29.142857 146.285714h729.142857q57.714286 0 108.285715 23.142857T950.857143 234.285714q34.285714 41.714286 46.285714 96.285715t0 111.142857z\"  ></path></symbol><symbol id=\"icon-medium\" viewBox=\"0 0 1024 1024\"><path d=\"M341.142857 240.571429v670.285714q0 14.285714-7.142857 24.285714T313.142857 945.142857q-9.714286 0-18.857143-4.571428L28.571429 807.428571q-12-5.714286-20.285715-19.142857T0 761.714286V110.285714q0-11.428571 5.714286-19.428571t16.571428-8q8 0 25.142857 8.571428l292 146.285715q1.714286 1.714286 1.714286 2.857143z m36.571429 57.714285l305.142857 494.857143-305.142857-152V298.285714z m646.285714 10.285715v602.285714q0 14.285714-8 23.142857t-21.714286 8.857143-26.857143-7.428572l-252-125.714285z m-1.714286-68.571429q0 1.714286-146.571428 239.714286T704 758.285714L481.142857 396l185.142857-301.142857q9.714286-16 29.714286-16 8 0 14.857143 3.428571l309.142857 154.285715q2.285714 1.142857 2.285714 3.428571z\"  ></path></symbol><symbol id=\"icon-medkit\" viewBox=\"0 0 1024 1024\"><path d=\"M731.428571 640V530.285714q0-8-5.142857-13.142857t-13.142857-5.142857h-128V384q0-8-5.142857-13.142857t-13.142857-5.142857H457.142857q-8 0-13.142857 5.142857t-5.142857 13.142857v128H310.857143q-8 0-13.142857 5.142857t-5.142857 13.142857v109.714286q0 8 5.142857 13.142857t13.142857 5.142857h128v128q0 8 5.142857 13.142857t13.142857 5.142858h109.714286q8 0 13.142857-5.142858t5.142857-13.142857v-128h128q8 0 13.142857-5.142857t5.142857-13.142857zM365.714286 219.428571h292.571428V146.285714H365.714286v73.142857z m-219.428572 0v731.428572h-18.285714q-52.571429 0-90.285714-37.714286T0 822.857143V347.428571q0-52.571429 37.714286-90.285714t90.285714-37.714286h18.285714z m676.571429 0v731.428572H201.142857V219.428571h91.428572V128q0-22.857143 16-38.857143t38.857142-16h329.142858q22.857143 0 38.857142 16t16 38.857143v91.428571h91.428572z m201.142857 128v475.428572q0 52.571429-37.714286 90.285714t-90.285714 37.714286h-18.285714V219.428571h18.285714q52.571429 0 90.285714 37.714286t37.714286 90.285714z\"  ></path></symbol><symbol id=\"icon-meanpath\" viewBox=\"0 0 1024 1024\"><path d=\"M822.285714 481.142857v65.142857q0 13.714286-7.714285 21.714286t-21.428572 8h-115.428571q-13.714286 0-21.714286-8t-8-21.714286V481.142857q0-13.714286 8-21.714286t21.714286-8h115.428571q13.714286 0 21.428572 8t7.714285 21.714286z m-280 131.428572V469.714286q0-30.285714-18.571428-48.857143T474.857143 402.285714H398.857143q-38.857143 0-54.857143 29.714286-16-29.714286-54.857143-29.714286H214.857143q-30.285714 0-48.857143 18.571429T147.428571 469.714286v142.857143q0 12.571429 12 12.571428h31.428572q12.571429 0 12.571428-12.571428V481.142857q0-13.714286 7.714286-21.714286t22-8h53.714286q13.714286 0 21.714286 8t8 21.714286v131.428572q0 12.571429 12 12.571428h30.857142q12.571429 0 12.571429-12.571428V481.142857q0-13.714286 8-21.714286t21.714286-8h55.428571q13.714286 0 21.428572 8t7.714285 21.714286v131.428572q0 12.571429 12.571429 12.571428h31.428571q12 0 12-12.571428z m336.571429-54.857143V469.714286q0-30.285714-18.857143-48.857143t-49.142857-18.571429h-150.857143q-30.285714 0-49.142857 18.571429T592 469.714286v234.285714q0 12 12.571429 12h31.428571q12 0 12-12v-102.857143q17.714286 24 53.714286 24h109.142857q30.285714 0 49.142857-18.571428t18.857143-48.857143z m72-352v612.571428q0 54.857143-38.857143 93.714286t-93.714286 38.857143H205.714286q-54.857143 0-93.714286-38.857143T73.142857 818.285714V205.714286q0-54.857143 38.857143-93.714286t93.714286-38.857143h612.571428q54.857143 0 93.714286 38.857143t38.857143 93.714286z\"  ></path></symbol><symbol id=\"icon-meetup\" viewBox=\"0 0 1097 1024\"><path d=\"M762.285714 705.142857q-2.285714-13.714286-15.714285-19.428571t-28.285715-6-27.714285-7.142857-14.571429-21.714286q-2.857143-26.857143 18.857143-79.714286t42.857143-103.428571 18.285714-72.857143q-8-57.714286-66.857143-58.857143-25.714286-0.571429-42.857143 9.142857l-1.714285 1.142857-2.857143 1.428572-2.571429 1.142857-2.857143 1.142857-2.857143 0.285714-3.428571-0.857143-3.428571-2-3.714286-2.857142q-1.714286-1.142857-5.142857-4.857143t-5.142857-5.142857-4.857143-4.285715-5.428572-4.285714-5.428571-3.142857-6.285714-2.571429-6.571429-1.428571q-17.142857-2.857143-27.428571 1.714286t-25.714286 17.714285q-0.571429 0.571429-5.142857 4.857143t-7.142857 6.285714-8.571429 5.714286T500.571429 358.285714t-9.714286-1.714285q-30.857143-15.428571-48-22.857143-23.428571-10.285714-53.714286 2.857143t-43.428571 37.142857q-9.142857 16-23.428572 56.285714T297.428571 505.714286t-22.857142 76.571428-12.285715 41.714286q-12.571429 39.428571 10.571429 68t63.142857 26.285714q17.142857-1.142857 28.857143-8.571428t22-26.285715q4-7.428571 45.142857-114T476 458.285714q3.428571-6.285714 12.285714-10.285714t16.857143 0q15.428571 8.571429 12 30.285714-1.142857 10.285714-29.142857 79.714286T459.428571 633.714286q-3.428571 21.714286 11.142858 32.285714t34.571428 4 31.428572-28.285714q2.285714-4.571429 26-52.571429t46.571428-93.428571 26.285714-50.571429q11.428571-16.571429 23.428572-16 16.571429 0 14.285714 21.714286-1.142857 9.142857-37.428571 84.285714T595.428571 626.285714q-6.857143 30.285714 7.428572 58.857143t42.285714 42.285714q9.714286 5.142857 29.142857 8.857143t40.857143 4.571429 35.714286-8 11.428571-27.714286z m-543.428571 123.428572q1.714286 8.571429-2.857143 15.714285t-13.142857 8.857143q-8 1.714286-15.142857-2.857143t-8.857143-13.142857q-1.714286-8 2.857143-15.428571t12.571428-9.142857 15.428572 2.857142 9.142857 13.142858z m325.714286 150.285714q6.857143 9.714286 4.857142 21.428571T537.714286 1018.857143t-21.428572 4.571428-18.571428-12q-6.285714-9.714286-4.285715-21.428571T505.142857 971.428571t21.428572-4.571428 18 12zM101.142857 514.857143q-10.285714 15.428571-28.285714 18.857143T40 526.285714q-14.857143-10.285714-18.285714-28.571428t6.857143-33.142857q10.285714-15.428571 28.285714-18.857143t32.857143 6.857143q14.857143 10.857143 18.285714 28.857142T101.142857 514.857143z m737.142857 386.857143q10.857143 16 7.428572 35.142857t-19.428572 30-34.571428 7.428571-29.428572-19.428571-7.428571-34.857143 18.857143-30.285714q16-10.857143 34.571428-7.428572t30 19.428572z m64-345.142857q39.428571 64.571429 24.285715 139.714285T849.714286 814.857143q-51.428571 36-113.714286 34.285714-11.428571 45.714286-48.285714 72.571429t-82 25.428571-80-32.857143q-6.857143 5.142857-7.428572 5.714286-58.857143 40.571429-128.571428 27.714286T279.428571 875.428571q-28.571429-41.714286-30.285714-93.714285-47.428571-8-81.428571-40.285715t-46-73.142857-1.142857-86.857143T166.857143 502.285714q-20.571429-34.285714-21.714286-73.142857t14-71.428571 45.428572-56.285715T273.714286 272.571429q18.285714-48.571429 56.571428-84.571429t83.714286-52.285714 96-9.714286T601.142857 164q41.142857-12 80-10t73.428572 20.571429 59.714285 45.714285 38.571429 65.714286T862.857143 366.285714q29.714286 9.142857 49.714286 32.571429t26 50.857143-3.142858 56.857143-33.142857 50zM260 179.428571q8 11.428571 5.428571 25.428572T251.428571 226.857143q-10.857143 8-24.857142 5.428571T205.142857 218.285714q-8-11.428571-5.428571-25.428571T213.714286 170.857143q10.857143-8 24.857143-5.428572T260 179.428571zM350.857143 18.857143q2.285714 9.142857-2.857143 17.428571T333.142857 46.857143t-17.714286-3.142857T305.142857 28.571429q-1.714286-9.714286 3.714286-17.714286T323.428571 0.571429q9.714286-2.285714 17.714286 3.142857T350.857143 18.857143z m677.714286 541.714286q2.285714 11.428571-3.714286 21.142857t-17.428572 12q-10.857143 2.285714-20.571428-3.714286t-12-17.428571 3.714286-21.142858 17.428571-12.571428q11.428571-2.285714 20.857143 4.285714T1028.571429 560.571429zM649.142857 50.285714q9.142857 15.428571 4.857143 33.428572T633.714286 110.857143q-15.428571 9.142857-32.857143 4.857143T574.285714 96q-9.142857-16-4.857143-33.714286t19.714286-27.428571 33.142857-5.142857 26.857143 20.571428z m426.285714 374.857143q2.285714 8.571429-2.285714 15.714286t-13.142857 9.428571q-8.571429 1.714286-15.714286-3.142857T1035.428571 434.285714q-1.714286-8.571429 2.857143-16t13.142857-9.142857q8-1.714286 15.142858 2.857143t8.857142 13.142857z m-109.142857-137.714286q8.571429 12.571429 6 28t-15.142857 24.571429q-12.571429 8.571429-28 5.714286t-24-15.428572-5.714286-28 15.428572-24.571428 27.714286-6.285715 23.714285 16z\"  ></path></symbol><symbol id=\"icon-meh-o\" viewBox=\"0 0 1024 1024\"><path d=\"M731.428571 621.714286q0 14.857143-10.857142 25.714285t-25.714286 10.857143H329.142857q-14.857143 0-25.714286-10.857143t-10.857142-25.714285 10.857142-25.714286 25.714286-10.857143h365.714286q14.857143 0 25.714286 10.857143t10.857142 25.714286zM438.857143 365.714286q0 30.285714-21.428572 51.714285T365.714286 438.857143t-51.714286-21.428572T292.571429 365.714286t21.428571-51.714286T365.714286 292.571429t51.714285 21.428571T438.857143 365.714286z m292.571428 0q0 30.285714-21.428571 51.714285T658.285714 438.857143t-51.714285-21.428572T585.142857 365.714286t21.428572-51.714286T658.285714 292.571429t51.714286 21.428571T731.428571 365.714286z m146.285715 146.285714q0-74.285714-29.142857-142t-78-116.571429-116.571429-78T512 146.285714t-142 29.142857-116.571429 78-78 116.571429T146.285714 512t29.142857 142 78 116.571429 116.571429 78 142 29.142857 142-29.142857 116.571429-78 78-116.571429 29.142857-142z m73.142857 0q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-mercury\" viewBox=\"0 0 1024 1024\"><path d=\"M620.571429 180.571429q82.857143 41.142857 133.428571 120.285714T804.571429 475.428571q0 126.285714-84.285715 219.714286T512 802.285714v75.428572h54.857143q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143v54.857143q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857v-54.857143h-54.857143q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143v-75.428572q-124-13.714286-208.285714-107.142857T146.285714 475.428571q0-95.428571 50.571429-174.571428T330.285714 180.571429Q236 125.714286 200 24.571429q-3.428571-9.142857 2-16.857143T217.142857 0h39.428572q12 0 16.571428 11.428571 25.142857 60.571429 80 97.714286t122.285714 37.142857 122.285715-37.142857T677.714286 11.428571q4.571429-11.428571 21.142857-11.428571h34.857143q9.714286 0 15.142857 7.714286T750.857143 24.571429q-36 101.142857-130.285714 156z m-145.142858 550.857142q105.714286 0 180.857143-75.142857T731.428571 475.428571 656.285714 294.571429 475.428571 219.428571 294.571429 294.571429 219.428571 475.428571t75.142858 180.857143T475.428571 731.428571z\"  ></path></symbol><symbol id=\"icon-microphone\" viewBox=\"0 0 1024 1024\"><path d=\"M814.114614 402.285714v73.142857q0 126.285714-84.285714 219.714286T521.543186 802.285714v75.428572h146.285714q14.857143 0 25.714286 10.857143t10.857143 25.714285-10.857143 25.714286-25.714286 10.857143H302.114614q-14.857143 0-25.714285-10.857143t-10.857143-25.714286 10.857143-25.714285 25.714285-10.857143h146.285715v-75.428572q-124-13.714286-208.285715-107.142857T155.8289 475.428571V402.285714q0-14.857143 10.857143-25.714285t25.714286-10.857143 25.714285 10.857143 10.857143 25.714285v73.142857q0 105.714286 75.142857 180.857143T484.971757 731.428571t180.857143-75.142857T740.971757 475.428571V402.285714q0-14.857143 10.857143-25.714285t25.714286-10.857143 25.714285 10.857143 10.857143 25.714285zM667.8289 182.857143v292.571428q0 75.428571-53.714286 129.142858t-129.142857 53.714285-129.142857-53.714285-53.714286-129.142858V182.857143q0-75.428571 53.714286-129.142857T484.971757 0t129.142857 53.714286 53.714286 129.142857z\"  ></path></symbol><symbol id=\"icon-minus-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M768 548.571429V475.428571q0-14.857143-10.857143-25.714285t-25.714286-10.857143H292.571429q-14.857143 0-25.714286 10.857143t-10.857143 25.714285v73.142858q0 14.857143 10.857143 25.714285t25.714286 10.857143h438.857142q14.857143 0 25.714286-10.857143t10.857143-25.714285z m182.857143-36.571429q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-minus-square\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 548.571429V475.428571q0-14.857143-10.857143-25.714285t-25.714286-10.857143H256q-14.857143 0-25.714286 10.857143t-10.857143 25.714285v73.142858q0 14.857143 10.857143 25.714285t25.714286 10.857143h512q14.857143 0 25.714286-10.857143t10.857143-25.714285z m146.285714-310.857143v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-minus-square-o\" viewBox=\"0 0 1024 1024\"><path d=\"M768 457.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H274.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h475.428572q8 0 13.142857 5.142857t5.142857 13.142857z m73.142857 256V237.714286q0-37.714286-26.857143-64.571429t-64.571428-26.857143H274.285714q-37.714286 0-64.571428 26.857143t-26.857143 64.571429v475.428571q0 37.714286 26.857143 64.571429t64.571428 26.857143h475.428572q37.714286 0 64.571428-26.857143t26.857143-64.571429z m73.142857-475.428571v475.428571q0 68-48.285714 116.285714T749.714286 877.714286H274.285714q-68 0-116.285714-48.285715T109.714286 713.142857V237.714286q0-68 48.285714-116.285715T274.285714 73.142857h475.428572q68 0 116.285714 48.285714T914.285714 237.714286z\"  ></path></symbol><symbol id=\"icon-microchip\" viewBox=\"0 0 1024 1024\"><path d=\"M182.857143 731.428571v73.142858H118.857143q-9.142857 0-9.142857-9.142858v-9.142857H82.285714q-9.142857 0-9.142857-9.142857v-18.285714q0-9.142857 9.142857-9.142857h27.428572v-9.142857q0-9.142857 9.142857-9.142858h64z m0-146.285714v73.142857H118.857143q-9.142857 0-9.142857-9.142857v-9.142857H82.285714q-9.142857 0-9.142857-9.142857v-18.285714q0-9.142857 9.142857-9.142858h27.428572v-9.142857q0-9.142857 9.142857-9.142857h64z m0-146.285714v73.142857H118.857143q-9.142857 0-9.142857-9.142857v-9.142857H82.285714q-9.142857 0-9.142857-9.142857v-18.285715q0-9.142857 9.142857-9.142857h27.428572v-9.142857q0-9.142857 9.142857-9.142857h64z m0-146.285714v73.142857H118.857143q-9.142857 0-9.142857-9.142857v-9.142858H82.285714q-9.142857 0-9.142857-9.142857v-18.285714q0-9.142857 9.142857-9.142857h27.428572v-9.142857q0-9.142857 9.142857-9.142857h64z m0-146.285715v73.142857H118.857143q-9.142857 0-9.142857-9.142857v-9.142857H82.285714q-9.142857 0-9.142857-9.142857v-18.285714q0-9.142857 9.142857-9.142857h27.428572v-9.142858q0-9.142857 9.142857-9.142857h64zM804.571429 54.857143v841.142857q0 22.857143-16 38.857143t-38.857143 16H274.285714q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143t38.857143-16h475.428572q22.857143 0 38.857143 16t16 38.857143z m146.285714 704v18.285714q0 9.142857-9.142857 9.142857h-27.428572v9.142857q0 9.142857-9.142857 9.142858h-64v-73.142858h64q9.142857 0 9.142857 9.142858v9.142857h27.428572q9.142857 0 9.142857 9.142857z m0-146.285714v18.285714q0 9.142857-9.142857 9.142857h-27.428572v9.142857q0 9.142857-9.142857 9.142857h-64v-73.142857h64q9.142857 0 9.142857 9.142857v9.142857h27.428572q9.142857 0 9.142857 9.142858z m0-146.285715v18.285715q0 9.142857-9.142857 9.142857h-27.428572v9.142857q0 9.142857-9.142857 9.142857h-64V438.857143h64q9.142857 0 9.142857 9.142857v9.142857h27.428572q9.142857 0 9.142857 9.142857z m0-146.285714v18.285714q0 9.142857-9.142857 9.142857h-27.428572v9.142858q0 9.142857-9.142857 9.142857h-64V292.571429h64q9.142857 0 9.142857 9.142857v9.142857h27.428572q9.142857 0 9.142857 9.142857z m0-146.285714v18.285714q0 9.142857-9.142857 9.142857h-27.428572v9.142857q0 9.142857-9.142857 9.142857h-64V146.285714h64q9.142857 0 9.142857 9.142857v9.142858h27.428572q9.142857 0 9.142857 9.142857z\"  ></path></symbol><symbol id=\"icon-microphone-slash\" viewBox=\"0 0 1024 1024\"><path d=\"M264.571429 540l-57.714286 57.714286q-24-58.857143-24-122.285715V402.285714q0-14.857143 10.857143-25.714285t25.714285-10.857143 25.714286 10.857143 10.857143 25.714285v73.142857q0 30.285714 8.571429 64.571429z m636.571428-344l-206.285714 206.285714v73.142857q0 75.428571-53.714286 129.142858t-129.142857 53.714285q-31.428571 0-62.285714-10.857143l-54.857143 54.857143q55.428571 29.142857 117.142857 29.142857 105.714286 0 180.857143-75.142857T768 475.428571V402.285714q0-14.857143 10.857143-25.714285t25.714286-10.857143 25.714285 10.857143 10.857143 25.714285v73.142857q0 126.285714-84.285714 219.714286T548.571429 802.285714v75.428572h146.285714q14.857143 0 25.714286 10.857143t10.857142 25.714285-10.857142 25.714286-25.714286 10.857143H329.142857q-14.857143 0-25.714286-10.857143t-10.857142-25.714286 10.857142-25.714285 25.714286-10.857143h146.285714v-75.428572q-71.428571-7.428571-134.285714-46.285714l-145.142857 145.142857q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-46.857143-46.857143q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857L828 122.857143q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l46.857143 46.857143q5.714286 5.714286 5.714286 13.142857t-5.714286 13.142857z m-217.142857-75.428571L329.142857 475.428571V182.857143q0-75.428571 53.714286-129.142857T512 0q58.285714 0 105.428571 33.714286T684 120.571429z\"  ></path></symbol><symbol id=\"icon-minus\" viewBox=\"0 0 1024 1024\"><path d=\"M914.285714 420.571429v109.714285q0 22.857143-16 38.857143t-38.857143 16H164.571429q-22.857143 0-38.857143-16T109.714286 530.285714V420.571429q0-22.857143 16-38.857143t38.857143-16h694.857142q22.857143 0 38.857143 16t16 38.857143z\"  ></path></symbol><symbol id=\"icon-mixcloud\" viewBox=\"0 0 1316 1024\"><path d=\"M928.921005 620.033595q0-33.316924-19.199583-60.139871t-49.128345-38.681513q-3.952855 25.411213-12.987953 51.951813-3.952855 13.552647-15.529075 21.458358t-25.128866 7.905711q-6.776323 0-13.552647-1.694081-17.505502-5.646936-25.411213-21.740705t-2.258774-33.034576q12.987953-40.093247 12.987953-80.751188 0-69.457315-34.446311-128.467799T650.52705 243.38295t-128.750145-34.446311q-75.668945 0-139.479324 41.222635T287.993746 359.709836q60.986911 15.811421 106.162401 59.857524 12.42326 12.987953 12.423259 31.058149t-12.423259 30.493455-30.493456 12.42326-31.058149-12.42326q-42.352021-42.352021-101.644851-42.352021-59.857524 0-102.209546 42.069674T86.398124 582.763816t42.352021 101.927198 102.209546 42.069675h590.669526q44.610796 0 75.951292-31.340496T928.921005 620.033595z m86.398124 0q0 80.186494-56.751709 136.655856T821.629217 813.158813H230.959691q-95.433222 0-163.196457-67.480888T0 582.763816q0-86.398124 56.469362-150.773197t140.608711-76.798332q35.011004-103.903626 124.79729-168.278699t199.901542-64.375072q132.703001 0 230.677344 89.503938T863.416545 431.990619q65.50446 14.11734 108.703522 66.916194T1015.319129 620.033595z m141.173405 0q0 98.821383-54.775281 180.137265-12.987953 18.634889-36.140392 18.634889-13.552647 0-24.281826-7.341017-14.682034-9.599792-18.070196-27.387641t6.776324-32.469883q40.093247-58.728136 40.093247-131.573613t-40.093247-131.573614q-10.164485-14.682034-6.776324-32.187536t18.070196-27.669987 32.469883-6.493977T1101.717253 440.461024q54.775281 80.186494 54.775281 179.572571z m144.561566 0q0 137.785243-75.668945 250.159273-12.987953 19.199583-36.140391 19.199583-12.987953 0-23.717132-7.341017-14.682034-10.164485-18.352543-27.669987t6.493977-32.187536q60.986911-92.609754 60.986911-202.160316 0-110.115256-60.986911-201.595623-10.164485-14.682034-6.493977-32.469883T1165.527632 358.580449q14.682034-10.164485 32.187536-6.776324t27.669987 18.63489q75.668945 111.809337 75.668945 249.59458z\"  ></path></symbol><symbol id=\"icon-mobile\" viewBox=\"0 0 1024 1024\"><path d=\"M475.17088 804.571429q0-18.857143-13.428571-32.285715T429.456594 758.857143t-32.285714 13.428571T383.742309 804.571429t13.428571 32.285714T429.456594 850.285714t32.285715-13.428571T475.17088 804.571429z m118.857143-91.428572V310.857143q0-7.428571-5.428572-12.857143T575.742309 292.571429H283.17088q-7.428571 0-12.857143 5.428571T264.885166 310.857143v402.285714q0 7.428571 5.428571 12.857143t12.857143 5.428571h292.571429q7.428571 0 12.857142-5.428571t5.428572-12.857143zM484.313737 228.571429q0-9.142857-9.142857-9.142858H383.742309q-9.142857 0-9.142858 9.142858t9.142858 9.142857h91.428571q9.142857 0 9.142857-9.142857z m164.571429-9.142858v585.142858q0 29.714286-21.714286 51.428571t-51.428571 21.714286H283.17088q-29.714286 0-51.428571-21.714286t-21.714286-51.428571V219.428571q0-29.714286 21.714286-51.428571t51.428571-21.714286h292.571429q29.714286 0 51.428571 21.714286t21.714286 51.428571z\"  ></path></symbol><symbol id=\"icon-modx\" viewBox=\"0 0 1024 1024\"><path d=\"M815.428571 405.142857L464.571429 184.571429l52.571428-86.285715h488.571429zM231.428571 556.571429L126.285714 490.285714V0l676 424.571429z m582.285715-77.142858l84 54.285715v490.285714l-304-191.428571z m-21.142857-12l-285.714286 458.285715H18.285714l203.428572-326.285715z\"  ></path></symbol><symbol id=\"icon-money\" viewBox=\"0 0 1097 1024\"><path d=\"M438.857143 658.285714h219.428571v-54.857143h-73.142857V347.428571H520L435.428571 425.714286l44 45.714285q24-21.142857 31.428572-32.571428h1.142857v164.571428H438.857143v54.857143z m292.571428-146.285714q0 40-12 81.142857t-34 76.571429-58 57.714285-78.857142 22.285715-78.857143-22.285715-58-57.714285-34-76.571429-12-81.142857 12-81.142857 34-76.571429T469.714286 296.571429t78.857143-22.285715 78.857142 22.285715 58 57.714285 34 76.571429 12 81.142857z m292.571429 146.285714V365.714286q-60.571429 0-103.428571-42.857143t-42.857143-103.428572H219.428571q0 60.571429-42.857142 103.428572t-103.428572 42.857143v292.571428q60.571429 0 103.428572 42.857143t42.857142 103.428572h658.285715q0-60.571429 42.857143-103.428572t103.428571-42.857143z m73.142857-475.428571v658.285714q0 14.857143-10.857143 25.714286t-25.714285 10.857143H36.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V182.857143q0-14.857143 10.857143-25.714286t25.714286-10.857143h1024q14.857143 0 25.714285 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-moon-o\" viewBox=\"0 0 1024 1024\"><path d=\"M794.285714 744.571429q-30.857143 5.142857-62.857143 5.142857-104 0-192.571428-51.428572T398.857143 558.285714t-51.428572-192.571428q0-109.714286 59.428572-204-114.857143 34.285714-187.714286 130.857143T146.285714 512q0 74.285714 29.142857 142t78 116.571429 116.571429 78 142 29.142857q82.285714 0 156.285714-35.142857T794.285714 744.571429z m116-48.571429q-53.714286 116-162 185.428571T512 950.857143q-89.142857 0-170.285714-34.857143t-140-93.714286-93.714286-140T73.142857 512q0-87.428571 32.857143-167.142857t89.142857-138T329.714286 112.857143 495.428571 73.714286q25.142857-1.142857 34.857143 22.285714 10.285714 23.428571-8.571428 41.142857-49.142857 44.571429-75.142857 103.714286T420.571429 365.714286q0 84.571429 41.714285 156t113.142857 113.142857 156 41.714286q67.428571 0 130.285715-29.142858 23.428571-10.285714 41.142857 7.428572 8 8 10 19.428571t-2.571429 21.714286z\"  ></path></symbol><symbol id=\"icon-motorcycle\" viewBox=\"0 0 1316 1024\"><path d=\"M1314.857143 592q6.857143 58.857143-12.571429 113.428571t-56.571428 93.428572-90.571429 60.571428-112.285714 17.714286q-92-6.285714-159.714286-71.428571T806.285714 649.142857q-6.857143-63.428571 15.714286-120.285714T889.714286 431.428571l-40.571429-61.142857q-54.857143 45.714286-86.285714 110.857143t-31.428572 139.428572q0 15.428571-10.571428 26.571428T694.857143 658.285714H509.142857q-13.142857 93.714286-85.142857 156.571429t-168 62.857143q-105.714286 0-180.857143-75.142857T0 621.714286t75.142857-180.857143T256 365.714286q43.428571 0 86.857143 15.428571l13.714286-25.714286Q286.285714 292.571429 182.857143 292.571429h-36.571429q-14.857143 0-25.714285-10.857143t-10.857143-25.714286 10.857143-25.714286 25.714285-10.857143h73.142857q44.571429 0 82.857143 7.714286T368.857143 249.142857t40.857143 22.571429 29.142857 20.857143h358.285714l-48.571428-73.142858h-126.857143q-17.142857 0-28-12.857142t-8-30q2.285714-13.142857 13.142857-21.714286t24.571428-8.571429h144.571429q18.857143 0 30.285714 16l40 60 65.142857-65.142857q10.857143-10.857143 26.285715-10.857143h57.714285q14.857143 0 25.714286 10.857143t10.857143 25.714286v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143h-102.285714l65.714286 98.285714q74.857143-36 157.142857-20.571429 81.714286 14.857143 139.428571 76.857143t67.428572 144.857143zM256 804.571429q65.714286 0 116-41.428572T435.428571 658.285714H256q-20 0-31.428571-17.714285-10.285714-18.285714-0.571429-36l84-158.285715q-26.857143-7.428571-52-7.428571-75.428571 0-129.142857 53.714286t-53.714286 129.142857 53.714286 129.142857 129.142857 53.714286z m804.571429 0q75.428571 0 129.142857-53.714286t53.714285-129.142857-53.714285-129.142857-129.142857-53.714286q-34.285714 0-69.142858 13.714286l99.428572 148.571428q8.571429 13.142857 5.714286 28t-15.428572 22.857143q-8.571429 6.285714-20.571428 6.285714-20 0-30.285715-16.571428l-99.428571-148.571429q-53.142857 54.285714-53.142857 128.571429 0 75.428571 53.714285 129.142857t129.142858 53.714286z\"  ></path></symbol><symbol id=\"icon-mouse-pointer\" viewBox=\"0 0 1024 1024\"><path d=\"M793.714286 596q17.714286 17.142857 8 39.428571-9.714286 22.857143-33.714286 22.857143H549.714286l114.857143 272q5.714286 14.285714 0 28t-19.428572 20l-101.142857 42.857143q-14.285714 5.714286-28 0t-20-19.428571l-109.142857-258.285715-178.285714 178.285715q-10.857143 10.857143-25.714286 10.857143-6.857143 0-13.714286-2.857143-22.857143-9.714286-22.857143-33.714286V36.571429Q146.285714 12.571429 169.142857 2.857143q6.857143-2.857143 13.714286-2.857143 15.428571 0 25.714286 10.857143z\"  ></path></symbol><symbol id=\"icon-mortar-board\" viewBox=\"0 0 1316 1024\"><path d=\"M1013.714286 477.714286l10.285714 180.571428q2.285714 39.428571-46.857143 73.142857t-134.285714 53.428572-184.571429 19.714286-184.571428-19.714286-134.285715-53.428572-46.857142-73.142857l10.285714-180.571428 328 103.428571q12.571429 4 27.428571 4t27.428572-4z m302.857143-185.142857q0 13.142857-12.571429 17.714285L664 511.428571q-2.285714 0.571429-5.714286 0.571429t-5.714285-0.571429L280 393.714286q-24.571429 19.428571-40.571429 63.714285T220 559.428571q36 20.571429 36 62.285715 0 39.428571-33.142857 61.142857l33.142857 247.428571q1.142857 8-4.571429 14.285715-5.142857 6.285714-13.714285 6.285714H128q-8.571429 0-13.714286-6.285714-5.714286-6.285714-4.571428-14.285715l33.142857-247.428571q-33.142857-21.714286-33.142857-61.142857 0-41.714286 37.142857-63.428572 6.285714-118.285714 56-188.571428L12.571429 310.285714q-12.571429-4.571429-12.571429-17.714285t12.571429-17.714286l640-201.142857q2.285714-0.571429 5.714285-0.571429t5.714286 0.571429l640 201.142857q12.571429 4.571429 12.571429 17.714286z\"  ></path></symbol><symbol id=\"icon-navicon\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 768v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-73.142857q0-14.857143 10.857143-25.714286t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z m0-292.571429v73.142858q0 14.857143-10.857143 25.714285t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143T73.142857 548.571429V475.428571q0-14.857143 10.857143-25.714285t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714285z m0-292.571428v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143T73.142857 256V182.857143q0-14.857143 10.857143-25.714286t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-neuter\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 329.142857q0 126.285714-84.285715 219.714286T512 656v349.714286q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857v-349.714286q-124-13.714286-208.285714-107.142857T146.285714 329.142857q0-66.857143 26-127.714286t70.285715-105.142857 105.142857-70.285714T475.428571 0t127.714286 26 105.142857 70.285714 70.285715 105.142857T804.571429 329.142857z m-329.142858 256q105.714286 0 180.857143-75.142857T731.428571 329.142857 656.285714 148.285714 475.428571 73.142857 294.571429 148.285714 219.428571 329.142857t75.142858 180.857143T475.428571 585.142857z\"  ></path></symbol><symbol id=\"icon-music\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 128v640q0 28.571429-19.428572 50.857143t-49.142857 34.571428-59.142857 18.285715-55.142857 6-55.142857-6-59.142857-18.285715-49.142857-34.571428-19.428572-50.857143 19.428572-50.857143 49.142857-34.571428 59.142857-18.285715 55.142857-6q60 0 109.714286 22.285715V373.714286L438.857143 509.142857v405.142857q0 28.571429-19.428572 50.857143t-49.142857 34.571429-59.142857 18.285714T256 1024t-55.142857-6-59.142857-18.285714-49.142857-34.571429-19.428572-50.857143 19.428572-50.857143 49.142857-34.571428 59.142857-18.285714T256 804.571429q60 0 109.714286 22.285714V274.285714q0-17.714286 10.857143-32.285714t28-20.285714l475.428571-146.285715q6.857143-2.285714 16-2.285714 22.857143 0 38.857143 16t16 38.857143z\"  ></path></symbol><symbol id=\"icon-object-group\" viewBox=\"0 0 1170 1024\"><path d=\"M1170.285714 219.428571h-73.142857v585.142858h73.142857v219.428571h-219.428571v-73.142857H219.428571v73.142857H0v-219.428571h73.142857V219.428571H0V0h219.428571v73.142857h731.428572V0h219.428571v219.428571z m-146.285714-146.285714v73.142857h73.142857V73.142857h-73.142857z m-950.857143 0v73.142857h73.142857V73.142857H73.142857z m73.142857 877.714286v-73.142857H73.142857v73.142857h73.142857z m804.571429-73.142857v-73.142857h73.142857V219.428571h-73.142857V146.285714H219.428571v73.142857H146.285714v585.142858h73.142857v73.142857h731.428572z m146.285714 73.142857v-73.142857h-73.142857v73.142857h73.142857zM731.428571 365.714286h219.428572v438.857143H438.857143v-146.285715H219.428571V219.428571h512v146.285715z m-438.857142 219.428571h365.714285V292.571429H292.571429v292.571428z m585.142857 146.285714V438.857143h-146.285715v219.428571H512v73.142857h365.714286z\"  ></path></symbol><symbol id=\"icon-newspaper-o\" viewBox=\"0 0 1170 1024\"><path d=\"M585.142857 292.571429H365.714286v219.428571h219.428571V292.571429z m73.142857 365.714285v73.142857H292.571429v-73.142857h365.714285z m0-438.857143v365.714286H292.571429V219.428571h365.714285z m365.714286 438.857143v73.142857h-292.571429v-73.142857h292.571429z m0-146.285714v73.142857h-292.571429V512h292.571429z m0-146.285714v73.142857h-292.571429V365.714286h292.571429z m0-146.285715v73.142858h-292.571429V219.428571h292.571429zM146.285714 768V219.428571H73.142857v548.571429q0 14.857143 10.857143 25.714286t25.714286 10.857143 25.714285-10.857143 10.857143-25.714286z m950.857143 0V146.285714H219.428571v621.714286q0 18.857143-6.285714 36.571429h847.428572q14.857143 0 25.714285-10.857143t10.857143-25.714286z m73.142857-694.857143v694.857143q0 45.714286-32 77.714286t-77.714285 32H109.714286q-45.714286 0-77.714286-32T0 768V146.285714h146.285714V73.142857h1024z\"  ></path></symbol><symbol id=\"icon-object-ungroup\" viewBox=\"0 0 1316 1024\"><path d=\"M1316.571429 438.857143h-73.142858v365.714286h73.142858v219.428571h-219.428572v-73.142857h-512v73.142857H365.714286v-219.428571h73.142857v-73.142858H219.428571v73.142858H0v-219.428572h73.142857V219.428571H0V0h219.428571v73.142857h512V0h219.428572v219.428571h-73.142857v73.142858h219.428571V219.428571h219.428572v219.428572z m-146.285715-146.285714v73.142857h73.142857V292.571429h-73.142857z m-365.714285-219.428572v73.142857h73.142857V73.142857h-73.142857z m-731.428572 0v73.142857h73.142857V73.142857H73.142857z m73.142857 658.285714v-73.142857H73.142857v73.142857h73.142857z m731.428572-73.142857h-73.142857v73.142857h73.142857v-73.142857z m-658.285715 0h512v-73.142857h73.142858V219.428571h-73.142858V146.285714H219.428571v73.142857H146.285714v365.714286h73.142857v73.142857z m292.571429 292.571429v-73.142857H438.857143v73.142857h73.142857z m731.428571 0v-73.142857h-73.142857v73.142857h73.142857z m-73.142857-146.285714V438.857143h-73.142857V365.714286h-219.428571v219.428571h73.142857v219.428572h-219.428572v-73.142858H512v73.142858h73.142857v73.142857h512v-73.142857h73.142857z\"  ></path></symbol><symbol id=\"icon-odnoklassniki-square\" viewBox=\"0 0 1024 1024\"><path d=\"M602.857143 331.428571q0 37.714286-26.571429 64.285715T512 422.285714t-64.285714-26.571428T421.142857 331.428571t26.571429-64.285714T512 240.571429t64.285714 26.571428T602.857143 331.428571z m122.285714 207.428572q-5.714286-11.428571-16-18.285714t-27.142857-5.428572T647.428571 530.857143q-5.714286 4.571429-16.571428 11.428571t-46.285714 18.285715-72.571429 11.428571-70.857143-10.285714-49.142857-20.571429l-15.428571-10.285714q-17.714286-14.285714-34.571429-15.714286T314.857143 520.571429t-16 18.285714q-12.571429 25.714286-1.142857 42.571428t49.714285 42q47.428571 30.285714 129.142858 38.285715l-29.142858 29.714285q-81.142857 81.142857-109.142857 108.571429-12.571429 12.571429-12.571428 30t12.571428 30l5.142857 5.142857q12.571429 12.571429 30 12.571429t30-12.571429l109.142858-109.142857q65.142857 65.714286 109.142857 109.142857 12.571429 12.571429 30 12.571429t30-12.571429l5.142857-5.142857q12.571429-12.571429 12.571428-30t-12.571428-30l-109.142857-108.571429-29.714286-29.714285q80.571429-8 128.571429-38.285715 38.285714-25.142857 49.714285-42t-1.142857-42.571428z m-28-207.428572q0-76.571429-54.285714-130.857142t-130.857143-54.285715-130.857143 54.285715-54.285714 130.857142 54.285714 130.857143 130.857143 54.285715 130.857143-54.285715 54.285714-130.857143z m253.714286-93.714285v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-odnoklassniki\" viewBox=\"0 0 1024 1024\"><path d=\"M489.441203 518.285714q-107.428571 0-183.428572-76T230.012631 259.428571q0-107.428571 76-183.428571T489.441203 0t183.428571 76 76 183.428571q0 106.857143-76 182.857143T489.441203 518.285714z m0-386.857143q-52.571429 0-90 37.428572T362.012631 259.428571q0 52.571429 37.428572 90T489.441203 386.857143t90-37.428572T616.869774 259.428571q0-53.142857-37.428571-90.571428T489.441203 131.428571z m298.857143 418.285715q7.428571 15.428571 8.571428 28.285714t-2.571428 23.142857-15.142857 22-24.285715 21.142857-35.142857 23.714286q-65.714286 41.714286-180 53.714286l41.714286 41.142857 152.571428 152.571428q17.142857 17.714286 17.142858 42.285715t-17.142858 41.714285l-6.857142 7.428572q-17.714286 17.142857-42.285715 17.142857t-42.285714-17.142857q-38.285714-38.857143-152.571429-153.142857l-152.571428 153.142857q-17.714286 17.142857-42.285714 17.142857t-41.714286-17.142857l-6.857143-7.428572q-17.714286-17.142857-17.714286-41.714285t17.714286-42.285715l152.571429-152.571428 41.142857-41.142857q-116-12-181.142857-53.714286-22.285714-14.285714-35.142858-23.714286t-24.285714-21.142857-15.142857-22-2.571429-23.142857 8.571429-28.285714q5.714286-11.428571 16-20t24-12.571429 32 1.142857 37.142857 20q2.857143 2.285714 8.571429 6.285715t24.571428 14 39.428572 17.428571 52.571428 13.714286 64.571429 6.285714q52 0 99.428571-14.571429T657.441203 552.571429l21.714286-14.285715q18.857143-14.857143 37.142857-20t32-1.142857 24 12.571429 16 20z\"  ></path></symbol><symbol id=\"icon-opencart\" viewBox=\"0 0 1316 1024\"><path d=\"M870.857143 892q0 38.857143-27.428572 66.285714t-66.285714 27.428572-66.571428-27.428572-27.714286-66.285714 27.714286-66.571429T777.142857 797.714286t66.285714 27.714285 27.428572 66.571429z m-428 0q0 38.857143-27.714286 66.285714T348.571429 985.714286t-66.285715-27.428572-27.428571-66.285714 27.428571-66.571429 66.285715-27.714285 66.571428 27.714285T442.857143 892zM0 38.285714q32.571429 34.285714 63.142857 59.714286t69.142857 46.857143 77.714286 36 94.857143 26 114.285714 18 142.857143 10.571428 173.714286 5.428572T948.571429 242.285714q79.428571 0 139.714285 2.857143t103.428572 9.428572 70.857143 15.714285 40.571428 22.571429 13.714286 29.428571-11.142857 36.571429-32.285715 43.714286-51.142857 52T1156 514.285714t-79.428571 68q-105.714286 89.714286-163.428572 141.142857 16.571429-29.142857 43.714286-62.285714t53.714286-60.285714T1064.571429 544.571429t47.428571-52.285715 30.857143-46 7.428571-40-26-31.714285-66.571428-23.428572-116.571429-13.428571-173.714286-2.857143q-96 1.142857-179.428571-3.428572t-146.285714-13.142857-116.857143-23.428571T233.714286 265.428571 163.714286 229.714286 111.428571 191.714286 72.571429 150.857143t-28.857143-39.714286-22.857143-38.857143T0 38.285714z\"  ></path></symbol><symbol id=\"icon-openid\" viewBox=\"0 0 1024 1024\"><path d=\"M620.571429 0v877.714286l-155.428572 73.142857q-130.285714-11.428571-236.571428-58.285714t-167.428572-119.142858T0 617.714286q0-80 57.428571-150.571429t157.142858-117.428571T438.285714 288v98.285714q-124 21.714286-203.714285 85.714286T154.857143 617.714286q0 86.857143 88.285714 152.571428T465.142857 853.142857V76z m382.285714 332.571429l21.142857 222.857142-300-65.142857 84-47.428571q-68-40-160-56.571429V288q158.285714 18.857143 274.857143 89.714286z\"  ></path></symbol><symbol id=\"icon-opera\" viewBox=\"0 0 1024 1024\"><path d=\"M853.142857 130.285714q-94.285714-62.857143-205.142857-62.857143-88.571429 0-167.428571 41.714286T343.428571 223.428571q-42.857143 53.142857-68.285714 124.571429T247.428571 500v24q2.285714 80.571429 27.714286 152T343.428571 800.571429q58.285714 72.571429 137.142858 114.285714t167.428571 41.714286q110.857143 0 205.142857-62.857143-69.142857 61.714286-156.857143 96T512 1024q-16.571429 0-24.571429-0.571429-100-4.571429-190.285714-46.857142t-155.428571-110.285715-103.428572-160.571428T0 512q0-104 40.571429-198.857143t109.142857-163.428571T313.142857 40.571429 512 0h1.714286q96 0.571429 183.142857 34.571429T853.142857 130.285714z m170.857143 381.714286q0 109.714286-44 207.142857T858.285714 888.571429q-59.428571 36-126.857143 36-78.285714 0-145.714285-48 88-32 144.857143-133.142858t56.857142-231.428571q0-129.714286-56.571428-230.857143t-144.571429-133.714286q68-47.428571 145.142857-47.428571 68 0 129.142858 37.142857 77.142857 71.428571 120.285714 168.571429t43.142857 206.285714z\"  ></path></symbol><symbol id=\"icon-paper-plane-o\" viewBox=\"0 0 1024 1024\"><path d=\"M1008.001709 6.285714q18.857143 13.714286 15.428571 36.571429l-146.285714 877.714286q-2.857143 16.571429-18.285715 25.714285-8 4.571429-17.714285 4.571429-6.285714 0-13.714286-2.857143l-301.142857-122.857143-170.285714 186.857143q-10.285714 12-26.857143 12-8 0-13.142857-2.285714-10.857143-4-17.142858-13.428572t-6.285714-20.857143v-258.285714L22.858851 618.857143q-21.142857-8-22.857142-31.428572-1.714286-22.285714 18.285714-33.714285L969.144566 5.142857q20-12 38.857143 1.142857z m-195.428572 856.571429l126.285714-756-819.428571 472.571428 192 78.285715 493.142857-365.142857-273.142857 455.428571z\"  ></path></symbol><symbol id=\"icon-pagelines\" viewBox=\"0 0 1024 1024\"><path d=\"M910.857143 630.285714q-18.285714 45.714286-43.428572 78.857143t-52 50.571429-56.571428 26.571428-58 8.285715-55.142857-4.857143-49.428572-12.571429-39.714285-15.714286-26.285715-12.857142l-9.714285-5.714286q-64.571429 130.285714-165.428572 205.428571T135.428571 1024q-10.857143 0-18.285714-7.428571t-7.428571-18.285715 7.428571-18 18.285714-7.142857q98.857143-0.571429 184.285715-61.428571T463.428571 743.428571q-20.571429 8-41.142857 13.142858t-47.428571 7.428571-52-1.428571-53.142857-16.285715-52.571429-33.714285-48.285714-57.142858T126.285714 572q65.142857-26.857143 122.285715-32.571429t95.714285 4.285715T415.428571 576t50.571429 44 32.285714 46.857143q30.285714-74.857143 45.142857-166.285714-4 0.571429-10.285714 1.428571t-26.571428 1.428571-39.714286-0.285714-46.571429-5.714286-50.571428-13.142857-48-24.285714-42.857143-37.142857-31.142857-54T231.428571 296q40-16 76.285715-20.857143t64.285714 0.571429 52.571429 17.142857 42 28.571428 32 34.857143 24 36 15.714285 32 9.142857 22.571429l2.285715 9.142857q6.857143-69.714286 6.857143-111.428571-4.571429-3.428571-12.285715-9.142858t-28-25.428571T480 269.142857t-30.857143-53.142857-18.857143-64.285714 6.857143-72.571429T477.142857 0q41.714286 14.285714 72.857143 35.142857T598.285714 78.857143t27.428572 48.571428 11.714285 50.857143-0.285714 48.857143-7.428571 43.714286-10.857143 35.428571-9.714286 24l-4 8.571429q0.571429 2.285714 0.571429 28.571428t-0.571429 41.142858q1.714286-4 5.714286-10.571429t17.428571-24.571429 28.857143-33.142857 40.571429-31.714285 52.285714-25.428572 64-8.285714 75.714286 13.714286q-1.142857 44.571429-12.285715 80.857142t-28.571428 59.714286-39.714286 40.857143-46.571428 26-48.285715 13.714286-45.714285 5.428571-38.571429-0.571428T603.428571 512l-9.714285-1.714286q-13.142857 84-41.714286 161.714286 3.428571-4 10.285714-10.571429t28.285715-23.428571T634.857143 608t56.857143-24 67.142857-11.428571 73.714286 13.428571 78.285714 44.285714z\"  ></path></symbol><symbol id=\"icon-outdent\" viewBox=\"0 0 1024 1024\"><path d=\"M219.428571 310.857143v329.142857q0 7.428571-5.428571 12.857143T201.142857 658.285714q-8 0-13.142857-5.142857L23.428571 488.571429q-5.142857-5.142857-5.142857-13.142858t5.142857-13.142857l164.571429-164.571428q5.142857-5.142857 13.142857-5.142857 7.428571 0 12.857143 5.428571T219.428571 310.857143z m804.571429 438.857143v109.714285q0 7.428571-5.428571 12.857143t-12.857143 5.428572H18.285714q-7.428571 0-12.857143-5.428572T0 859.428571v-109.714285q0-7.428571 5.428571-12.857143T18.285714 731.428571h987.428572q7.428571 0 12.857143 5.428572t5.428571 12.857143z m0-219.428572v109.714286q0 7.428571-5.428571 12.857143t-12.857143 5.428571H384q-7.428571 0-12.857143-5.428571T365.714286 640V530.285714q0-7.428571 5.428571-12.857143T384 512h621.714286q7.428571 0 12.857143 5.428571t5.428571 12.857143z m0-219.428571v109.714286q0 7.428571-5.428571 12.857142T1005.714286 438.857143H384q-7.428571 0-12.857143-5.428572T365.714286 420.571429V310.857143q0-7.428571 5.428571-12.857143T384 292.571429h621.714286q7.428571 0 12.857143 5.428571t5.428571 12.857143z m0-219.428572v109.714286q0 7.428571-5.428571 12.857143T1005.714286 219.428571H18.285714q-7.428571 0-12.857143-5.428571T0 201.142857V91.428571q0-7.428571 5.428571-12.857142T18.285714 73.142857h987.428572q7.428571 0 12.857143 5.428572t5.428571 12.857142z\"  ></path></symbol><symbol id=\"icon-paper-plane\" viewBox=\"0 0 1024 1024\"><path d=\"M1008.00076 6.285714q18.857143 13.714286 15.428571 36.571429l-146.285714 877.714286q-2.857143 16.571429-18.285714 25.714285-8 4.571429-17.714286 4.571429-6.285714 0-13.714286-2.857143l-258.857142-105.714286-138.285715 168.571429q-10.285714 13.142857-28 13.142857-7.428571 0-12.571428-2.285714-10.857143-4-17.428572-13.428572T365.715046 987.428571v-199.428571l493.714285-605.142857-610.857142 528.571428-225.714286-92.571428q-21.142857-8-22.857143-31.428572-1.142857-22.857143 18.285714-33.714285L969.143617 5.142857q8.571429-5.142857 18.285714-5.142857 11.428571 0 20.571429 6.285714z\"  ></path></symbol><symbol id=\"icon-paint-brush\" viewBox=\"0 0 1024 1024\"><path d=\"M922.857143 0q40 0 70 26.571429T1022.857143 93.142857q0 36-25.714286 86.285714-189.714286 359.428571-265.714286 429.714286-55.428571 52-124.571428 52-72 0-123.714286-52.857143T431.428571 482.857143q0-73.142857 52.571429-121.142857l364.571429-330.857143q33.714286-30.857143 74.285714-30.857143zM403.428571 590.857143q22.285714 43.428571 60.857143 74.285714t86 43.428572l0.571429 40.571428q2.285714 121.714286-74 198.285714T277.714286 1024q-70.285714 0-124.571429-26.571429T66 924.571429 16.571429 820 0 694.285714q4 2.857143 23.428571 17.142857t35.428572 25.428572 33.714286 20.857143 26.285714 9.714285q23.428571 0 31.428571-21.142857 14.285714-37.714286 32.857143-64.285714t39.714286-43.428571 50.285714-27.142858 58.857143-14.571428 71.428571-6z\"  ></path></symbol><symbol id=\"icon-paragraph\" viewBox=\"0 0 1024 1024\"><path d=\"M859.0625 108v41.714286q0 16.571429-10.571429 34.857143t-24.285714 18.285714q-28.571429 0-30.857143 0.571428-14.857143 3.428571-18.285714 17.714286-1.714286 6.285714-1.714286 36.571429v658.285714q0 14.285714-10.285714 24.571429t-24.571429 10.285714H676.776786q-14.285714 0-24.571429-10.285714t-10.285714-24.571429V220H560.205357v696q0 14.285714-10 24.571429t-24.857143 10.285714H463.633929q-14.857143 0-24.857143-10.285714t-10-24.571429v-283.428571q-84-6.857143-140-33.714286-72-33.142857-109.714286-102.285714-36.571429-66.857143-36.571429-148 0-94.857143 50.285715-163.428572 50.285714-67.428571 119.428571-90.857143 63.428571-21.142857 238.285714-21.142857h273.714286q14.285714 0 24.571429 10.285714t10.285714 24.571429z\"  ></path></symbol><symbol id=\"icon-paperclip\" viewBox=\"0 0 1024 1024\"><path d=\"M909.561331 791.428571q0 66.857143-45.142857 112t-112 45.142858q-77.142857 0-134.285714-57.142858L174.13276 448Q109.561331 382.285714 109.561331 293.142857q0-90.857143 62.857143-154.285714t153.714286-63.428572q90.285714 0 156 64.571429l345.714286 346.285714q5.714286 5.714286 5.714285 12.571429 0 9.142857-17.428571 26.571428T789.561331 542.857143q-7.428571 0-13.142857-5.714286L430.13276 190.285714q-45.142857-44-103.428571-44-60.571429 0-102.285715 42.857143t-41.714285 103.428572q0 60 43.428571 103.428571l443.428571 444q36 36 82.857143 36 36.571429 0 60.571429-24t24-60.571429q0-46.857143-36-82.857142L468.989903 376.571429q-14.857143-13.714286-34.285714-13.714286-16.571429 0-27.428572 10.857143t-10.857143 27.428571q0 18.285714 14.285715 33.714286l234.285714 234.285714q5.714286 5.714286 5.714286 12.571429 0 9.142857-17.714286 26.857143t-26.857143 17.714285q-6.857143 0-12.571429-5.714285L359.275617 486.285714q-36-34.857143-36-85.142857 0-46.857143 32.571429-79.428571t79.428571-32.571429q50.285714 0 85.142857 36l332 332q57.142857 56 57.142857 134.285714z\"  ></path></symbol><symbol id=\"icon-optin-monster\" viewBox=\"0 0 1264 1024\"><path d=\"M259.312006 908.677007q-4.33995 8.6799-14.647331 18.716034t-20.072268 13.83359q-13.562343 4.882444-27.938428-1.898728T181.192908 922.239351q-0.542494-11.934862 21.699749-29.837156t36.889574-20.614762q12.477356-2.169975 18.444787 11.663615t1.084988 25.225959z m727.484099 0q3.797456 8.6799 14.104837 18.716034t20.614762 13.83359q13.562343 4.882444 27.938428-1.898728t14.918577-17.088552q1.084987-11.934862-21.428502-29.837156t-37.160821-20.614762q-11.934862-2.169975-17.902293 11.663615t-1.084988 25.225959z m26.039699-59.131817q7.052419 14.647331 30.650896 32.278377t42.043265 22.51349q24.412218 7.052419 44.484486-2.441222t20.072269-27.395933q0-24.954712-36.618328-54.520621T1050.810366 787.700904q-21.699749-2.712469-34.448352 20.343515t-3.52621 41.500771z m-780.648485 0q-7.052419 14.647331-30.379649 32.278377t-41.772018 22.51349q-24.412218 7.052419-44.484486-2.441222t-20.072269-27.395933q0-24.954712 36.618328-54.520621T194.755251 787.700904q21.699749-2.712469 34.177105 20.343515t3.254963 41.500771z m396.020427-609.762959h0.542494q-22.242243 0-41.229524 8.137406 14.647331 4.33995 23.869724 16.546059t9.222394 26.85344q0 18.987281-14.647331 32.549624t-35.262093 13.562344q-28.209674 0-43.399499-23.327231-2.712469 12.477356-2.712469 22.784737 0 40.144536 30.37965 68.625457t73.236654 28.480922q43.399499 0 73.779148-28.480922t30.379649-68.625457-30.379649-68.625458-73.779148-28.480921z m164.918095-118.263634q-53.70688-59.131817-119.619868-71.337926T540.323761 74.321642q14.647331-32.549624 44.755733-52.350646t64.014261-21.428502T715.006744 9.764887t53.978126 40.415784T793.125841 121.518597z m406.870302 672.149738q4.33995 5.967431-5.967431 22.784737 3.797456 12.477356 3.797456 21.69975 0.542494 30.379649-24.140971 61.030545T1114.282133 948.821544t-64.014261 20.072268q-26.039699 1.084987-49.909424-11.663615t-35.804586-35.53334q-372.693196 13.562343-682.999613 0-12.477356 22.242243-36.075834 35.262093t-50.18067 11.934862q-46.654461-1.627481-97.377626-43.670746T47.739449 838.152822q1.084987-11.934862 3.797456-21.69975-10.307381-16.817306-5.967431-22.784737 3.254962-5.424937 16.817306-0.542494 7.594912-11.934862 22.242243-27.66718-3.797456-15.732318 1.084987-20.614762 5.967431-5.424937 21.157256 2.169975 15.732318-10.849875 32.00713-18.444787 0-15.732318 7.052419-20.072268 12.477356-6.509925 27.66718 8.679899 18.987281-2.712469 33.092118 1.084988 9.764887 2.169975 20.614762 10.307381v-39.602043q-5.967431 0-9.764887-1.084987-28.752168-5.424937-52.621892-24.140971t-29.837156-47.468202q-4.882444-20.614762 0-43.941993 8.137406-33.634612 50.451918-51.536905 1.084987-9.222394 10.307381-19.258527t19.529774-12.748603 17.902293 4.068703 10.307381 16.546059h7.052419q24.954712 2.712469 32.549624 12.477356 1.627481 1.627481 2.712469 3.797456 5.424937-0.542494 16.546059-1.898728T318.986317 521.878974q-8.137406-5.967431-16.274813-9.222394-12.477356-21.699749-49.366929-23.32723 0-3.254962 0.542493-5.424938-33.634612-1.084987-64.285507-10.036134T143.76084 448.099826q-17.3598-19.529774-23.055984-49.909424T119.348622 337.431104q8.6799-68.354211 48.824436-97.106379 12.477356-8.6799 28.209674-2.441222t17.3598 21.970996q0 0.542494 0.81374 7.594913t1.356235 11.392368 1.627481 10.849875 2.983716 10.307381 4.611196 5.424937q14.647331 7.594912 41.229524 6.509925 26.039699-24.954712 53.164386-40.144536-21.699749-2.169975-87.883985 7.594912l25.497206-24.954712q33.092118-31.464637 88.426479-60.216805 78.661592-39.602043 152.983233-46.654461-10.849875-4.33995-22.242243-8.408653t-25.497206-7.594912-23.055983-5.696184-25.768453-5.967431-23.327231-5.424938q322.783773-68.354211 490.414337 75.406629 53.164386 45.569474 85.714011 120.43361 46.111968 5.424937 65.641742-4.882444h0.542493q2.712469-1.627481 4.611197-5.424937t2.983716-10.307381 1.627481-10.578628 1.627481-11.663615l0.542494-7.594913q1.627481-15.189825 17.359799-21.699749t28.209675 2.712469q39.602043 28.209674 49.36693 96.563885 3.797456 30.922143-1.898728 61.301792t-23.055984 49.36693q-15.189825 17.3598-45.298227 26.310946T994.391017 484.446906v5.424937q-38.517055 1.084987-51.536904 23.327231-7.594912 2.712469-16.817306 9.222393 5.967431 0.542494 17.359799 1.898728t16.274812 1.898729q0.542494-2.712469 2.712469-4.33995 8.6799-9.764887 32.549624-12.477356h7.052419q2.712469-9.764887 10.307381-16.274812t17.902293-4.33995 19.529774 12.477356 10.307381 19.529774q42.857005 17.3598 50.451918 51.536905 4.882444 21.699749 0.542494 43.941993-6.509925 28.752168-30.37965 47.739448t-52.621892 23.869725q-5.424937 1.084987-9.222393 1.084987 0 26.582193-0.542494 39.602043 10.849875-8.137406 20.614762-10.307381 14.104837-3.797456 33.092118-1.084988 15.189825-15.189825 27.66718-8.679899 7.594912 4.882444 7.594912 20.072268 17.902293 8.6799 32.007131 18.444787 14.647331-7.052419 20.614762-2.169975 5.424937 5.424937 1.084987 20.614762 15.189825 16.274812 22.242243 27.66718 12.477356-4.33995 16.817306 0.542494z m-149.185777-516.454036q0 15.732318-4.882444 29.294662 44.484486 17.3598 60.759299 71.609173 2.169975-20.072268-5.153691-53.435633T1079.02004 275.586818q-10.849875-10.307381-19.529774-9.222394t-8.6799 10.849875z m-42.314511 54.249373q18.987281 22.784737 25.768452 58.860571T1033.99306 457.864713q36.34708-7.052419 52.621892-24.412218 7.052419-7.594912 9.764888-15.189825-1.627481-34.719599-16.817306-62.115533t-42.857005-36.075833q-8.137406 8.137406-28.209674 11.392368z m-20.072269 2.169975q-16.274812 0-23.869724-0.542493 22.784737 62.38678 28.752168 129.656002 11.392368 0 23.327231-1.627481 8.6799-36.889574 0.542493-73.236654t-28.752168-54.249374zM139.963384 378.118134q16.274812-54.249374 60.759298-71.609173-4.882444-13.562343-4.882443-29.294662 0-9.764887-8.951147-10.849875T167.630564 275.586818q-15.189825 15.732318-22.51349 49.095683T139.963384 378.118134z m19.529774 55.334361q15.732318 16.817306 52.621893 24.412218-7.052419-31.464637-0.271247-67.54047T237.612256 331.463672q-20.072268-3.254962-28.209674-11.392368-27.667181 8.6799-42.585758 35.804587T149.728271 418.26267q4.882444 9.222394 9.764887 15.189825z m96.021391 29.294661q7.594912-67.269223 39.602043-127.486027-10.307381 2.169975-29.837155 9.764887l-24.412218 10.307381v-0.542494q-24.954712 48.281942-10.849875 106.328772 13.562343 1.627481 25.497205 1.627481z m522.421468 21.157256q4.33995 20.614762 8.951147 58.86057t6.238677 48.55319q1.627481 9.764887 5.153691 11.663615t12.748603-2.441222q21.699749-10.849875 33.634611-46.383214t12.477356-68.082964q-13.01985-1.084987-79.204085-2.169975z m-152.983234-347.738484q-62.929273 0-107.956253 44.755733T471.96955 288.606667q0 63.471767 45.02698 108.227501t107.956253 44.755733 107.956254-44.755733 45.02698-108.227501q0-62.929273-45.02698-107.685006T624.952783 136.165928z m123.688572 346.653497q-56.961842-1.084987-114.466178 0v-0.542494q-0.542494 14.647331 1.356234 46.654461t7.323666 35.804587q15.732318 7.594912 50.723164 7.866159t51.808152-5.696184q4.882444-1.627481 5.967431-21.157256t-0.271247-37.703315-2.441222-25.225958z m-145.388321 107.956253q4.33995-2.169975 5.153691-26.039699t-0.271247-47.739449-2.169975-34.177105v-0.542494q-115.008672 1.627481-116.09366 1.627481-2.169975 10.849875-3.797456 33.634612t0 45.02698 7.594912 24.954712q18.444787 8.137406 54.791868 8.679899t54.791867-5.424937zM389.510502 488.244362q-8.6799 32.00713 2.441222 64.285508T433.994989 598.37059q8.137406 4.33995 13.019849 2.712469t6.509925-11.392368q1.627481-8.6799 4.33995-48.824437t5.424937-55.876854q-37.432068 1.084987-73.779148 3.254962z m-68.896704 68.354211q1.627481 12.477356-18.444787 19.529774 71.609173 76.491617 147.287049 130.198497t165.731836 83.544035q93.308923-26.582193 168.444305-79.204085t159.221912-135.623434q-17.902293-7.052419-16.274813-18.444787 0-1.084987 0.271247-1.898728t0.813741-1.627482 0.542494-1.356234v-0.542494 0.542494q-9.222394-1.084987-27.124687-2.983715t-26.039699-2.441222q-14.104837 48.824436-44.484487 71.609173-27.667181 20.614762-44.484486-0.542494-2.712469-3.254962-4.882444-7.594912-3.797456-7.052419-9.222393-33.634612-1.084987 2.712469-2.712469 4.882444t-4.068703 3.797456-4.33995 2.983716-5.15369 2.169974l-5.424938 1.356235-6.509924 1.084987-6.509925 0.813741-7.323666 0.542494-7.323665 0.271247q-57.504336 4.882444-88.426479-5.967432-2.169975 9.222394-5.424937 14.376084t-11.392369 8.137406-12.477356 3.797457-19.529774 1.898728q-3.254962 0.542494-4.882444 0.542493-97.106379 9.222394-110.126228-21.699749-1.084987 34.177105-30.379649 29.294662-25.497206-4.33995-49.36693-29.294662-6.509925-7.052419-10.849875-14.104837-9.222394-15.732318-14.104837-35.262093-31.464637 3.254962-47.196955 5.424937 0.542494 1.084987 2.169975 5.424938z m-45.569474 340.686066q1.627481-7.594912 1.627481-16.274812-9.222394-38.517055-27.66718-70.524186t-39.602043-37.974561q-22.242243-6.509925-55.063114 7.866159t-56.690596 43.399499-21.157255 58.318076q18.987281 28.752168 54.249373 50.451918t64.556755 22.784736q27.667181 1.084987 50.994411-15.189824t28.752168-42.857005z m1.627481-92.766429q12.477356 34.177105 14.647331 64.556754 105.786278-61.301792 212.657544-94.39391-53.164386-28.209674-97.920119-65.099248T308.678936 620.07034q-3.254962 2.169975-15.732319 7.052418 0 0.542494-0.542493 2.169975t-0.542494 2.712469q16.817306 9.764887 11.934862 20.072268-6.509925 12.477356-30.379649 18.444787-5.424937 7.052419-15.732319 13.01985h-0.542493q-1.084987 45.02698 0.542493 81.37406 10.307381 18.444787 18.987281 39.602043z m37.432068 90.05396q288.606667 11.392368 621.155327 0-137.793409-79.746579-232.187319-106.328772-41.229524 18.987281-84.629022 30.922143-4.33995 1.627481-8.6799 0-35.262093-11.392368-69.981692-26.582193-112.838697 32.549624-225.677394 101.988822h-0.542494v0.542494q0.542494 0 0.542494-0.542494z m642.312583-24.954712q2.169975-29.294662 15.189825-65.099248 7.594912-20.614762 17.902293-38.517055l-0.542494 0.542493q1.627481-41.772018 1.627481-83.001541-8.137406-4.33995-16.274812-13.562343-22.784737-4.882444-30.379649-17.902294-4.882444-10.849875 11.934862-20.614762-1.084987-2.169975-1.084987-4.882443-8.6799-2.169975-15.189825-6.509925-110.668722 103.07381-207.775101 154.068221 107.41376 32.00713 224.592407 95.478897z m212.657544 12.477356q2.712469-29.294662-21.157255-58.318076t-56.419349-43.399499-55.334361-7.866159q-20.614762 5.967431-39.330796 38.245808T968.893812 881.009827q0 8.6799 1.627481 16.274812 5.424937 26.582193 28.752168 42.857005t50.994411 15.189824q29.294662-1.084987 64.556755-22.784736t54.249373-50.451918z\"  ></path></symbol><symbol id=\"icon-pause-circle-o\" viewBox=\"0 0 1024 1024\"><path d=\"M512 73.142857q119.428571 0 220.285714 58.857143T892 291.714286 950.857143 512t-58.857143 220.285714-159.714286 159.714286T512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857z m0 749.714286q84.571429 0 156-41.714286t113.142857-113.142857 41.714286-156-41.714286-156-113.142857-113.142857-156-41.714286-156 41.714286-113.142857 113.142857-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286z m54.857143-128q-8 0-13.142857-5.142857t-5.142857-13.142857V347.428571q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857v329.142858q0 8-5.142857 13.142857t-13.142857 5.142857H566.857143z m-219.428572 0q-8 0-13.142857-5.142857t-5.142857-13.142857V347.428571q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857v329.142858q0 8-5.142857 13.142857t-13.142857 5.142857H347.428571z\"  ></path></symbol><symbol id=\"icon-paste\" viewBox=\"0 0 1024 1024\"><path d=\"M438.857143 950.857143h512v-365.714286h-237.714286q-22.857143 0-38.857143-16t-16-38.857143V292.571429H438.857143v658.285714z m146.285714-822.857143v-36.571429q0-7.428571-5.428571-12.857142T566.857143 73.142857H164.571429q-7.428571 0-12.857143 5.428572T146.285714 91.428571v36.571429q0 7.428571 5.428572 12.857143T164.571429 146.285714h402.285714q7.428571 0 12.857143-5.428571t5.428571-12.857143z m146.285714 384h170.857143l-170.857143-170.857143v170.857143z m292.571429 73.142857v384q0 22.857143-16 38.857143t-38.857143 16H420.571429q-22.857143 0-38.857143-16t-16-38.857143v-91.428571H54.857143q-22.857143 0-38.857143-16t-16-38.857143V54.857143q0-22.857143 16-38.857143T54.857143 0h621.714286q22.857143 0 38.857142 16t16 38.857143v187.428571q12 7.428571 20.571429 16l233.142857 233.142857q16 16 27.428572 43.428572t11.428571 50.285714z\"  ></path></symbol><symbol id=\"icon-pause\" viewBox=\"0 0 1024 1024\"><path d=\"M941.967463 109.714286v804.571428q0 14.857143-10.857143 25.714286t-25.714286 10.857143H612.824606q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h292.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z m-512 0v804.571428q0 14.857143-10.857143 25.714286t-25.714286 10.857143H100.824606q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h292.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-pause-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M475.428571 676.571429V347.428571q0-8-5.142857-13.142857t-13.142857-5.142857H310.857143q-8 0-13.142857 5.142857t-5.142857 13.142857v329.142858q0 8 5.142857 13.142857t13.142857 5.142857h146.285714q8 0 13.142857-5.142857t5.142857-13.142857z m256 0V347.428571q0-8-5.142857-13.142857t-13.142857-5.142857H566.857143q-8 0-13.142857 5.142857t-5.142857 13.142857v329.142858q0 8 5.142857 13.142857t13.142857 5.142857h146.285714q8 0 13.142857-5.142857t5.142857-13.142857z m219.428572-164.571429q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-paw\" viewBox=\"0 0 1024 1024\"><path d=\"M482.285714 269.714286q0 34.285714-10.857143 64.857143T435.428571 387.428571t-60 22.285715q-43.428571 0-78.857142-32.857143T244 299.428571t-17.142857-86.285714q0-34.285714 10.857143-64.857143t36-52.857143 60-22.285714q44 0 79.142857 32.857143t52.285714 77.142857T482.285714 269.714286zM286.857143 545.714286q0 45.714286-24 79.428571t-68 33.714286q-43.428571 0-80.857143-31.714286T56.571429 550.857143 36.571429 464q0-45.714286 24-79.714286T128.571429 350.285714q43.428571 0 80.857142 31.714286t57.428572 76.571429T286.857143 545.714286z m225.142857-15.428572q67.428571 0 145.714286 55.714286t130.857143 135.428571 52.571428 145.428572q0 26.285714-9.714286 43.714286t-27.714285 25.714285-36.857143 11.428572-43.428572 3.142857q-38.857143 0-107.142857-25.714286T512 899.428571q-37.714286 0-110 25.428572T287.428571 950.285714q-104.571429 0-104.571428-83.428571 0-49.142857 32-109.428572T294.571429 647.428571 401.714286 564t110.285714-33.714286z m136.571429-120.571428q-34.857143 0-60-22.285715t-36-52.857142T541.714286 269.714286q0-42.285714 17.142857-86.571429t52.285714-77.142857T690.285714 73.142857q34.857143 0 60 22.285714t36 52.857143 10.857143 64.857143q0 41.714286-17.142857 86.285714t-52.571429 77.428572-78.857142 32.857143z m246.857142-59.428572q44 0 68 34t24 79.714286q0 42.285714-20 86.857143t-57.428571 76.285714T829.142857 658.857143q-44 0-68-33.714286t-24-79.428571q0-42.285714 20-87.142857t57.428572-76.571429T895.428571 350.285714z\"  ></path></symbol><symbol id=\"icon-paypal\" viewBox=\"0 0 1024 1024\"><path d=\"M941.142857 369.142857q10.285714 48-2.285714 116.571429-49.714286 253.714286-322.857143 253.714285h-25.142857q-14.285714 0-25.142857 9.428572t-13.714286 24.285714l-2.285714 10.857143-31.428572 197.714286-1.142857 8.571428q-2.857143 14.857143-14 24.285715T477.714286 1024H334.285714q-12 0-18.857143-8.571429t-5.142857-20.571428q5.142857-32 15.142857-96t15.142858-96 15.428571-95.714286 15.428571-95.714286q2.857143-21.142857 24.571429-21.142857h74.857143q76 1.142857 134.857143-12 100-22.285714 164-82.285714 58.285714-54.285714 88.571428-140.571429 13.714286-40 20-76 0.571429-3.428571 1.428572-4.285714t2-0.571428 3.428571 2q45.142857 33.714286 56 92.571428z m-98.285714-161.142857q0 61.142857-26.285714 134.857143-45.714286 133.142857-172.571429 180-64.571429 22.857143-144 24 0 0.571429-51.428571 0.571428l-51.428572-0.571428q-57.142857 0-67.428571 54.857143-1.142857 4.571429-48.571429 302.857143-0.571429 5.714286-6.857143 5.714285H105.714286q-12.571429 0-20.857143-9.428571T78.285714 878.857143L210.857143 38.285714q2.857143-16.571429 15.714286-27.428571T256 0h341.714286q19.428571 0 55.714285 7.428571T717.142857 25.714286q61.142857 23.428571 93.428572 70.285714t32.285714 112z\"  ></path></symbol><symbol id=\"icon-pencil-square-o\" viewBox=\"0 0 1024 1024\"><path d=\"M507.428571 676.571429l66.285715-66.285715-86.857143-86.857143-66.285714 66.285715v32h54.857142v54.857143h32z m251.428572-411.428572q-9.142857-9.142857-18.857143 0.571429L540 465.714286q-9.714286 9.714286-0.571429 18.857143t18.857143-0.571429l200-200q9.714286-9.714286 0.571429-18.857143z m45.714286 339.428572v108.571428q0 68-48.285715 116.285714T640 877.714286H164.571429q-68 0-116.285715-48.285715T0 713.142857V237.714286q0-68 48.285714-116.285715T164.571429 73.142857h475.428571q36 0 66.857143 14.285714 8.571429 4 10.285714 13.142858 1.714286 9.714286-5.142857 16.571428l-28 28q-8 8-18.285714 4.571429-13.142857-3.428571-25.714286-3.428572H164.571429q-37.714286 0-64.571429 26.857143t-26.857143 64.571429v475.428571q0 37.714286 26.857143 64.571429t64.571429 26.857143h475.428571q37.714286 0 64.571429-26.857143t26.857142-64.571429v-72q0-7.428571 5.142858-12.571428l36.571428-36.571429q8.571429-8.571429 20-4t11.428572 16.571429z m-54.857143-421.714286l164.571428 164.571428-384 384H365.714286V566.857143z m253.714285 75.428571l-52.571428 52.571429-164.571429-164.571429 52.571429-52.571428q16-16 38.857143-16t38.857143 16l86.857142 86.857143q16 16 16 38.857142t-16 38.857143z\"  ></path></symbol><symbol id=\"icon-percent\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 731.428571q0-29.714286-21.714286-51.428571t-51.428572-21.714286-51.428571 21.714286-21.714286 51.428571 21.714286 51.428572 51.428571 21.714286 51.428572-21.714286 21.714286-51.428572zM365.714286 292.571429q0-29.714286-21.714286-51.428572t-51.428571-21.714286-51.428572 21.714286-21.714286 51.428572 21.714286 51.428571 51.428572 21.714286 51.428571-21.714286 21.714286-51.428571z m585.142857 438.857142q0 90.857143-64.285714 155.142858T731.428571 950.857143t-155.142857-64.285714T512 731.428571t64.285714-155.142857T731.428571 512t155.142858 64.285714T950.857143 731.428571z m-54.857143-621.714285q0 11.428571-7.428571 21.714285L285.142857 936q-10.857143 14.857143-29.142857 14.857143H164.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286q0-11.428571 7.428571-21.714285L738.857143 88q10.857143-14.857143 29.142857-14.857143h91.428571q14.857143 0 25.714286 10.857143t10.857143 25.714286zM512 292.571429q0 90.857143-64.285714 155.142857T292.571429 512 137.428571 447.714286 73.142857 292.571429t64.285714-155.142858T292.571429 73.142857t155.142857 64.285714T512 292.571429z\"  ></path></symbol><symbol id=\"icon-pencil-square\" viewBox=\"0 0 1024 1024\"><path d=\"M304 633.142857l86.857143 86.857143-29.714286 29.714286h-32v-54.857143h-54.857143v-32z m236.571429-222.857143q8 7.428571-1.714286 17.142857l-166.285714 166.285715q-9.714286 9.714286-17.142858 1.714285-8-7.428571 1.714286-17.142857l166.285714-166.285714q9.714286-9.714286 17.142858-1.714286z m-156.571429 394.285715l310.857143-310.857143-164.571429-164.571429-310.857143 310.857143v164.571429h164.571429z m347.428571-347.428572l52.571429-52.571428q16-16 16-38.857143t-16-38.857143l-86.857143-86.857143q-16-16-38.857143-16t-38.857143 16l-52.571428 52.571429z m219.428572-219.428571v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-pencil\" viewBox=\"0 0 1024 1024\"><path d=\"M280.571429 877.714286l52-52-134.285715-134.285715-52 52v61.142858h73.142857v73.142857h61.142858z m298.857142-530.285715q0-12.571429-12.571428-12.571428-5.714286 0-9.714286 4l-309.714286 309.714286q-4 4-4 9.714285 0 12.571429 12.571429 12.571429 5.714286 0 9.714286-4l309.714285-309.714286q4-4 4-9.714286z m-30.857142-109.714285l237.714285 237.714285-475.428571 475.428572H73.142857v-237.714286z m390.285714 54.857143q0 30.285714-21.142857 51.428571l-94.857143 94.857143-237.714286-237.714286 94.857143-94.285714q20.571429-21.714286 51.428571-21.714286 30.285714 0 52 21.714286l134.285715 133.714286q21.142857 22.285714 21.142857 52z\"  ></path></symbol><symbol id=\"icon-phone-square\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 681.714286q0-6.285714-1.142858-9.142857t-10.285714-9.428572-23.142857-14.285714-27.142857-15.142857-26-14.285715-16.285714-8.571428q-2.857143-1.714286-10.857143-7.428572t-14.285715-8.571428-12-2.857143q-8.571429 0-20.857142 11.714286t-22.571429 25.714285-22 25.714286T578.857143 666.857143q-4 0-9.428572-2T560.571429 661.142857t-9.714286-5.428571-8-4.857143q-56.571429-31.428571-97.142857-72.285714T373.142857 481.142857q-1.142857-1.714286-4.857143-8t-5.428571-9.714286-3.714286-8.857142T357.142857 445.142857q0-7.428571 11.714286-19.142857t25.714286-22 25.714285-22.571429T432 360.571429q0-5.714286-2.857143-12t-8.571428-14.285715-7.428572-10.857143q-1.714286-3.428571-8.571428-16.285714T390.285714 281.142857t-15.142857-27.142857-14.285714-23.142857-9.428572-10.285714-9.142857-1.142858q-27.428571 0-57.714285 12.571429-26.285714 12-45.714286 54T219.428571 360.571429q0 9.142857 1.428572 19.428571t2.857143 17.428571 5.142857 18.857143 5.714286 16.857143 7.142857 18.857143 6.285714 17.142857q34.285714 93.714286 123.714286 183.142857T554.857143 776q3.428571 1.142857 17.142857 6.285714t18.857143 7.142857 16.857143 5.714286 18.857143 5.142857 17.428571 2.857143 19.428571 1.428572q32.571429 0 74.571429-19.428572t54-45.714286q12.571429-30.285714 12.571429-57.714285z m146.285714-444v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-phone\" viewBox=\"0 0 1024 1024\"><path d=\"M914.285714 708.571429q0 15.428571-5.714285 40.285714t-12 39.142857q-12 28.571429-69.714286 60.571429-53.714286 29.142857-106.285714 29.142857-15.428571 0-30.285715-2t-32.857143-7.142857-26.857142-8.285715T598.857143 848.571429t-28-10.285715q-56-20-100-47.428571-72.571429-45.142857-150.857143-123.428572T196.571429 516.571429q-27.428571-44-47.428572-100-1.714286-5.142857-10.285714-28t-11.714286-31.714286-8.285714-26.857143T111.714286 297.142857 109.714286 266.857143q0-52.571429 29.142857-106.285714 32-57.714286 60.571428-69.714286 14.285714-6.285714 39.142858-12t40.285714-5.714286q8 0 12 1.714286 10.285714 3.428571 30.285714 43.428571 6.285714 10.857143 17.142857 30.857143t20 36.285714 17.714286 30.571429q1.714286 2.285714 10 14.285714t12.285714 20.285715 4 16.285714q0 11.428571-16.285714 28.571428t-35.428571 31.428572-35.428572 30.285714-16.285714 26.285714q0 5.142857 2.857143 12.857143t4.857143 11.714286 8 13.714286 6.571428 10.857143q43.428571 78.285714 99.428572 134.285714t134.285714 99.428571q1.142857 0.571429 10.857143 6.571429t13.714285 8 11.714286 4.857143 12.857143 2.857143q10.285714 0 26.285714-16.285715t30.285715-35.428571 31.428571-35.428572 28.571429-16.285714q8 0 16.285714 4t20.285714 12.285714 14.285714 10q14.285714 8.571429 30.571429 17.714286t36.285714 20 30.857143 17.142857q40 20 43.428572 30.285715 1.714286 4 1.714285 12z\"  ></path></symbol><symbol id=\"icon-photo\" viewBox=\"0 0 1097 1024\"><path d=\"M365.714286 329.142857q0 45.714286-32 77.714286t-77.714286 32-77.714286-32-32-77.714286 32-77.714286 77.714286-32 77.714286 32 32 77.714286z m585.142857 219.428572v256H146.285714v-109.714286l182.857143-182.857143 91.428572 91.428571 292.571428-292.571428z m54.857143-402.285715H91.428571q-7.428571 0-12.857142 5.428572T73.142857 164.571429v694.857142q0 7.428571 5.428572 12.857143t12.857142 5.428572h914.285715q7.428571 0 12.857143-5.428572t5.428571-12.857143V164.571429q0-7.428571-5.428571-12.857143T1005.714286 146.285714z m91.428571 18.285715v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h914.285715q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-picture-o\" viewBox=\"0 0 1097 1024\"><path d=\"M365.714286 329.142857q0 45.714286-32 77.714286t-77.714286 32-77.714286-32-32-77.714286 32-77.714286 77.714286-32 77.714286 32 32 77.714286z m585.142857 219.428572v256H146.285714v-109.714286l182.857143-182.857143 91.428572 91.428571 292.571428-292.571428z m54.857143-402.285715H91.428571q-7.428571 0-12.857142 5.428572T73.142857 164.571429v694.857142q0 7.428571 5.428572 12.857143t12.857142 5.428572h914.285715q7.428571 0 12.857143-5.428572t5.428571-12.857143V164.571429q0-7.428571-5.428571-12.857143T1005.714286 146.285714z m91.428571 18.285715v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h914.285715q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-pie-chart\" viewBox=\"0 0 1024 1024\"><path d=\"M438.857143 508.571429l312 312q-60.571429 61.714286-141.428572 96T438.857143 950.857143q-119.428571 0-220.285714-58.857143T58.857143 732.285714 0 512t58.857143-220.285714T218.571429 132 438.857143 73.142857v435.428572z m106.857143 3.428571h441.714285q0 89.714286-34.285714 170.571429T857.142857 824z m405.142857-73.142857H512V0q119.428571 0 220.285714 58.857143T892 218.571429 950.857143 438.857143z\"  ></path></symbol><symbol id=\"icon-pied-piper-pp\" viewBox=\"0 0 1024 1024\"><path d=\"M670.857143 582.857143q0 36.571429-21.714286 62.285714t-52 25.714286q-24.571429 0-40-8.571429V504q16-9.714286 40-9.714286 30.285714 0 52 26t21.714286 62.571429zM474.857143 338.285714q0 36.571429-21.714286 62.571429T401.142857 426.857143q-24.571429 0-40-8.571429V260q16-9.714286 40-9.714286 30.285714 0 52 25.714286t21.714286 62.285714z m321.142857 246.285715q0-76.571429-50.285714-130.857143t-121.714286-54.285715q-11.428571 0-22.285714 1.714286-13.142857 44.571429-44.571429 77.714286-49.714286 54.285714-120.571428 57.714286v363.428571l120.571428-23.428571v-117.714286q29.142857 10.857143 66.857143 10.857143 71.428571 0 121.714286-54.285715t50.285714-130.857142zM600 340.571429q0-76.571429-50.571429-130.857143T427.428571 155.428571q-42.285714 0-80.571428 20.571429H240.571429v480l120.571428-23.428571V514.857143q31.428571 10.857143 66.285714 10.857143 71.428571 0 122-54.285715T600 340.571429z m350.857143-102.857143v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-pied-piper-alt\" viewBox=\"0 0 1164 1024\"><path d=\"M698.285714 530.857143q42.857143-1.714286 82 11.714286t67.428572 33.428571 57.714285 54 48 61.714286T996.571429 760.571429q18.857143 32 44.857142 62.285714t43.142858 46 56.571428 50.571428q-27.428571 17.142857-62 32.857143t-79.142857 33.714286-65.142857 27.142857q-25.142857-21.142857-42.285714-65.714286t-24.857143-94-18.857143-103.142857-24.285714-96.285714-41.428572-70.285714T713.142857 556l-5.714286 1.142857-3.428571 2.285714q2.285714 2.857143 7.428571 8 3.428571 2.857143 16 13.428572t14.571429 12.571428 10.857143 10.285715 10.285714 11.714285 6.571429 12 6 15.714286 2.571428 17.714286 2.285715 23.142857l0.571428 18.857143q0.571429 14.857143-1.428571 32.857143t-4.285715 29.714285-7.142857 33.428572-6.571428 30.285714q-20-0.571429-57.714286 5.428572t-56 6q-22.285714 0-41.142857-5.714286-1.142857-9.142857-1.142857-26.857143 0-42.285714 1.714285-54.857143 1.142857-7.428571 18-23.714286t32.571429-33.714285 15.142857-29.428572q-13.714286-1.142857-24.571428 13.714286-20.571429 30.285714-63.714286 56.857143T506.857143 763.428571q-14.285714 0-43.142857-36T402.857143 647.714286t-48-55.142857q-3.428571-2.285714-15.428572-17.142858-275.428571 64-293.142857 64-9.142857 0-16-6.285714t-6.857143-15.428571q0-8.571429 4.857143-15.142857T41.142857 594.285714l277.714286-60.571428q-4.571429-8-4.571429-14.285715t3.142857-10 9.142858-6.571428 11.428571-4 13.142857-2.571429T361.714286 493.714286q2.285714-0.571429 8.857143-4.285715T380.571429 485.714286q8.571429 0 16 9.142857t11.428571 18.857143q93.142857-21.142857 98.285714-21.142857 9.714286 0 16.857143 6.285714t7.142857 16q0 8.571429-4.857143 14.857143T512 537.714286l-104 22.857143-0.571429 9.142857q-0.571429 14.857143 46.571429 67.142857T513.714286 689.142857q26.857143 0 68-45.714286t41.142857-73.714285q0-20.571429-13.428572-30.285715t-29.142857-10.571428-29.142857-6.571429-13.428571-19.428571q0-9.142857 5.714285-19.428572l-38.857142-10.857142q24.571429-25.142857 24.571428-66.857143 0-14.857143-2.857143-33.142857 46.857143-9.142857 82.285715-9.142858 25.142857 0 40.857142 0.857143t27.714286 4.857143 17.714286 7.714286 11.714286 14 8.857142 19.142857 9.714286 27.142857 13.714286 34.285714l28.571428-14.285714q-1.714286 22.857143-13.142857 34.285714t-24.285714 12-22.857143 3.714286T697.714286 518.857143z m34.285715-134.285714q-2.857143-2.857143-7.714286-8.857143t-6.857143-8.285715-6-6.571428-5.714286-6l-4.571428-4.571429-4.857143-4.285714-4.571429-2.857143-4.857143-2.571428q-4-1.714286-8.285714-2.857143t-11.714286-1.428572-12.571428-0.285714h-40q-72 0-124 24.571429 9.142857-17.142857 20.571428-26.571429t30.857143-16.857143 37.428572-20.571428 26.285714-20.857143 28.571429-31.428572T659.428571 227.428571q6.857143 5.142857 16 18t18.285715 20.857143 21.714285 7.428572l6.857143-0.571429v43.428572l12.571429 0.571428q141.142857-54.285714 212-108.571428 16-12 28.571428-22.285715t24.285715-21.428571 18.857143-17.714286 16.857142-19.428571 13.714286-17.714286 14-21.142857 13.142857-21.714286 15.428572-27.142857 16.857143-30.285714l4-5.142857q-1.142857 30.285714-24.571429 79.428571-45.142857 94.285714-117.142857 150.857143t-174.857143 81.142857q-8 1.714286-24 4.285714t-28.571429 5.428572-22.285714 8q1.714286 10.857143 14 26.285714t12.285714 19.428571q0 6.285714-14.857142 17.142858z m-126.285715 526.285714q22.285714-14.857143 75.142857-27.142857T765.142857 883.428571q5.142857 0 12.857143 8.857143t16 24.285715 14.857143 28.571428 13.714286 29.142857 8.285714 18.857143q-69.142857 25.714286-139.428572 25.714286-34.857143 0-71.428571-6.285714zM469.714286 553.142857l27.428571-6.857143 62.285714 101.142857-41.714285 27.428572z m286.285714 295.428572q1.714286 8.571429 1.714286 9.142857 0 4-10 8.285714t-26.285715 7.428571-30.857142 5.428572-30.571429 4.285714-18.285714 2.571429l-4-24.571429q12-1.142857 34.571428-4.857143t41.142857-5.714285 34.571429-2h8zM494.857143 489.714286l-54.857143 11.428571-3.428571-9.714286q5.714286-0.571429 18.571428-4t19.714286-3.428571q10.857143 0 20 5.714286z m111.428571 362.285714h17.714286l5.714286 47.428571-23.428572 6.857143v-54.285714zM1114.285714 0.571429V0v0.571429z m0 0l-0.571428 2.857142-1.142857 1.142858 0.571428-1.714286z m0 0l0.571429-0.571429z\"  ></path></symbol><symbol id=\"icon-pinterest-p\" viewBox=\"0 0 1024 1024\"><path d=\"M146.285714 341.142857q0-61.714286 21.428572-116.285714T226.857143 129.714286t86.857143-70.285715 105.714285-44.571428T534.857143 0q90.285714 0 168 38T829.142857 148.571429t48.571429 164q0 54.857143-10.857143 107.428571t-34.285714 101.142857-57.142858 85.428572-82.857142 58.857142-108 22q-38.857143 0-77.142858-18.285714t-54.857142-50.285714q-5.714286 22.285714-16 64.285714t-13.428572 54.285714-11.714286 40.571429-14.857142 40.571429-18.285715 35.714285-26.285714 44.285715-35.428571 49.428571l-8 2.857143-5.142858-5.714286q-8.571429-89.714286-8.571428-107.428571 0-52.571429 12.285714-118T345.142857 555.428571t29.714286-116q-18.285714-37.142857-18.285714-96.571428 0-47.428571 29.714285-89.142857t75.428572-41.714286q34.857143 0 54.285714 23.142857T535.428571 293.714286q0 37.714286-25.142857 109.142857t-25.142857 106.857143q0 36 25.714286 59.714285t62.285714 23.714286q31.428571 0 58.285714-14.285714t44.857143-38.857143 32-54.285714 21.714286-63.142857 11.428571-63.428572 3.714286-56.857143q0-98.857143-62.571428-154T519.428571 93.142857q-114.285714 0-190.857142 74T252 354.857143q0 25.142857 7.142857 48.571428t15.428572 37.142858 15.428571 26T297.142857 484q0 16-8.571428 41.714286t-21.142858 25.714285q-1.142857 0-9.714285-1.714285-29.142857-8.571429-51.714286-32t-34.857143-54-18.571428-61.714286T146.285714 341.142857z\"  ></path></symbol><symbol id=\"icon-plane\" viewBox=\"0 0 1024 1024\"><path d=\"M896.000091 91.428571q25.142857 29.714286 6.857143 84.571429t-61.714285 98.285714l-92 92 91.428571 397.714286q2.857143 10.857143-6.857143 18.857143l-73.142857 54.857143q-4 3.428571-10.857143 3.428571-2.285714 0-4-0.571428-8.571429-1.714286-12-9.142858L574.285806 541.142857l-148 148 30.285714 110.857143q2.857143 9.714286-4.571429 17.714286l-54.857142 54.857143q-5.142857 5.142857-13.142858 5.142857h-1.142857q-8.571429-1.142857-13.714285-7.428572l-108-144-144-108q-6.285714-4-7.428572-13.142857-0.571429-7.428571 5.142857-14.285714l54.857143-55.428572q5.142857-5.142857 13.142857-5.142857 3.428571 0 4.571429 0.571429l110.857143 30.285714 148-148L156.000091 253.714286q-8-4.571429-9.714285-13.714286-1.142857-9.142857 5.142857-15.428571l73.142857-73.142858q8-7.428571 17.142857-4.571428l380 90.857143 91.428572-91.428572q43.428571-43.428571 98.285714-61.714285t84.571428 6.857142z\"  ></path></symbol><symbol id=\"icon-play-circle-o\" viewBox=\"0 0 1024 1024\"><path d=\"M749.714286 512q0 21.142857-18.285715 31.428571l-310.857142 182.857143q-8.571429 5.142857-18.285715 5.142857-9.142857 0-18.285714-4.571428-18.285714-10.857143-18.285714-32V329.142857q0-21.142857 18.285714-32 18.857143-10.285714 36.571429 0.571429l310.857142 182.857143q18.285714 10.285714 18.285715 31.428571z m73.142857 0q0-84.571429-41.714286-156t-113.142857-113.142857-156-41.714286-156 41.714286-113.142857 113.142857-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286 156-41.714286 113.142857-113.142857 41.714286-156z m128 0q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-pied-piper\" viewBox=\"0 0 1316 1024\"><path d=\"M1316.571429 0q-39.428571 26.285714-71.428572 52.571429t-50.857143 46.285714-34 40.857143T1138.857143 172.571429t-12.571429 25.428571-8 16.857143q-5.714286 10.285714-20.285714 78T1070.285714 386.857143q-8.571429 16.571429-28.571428 34.571428t-38.571429 28.857143-41.428571 23.428572-27.428572 16q-26.857143 17.714286-86.285714 132-194.857143-8-360 90.285714-52.571429 30.285714-173.142857 102.285714 26.857143-9.142857 49.142857-17.714285t31.428571-12.571429l8.571429-4q40.571429-15.428571 93.142857-36.857143t76.285714-30.571428 61.714286-19.714286T716.571429 674.857143q106.285714-17.714286 265.714285 4 0.571429 0 5.714286 1.714286 6.285714 3.428571 8 9.714285t-1.714286 12.571429l-110.857143 197.142857q-8.571429 16.571429-26.857142 12.571429-73.142857-13.714286-202.285715-13.714286-83.428571 0-229.714285 25.428571T200.571429 950.857143q-46.857143 0.571429-85.142858-7.428572t-61.142857-21.142857-34.857143-22.857143-18.857142-19.428571l-0.571429-0.571429v-1.142857q0-3.428571 3.428571-3.428571 78.857143 0 212-31.428572 109.714286-209.142857 214-299.428571T648.571429 453.714286q2.857143 0 8.285714 0.285714t21.714286 2.857143 31.428571 6.857143T745.142857 477.714286t36 22.571428 30.857143 33.714286 22.857143 47.142857l58.285714-101.142857q1.142857-2.285714 12-24.285714t25.428572-49.428572 34.857142-62.571428 48-76.285715T1070.857143 189.142857q37.714286-46.857143 73.142857-80.857143T1213.428571 53.142857t52.857143-30.571428T1316.571429 0z\"  ></path></symbol><symbol id=\"icon-pinterest\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 512q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143q-63.428571 0-124.571429-18.285714 33.714286-53.142857 44.571429-93.714286 5.142857-19.428571 30.857143-120.571429 11.428571 22.285714 41.714286 38.571429t65.142857 16.285714q69.142857 0 123.428571-39.142857t84-107.714286 29.714286-154.285714q0-65.142857-34-122.285714T674.285714 256.571429t-145.714285-36q-60 0-112 16.571428t-88.285715 44-62.285714 63.142857-38.285714 74T215.428571 494.857143q0 59.428571 22.857143 104.571428t66.857143 63.428572q17.142857 6.857143 21.714286-11.428572 1.142857-4 4.571428-17.714285t4.571429-17.142857q3.428571-13.142857-6.285714-24.571429-29.142857-34.857143-29.142857-86.285714 0-86.285714 59.714285-148.285715T516.571429 295.428571q86.285714 0 134.571428 46.857143t48.285714 121.714286q0 97.142857-39.142857 165.142857T560 697.142857q-34.857143 0-56-24.857143T490.857143 612.571429q4.571429-20 15.142857-53.428572t17.142857-58.857143T529.714286 457.142857q0-28.571429-15.428572-47.428571t-44-18.857143q-35.428571 0-60 32.571428t-24.571428 81.142858q0 41.714286 14.285714 69.714285l-56.571429 238.857143q-9.714286 40-7.428571 101.142857-117.714286-52-190.285714-160.571428T73.142857 512q0-119.428571 58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-pinterest-square\" viewBox=\"0 0 1024 1024\"><path d=\"M786.285714 73.142857q68 0 116.285715 48.285714T950.857143 237.714286v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H372q48.571429-69.714286 61.714286-120 5.142857-19.428571 30.285714-119.428572 12 22.285714 42 38.285715t64.285714 16q103.428571 0 168.857143-84.285715T804.571429 468q0-48-20-92.857143t-55.142858-79.428571-87.142857-55.428572T529.714286 219.428571q-59.428571 0-111.142857 16.285715t-87.428572 43.714285T269.714286 342t-38 73.142857T219.428571 490.857143q0 58.285714 22.571429 102.857143T308.571429 656.571429q7.428571 2.857143 13.428571 0t8.285714-10.857143q5.714286-25.142857 8.571429-34.857143 3.428571-13.142857-6.285714-24-28.571429-35.428571-28.571429-85.714286 0-85.714286 59.142857-146.571428T517.714286 293.714286q85.142857 0 132.857143 46.285714t47.714285 120q0 96-38.571428 163.428571T560.571429 690.857143q-34.285714 0-55.428572-24.857143T492 606.857143q4.571429-19.428571 15.142857-52.857143t16.857143-58.285714 6.285714-42.571429q0-28-15.142857-46.571428T472 388q-34.857143 0-59.142857 32.285714T388.571429 500q0 41.142857 13.714285 69.142857l-56 236.571429q-13.714286 57.142857-4 145.142857H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428z\"  ></path></symbol><symbol id=\"icon-play\" viewBox=\"0 0 1024 1024\"><path d=\"M900.571429 529.714286L141.714286 951.428571q-13.142857 7.428571-22.571429 1.714286T109.714286 932.571429V91.428571q0-14.857143 9.428571-20.571428t22.571429 1.714286l758.857143 421.714285q13.142857 7.428571 13.142857 17.714286t-13.142857 17.714286z\"  ></path></symbol><symbol id=\"icon-play-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M512 73.142857q119.428571 0 220.285714 58.857143T892 291.714286 950.857143 512t-58.857143 220.285714-159.714286 159.714286T512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857z m219.428571 470.285714q18.285714-10.285714 18.285715-31.428571t-18.285715-31.428571L420.571429 297.714286q-17.714286-10.857143-36.571429-0.571429-18.285714 10.857143-18.285714 32v365.714286q0 21.142857 18.285714 32 9.142857 4.571429 18.285714 4.571428 9.714286 0 18.285715-5.142857z\"  ></path></symbol><symbol id=\"icon-plug\" viewBox=\"0 0 1024 1024\"><path d=\"M1002.857143 258.857143q21.142857 21.714286 21.142857 51.714286t-21.142857 51.714285l-229.142857 228.571429 85.714285 85.714286-91.428571 91.428571q-93.142857 93.142857-222.571429 106.571429T310.285714 817.142857l-206.857143 206.857143H0v-103.428571l206.857143-206.857143q-70.857143-105.714286-57.428572-235.142857T256 256l91.428571-91.428571 85.714286 85.714285 228.571429-229.142857q21.714286-21.142857 52-21.142857t51.428571 21.142857 21.142857 51.714286-21.142857 51.714286L536.571429 353.714286l133.714285 133.714285 229.142857-228.571428q21.714286-21.142857 52-21.142857t51.428572 21.142857z\"  ></path></symbol><symbol id=\"icon-plus-square-o\" viewBox=\"0 0 1024 1024\"><path d=\"M768 457.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H548.571429v201.142857q0 8-5.142858 13.142857t-13.142857 5.142857h-36.571428q-8 0-13.142857-5.142857t-5.142858-13.142857V512H274.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h201.142857V237.714286q0-8 5.142858-13.142857t13.142857-5.142858h36.571428q8 0 13.142857 5.142858t5.142858 13.142857v201.142857h201.142857q8 0 13.142857 5.142857t5.142857 13.142857z m73.142857 256V237.714286q0-37.714286-26.857143-64.571429t-64.571428-26.857143H274.285714q-37.714286 0-64.571428 26.857143t-26.857143 64.571429v475.428571q0 37.714286 26.857143 64.571429t64.571428 26.857143h475.428572q37.714286 0 64.571428-26.857143t26.857143-64.571429z m73.142857-475.428571v475.428571q0 68-48.285714 116.285714T749.714286 877.714286H274.285714q-68 0-116.285714-48.285715T109.714286 713.142857V237.714286q0-68 48.285714-116.285715T274.285714 73.142857h475.428572q68 0 116.285714 48.285714T914.285714 237.714286z\"  ></path></symbol><symbol id=\"icon-plus-square\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 548.571429V475.428571q0-14.857143-10.857143-25.714285t-25.714286-10.857143H585.142857V256q0-14.857143-10.857143-25.714286t-25.714285-10.857143H475.428571q-14.857143 0-25.714285 10.857143t-10.857143 25.714286v182.857143H256q-14.857143 0-25.714286 10.857143t-10.857143 25.714285v73.142858q0 14.857143 10.857143 25.714285t25.714286 10.857143h182.857143v182.857143q0 14.857143 10.857143 25.714286t25.714285 10.857143h73.142858q14.857143 0 25.714285-10.857143t10.857143-25.714286v-182.857143h182.857143q14.857143 0 25.714286-10.857143t10.857143-25.714285z m146.285714-310.857143v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-plus-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M768 548.571429V475.428571q0-14.857143-10.857143-25.714285t-25.714286-10.857143H585.142857V292.571429q0-14.857143-10.857143-25.714286t-25.714285-10.857143H475.428571q-14.857143 0-25.714285 10.857143t-10.857143 25.714286v146.285714H292.571429q-14.857143 0-25.714286 10.857143t-10.857143 25.714285v73.142858q0 14.857143 10.857143 25.714285t25.714286 10.857143h146.285714v146.285714q0 14.857143 10.857143 25.714286t25.714285 10.857143h73.142858q14.857143 0 25.714285-10.857143t10.857143-25.714286v-146.285714h146.285714q14.857143 0 25.714286-10.857143t10.857143-25.714285z m182.857143-36.571429q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-plus\" viewBox=\"0 0 1024 1024\"><path d=\"M914.285714 420.571429v109.714285q0 22.857143-16 38.857143t-38.857143 16H621.714286v237.714286q0 22.857143-16 38.857143t-38.857143 16H457.142857q-22.857143 0-38.857143-16t-16-38.857143v-237.714286H164.571429q-22.857143 0-38.857143-16T109.714286 530.285714V420.571429q0-22.857143 16-38.857143t38.857143-16h237.714285V128q0-22.857143 16-38.857143t38.857143-16h109.714286q22.857143 0 38.857143 16t16 38.857143v237.714286h237.714285q22.857143 0 38.857143 16t16 38.857143z\"  ></path></symbol><symbol id=\"icon-product-hunt\" viewBox=\"0 0 1024 1024\"><path d=\"M657.142857 435.428571q0 32-22.571428 54.285715t-54.571429 22.285714H435.428571V358.285714h144.571429q32 0 54.571429 22.571429T657.142857 435.428571z m102.285714 0q0-74.285714-52.285714-126.857142T580 256H332.571429v512h102.857142v-153.714286h144.571429q74.285714 0 126.857143-52.285714t52.571428-126.571429z m264.571429 76.571429q0 104-40.571429 198.857143t-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0t198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-print\" viewBox=\"0 0 1024 1024\"><path d=\"M256 877.714286h512v-146.285715H256v146.285715z m0-365.714286h512V292.571429h-91.428571q-22.857143 0-38.857143-16t-16-38.857143V146.285714H256v365.714286z m658.285714 36.571429q0-14.857143-10.857143-25.714286t-25.714285-10.857143-25.714286 10.857143-10.857143 25.714286 10.857143 25.714285 25.714286 10.857143 25.714285-10.857143 10.857143-25.714285z m73.142857 0v237.714285q0 7.428571-5.428571 12.857143t-12.857143 5.428572h-128v91.428571q0 22.857143-16 38.857143t-38.857143 16H237.714286q-22.857143 0-38.857143-16t-16-38.857143v-91.428571H54.857143q-7.428571 0-12.857143-5.428572T36.571429 786.285714V548.571429q0-45.142857 32.285714-77.428572T146.285714 438.857143h36.571429V128q0-22.857143 16-38.857143t38.857143-16h384q22.857143 0 50.285714 11.428572t43.428571 27.428571l86.857143 86.857143q16 16 27.428572 43.428571t11.428571 50.285715v146.285714h36.571429q45.142857 0 77.428571 32.285714T987.428571 548.571429z\"  ></path></symbol><symbol id=\"icon-puzzle-piece\" viewBox=\"0 0 1024 1024\"><path d=\"M987.428571 627.428571q0 46.285714-25.428571 77.142858t-70.571429 30.857142q-23.428571 0-44.285714-10t-33.714286-21.714285-32.285714-21.714286-40.571428-10q-62.857143 0-62.857143 70.857143 0 22.285714 9.142857 65.714286t8.571428 65.714285v2.857143q-12.571429 0-18.857142 0.571429-19.428571 1.714286-55.714286 6.571428T554.857143 892t-56 2.857143q-34.857143 0-58.857143-15.142857t-24-47.714286q0-21.142857 10-40.571429t21.714286-32.285714 21.714285-33.714286T479.428571 681.142857q0-45.142857-30.857142-70.571428T371.428571 585.142857q-48 0-81.714285 26T256 684q0 24.571429 8.571429 47.428571t19.142857 36.857143 19.142857 30.285715 8.571428 28.857142q0 25.714286-26.285714 50.857143-21.142857 20-66.857143 20-54.285714 0-140-13.714285-5.142857-1.142857-15.714285-2.285715t-15.714286-2.285714l-7.428572-1.142857q-0.571429 0-1.714285-0.571429-1.142857 0-1.142857-0.571428V292.571429q1.142857 0.571429 10 2t19.428571 2.857142T78.285714 299.428571q85.714286 13.714286 140 13.714286 45.714286 0 66.857143-20 26.285714-25.142857 26.285714-50.857143 0-12.571429-8.571428-28.857143t-19.142857-30.285714T264.571429 146.285714t-8.571429-47.428571q0-46.857143 33.714286-72.857143T372 0q45.714286 0 76.571429 25.428571T479.428571 96q0 23.428571-10 44.285714t-21.714285 33.714286-21.714286 32.285714-10 40.571429q0 32.571429 24 47.714286T498.857143 309.714286q36.571429 0 102.857143-8.571429t93.142857-9.714286v1.142858q-0.571429 1.142857-2 10t-2.857143 19.428571-2 12.285714q-13.714286 85.714286-13.714286 140 0 45.714286 20 66.857143 25.142857 26.285714 50.857143 26.285714 12.571429 0 28.857143-8.571428t30.285714-19.142857T841.142857 520.571429t47.428572-8.571429q46.857143 0 72.857142 33.714286t26 81.714285z\"  ></path></symbol><symbol id=\"icon-podcast\" viewBox=\"0 0 1024 1024\"><path d=\"M641.142857 681.142857q0 49.142857-9.714286 112.571429-17.714286 122.857143-31.428571 178.857143-12.571429 51.428571-86.857143 51.428571t-86.857143-51.428571q-13.714286-56-31.428571-178.857143-9.714286-62.857143-9.714286-112.571429 0-96 128-96t128 96z m309.714286-242.285714q0 137.142857-76.571429 248t-200 160q-4.571429 1.714286-8.571428-1.714286t-3.428572-8.571428q4-27.428571 5.714286-37.714286 2.285714-18.285714 3.428571-26.857143 0.571429-5.142857 5.142858-6.857143 90.857143-46.285714 146-133.714286t55.142857-192.571428q0-102.857143-52-188.857143T684.571429 116t-192.571429-42.285714q-70.857143 4-135.428571 34.857143T246 188.857143t-73.142857 115.428571T146.285714 441.714286q0.571429 105.142857 56.571429 192.285714T349.714286 766.285714q4 1.714286 5.142857 6.857143 1.714286 12 3.428571 25.714286 0.571429 5.142857 2.857143 18.571428t3.428572 20.285715q0.571429 5.142857-3.714286 8.571428t-8.857143 1.142857q-84.571429-33.142857-149.142857-96.857142t-99.142857-150.857143T73.714286 417.142857q4-81.714286 37.714285-156.285714t88.285715-129.714286T328.285714 41.142857 484 1.142857q93.714286-5.714286 180.285714 26.571429t149.142857 91.714285 100 143.142858T950.857143 438.857143z m-309.714286-18.285714q0 53.142857-37.428571 90.571428T513.142857 548.571429t-90.571428-37.428572T385.142857 420.571429t37.428572-90.571429T513.142857 292.571429t90.571429 37.428571T641.142857 420.571429z m164.571429 18.285714q0 69.714286-30.571429 130.571428T691.428571 670.857143q-4.571429 3.428571-9.142857 1.142857t-5.714285-8q-3.428571-29.714286-16.571429-52.571429-4-5.714286 1.714286-11.428571 33.142857-30.857143 52-72.571429t18.857143-88.571428q0-63.428571-33.428572-116.571429T609.142857 241.428571 488 220.571429q-76 8.571429-130.857143 64.571428T294.857143 417.142857q-5.714286 52.571429 13.428571 100.571429t56.285715 82.285714q5.714286 5.714286 1.714285 11.428571-13.714286 23.428571-16.571428 53.142858-1.142857 5.142857-5.714286 7.428571t-9.142857-1.142857q-54.285714-42.285714-84.857143-104.571429T220.571429 432.571429q1.714286-74.857143 39.428571-139.428572t101.142857-103.714286T498.857143 146.857143q82.285714-4 153.142857 34.285714t112.285714 107.142857T805.714286 438.857143z\"  ></path></symbol><symbol id=\"icon-power-off\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 512q0 89.142857-34.857143 170.285714t-93.714286 140-140 93.714286-170.285714 34.857143-170.285714-34.857143-140-93.714286-93.714286-140T73.142857 512q0-104 46-196T248.571429 161.714286q24.571429-18.285714 54.571428-14.285715t47.714286 28.571429q18.285714 24 14 54T336.571429 278.285714q-56 42.285714-86.571429 103.428572T219.428571 512q0 59.428571 23.142858 113.428571T305.142857 718.857143t93.428572 62.571428T512 804.571429t113.428571-23.142858T718.857143 718.857143t62.571428-93.428572T804.571429 512q0-69.142857-30.571429-130.285714T687.428571 278.285714q-24-18.285714-28.285714-48.285714T673.142857 176q17.714286-24.571429 48-28.571429t54.285714 14.285715q83.428571 62.285714 129.428572 154.285714t46 196zM585.142857 73.142857v365.714286q0 29.714286-21.714286 51.428571t-51.428571 21.714286-51.428571-21.714286-21.714286-51.428571V73.142857q0-29.714286 21.714286-51.428571t51.428571-21.714286 51.428571 21.714286 21.714286 51.428571z\"  ></path></symbol><symbol id=\"icon-qq\" viewBox=\"0 0 1024 1024\"><path d=\"M154.285714 460.571429q-4.571429-10.857143-4.571428-29.714286 0-11.428571 6.285714-28t13.714286-25.714286q-0.571429-12.571429 4.285714-30.285714t12.857143-24.571429q0-79.428571 52.857143-164.857143T364 37.714286Q443.428571 0 549.142857 0q76 0 152 31.428571 28 12 51.428572 27.428572t40.571428 32 31.428572 38.857143 24 42.285714 18.571428 48.285714T881.714286 271.428571t12.571428 56l0.571429 2.857143q31.428571 47.428571 31.428571 85.714286 0 8-5.142857 22.857143t-5.142857 21.714286q0 0.571429 0.857143 2t2 2.857142 1.142857 2q44 65.142857 68.857143 122.571429T1013.714286 709.142857q0 24.571429-11.142857 57.142857t-31.714286 32.571429q-5.142857 0-11.142857-4.285714t-10.857143-10-10.857143-14.857143-9.142857-15.142857-7.714286-14.857143-5.142857-10q-0.571429-0.571429-1.714286-0.571429l-2.857143 2.285714q-33.714286 88-75.428571 127.428572 11.428571 11.428571 35.142857 22t39.428572 23.714286 20.285714 37.142857q-1.142857 2.285714-2.285714 9.142857t-4 10.285714q-36.571429 55.428571-172.571429 55.428572-30.285714 0-63.142857-5.142858t-56-11.428571-59.714286-17.142857q-8.571429-2.857143-13.142857-4-8-2.285714-26.285714-2.571429t-22.857143-0.857143q-23.428571 25.714286-72.857143 37.142858T341.714286 1024q-20 0-39.428572-0.857143t-53.142857-5.142857-57.714286-11.714286-42.571428-22.857143-18.571429-36.571428q0-22.857143 5.714286-34t23.428571-27.714286q6.285714-1.142857 23.142858-7.428571t28.285714-6.857143q2.285714 0 8-1.142857 1.142857-1.142857 1.142857-2.285715l-1.142857-1.714285q-27.428571-6.285714-61.714286-60.285715T115.428571 716l-2.857142-1.714286q-2.285714 0-6.857143 11.428572-10.285714 23.428571-31.142857 42.571428T30.285714 789.714286h-0.571428q-2.285714 0-3.428572-2.571429t-2.857143-3.142857q-13.142857-30.857143-13.142857-57.142857 0-157.142857 144-266.285714z\"  ></path></symbol><symbol id=\"icon-question\" viewBox=\"0 0 1024 1024\"><path d=\"M612.22526 717.714286v137.142857q0 9.142857-6.857143 16t-16 6.857143H452.22526q-9.142857 0-16-6.857143t-6.857143-16v-137.142857q0-9.142857 6.857143-16t16-6.857143h137.142857q9.142857 0 16 6.857143t6.857143 16z m180.571429-342.857143q0 30.857143-8.857143 57.714286t-20 43.714285-31.428572 34-32.857143 24.857143-34.857142 20.285714q-23.428571 13.142857-39.142858 37.142858t-15.714285 38.285714q0 9.714286-6.857143 18.571428t-16 8.857143H449.939546q-8.571429 0-14.571429-10.571428T429.368117 626.285714v-25.714285q0-47.428571 37.142857-89.428572T548.22526 449.142857q33.714286-15.428571 48-32t14.285714-43.428571q0-24-26.571428-42.285715T522.510974 313.142857q-37.142857 0-61.714285 16.571429-20 14.285714-61.142858 65.714285-7.428571 9.142857-17.714285 9.142858-6.857143 0-14.285715-4.571429L273.939546 328.571429q-7.428571-5.714286-8.857143-14.285715t3.142857-16q91.428571-152 265.142857-152 45.714286 0 92 17.714286t83.428572 47.428571 60.571428 72.857143 23.428572 90.571429z\"  ></path></symbol><symbol id=\"icon-qrcode\" viewBox=\"0 0 1024 1024\"><path d=\"M329.142857 658.285714v73.142857H256v-73.142857h73.142857z m0-438.857143v73.142858H256V219.428571h73.142857z m438.857143 0v73.142858h-73.142857V219.428571h73.142857zM182.857143 804h219.428571v-218.857143H182.857143v218.857143z m0-438.285714h219.428571V146.285714H182.857143v219.428572z m438.857143 0h219.428571V146.285714H621.714286v219.428572zM475.428571 512v365.714286H109.714286V512h365.714285z m292.571429 292.571429v73.142857h-73.142857v-73.142857h73.142857z m146.285714 0v73.142857h-73.142857v-73.142857h73.142857z m0-292.571429v219.428571h-219.428571v-73.142857H621.714286v219.428572H548.571429V512h219.428571v73.142857h73.142857V512h73.142857zM475.428571 73.142857v365.714286H109.714286V73.142857h365.714285z m438.857143 0v365.714286H548.571429V73.142857h365.714285z\"  ></path></symbol><symbol id=\"icon-quora\" viewBox=\"0 0 1024 1024\"><path d=\"M717.142857 449.714286q0-181.714286-60-271.142857T468.571429 89.142857q-126.857143 0-186.285715 89.714286T222.857143 449.714286q0 180.571429 59.428571 269.428571T468.571429 808q42.285714 0 74.857142-9.714286-12.571429-24.571429-22.285714-41.714285t-25.142857-37.142858-30.571429-32.285714-36-20.571428T385.142857 658.285714q-26.285714 0-45.142857 9.142857l-28-55.428571q60-52 157.714286-52 75.428571 0 123.142857 30.857143t86 88.571428q38.285714-85.142857 38.285714-229.714285z m222.857143 361.142857h66.857143q1.714286 15.428571-1.142857 38.285714t-15.142857 54.285714-33.142858 57.428572-61.142857 44.571428T803.428571 1024q-40.571429 0-74.571428-10.857143t-60.285714-32-45.142858-44.571428-37.714285-54.857143q-55.428571 15.428571-117.142857 15.428571-85.714286 0-167.142858-33.142857t-144.571428-90.571429-101.714286-142.285714T16.571429 449.714286q0-97.142857 38.571428-182.571429T157.142857 124 302 33.142857 468.571429 0q69.142857 0 136.285714 20.571429t124 60.571428 100.571428 94 68.285715 125.142857 24.571428 149.428572q0 108.571429-46 198.571428T751.428571 799.428571q26.857143 40 53.428572 60.857143T864.571429 881.142857q34.857143 0 53.714285-21.428571t21.714286-48.857143z\"  ></path></symbol><symbol id=\"icon-question-circle-o\" viewBox=\"0 0 1024 1024\"><path d=\"M576 685.714286v91.428571q0 8-5.142857 13.142857t-13.142857 5.142857H466.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-91.428571q0-8 5.142857-13.142857t13.142857-5.142858h91.428572q8 0 13.142857 5.142858t5.142857 13.142857z m146.285714-283.428572q0 28.571429-8.571428 51.428572t-26 39.428571-29.714286 25.142857-34 20.571429q-18.285714 10.285714-26.571429 16t-14.857142 13.714286-6.571429 16.571428v18.285714q0 8-5.142857 13.142858t-13.142857 5.142857H466.285714q-8 0-13.142857-5.142857t-5.142857-13.142858v-38.857142q0-20 6-36.857143t13.714286-27.142857 22.285714-20.285715 23.428571-14.571428 25.428572-12q30.285714-14.285714 42.857143-24.571429t12.571428-28q0-24-24.857143-40.857143T514.857143 343.428571q-32 0-54.285714 15.428572-16.571429 11.428571-45.714286 47.428571-5.142857 6.857143-14.285714 6.857143-6.285714 0-10.857143-3.428571l-61.714286-46.857143q-5.714286-4-6.857143-11.428572t2.857143-13.142857q69.714286-109.714286 199.428571-109.714285 73.714286 0 136.285715 51.142857T722.285714 402.285714zM512 146.285714q-74.285714 0-142 29.142857t-116.571429 78-78 116.571429T146.285714 512t29.142857 142 78 116.571429 116.571429 78 142 29.142857 142-29.142857 116.571429-78 78-116.571429 29.142857-142-29.142857-142-78-116.571429-116.571429-78T512 146.285714z m438.857143 365.714286q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-question-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M585.142857 786.285714v-109.714285q0-8-5.142857-13.142858t-13.142857-5.142857H457.142857q-8 0-13.142857 5.142857t-5.142857 13.142858v109.714285q0 8 5.142857 13.142857t13.142857 5.142858h109.714286q8 0 13.142857-5.142858t5.142857-13.142857z m146.285714-384q0-50.285714-31.714285-93.142857T620.571429 242.857143t-97.142858-23.428572q-138.857143 0-212 121.714286-8.571429 13.714286 4.571429 24l75.428571 57.142857q4 3.428571 10.857143 3.428572 9.142857 0 14.285715-6.857143 30.285714-38.857143 49.142857-52.571429 19.428571-13.714286 49.142857-13.714285 27.428571 0 48.857143 14.857142t21.428571 33.714286q0 21.714286-11.428571 34.857143t-38.857143 25.714286q-36 16-66 49.428571T438.857143 582.857143v20.571428q0 8 5.142857 13.142858t13.142857 5.142857h109.714286q8 0 13.142857-5.142857t5.142857-13.142858q0-10.857143 12.285714-28.285714T628.571429 546.857143q18.285714-10.285714 28-16.285714t26.285714-20 25.428571-27.428572 16-34.571428 7.142857-46.285715z m219.428572 109.714286q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-quote-left\" viewBox=\"0 0 1024 1024\"><path d=\"M475.428571 548.571429v219.428571q0 45.714286-32 77.714286t-77.714285 32H146.285714q-45.714286 0-77.714285-32T36.571429 768V365.714286q0-59.428571 23.142857-113.428572T122.285714 158.857143t93.428572-62.571429T329.142857 73.142857h36.571429q14.857143 0 25.714285 10.857143t10.857143 25.714286v73.142857q0 14.857143-10.857143 25.714286t-25.714285 10.857142h-36.571429q-60.571429 0-103.428571 42.857143t-42.857143 103.428572v18.285714q0 22.857143 16 38.857143t38.857143 16h128q45.714286 0 77.714285 32t32 77.714286z m512 0v219.428571q0 45.714286-32 77.714286t-77.714285 32h-219.428572q-45.714286 0-77.714285-32t-32-77.714286V365.714286q0-59.428571 23.142857-113.428572T634.285714 158.857143t93.428572-62.571429T841.142857 73.142857h36.571429q14.857143 0 25.714285 10.857143t10.857143 25.714286v73.142857q0 14.857143-10.857143 25.714286t-25.714285 10.857142h-36.571429q-60.571429 0-103.428571 42.857143t-42.857143 103.428572v18.285714q0 22.857143 16 38.857143t38.857143 16h128q45.714286 0 77.714285 32t32 77.714286z\"  ></path></symbol><symbol id=\"icon-quote-right\" viewBox=\"0 0 1024 1024\"><path d=\"M475.428571 182.857143v402.285714q0 59.428571-23.142857 113.428572T389.714286 792t-93.428572 62.571429T182.857143 877.714286h-36.571429q-14.857143 0-25.714285-10.857143t-10.857143-25.714286v-73.142857q0-14.857143 10.857143-25.714286t25.714285-10.857143h36.571429q60.571429 0 103.428571-42.857142t42.857143-103.428572v-18.285714q0-22.857143-16-38.857143t-38.857143-16H146.285714q-45.714286 0-77.714285-32T36.571429 402.285714V182.857143q0-45.714286 32-77.714286t77.714285-32h219.428572q45.714286 0 77.714285 32t32 77.714286z m512 0v402.285714q0 59.428571-23.142857 113.428572T901.714286 792t-93.428572 62.571429T694.857143 877.714286h-36.571429q-14.857143 0-25.714285-10.857143t-10.857143-25.714286v-73.142857q0-14.857143 10.857143-25.714286t25.714285-10.857143h36.571429q60.571429 0 103.428571-42.857142t42.857143-103.428572v-18.285714q0-22.857143-16-38.857143t-38.857143-16h-128q-45.714286 0-77.714285-32t-32-77.714286V182.857143q0-45.714286 32-77.714286t77.714285-32h219.428572q45.714286 0 77.714285 32t32 77.714286z\"  ></path></symbol><symbol id=\"icon-ra\" viewBox=\"0 0 1024 1024\"><path d=\"M10.857143 499.428571q4.571429-124 66.285714-232t174.285714-181.714285h2.857143q0 0.571429-0.571428 1.714285-4.571429 4.571429-16 19.142858T208 150.285714t-34.285714 63.142857T148.285714 290.857143t-8 86 22.285715 90T224.571429 554.857143q28.571429 28.571429 58.285714 39.714286t51.714286 6.571428 39.714285-13.428571 26.857143-18.571429l9.142857-9.142857q22.285714-29.142857 30.285715-66.571429t3.714285-70-12-61.142857-15.142857-45.714285l-8-16.571429q-5.714286-14.285714-17.428571-28.285714t-24.571429-23.428572T342.285714 231.428571t-20-10.857142l-7.428571-3.428572 59.428571-65.714286q22.285714 9.714286 44.571429 29.714286t33.714286 34.857143l10.857142 15.428571q0.571429-27.428571-10.571428-59.142857T429.714286 122.285714l-11.428572-17.714285L510.285714 0l91.428572 103.428571q-18.857143 26.285714-30 58.571429T558.857143 213.714286l-2.285714 18.857143q12.571429-21.142857 35.142857-41.428572T630.285714 161.142857l16-9.714286 58.857143 65.714286q-25.142857 8-48.571428 28.571429t-34.285715 37.142857l-10.857143 16.571428q-17.714286 32-27.428571 76.285715t-4 97.142857 32.571429 89.428571q18.857143 25.714286 44.285714 34.571429t48.571428 3.142857 43.428572-15.142857T781.714286 565.714286l12-9.142857q34.285714-30.285714 55.142857-65.714286t27.714286-69.428572 5.714285-69.428571-10.285714-67.428571-21.142857-61.428572-26-53.142857-25.714286-41.142857T779.428571 101.714286l-7.428571-9.714286q-8-7.428571-4-7.428571l5.714286 1.714285q22.857143 16.571429 35.714285 26.285715t35.428572 28.571428 36.571428 33.142857 33.428572 37.142857 31.714286 44 26 50.285715 21.714285 58.857143 13.428572 66.857142 6 77.714286q1.714286 148-61.714286 265.714286t-178.285714 183.428571-260.571429 65.714286q-105.714286 0-200.571428-42.285714t-162-113.142857-105.142858-167.428572T10.857143 499.428571z\"  ></path></symbol><symbol id=\"icon-ravelry\" viewBox=\"0 0 1243 1024\"><path d=\"M653.142857 990.285714q-3.428571-0.571429-6.285714-2.285714-7.428571-4.571429-20.571429-13.142857t-49.142857-37.142857-66.571428-59.714286-64-80T395.428571 699.428571q-9.714286-1.714286-100-21.142857 37.714286 121.714286 134.285715 206.857143t223.428571 105.142857z m-366.285714-346.285714l96 16q-14.285714-43.428571-23.428572-95.714286T348.571429 481.142857l-2.285715-30.285714q-48 46.857143-69.142857 128 2.857143 37.142857 9.714286 65.142857z m62.857143-348q-24.571429 36.571429-44 84.571429 25.142857-26.285714 42.285714-38.857143z m821.142857 248q0-92-35.428572-175.428571t-95.714285-144T896.571429 128.285714 722.857143 92.571429q-84 0-160.571429 30T425.142857 207.428571q-17.142857 33.142857-25.714286 91.428572 34.285714-29.142857 81.714286-47.714286t90.571429-24.571428 81.714285-7.714286 62 0.571428l22.857143 1.714286q18.857143 0.571429 30.285715 8.857143t14 18.857143 3.714285 21.142857-0.571428 16.285714q-72-6.285714-130-0.285714t-104.571429 24.857143T469.714286 351.714286 394.857143 408q2.285714 20.571429 6.571428 52.857143t20.285715 101.714286 35.428571 102.571428q70.285714 3.428571 141.428572-8.285714T721.142857 626.285714t92.857143-38.285714 62.571429-33.714286l21.142857-13.714285q12.571429-9.142857 22.571428-11.714286t17.428572 2.857143 9.714285 19.714285q8 55.428571-22.285714 69.142858-118.857143 55.428571-266.857143 76.571428-77.142857 11.428571-181.142857 9.142857 23.428571 54.857143 62.857143 100.857143t78.285714 72.571429 74.571429 45.142857T750.857143 949.714286l22.285714 6.857143q81.714286 13.142857 150.285714-8.571429 111.428571-56.571429 179.428572-165.142857t68-238.857143z m42.285714-21.142857q-8 77.142857-22.857143 121.142857-40 118.857143-103.714285 198T904.571429 986.857143q-27.428571 18.857143-46.857143 25.142857-41.142857 14.857143-93.142857 9.142857-20.571429 1.714286-41.714286 1.714286-161.714286 0-288.285714-98.857143T265.714286 671.428571q-0.571429 0-2.285715-0.285714t-2.857142-0.285714q-3.428571 28.571429 1.428571 64.285714t14.857143 65.714286 20.571428 56T315.428571 897.714286l8 14.857143q4.571429 6.857143 30.857143 46.857142-40.571429-21.714286-71.142857-60.857142t-44.857143-80-22.571428-78.285715T205.714286 678.857143l-1.142857-24q-2.857143-1.142857-19.142858-7.142857t-27.714285-10.285715-30.285715-11.714285-32.857142-14.285715-28.571429-14.571428-24.285714-15.428572T27.428571 566.857143q10.857143 5.714286 28.857143 14.571428t64.571429 26 83.142857 21.714286l1.142857-18.285714q6.285714-85.142857 53.714286-165.714286 23.428571-115.428571 100.571428-208.571428 16-65.714286 46.285715-122.285715 8.571429-16 18.285714-25.714285t28-18.285715q90.285714-42.285714 173.428571-59.428571t172.571429-6.285714 175.142857 55.428571q125.714286 65.714286 190.285714 192t49.714286 270.857143z\"  ></path></symbol><symbol id=\"icon-rebel\" viewBox=\"0 0 1024 1024\"><path d=\"M10.857143 499.428571q4.571429-124 66.285714-232t174.285714-181.714285h2.857143q0 0.571429-0.571428 1.714285-4.571429 4.571429-16 19.142858T208 150.285714t-34.285714 63.142857T148.285714 290.857143t-8 86 22.285715 90T224.571429 554.857143q28.571429 28.571429 58.285714 39.714286t51.714286 6.571428 39.714285-13.428571 26.857143-18.571429l9.142857-9.142857q22.285714-29.142857 30.285715-66.571429t3.714285-70-12-61.142857-15.142857-45.714285l-8-16.571429q-5.714286-14.285714-17.428571-28.285714t-24.571429-23.428572T342.285714 231.428571t-20-10.857142l-7.428571-3.428572 59.428571-65.714286q22.285714 9.714286 44.571429 29.714286t33.714286 34.857143l10.857142 15.428571q0.571429-27.428571-10.571428-59.142857T429.714286 122.285714l-11.428572-17.714285L510.285714 0l91.428572 103.428571q-18.857143 26.285714-30 58.571429T558.857143 213.714286l-2.285714 18.857143q12.571429-21.142857 35.142857-41.428572T630.285714 161.142857l16-9.714286 58.857143 65.714286q-25.142857 8-48.571428 28.571429t-34.285715 37.142857l-10.857143 16.571428q-17.714286 32-27.428571 76.285715t-4 97.142857 32.571429 89.428571q18.857143 25.714286 44.285714 34.571429t48.571428 3.142857 43.428572-15.142857T781.714286 565.714286l12-9.142857q34.285714-30.285714 55.142857-65.714286t27.714286-69.428572 5.714285-69.428571-10.285714-67.428571-21.142857-61.428572-26-53.142857-25.714286-41.142857T779.428571 101.714286l-7.428571-9.714286q-8-7.428571-4-7.428571l5.714286 1.714285q22.857143 16.571429 35.714285 26.285715t35.428572 28.571428 36.571428 33.142857 33.428572 37.142857 31.714286 44 26 50.285715 21.714285 58.857143 13.428572 66.857142 6 77.714286q1.714286 148-61.714286 265.714286t-178.285714 183.428571-260.571429 65.714286q-105.714286 0-200.571428-42.285714t-162-113.142857-105.142858-167.428572T10.857143 499.428571z\"  ></path></symbol><symbol id=\"icon-random\" viewBox=\"0 0 1024 1024\"><path d=\"M380.571429 274.857143q-34.285714 52.571429-78.285715 156-12.571429-25.714286-21.142857-41.428572T258 353.142857t-29.142857-32.285714-36-20T146.285714 292.571429H18.285714q-8 0-13.142857-5.142858t-5.142857-13.142857V164.571429q0-8 5.142857-13.142858t13.142857-5.142857h128q142.857143 0 234.285715 128.571429z m643.428571 456.571428q0 8-5.142857 13.142858l-182.857143 182.857142q-5.142857 5.142857-13.142857 5.142858-7.428571 0-12.857143-5.428572t-5.428571-12.857143v-109.714285q-18.285714 0-48.571429 0.285714t-46.285714 0.571428-41.714286-0.571428-40.571429-2.857143-36.571428-6-36-10.571429-33.142857-16.285714-33.714286-22.857143-31.428571-30.571428-32-39.714286q33.714286-53.142857 77.714285-156 12.571429 25.714286 21.142857 41.428571t23.142858 36.285715 29.142857 32.285714 36 20 46.571428 8.285714h146.285715V548.571429q0-8 5.142857-13.142858t13.142857-5.142857q6.857143 0 13.714286 5.714286l182.285714 182.285714q5.142857 5.142857 5.142857 13.142857z m0-512q0 8-5.142857 13.142858l-182.857143 182.857142q-5.142857 5.142857-13.142857 5.142858-7.428571 0-12.857143-5.428572T804.571429 402.285714V292.571429h-146.285715q-27.428571 0-49.714285 8.571428t-39.428572 25.714286-29.142857 35.142857-25.714286 44.285714q-18.285714 35.428571-44.571428 97.714286-16.571429 37.714286-28.285715 63.428571t-30.857142 60-36.571429 57.142858-42.285714 47.428571-51.428572 39.142857-60.857143 24-73.142857 9.428572H18.285714q-8 0-13.142857-5.142858t-5.142857-13.142857v-109.714285q0-8 5.142857-13.142858t13.142857-5.142857h128q27.428571 0 49.714286-8.571428t39.428571-25.714286 29.142858-35.142857 25.714285-44.285714q18.285714-35.428571 44.571429-97.714286 16.571429-37.714286 28.285714-63.428572t30.857143-60 36.571429-57.142857 42.285714-47.428571 51.428571-39.142857 60.857143-24 73.142857-9.428572h146.285715V36.571429q0-8 5.142857-13.142858t13.142857-5.142857q6.857143 0 13.714286 5.714286l182.285714 182.285714q5.142857 5.142857 5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-reddit-square\" viewBox=\"0 0 1024 1024\"><path d=\"M609.714286 645.142857q7.428571 7.428571 0 14.857143-30.285714 30.285714-97.714286 30.285714t-97.714286-30.285714q-7.428571-7.428571 0-14.857143 2.857143-3.428571 7.428572-3.428571t7.428571 3.428571q24 24 82.857143 24t82.857143-24q2.857143-3.428571 7.428571-3.428571t7.428572 3.428571zM459.428571 556q0 17.714286-13.142857 30.857143t-30.857143 13.142857-30.857142-13.142857-13.142858-30.857143q0-18.285714 12.857143-31.142857T415.428571 512t31.142858 12.857143T459.428571 556z m193.142858 0q0 17.714286-13.142858 30.857143t-30.857142 13.142857-30.857143-13.142857-13.142857-30.857143q0-18.285714 12.857142-31.142857T608.571429 512t31.142857 12.857143T652.571429 556z m122.857142-58.857143q0-24-17.142857-41.142857t-41.714285-17.142857q-24 0-41.714286 17.714286-64.571429-44.571429-152.571429-46.857143l30.857143-138.857143 97.714286 22.285714q0.571429 18.285714 13.428571 30.857143t30.571429 12.571429q18.285714 0 31.142857-12.857143T738.857143 292.571429t-12.857143-31.142858T694.857143 248.571429q-27.428571 0-39.428572 24.571428l-108-24q-9.714286-2.857143-12 7.428572l-34.285714 153.142857q-88 3.428571-151.428571 47.428571-17.142857-18.285714-42.285715-18.285714-24.571429 0-41.714285 17.142857t-17.142857 41.142857q0 17.142857 9.142857 31.428572t24 21.714285q-2.857143 14.285714-2.857143 27.428572 0 69.714286 68.571428 119.142857t165.142858 49.428571q97.142857 0 165.714285-49.428571t68.571429-119.142857q0-14.285714-3.428572-28 14.285714-7.428571 23.142858-21.428572T775.428571 497.142857z m175.428572-259.428571v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-reddit-alien\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 483.428571q0 33.142857-16.857143 60.285715T961.714286 585.142857q6.857143 26.285714 6.857143 54.857143 0 88.571429-60.857143 164T741.714286 923.142857 513.142857 966.857143t-228.285714-43.714286-165.714286-119.142857T58.285714 640q0-26.857143 6.285715-53.714286-29.142857-14.285714-46.857143-42T0 483.428571q0-46.857143 33.142857-80.285714T113.714286 369.714286q48.571429 0 82.857143 36 124.571429-86.857143 294.285714-92.571429L557.142857 15.428571q1.714286-7.428571 8.571429-12t14.857143-2.857142l210.857142 46.285714q10.285714-21.142857 30.857143-34T867.428571 0q35.428571 0 60.571429 24.857143t25.142857 60.285714-25.142857 60.571429-60.571429 25.142857-60.285714-24.857143T782.285714 85.714286l-190.857143-42.285715-59.428571 269.714286q171.428571 5.142857 296.571429 91.428572 33.142857-34.857143 81.714285-34.857143 47.428571 0 80.571429 33.428571t33.142857 80.285714zM238.857143 597.142857q0 35.428571 24.857143 60.571429t60.285714 25.142857 60.571429-25.142857 25.142857-60.571429-25.142857-60.285714T324 512q-34.857143 0-60 25.142857t-25.142857 60z m462.857143 202.857143q6.285714-6.285714 6.285714-14.857143t-6.285714-14.857143q-5.714286-5.714286-14.285715-5.714285t-14.857142 5.714285q-23.428571 24-69.142858 35.428572t-91.428571 11.428571-91.428571-11.428571-69.142858-35.428572q-6.285714-5.714286-14.857142-5.714285t-14.285715 5.714285q-6.285714 5.714286-6.285714 14.571429t6.285714 15.142857q24.571429 24.571429 67.714286 38.857143t70 16.857143 52 2.571428 52-2.571428 70-16.857143 67.714286-38.857143z m-1.714286-117.142857q35.428571 0 60.285714-25.142857t24.857143-60.571429q0-34.857143-25.142857-60t-60-25.142857q-35.428571 0-60.571429 24.857143t-25.142857 60.285714 25.142857 60.571429 60.571429 25.142857z\"  ></path></symbol><symbol id=\"icon-recycle\" viewBox=\"0 0 1024 1024\"><path d=\"M477.714286 668l-8.571429 210.285714-1.142857 12.571429-240-16.571429q-20.571429-1.714286-38.285714-18t-26.857143-37.428571q-6.285714-15.428571-8.285714-31.428572t2.285714-37.142857 6.857143-31.428571 12.285714-36.571429 10.857143-30.285714q44.571429 6.857143 290.857143 16zM256.571429 333.142857l102.857142 216.571429-84-52.571429q-36 41.142857-63.714285 82.571429t-41.428572 71.428571-22.571428 54-10.571429 36l-2.285714 12L26.285714 549.142857q-9.714286-14.857143-10.285714-32t3.428571-26.857143l4.571429-10.285714q20-36 65.142857-107.428571L9.142857 323.428571z m703.428571 295.428572l-107.428571 205.142857q-6.857143 16.571429-20.857143 26.571428T806.857143 872l-10.285714 2.285714q-40.571429 4-125.142858 6.857143l4.571429 93.714286-131.428571-209.714286 120.571428-206.857143 4 98.857143q97.142857 9.142857 161.714286 2.857143t97.142857-18.857143zM511.428571 100.571429q-26.857143 36-151.428571 248.571428L178.857143 242.285714l-10.857143-6.857143L296.571429 32q11.428571-17.714286 34.285714-25.714286t45.714286-5.714285q13.714286 1.142857 27.714285 6.857142t24 12T452 38.285714t20.571429 19.714286 20.571428 22.571429 18.285714 20z m374.285715 175.428571l121.142857 207.428571q10.285714 21.142857 7.142857 43.428572t-15.714286 42.285714q-7.428571 11.428571-18.857143 21.142857t-21.714285 16-27.714286 12.571429-26.857143 9.142857-29.428571 8-26.285715 6.857143q-19.428571-41.142857-151.428571-249.142857l178.857143-111.428572z m-81.714286-129.142857l81.142857-47.428572-125.714286 213.142858-239.428571-11.428572 86.285714-49.142857q-19.428571-50.857143-42.857143-94.857143t-43.142857-70.571428-36.857143-45.714286T456.571429 14.285714l-9.714286-7.428571 231.428571 0.571428q17.714286-1.714286 33.142857 6t22.285715 16.285715l6.285714 8.571428q22.285714 34.857143 64 108.571429z\"  ></path></symbol><symbol id=\"icon-reddit\" viewBox=\"0 0 1024 1024\"><path d=\"M625.714286 666.857143q9.142857 9.142857 0 17.714286-35.428571 35.428571-113.714286 35.428571t-113.714286-35.428571q-9.142857-8.571429 0-17.714286 3.428571-3.428571 8.571429-3.428572t8.571428 3.428572q27.428571 28 96.571429 28 68.571429 0 96.571429-28 3.428571-3.428571 8.571428-3.428572t8.571429 3.428572zM450.285714 563.428571q0 21.142857-14.857143 36t-36 14.857143-36.285714-14.857143-15.142857-36q0-21.714286 15.142857-36.571428t36.285714-14.857143 36 15.142857 14.857143 36.285714z m225.714286 0q0 21.142857-15.142857 36t-36.285714 14.857143-36-14.857143-14.857143-36 14.857143-36.285714 36-15.142857 36.285714 14.857143 15.142857 36.571428z m143.428571-68.571428q0-28-20-48t-48.571428-20-49.142857 20.571428q-74.285714-51.428571-177.714286-54.857142l36-161.714286 114.285714 25.714286q0 21.142857 14.857143 36t36 14.857142 36.285714-15.142857T776.571429 256t-15.142858-36.285714T725.142857 204.571429q-30.857143 0-45.714286 28.571428l-126.285714-28q-10.857143-2.857143-14.285714 9.142857l-39.428572 178.285715q-102.857143 4-176.571428 55.428571-20-21.142857-49.714286-21.142857-28.571429 0-48.571428 20t-20 48q0 20 10.571428 36.571428t28.285714 25.142858q-3.428571 15.428571-3.428571 32 0 81.142857 80 138.857142t192.571429 57.714286q113.142857 0 193.142857-57.714286t80-138.857142q0-18.285714-4-32.571429 17.142857-8.571429 27.428571-24.857143t10.285714-36.285714z m204.571429 17.142857q0 104-40.571429 198.857143t-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0t198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-registered\" viewBox=\"0 0 1024 1024\"><path d=\"M595.428571 401.714286q0-50.285714-34.285714-69.142857-18.857143-10.285714-66.857143-10.285715H424v160.571429h92.571429q37.714286 0 58.285714-21.142857t20.571428-60z m29.714286 162.857143l117.142857 213.142857q4.571429 9.714286-0.571428 17.714285-4.571429 9.142857-15.428572 9.142858h-86.857143q-11.428571 0-16-9.714286l-110.857142-208.571429H424v200q0 8-5.142857 13.142857t-13.142857 5.142858H329.142857q-8 0-13.142857-5.142858t-5.142857-13.142857V237.714286q0-8 5.142857-13.142857t13.142857-5.142858h168q73.142857 0 108.571429 13.714286 48.571429 17.714286 76.571428 62.285714t28 102.857143q0 52.571429-24.285714 94.571429T620 555.428571q3.428571 5.714286 5.142857 9.142858zM512 91.428571q-85.714286 0-163.428571 33.428572t-134 89.714286-89.714286 134T91.428571 512t33.428572 163.428571 89.714286 134 134 89.714286 163.428571 33.428572 163.428571-33.428572 134-89.714286 89.714286-134 33.428572-163.428571-33.428572-163.428571-89.714286-134-134-89.714286T512 91.428571z m512 420.571429q0 104-40.571429 198.857143t-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0t198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-refresh\" viewBox=\"0 0 1024 1024\"><path d=\"M936.571429 603.428571q0 2.857143-0.571429 4-36.571429 153.142857-153.142857 248.285715T509.714286 950.857143q-83.428571 0-161.428572-31.428572T209.142857 829.714286l-73.714286 73.714285q-10.857143 10.857143-25.714285 10.857143t-25.714286-10.857143-10.857143-25.714285v-256q0-14.857143 10.857143-25.714286t25.714286-10.857143h256q14.857143 0 25.714285 10.857143t10.857143 25.714286-10.857143 25.714285l-78.285714 78.285715q40.571429 37.714286 92 58.285714t106.857143 20.571429q76.571429 0 142.857143-37.142858t106.285714-102.285714q6.285714-9.714286 30.285714-66.857143 4.571429-13.142857 17.142858-13.142857h109.714285q7.428571 0 12.857143 5.428572t5.428572 12.857142z m14.285714-457.142857v256q0 14.857143-10.857143 25.714286t-25.714286 10.857143h-256q-14.857143 0-25.714285-10.857143t-10.857143-25.714286 10.857143-25.714285l78.857142-78.857143Q626.857143 219.428571 512 219.428571q-76.571429 0-142.857143 37.142858T262.857143 358.857143q-6.285714 9.714286-30.285714 66.857143-4.571429 13.142857-17.142858 13.142857H101.714286q-7.428571 0-12.857143-5.428572T83.428571 420.571429v-4q37.142857-153.142857 154.285715-248.285715T512 73.142857q83.428571 0 162.285714 31.714286T814.285714 194.285714l74.285715-73.714285q10.857143-10.857143 25.714285-10.857143t25.714286 10.857143 10.857143 25.714285z\"  ></path></symbol><symbol id=\"icon-renren\" viewBox=\"0 0 1024 1024\"><path d=\"M720.571429 897.142857q-97.714286 53.714286-210.285715 53.714286-112 0-209.714285-53.714286 78.857143-49.714286 134.571428-120.571428T510.285714 623.428571q20 82.285714 75.714286 153.142858t134.571429 120.571428zM437.714286 81.142857v277.142857q0 144-72.285715 262.571429T176.571429 796Q73.142857 673.142857 73.142857 513.142857q0-106.857143 47.714286-199.714286T252 159.428571t185.714286-78.285714z m513.142857 432q0 160-103.428572 282.857143-116.571429-56.571429-188.857142-175.142857T586.285714 358.285714V81.142857q102.285714 17.142857 185.714286 78.285714t131.142857 154T950.857143 513.142857z\"  ></path></symbol><symbol id=\"icon-reorder\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 768v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-73.142857q0-14.857143 10.857143-25.714286t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z m0-292.571429v73.142858q0 14.857143-10.857143 25.714285t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143T73.142857 548.571429V475.428571q0-14.857143 10.857143-25.714285t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714285z m0-292.571428v73.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H109.714286q-14.857143 0-25.714286-10.857143T73.142857 256V182.857143q0-14.857143 10.857143-25.714286t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-repeat\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 146.285714v256q0 14.857143-10.857143 25.714286t-25.714286 10.857143h-256q-24 0-33.714285-22.857143-9.714286-22.285714 8-39.428571l78.857142-78.857143Q626.857143 219.428571 512 219.428571q-59.428571 0-113.428571 23.142858T305.142857 305.142857 242.571429 398.571429 219.428571 512t23.142858 113.428571T305.142857 718.857143t93.428572 62.571428T512 804.571429q68 0 128.571429-29.714286t102.285714-84q4-5.714286 13.142857-6.857143 8.571429 0 14.285714 5.142857l78.285715 78.857143q5.142857 4.571429 5.428571 11.714286t-4.285714 12.857143q-62.285714 75.428571-150.857143 116.857142T512 950.857143q-89.142857 0-170.285714-34.857143t-140-93.714286-93.714286-140T73.142857 512t34.857143-170.285714 93.714286-140 140-93.714286 170.285714-34.857143q84 0 162.571429 31.714286T814.285714 194.285714l74.285715-73.714285q16.571429-17.714286 40-8 22.285714 9.714286 22.285714 33.714285z\"  ></path></symbol><symbol id=\"icon-reply-all\" viewBox=\"0 0 1024 1024\"><path d=\"M365.714286 618.285714v40q0 24-22.285715 33.714286-7.428571 2.857143-14.285714 2.857143-15.428571 0-25.714286-10.857143L10.857143 391.428571Q0 380.571429 0 365.714286t10.857143-25.714286L303.428571 47.428571q16.571429-17.714286 40-8 22.285714 9.714286 22.285715 33.714286v39.428572L138.857143 340q-10.857143 10.857143-10.857143 25.714286t10.857143 25.714285z m658.285714 21.714286q0 33.142857-9.714286 76.285714t-22 78.857143-27.428571 71.428572-23.142857 51.714285l-11.428572 22.857143q-4.571429 9.714286-16 9.714286-3.428571 0-5.142857-0.571429-14.285714-4.571429-13.142857-19.428571 24.571429-228.571429-60.571429-322.857143-36.571429-40.571429-97.428571-63.142857T585.142857 514.857143v143.428571q0 24-22.285714 33.714286-7.428571 2.857143-14.285714 2.857143-15.428571 0-25.714286-10.857143L230.285714 391.428571q-10.857143-10.857143-10.857143-25.714285t10.857143-25.714286L522.857143 47.428571q16.571429-17.714286 40-8 22.285714 9.714286 22.285714 33.714286v149.714286q234.857143 16 342.285714 126.285714 96.571429 98.857143 96.571429 290.857143z\"  ></path></symbol><symbol id=\"icon-remove\" viewBox=\"0 0 1024 1024\"><path d=\"M851.428571 755.428571q0 22.857143-16 38.857143l-77.714285 77.714286q-16 16-38.857143 16t-38.857143-16l-168-168-168 168q-16 16-38.857143 16t-38.857143-16l-77.714285-77.714286q-16-16-16-38.857143t16-38.857142l168-168-168-168q-16-16-16-38.857143t16-38.857143l77.714285-77.714286q16-16 38.857143-16t38.857143 16l168 168 168-168q16-16 38.857143-16t38.857143 16l77.714285 77.714286q16 16 16 38.857143t-16 38.857143L667.428571 548.571429l168 168q16 16 16 38.857142z\"  ></path></symbol><symbol id=\"icon-rmb\" viewBox=\"0 0 1024 1024\"><path d=\"M559.250603 877.714286H460.964889q-7.428571 0-12.857143-5.142857t-5.428572-13.142858v-188.571428H278.107746q-7.428571 0-12.857143-5.142857t-5.428572-13.142857v-58.857143q0-7.428571 5.428572-12.857143t12.857143-5.428572h164.571428v-48.571428H278.107746q-7.428571 0-12.857143-5.142857T259.822031 508.571429V449.142857q0-7.428571 5.428572-12.857143T278.107746 430.857143h122.285714L216.964889 100.571429q-4.571429-9.142857 0-18.285715 5.714286-9.142857 16-9.142857h110.857142q10.857143 0 16.571429 10.285714l122.857143 242.857143q10.857143 21.714286 32 71.428572 5.714286-13.714286 17.428571-38.857143t15.714286-34.857143l109.142857-240q4.571429-10.857143 16.571429-10.857143h109.142857q9.714286 0 15.428571 9.142857 5.142857 8 0.571429 17.714286L620.39346 430.857143h122.857143q7.428571 0 12.857143 5.428571T761.536317 449.142857v59.428572q0 8-5.428571 13.142857t-12.857143 5.142857H577.536317v48.571428h165.714286q7.428571 0 12.857143 5.428572t5.428571 12.857143v58.857143q0 8-5.428571 13.142857t-12.857143 5.142857H577.536317v188.571428q0 7.428571-5.428571 12.857143T559.250603 877.714286z\"  ></path></symbol><symbol id=\"icon-resistance\" viewBox=\"0 0 1024 1024\"><path d=\"M10.857143 499.428571q4.571429-124 66.285714-232t174.285714-181.714285h2.857143q0 0.571429-0.571428 1.714285-4.571429 4.571429-16 19.142858T208 150.285714t-34.285714 63.142857T148.285714 290.857143t-8 86 22.285715 90T224.571429 554.857143q28.571429 28.571429 58.285714 39.714286t51.714286 6.571428 39.714285-13.428571 26.857143-18.571429l9.142857-9.142857q22.285714-29.142857 30.285715-66.571429t3.714285-70-12-61.142857-15.142857-45.714285l-8-16.571429q-5.714286-14.285714-17.428571-28.285714t-24.571429-23.428572T342.285714 231.428571t-20-10.857142l-7.428571-3.428572 59.428571-65.714286q22.285714 9.714286 44.571429 29.714286t33.714286 34.857143l10.857142 15.428571q0.571429-27.428571-10.571428-59.142857T429.714286 122.285714l-11.428572-17.714285L510.285714 0l91.428572 103.428571q-18.857143 26.285714-30 58.571429T558.857143 213.714286l-2.285714 18.857143q12.571429-21.142857 35.142857-41.428572T630.285714 161.142857l16-9.714286 58.857143 65.714286q-25.142857 8-48.571428 28.571429t-34.285715 37.142857l-10.857143 16.571428q-17.714286 32-27.428571 76.285715t-4 97.142857 32.571429 89.428571q18.857143 25.714286 44.285714 34.571429t48.571428 3.142857 43.428572-15.142857T781.714286 565.714286l12-9.142857q34.285714-30.285714 55.142857-65.714286t27.714286-69.428572 5.714285-69.428571-10.285714-67.428571-21.142857-61.428572-26-53.142857-25.714286-41.142857T779.428571 101.714286l-7.428571-9.714286q-8-7.428571-4-7.428571l5.714286 1.714285q22.857143 16.571429 35.714285 26.285715t35.428572 28.571428 36.571428 33.142857 33.428572 37.142857 31.714286 44 26 50.285715 21.714285 58.857143 13.428572 66.857142 6 77.714286q1.714286 148-61.714286 265.714286t-178.285714 183.428571-260.571429 65.714286q-105.714286 0-200.571428-42.285714t-162-113.142857-105.142858-167.428572T10.857143 499.428571z\"  ></path></symbol><symbol id=\"icon-road\" viewBox=\"0 0 1097 1024\"><path d=\"M634.857143 569.142857v-2.285714l-13.714286-182.857143q-0.571429-7.428571-6.285714-12.857143t-13.142857-5.428571H495.428571q-7.428571 0-13.142857 5.428571T476 384l-13.714286 182.857143v2.285714q-0.571429 6.857143 4.571429 11.428572t12 4.571428h139.428571q6.857143 0 12-4.571428t4.571429-11.428572z m433.714286 266.857143q0 41.714286-26.285715 41.714286h-402.285714q7.428571 0 12.571429-5.428572t4.571428-12.857143l-11.428571-146.285714q-0.571429-7.428571-6.285715-12.857143t-13.142857-5.428571H470.857143q-7.428571 0-13.142857 5.428571t-6.285715 12.857143l-11.428571 146.285714q-0.571429 7.428571 4.571429 12.857143t12.571428 5.428572H54.857143q-26.285714 0-26.285714-41.714286 0-30.857143 14.857142-66.285714L281.714286 173.142857q4.571429-10.857143 14.857143-18.857143t21.714285-8h193.714286q-7.428571 0-13.142857 5.428572T492.571429 164.571429l-8.571429 109.714285q-0.571429 8 4.571429 13.142857t12.571428 5.142858h94.857143q7.428571 0 12.571429-5.142858t4.571428-13.142857l-8.571428-109.714285q-0.571429-7.428571-6.285715-12.857143t-13.142857-5.428572h193.714286q11.428571 0 21.714286 8t14.857142 18.857143l238.285715 596.571429q14.857143 35.428571 14.857143 66.285714z\"  ></path></symbol><symbol id=\"icon-retweet\" viewBox=\"0 0 1097 1024\"><path d=\"M731.428571 859.428571q0 7.428571-5.428571 12.857143t-12.857143 5.428572H164.571429q-4.571429 0-7.714286-1.142857t-5.142857-4-3.142857-4.571429-1.714286-6.571429-0.571429-6.571428V512H36.571429q-14.857143 0-25.714286-10.857143T0 475.428571q0-13.714286 8.571429-23.428571l182.857142-219.428571q10.857143-12.571429 28-12.571429t28 12.571429l182.857143 219.428571q8.571429 9.714286 8.571429 23.428571 0 14.857143-10.857143 25.714286t-25.714286 10.857143H292.571429v219.428571h329.142857q9.142857 0 14.285714 6.285715l91.428571 109.714285q4 5.714286 4 12z m365.714286-237.714285q0 13.714286-8.571428 23.428571l-182.857143 219.428572q-11.428571 13.142857-28 13.142857t-28-13.142857l-182.857143-219.428572q-8.571429-9.714286-8.571429-23.428571 0-14.857143 10.857143-25.714286t25.714286-10.857143h109.714286V365.714286H475.428571q-9.142857 0-14.285714-6.857143L369.714286 249.142857q-4-5.142857-4-11.428571 0-7.428571 5.428571-12.857143T384 219.428571h548.571429q4.571429 0 7.714285 1.142858t5.142857 4 3.142858 4.571428 1.714285 6.571429 0.571429 6.571428v342.857143h109.714286q14.857143 0 25.714285 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-reply\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 640q0 94.857143-72.571429 257.714286-1.714286 4-6 13.714285t-7.714285 17.142858-7.428572 12.571428q-6.857143 9.714286-16 9.714286-8.571429 0-13.428571-5.714286t-4.857143-14.285714q0-5.142857 1.428571-15.142857t1.428572-13.428572q2.857143-38.857143 2.857143-70.285714 0-57.714286-10-103.428571t-27.714286-79.142858-45.714286-57.714285-60.285714-39.714286-76-24.285714-88-12.285715-100.285714-3.428571H365.714286v146.285714q0 14.857143-10.857143 25.714286t-25.714286 10.857143-25.714286-10.857143L10.857143 391.428571Q0 380.571429 0 365.714286t10.857143-25.714286L303.428571 47.428571q10.857143-10.857143 25.714286-10.857142t25.714286 10.857142 10.857143 25.714286v146.285714h128q407.428571 0 500 230.285715 30.285714 76.571429 30.285714 190.285714z\"  ></path></symbol><symbol id=\"icon-rocket\" viewBox=\"0 0 1024 1024\"><path d=\"M859.428571 256q0-22.857143-16-38.857143t-38.857142-16-38.857143 16-16 38.857143 16 38.857143 38.857143 16 38.857142-16 16-38.857143z m128-164.571429q0 142.285714-43.142857 246T799.428571 543.428571q-46.285714 45.714286-111.428571 100.571429l-11.428571 216.571429q-1.142857 9.142857-9.142858 14.857142l-219.428571 128q-4 2.285714-9.142857 2.285715-6.857143 0-13.142857-5.142857l-36.571429-36.571429q-7.428571-8-4.571428-18.285714l48.571428-157.714286-160.571428-160.571429-157.714286 48.571429q-1.714286 0.571429-5.142857 0.571429-8 0-13.142857-5.142858l-36.571429-36.571428q-9.714286-10.857143-2.857143-22.285714l128-219.428572q5.714286-8 14.857143-9.142857l216.571429-11.428571q54.857143-65.142857 100.571428-111.428572 107.428571-106.857143 204.571429-147.428571t246.285714-40.571429q8 0 13.714286 5.428572t5.714285 12.857142z\"  ></path></symbol><symbol id=\"icon-rotate-left\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 512q0 89.142857-34.857143 170.285714t-93.714286 140-140 93.714286-170.285714 34.857143q-98.285714 0-186.857143-41.428572T174.285714 792.571429q-4-5.714286-3.714285-12.857143t4.857142-11.714286l78.285715-78.857143q5.714286-5.142857 14.285714-5.142857 9.142857 1.142857 13.142857 6.857143 41.714286 54.285714 102.285714 84t128.571429 29.714286q59.428571 0 113.428571-23.142858T718.857143 718.857143t62.571428-93.428572T804.571429 512t-23.142858-113.428571T718.857143 305.142857 625.428571 242.571429 512 219.428571q-56 0-107.428571 20.285715T313.142857 297.714286l78.285714 78.857143q17.714286 17.142857 8 39.428571-9.714286 22.857143-33.714285 22.857143H109.714286q-14.857143 0-25.714286-10.857143T73.142857 402.285714V146.285714q0-24 22.857143-33.714285 22.285714-9.714286 39.428571 8l74.285715 73.714285q61.142857-57.714286 139.714285-89.428571T512 73.142857q89.142857 0 170.285714 34.857143t140 93.714286 93.714286 140 34.857143 170.285714z\"  ></path></symbol><symbol id=\"icon-rouble\" viewBox=\"0 0 1024 1024\"><path d=\"M742.285714 322.857143q0-57.142857-37.142857-92.571429t-97.714286-35.428571H424.571429v256h182.857142q60.571429 0 97.714286-35.428572t37.142857-92.571428z m135.428572 0q0 110.285714-72.285715 180T618.857143 572.571429H424.571429v67.428571h288.571428q8 0 13.142857 5.142857t5.142857 13.142857v73.142857q0 8-5.142857 13.142858t-13.142857 5.142857H424.571429v109.714285q0 8-5.428572 13.142858t-12.857143 5.142857H310.857143q-8 0-13.142857-5.142857t-5.142857-13.142858v-109.714285H164.571429q-8 0-13.142858-5.142857t-5.142857-13.142858v-73.142857q0-8 5.142857-13.142857t13.142858-5.142857h128v-67.428571H164.571429q-8 0-13.142858-5.142858t-5.142857-13.142857V469.142857q0-7.428571 5.142857-12.857143t13.142858-5.428571h128V91.428571q0-8 5.142857-13.142857t13.142857-5.142857h308q114.285714 0 186.571428 69.714286T877.714286 322.857143z\"  ></path></symbol><symbol id=\"icon-rotate-right\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 146.285714v256q0 14.857143-10.857143 25.714286t-25.714286 10.857143h-256q-24 0-33.714285-22.857143-9.714286-22.285714 8-39.428571l78.857142-78.857143Q626.857143 219.428571 512 219.428571q-59.428571 0-113.428571 23.142858T305.142857 305.142857 242.571429 398.571429 219.428571 512t23.142858 113.428571T305.142857 718.857143t93.428572 62.571428T512 804.571429q68 0 128.571429-29.714286t102.285714-84q4-5.714286 13.142857-6.857143 8.571429 0 14.285714 5.142857l78.285715 78.857143q5.142857 4.571429 5.428571 11.714286t-4.285714 12.857143q-62.285714 75.428571-150.857143 116.857142T512 950.857143q-89.142857 0-170.285714-34.857143t-140-93.714286-93.714286-140T73.142857 512t34.857143-170.285714 93.714286-140 140-93.714286 170.285714-34.857143q84 0 162.571429 31.714286T814.285714 194.285714l74.285715-73.714285q16.571429-17.714286 40-8 22.285714 9.714286 22.285714 33.714285z\"  ></path></symbol><symbol id=\"icon-rss\" viewBox=\"0 0 1024 1024\"><path d=\"M320.374394 768q0 45.714286-32 77.714286t-77.714285 32-77.714286-32-32-77.714286 32-77.714286 77.714286-32 77.714285 32 32 77.714286z m292.571429 70.285714q1.142857 16-9.714286 27.428572-10.285714 12-26.857143 12H499.231537q-14.285714 0-24.571428-9.428572t-11.428572-23.714285q-12.571429-130.857143-105.428571-223.714286T134.08868 515.428571q-14.285714-1.142857-23.714286-11.428571T100.945823 479.428571V402.285714q0-16.571429 12-26.857143 9.714286-9.714286 24.571428-9.714285h2.857143q91.428571 7.428571 174.857143 46T463.231537 515.428571q65.142857 64.571429 103.714286 148t46 174.857143z m292.571428 1.142857q1.142857 15.428571-10.285714 26.857143-10.285714 11.428571-26.285714 11.428572h-81.714286q-14.857143 0-25.428571-10T750.660109 843.428571q-6.857143-122.857143-57.714286-233.428571t-132.285714-192-192-132.285714T135.231537 227.428571q-14.285714-0.571429-24.285714-11.142857T100.945823 191.428571V109.714286q0-16 11.428571-26.285715 10.285714-10.285714 25.142857-10.285714h1.714286q149.714286 7.428571 286.571429 68.571429T668.945823 309.714286q106.857143 106.285714 168 243.142857t68.571428 286.571428z\"  ></path></symbol><symbol id=\"icon-rss-square\" viewBox=\"0 0 1024 1024\"><path d=\"M365.714286 731.428571q0-30.285714-21.428572-51.714285T292.571429 658.285714t-51.714286 21.428572T219.428571 731.428571t21.428572 51.714286T292.571429 804.571429t51.714285-21.428572T365.714286 731.428571z m200.571428 53.714286q-7.428571-133.142857-100.857143-226.571428T238.857143 457.714286q-8-0.571429-13.714286 5.142857t-5.714286 13.142857v73.142857q0 7.428571 4.857143 12.571429t12.285715 5.714285q88 6.285714 150.857142 69.142858t69.142858 150.857142q0.571429 7.428571 5.714285 12.285715t12.571429 4.857143h73.142857q7.428571 0 13.142857-5.714286t5.142857-13.714286z m219.428572 0.571429q-2.857143-88-32-170t-79.714286-148.571429-117.142857-117.142857-148.571429-79.714286T238.285714 238.285714q-8-0.571429-13.142857 5.142857-5.714286 5.714286-5.714286 13.142858v73.142857q0 7.428571 5.142858 12.571428t12.571428 5.714286q116.571429 4 216 63.714286T612.285714 570.857143t63.714286 216q0.571429 7.428571 5.714286 12.571428t12.571428 5.142858h73.142857q7.428571 0 13.142858-5.714286 6.285714-5.142857 5.142857-13.142857z m165.142857-548v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-ruble\" viewBox=\"0 0 1024 1024\"><path d=\"M742.285714 322.857143q0-57.142857-37.142857-92.571429t-97.714286-35.428571H424.571429v256h182.857142q60.571429 0 97.714286-35.428572t37.142857-92.571428z m135.428572 0q0 110.285714-72.285715 180T618.857143 572.571429H424.571429v67.428571h288.571428q8 0 13.142857 5.142857t5.142857 13.142857v73.142857q0 8-5.142857 13.142858t-13.142857 5.142857H424.571429v109.714285q0 8-5.428572 13.142858t-12.857143 5.142857H310.857143q-8 0-13.142857-5.142857t-5.142857-13.142858v-109.714285H164.571429q-8 0-13.142858-5.142857t-5.142857-13.142858v-73.142857q0-8 5.142857-13.142857t13.142858-5.142857h128v-67.428571H164.571429q-8 0-13.142858-5.142858t-5.142857-13.142857V469.142857q0-7.428571 5.142857-12.857143t13.142858-5.428571h128V91.428571q0-8 5.142857-13.142857t13.142857-5.142857h308q114.285714 0 186.571428 69.714286T877.714286 322.857143z\"  ></path></symbol><symbol id=\"icon-rub\" viewBox=\"0 0 1024 1024\"><path d=\"M742.285714 322.857143q0-57.142857-37.142857-92.571429t-97.714286-35.428571H424.571429v256h182.857142q60.571429 0 97.714286-35.428572t37.142857-92.571428z m135.428572 0q0 110.285714-72.285715 180T618.857143 572.571429H424.571429v67.428571h288.571428q8 0 13.142857 5.142857t5.142857 13.142857v73.142857q0 8-5.142857 13.142858t-13.142857 5.142857H424.571429v109.714285q0 8-5.428572 13.142858t-12.857143 5.142857H310.857143q-8 0-13.142857-5.142857t-5.142857-13.142858v-109.714285H164.571429q-8 0-13.142858-5.142857t-5.142857-13.142858v-73.142857q0-8 5.142857-13.142857t13.142858-5.142857h128v-67.428571H164.571429q-8 0-13.142858-5.142858t-5.142857-13.142857V469.142857q0-7.428571 5.142857-12.857143t13.142858-5.428571h128V91.428571q0-8 5.142857-13.142857t13.142857-5.142857h308q114.285714 0 186.571428 69.714286T877.714286 322.857143z\"  ></path></symbol><symbol id=\"icon-s15\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 621.714286v109.714285q0 96.571429-73.142857 163.428572v110.857143q0 8-5.142857 13.142857t-13.142858 5.142857h-36.571428q-8 0-13.142857-5.142857t-5.142857-13.142857v-67.428572q-36 12.571429-73.142858 12.571429H292.571429q-37.142857 0-73.142858-12.571429v62.857143q0 9.714286-5.428571 16.285714T201.142857 1024h-36.571428q-7.428571 0-12.857143-6.571429T146.285714 1001.142857v-106.285714q-73.142857-66.857143-73.142857-163.428572v-109.714285h877.714286zM402.285714 384q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m36.571429-36.571429q0 8-5.142857 13.142858t-13.142857 5.142857-13.142858-5.142857-5.142857-13.142858 5.142857-13.142857 13.142858-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571429-36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m73.142857 0q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571428-36.571429q0 8-5.142857 13.142857t-13.142857 5.142858-13.142858-5.142858-5.142857-13.142857 5.142857-13.142857 13.142858-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571429-36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142858 13.142857 5.142858 5.142857 13.142857z m621.714286 292.571428v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143V146.285714q0-60.571429 42.857143-103.428571T219.428571 0q61.714286 0 105.142858 44.571429 26.285714-10.857143 56-6.857143t53.142857 22.285714l12.571428-12.571429q6.285714-6.285714 12.571429 0l24 24q6.285714 6.285714 0 12.571429L303.428571 263.428571q-6.285714 6.285714-12.571428 0l-24-24q-6.285714-6.285714 0-12.571428l12.571428-12.571429q-20.571429-26.285714-23.142857-59.428571T269.714286 93.142857q-21.142857-20-50.285715-20-30.285714 0-51.714285 21.428572T146.285714 146.285714v365.714286h859.428572q8 0 13.142857 5.142857t5.142857 13.142857zM512 274.285714q0 8-5.142857 13.142857t-13.142857 5.142858-13.142857-5.142858-5.142858-13.142857 5.142858-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571429-36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142858 13.142857 5.142858 5.142857 13.142857z m-36.571428-36.571429q0 8-5.142857 13.142857t-13.142857 5.142857-13.142858-5.142857-5.142857-13.142857 5.142857-13.142857 13.142858-5.142857 13.142857 5.142857 5.142857 13.142857z m109.714286 36.571429q0 8-5.142858 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142858 13.142857 5.142858 5.142858 13.142857z m-36.571429-36.571429q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142858-13.142857 5.142858-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571429-36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142858 13.142857-5.142857 13.142857 5.142857 5.142857 13.142858z m109.714286 36.571428q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857 13.142857 5.142857 5.142857 13.142857z m-36.571428-36.571428q0 8-5.142858 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142858 13.142857-5.142857 13.142857 5.142857 5.142858 13.142858z m73.142857 0q0 8-5.142857 13.142857t-13.142858 5.142857-13.142857-5.142857-5.142857-13.142857 5.142857-13.142858 13.142857-5.142857 13.142858 5.142857 5.142857 13.142858z\"  ></path></symbol><symbol id=\"icon-save\" viewBox=\"0 0 1024 1024\"><path d=\"M287.026374 877.714286h438.857143v-219.428572H287.026374v219.428572z m512 0h73.142857V365.714286q0-8-5.714285-22t-11.428572-19.714286l-160.571428-160.571429q-5.714286-5.714286-19.428572-11.428571t-22.285714-5.714286v237.714286q0 22.857143-16 38.857143t-38.857143 16H268.74066q-22.857143 0-38.857143-16t-16-38.857143V146.285714H140.74066v731.428572h73.142857v-237.714286q0-22.857143 16-38.857143t38.857143-16h475.428571q22.857143 0 38.857143 16t16 38.857143v237.714286zM579.597803 347.428571V164.571429q0-7.428571-5.428572-12.857143T561.312089 146.285714H451.597803q-7.428571 0-12.857143 5.428572T433.312089 164.571429v182.857142q0 7.428571 5.428571 12.857143T451.597803 365.714286h109.714286q7.428571 0 12.857142-5.428572T579.597803 347.428571z m365.714286 18.285715v530.285714q0 22.857143-16 38.857143t-38.857143 16H122.454946q-22.857143 0-38.857143-16t-16-38.857143V128q0-22.857143 16-38.857143t38.857143-16h530.285714q22.857143 0 50.285714 11.428572t43.428572 27.428571l160 160q16 16 27.428571 43.428571t11.428572 50.285715z\"  ></path></symbol><symbol id=\"icon-rupee\" viewBox=\"0 0 1024 1024\"><path d=\"M713.617211 268.571429v58.285714q0 8-5.142857 13.142857t-13.142857 5.142857H599.331497q-13.142857 82.285714-73.714286 133.714286T367.902926 541.714286q95.428571 101.714286 262.285714 306.285714 8 9.142857 2.285714 19.428571-4.571429 10.285714-16.571428 10.285715H504.474354q-9.142857 0-14.285714-6.857143Q315.331497 661.142857 205.617211 544.571429q-5.142857-5.142857-5.142857-12.571429V459.428571q0-7.428571 5.428572-12.857142T218.760069 441.142857h64q75.428571 0 121.428571-24.571428T462.760069 345.142857H218.760069q-8 0-13.142858-5.142857t-5.142857-13.142857V268.571429q0-8 5.142857-13.142858t13.142858-5.142857h236q-32.571429-64.571429-153.142858-64.571428H218.760069q-7.428571 0-12.857143-5.428572T200.474354 167.428571V91.428571q0-8 5.142857-13.142857t13.142858-5.142857h475.428571q8 0 13.142857 5.142857t5.142857 13.142857v58.285715q0 8-5.142857 13.142857t-13.142857 5.142857H561.045783q26.857143 34.857143 36.571428 82.285714h97.714286q8 0 13.142857 5.142857t5.142857 13.142858z\"  ></path></symbol><symbol id=\"icon-safari\" viewBox=\"0 0 1024 1024\"><path d=\"M542.285714 510.285714q0 14.857143-9.428571 25.714286T509.142857 546.857143q-14.857143 0-25.714286-9.428572T472.571429 513.714286q0-14.857143 9.714285-25.714286t24-10.857143 25.142857 9.428572 10.857143 23.714285z m8.571429 33.142857l200-332q-5.142857 4.571429-38.571429 35.714286T640.571429 313.714286 562.571429 386.285714t-66.857143 63.142857T466.857143 478.857143l-199.428572 331.428571q4-4 38.285715-35.428571t72-66.571429 77.714285-72.571428 66.857143-63.428572 28.571429-28.857143z m369.714286-31.428571q0 114.857143-59.428572 212-1.714286-1.142857-9.714286-6.285714t-15.142857-9.428572-9.428571-4.285714q-7.428571 0-7.428572 7.428571 0 5.714286 33.714286 25.142858-42.285714 64-105.428571 108.857142T609.714286 908.571429l-9.142857-38.285715q-0.571429-5.714286-8.571429-5.714285-2.857143 0-4.571429 3.142857t-1.142857 5.428571l9.142857 38.857143q-41.142857 8.571429-83.428571 8.571429-113.714286 0-212.571429-60 0.571429-1.142857 7.428572-11.714286t12.285714-19.142857 5.428572-10.857143q0-7.428571-7.428572-7.428572-3.428571 0-9.714286 8.285715t-12.857142 19.714285-7.714286 13.142858q-64.571429-42.857143-109.714286-107.142858T114.285714 605.714286l39.428572-8.571429q5.714286-1.714286 5.714285-8.571428 0-2.857143-3.142857-4.571429t-6-1.142857l-38.857143 8.571428q-8-41.142857-8-79.428571 0-117.714286 62.285715-216.571429 1.142857 0.571429 10.571428 6.857143t17.142857 10.857143 10 4.571429q7.428571 0 7.428572-6.857143 0-3.428571-7.142857-8.857143T185.142857 289.714286l-11.428571-6.857143q44-64 108-108t139.428571-61.142857l8.571429 38.285714q1.142857 5.714286 8.571428 5.714286 2.857143 0 4.571429-3.142857t1.142857-6l-8.571429-37.714286q40.571429-7.428571 76.571429-7.428572 116.571429 0 216.571429 62.285715-22.285714 32-22.285715 37.142857 0 7.428571 6.857143 7.428571 6.285714 0 27.428572-36.571428 63.428571 42.857143 107.142857 106.285714T909.142857 417.714286l-32 6.857143q-5.714286 1.142857-5.714286 9.142857 0 2.857143 3.142858 4.571428t5.428571 1.142857l32.571429-7.428571q8 41.142857 8 80z m48.571428 0q0-93.142857-36.285714-177.714286T835.428571 188.571429t-145.714285-97.428572T512 54.857143t-177.714286 36.285714T188.571429 188.571429 91.142857 334.285714 54.857143 512t36.285714 177.714286T188.571429 835.428571t145.714285 97.428572 177.714286 36.285714 177.714286-36.285714 145.714285-97.428572 97.428572-145.714285 36.285714-177.714286z m54.857143 0q0 104-40.571429 198.857143t-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0t198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-scissors\" viewBox=\"0 0 1024 1024\"><path d=\"M548.571429 512q14.857143 0 25.714285 10.857143t10.857143 25.714286-10.857143 25.714285-25.714285 10.857143-25.714286-10.857143-10.857143-25.714285 10.857143-25.714286 25.714286-10.857143z m171.428571 36.571429l289.714286 227.428571q16 11.428571 14.285714 32-2.857143 20-20 29.142857l-73.142857 36.571429q-7.428571 4-16.571429 4-9.714286 0-17.714285-4.571429l-394.285715-221.142857-62.857143 37.714286q-4.571429 2.285714-6.857142 2.857143 8 28 5.714285 55.428571-4 44-32 84.285714T330.857143 902.857143q-75.428571 48-158.285714 48-77.714286 0-126.857143-44.571429-51.428571-48-45.142857-118.285714 4-43.428571 32-84t74.857142-70.857143q75.428571-48 158.857143-48 47.428571 0 86.285715 17.714286 5.142857-7.428571 12.571428-12.571429l69.714286-41.714285-69.714286-41.714286q-7.428571-5.142857-12.571428-12.571429-38.857143 17.714286-86.285715 17.714286-83.428571 0-158.857143-48-46.857143-30.285714-74.857142-70.857143T0.571429 309.142857q-2.857143-33.714286 8.857142-64.571428T45.714286 191.428571q48.571429-45.142857 126.857143-45.142857 82.857143 0 158.285714 48 47.428571 29.714286 75.428571 70.285715t32 84.571428q2.285714 27.428571-5.714285 55.428572 2.285714 0.571429 6.857142 2.857142l62.857143 37.714286 394.285715-221.142857q8-4.571429 17.714285-4.571429 9.142857 0 16.571429 4l73.142857 36.571429q17.142857 9.142857 20 29.142857 1.714286 20.571429-14.285714 32zM330.857143 400q26.285714-24 12-61.714286T282.285714 271.428571q-52.571429-33.714286-109.714285-33.714285-42.285714 0-64.571429 20.571428-26.285714 24-12 61.714286t60.571429 66.857143q52.571429 33.714286 109.714285 33.714286 42.285714 0 64.571429-20.571429z m-48.571429 425.714286q46.285714-29.142857 60.571429-66.857143t-12-61.714286q-22.285714-20.571429-64.571429-20.571428-57.142857 0-109.714285 33.714285-46.285714 29.142857-60.571429 66.857143t12 61.714286q22.285714 20.571429 64.571429 20.571428 57.142857 0 109.714285-33.714285z m101.714286-350.285715l54.857143 33.142858v-6.285715q0-20.571429 18.857143-32l8-4.571428-45.142857-26.857143-14.857143 14.857143q-1.714286 1.714286-5.714286 6.285714t-6.857143 6.857143q-1.142857 1.142857-2.285714 2t-1.714286 1.428571z m128 128l54.857143 18.285715 420.571428-329.142857-73.142857-36.571429-438.857143 246.285714v64.571429l-91.428571 54.857143 5.142857 4.571428q1.142857 1.142857 4 3.428572 2.285714 2.285714 6.285714 6.857143t6.285715 6.857142l14.857143 14.857143z m402.285714 237.714286l73.142857-36.571428-297.142857-233.142858-101.142857 78.857143q-1.142857 1.714286-7.428571 4z\"  ></path></symbol><symbol id=\"icon-scribd\" viewBox=\"0 0 1024 1024\"><path d=\"M930.285714 885.142857q0 50.857143-36 87.142857t-87.428571 36.285715-87.714286-36.285715T682.857143 885.142857q0-51.428571 36.285714-87.714286T806.857143 761.142857t87.428571 36.285714 36 87.714286z m-133.142857-160.571428q-65.714286 8.571429-110 58.571428T642.857143 900.571429q0 42.285714 18.857143 78.857142-83.428571 44.571429-216.571429 44.571429-62.285714 0-114.857143-12t-87.714285-31.142857T179.428571 937.142857t-43.428571-48.571428-25.428571-47.428572-13.428572-38-3.428571-22.571428q0-10.857143 2.571428-24.285715t10.571429-32 20.857143-33.142857 36.571428-24.857143 54-10.285714 53.714286 10 36 23.428571 20.285714 30.285715 10 28 2.285715 19.142857q0 19.428571-13.142858 46.285714 16 15.428571 46.857143 24t53.142857 9.714286l22.857143 0.571428q65.714286 0 108.571429-29.142857t42.857143-76q0-14.857143-5.142857-27.714285t-18-25.428572-28.285715-23.428571-42.285714-25.142857-53.428571-27.142858T386.285714 581.142857q-16-7.428571-24.571428-11.428571-66.285714-31.428571-106.857143-57.142857T184.857143 454.285714t-41.142857-71.714285T132 289.714286q0-44.571429 11.714286-85.714286t37.714285-78.571429 64.285715-65.142857 95.142857-44T467.428571 0q68.571429 0 125.714286 14.857143t94 38.285714 62.571429 53.714286 36.571428 60.285714 10.857143 59.142857q0 26.285714-8.571428 47.142857t-20.857143 33.142858-27.714286 20.571428-28 11.142857-22.285714 2.857143h-22.857143l-22.285714-2.857143-25.142858-8-23.428571-16-21.142857-26.285714-13.714286-40.285714-5.714286-55.714286q-8.571429-9.142857-33.714285-14.571429T475.428571 171.428571l-21.142857-0.571428q-38.857143 0-67.142857 17.714286T346.857143 228.571429t-12 43.428571q0 13.714286 2.857143 24.571429t13.714285 26.285714 30.285715 29.142857 55.428571 30.571429T522.857143 416q43.428571 14.285714 79.142857 30.571429t62.285714 31.714285 47.428572 33.714286 34.571428 34 23.428572 35.714286 15.142857 35.428571 8.285714 36.285714 3.428572 35.428572 0.571428 35.714286z\"  ></path></symbol><symbol id=\"icon-search-plus\" viewBox=\"0 0 1024 1024\"><path d=\"M619.266114 457.142857v36.571429q0 7.428571-5.428571 12.857143T600.9804 512H472.9804v128q0 7.428571-5.428571 12.857143T454.694686 658.285714h-36.571429q-7.428571 0-12.857143-5.428571T399.837543 640V512H271.837543q-7.428571 0-12.857143-5.428571T253.551829 493.714286v-36.571429q0-7.428571 5.428571-12.857143T271.837543 438.857143h128V310.857143q0-7.428571 5.428571-12.857143T418.123257 292.571429h36.571429q7.428571 0 12.857143 5.428571T472.9804 310.857143v128h128q7.428571 0 12.857143 5.428571t5.428571 12.857143z m73.142857 18.285714q0-105.714286-75.142857-180.857142T436.408971 219.428571 255.551829 294.571429 180.408971 475.428571t75.142858 180.857143T436.408971 731.428571t180.857143-75.142857T692.408971 475.428571z m292.571429 475.428572q0 30.285714-21.428571 51.714286T911.837543 1024q-30.857143 0-51.428572-21.714286l-196-195.428571q-102.285714 70.857143-228 70.857143-81.714286 0-156.285714-31.714286t-128.571428-85.714286-85.714286-128.571428T34.123257 475.428571t31.714286-156.285714 85.714286-128.571428 128.571428-85.714286T436.408971 73.142857t156.285715 31.714286 128.571428 85.714286 85.714286 128.571428T838.694686 475.428571q0 125.714286-70.857143 228l196 196q21.142857 21.142857 21.142857 51.428572z\"  ></path></symbol><symbol id=\"icon-search\" viewBox=\"0 0 1024 1024\"><path d=\"M692.49584 475.428571q0-105.714286-75.142857-180.857142T436.49584 219.428571 255.638697 294.571429 180.49584 475.428571t75.142857 180.857143T436.49584 731.428571t180.857143-75.142857T692.49584 475.428571z m292.571429 475.428572q0 29.714286-21.714286 51.428571t-51.428572 21.714286q-30.857143 0-51.428571-21.714286l-196-195.428571q-102.285714 70.857143-228 70.857143-81.714286 0-156.285714-31.714286t-128.571429-85.714286-85.714286-128.571428T34.210126 475.428571t31.714285-156.285714 85.714286-128.571428 128.571429-85.714286T436.49584 73.142857t156.285714 31.714286 128.571429 85.714286 85.714286 128.571428T838.781554 475.428571q0 125.714286-70.857143 228l196 196q21.142857 21.142857 21.142858 51.428572z\"  ></path></symbol><symbol id=\"icon-sellsy\" viewBox=\"0 0 1170 1024\"><path d=\"M857.142857 783.428571V364.571429q0-12-8.571428-20.571429t-20-8.571429h-53.142858q-11.428571 0-20 8.571429t-8.571428 20.571429v418.857142q0 11.428571 8.571428 20t20 8.571429h53.142858q11.428571 0 20-8.571429t8.571428-20z m-162.285714 0V480q0-11.428571-8.571429-20t-20-8.571429h-57.714285q-11.428571 0-20 8.571429t-8.571429 20v303.428571q0 11.428571 8.571429 20t20 8.571429h57.714285q11.428571 0 20-8.571429t8.571429-20z m-166.857143 0V538.285714q0-11.428571-8.571429-20t-20-8.571428H441.714286q-11.428571 0-20 8.571428t-8.571429 20v245.142857q0 11.428571 8.571429 20t20 8.571429h57.714285q11.428571 0 20-8.571429t8.571429-20z m-166.857143 0v-206.857142q0-11.428571-8.571428-20t-20-8.571429H274.857143q-11.428571 0-20 8.571429t-8.571429 20v206.857142q0 11.428571 8.571429 20t20 8.571429h57.714286q11.428571 0 20-8.571429t8.571428-20z m809.142857-83.428571q0 94.857143-67.428571 162.285714t-162.285714 67.428572H229.714286q-94.857143 0-162.285715-67.428572T0 700q0-66.285714 36-122.571429T132 492.571429q-5.714286-19.428571-5.714286-41.714286 0-64.571429 46-110.571429T282.857143 294.285714q58.285714 0 102.857143 38.285715 25.714286-104.571429 110.857143-171.428572t193.142857-66.857143q85.142857 0 157.142857 42T960.857143 250.285714t42 157.142857q0 37.714286-8 69.714286 77.142857 18.857143 126.285714 81.428572t49.142857 141.428571z\"  ></path></symbol><symbol id=\"icon-send\" viewBox=\"0 0 1024 1024\"><path d=\"M1008.00076 6.285714q18.857143 13.714286 15.428571 36.571429l-146.285714 877.714286q-2.857143 16.571429-18.285714 25.714285-8 4.571429-17.714286 4.571429-6.285714 0-13.714286-2.857143l-258.857142-105.714286-138.285715 168.571429q-10.285714 13.142857-28 13.142857-7.428571 0-12.571428-2.285714-10.857143-4-17.428572-13.428572T365.715046 987.428571v-199.428571l493.714285-605.142857-610.857142 528.571428-225.714286-92.571428q-21.142857-8-22.857143-31.428572-1.142857-22.857143 18.285714-33.714285L969.143617 5.142857q8.571429-5.142857 18.285714-5.142857 11.428571 0 20.571429 6.285714z\"  ></path></symbol><symbol id=\"icon-send-o\" viewBox=\"0 0 1024 1024\"><path d=\"M1008.001709 6.285714q18.857143 13.714286 15.428571 36.571429l-146.285714 877.714286q-2.857143 16.571429-18.285715 25.714285-8 4.571429-17.714285 4.571429-6.285714 0-13.714286-2.857143l-301.142857-122.857143-170.285714 186.857143q-10.285714 12-26.857143 12-8 0-13.142857-2.285714-10.857143-4-17.142858-13.428572t-6.285714-20.857143v-258.285714L22.858851 618.857143q-21.142857-8-22.857142-31.428572-1.714286-22.285714 18.285714-33.714285L969.144566 5.142857q20-12 38.857143 1.142857z m-195.428572 856.571429l126.285714-756-819.428571 472.571428 192 78.285715 493.142857-365.142857-273.142857 455.428571z\"  ></path></symbol><symbol id=\"icon-search-minus\" viewBox=\"0 0 1024 1024\"><path d=\"M619.266114 457.142857v36.571429q0 7.428571-5.428571 12.857143T600.9804 512H271.837543q-7.428571 0-12.857143-5.428571T253.551829 493.714286v-36.571429q0-7.428571 5.428571-12.857143T271.837543 438.857143h329.142857q7.428571 0 12.857143 5.428571t5.428571 12.857143z m73.142857 18.285714q0-105.714286-75.142857-180.857142T436.408971 219.428571 255.551829 294.571429 180.408971 475.428571t75.142858 180.857143T436.408971 731.428571t180.857143-75.142857T692.408971 475.428571z m292.571429 475.428572q0 30.285714-21.428571 51.714286T911.837543 1024q-30.857143 0-51.428572-21.714286l-196-195.428571q-102.285714 70.857143-228 70.857143-81.714286 0-156.285714-31.714286t-128.571428-85.714286-85.714286-128.571428T34.123257 475.428571t31.714286-156.285714 85.714286-128.571428 128.571428-85.714286T436.408971 73.142857t156.285715 31.714286 128.571428 85.714286 85.714286 128.571428T838.694686 475.428571q0 125.714286-70.857143 228l196 196q21.142857 21.142857 21.142857 51.428572z\"  ></path></symbol><symbol id=\"icon-server\" viewBox=\"0 0 1024 1024\"><path d=\"M73.142857 804.571429h585.142857v-73.142858H73.142857v73.142858z m0-292.571429h585.142857V438.857143H73.142857v73.142857z m896 256q0-22.857143-16-38.857143t-38.857143-16-38.857143 16-16 38.857143 16 38.857143 38.857143 16 38.857143-16 16-38.857143zM73.142857 219.428571h585.142857V146.285714H73.142857v73.142857z m896 256q0-22.857143-16-38.857142t-38.857143-16-38.857143 16-16 38.857142 16 38.857143 38.857143 16 38.857143-16 16-38.857143z m0-292.571428q0-22.857143-16-38.857143t-38.857143-16-38.857143 16-16 38.857143 16 38.857143 38.857143 16 38.857143-16 16-38.857143z m54.857143 475.428571v219.428572H0v-219.428572h1024z m0-292.571428v219.428571H0V365.714286h1024z m0-292.571429v219.428572H0V73.142857h1024z\"  ></path></symbol><symbol id=\"icon-share-alt-square\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 682.857143q0-50.285714-35.714286-86.285714T682.857143 560.571429q-48 0-82.857143 33.142857L462.285714 525.142857q1.142857-9.142857 1.142857-13.142857t-1.142857-13.142857l137.714286-68.571429q34.857143 33.142857 82.857143 33.142857 50.285714 0 86-36t35.714286-86.285714-35.714286-86T682.857143 219.428571t-86.285714 35.714286T560.571429 341.142857q0 4 1.142857 13.142857L424 422.857143q-35.428571-32.571429-82.857143-32.571429-50.285714 0-86 35.714286T219.428571 512t35.714286 86T341.142857 633.714286q47.428571 0 82.857143-32.571429l137.714286 68.571429q-1.142857 9.142857-1.142857 13.142857 0 50.285714 36 86t86.285714 35.714286 86-35.714286T804.571429 682.857143z m146.285714-445.142857v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-share-alt\" viewBox=\"0 0 1024 1024\"><path d=\"M768 585.142857q76 0 129.428571 53.428572T950.857143 768t-53.428572 129.428571T768 950.857143t-129.428571-53.428572T585.142857 768q0-6.857143 1.142857-19.428571l-205.714285-102.857143q-52.571429 49.142857-124.571429 49.142857-76 0-129.428571-53.428572T73.142857 512t53.428572-129.428571T256 329.142857q72 0 124.571429 49.142857l205.714285-102.857143q-1.142857-12.571429-1.142857-19.428571 0-76 53.428572-129.428571T768 73.142857t129.428571 53.428572T950.857143 256t-53.428572 129.428571T768 438.857143q-72 0-124.571429-49.142857L437.714286 492.571429q1.142857 12.571429 1.142857 19.428571t-1.142857 19.428571l205.714285 102.857143q52.571429-49.142857 124.571429-49.142857z\"  ></path></symbol><symbol id=\"icon-share-square-o\" viewBox=\"0 0 1024 1024\"><path d=\"M841.142857 565.142857v148q0 68-48.285714 116.285714T676.571429 877.714286H201.142857q-68 0-116.285714-48.285715T36.571429 713.142857V237.714286q0-68 48.285714-116.285715T201.142857 73.142857h145.714286q7.428571 0 12.857143 5.428572T365.142857 91.428571q0 15.428571-14.857143 18.285715-44 14.857143-76 34.285714-5.714286 2.285714-9.142857 2.285714H201.142857q-37.714286 0-64.571428 26.857143t-26.857143 64.571429v475.428571q0 37.714286 26.857143 64.571429t64.571428 26.857143h475.428572q37.714286 0 64.571428-26.857143t26.857143-64.571429v-122.285714q0-10.857143 10.285714-16.571429 16-7.428571 30.857143-21.142857 9.142857-9.142857 20-4.571428 12 5.142857 12 16.571428z m135.428572-283.428571l-219.428572 219.428571q-10.285714 10.857143-25.714286 10.857143-6.857143 0-14.285714-2.857143-22.285714-9.714286-22.285714-33.714286V365.714286H603.428571q-184.571429 0-250.285714 74.857143-68 78.285714-42.285714 270.285714 1.714286 13.142857-11.428572 19.428571-4.571429 1.142857-6.857142 1.142857-9.142857 0-14.857143-7.428571-5.714286-8-12-17.714286t-22.571429-39.142857T214.857143 610.285714t-22-65.142857T182.857143 475.428571q0-28 2-52t8-51.428571 16-50.285714 26.857143-46.571429 39.142857-42.285714 54-35.142857T400 170 491.142857 152.571429 603.428571 146.285714h91.428572V36.571429q0-24 22.285714-33.714286 7.428571-2.857143 14.285714-2.857143 14.857143 0 25.714286 10.857143l219.428572 219.428571q10.857143 10.857143 10.857142 25.714286t-10.857142 25.714286z\"  ></path></symbol><symbol id=\"icon-share\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 365.714286q0 14.857143-10.857143 25.714285l-292.571428 292.571429q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143-10.857143-25.714286V512H530.285714q-56 0-100.285714 3.428571t-88 12.285715-76 24.285714-60.285714 39.714286-45.714286 57.714285-27.714286 79.142858-10 103.428571q0 31.428571 2.857143 70.285714 0 3.428571 1.428572 13.428572t1.428571 15.142857q0 8.571429-4.857143 14.285714t-13.428571 5.714286q-9.142857 0-16-9.714286-4-5.142857-7.428572-12.571428t-7.714285-17.142858-6-13.714285Q0 734.857143 0 640q0-113.714286 30.285714-190.285714 92.571429-230.285714 500-230.285715h128V73.142857q0-14.857143 10.857143-25.714286t25.714286-10.857142 25.714286 10.857142l292.571428 292.571429q10.857143 10.857143 10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-share-square\" viewBox=\"0 0 1024 1024\"><path d=\"M647.428571 629.142857l201.142858-201.142857q10.857143-10.857143 10.857142-25.714286t-10.857142-25.714285l-201.142858-201.142858q-17.142857-17.714286-39.428571-8-22.857143 9.714286-22.857143 33.714286v91.428572q-68 0-123.428571 11.142857t-92.857143 29.142857-65.142857 45.142857T260 432.571429t-25.428571 62.285714T222.285714 558.571429t-2.857143 63.142857q0 103.428571 95.428572 230.857143 6.285714 6.857143 14.285714 6.857142 4 0 7.428572-1.714285 12.571429-5.142857 10.857142-18.857143-25.142857-202.285714 35.428572-270.285714 26.285714-29.714286 74.285714-43.142858T585.142857 512v91.428571q0 24 22.857143 33.714286 6.857143 2.857143 13.714286 2.857143 14.857143 0 25.714285-10.857143z m303.428572-391.428571v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-shekel\" viewBox=\"0 0 1024 1024\"><path d=\"M640 356.571429v283.428571q0 8-5.142857 13.142857t-13.142857 5.142857H530.285714q-8 0-13.142857-5.142857t-5.142857-13.142857V356.571429q0-64-45.714286-109.714286t-109.714285-45.714286H201.142857v658.285714q0 8-5.142857 13.142858t-13.142857 5.142857H91.428571q-8 0-13.142857-5.142857t-5.142857-13.142858V91.428571q0-8 5.142857-13.142857t13.142857-5.142857h265.142858q77.142857 0 142.285714 38T602 214.285714 640 356.571429z m219.428571-265.142858v502.857143q0 77.142857-38 142.285715T718.285714 839.714286 576 877.714286H310.857143q-8 0-13.142857-5.142857t-5.142857-13.142858V310.857143q0-8 5.142857-13.142857t13.142857-5.142857h91.428571q8 0 13.142857 5.142857t5.142858 13.142857v438.857143h155.428571q64 0 109.714286-45.714286t45.714285-109.714286V91.428571q0-8 5.142858-13.142857t13.142857-5.142857h91.428571q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-sheqel\" viewBox=\"0 0 1024 1024\"><path d=\"M640 356.571429v283.428571q0 8-5.142857 13.142857t-13.142857 5.142857H530.285714q-8 0-13.142857-5.142857t-5.142857-13.142857V356.571429q0-64-45.714286-109.714286t-109.714285-45.714286H201.142857v658.285714q0 8-5.142857 13.142858t-13.142857 5.142857H91.428571q-8 0-13.142857-5.142857t-5.142857-13.142858V91.428571q0-8 5.142857-13.142857t13.142857-5.142857h265.142858q77.142857 0 142.285714 38T602 214.285714 640 356.571429z m219.428571-265.142858v502.857143q0 77.142857-38 142.285715T718.285714 839.714286 576 877.714286H310.857143q-8 0-13.142857-5.142857t-5.142857-13.142858V310.857143q0-8 5.142857-13.142857t13.142857-5.142857h91.428571q8 0 13.142857 5.142857t5.142858 13.142857v438.857143h155.428571q64 0 109.714286-45.714286t45.714285-109.714286V91.428571q0-8 5.142858-13.142857t13.142857-5.142857h91.428571q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-shield\" viewBox=\"0 0 1024 1024\"><path d=\"M768 548.571429V182.857143H512v649.714286q68-36 121.714286-78.285715 134.285714-105.142857 134.285714-205.714285z m109.714286-438.857143v438.857143q0 49.142857-19.142857 97.428571t-47.428572 85.714286-67.428571 72.857143T671.428571 863.428571t-69.142857 44.285715-51.142857 28.285714-24.285714 11.428571q-6.857143 3.428571-14.857143 3.428572t-14.857143-3.428572q-9.142857-4-24.285714-11.428571t-51.142857-28.285714-69.142857-44.285715-72.285715-58.857142-67.428571-72.857143-47.428572-85.714286T146.285714 548.571429V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h658.285714q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-ship\" viewBox=\"0 0 1170 1024\"><path d=\"M1034.857143 888.571429q10.857143-10.857143 25.714286-10.857143t25.714285 10.857143l73.142857 73.142857-51.428571 51.428571-47.428571-47.428571-47.428572 47.428571q-10.285714 10.857143-25.714286 10.857143t-25.714285-10.857143l-47.428572-47.428571-47.428571 47.428571q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143l-47.428571-47.428571-47.428571 47.428571q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143l-47.428571-47.428571-47.428572 47.428571q-10.857143 10.857143-25.714285 10.857143t-25.714286-10.857143l-47.428572-47.428571-47.428571 47.428571q-10.857143 10.857143-25.714286 10.857143t-25.714285-10.857143l-47.428572-47.428571-47.428571 47.428571q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143l-47.428571-47.428571-47.428572 47.428571q-10.857143 10.857143-25.714285 10.857143t-25.714286-10.857143L10.857143 940l51.428571-51.428571 47.428572 47.428571 47.428571-47.428571q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l47.428571 47.428571 47.428571-47.428571q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l47.428571 47.428571 47.428572-47.428571q10.857143-10.857143 25.714285-10.857143t25.714286 10.857143l47.428572 47.428571 47.428571-47.428571q10.857143-10.857143 25.714286-10.857143t25.714285 10.857143l47.428572 47.428571 47.428571-47.428571q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l47.428571 47.428571 47.428572-47.428571q10.857143-10.857143 25.714285-10.857143t25.714286 10.857143l47.428571 47.428571z m-899.428572-21.714286q-10.857143 10.857143-25.714285 10.857143t-25.714286-10.857143L10.857143 793.714286l51.428571-51.428572 47.428572 46.857143 47.428571-46.857143q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l47.428571 46.857143 36.571429-36.571428v-167.428572L172.571429 405.714286q-9.714286-14.857143-4-32.285715t22.857142-23.142857l101.142858-33.142857V146.285714h73.142857V73.142857h146.285714V0h146.285714v73.142857h146.285715v73.142857h73.142857v170.857143l101.142857 33.142857q17.142857 5.714286 22.857143 23.142857t-4 32.285715l-120 179.428571v167.428572l10.857143-10.285715q10.857143-10.857143 25.714285-10.857143t25.714286 10.857143l47.428571 46.857143 47.428572-46.857143q10.857143-10.857143 25.714286-10.857143t25.714285 10.857143l73.142857 73.142857-51.428571 51.428572-47.428571-47.428572-47.428572 47.428572q-10.285714 10.857143-25.714286 10.857143t-25.714285-10.857143l-47.428572-47.428572-47.428571 47.428572q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143l-47.428571-47.428572-47.428571 47.428572q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143l-47.428571-47.428572-47.428572 47.428572q-10.857143 10.857143-25.714285 10.857143t-25.714286-10.857143l-47.428572-47.428572-47.428571 47.428572q-10.857143 10.857143-25.714286 10.857143t-25.714285-10.857143l-47.428572-47.428572-47.428571 47.428572q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143l-47.428571-47.428572zM365.714286 219.428571v73.142858l219.428571-73.142858 219.428572 73.142858V219.428571h-73.142858V146.285714H438.857143v73.142857H365.714286z\"  ></path></symbol><symbol id=\"icon-shirtsinbulk\" viewBox=\"0 0 1024 1024\"><path d=\"M73.142857 0h877.714286v795.428571l-443.428572 193.142858L73.142857 795.428571V0z m820.571429 758.285714V229.142857H130.285714v529.142857l377.714286 168z m0-586.285714V57.142857H130.285714v114.857143h763.428572zM176.571429 342.285714v65.714286h-21.142858V342.285714h21.142858z m0 84.571429v65.714286h-21.142858V426.857143h21.142858z m0 84.571428v65.714286h-21.142858V511.428571h21.142858z m0 84.571429v65.714286h-21.142858v-65.714286h21.142858z m0 84.571429v65.714285h-21.142858v-65.714285h21.142858z m14.857142 81.714285l8.571429-19.428571 60 26.857143-8.571429 18.857143z m77.714286 34.285715l8.571429-19.428572 60 26.285714-8.571429 19.428572z m77.142857 34.285714l8.571429-19.428572 60 26.285715-8.571429 19.428571z m77.714286 33.714286l8.571429-18.857143 59.428571 26.285714-8.571429 19.428571z m104.571429 7.428571l60-26.285714 8.571428 18.857143-60 26.857142z m77.142857-34.285714l60-26.285715 8.571428 19.428572-60 26.285714z m77.714285-34.285715l60-26.285714 8.571429 19.428572-60 26.285714z m77.142858-33.714285l60-26.857143 8.571428 19.428571-60 26.285715zM221.142857 84v20.571429H156v-20.571429h65.142857z m92.571429 0v20.571429H248v-20.571429h65.714286z m92.571428 0v20.571429H340.571429v-20.571429h65.714285z m92 0v20.571429H433.142857v-20.571429h65.142857z m92.571429 0v20.571429H525.714286v-20.571429h65.142857z m92.571428 0v20.571429H617.714286v-20.571429h65.714285z m92.571429 0v20.571429h-65.714286v-20.571429h65.714286z m92 0v20.571429h-65.142857v-20.571429h65.142857zM176.571429 278.285714v45.142857h-21.142858V257.714286h65.714286v20.571428h-44.571428z m137.142857-20.571428v20.571428H248v-20.571428h65.714286z m92.571428 0v20.571428H340.571429v-20.571428h65.714285z m92 0v20.571428H433.142857v-20.571428h65.142857z m92.571429 0v20.571428H525.714286v-20.571428h65.142857z m92.571428 0v20.571428H617.714286v-20.571428h65.714285z m92.571429 0v20.571428h-65.714286v-20.571428h65.714286z m71.428571 65.714285v-45.142857h-44.571428v-20.571428h65.714286v65.714285h-21.142858z m0 84.571429V342.285714h21.142858v65.714286h-21.142858z m0 84.571429V426.857143h21.142858v65.714286h-21.142858z m0 84.571428V511.428571h21.142858v65.714286h-21.142858z m0 84.571429v-65.714286h21.142858v65.714286h-21.142858z m0 84.571428v-65.714285h21.142858v65.714285h-21.142858z m-340-20q-73.714286 0-126.285714-52.285714T328.571429 547.428571q0-73.714286 52.571428-126.285714t126.285714-52.571428q74.285714 0 126.571429 52.571428t52.285714 126.285714q0 74.285714-52.285714 126.571429T507.428571 726.285714zM413.142857 508.571429q0 20.571429 11.142857 32.285714t28.285715 14.285714 36.571428 4 36.571429 1.142857 28.285714 5.142857T565.142857 582.857143q0 28-64 28-55.428571 0-70.285714-29.142857h-1.714286l-17.714286 36q38.285714 24 92.571429 24 16.571429 0 32.285714-2.857143t31.714286-9.142857 26-18.857143 10-30.285714q0-26.285714-15.714286-39.714286t-38.571428-15.428572-45.428572-1.714285-38.285714-2.857143T450.285714 506.285714q0-12 11.714286-18.857143t23.142857-8.571428 23.428572-1.714286q19.428571 0 40.285714 6.285714t29.428571 19.428572h1.714286l17.142857-33.142857q-1.714286-0.571429-12-4.857143t-12.857143-5.142857-11.142857-4-12.571428-4-11.428572-2.571429-13.714286-2.285714-13.142857-0.571429q-16.571429 0-32.285714 2.857143t-30.857143 9.428572-24.571428 19.428571T413.142857 508.571429z\"  ></path></symbol><symbol id=\"icon-shower\" viewBox=\"0 0 1097 1024\"><path d=\"M818.857143 142.285714q5.714286 5.714286 5.714286 13.142857t-5.714286 13.142858L461.142857 526.285714q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-46.857143-46.857143q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l25.142857-25.142857q-41.142857-52-46.571428-118.285714T393.142857 186.857143q-42.285714-40.571429-100.571428-40.571429-60.571429 0-103.428572 42.857143t-42.857143 103.428572v731.428571H0V292.571429q0-59.428571 23.142857-113.428572T85.714286 85.714286 179.142857 23.142857 292.571429 0q60.571429 0 114.857142 23.428571t94.857143 65.714286q53.714286-22.285714 112.571429-14t105.714286 45.428572l25.142857-25.142858q5.714286-5.714286 13.142857-5.714285t13.142857 5.714285z m-50.857143 150.285715q14.857143 0 25.714286 10.857142t10.857143 25.714286-10.857143 25.714286-25.714286 10.857143-25.714286-10.857143-10.857143-25.714286 10.857143-25.714286 25.714286-10.857142z m146.285714 73.142857q-14.857143 0-25.714285-10.857143t-10.857143-25.714286 10.857143-25.714286 25.714285-10.857142 25.714286 10.857142 10.857143 25.714286-10.857143 25.714286-25.714286 10.857143z m146.285715-73.142857q14.857143 0 25.714285 10.857142t10.857143 25.714286-10.857143 25.714286-25.714285 10.857143-25.714286-10.857143-10.857143-25.714286 10.857143-25.714286 25.714286-10.857142z m-365.714286 73.142857q14.857143 0 25.714286 10.857143t10.857142 25.714285-10.857142 25.714286-25.714286 10.857143-25.714286-10.857143-10.857143-25.714286 10.857143-25.714285 25.714286-10.857143z m109.714286 36.571428q0-14.857143 10.857142-25.714285t25.714286-10.857143 25.714286 10.857143 10.857143 25.714285-10.857143 25.714286-25.714286 10.857143-25.714286-10.857143-10.857142-25.714286z m182.857142-36.571428q14.857143 0 25.714286 10.857143t10.857143 25.714285-10.857143 25.714286-25.714286 10.857143-25.714285-10.857143-10.857143-25.714286 10.857143-25.714285 25.714285-10.857143z m-365.714285 73.142857q14.857143 0 25.714285 10.857143t10.857143 25.714285-10.857143 25.714286-25.714285 10.857143-25.714286-10.857143-10.857143-25.714286 10.857143-25.714285 25.714286-10.857143z m146.285714 73.142857q-14.857143 0-25.714286-10.857143t-10.857143-25.714286 10.857143-25.714285 25.714286-10.857143 25.714286 10.857143 10.857143 25.714285-10.857143 25.714286-25.714286 10.857143z m146.285714-73.142857q14.857143 0 25.714286 10.857143t10.857143 25.714285-10.857143 25.714286-25.714286 10.857143-25.714285-10.857143-10.857143-25.714286 10.857143-25.714285 25.714285-10.857143z m-219.428571 146.285714q-14.857143 0-25.714286-10.857143t-10.857143-25.714285 10.857143-25.714286 25.714286-10.857143 25.714286 10.857143 10.857142 25.714286-10.857142 25.714285-25.714286 10.857143z m146.285714-73.142857q14.857143 0 25.714286 10.857143t10.857143 25.714286-10.857143 25.714285-25.714286 10.857143-25.714286-10.857143-10.857142-25.714285 10.857142-25.714286 25.714286-10.857143z m-219.428571 73.142857q14.857143 0 25.714285 10.857143t10.857143 25.714286-10.857143 25.714285-25.714285 10.857143-25.714286-10.857143-10.857143-25.714285 10.857143-25.714286 25.714286-10.857143z m146.285714 0q14.857143 0 25.714286 10.857143t10.857143 25.714286-10.857143 25.714285-25.714286 10.857143-25.714286-10.857143-10.857143-25.714285 10.857143-25.714286 25.714286-10.857143z m-73.142857 73.142857q14.857143 0 25.714286 10.857143t10.857142 25.714286-10.857142 25.714286-25.714286 10.857142-25.714286-10.857142-10.857143-25.714286 10.857143-25.714286 25.714286-10.857143z m-73.142857 73.142857q14.857143 0 25.714285 10.857143t10.857143 25.714286-10.857143 25.714286-25.714285 10.857143-25.714286-10.857143-10.857143-25.714286 10.857143-25.714286 25.714286-10.857143z\"  ></path></symbol><symbol id=\"icon-sign-in\" viewBox=\"0 0 1024 1024\"><path d=\"M749.714286 512q0 14.857143-10.857143 25.714286l-310.857143 310.857143q-10.857143 10.857143-25.714286 10.857142t-25.714285-10.857142-10.857143-25.714286v-164.571429H109.714286q-14.857143 0-25.714286-10.857143t-10.857143-25.714285V402.285714q0-14.857143 10.857143-25.714285t25.714286-10.857143h256V201.142857q0-14.857143 10.857143-25.714286t25.714285-10.857142 25.714286 10.857142l310.857143 310.857143q10.857143 10.857143 10.857143 25.714286z m201.142857-201.142857v402.285714q0 68-48.285714 116.285714T786.285714 877.714286H603.428571q-7.428571 0-12.857142-5.428572T585.142857 859.428571q0-2.285714-0.571428-11.428571t-0.285715-15.142857 1.714286-13.428572 5.714286-11.142857 11.714285-3.714285h182.857143q37.714286 0 64.571429-26.857143t26.857143-64.571429V310.857143q0-37.714286-26.857143-64.571429t-64.571429-26.857143H608l-6.571429-0.571428-6.571428-1.714286-4.571429-3.142857-4-5.142857-1.142857-7.714286q0-2.285714-0.571428-11.428571t-0.285715-15.142857 1.714286-13.428572 5.714286-11.142857T603.428571 146.285714h182.857143q68 0 116.285715 48.285715T950.857143 310.857143z\"  ></path></symbol><symbol id=\"icon-shopping-basket\" viewBox=\"0 0 1170 1024\"><path d=\"M1097.142857 438.857143q30.285714 0 51.714286 21.428571T1170.285714 512t-21.428571 51.714286-51.714286 21.428571h-8.571428l-65.714286 378.285714q-4.571429 26.285714-25.142857 43.428572t-46.857143 17.142857H219.428571q-26.285714 0-46.857142-17.142857t-25.142858-43.428572l-65.714285-378.285714h-8.571429q-30.285714 0-51.714286-21.428571T0 512t21.428571-51.714286T73.142857 438.857143h1024zM277.142857 896q14.857143-1.142857 24.857143-12.857143T310.857143 856.571429l-18.285714-237.714286q-1.142857-14.857143-12.857143-24.857143T253.142857 585.142857t-24.857143 12.857143T219.428571 624.571429l18.285715 237.714285q1.142857 14.285714 11.714285 24t24.857143 9.714286h2.857143z m234.857143-36.571429v-237.714285q0-14.857143-10.857143-25.714286t-25.714286-10.857143-25.714285 10.857143-10.857143 25.714286v237.714285q0 14.857143 10.857143 25.714286t25.714285 10.857143 25.714286-10.857143 10.857143-25.714286z m219.428571 0v-237.714285q0-14.857143-10.857142-25.714286t-25.714286-10.857143-25.714286 10.857143-10.857143 25.714286v237.714285q0 14.857143 10.857143 25.714286t25.714286 10.857143 25.714286-10.857143 10.857142-25.714286z m201.142858 2.857143l18.285714-237.714285q1.142857-14.857143-8.857143-26.571429T917.142857 585.142857t-26.571428 8.857143-12.857143 24.857143l-18.285715 237.714286q-1.142857 14.857143 8.857143 26.571428t24.857143 12.857143h2.857143q14.285714 0 24.857143-9.714286t11.714286-24zM272 166.857143l-53.142857 235.428571H143.428571l57.714286-252q10.857143-50.285714 50.857143-82T343.428571 36.571429h95.428572q0-14.857143 10.857143-25.714286t25.714285-10.857143h219.428572q14.857143 0 25.714286 10.857143t10.857142 25.714286h95.428572q51.428571 0 91.428571 31.714285t50.857143 82l57.714286 252h-75.428572l-53.142857-235.428571q-6.285714-25.142857-26-41.142857t-45.428571-16h-95.428572q0 14.857143-10.857142 25.714285t-25.714286 10.857143H475.428571q-14.857143 0-25.714285-10.857143t-10.857143-25.714285H343.428571q-25.714286 0-45.428571 16T272 166.857143z\"  ></path></symbol><symbol id=\"icon-shopping-cart\" viewBox=\"0 0 1024 1024\"><path d=\"M402.285714 877.714286q0 29.714286-21.714285 51.428571t-51.428572 21.714286-51.428571-21.714286-21.714286-51.428571 21.714286-51.428572 51.428571-21.714285 51.428572 21.714285 21.714285 51.428572z m512 0q0 29.714286-21.714285 51.428571t-51.428572 21.714286-51.428571-21.714286-21.714286-51.428571 21.714286-51.428572 51.428571-21.714285 51.428572 21.714285 21.714285 51.428572z m73.142857-621.714286v292.571429q0 13.714286-9.428571 24.285714T954.857143 585.142857L358.285714 654.857143q7.428571 34.285714 7.428572 40 0 9.142857-13.714286 36.571428h525.714286q14.857143 0 25.714285 10.857143t10.857143 25.714286-10.857143 25.714286-25.714285 10.857143H292.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286q0-6.285714 4.571429-18t9.142857-20.571429 12.285714-22.857142T290.857143 689.714286L189.714286 219.428571H73.142857q-14.857143 0-25.714286-10.857142T36.571429 182.857143t10.857142-25.714286 25.714286-10.857143h146.285714q9.142857 0 16.285715 3.714286T246.857143 158.857143t7.428571 14 4.571429 14.857143 3.142857 16.857143 2.571429 14.857142h686.285714q14.857143 0 25.714286 10.857143t10.857142 25.714286z\"  ></path></symbol><symbol id=\"icon-shopping-bag\" viewBox=\"0 0 1024 1024\"><path d=\"M1004 804.571429l20 178.857142q1.714286 16-9.142857 28.571429-10.857143 12-27.428572 12H36.571429q-16.571429 0-27.428572-12-10.857143-12.571429-9.142857-28.571429l20-178.857142h984z m-53.142857-479.428572l49.142857 442.857143H24l49.142857-442.857143q1.714286-13.714286 12-23.142857t24.571429-9.428571h146.285714v73.142857q0 30.285714 21.428571 51.714285T329.142857 438.857143t51.714286-21.428572T402.285714 365.714286V292.571429h219.428572v73.142857q0 30.285714 21.428571 51.714285T694.857143 438.857143t51.714286-21.428572T768 365.714286V292.571429h146.285714q14.285714 0 24.571429 9.428571t12 23.142857z m-219.428572-105.714286v146.285715q0 14.857143-10.857142 25.714285t-25.714286 10.857143-25.714286-10.857143-10.857143-25.714285V219.428571q0-60.571429-42.857143-103.428571t-103.428571-42.857143-103.428571 42.857143-42.857143 103.428571v146.285715q0 14.857143-10.857143 25.714285t-25.714286 10.857143-25.714286-10.857143-10.857142-25.714285V219.428571q0-90.857143 64.285714-155.142857T512 0t155.142857 64.285714T731.428571 219.428571z\"  ></path></symbol><symbol id=\"icon-sign-language\" viewBox=\"0 0 1024 1024\"><path d=\"M511.428571 384.571429q18.285714 0 33.714286 10.285714l126.857143 84.571428q34.857143 22.857143 62.857143 55.428572l83.428571 97.142857q22.857143 26.285714 16.571429 60.571429l-41.142857 236q-3.428571 18.285714-16.857143 30.571428T745.142857 973.714286l-301.142857 32-201.142857 18.285714h-5.142857q-22.285714 0-38.571429-16t-16.285714-38.857143q0-21.142857 15.428571-36.571428t37.142857-18.285715l148.571429-18.285714H128q-23.428571 0-39.714286-17.142857T73.142857 838.285714q1.142857-22.285714 18.285714-37.142857t39.428572-14.857143l252.571428-0.571428-297.714285-36.571429q-23.428571-2.857143-37.714286-21.142857t-10.857143-41.714286q3.428571-20 19.714286-32.857143T94.285714 640.571429h5.714286l274.857143 34.285714-200.571429-53.714286q-21.714286-5.714286-35.428571-23.714286T128.571429 558.285714q3.428571-20.571429 18.857142-33.428571t35.428572-12.857143q3.428571 0 11.428571 1.142857l256 54.857143 124 21.142857q0.571429 0 1.714286 0.285714t1.714286 0.285715q13.142857 0 17.428571-13.142857T588 556L481.714286 484.571429q-20-13.142857-24-36.285715t10.285714-42q15.428571-21.714286 43.428571-21.714285z m-40 115.428571l106.285715 71.428571-124.571429-21.142857-2.857143-1.142857-20.571428-21.714286-136-149.714285q-0.571429-0.571429-1.428572-2T290.857143 373.714286q-13.714286-17.714286-10.571429-40t21.428572-36.571429q17.714286-13.142857 38.857143-10t36.571428 19.142857l81.142857 84q-1.142857 0.571429-2.857143 2t-2.285714 2.571429q-18.285714 25.714286-13.142857 56.571428t31.428571 48.571429z m506.857143-259.428571l8.571429 152q2.285714 41.714286-6.285714 84l-27.428572 125.142857q-6.857143 33.714286-38.285714 49.714285l-60.571429 30.857143q1.142857-35.428571-22.285714-62.285714l-83.428571-97.142857q-30.285714-34.857143-66.857143-58.857143L554.857143 379.428571q-19.428571-13.142857-43.428572-13.142857-29.142857 0-50.285714 21.142857L326.857143 209.142857q-14.285714-18.857143-10.285714-42t23.428571-36.285714q18.857143-12.571429 40.857143-8t35.714286 22.857143l152 201.142857-149.714286-260q-12-20-6-42.857143T440 10.285714q20-10.285714 41.428571-3.428571T514.285714 33.142857l137.714286 240-77.714286-192.571428q-8.571429-20-2.571428-42.285715T597.142857 6.285714q21.142857-10.857143 43.428572-3.428571t32 29.142857l110.285714 237.142857 57.714286 112q4.571429 8.571429 13.142857 10t15.428571-4.285714 6.285714-14.857143l-6.857142-128q-1.142857-23.428571 14.857142-40.571429t39.428572-17.714285q22.285714 0 38.285714 16.285714t17.142857 38.571429z\"  ></path></symbol><symbol id=\"icon-sign-out\" viewBox=\"0 0 1024 1024\"><path d=\"M402.285714 822.857143q0 2.285714 0.571429 11.428571t0.285714 15.142857-1.714286 13.428572-5.714285 11.142857-11.714286 3.714286H201.142857q-68 0-116.285714-48.285715T36.571429 713.142857V310.857143q0-68 48.285714-116.285714T201.142857 146.285714h182.857143q7.428571 0 12.857143 5.428572T402.285714 164.571429q0 2.285714 0.571429 11.428571t0.285714 15.142857-1.714286 13.428572-5.714285 11.142857T384 219.428571H201.142857q-37.714286 0-64.571428 26.857143t-26.857143 64.571429v402.285714q0 37.714286 26.857143 64.571429t64.571428 26.857143h178.285714l6.571429 0.571428 6.571429 1.714286 4.571428 3.142857 4 5.142857 1.142857 7.714286z m530.285715-310.857143q0 14.857143-10.857143 25.714286l-310.857143 310.857143q-10.857143 10.857143-25.714286 10.857142t-25.714286-10.857142-10.857142-25.714286v-164.571429H292.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714285V402.285714q0-14.857143 10.857143-25.714285t25.714286-10.857143h256V201.142857q0-14.857143 10.857142-25.714286t25.714286-10.857142 25.714286 10.857142l310.857143 310.857143q10.857143 10.857143 10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-signal\" viewBox=\"0 0 1024 1024\"><path d=\"M146.285714 822.857143v109.714286q0 8-5.142857 13.142857t-13.142857 5.142857H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-109.714286q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857z m219.428572-73.142857v182.857143q0 8-5.142857 13.142857t-13.142858 5.142857H237.714286q-8 0-13.142857-5.142857t-5.142858-13.142857v-182.857143q0-8 5.142858-13.142857t13.142857-5.142858h109.714285q8 0 13.142858 5.142858t5.142857 13.142857z m219.428571-146.285715v329.142858q0 8-5.142857 13.142857t-13.142857 5.142857H457.142857q-8 0-13.142857-5.142857t-5.142857-13.142857v-329.142858q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857z m219.428572-219.428571v548.571429q0 8-5.142858 13.142857t-13.142857 5.142857h-109.714285q-8 0-13.142858-5.142857t-5.142857-13.142857V384q0-8 5.142857-13.142857t13.142858-5.142857h109.714285q8 0 13.142857 5.142857t5.142858 13.142857z m219.428571-292.571429v841.142858q0 8-5.142857 13.142857t-13.142857 5.142857h-109.714286q-8 0-13.142857-5.142857t-5.142857-13.142857V91.428571q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-simplybuilt\" viewBox=\"0 0 1170 1024\"><path d=\"M491.396737 587.626225q0-63.773389-45.267718-109.041106T337.087912 433.317401t-108.756404 45.267718-44.983015 109.041106 44.983015 108.756405 108.756404 44.983015 109.041107-44.983015 45.267718-108.756405z m491.396737-0.569405q0-63.773389-44.983015-108.756404t-108.756405-44.983015-109.041106 44.983015-45.267718 108.756404q0 64.342794 45.267718 109.32581t109.041106 44.983015 108.756405-45.267718 44.983015-109.041107z m183.348493-460.648853v767.558287q0 25.053831-17.936266 42.990097T1104.646199 954.892616H61.495768q-25.623237 0-43.559502-17.936265T0 893.966254V126.407967q0-25.053831 17.936266-42.990097T61.495768 65.481605h245.413666q25.053831 0 43.274799 17.936265t18.220968 42.990097v91.674247h429.331564V126.407967q0-25.053831 18.220969-42.990097t43.274799-17.936265h245.413666q25.623237 0 43.559502 17.936265T1166.141967 126.407967z\"  ></path></symbol><symbol id=\"icon-sitemap\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 713.142857v182.857143q0 22.857143-16 38.857143t-38.857143 16h-182.857143q-22.857143 0-38.857143-16t-16-38.857143v-182.857143q0-22.857143 16-38.857143t38.857143-16h54.857143V548.571429H548.571429v109.714285h54.857142q22.857143 0 38.857143 16t16 38.857143v182.857143q0 22.857143-16 38.857143t-38.857143 16H420.571429q-22.857143 0-38.857143-16t-16-38.857143v-182.857143q0-22.857143 16-38.857143t38.857143-16h54.857142V548.571429H182.857143v109.714285h54.857143q22.857143 0 38.857143 16t16 38.857143v182.857143q0 22.857143-16 38.857143t-38.857143 16H54.857143q-22.857143 0-38.857143-16t-16-38.857143v-182.857143q0-22.857143 16-38.857143t38.857143-16h54.857143V548.571429q0-29.714286 21.714285-51.428572t51.428572-21.714286h292.571428V365.714286h-54.857142q-22.857143 0-38.857143-16t-16-38.857143V128q0-22.857143 16-38.857143t38.857143-16h182.857142q22.857143 0 38.857143 16t16 38.857143v182.857143q0 22.857143-16 38.857143t-38.857143 16h-54.857142v109.714285h292.571428q29.714286 0 51.428572 21.714286t21.714285 51.428572v109.714285h54.857143q22.857143 0 38.857143 16t16 38.857143z\"  ></path></symbol><symbol id=\"icon-signing\" viewBox=\"0 0 1024 1024\"><path d=\"M511.428571 384.571429q18.285714 0 33.714286 10.285714l126.857143 84.571428q34.857143 22.857143 62.857143 55.428572l83.428571 97.142857q22.857143 26.285714 16.571429 60.571429l-41.142857 236q-3.428571 18.285714-16.857143 30.571428T745.142857 973.714286l-301.142857 32-201.142857 18.285714h-5.142857q-22.285714 0-38.571429-16t-16.285714-38.857143q0-21.142857 15.428571-36.571428t37.142857-18.285715l148.571429-18.285714H128q-23.428571 0-39.714286-17.142857T73.142857 838.285714q1.142857-22.285714 18.285714-37.142857t39.428572-14.857143l252.571428-0.571428-297.714285-36.571429q-23.428571-2.857143-37.714286-21.142857t-10.857143-41.714286q3.428571-20 19.714286-32.857143T94.285714 640.571429h5.714286l274.857143 34.285714-200.571429-53.714286q-21.714286-5.714286-35.428571-23.714286T128.571429 558.285714q3.428571-20.571429 18.857142-33.428571t35.428572-12.857143q3.428571 0 11.428571 1.142857l256 54.857143 124 21.142857q0.571429 0 1.714286 0.285714t1.714286 0.285715q13.142857 0 17.428571-13.142857T588 556L481.714286 484.571429q-20-13.142857-24-36.285715t10.285714-42q15.428571-21.714286 43.428571-21.714285z m-40 115.428571l106.285715 71.428571-124.571429-21.142857-2.857143-1.142857-20.571428-21.714286-136-149.714285q-0.571429-0.571429-1.428572-2T290.857143 373.714286q-13.714286-17.714286-10.571429-40t21.428572-36.571429q17.714286-13.142857 38.857143-10t36.571428 19.142857l81.142857 84q-1.142857 0.571429-2.857143 2t-2.285714 2.571429q-18.285714 25.714286-13.142857 56.571428t31.428571 48.571429z m506.857143-259.428571l8.571429 152q2.285714 41.714286-6.285714 84l-27.428572 125.142857q-6.857143 33.714286-38.285714 49.714285l-60.571429 30.857143q1.142857-35.428571-22.285714-62.285714l-83.428571-97.142857q-30.285714-34.857143-66.857143-58.857143L554.857143 379.428571q-19.428571-13.142857-43.428572-13.142857-29.142857 0-50.285714 21.142857L326.857143 209.142857q-14.285714-18.857143-10.285714-42t23.428571-36.285714q18.857143-12.571429 40.857143-8t35.714286 22.857143l152 201.142857-149.714286-260q-12-20-6-42.857143T440 10.285714q20-10.285714 41.428571-3.428571T514.285714 33.142857l137.714286 240-77.714286-192.571428q-8.571429-20-2.571428-42.285715T597.142857 6.285714q21.142857-10.857143 43.428572-3.428571t32 29.142857l110.285714 237.142857 57.714286 112q4.571429 8.571429 13.142857 10t15.428571-4.285714 6.285714-14.857143l-6.857142-128q-1.142857-23.428571 14.857142-40.571429t39.428572-17.714285q22.285714 0 38.285714 16.285714t17.142857 38.571429z\"  ></path></symbol><symbol id=\"icon-sliders\" viewBox=\"0 0 1024 1024\"><path d=\"M274.285714 804.571429v73.142857H73.142857v-73.142857h201.142857z m201.142857-73.142858q14.857143 0 25.714286 10.857143t10.857143 25.714286v146.285714q0 14.857143-10.857143 25.714286t-25.714286 10.857143H329.142857q-14.857143 0-25.714286-10.857143t-10.857142-25.714286v-146.285714q0-14.857143 10.857142-25.714286t25.714286-10.857143h146.285714z m91.428572-219.428571v73.142857H73.142857V512h493.714286zM201.142857 219.428571v73.142858H73.142857V219.428571h128z m749.714286 585.142858v73.142857H530.285714v-73.142857h420.571429zM402.285714 146.285714q14.857143 0 25.714286 10.857143t10.857143 25.714286v146.285714q0 14.857143-10.857143 25.714286t-25.714286 10.857143H256q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V182.857143q0-14.857143 10.857143-25.714286t25.714286-10.857143h146.285714z m365.714286 292.571429q14.857143 0 25.714286 10.857143t10.857143 25.714285v146.285715q0 14.857143-10.857143 25.714285t-25.714286 10.857143H621.714286q-14.857143 0-25.714286-10.857143t-10.857143-25.714285V475.428571q0-14.857143 10.857143-25.714285t25.714286-10.857143h146.285714z m182.857143 73.142857v73.142857h-128V512h128z m0-292.571429v73.142858H457.142857V219.428571h493.714286z\"  ></path></symbol><symbol id=\"icon-skype\" viewBox=\"0 0 1024 1024\"><path d=\"M743.428571 607.428571q0-28.571429-11.142857-52.285714T704.571429 516t-41.714286-28-47.142857-19.428571-50-13.142858l-59.428572-13.714285q-17.142857-4-25.142857-6T461.142857 429.142857t-17.142857-9.142857-9.428571-12-4.285715-17.142857q0-44 82.285715-44 24.571429 0 44 6.857143t30.857142 16.285714 21.714286 19.142857 22.857143 16.571429 27.428571 6.857143q26.857143 0 43.142858-18.285715t16.285714-44q0-31.428571-32-56.857143T605.714286 254.857143t-104-13.142857q-38.857143 0-75.428572 8.857143t-68.285714 26.857142-50.857143 49.714286T288 400.571429q0 34.857143 10.857143 60.857142t32 43.142858 45.714286 27.714285T435.428571 550.857143l83.428572 20.571428q51.428571 12.571429 64 20.571429 18.285714 11.428571 18.285714 34.285714 0 22.285714-22.857143 36.857143T518.285714 677.714286q-29.142857 0-52.285714-9.142857t-37.142857-22-26-25.714286-26.285714-22-30.857143-9.142857q-28.571429 0-43.142857 17.142857t-14.571429 42.857143q0 52.571429 69.714286 90t166.285714 37.428571q41.714286 0 80-10.571428t70-30.571429 50.571429-53.428571 18.857142-75.142858z m207.428572 124q0 90.857143-64.285714 155.142858T731.428571 950.857143q-74.285714 0-133.714285-45.714286-44 9.142857-85.714286 9.142857-81.714286 0-156.285714-31.714285t-128.571429-85.714286-85.714286-128.571429T109.714286 512q0-41.714286 9.142857-85.714286Q73.142857 366.857143 73.142857 292.571429q0-90.857143 64.285714-155.142858T292.571429 73.142857q74.285714 0 133.714285 45.714286 44-9.142857 85.714286-9.142857 81.714286 0 156.285714 31.714285t128.571429 85.714286 85.714286 128.571429T914.285714 512q0 41.714286-9.142857 85.714286 45.714286 59.428571 45.714286 133.714285z\"  ></path></symbol><symbol id=\"icon-skyatlas\" viewBox=\"0 0 1170 1024\"><path d=\"M817.142857 333.142857z m148.571429 116.571429q84.571429 0 144.571428 56.285714t60 139.714286q0 89.714286-62.285714 149.428571T955.428571 854.857143q-48.571429 0-92.571428-15.714286t-78.857143-42-67.428571-60.571428-62.285715-72-59.142857-75.714286T533.142857 516.571429 466.285714 456t-77.714285-42T297.714286 398.285714q-88 0-143.714286 52.285715T98.285714 590.285714q0 89.714286 59.428572 142.857143t150.285714 53.142857q57.142857 0 118.857143-21.428571t110.285714-56.285714q2.857143-2.285714 12-10.571429t17.142857-13.714286 12.571429-5.428571q8 0 14 6t6 14q0 13.714286-34.285714 44-57.714286 50.285714-134 81.142857T281.714286 854.857143q-76 0-140.285715-33.142857t-102.857142-94.285715T0 589.714286q0-117.142857 80.857143-194.857143T279.428571 317.142857q68.571429 0 129.428572 24.857143t106 64.571429 86.571428 87.428571 79.428572 95.714286 76.285714 87.714285 85.428572 64.571429T941.142857 766.857143q58.285714 0 96.285714-35.142857T1075.428571 638.857143q0-54.285714-36.857142-90.857143T947.428571 511.428571q-17.142857 0-46.571428 10.571429T861.714286 532.571429q-11.428571 0-20.285715-8.571429t-8.857142-20q0-10.285714 4.857142-32.571429t4.857143-33.714285q0-90.857143-61.428571-150.285715T628.571429 228q-33.142857 0-63.714286 10.571429t-48 23.142857-31.714286 23.142857-18.857143 10.571428q-8.571429 0-14.571428-6T445.714286 274.857143q0-10.857143 14.285714-26.285714 33.714286-38.285714 84-59.142858t104-20.857142q109.142857 0 181.714286 71.714285T902.285714 420.571429q0 21.142857-2.285714 37.714285 32.571429-8.571429 65.714286-8.571428z\"  ></path></symbol><symbol id=\"icon-slack\" viewBox=\"0 0 1024 1024\"><path d=\"M904.571429 443.428571q35.428571 0 59.142857 23.142858T987.428571 524.571429q0 55.428571-53.142857 74.285714l-98.285714 33.714286 32 95.428571q4 12 4 26.857143 0 33.714286-24 58.285714t-57.714286 24.571429q-26.857143 0-48.857143-15.428572t-30.571428-41.142857l-31.428572-94.285714-177.142857 60.571428 31.428572 93.714286q4.571429 13.714286 4.571428 26.857143 0 33.714286-24 58.285714t-58.285714 24.571429q-26.857143 0-48.571429-15.428572t-30.285714-41.142857l-31.428571-93.142857-87.428572 30.285714q-16.571429 5.142857-28.571428 5.142858-34.857143 0-58-22.857143T148.571429 756q0-26.857143 15.714285-48.571429t40.857143-30.285714l89.142857-30.285714-60-178.857143-89.142857 30.857143q-14.857143 4.571429-27.428571 4.571428-34.285714 0-57.714286-23.142857T36.571429 422.857143q0-26.857143 15.714285-48.571429T93.142857 344l89.714286-30.285714-30.285714-90.857143q-4.571429-13.714286-4.571429-26.857143 0-34.285714 24-58.571429T230.285714 113.142857q26.857143 0 48.571429 15.428572t30.285714 41.142857l30.857143 91.428571 177.142857-60-30.857143-91.428571q-4.571429-13.714286-4.571428-26.857143 0-33.714286 24.285714-58.285714T564 0q26.857143 0 48.857143 15.714286T643.428571 56.571429l30.285715 92 92.571428-31.428572q12-3.428571 24.571429-3.428571 34.285714 0 58.571428 22.571428T873.714286 192.571429q0 25.714286-17.142857 46.571428t-42.285715 29.428572l-89.714285 30.857142 60 180.571429 93.714285-32q13.714286-4.571429 26.285715-4.571429z m-453.714286 149.714286l177.142857-60-60-180-177.142857 61.142857z\"  ></path></symbol><symbol id=\"icon-slideshare\" viewBox=\"0 0 1024 1024\"><path d=\"M498.857143 422.857143q0 47.428571-36.285714 81.428571T375.428571 538.285714t-87.142857-34T252 422.857143q0-48 36.285714-81.714286T375.428571 307.428571t87.142858 33.714286T498.857143 422.857143z m286.857143 0q0 47.428571-36 81.428571T662.285714 538.285714q-50.857143 0-87.142857-34T538.857143 422.857143q0-48 36.285714-81.714286t87.142857-33.714286q51.428571 0 87.428572 33.714286t36 81.714286z m128.571428 102.857143V144.571429q0-49.714286-18.285714-70.571429T832.571429 53.142857H197.142857q-47.428571 0-64.285714 19.428572T116 144.571429v384.571428q24.571429 13.142857 50.571429 22.857143t46.285714 16 46.285714 10.571429 40.571429 6.285714 40 2.285714 33.428571 0.285714 32.285714-1.142857 25.428572-1.142857q38.857143-0.571429 54.285714 15.428572 3.428571 3.428571 5.714286 5.142857 14.857143 14.285714 34.857143 29.142857 4-52 67.428571-49.714286 2.857143 0 20.857143 0.857143t24.571429 1.142857 26 0.571429 30.285714-0.571429 31.142857-2.571428 34.857143-4.857143 35.428571-7.714286 38.285715-11.142857 38.571428-15.428572 41.142857-19.714285z m93.142857-2.857143q-69.142857 85.142857-212.571428 144 48 162.857143-13.142857 265.714286-37.714286 64.571429-104.571429 84.571428-59.428571 18.285714-104-8.571428-49.142857-29.142857-46.857143-93.714286l-0.571428-186.285714v-0.571429q-4.571429-1.142857-14-3.428571t-13.428572-2.857143l-0.571428 193.142857q2.285714 65.142857-47.428572 93.714286-45.142857 26.857143-104.571428 8.571428-66.857143-20.571429-104-85.714286-60-102.857143-12.571429-264.571428-143.428571-58.857143-212.571428-144-14.285714-21.142857-2.285715-36t34.285715 0.571428q2.285714 1.142857 6.571428 4t6 4.571429V99.428571q0-41.142857 26.857143-70.285714T153.142857 0h718.285714q38.285714 0 65.142858 29.142857t26.857142 70.285714v396.571429l12-8.571429q22.285714-15.428571 34.285715-0.571428t-2.285715 36z\"  ></path></symbol><symbol id=\"icon-snapchat-square\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 656q0-12.571429-12.571429-15.428571-38.285714-8-67.428571-33.142858t-45.714286-62.285714q-4-8-4-14.285714 0-8.571429 11.142857-14.857143t24.285714-9.714286 24.285715-11.714285T745.714286 473.714286q0-10.857143-10.571429-18T713.142857 448.571429q-6.285714 0-17.714286 4.571428t-18.285714 4.571429q-2.285714 0-6.857143-1.142857 2.857143-36 2.857143-65.714286 0-44.571429-9.714286-65.142857-20.571429-44.571429-58.571428-69.428572T517.714286 231.428571q-113.142857 0-157.142857 94.285715-10.285714 21.714286-10.285715 65.714285 0 21.714286 3.428572 65.142858-5.714286 1.142857-8.571429 1.142857-6.285714 0-18-4.571429t-17.428571-4.571428q-11.428571 0-21.428572 7.142857T278.285714 474.285714q0 12 11.142857 20.285715T313.714286 506.285714t24.285714 9.714286 11.142857 14.857143q0 6.285714-4 14.285714-36.571429 78.857143-113.142857 95.428572-12.571429 2.857143-12.571429 15.428571 0 26.857143 78.857143 39.428571 1.142857 2.857143 3.428572 14.857143t6.285714 17.428572 13.142857 5.428571q7.428571 0 22-2.857143t22-2.857143q20 0 38.571429 8.571429t31.142857 18.571429 32.857143 18.571428 43.714285 8.571429q24.571429 0 45.142858-8.571429t32.857142-18.571428 30.857143-18.571429 38.571429-8.571429q7.428571 0 22.285714 2.571429t22.285714 2.571429q8.571429 0 12.857143-5.428572t6.571429-17.714286 2.857143-14q78.857143-12.571429 78.857143-39.428571z m146.285714-418.285714v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-snapchat-ghost\" viewBox=\"0 0 1024 1024\"><path d=\"M521.142857 73.142857q76.571429-0.571429 137.428572 39.142857T752 222.285714q15.428571 33.142857 15.428571 102.285715 0 26.857143-5.142857 109.142857 8 4 16 4 10.285714 0 29.142857-7.714286t29.142858-7.714286q16.571429 0 32 10.285715t15.428571 26.285714q0 18.285714-18 30.857143t-39.428571 18-39.428572 16.571428T769.142857 551.428571q0 8.571429 6.857143 24.571429 21.142857 46.857143 58.571429 85.714286t82.571428 57.714285q16 6.857143 45.714286 13.142858 16 3.428571 16 20 0 40-125.142857 58.857142-4 6.285714-6.285715 22.285715t-8 26.571428-18.857142 10.571429q-11.428571 0-35.428572-3.714286t-36.571428-3.714286q-21.142857 0-35.428572 2.857143-18.285714 2.857143-36 12.857143t-33.142857 21.714286-33.142857 23.142857-43.428572 19.142857-56.571428 7.714286q-29.714286 0-55.142857-7.714286t-42.857143-19.142857-32.857143-23.142857-33.142857-21.714286-35.428572-12.857143q-14.857143-2.857143-36-2.857143-13.714286 0-37.428571 4.285715T204.571429 872q-14.285714 0-20-10.571429t-8-27.142857-6.285715-22.857143q-125.142857-18.857143-125.142857-58.857142 0-16.571429 16-20 29.714286-6.285714 45.714286-13.142858 44.571429-18.285714 82.571428-57.714285T248 576q6.857143-16 6.857143-24.571429 0-16-18-27.142857T197.142857 507.428571t-39.714286-18T139.428571 459.428571q0-15.428571 14.857143-26t31.428572-10.571428q8.571429 0 27.428571 7.428571t30.285714 7.428572q10.285714 0 18.285715-4-5.142857-81.142857-5.142857-108.571429 0-69.714286 15.428571-102.857143 36.571429-78.285714 98.285714-113.142857t150.857143-36z\"  ></path></symbol><symbol id=\"icon-smile-o\" viewBox=\"0 0 1024 1024\"><path d=\"M721.142857 614.285714q-21.142857 69.142857-78.857143 111.428572t-130.285714 42.285714-130.285714-42.285714-78.857143-111.428572q-4.571429-14.285714 2.285714-27.714285t21.714286-18q14.285714-4.571429 27.714286 2.285714t18 21.714286q14.285714 45.714286 52.857142 74T512 694.857143t86.571429-28.285714T651.428571 592.571429q4.571429-14.857143 18.285715-21.714286t28-2.285714 21.142857 18 2.285714 27.714285zM438.857143 365.714286q0 30.285714-21.428572 51.714285T365.714286 438.857143t-51.714286-21.428572T292.571429 365.714286t21.428571-51.714286T365.714286 292.571429t51.714285 21.428571T438.857143 365.714286z m292.571428 0q0 30.285714-21.428571 51.714285T658.285714 438.857143t-51.714285-21.428572T585.142857 365.714286t21.428572-51.714286T658.285714 292.571429t51.714286 21.428571T731.428571 365.714286z m146.285715 146.285714q0-74.285714-29.142857-142t-78-116.571429-116.571429-78T512 146.285714t-142 29.142857-116.571429 78-78 116.571429T146.285714 512t29.142857 142 78 116.571429 116.571429 78 142 29.142857 142-29.142857 116.571429-78 78-116.571429 29.142857-142z m73.142857 0q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-snapchat\" viewBox=\"0 0 1024 1024\"><path d=\"M804 656q0-12.571429-12.571429-15.428571-38.285714-8.571429-67.428571-33.714286t-45.714286-61.714286q-4-10.857143-4-14.285714 0-8.571429 11.142857-14.857143t24.571429-9.714286 24.571429-11.714285T745.714286 473.714286q0-10.857143-10.571429-18T713.142857 448.571429q-6.857143 0-18.285714 4.571428t-17.714286 4.571429q-2.285714 0-6.857143-1.142857 2.857143-54.285714 2.857143-65.142858 0-45.142857-9.714286-65.142857-20.571429-44.571429-58.857142-69.428571T517.714286 232q-113.714286 0-157.142857 94.285714-9.714286 20-9.714286 65.142857 0 10.857143 2.857143 65.142858-2.285714 1.142857-8 1.142857-6.857143 0-18.285715-4.285715t-17.142857-4.285714q-12 0-22 6.857143T278.285714 474.285714q0 12 11.142857 20.285715t24.571429 11.714285 24.571429 9.714286 11.142857 14.857143q0 3.428571-4 14.285714-36.571429 78.857143-113.142857 95.428572-12.571429 2.857143-12.571429 15.428571 0 26.285714 78.285714 38.857143 1.142857 2.857143 3.428572 14.857143t6.571428 17.428571 13.428572 5.428572q6.857143 0 21.428571-2.571429t22.571429-2.571429q20 0 38.285714 8.571429t30.857143 18.571429 32.857143 18.571428 43.714285 8.571429q24.571429 0 45.142858-8.571429t32.857142-18.571428T620 736t38.285714-8.571429q8 0 22.571429 2.285715t22 2.285714q9.142857 0 13.142857-5.714286t6.285714-17.142857 3.428572-14.285714q78.285714-12.571429 78.285714-38.857143z m146.857143-144q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-snowflake-o\" viewBox=\"0 0 1024 1024\"><path d=\"M931.428571 638.285714l-95.428571 18.857143 106.285714 61.142857q13.142857 7.428571 16.857143 22t-3.714286 27.714286q-8 13.142857-22.285714 16.857143t-27.428571-3.714286l-106.285715-60.571428 31.428572 91.428571q7.428571 21.714286-6.857143 36.285714t-34.571429 11.714286-27.714285-24l-58.285715-171.428571-154.857142-89.142858v178.857143l118.857142 136q9.142857 10.285714 9.714286 22.285715t-6.285714 20.857142-16.285714 14.285715-21.142858 3.142857-20.857142-12.571429l-64-73.142857v122.285714q0 14.857143-10.857143 25.714286t-25.714286 10.857143-25.714286-10.857143-10.857143-25.714286v-122.285714l-64 73.142857q-9.142857 10.285714-20.857142 12.571429t-21.142858-3.142857-16.285714-14.285715-6.285714-20.857142 9.714286-22.285715l118.857142-136v-178.857143l-154.857142 89.142858-58.285715 171.428571q-7.428571 21.142857-27.714285 24t-34.571429-11.714286-6.857143-36.285714l31.428572-91.428571-106.285715 60.571428q-13.142857 7.428571-27.428571 3.714286T68.571429 768q-7.428571-13.142857-3.714286-27.714286T81.714286 718.285714l106.285714-61.142857-95.428571-18.857143q-16.571429-3.428571-24-16.571428t-4.857143-26.571429 14.571428-22.857143 28.571429-6l177.142857 35.428572 154.857143-89.714286-154.857143-89.714286-177.142857 35.428572q-2.285714 0.571429-7.428572 0.571428-15.428571 0-25.142857-10.285714t-10.857143-22.857143 6.285715-24.571428 22.857143-14.857143l95.428571-18.857143L81.714286 305.714286q-13.142857-7.428571-16.857143-22T68.571429 256t22.285714-17.142857 27.428571 4l106.285715 60.571428-31.428572-91.428571q-7.428571-21.714286 6.857143-36.285714t34.571429-11.714286 27.714285 24l58.285715 171.428571 154.857142 89.142858V269.714286L356.571429 133.714286q-9.142857-10.285714-9.714286-22.285715t6.285714-20.857142 16.285714-14.285715 21.142858-3.142857 20.857142 12.571429l64 73.142857V36.571429q0-14.857143 10.857143-25.714286t25.714286-10.857143 25.714286 10.857143 10.857143 25.714286v122.285714l64-73.142857q9.142857-10.285714 20.857142-12.571429t21.142858 3.142857 16.285714 14.285715 6.285714 20.857142-9.714286 22.285715L548.571429 269.714286v178.857143l154.857142-89.142858 58.285715-171.428571q7.428571-21.142857 27.714285-24t34.571429 11.714286 6.857143 36.285714l-31.428572 91.428571 106.285715-60.571428q13.142857-7.428571 27.428571-3.714286t22.285714 16.857143q7.428571 13.142857 3.714286 27.714286T942.285714 305.714286l-106.285714 61.142857 95.428571 18.857143q15.428571 2.857143 22.857143 14.857143t6.285715 24.571428-10.857143 22.857143-25.142857 10.285714q-5.142857 0-7.428572-0.571428l-177.142857-35.428572-154.857143 89.714286 154.857143 89.714286 177.142857-35.428572q16.571429-3.428571 28.571429 6t14.571428 22.857143-4.857143 26.571429-24 16.571428z\"  ></path></symbol><symbol id=\"icon-soccer-ball-o\" viewBox=\"0 0 1024 1024\"><path d=\"M348 466.285714l164-118.857143 164 118.857143-62.285714 192H410.857143zM512 0q104 0 198.857143 40.571429t163.428571 109.142857 109.142857 163.428571 40.571429 198.857143-40.571429 198.857143-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0z m353.714286 771.428571q85.142857-116 85.142857-259.428571v-1.714286l-58.285714 50.857143-137.142858-128 36-184.571428 76.571429 6.857142q-85.714286-117.714286-222.285714-161.142857l30.285714 70.857143-164 90.857143-164-90.857143 30.285714-70.857143q-136.571429 43.428571-222.285714 161.142857l77.142857-6.857142 35.428572 184.571428-137.142858 128-58.285714-50.857143v1.714286q0 143.428571 85.142857 259.428571l17.142857-75.428571 186.285715 22.857143 79.428571 170.285714-66.285714 39.428572q66.857143 22.285714 137.142857 22.285714t137.142857-22.285714l-66.285714-39.428572 79.428571-170.285714 186.285715-22.857143z\"  ></path></symbol><symbol id=\"icon-sort-alpha-asc\" viewBox=\"0 0 1024 1024\"><path d=\"M717.142857 233.142857h101.142857l-41.142857-124.571428-6.857143-26.857143q-1.142857-9.142857-1.142857-11.428572h-2.285714l-1.714286 11.428572q0 0.571429-2 10.285714t-4.285714 16.571429zM457.142857 822.857143q0 6.857143-5.714286 13.714286l-182.285714 182.285714q-5.714286 5.142857-13.142857 5.142857-6.857143 0-13.142857-5.142857L60 836q-8.571429-9.142857-4-20 4.571429-11.428571 17.142857-11.428571h109.714286V18.285714q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857v786.285715h109.714286q8 0 13.142857 5.142857t5.142857 13.142857z m477.714286 68v133.142857H601.142857v-51.428571l210.857143-302.285715q6.857143-10.285714 12-15.428571l6.285714-5.142857v-1.714286q-1.142857 0-3.714285 0.285714t-4.285715 0.285715q-6.857143 1.714286-17.142857 1.714285h-132.571428v65.714286H604v-130.857143h324v50.857143l-210.857143 302.857143q-3.428571 4.571429-12 14.857143l-6.285714 6.285714v1.142857l8-1.142857q5.142857-1.142857 17.142857-1.142857h141.714286v-68h69.142857z m50.857143-512.571429v60.571429h-164.571429V378.285714h42.857143l-26.857143-82.285714h-138.857143l-26.857143 82.285714h42.857143v60.571429H550.285714V378.285714h40L721.714286 0h92.571428l131.428572 378.285714h40z\"  ></path></symbol><symbol id=\"icon-sort-alpha-desc\" viewBox=\"0 0 1024 1024\"><path d=\"M717.142857 818.285714h101.142857l-41.142857-124.571428-6.857143-26.857143q-1.142857-9.142857-1.142857-11.428572h-2.285714l-1.714286 11.428572q0 0.571429-2 10.285714t-4.285714 16.571429z m-260 4.571429q0 6.857143-5.714286 13.714286l-182.285714 182.285714q-5.714286 5.142857-13.142857 5.142857-6.857143 0-13.142857-5.142857L60 836q-8.571429-9.142857-4-20 4.571429-11.428571 17.142857-11.428571h109.714286V18.285714q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857v786.285715h109.714286q8 0 13.142857 5.142857t5.142857 13.142857z m528.571429 140.571428v60.571429h-164.571429v-60.571429h42.857143l-26.857143-82.285714h-138.857143l-26.857143 82.285714h42.857143v60.571429H550.285714v-60.571429h40l131.428572-378.285714h92.571428l131.428572 378.285714h40z m-50.857143-657.714285v133.142857H601.142857v-51.428572l210.857143-302.285714q6.857143-10.285714 12-15.428571l6.285714-5.142857v-1.714286q-1.142857 0-3.714285 0.285714t-4.285715 0.285714q-6.857143 1.714286-17.142857 1.714286h-132.571428v65.714286H604V0h324v50.857143l-210.857143 302.857143q-3.428571 4.571429-12 14.857143l-6.285714 5.714285v1.714286l8-1.714286q5.142857-0.571429 17.142857-0.571428h141.714286V305.714286h69.142857z\"  ></path></symbol><symbol id=\"icon-sort-amount-asc\" viewBox=\"0 0 1024 1024\"><path d=\"M420.571429 822.857143q0 6.857143-5.714286 13.714286l-182.285714 182.285714q-5.714286 5.142857-13.142858 5.142857-6.857143 0-13.142857-5.142857L23.428571 836q-8.571429-9.142857-4-20 4.571429-11.428571 17.142858-11.428571h109.714285V18.285714q0-8 5.142857-13.142857t13.142858-5.142857h109.714285q8 0 13.142857 5.142857t5.142858 13.142857v786.285715h109.714285q8 0 13.142857 5.142857t5.142858 13.142857z m603.428571 73.142857v109.714286q0 8-5.142857 13.142857t-13.142857 5.142857H530.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-109.714286q0-8 5.142857-13.142857t13.142857-5.142857h475.428572q8 0 13.142857 5.142857t5.142857 13.142857z m-109.714286-292.571429v109.714286q0 8-5.142857 13.142857t-13.142857 5.142857H530.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-109.714286q0-8 5.142857-13.142857t13.142857-5.142857h365.714286q8 0 13.142857 5.142857t5.142857 13.142857z m-109.714285-292.571428v109.714286q0 8-5.142858 13.142857t-13.142857 5.142857H530.285714q-8 0-13.142857-5.142857t-5.142857-13.142857V310.857143q0-8 5.142857-13.142857t13.142857-5.142857h256q8 0 13.142857 5.142857t5.142858 13.142857zM694.857143 18.285714v109.714286q0 8-5.142857 13.142857t-13.142857 5.142857H530.285714q-8 0-13.142857-5.142857t-5.142857-13.142857V18.285714q0-8 5.142857-13.142857t13.142857-5.142857h146.285715q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-sort-desc\" viewBox=\"0 0 1024 1024\"><path d=\"M795.681749 621.714286q0 14.857143-10.857143 25.714285l-256 256q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143L221.396034 647.428571q-10.857143-10.857143-10.857143-25.714285t10.857143-25.714286 25.714286-10.857143h512q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-sort-down\" viewBox=\"0 0 1024 1024\"><path d=\"M795.681749 621.714286q0 14.857143-10.857143 25.714285l-256 256q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143L221.396034 647.428571q-10.857143-10.857143-10.857143-25.714285t10.857143-25.714286 25.714286-10.857143h512q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-sort-numeric-asc\" viewBox=\"0 0 1024 1024\"><path d=\"M842.285714 750.285714q0-36-25.142857-66.285714t-58.857143-30.285714q-29.714286 0-47.428571 21.142857t-17.714286 53.714286 20.857143 54.285714 59.714286 21.714286q28.571429 0 48.571428-15.428572t20-38.857143z m-348.571428 72.571429q0 6.857143-5.714286 13.714286l-182.285714 182.285714q-5.714286 5.142857-13.142857 5.142857-6.857143 0-13.142858-5.142857L96.571429 836q-8.571429-9.142857-4-20 4.571429-11.428571 17.142857-11.428571h109.714285V18.285714q0-8 5.142858-13.142857t13.142857-5.142857h109.714285q8 0 13.142858 5.142857t5.142857 13.142857v786.285715h109.714285q8 0 13.142858 5.142857t5.142857 13.142857z m428.571428-39.428572q0 35.428571-7.428571 69.428572t-23.428572 65.142857-38.857142 54.571429-56.285715 37.428571T723.428571 1024q-35.428571 0-61.714285-9.142857-13.714286-4.571429-24-8.571429l22.285714-64.571428q8.571429 4 17.714286 6.285714 21.142857 7.428571 42.857143 7.428571 48 0 76.857142-33.428571T835.428571 838.857143h-1.142857q-12 13.142857-35.142857 21.142857t-48.285714 8q-60.571429 0-98.857143-40.857143T613.714286 728.571429q0-60 41.142857-101.714286t103.428571-41.714286q70.285714 0 117.142857 54t46.857143 144.285714z m-17.142857-409.714285v65.142857H637.142857V373.714286h95.428572V126.857143q0-4 0.285714-10.857143t0.285714-9.714286v-9.142857h-1.142857l-4 6.857143q-4.571429 7.428571-14.857143 17.714286l-35.428571 33.142857-46.857143-49.142857L740.571429 0h70.285714v373.714286h94.285714z\"  ></path></symbol><symbol id=\"icon-sort-asc\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 402.285714q0 14.857143-10.857143 25.714286t-25.714286 10.857143H256q-14.857143 0-25.714286-10.857143T219.428571 402.285714t10.857143-25.714285l256-256q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l256 256q10.857143 10.857143 10.857143 25.714285z\"  ></path></symbol><symbol id=\"icon-sort-amount-desc\" viewBox=\"0 0 1024 1024\"><path d=\"M694.857143 896v109.714286q0 8-5.142857 13.142857t-13.142857 5.142857H530.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-109.714286q0-8 5.142857-13.142857t13.142857-5.142857h146.285715q8 0 13.142857 5.142857t5.142857 13.142857z m-274.285714-73.142857q0 6.857143-5.714286 13.714286l-182.285714 182.285714q-5.714286 5.142857-13.142858 5.142857-6.857143 0-13.142857-5.142857L23.428571 836q-8.571429-9.142857-4-20 4.571429-11.428571 17.142858-11.428571h109.714285V18.285714q0-8 5.142857-13.142857t13.142858-5.142857h109.714285q8 0 13.142857 5.142857t5.142858 13.142857v786.285715h109.714285q8 0 13.142857 5.142857t5.142858 13.142857z m384-219.428572v109.714286q0 8-5.142858 13.142857t-13.142857 5.142857H530.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-109.714286q0-8 5.142857-13.142857t13.142857-5.142857h256q8 0 13.142857 5.142857t5.142858 13.142857z m109.714285-292.571428v109.714286q0 8-5.142857 13.142857t-13.142857 5.142857H530.285714q-8 0-13.142857-5.142857t-5.142857-13.142857V310.857143q0-8 5.142857-13.142857t13.142857-5.142857h365.714286q8 0 13.142857 5.142857t5.142857 13.142857z m109.714286-292.571429v109.714286q0 8-5.142857 13.142857t-13.142857 5.142857H530.285714q-8 0-13.142857-5.142857t-5.142857-13.142857V18.285714q0-8 5.142857-13.142857t13.142857-5.142857h475.428572q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-sort-numeric-desc\" viewBox=\"0 0 1024 1024\"><path d=\"M842.285714 165.142857q0-36-25.142857-66.285714t-58.857143-30.285714q-29.714286 0-47.428571 21.142857t-17.714286 53.714285 20.857143 54.285715 59.714286 21.714285q28.571429 0 48.571428-15.428571t20-38.857143zM493.714286 822.857143q0 6.857143-5.714286 13.714286l-182.285714 182.285714q-5.714286 5.142857-13.142857 5.142857-6.857143 0-13.142858-5.142857L96.571429 836q-8.571429-9.142857-4-20 4.571429-11.428571 17.142857-11.428571h109.714285V18.285714q0-8 5.142858-13.142857t13.142857-5.142857h109.714285q8 0 13.142858 5.142857t5.142857 13.142857v786.285715h109.714285q8 0 13.142858 5.142857t5.142857 13.142857z m411.428571 136v65.142857H637.142857v-65.142857h95.428572v-246.857143q0-4 0.285714-10.857143t0.285714-9.714286v-9.142857h-1.142857l-4 6.857143q-4.571429 7.428571-14.857143 17.714286l-35.428571 33.142857-46.857143-49.142857 109.714286-105.714286h70.285714v373.714286h94.285714z m17.142857-760.571429q0 35.428571-7.428571 69.428572t-23.428572 65.142857-38.857142 54.571428-56.285715 37.428572T723.428571 438.857143q-35.428571 0-61.714285-9.142857-13.714286-4.571429-24-8.571429l22.285714-64.571428q8.571429 4 17.714286 6.285714 21.142857 7.428571 42.857143 7.428571 48 0 76.857142-33.428571T835.428571 253.714286h-1.142857q-12 13.142857-35.142857 21.142857t-48.285714 8q-60.571429 0-98.857143-40.857143T613.714286 143.428571q0-60 41.142857-101.714285t103.428571-41.714286q70.285714 0 117.142857 54t46.857143 144.285714z\"  ></path></symbol><symbol id=\"icon-sort-up\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 402.285714q0 14.857143-10.857143 25.714286t-25.714286 10.857143H256q-14.857143 0-25.714286-10.857143T219.428571 402.285714t10.857143-25.714285l256-256q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l256 256q10.857143 10.857143 10.857143 25.714285z\"  ></path></symbol><symbol id=\"icon-sort\" viewBox=\"0 0 1024 1024\"><path d=\"M795.681749 621.714286q0 14.857143-10.857143 25.714285l-256 256q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143L221.396034 647.428571q-10.857143-10.857143-10.857143-25.714285t10.857143-25.714286 25.714286-10.857143h512q14.857143 0 25.714286 10.857143t10.857143 25.714286z m0-219.428572q0 14.857143-10.857143 25.714286t-25.714286 10.857143H247.11032q-14.857143 0-25.714286-10.857143T210.538891 402.285714t10.857143-25.714285l256-256q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l256 256q10.857143 10.857143 10.857143 25.714285z\"  ></path></symbol><symbol id=\"icon-soundcloud\" viewBox=\"0 0 1316 1024\"><path d=\"M448 784l9.142857-137.714286-9.142857-298.857143q-0.571429-5.714286-4.285714-9.714285t-9.428572-4q-5.142857 0-9.142857 4t-4 9.714285l-8 298.857143 8 137.714286q0.571429 5.714286 4.285714 9.428571t8.857143 3.714286q12.571429 0 13.714286-13.142857z m169.142857-16.571429l6.285714-120.571428-6.857142-334.857143q0-9.142857-7.428572-13.714286-4.571429-2.857143-9.142857-2.857143t-9.142857 2.857143q-7.428571 4.571429-7.428572 13.714286l-0.571428 3.428571-5.714286 330.857143q0 0.571429 6.285714 134.857143v0.571429q0 5.714286 3.428572 9.714285 5.142857 6.285714 13.142857 6.285715 6.285714 0 11.428571-5.142857 5.142857-4 5.142858-11.428572zM20 573.142857l11.428571 73.142857-11.428571 72q-1.142857 5.142857-5.142857 5.142857t-5.142857-5.142857L0 646.285714l9.714286-73.142857q1.142857-5.142857 5.142857-5.142857t5.142857 5.142857z m49.142857-45.142857l14.857143 118.285714-14.857143 116q-1.142857 5.142857-5.714286 5.142857-5.142857 0-5.142857-5.714285l-13.142857-115.428572 13.142857-118.285714q0-5.142857 5.142857-5.142857 4.571429 0 5.714286 5.142857z m160 258.857143zM121.714286 506.285714l14.285714 140-14.285714 135.428572q0 6.285714-6.285715 6.285714-5.714286 0-6.857142-6.285714l-12-135.428572 12-140q1.142857-6.857143 6.857142-6.857143 6.285714 0 6.285715 6.857143z m53.714285-4l13.142858 144-13.142858 139.428572q-1.142857 7.428571-8 7.428571-7.428571 0-7.428571-7.428571l-12-139.428572 12-144q0-7.428571 7.428571-7.428571 6.857143 0 8 7.428571z m53.714286 10.285715l12 133.714285-12 140.571429q-1.142857 9.142857-9.142857 9.142857-3.428571 0-6-2.571429T211.428571 786.857143l-11.428571-140.571429 11.428571-133.714285q0-3.428571 2.571429-6T220 504q8 0 9.142857 8.571429z m218.857143 271.428571zM282.857143 429.142857l12 217.142857-12 140.571429q0 4-2.857143 7.142857t-6.857143 3.142857q-9.142857 0-10.285714-10.285714l-10.285714-140.571429 10.285714-217.142857q1.142857-10.285714 10.285714-10.285714 4 0 6.857143 3.142857t2.857143 7.142857z m53.714286-49.142857l10.857142 267.428571-10.857142 139.428572q0 4.571429-3.142858 7.714286T325.714286 797.714286q-10.285714 0-11.428572-10.857143l-9.142857-139.428572 9.142857-267.428571q1.142857-10.857143 11.428572-10.857143 4.571429 0 7.714285 3.142857T336.571429 380z m56-22.857143l10.285714 289.142857-10.285714 138.285715q-1.142857 12-12.571429 12-10.857143 0-12-12l-9.142857-138.285715 9.142857-289.142857q0-5.142857 3.714286-8.857143T380 344.571429q5.142857 0 8.571429 3.714285t4 8.857143z m224 424zM503.428571 354.857143l8.571429 291.428571-8.571429 136.571429q0 5.714286-4.285714 10T489.142857 797.142857t-9.714286-4-4.571428-10.285714l-8-136.571429 8-291.428571q0-6.285714 4.285714-10.285714t10-4 10 4 4.285714 10.285714z m56.571429 10.857143l8 281.142857-8 134.857143q0 6.285714-4.571429 10.857143t-10.857142 4.571428-10.857143-4.571428-5.142857-10.857143l-6.857143-134.857143 6.857143-281.142857q0.571429-6.857143 5.142857-11.428572t10.857143-4.571428 10.571428 4.571428 4.857143 11.428572z m121.142857 281.142857l-8 132q0 7.428571-5.142857 12.571428t-12.571429 5.142858-12.571428-5.142858-5.714286-12.571428l-3.428571-65.142857-3.428572-66.857143 6.857143-363.428572v-1.714285q1.142857-8.571429 6.857143-13.714286 5.142857-4 11.428571-4 4.571429 0 8.571429 2.857143 8 4.571429 9.142857 14.857143z m635.428572-10.857143q0 66.857143-47.428572 114t-114.285714 47.142857h-449.142857q-7.428571-1.142857-12.571429-6.285714t-5.142857-12.571429V264.571429q0-13.142857 16-18.857143 48.571429-19.428571 103.428571-19.428572 111.428571 0 193.142858 75.142857T1092 486.285714q30.285714-12.571429 62.857143-12.571428 66.857143 0 114.285714 47.428571t47.428572 114.857143z\"  ></path></symbol><symbol id=\"icon-space-shuttle\" viewBox=\"0 0 1243 1024\"><path d=\"M354.285714 640q-62.857143 36.571429-153.142857 36.571429H128v-36.571429h-36.571429q-7.428571 0-12.857142-13.428571T73.142857 594.285714q0-13.714286 4-28-33.142857-1.142857-55.142857-6T0 548.571429t22-11.714286T77.142857 530.857143q-4-14.285714-4-28 0-18.857143 5.428572-32.285714T91.428571 457.142857h36.571429v-36.571428h73.142857q90.285714 0 153.142857 36.571428h636q24 4 60.857143 10.285714t46 8q50.857143 8.571429 85.714286 23.142858t47.714286 27.142857 12.857142 22.857143-12.857142 22.857142-47.714286 27.142858-85.714286 23.142857q-9.142857 1.714286-46 8t-60.857143 10.285714H354.285714z m639.428572-144q30.285714 20.571429 30.285714 52.571429t-30.285714 52.571428l46.285714 17.142857q38.857143-27.428571 38.857143-69.714285t-38.857143-69.714286zM357.142857 649.142857h580q-124 21.714286-260.571428 45.714286-32.571429 0-64.571429 13.714286t-47.428571 27.428571l-16 13.714286-164.571429 164.571428q-14.857143 14.857143-40.285714 25.714286t-51.142857 10.857143h-54.857143l-53.142857-265.142857h16.571428q89.714286 0 156-36.571429zM201.142857 411.428571h-16.571428l53.142857-265.142857h54.857143q26.285714 0 51.428571 10.857143t40 25.714286l164.571429 164.571428q2.285714 2.285714 6.285714 6t17.428571 13.142858 27.714286 16.571428 35.142857 13.142857T676.571429 402.285714l260.571428 45.714286H357.142857q-66.285714-36.571429-156-36.571429z\"  ></path></symbol><symbol id=\"icon-spinner\" viewBox=\"0 0 1024 1024\"><path d=\"M300.571429 796.571429q0 30.285714-21.428572 51.714285T227.428571 869.714286q-29.714286 0-51.428571-21.714286t-21.714286-51.428571q0-30.285714 21.428572-51.714286T227.428571 723.428571t51.714286 21.428572T300.571429 796.571429z m284.571428 117.714285q0 30.285714-21.428571 51.714286T512 987.428571t-51.714286-21.428571T438.857143 914.285714t21.428571-51.714285T512 841.142857t51.714286 21.428572 21.428571 51.714285zM182.857143 512q0 30.285714-21.428572 51.714286T109.714286 585.142857t-51.714286-21.428571T36.571429 512t21.428571-51.714286T109.714286 438.857143t51.714285 21.428571T182.857143 512z m686.857143 284.571429q0 29.714286-21.714286 51.428571t-51.428571 21.714286q-30.285714 0-51.714286-21.428572T723.428571 796.571429t21.428572-51.714286 51.714286-21.428572 51.714285 21.428572 21.428572 51.714286zM318.857143 227.428571q0 37.714286-26.857143 64.571429t-64.571429 26.857143-64.571428-26.857143-26.857143-64.571429 26.857143-64.571428 64.571428-26.857143 64.571429 26.857143 26.857143 64.571428z m668.571428 284.571429q0 30.285714-21.428571 51.714286T914.285714 585.142857t-51.714285-21.428571T841.142857 512t21.428572-51.714286T914.285714 438.857143t51.714286 21.428571T987.428571 512z m-365.714285-402.285714q0 45.714286-32 77.714285t-77.714286 32-77.714286-32-32-77.714285 32-77.714286T512 0t77.714286 32 32 77.714286z m302.857143 117.714285q0 53.142857-37.714286 90.571429T796.571429 355.428571q-53.142857 0-90.571429-37.428571T668.571429 227.428571q0-52.571429 37.428571-90.285714t90.571429-37.714286q52.571429 0 90.285714 37.714286t37.714286 90.285714z\"  ></path></symbol><symbol id=\"icon-spoon\" viewBox=\"0 0 1024 1024\"><path d=\"M608.201549 301.714286q0 82.857143-32.571429 139.142857T488.772977 518.285714l25.714286 469.142857q1.142857 14.857143-9.142857 25.714286t-25.142857 10.857143H370.487263q-14.857143 0-25.142857-10.857143t-9.142857-25.714286l25.714285-469.142857q-54.285714-21.142857-86.857143-77.428571T242.487263 301.714286q0-73.142857 24.285714-142.571429T333.915834 44.857143 425.344406 0t91.428571 44.857143 67.142857 114.285714T608.201549 301.714286z\"  ></path></symbol><symbol id=\"icon-square-o\" viewBox=\"0 0 1024 1024\"><path d=\"M749.714286 146.285714H274.285714q-37.714286 0-64.571428 26.857143t-26.857143 64.571429v475.428571q0 37.714286 26.857143 64.571429t64.571428 26.857143h475.428572q37.714286 0 64.571428-26.857143t26.857143-64.571429V237.714286q0-37.714286-26.857143-64.571429t-64.571428-26.857143z m164.571428 91.428572v475.428571q0 68-48.285714 116.285714T749.714286 877.714286H274.285714q-68 0-116.285714-48.285715T109.714286 713.142857V237.714286q0-68 48.285714-116.285715T274.285714 73.142857h475.428572q68 0 116.285714 48.285714T914.285714 237.714286z\"  ></path></symbol><symbol id=\"icon-spotify\" viewBox=\"0 0 1024 1024\"><path d=\"M717.142857 691.428571q0-18.285714-17.142857-29.142857-110.285714-65.714286-255.428571-65.714285-76 0-164 19.428571-24 5.142857-24 29.714286 0 11.428571 7.714285 19.714285T284.571429 673.714286q2.857143 0 21.142857-4.571429 75.428571-15.428571 138.857143-15.428571 129.142857 0 226.857142 58.857143 10.857143 6.285714 18.857143 6.285714 10.857143 0 18.857143-7.714286t8-19.714286z m54.857143-122.857142q0-22.857143-20-34.857143-135.428571-80.571429-313.142857-80.571429-87.428571 0-173.142857 24-27.428571 7.428571-27.428572 36.571429 0 14.285714 10 24.285714T272.571429 548q4 0 21.142857-4.571429 69.714286-18.857143 143.428571-18.857142 159.428571 0 278.857143 70.857142 13.714286 7.428571 21.714286 7.428572 14.285714 0 24.285714-10T772 568.571429z m61.714286-141.714286q0-26.857143-22.857143-40-72-41.714286-167.428572-63.142857T447.428571 302.285714q-116.571429 0-208 26.857143-13.142857 4-22 14.571429T208.571429 371.428571q0 17.714286 11.714285 29.714286t29.428572 12q6.285714 0 22.857143-4.571428 76-21.142857 175.428571-21.142858 90.857143 0 176.857143 19.428572t144.857143 54.285714q12 6.857143 22.857143 6.857143 16.571429 0 28.857142-11.714286T833.714286 426.857143z m117.142857 85.142857q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-square\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 237.714286v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-stack-exchange\" viewBox=\"0 0 1024 1024\"><path d=\"M860.785369 716v37.714286q0 48.571429-32.857143 82.571428T748.785369 870.285714h-32.571429l-148.571429 153.714286v-153.714286H265.356797q-46.285714 0-79.142857-34T153.356797 753.714286v-37.714286h707.428572z m0-186.285714v145.714285H153.356797V529.714286h707.428572z m0-187.428572v145.714286H153.356797V342.285714h707.428572z m0-80v38.285715H153.356797v-38.285715q0-48 32.857143-82T265.356797 146.285714h483.428572q46.285714 0 79.142857 34T860.785369 262.285714z\"  ></path></symbol><symbol id=\"icon-star-half-empty\" viewBox=\"0 0 1024 1024\"><path d=\"M714.285714 546.857143l146.857143-142.857143-203.428571-29.714286-37.714286-5.714285-17.142857-34.285715-90.857143-184v550.285715l33.714286 17.714285 181.714285 96-34.285714-202.857143-6.857143-37.714285z m258.285715-149.714286l-207.428572 202.285714 49.142857 285.714286q2.857143 18.857143-3.428571 29.428572t-19.428572 10.571428q-9.714286 0-22.857142-6.857143l-256.571429-134.857143-256.571429 134.857143q-13.142857 6.857143-22.857142 6.857143-13.142857 0-19.428572-10.571428t-3.428571-29.428572l49.142857-285.714286L50.857143 397.142857q-18.285714-18.285714-13.142857-34T68.571429 343.428571l286.857142-41.714285L484 41.714286q11.428571-23.428571 28-23.428572 16 0 28 23.428572l128.571429 260 286.857142 41.714285q25.714286 4 30.857143 19.714286t-13.714285 34z\"  ></path></symbol><symbol id=\"icon-stack-overflow\" viewBox=\"0 0 1024 1024\"><path d=\"M809.714286 932.571429H170.857143v-274.285715H79.428571v365.714286h821.714286v-365.714286h-91.428571v274.285715z m-538.285715-299.428572l18.857143-89.714286 447.428572 94.285715-18.857143 89.142857z m58.857143-213.714286l38.285715-83.428571 414.285714 193.714286-38.285714 82.857143z m114.857143-203.428571l58.285714-70.285714 350.857143 293.142857-58.285714 70.285714zM672 0l272.571429 366.285714-73.142858 54.857143L598.857143 54.857143zM261.714286 840.571429v-90.857143h457.142857v90.857143H261.714286z\"  ></path></symbol><symbol id=\"icon-star-half\" viewBox=\"0 0 1024 1024\"><path d=\"M725.844586 18.285714v765.142857l-256.571429 134.857143q-12.571429 6.857143-22.857143 6.857143-12 0-18-8.285714T422.416014 896.571429q0-3.428571 1.142857-11.428572l49.142858-285.714286L264.701729 397.142857Q250.416014 381.714286 250.416014 369.714286q0-21.142857 32-26.285715l286.857143-41.714285L697.844586 41.714286q10.857143-23.428571 28-23.428572z\"  ></path></symbol><symbol id=\"icon-star\" viewBox=\"0 0 1024 1024\"><path d=\"M987.428571 369.714286q0 12.571429-14.857142 27.428571l-207.428572 202.285714 49.142857 285.714286q0.571429 4 0.571429 11.428572 0 12-6 20.285714T791.428571 925.142857q-10.857143 0-22.857142-6.857143l-256.571429-134.857143-256.571429 134.857143q-12.571429 6.857143-22.857142 6.857143-12 0-18-8.285714T208.571429 896.571429q0-3.428571 1.142857-11.428572l49.142857-285.714286L50.857143 397.142857Q36.571429 381.714286 36.571429 369.714286q0-21.142857 32-26.285715l286.857142-41.714285L484 41.714286q10.857143-23.428571 28-23.428572t28 23.428572l128.571429 260 286.857142 41.714285q32 5.142857 32 26.285715z\"  ></path></symbol><symbol id=\"icon-star-half-o\" viewBox=\"0 0 1024 1024\"><path d=\"M714.285714 546.857143l146.857143-142.857143-203.428571-29.714286-37.714286-5.714285-17.142857-34.285715-90.857143-184v550.285715l33.714286 17.714285 181.714285 96-34.285714-202.857143-6.857143-37.714285z m258.285715-149.714286l-207.428572 202.285714 49.142857 285.714286q2.857143 18.857143-3.428571 29.428572t-19.428572 10.571428q-9.714286 0-22.857142-6.857143l-256.571429-134.857143-256.571429 134.857143q-13.142857 6.857143-22.857142 6.857143-13.142857 0-19.428572-10.571428t-3.428571-29.428572l49.142857-285.714286L50.857143 397.142857q-18.285714-18.285714-13.142857-34T68.571429 343.428571l286.857142-41.714285L484 41.714286q11.428571-23.428571 28-23.428572 16 0 28 23.428572l128.571429 260 286.857142 41.714285q25.714286 4 30.857143 19.714286t-13.714285 34z\"  ></path></symbol><symbol id=\"icon-star-o\" viewBox=\"0 0 1024 1024\"><path d=\"M686.285714 573.714286l174.857143-169.714286-241.142857-35.428571-108-218.285715-108 218.285715-241.142857 35.428571 174.857143 169.714286-41.714286 240.571428 216-113.714285 215.428571 113.714285z m301.142857-204q0 12.571429-14.857142 27.428571l-207.428572 202.285714 49.142857 285.714286q0.571429 4 0.571429 11.428572 0 28.571429-23.428572 28.571428-10.857143 0-22.857142-6.857143l-256.571429-134.857143-256.571429 134.857143q-12.571429 6.857143-22.857142 6.857143-12 0-18-8.285714T208.571429 896.571429q0-3.428571 1.142857-11.428572l49.142857-285.714286L50.857143 397.142857Q36.571429 381.714286 36.571429 369.714286q0-21.142857 32-26.285715l286.857142-41.714285L484 41.714286q10.857143-23.428571 28-23.428572t28 23.428572l128.571429 260 286.857142 41.714285q32 5.142857 32 26.285715z\"  ></path></symbol><symbol id=\"icon-star-half-full\" viewBox=\"0 0 1024 1024\"><path d=\"M714.285714 546.857143l146.857143-142.857143-203.428571-29.714286-37.714286-5.714285-17.142857-34.285715-90.857143-184v550.285715l33.714286 17.714285 181.714285 96-34.285714-202.857143-6.857143-37.714285z m258.285715-149.714286l-207.428572 202.285714 49.142857 285.714286q2.857143 18.857143-3.428571 29.428572t-19.428572 10.571428q-9.714286 0-22.857142-6.857143l-256.571429-134.857143-256.571429 134.857143q-13.142857 6.857143-22.857142 6.857143-13.142857 0-19.428572-10.571428t-3.428571-29.428572l49.142857-285.714286L50.857143 397.142857q-18.285714-18.285714-13.142857-34T68.571429 343.428571l286.857142-41.714285L484 41.714286q11.428571-23.428571 28-23.428572 16 0 28 23.428572l128.571429 260 286.857142 41.714285q25.714286 4 30.857143 19.714286t-13.714285 34z\"  ></path></symbol><symbol id=\"icon-sticky-note-o\" viewBox=\"0 0 1024 1024\"><path d=\"M873.142857 731.428571h-141.714286v141.714286q16.571429-5.714286 23.428572-12.571428l105.714286-105.714286q6.857143-6.857143 12.571428-23.428572z m-160-73.142857h164.571429V146.285714H146.285714v731.428572h512v-164.571429q0-22.857143 16-38.857143t38.857143-16z m237.714286-530.285714v585.142857q0 22.857143-11.428572 50.285714t-27.428571 43.428572l-105.142857 105.142857q-16 16-43.428572 27.428571t-50.285714 11.428572H128q-22.857143 0-38.857143-16t-16-38.857143V128q0-22.857143 16-38.857143t38.857143-16h768q22.857143 0 38.857143 16t16 38.857143z\"  ></path></symbol><symbol id=\"icon-step-forward\" viewBox=\"0 0 1024 1024\"><path d=\"M171.382014 943.428571q-10.857143 10.857143-18.285714 7.428572t-7.428571-18.285714V91.428571q0-14.857143 7.428571-18.285714t18.285714 7.428572l405.714286 405.714285q5.142857 5.142857 7.428571 10.857143V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h73.142857q14.857143 0 25.714286 10.857143t10.857143 25.714286v804.571428q0 14.857143-10.857143 25.714286t-25.714286 10.857143H621.0963q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V526.857143q-2.285714 5.714286-7.428571 10.857143z\"  ></path></symbol><symbol id=\"icon-steam\" viewBox=\"0 0 1024 1024\"><path d=\"M904 332.571429q0 57.714286-40.857143 98.571428T764.571429 472t-98.571429-40.857143T625.142857 332.571429t40.857143-98.571429T764.571429 193.142857t98.571428 40.857143T904 332.571429z m-440 424q0-59.428571-41.714286-101.142858t-101.142857-41.714285q-15.428571 0-30.857143 3.428571l59.428572 24q44 17.714286 62.571428 60.857143T413.142857 788.571429q-17.714286 44-61.142857 62.285714t-86.857143 0.571428q-12-4.571429-35.428571-14t-34.857143-14q18.285714 34.285714 52 55.142858t74.285714 20.857142q59.428571 0 101.142857-41.714285t41.714286-101.142857z m474.285714-423.428572q0-72-51.142857-123.142857T764 158.857143q-72.571429 0-123.714286 51.142857T589.142857 333.142857q0 72.571429 51.142857 123.428572t123.714286 50.857142q72 0 123.142857-50.857142t51.142857-123.428572z m85.714286 0q0 108-76.285714 184T764 593.142857l-249.714286 182.285714q-6.857143 73.714286-62.285714 124.571429t-130.857143 50.857143q-69.142857 0-122.285714-43.428572t-67.428572-109.714285L0 745.142857V500l222.285714 89.714286q45.142857-27.428571 98.857143-27.428572 7.428571 0 20 1.142857l162.285714-232.571428q1.142857-106.857143 77.428572-182.285714T764 73.142857q107.428571 0 183.714286 76.285714T1024 333.142857z\"  ></path></symbol><symbol id=\"icon-steam-square\" viewBox=\"0 0 1024 1024\"><path d=\"M782.857143 369.714286q0-45.714286-32.571429-78T672 259.428571t-78 32.571429T561.714286 369.714286q0 45.714286 32.285714 78T672 480t78.285714-32.285714 32.571429-78z m-348.571429 336q0 47.428571-33.142857 80.285714T321.142857 818.857143q-32 0-58.857143-16.571429t-41.142857-44q29.714286 11.428571 56 22.857143 34.285714 13.714286 68.571429-0.857143t48.571428-49.428571q13.714286-34.285714-0.857143-68.571429t-49.428571-48l-46.857143-18.857143q12.571429-2.857143 24-2.857142 46.857143 0 80 32.857142t33.142857 80.285715z m516.571429-468v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714v-87.428571l98.285714 39.428571q11.428571 52.571429 53.428572 86.857143t96.285714 34.285714q59.428571 0 103.428572-40t49.714285-98.857142l197.142857-144q85.714286 0 146-60.285715T877.714286 370.857143q0-85.714286-60.285715-146T671.428571 164.571429q-84.571429 0-144.571428 59.714285T465.714286 368.571429L337.142857 552.571429q-5.142857-0.571429-16-0.571429-42.857143 0-78.285714 21.142857L73.142857 505.142857V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z m-141.142857 133.142857q0 57.142857-40.571429 97.428571T671.428571 508.571429t-97.428571-40.285715T533.714286 370.857143t40.285714-97.714286 97.428571-40.571428q57.714286 0 98 40.285714T809.714286 370.857143z\"  ></path></symbol><symbol id=\"icon-stethoscope\" viewBox=\"0 0 1024 1024\"><path d=\"M841.142857 402.285714q0-14.857143-10.857143-25.714285t-25.714285-10.857143-25.714286 10.857143-10.857143 25.714285 10.857143 25.714286 25.714286 10.857143 25.714285-10.857143 10.857143-25.714286z m73.142857 0q0 35.428571-20.285714 63.428572t-52.857143 40v225.714285q0 90.857143-75.142857 155.142858T585.142857 950.857143t-180.857143-64.285714T329.142857 731.428571v-75.428571q-93.714286-11.428571-156.571428-73.142857T109.714286 438.857143V146.285714q0-14.857143 10.857143-25.714285t25.714285-10.857143q3.428571 0 9.142857 1.142857 9.714286-17.142857 26.857143-27.428572t37.142857-10.285714q30.285714 0 51.714286 21.428572T292.571429 146.285714t-21.428572 51.714286T219.428571 219.428571q-18.857143 0-36.571428-10.285714v229.714286q0 60.571429 53.714286 103.428571t129.142857 42.857143 129.142857-42.857143 53.714286-103.428571V209.142857q-17.714286 10.285714-36.571429 10.285714-30.285714 0-51.714286-21.428571T438.857143 146.285714t21.428571-51.714285T512 73.142857q20 0 37.142857 10.285714t26.857143 27.428572q5.714286-1.142857 9.142857-1.142857 14.857143 0 25.714286 10.857143t10.857143 25.714285v292.571429q0 82.285714-62.857143 144t-156.571429 73.142857v75.428571q0 60.571429 53.714286 103.428572t129.142857 42.857143 129.142857-42.857143 53.714286-103.428572V505.714286q-32.571429-12-52.857143-40T694.857143 402.285714q0-45.714286 32-77.714285t77.714286-32 77.714285 32 32 77.714285z\"  ></path></symbol><symbol id=\"icon-step-backward\" viewBox=\"0 0 1024 1024\"><path d=\"M700.538929 80.571429q10.857143-10.857143 18.285714-7.428572t7.428571 18.285714v841.142858q0 14.857143-7.428571 18.285714t-18.285714-7.428572L294.824643 537.714286q-5.142857-5.142857-7.428572-10.857143v387.428571q0 14.857143-10.857142 25.714286t-25.714286 10.857143H177.681786q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h73.142857q14.857143 0 25.714286 10.857143t10.857142 25.714286v387.428571q2.285714-5.714286 7.428572-10.857143z\"  ></path></symbol><symbol id=\"icon-stop\" viewBox=\"0 0 1024 1024\"><path d=\"M941.967463 109.714286v804.571428q0 14.857143-10.857143 25.714286t-25.714286 10.857143H100.824606q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-stop-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M694.857143 676.571429V347.428571q0-8-5.142857-13.142857t-13.142857-5.142857H347.428571q-8 0-13.142857 5.142857t-5.142857 13.142857v329.142858q0 8 5.142857 13.142857t13.142857 5.142857h329.142858q8 0 13.142857-5.142857t5.142857-13.142857z m256-164.571429q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-stop-circle-o\" viewBox=\"0 0 1024 1024\"><path d=\"M512 73.142857q119.428571 0 220.285714 58.857143T892 291.714286 950.857143 512t-58.857143 220.285714-159.714286 159.714286T512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857z m0 749.714286q84.571429 0 156-41.714286t113.142857-113.142857 41.714286-156-41.714286-156-113.142857-113.142857-156-41.714286-156 41.714286-113.142857 113.142857-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286z m-164.571429-128q-8 0-13.142857-5.142857t-5.142857-13.142857V347.428571q0-8 5.142857-13.142857t13.142857-5.142857h329.142858q8 0 13.142857 5.142857t5.142857 13.142857v329.142858q0 8-5.142857 13.142857t-13.142857 5.142857H347.428571z\"  ></path></symbol><symbol id=\"icon-sticky-note\" viewBox=\"0 0 1024 1024\"><path d=\"M658.285714 713.142857v237.714286H128q-22.857143 0-38.857143-16t-16-38.857143V128q0-22.857143 16-38.857143t38.857143-16h768q22.857143 0 38.857143 16t16 38.857143v530.285714h-237.714286q-22.857143 0-38.857143 16t-16 38.857143z m73.142857 18.285714h217.714286q-8.571429 46.857143-37.142857 75.428572l-105.142857 105.142857q-28.571429 28.571429-75.428572 37.142857v-217.714286z\"  ></path></symbol><symbol id=\"icon-street-view\" viewBox=\"0 0 1024 1024\"><path d=\"M877.714286 877.714286q0 36-35.142857 64.857143t-93.714286 46.285714-128.571429 26.285714T475.428571 1024t-144.857142-8.857143-128.571429-26.285714-93.714286-46.285714T73.142857 877.714286q0-28 18.857143-50.571429t52-38 67.428571-25.428571 74.857143-16.857143q14.857143-2.857143 27.428572 6t14.857143 23.714286q2.857143 14.857143-6 27.428571t-23.714286 14.857143q-33.142857 5.714286-60.571429 13.428571t-43.714285 14.571429-27.714286 13.428571-15.714286 11.142857-4.857143 6.857143q1.714286 6.285714 15.428572 15.142857t41.714285 18.857143 65.142858 18.571429 91.714285 14.285714 115.142857 5.714286 115.142858-5.714286 91.714285-14.285714 65.142857-18.857143 41.714286-19.142857 15.428572-15.714286q-0.571429-2.285714-4.857143-6.285714t-15.714286-10.857143-27.714286-13.428571-43.714285-14.285715-60.571429-13.428571q-14.857143-2.285714-23.714286-14.857143t-6-27.428571q2.285714-14.857143 14.857143-23.714286t27.428572-6q40.571429 6.857143 74.857142 16.857143t67.428572 25.428571 52 38 18.857143 50.571429z m-219.428572-512v219.428571q0 14.857143-10.857143 25.714286t-25.714285 10.857143h-36.571429v219.428571q0 14.857143-10.857143 25.714286t-25.714285 10.857143H402.285714q-14.857143 0-25.714285-10.857143t-10.857143-25.714286v-219.428571h-36.571429q-14.857143 0-25.714286-10.857143t-10.857142-25.714286V365.714286q0-30.285714 21.428571-51.714286T365.714286 292.571429h219.428571q30.285714 0 51.714286 21.428571T658.285714 365.714286z m-54.857143-219.428572q0 53.142857-37.428571 90.571429T475.428571 274.285714t-90.571428-37.428571T347.428571 146.285714t37.428572-90.571428T475.428571 18.285714t90.571429 37.428572T603.428571 146.285714z\"  ></path></symbol><symbol id=\"icon-strikethrough\" viewBox=\"0 0 1024 1024\"><path d=\"M1005.714286 512q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h987.428572zM276 475.428571q-16-20-29.142857-45.714285-27.428571-56-27.428572-107.428572 0-103.428571 76.571429-176.571428 76-72.571429 224.571429-72.571429 28.571429 0 95.428571 10.857143 37.714286 6.857143 101.142857 27.428571 5.714286 21.714286 12 67.428572 8 70.285714 8 104.571428 0 10.285714-2.857143 25.714286l-6.857143 1.714286-48-3.428572-8-1.142857q-28.571429-85.142857-58.857142-117.142857-50.285714-52-120-52-65.142857 0-104 33.714286-38.285714 33.142857-38.285715 83.428571 0 41.714286 37.714286 80t159.428571 73.714286q39.428571 11.428571 98.857143 37.714286 33.142857 16 54.285715 29.714285H276z m289.714286 146.285715h234.857143q4 22.285714 4 52.571428 0 63.428571-23.428572 121.142857-13.142857 32-40.571428 59.428572-21.142857 20-62.285715 46.285714-45.714286 27.428571-87.428571 37.714286-45.714286 12-116 12-65.142857 0-111.428572-13.142857l-80-22.857143q-32.571429-9.142857-41.142857-16-4.571429-4.571429-4.571428-12.571429v-7.428571q0-61.714286-1.142857-89.142857-0.571429-17.142857 0-38.857143l1.142857-21.142857v-25.142857l58.285714-1.142858q8.571429 19.428571 17.142857 40.571429t12.857143 32 7.142857 15.428571q20 32.571429 45.714286 53.714286 24.571429 20.571429 60 32.571429 33.714286 12.571429 75.428571 12.571428 36.571429 0 79.428572-15.428571 44-14.857143 69.714285-49.142857 26.857143-34.857143 26.857143-73.714286 0-48-46.285714-89.714286-19.428571-16.571429-78.285714-40.571428z\"  ></path></symbol><symbol id=\"icon-stumbleupon\" viewBox=\"0 0 1097 1024\"><path d=\"M606.857143 406.857143V339.428571q0-24-17.142857-41.142857t-41.142857-17.142857-41.142858 17.142857-17.142857 41.142857v349.714286q0 100-72 170.857143t-173.142857 70.857143q-101.714286 0-173.428571-71.714286T0 685.714286V533.714286h187.428571v149.714285q0 24.571429 17.142858 41.428572t41.142857 16.857143 41.142857-16.857143 17.142857-41.428572V329.142857q0-97.714286 72.285714-166.857143T548.571429 93.142857q100.571429 0 172.571428 69.714286t72 168v77.714286l-111.428571 33.142857z m302.857143 126.857143h187.428571v152q0 101.714286-71.714286 173.428571T852 930.857143q-101.142857 0-173.142857-71.142857T606.857143 688V534.857143l74.857143 34.857143 111.428571-33.142857v154.285714q0 24 17.142857 40.857143t41.142857 16.857143 41.142858-16.857143 17.142857-40.857143V533.714286z\"  ></path></symbol><symbol id=\"icon-subway\" viewBox=\"0 0 1024 1024\"><path d=\"M694.857143 0q105.714286 0 180.857143 53.428571T950.857143 182.857143v512q0 74.285714-71.714286 126.857143t-174.571428 55.428571l121.714285 115.428572q9.142857 8.571429 4.571429 20t-17.142857 11.428571H210.285714q-12.571429 0-17.142857-11.428571t4.571429-20l121.714285-115.428572q-102.857143-2.857143-174.571428-55.428571T73.142857 694.857143V182.857143Q73.142857 106.857143 148.285714 53.428571T329.142857 0h365.714286zM237.714286 749.714286q37.714286 0 64.571428-26.857143t26.857143-64.571429-26.857143-64.571428-64.571428-26.857143-64.571429 26.857143-26.857143 64.571428 26.857143 64.571429 64.571429 26.857143z m237.714285-310.857143V146.285714H164.571429v292.571429h310.857142z m310.857143 310.857143q37.714286 0 64.571429-26.857143t26.857143-64.571429-26.857143-64.571428-64.571429-26.857143-64.571428 26.857143-26.857143 64.571428 26.857143 64.571429 64.571428 26.857143z m91.428572-310.857143V146.285714H548.571429v292.571429h329.142857z\"  ></path></symbol><symbol id=\"icon-stumbleupon-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M568 479.428571l51.428571-15.428571v-35.428571q0-45.142857-33.142857-77.142858t-78.857143-32-78.857142 31.714286T395.428571 428v161.714286q0 11.428571-8 19.142857t-18.857142 7.714286-18.571429-7.714286T342.285714 589.714286V521.142857H256v69.714286q0 46.857143 32.857143 79.428571t79.714286 32.571429q46.285714 0 79.142857-32.285714T480.571429 592.571429V432.571429q0-10.857143 7.714285-18.857143t19.142857-8q10.857143 0 18.571429 8t7.714286 18.857143v30.857142z m190.285714 111.428572V521.142857h-85.714285v72q0 11.428571-7.714286 19.142857T645.714286 620q-10.857143 0-18.571429-8t-7.714286-18.857143V522.857143l-51.428571 14.857143-34.285714-16v70.285714q0 45.714286 33.142857 78.285714t79.428571 32.571429 79.142857-32.571429 32.857143-79.428571z m192.571429-78.857143q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-suitcase\" viewBox=\"0 0 1024 1024\"><path d=\"M365.714286 219.428571h292.571428V146.285714H365.714286v73.142857z m-201.142857 0v731.428572h-36.571429q-52.571429 0-90.285714-37.714286T0 822.857143V347.428571q0-52.571429 37.714286-90.285714t90.285714-37.714286h36.571429z m640 0v731.428572H219.428571V219.428571h73.142858V128q0-22.857143 16-38.857143t38.857142-16h329.142858q22.857143 0 38.857142 16t16 38.857143v91.428571h73.142858z m219.428571 128v475.428572q0 52.571429-37.714286 90.285714t-90.285714 37.714286h-36.571429V219.428571h36.571429q52.571429 0 90.285714 37.714286t37.714286 90.285714z\"  ></path></symbol><symbol id=\"icon-subscript\" viewBox=\"0 0 1024 1024\"><path d=\"M585.714286 782.285714v95.428572H444l-90.857143-144-13.714286-24q-4.571429-5.142857-6.285714-12h-1.714286q-0.571429 1.714286-1.428571 3.714285t-2 4.571429-1.714286 3.714286q-5.714286 11.428571-14.285714 25.142857l-88.571429 142.857143H76v-95.428572h73.142857l112.571429-166.285714-105.714286-155.428571H77.714286V364.571429h157.714285l79.428572 130.285714q1.142857 2.285714 13.142857 24 4.571429 5.142857 6.285714 12h1.714286q1.714286-5.142857 6.285714-12l14.285715-24 80-130.285714h146.857142v96H512l-105.142857 152.571428 116.571428 169.142857h62.285715z m365.142857 124v117.714286h-293.714286l-2.285714-15.428571q-1.714286-25.714286-1.714286-26.285715 0-36.571429 14.857143-66.857143t37.142857-49.428571 48-37.142857 48-31.142857 37.142857-30.857143 14.857143-36.571429q0-21.714286-16.857143-35.714285T796 680.571429q-29.142857 0-55.428571 22.285714-8 6.285714-20.571429 21.714286l-60-52.571429q14.857143-21.142857 36-37.714286 45.714286-37.142857 107.428571-37.142857 62.857143 0 101.714286 34t38.857143 90.571429q0 37.714286-19.714286 67.714285t-48 49.142858-56.857143 35.714285-49.714285 36-23.428572 41.714286h132.571429v-45.714286h72z\"  ></path></symbol><symbol id=\"icon-sun-o\" viewBox=\"0 0 1024 1024\"><path d=\"M841.142857 512q0-66.857143-26-127.714286t-70.285714-105.142857-105.142857-70.285714T512 182.857143t-127.714286 26-105.142857 70.285714-70.285714 105.142857T182.857143 512t26 127.714286 70.285714 105.142857 105.142857 70.285714T512 841.142857t127.714286-26 105.142857-70.285714 70.285714-105.142857T841.142857 512z m157.714286 158.285714q-2.285714 8.571429-11.428572 11.428572l-166.857142 54.857143v174.857142q0 9.142857-7.428572 14.857143-8.571429 5.714286-16.571428 2.285715l-166.857143-53.714286-102.857143 141.714286q-5.714286 7.428571-14.857143 7.428571t-14.857143-7.428571l-102.857143-141.714286-166.857143 53.714286q-8 3.428571-16.571428-2.285715-7.428571-5.714286-7.428572-14.857143v-174.857142l-166.857142-54.857143q-9.142857-2.857143-11.428572-11.428572-2.857143-9.714286 2.285714-16.571428l102.857143-141.714286L27.428571 370.285714q-5.142857-7.428571-2.285714-16.571428 2.285714-8.571429 11.428572-11.428572l166.857142-54.857143V112.571429q0-9.142857 7.428572-14.857143 8.571429-5.714286 16.571428-2.285715l166.857143 53.714286L497.142857 7.428571q5.142857-6.857143 14.857143-6.857142t14.857143 6.857142l102.857143 141.714286 166.857143-53.714286q8-3.428571 16.571428 2.285715 7.428571 5.714286 7.428572 14.857143v174.857142l166.857142 54.857143q9.142857 2.857143 11.428572 11.428572 2.857143 9.142857-2.285714 16.571428l-102.857143 141.714286 102.857143 141.714286q5.142857 6.857143 2.285714 16.571428z\"  ></path></symbol><symbol id=\"icon-superpowers\" viewBox=\"0 0 1024 1024\"><path d=\"M841.714286 530.857143q4-67.428571-18.857143-129.428572t-64.571429-108-101.142857-74.857142T530.857143 185.714286q-66.285714-4-128.857143 18.285714t-109.714286 63.142857-77.142857 100T181.142857 493.142857q-4 67.428571 18.857143 129.428572t64.571429 108 101.428571 74.857142T492.571429 838.285714q88.571429 5.142857 167.428571-33.714285t128-111.714286 53.714286-162zM1024 0l-199.428571 198.857143q68.571429 66.857143 103.142857 155.428571t28.857143 183.428572q-6.285714 104.571429-58.285715 193.714285t-137.714285 146T570.857143 948.571429L0 1024l198.285714-198.285714q-68.571429-66.285714-103.142857-155.142857T66.285714 486.857143q6.285714-105.142857 58.285715-194.285714t138-146T452.571429 75.428571q95.428571-12.571429 285.714285-37.714285t285.714286-37.714286z\"  ></path></symbol><symbol id=\"icon-tablet\" viewBox=\"0 0 1024 1024\"><path d=\"M518.194966 804.571429q0-14.857143-10.857143-25.714286t-25.714286-10.857143-25.714286 10.857143-10.857142 25.714286 10.857142 25.714285 25.714286 10.857143 25.714286-10.857143 10.857143-25.714285z m219.428571-91.428572V164.571429q0-7.428571-5.428571-12.857143T719.337823 146.285714H243.909251q-7.428571 0-12.857142 5.428572T225.623537 164.571429v548.571428q0 7.428571 5.428572 12.857143t12.857142 5.428571h475.428572q7.428571 0 12.857143-5.428571t5.428571-12.857143z m73.142857-548.571428v621.714285q0 37.714286-26.857143 64.571429t-64.571428 26.857143H243.909251q-37.714286 0-64.571428-26.857143T152.48068 786.285714V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h475.428572q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-table\" viewBox=\"0 0 1024 1024\"><path d=\"M329.142857 786.285714v-109.714285q0-8-5.142857-13.142858t-13.142857-5.142857H128q-8 0-13.142857 5.142857t-5.142857 13.142858v109.714285q0 8 5.142857 13.142857t13.142857 5.142858h182.857143q8 0 13.142857-5.142858t5.142857-13.142857z m0-219.428571V457.142857q0-8-5.142857-13.142857t-13.142857-5.142857H128q-8 0-13.142857 5.142857t-5.142857 13.142857v109.714286q0 8 5.142857 13.142857t13.142857 5.142857h182.857143q8 0 13.142857-5.142857t5.142857-13.142857z m292.571429 219.428571v-109.714285q0-8-5.142857-13.142858t-13.142858-5.142857H420.571429q-8 0-13.142858 5.142857t-5.142857 13.142858v109.714285q0 8 5.142857 13.142857t13.142858 5.142858h182.857142q8 0 13.142858-5.142858t5.142857-13.142857zM329.142857 347.428571V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858H128q-8 0-13.142857 5.142858t-5.142857 13.142857v109.714285q0 8 5.142857 13.142858t13.142857 5.142857h182.857143q8 0 13.142857-5.142857t5.142857-13.142858z m292.571429 219.428572V457.142857q0-8-5.142857-13.142857t-13.142858-5.142857H420.571429q-8 0-13.142858 5.142857t-5.142857 13.142857v109.714286q0 8 5.142857 13.142857t13.142858 5.142857h182.857142q8 0 13.142858-5.142857t5.142857-13.142857z m292.571428 219.428571v-109.714285q0-8-5.142857-13.142858t-13.142857-5.142857h-182.857143q-8 0-13.142857 5.142857t-5.142857 13.142858v109.714285q0 8 5.142857 13.142857t13.142857 5.142858h182.857143q8 0 13.142857-5.142858t5.142857-13.142857z m-292.571428-438.857143V237.714286q0-8-5.142857-13.142857t-13.142858-5.142858H420.571429q-8 0-13.142858 5.142858t-5.142857 13.142857v109.714285q0 8 5.142857 13.142858t13.142858 5.142857h182.857142q8 0 13.142858-5.142857t5.142857-13.142858z m292.571428 219.428572V457.142857q0-8-5.142857-13.142857t-13.142857-5.142857h-182.857143q-8 0-13.142857 5.142857t-5.142857 13.142857v109.714286q0 8 5.142857 13.142857t13.142857 5.142857h182.857143q8 0 13.142857-5.142857t5.142857-13.142857z m0-219.428572V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858h-182.857143q-8 0-13.142857 5.142858t-5.142857 13.142857v109.714285q0 8 5.142857 13.142858t13.142857 5.142857h182.857143q8 0 13.142857-5.142857t5.142857-13.142858z m73.142857-182.857142v621.714285q0 37.714286-26.857142 64.571429t-64.571429 26.857143H128q-37.714286 0-64.571429-26.857143T36.571429 786.285714V164.571429q0-37.714286 26.857142-64.571429t64.571429-26.857143h768q37.714286 0 64.571429 26.857143t26.857142 64.571429z\"  ></path></symbol><symbol id=\"icon-support\" viewBox=\"0 0 1024 1024\"><path d=\"M512 0q104 0 198.857143 40.571429t163.428571 109.142857 109.142857 163.428571 40.571429 198.857143-40.571429 198.857143-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0z m0 73.142857q-108.571429 0-206.285714 51.428572l110.857143 110.857142q46.857143-16 95.428571-16t95.428571 16l110.857143-110.857142q-97.714286-51.428571-206.285714-51.428572zM124.571429 718.285714l110.857142-110.857143q-16-46.857143-16-95.428571t16-95.428571L124.571429 305.714286q-51.428571 97.714286-51.428572 206.285714t51.428572 206.285714z m387.428571 232.571429q108.571429 0 206.285714-51.428572l-110.857143-110.857142q-46.857143 16-95.428571 16t-95.428571-16l-110.857143 110.857142q97.714286 51.428571 206.285714 51.428572z m0-219.428572q90.857143 0 155.142857-64.285714T731.428571 512t-64.285714-155.142857T512 292.571429 356.857143 356.857143 292.571429 512t64.285714 155.142857T512 731.428571z m276.571429-124l110.857142 110.857143q51.428571-97.714286 51.428572-206.285714t-51.428572-206.285714l-110.857142 110.857143q16 46.857143 16 95.428571t-16 95.428571z\"  ></path></symbol><symbol id=\"icon-superscript\" viewBox=\"0 0 1024 1024\"><path d=\"M585.714286 782.285714v95.428572H444l-90.857143-144-13.714286-24q-4.571429-5.142857-6.285714-12h-1.714286q-0.571429 1.714286-1.428571 3.714285t-2 4.571429-1.714286 3.714286q-5.714286 11.428571-14.285714 25.142857l-88.571429 142.857143H76v-95.428572h73.142857l112.571429-166.285714-105.714286-155.428571H77.714286V364.571429h157.714285l79.428572 130.285714q1.142857 2.285714 13.142857 24 4.571429 5.142857 6.285714 12h1.714286q1.714286-5.142857 6.285714-12l14.285715-24 80-130.285714h146.857142v96H512l-105.142857 152.571428 116.571428 169.142857h62.285715z m364-388v117.714286h-293.714286l-1.714286-15.428571q-2.285714-16-2.285714-26.285715 0-36.571429 14.857143-66.857143t37.142857-49.428571 48-37.142857 48-31.142857 37.142857-30.857143 14.857143-36.571429q0-21.714286-16.857143-35.714285T794.857143 168.571429q-29.142857 0-55.428572 22.285714-8 6.285714-20.571428 21.714286l-60-52.571429q14.857143-21.142857 36-37.714286 47.428571-37.142857 107.428571-37.142857 62.857143 0 101.714286 34t38.857143 90.571429q0 32-14 58.857143t-35.428572 43.714285T846.857143 345.714286t-46.857143 28.857143-37.428571 29.428571-17.428572 36h132.571429v-45.714286h72z\"  ></path></symbol><symbol id=\"icon-tasks\" viewBox=\"0 0 1024 1024\"><path d=\"M585.142857 804.571429h365.714286v-73.142858h-365.714286v73.142858zM365.714286 512h585.142857V438.857143H365.714286v73.142857z m365.714285-292.571429h219.428572V146.285714h-219.428572v73.142857z m292.571429 475.428572v146.285714q0 14.857143-10.857143 25.714286t-25.714286 10.857143H36.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286v-146.285714q0-14.857143 10.857143-25.714286t25.714286-10.857143h950.857142q14.857143 0 25.714286 10.857143t10.857143 25.714286z m0-292.571429v146.285715q0 14.857143-10.857143 25.714285t-25.714286 10.857143H36.571429q-14.857143 0-25.714286-10.857143T0 548.571429V402.285714q0-14.857143 10.857143-25.714285t25.714286-10.857143h950.857142q14.857143 0 25.714286 10.857143t10.857143 25.714285z m0-292.571428v146.285714q0 14.857143-10.857143 25.714286t-25.714286 10.857143H36.571429q-14.857143 0-25.714286-10.857143T0 256V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h950.857142q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-tags\" viewBox=\"0 0 1097 1024\"><path d=\"M256 256q0-30.285714-21.428571-51.714286T182.857143 182.857143t-51.714286 21.428571T109.714286 256t21.428571 51.714286T182.857143 329.142857t51.714286-21.428571T256 256z m609.714286 329.142857q0 30.285714-21.142857 51.428572l-280.571429 281.142857q-22.285714 21.142857-52 21.142857-30.285714 0-51.428571-21.142857L52 508.571429q-21.714286-21.142857-36.857143-57.714286T0 384V146.285714q0-29.714286 21.714286-51.428571t51.428571-21.714286h237.714286q30.285714 0 66.857143 15.142857T436 125.142857l408.571429 408q21.142857 22.285714 21.142857 52z m219.428571 0q0 30.285714-21.142857 51.428572l-280.571429 281.142857q-22.285714 21.142857-52 21.142857-20.571429 0-33.714285-8t-30.285715-25.714286l268.571429-268.571428q21.142857-21.142857 21.142857-51.428572 0-29.714286-21.142857-52L527.428571 125.142857q-21.714286-21.714286-58.285714-36.857143T402.285714 73.142857h128q30.285714 0 66.857143 15.142857t58.285714 36.857143l408.571429 408q21.142857 22.285714 21.142857 52z\"  ></path></symbol><symbol id=\"icon-tag\" viewBox=\"0 0 1024 1024\"><path d=\"M329.142857 256q0-30.285714-21.428571-51.714286T256 182.857143t-51.714286 21.428571T182.857143 256t21.428571 51.714286T256 329.142857t51.714286-21.428571T329.142857 256z m609.714286 329.142857q0 30.285714-21.142857 51.428572l-280.571429 281.142857q-22.285714 21.142857-52 21.142857-30.285714 0-51.428571-21.142857L125.142857 508.571429q-21.714286-21.142857-36.857143-57.714286T73.142857 384V146.285714q0-29.714286 21.714286-51.428571t51.428571-21.714286h237.714286q30.285714 0 66.857143 15.142857T509.142857 125.142857l408.571429 408q21.142857 22.285714 21.142857 52z\"  ></path></symbol><symbol id=\"icon-tachometer\" viewBox=\"0 0 1024 1024\"><path d=\"M219.428571 658.285714q0-30.285714-21.428571-51.714285T146.285714 585.142857t-51.714285 21.428572T73.142857 658.285714t21.428572 51.714286T146.285714 731.428571t51.714286-21.428571T219.428571 658.285714z m109.714286-256q0-30.285714-21.428571-51.714285T256 329.142857t-51.714286 21.428572T182.857143 402.285714t21.428571 51.714286T256 475.428571t51.714286-21.428571T329.142857 402.285714z m244.571429 274.857143l57.714285-218.285714q3.428571-14.857143-4.285714-27.714286T605.142857 414.285714t-27.428571 3.714286-17.142857 22.571429l-57.714286 218.285714q-34.285714 2.857143-61.142857 24.857143t-36 56.285714q-11.428571 44 11.428571 83.428571t66.857143 50.857143 83.428571-11.428571 50.857143-66.857143q9.142857-34.285714-3.428571-66.857143t-41.142857-52z m377.142857-18.857143q0-30.285714-21.428572-51.714285T877.714286 585.142857t-51.714286 21.428572-21.428571 51.714285 21.428571 51.714286 51.714286 21.428571 51.714285-21.428571 21.428572-51.714286z m-365.714286-365.714285q0-30.285714-21.428571-51.714286T512 219.428571t-51.714286 21.428572T438.857143 292.571429t21.428571 51.714285T512 365.714286t51.714286-21.428572T585.142857 292.571429z m256 109.714285q0-30.285714-21.428571-51.714285T768 329.142857t-51.714286 21.428572T694.857143 402.285714t21.428571 51.714286T768 475.428571t51.714286-21.428571T841.142857 402.285714z m182.857143 256q0 149.142857-80.571429 276-10.857143 16.571429-30.857142 16.571429H111.428571q-20 0-30.857142-16.571429Q0 808 0 658.285714q0-104 40.571429-198.857143t109.142857-163.428571 163.428571-109.142857 198.857143-40.571429 198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-telegram\" viewBox=\"0 0 1024 1024\"><path d=\"M679.428571 746.857143l84-396q5.142857-25.142857-6-36t-29.428571-4L234.285714 501.142857q-16.571429 6.285714-22.571428 14.285714t-1.428572 15.142858 18.285715 11.142857l126.285714 39.428571 293.142857-184.571428q12-8 18.285714-3.428572 4 2.857143-2.285714 8.571429l-237.142857 214.285714-9.142857 130.285714q13.142857 0 25.714285-12.571428l61.714286-59.428572 128 94.285715q36.571429 20.571429 46.285714-21.714286z m344.571429-234.857143q0 104-40.571429 198.857143t-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0t198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-taxi\" viewBox=\"0 0 1170 1024\"><path d=\"M1042.285714 512q53.142857 0 90.571429 37.428571T1170.285714 640v219.428571q0 8-5.142857 13.142858t-13.142857 5.142857h-54.857143v36.571428q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286v-36.571428H292.571429v36.571428q0 45.714286-32 77.714286t-77.714286 32-77.714286-32-32-77.714286v-36.571428H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142858v-219.428571q0-53.142857 37.428571-90.571429T128 512h16l60-239.428571q13.142857-53.714286 59.428571-90T365.714286 146.285714h73.142857V18.285714q0-8 5.142857-13.142857t13.142857-5.142857h256q8 0 13.142857 5.142857t5.142857 13.142857v128h73.142858q56 0 102.285714 36.285715T966.285714 272.571429l60 239.428571h16zM182.857143 786.285714q37.714286 0 64.571428-26.857143t26.857143-64.571428-26.857143-64.571429-64.571428-26.857143-64.571429 26.857143-26.857143 64.571429 26.857143 64.571428 64.571429 26.857143z m112-274.285714h580.571428l-50.857142-204q-1.142857-4.571429-8-10t-12-5.428571H365.714286q-5.142857 0-12 5.428571T345.714286 308z m692.571428 274.285714q37.714286 0 64.571429-26.857143t26.857143-64.571428-26.857143-64.571429-64.571429-26.857143-64.571428 26.857143-26.857143 64.571429 26.857143 64.571428 64.571428 26.857143z\"  ></path></symbol><symbol id=\"icon-terminal\" viewBox=\"0 0 1024 1024\"><path d=\"M370.857143 561.714286l-266.285714 266.285714q-5.714286 5.714286-13.142858 5.714286t-13.142857-5.714286l-28.571428-28.571429q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l224.571428-224.571428L49.714286 324q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l28.571428-28.571429q5.714286-5.714286 13.142857-5.714286t13.142858 5.714286l266.285714 266.285714q5.714286 5.714286 5.714286 13.142858t-5.714286 13.142857z m616.571428 261.142857v36.571428q0 8-5.142857 13.142858t-13.142857 5.142857H420.571429q-8 0-13.142858-5.142857t-5.142857-13.142858v-36.571428q0-8 5.142857-13.142857t13.142858-5.142857h548.571428q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-tencent-weibo\" viewBox=\"0 0 1024 1024\"><path d=\"M627.428571 326.857143q0 45.714286-32.571428 78T517.142857 437.142857q-34.285714 0-63.428571-20-35.428571 38.285714-65.714286 83.428572-141.142857 212-115.428571 490.857142 0.571429 12.571429-7.142858 22T245.714286 1024h-2.857143q-11.428571 0-20-7.714286t-9.714286-19.142857q-8-72-2-141.428571t16.857143-124 30.857143-106.285715T298.285714 536.571429t42.285715-71.428572q34.857143-51.428571 75.428571-94.285714-9.142857-20-9.142857-44 0-45.714286 32.285714-78T517.142857 216.571429t78 32.285714T627.428571 326.857143z m217.714286 6.285714q0 90.285714-44.571428 166.857143t-121.428572 121.142857-167.142857 44.571429q-36.571429 0-74.857143-8-12-2.857143-18.571428-13.428572T414.857143 621.714286q2.857143-11.428571 13.142857-18t22.285714-4.285715q29.142857 7.428571 61.714286 7.428572 55.428571 0 106.285714-21.714286t87.428572-58.285714 58.285714-87.428572 21.714286-106.285714-21.714286-106.285714-58.285714-87.428572-87.428572-58.285714-106.285714-21.714286-106.285714 21.714286-87.428572 58.285714-58.285714 87.428572-21.714286 106.285714q0 65.142857 29.714286 124.571429 5.714286 11.428571 2 22.857143T255.428571 497.714286t-22.571428 1.714285-17.428572-14.857142Q178.857143 414.285714 178.857143 333.142857q0-68 26.571428-129.714286T276.571429 97.142857 382.857143 26.285714 512 0q90.285714 0 167.142857 44.571429T800.571429 166t44.571428 167.142857z\"  ></path></symbol><symbol id=\"icon-television\" viewBox=\"0 0 1170 1024\"><path d=\"M1024 713.142857V164.571429q0-7.428571-5.428571-12.857143T1005.714286 146.285714H91.428571q-7.428571 0-12.857142 5.428572T73.142857 164.571429v548.571428q0 7.428571 5.428572 12.857143t12.857142 5.428571h914.285715q7.428571 0 12.857143-5.428571t5.428571-12.857143z m73.142857-548.571428v548.571428q0 37.714286-26.857143 64.571429t-64.571428 26.857143h-420.571429v73.142857h201.142857q8 0 13.142857 5.142857t5.142858 13.142857v36.571429q0 8-5.142858 13.142857t-13.142857 5.142857H310.857143q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h201.142857v-73.142857H91.428571q-37.714286 0-64.571428-26.857143T0 713.142857V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h914.285715q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-text-height\" viewBox=\"0 0 1024 1024\"><path d=\"M996.571429 804.571429q18.857143 0 24 10.571428t-6.285715 25.428572l-72 92.571428q-11.428571 14.857143-28 14.857143t-28-14.857143l-72-92.571428q-11.428571-14.857143-6.285714-25.428572t24-10.571428h45.714286V219.428571h-45.714286q-18.857143 0-24-10.571428t6.285714-25.428572l72-92.571428q11.428571-14.857143 28-14.857143t28 14.857143l72 92.571428q11.428571 14.857143 6.285715 25.428572t-24 10.571428h-45.714286v585.142858h45.714286zM46.285714 73.714286l30.857143 15.428571q6.857143 2.857143 120.571429 2.857143 25.142857 0 75.428571-1.142857t75.428572-1.142857q20.571429 0 61.428571 0.285714t61.428571 0.285714h167.428572q3.428571 0 12 0.285715t11.714286 0 9.142857-1.714286 10-5.142857 8.571428-10l24-0.571429q2.285714 0 8 0.285714t8 0.285715q1.142857 64 1.142857 192 0 45.714286-2.857142 62.285714-22.285714 8-38.857143 10.285714-14.285714-25.142857-30.857143-73.142857-1.714286-5.142857-6.285714-27.428571t-8.285715-42-4.285714-20.285715q-3.428571-4.571429-6.857143-7.142857t-8.857143-3.428571-7.428571-1.428572-10.285714-0.285714-9.428572 0.285714q-9.714286 0-38-0.285714T516.571429 162.857143t-36.571429 1.142857-40.571429 3.428571q-5.142857 46.285714-4.571428 77.714286 0 53.714286 1.142857 221.714286t1.142857 260q0 9.142857-1.428571 40.857143t0 52.285714 7.142857 39.428571q22.857143 12 70.857143 24.285715t68.571428 21.428571q2.857143 22.857143 2.857143 28.571429 0 8-1.714286 16.571428l-19.428571 0.571429q-43.428571 1.142857-124.571429-4.571429t-118.285714-5.714285q-28.571429 0-86.285714 5.142857t-86.857143 5.142857q-1.714286-29.142857-1.714286-29.714286v-5.142857q9.714286-15.428571 35.142857-24.571429t56.285715-16.571428 44.571428-15.428572q10.857143-24 10.857143-218.857142 0-57.714286-1.714286-173.142858t-1.714285-173.142857V227.428571q0-1.142857 0.285714-8.857142t0.285714-14.285715-0.571428-14.571428-1.714286-13.714286-2.857143-8q-6.285714-6.857143-92.571428-6.857143-18.857143 0-53.142858 6.857143t-45.714285 14.857143q-10.857143 7.428571-19.428572 41.428571t-18 63.428572T32 318.285714q-24-14.857143-32-25.142857V74.285714z\"  ></path></symbol><symbol id=\"icon-text-width\" viewBox=\"0 0 1024 1024\"><path d=\"M111.637806 73.714286l30.857143 15.428571q6.857143 2.857143 120.571428 2.857143 25.142857 0 75.428572-1.142857t75.428571-1.142857q40 0 140.857143-0.571429t174-0.285714 141.142857 2.571428q18.857143 0.571429 32-17.714285l24-0.571429q2.285714 0 8 0.285714t8 0.285715q1.142857 64 1.142857 192 0 45.714286-2.857143 62.285714-22.285714 8-38.857143 10.285714-14.285714-25.142857-30.857142-73.142857-1.714286-5.142857-6.285715-27.142857t-8.571428-42-4-20.571429q-5.714286-7.428571-15.428572-10.857142-2.857143-1.142857-37.714285-1.142858-17.142857 0-53.142858-0.571428t-58.857142-0.571429-53.714286 1.142857-54.857143 4q-5.142857 46.285714-4.571429 77.714286l0.571429 86.857143v-29.714286q0 31.428571 0.571429 88t0.857142 102.857143 0.285715 87.428572q0 9.142857-1.428572 40.857142t0 52.285715 7.142857 39.428571q22.857143 12 70.857143 24.285714t68.571429 21.428572q2.857143 22.857143 2.857143 28.571428 0 8-1.714286 16.571429l-19.428571 0.571429q-43.428571 1.142857-124.571429-4.571429t-118.285714-5.714286q-28.571429 0-86.285715 5.142857t-86.857142 5.142858q-1.714286-29.142857-1.714286-29.714286v-5.142857q9.714286-15.428571 35.142857-24.571429t56.285714-16.571428 44.571429-15.428572q4-9.142857 6.571428-42.285714t3.428572-83.142857 0.857143-88.571429-0.285715-87.714286-0.285714-50.857142q0-4-1.428571-12.285715T428.209234 335.428571q0-4 0.285715-25.142857t0.571428-41.714285 0-43.714286-1.714286-38.571429-3.714285-18.285714q-6.285714-6.857143-92.571429-6.857143-23.428571 0-93.142857 7.714286T159.066377 182.857143q-10.857143 6.857143-19.428571 40.857143T121.637806 287.428571 97.352091 318.285714q-24-14.857143-32-25.142857V74.285714z m702.285714 732.571428q6.857143 0 24 11.142857t32.857143 23.714286 34 28 20.571428 17.142857q14.857143 12 14.857143 28t-14.857143 28q-2.285714 1.714286-20.571428 17.142857t-34 28-32.857143 23.714286-24 11.142857q-7.428571 0-11.714286-6t-5.714285-16.285714-1.428572-19.142857 0.857143-18.857143 0.857143-11.142857H211.637806q0 1.142857 0.857143 11.142857t0.857142 18.857143-1.428571 19.142857-5.714286 16.285714T194.494949 1022.285714q-6.857143 0-24-11.142857t-32.857143-23.714286-34-28-20.571429-17.142857q-14.857143-12-14.857143-28t14.857143-28q2.285714-1.714286 20.571429-17.142857t34-28 32.857143-23.714286 24-11.142857q7.428571 0 11.714285 6t5.714286 16.285715 1.428571 19.142857-0.857142 18.857143-0.857143 11.142857h585.142857q0-1.142857-0.857143-11.142857t-0.857143-18.857143 1.428572-19.142857 5.714285-16.285715 11.714286-6z\"  ></path></symbol><symbol id=\"icon-th-large\" viewBox=\"0 0 1024 1024\"><path d=\"M475.428571 585.142857v219.428572q0 29.714286-21.714285 51.428571t-51.428572 21.714286H109.714286q-29.714286 0-51.428572-21.714286t-21.714285-51.428571v-219.428572q0-29.714286 21.714285-51.428571t51.428572-21.714286h292.571428q29.714286 0 51.428572 21.714286t21.714285 51.428571z m0-438.857143v219.428572q0 29.714286-21.714285 51.428571t-51.428572 21.714286H109.714286q-29.714286 0-51.428572-21.714286T36.571429 365.714286V146.285714q0-29.714286 21.714285-51.428571t51.428572-21.714286h292.571428q29.714286 0 51.428572 21.714286t21.714285 51.428571z m512 438.857143v219.428572q0 29.714286-21.714285 51.428571t-51.428572 21.714286h-292.571428q-29.714286 0-51.428572-21.714286t-21.714285-51.428571v-219.428572q0-29.714286 21.714285-51.428571t51.428572-21.714286h292.571428q29.714286 0 51.428572 21.714286t21.714285 51.428571z m0-438.857143v219.428572q0 29.714286-21.714285 51.428571t-51.428572 21.714286h-292.571428q-29.714286 0-51.428572-21.714286t-21.714285-51.428571V146.285714q0-29.714286 21.714285-51.428571t51.428572-21.714286h292.571428q29.714286 0 51.428572 21.714286t21.714285 51.428571z\"  ></path></symbol><symbol id=\"icon-th-list\" viewBox=\"0 0 1024 1024\"><path d=\"M292.571429 713.142857v109.714286q0 22.857143-16 38.857143t-38.857143 16H54.857143q-22.857143 0-38.857143-16t-16-38.857143v-109.714286q0-22.857143 16-38.857143t38.857143-16h182.857143q22.857143 0 38.857143 16t16 38.857143z m0-292.571428v109.714285q0 22.857143-16 38.857143t-38.857143 16H54.857143q-22.857143 0-38.857143-16T0 530.285714V420.571429q0-22.857143 16-38.857143t38.857143-16h182.857143q22.857143 0 38.857143 16t16 38.857143z m731.428571 292.571428v109.714286q0 22.857143-16 38.857143t-38.857143 16H420.571429q-22.857143 0-38.857143-16t-16-38.857143v-109.714286q0-22.857143 16-38.857143t38.857143-16h548.571428q22.857143 0 38.857143 16t16 38.857143zM292.571429 128v109.714286q0 22.857143-16 38.857143t-38.857143 16H54.857143q-22.857143 0-38.857143-16T0 237.714286V128q0-22.857143 16-38.857143t38.857143-16h182.857143q22.857143 0 38.857143 16t16 38.857143z m731.428571 292.571429v109.714285q0 22.857143-16 38.857143t-38.857143 16H420.571429q-22.857143 0-38.857143-16t-16-38.857143V420.571429q0-22.857143 16-38.857143t38.857143-16h548.571428q22.857143 0 38.857143 16t16 38.857143z m0-292.571429v109.714286q0 22.857143-16 38.857143t-38.857143 16H420.571429q-22.857143 0-38.857143-16t-16-38.857143V128q0-22.857143 16-38.857143t38.857143-16h548.571428q22.857143 0 38.857143 16t16 38.857143z\"  ></path></symbol><symbol id=\"icon-thermometer-0\" viewBox=\"0 0 1024 1024\"><path d=\"M559.13472 768q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286q0-45.142857 32-77.428571t77.714285-32.285715 77.714286 32.285715 32 77.428571z m73.142857 0q0-44-19.428571-82.285714t-53.714286-64V182.857143q0-45.714286-32-77.714286t-77.714286-32-77.714285 32-32 77.714286v438.857143q-34.285714 25.714286-53.714286 64t-19.428572 82.285714q0 76 53.428572 129.428571T449.420434 950.857143t129.428572-53.428572T632.277577 768z m73.142857 0q0 105.714286-75.142857 180.857143T449.420434 1024t-180.857143-75.142857T193.420434 768q0-104 73.142857-178.857143V182.857143q0-76 53.428572-129.428572T449.420434 0t129.428572 53.428571T632.277577 182.857143v406.285714q73.142857 74.857143 73.142857 178.857143z m73.142857-329.142857v73.142857H668.849006V438.857143h109.714285z m0-146.285714v73.142857H668.849006V292.571429h109.714285z m0-146.285715v73.142857H668.849006V146.285714h109.714285z\"  ></path></symbol><symbol id=\"icon-th\" viewBox=\"0 0 1024 1024\"><path d=\"M292.571429 713.142857v109.714286q0 22.857143-16 38.857143t-38.857143 16H54.857143q-22.857143 0-38.857143-16t-16-38.857143v-109.714286q0-22.857143 16-38.857143t38.857143-16h182.857143q22.857143 0 38.857143 16t16 38.857143z m0-292.571428v109.714285q0 22.857143-16 38.857143t-38.857143 16H54.857143q-22.857143 0-38.857143-16T0 530.285714V420.571429q0-22.857143 16-38.857143t38.857143-16h182.857143q22.857143 0 38.857143 16t16 38.857143z m365.714285 292.571428v109.714286q0 22.857143-16 38.857143t-38.857143 16H420.571429q-22.857143 0-38.857143-16t-16-38.857143v-109.714286q0-22.857143 16-38.857143t38.857143-16h182.857142q22.857143 0 38.857143 16t16 38.857143zM292.571429 128v109.714286q0 22.857143-16 38.857143t-38.857143 16H54.857143q-22.857143 0-38.857143-16T0 237.714286V128q0-22.857143 16-38.857143t38.857143-16h182.857143q22.857143 0 38.857143 16t16 38.857143z m365.714285 292.571429v109.714285q0 22.857143-16 38.857143t-38.857143 16H420.571429q-22.857143 0-38.857143-16t-16-38.857143V420.571429q0-22.857143 16-38.857143t38.857143-16h182.857142q22.857143 0 38.857143 16t16 38.857143z m365.714286 292.571428v109.714286q0 22.857143-16 38.857143t-38.857143 16h-182.857143q-22.857143 0-38.857143-16t-16-38.857143v-109.714286q0-22.857143 16-38.857143t38.857143-16h182.857143q22.857143 0 38.857143 16t16 38.857143zM658.285714 128v109.714286q0 22.857143-16 38.857143t-38.857143 16H420.571429q-22.857143 0-38.857143-16t-16-38.857143V128q0-22.857143 16-38.857143t38.857143-16h182.857142q22.857143 0 38.857143 16t16 38.857143z m365.714286 292.571429v109.714285q0 22.857143-16 38.857143t-38.857143 16h-182.857143q-22.857143 0-38.857143-16t-16-38.857143V420.571429q0-22.857143 16-38.857143t38.857143-16h182.857143q22.857143 0 38.857143 16t16 38.857143z m0-292.571429v109.714286q0 22.857143-16 38.857143t-38.857143 16h-182.857143q-22.857143 0-38.857143-16t-16-38.857143V128q0-22.857143 16-38.857143t38.857143-16h182.857143q22.857143 0 38.857143 16t16 38.857143z\"  ></path></symbol><symbol id=\"icon-themeisle\" viewBox=\"0 0 1024 1024\"><path d=\"M486.857143 176.571429q0 16.571429-9.714286 30T451.428571 220t-25.714285-13.428571-9.714286-30 9.714286-30 25.714285-13.428572 25.714286 13.428572 9.714286 30zM393.142857 962.857143v-65.142857q0-17.142857-11.714286-29.428572T352.571429 856t-28.571429 12.285714-11.428571 29.428572v65.142857q0 17.142857 11.714285 29.714286t28.285715 12.571428q17.142857 0 28.857142-12.571428t11.714286-29.714286z m98.285714 0v-65.142857q0-17.142857-11.428571-29.428572t-28.571429-12.285714-28.857142 12.285714T410.857143 897.714286v65.142857q0 17.142857 11.714286 29.714286t28.857142 12.571428q16.571429 0 28.285715-12.571428t11.714285-29.714286z m99.428572 0v-65.142857q0-17.142857-11.714286-29.428572T550.285714 856t-28.857143 12.285714T509.714286 897.714286v65.142857q0 17.142857 11.714285 29.714286t28.857143 12.571428 28.857143-12.571428 11.714286-29.714286z m99.428571 0v-65.142857q0-17.142857-11.714285-29.428572T649.714286 856t-28.857143 12.285714-11.714286 29.428572v65.142857q0 17.142857 11.714286 29.714286t28.857143 12.571428 28.857143-12.571428 11.714285-29.714286z m153.142857-390.857143q-48 91.428571-132.571428 148.285714T526.285714 777.142857q-70.285714 0-131.142857-29.428571t-102-78.285715T228.571429 556.571429t-23.428572-132.571429q0-50.285714 12-99.428571-59.428571 100-59.428571 222.857142 0 92.571429 37.142857 178.285715t105.714286 143.428571q17.142857-32.571429 52-32.571428 32 0 49.142857 28.571428 18.285714-28.571429 49.714285-28.571428 32 0 49.142858 28.571428 18.285714-28.571429 49.714285-28.571428t49.714286 28.571428q17.142857-28.571429 49.142857-28.571428 16 0 30 8.857142t21.428572 23.142858q64-53.714286 101.142857-132.285715t41.714285-164.285714z m-85.714285-16.571429q0-42.857143-41.142857-42.857142-9.714286 0-26.857143 3.428571-54.285714 10.857143-85.142857 10.857143-129.142857 0-129.142858-138.857143 0-49.142857 17.142858-116.571429-47.428571 72.571429-47.428572 157.142858 0 85.714286 50.857143 148.857142t134.285714 63.142858q63.428571 0 120-40 7.428571-27.428571 7.428572-45.142858zM505.142857 178.857143q0-28.571429-18.285714-51.142857T440.571429 105.142857t-46.285715 22.571429-18.285714 51.142857q0 29.142857 18 51.714286T440.571429 253.142857t46.571428-22.571428T505.142857 178.857143z m359.428572 193.714286q0-54.857143-21.428572-102.285715t-64.571428-78.285714-99.142858-30.857143q-44 0-85.142857 20t-72.571428 53.714286q-27.428571 90.857143-27.428572 153.142857 0 59.428571 26 89.714286t84.285715 30.285714q30.285714 0 81.142857-10.857143 20.571429-3.428571 30.285714-3.428571 29.142857 0 44.285714 16t15.142857 45.714285q0 14.857143-2.285714 26.285715 42.857143-38.857143 67.142857-94.571429T864.571429 372.571429z m159.428571 124q0 63.428571-19.142857 142.571428T951.428571 756q-33.142857 36.571429-111.428571 81.428571T709.714286 897.142857l-2.285715 0.571429v65.142857q0 24.571429-16.857142 42.857143t-41.428572 18.285714q-32 0-49.142857-28.571429-18.285714 28.571429-49.714286 28.571429t-49.714285-28.571429q-17.142857 28.571429-49.142858 28.571429-31.428571 0-49.714285-28.571429-17.142857 28.571429-49.142857 28.571429-26.857143 0-42.857143-19.142857t-16-46.571429q-51.428571 38.857143-113.142857 38.857143-67.428571 0-120.571429-45.714286 30.857143-0.571429 60.571429-11.428571-64.571429-17.714286-104-72.571429 18.285714 4 40.571428 4 50.857143 0 93.714286-26.285714-109.714286-109.714286-137.142857-174.857143-13.714286-32-13.714286-91.428571 0-32.571429 5.142857-71.714286T23.142857 423.428571t31.428572-80.571428T104 282.857143t68.571429-24q33.714286 0 46.285714 29.714286 10.857143-16.571429 24-30.857143 1.142857-1.714286 6.857143-7.428572t7.428571-9.142857q5.714286-8.571429 13.142857-21.714286t14.285715-24 16-22.285714q49.714286-63.428571 120.857142-101.142857T570.285714 34.285714q20 0 35.428572 2.285715 33.714286-36.571429 83.428571-36.571429 47.428571 0 80 32.571429 2.857143 2.857143 2.857143 6.857142 0 2.857143-3.428571 7.714286t-7.142858 9.142857-9.142857 9.714286L746.285714 72q9.714286 3.428571 20.571429 10.285714t10.857143 13.714286q0 3.428571-9.142857 14.285714 89.714286 78.857143 112.571428 216 14.285714-17.142857 34.285714-17.142857 25.714286 0 57.142858 28 51.428571 45.714286 51.428571 159.428572z\"  ></path></symbol><symbol id=\"icon-thermometer-1\" viewBox=\"0 0 1024 1024\"><path d=\"M559.13472 768q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286q0-34.285714 20-62.857143t53.142857-40.571428v-79.428572h73.142857v79.428572q33.142857 12 53.142857 40.571428t20 62.857143z m73.142857 0q0-44-19.428571-82.285714t-53.714286-64V182.857143q0-45.714286-32-77.714286t-77.714286-32-77.714285 32-32 77.714286v438.857143q-34.285714 25.714286-53.714286 64t-19.428572 82.285714q0 76 53.428572 129.428571T449.420434 950.857143t129.428572-53.428572T632.277577 768z m73.142857 0q0 105.714286-75.142857 180.857143T449.420434 1024t-180.857143-75.142857T193.420434 768q0-104 73.142857-178.857143V182.857143q0-76 53.428572-129.428572T449.420434 0t129.428572 53.428571T632.277577 182.857143v406.285714q73.142857 74.857143 73.142857 178.857143z m73.142857-329.142857v73.142857H668.849006V438.857143h109.714285z m0-146.285714v73.142857H668.849006V292.571429h109.714285z m0-146.285715v73.142857H668.849006V146.285714h109.714285z\"  ></path></symbol><symbol id=\"icon-thermometer-2\" viewBox=\"0 0 1024 1024\"><path d=\"M559.13472 768q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286q0-34.285714 20-62.857143t53.142857-40.571428V438.857143h73.142857v225.714286q33.142857 12 53.142857 40.571428t20 62.857143z m73.142857 0q0-44-19.428571-82.285714t-53.714286-64V182.857143q0-45.714286-32-77.714286t-77.714286-32-77.714285 32-32 77.714286v438.857143q-34.285714 25.714286-53.714286 64t-19.428572 82.285714q0 76 53.428572 129.428571T449.420434 950.857143t129.428572-53.428572T632.277577 768z m73.142857 0q0 105.714286-75.142857 180.857143T449.420434 1024t-180.857143-75.142857T193.420434 768q0-104 73.142857-178.857143V182.857143q0-76 53.428572-129.428572T449.420434 0t129.428572 53.428571T632.277577 182.857143v406.285714q73.142857 74.857143 73.142857 178.857143z m73.142857-329.142857v73.142857H668.849006V438.857143h109.714285z m0-146.285714v73.142857H668.849006V292.571429h109.714285z m0-146.285715v73.142857H668.849006V146.285714h109.714285z\"  ></path></symbol><symbol id=\"icon-thermometer-3\" viewBox=\"0 0 1024 1024\"><path d=\"M559.13472 768q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286q0-34.285714 20-62.857143t53.142857-40.571428V292.571429h73.142857v372q33.142857 12 53.142857 40.571428t20 62.857143z m73.142857 0q0-44-19.428571-82.285714t-53.714286-64V182.857143q0-45.714286-32-77.714286t-77.714286-32-77.714285 32-32 77.714286v438.857143q-34.285714 25.714286-53.714286 64t-19.428572 82.285714q0 76 53.428572 129.428571T449.420434 950.857143t129.428572-53.428572T632.277577 768z m73.142857 0q0 105.714286-75.142857 180.857143T449.420434 1024t-180.857143-75.142857T193.420434 768q0-104 73.142857-178.857143V182.857143q0-76 53.428572-129.428572T449.420434 0t129.428572 53.428571T632.277577 182.857143v406.285714q73.142857 74.857143 73.142857 178.857143z m73.142857-329.142857v73.142857H668.849006V438.857143h109.714285z m0-146.285714v73.142857H668.849006V292.571429h109.714285z m0-146.285715v73.142857H668.849006V146.285714h109.714285z\"  ></path></symbol><symbol id=\"icon-thermometer-4\" viewBox=\"0 0 1024 1024\"><path d=\"M559.13472 768q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286q0-34.285714 20-62.857143t53.142857-40.571428V146.285714h73.142857v518.285715q33.142857 12 53.142857 40.571428t20 62.857143z m73.142857 0q0-44-19.428571-82.285714t-53.714286-64V182.857143q0-45.714286-32-77.714286t-77.714286-32-77.714285 32-32 77.714286v438.857143q-34.285714 25.714286-53.714286 64t-19.428572 82.285714q0 76 53.428572 129.428571T449.420434 950.857143t129.428572-53.428572T632.277577 768z m73.142857 0q0 105.714286-75.142857 180.857143T449.420434 1024t-180.857143-75.142857T193.420434 768q0-104 73.142857-178.857143V182.857143q0-76 53.428572-129.428572T449.420434 0t129.428572 53.428571T632.277577 182.857143v406.285714q73.142857 74.857143 73.142857 178.857143z m73.142857-329.142857v73.142857H668.849006V438.857143h109.714285z m0-146.285714v73.142857H668.849006V292.571429h109.714285z m0-146.285715v73.142857H668.849006V146.285714h109.714285z\"  ></path></symbol><symbol id=\"icon-thermometer-empty\" viewBox=\"0 0 1024 1024\"><path d=\"M559.13472 768q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286q0-45.142857 32-77.428571t77.714285-32.285715 77.714286 32.285715 32 77.428571z m73.142857 0q0-44-19.428571-82.285714t-53.714286-64V182.857143q0-45.714286-32-77.714286t-77.714286-32-77.714285 32-32 77.714286v438.857143q-34.285714 25.714286-53.714286 64t-19.428572 82.285714q0 76 53.428572 129.428571T449.420434 950.857143t129.428572-53.428572T632.277577 768z m73.142857 0q0 105.714286-75.142857 180.857143T449.420434 1024t-180.857143-75.142857T193.420434 768q0-104 73.142857-178.857143V182.857143q0-76 53.428572-129.428572T449.420434 0t129.428572 53.428571T632.277577 182.857143v406.285714q73.142857 74.857143 73.142857 178.857143z m73.142857-329.142857v73.142857H668.849006V438.857143h109.714285z m0-146.285714v73.142857H668.849006V292.571429h109.714285z m0-146.285715v73.142857H668.849006V146.285714h109.714285z\"  ></path></symbol><symbol id=\"icon-thermometer-full\" viewBox=\"0 0 1024 1024\"><path d=\"M559.13472 768q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286q0-34.285714 20-62.857143t53.142857-40.571428V146.285714h73.142857v518.285715q33.142857 12 53.142857 40.571428t20 62.857143z m73.142857 0q0-44-19.428571-82.285714t-53.714286-64V182.857143q0-45.714286-32-77.714286t-77.714286-32-77.714285 32-32 77.714286v438.857143q-34.285714 25.714286-53.714286 64t-19.428572 82.285714q0 76 53.428572 129.428571T449.420434 950.857143t129.428572-53.428572T632.277577 768z m73.142857 0q0 105.714286-75.142857 180.857143T449.420434 1024t-180.857143-75.142857T193.420434 768q0-104 73.142857-178.857143V182.857143q0-76 53.428572-129.428572T449.420434 0t129.428572 53.428571T632.277577 182.857143v406.285714q73.142857 74.857143 73.142857 178.857143z m73.142857-329.142857v73.142857H668.849006V438.857143h109.714285z m0-146.285714v73.142857H668.849006V292.571429h109.714285z m0-146.285715v73.142857H668.849006V146.285714h109.714285z\"  ></path></symbol><symbol id=\"icon-thermometer-half\" viewBox=\"0 0 1024 1024\"><path d=\"M559.13472 768q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286q0-34.285714 20-62.857143t53.142857-40.571428V438.857143h73.142857v225.714286q33.142857 12 53.142857 40.571428t20 62.857143z m73.142857 0q0-44-19.428571-82.285714t-53.714286-64V182.857143q0-45.714286-32-77.714286t-77.714286-32-77.714285 32-32 77.714286v438.857143q-34.285714 25.714286-53.714286 64t-19.428572 82.285714q0 76 53.428572 129.428571T449.420434 950.857143t129.428572-53.428572T632.277577 768z m73.142857 0q0 105.714286-75.142857 180.857143T449.420434 1024t-180.857143-75.142857T193.420434 768q0-104 73.142857-178.857143V182.857143q0-76 53.428572-129.428572T449.420434 0t129.428572 53.428571T632.277577 182.857143v406.285714q73.142857 74.857143 73.142857 178.857143z m73.142857-329.142857v73.142857H668.849006V438.857143h109.714285z m0-146.285714v73.142857H668.849006V292.571429h109.714285z m0-146.285715v73.142857H668.849006V146.285714h109.714285z\"  ></path></symbol><symbol id=\"icon-thumb-tack\" viewBox=\"0 0 1024 1024\"><path d=\"M448.253177 493.714286V237.714286q0-8-5.142857-13.142857t-13.142857-5.142858-13.142857 5.142858-5.142857 13.142857v256q0 8 5.142857 13.142857t13.142857 5.142857 13.142857-5.142857 5.142857-13.142857z m384 201.142857q0 14.857143-10.857143 25.714286t-25.714285 10.857142H550.538891l-29.142857 276q-1.142857 6.857143-6 11.714286T503.681749 1024h-0.571429q-15.428571 0-18.285714-15.428571l-43.428572-277.142858H210.538891q-14.857143 0-25.714285-10.857142t-10.857143-25.714286q0-70.285714 44.857143-126.571429T320.253177 512V219.428571q-29.714286 0-51.428571-21.714285t-21.714286-51.428572 21.714286-51.428571 51.428571-21.714286h365.714286q29.714286 0 51.428571 21.714286t21.714286 51.428571-21.714286 51.428572-51.428571 21.714285v292.571429q56.571429 0 101.428571 56.285714T832.253177 694.857143z\"  ></path></symbol><symbol id=\"icon-thermometer-three-quarters\" viewBox=\"0 0 1024 1024\"><path d=\"M559.13472 768q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286q0-34.285714 20-62.857143t53.142857-40.571428V292.571429h73.142857v372q33.142857 12 53.142857 40.571428t20 62.857143z m73.142857 0q0-44-19.428571-82.285714t-53.714286-64V182.857143q0-45.714286-32-77.714286t-77.714286-32-77.714285 32-32 77.714286v438.857143q-34.285714 25.714286-53.714286 64t-19.428572 82.285714q0 76 53.428572 129.428571T449.420434 950.857143t129.428572-53.428572T632.277577 768z m73.142857 0q0 105.714286-75.142857 180.857143T449.420434 1024t-180.857143-75.142857T193.420434 768q0-104 73.142857-178.857143V182.857143q0-76 53.428572-129.428572T449.420434 0t129.428572 53.428571T632.277577 182.857143v406.285714q73.142857 74.857143 73.142857 178.857143z m73.142857-329.142857v73.142857H668.849006V438.857143h109.714285z m0-146.285714v73.142857H668.849006V292.571429h109.714285z m0-146.285715v73.142857H668.849006V146.285714h109.714285z\"  ></path></symbol><symbol id=\"icon-thermometer-quarter\" viewBox=\"0 0 1024 1024\"><path d=\"M559.13472 768q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286q0-34.285714 20-62.857143t53.142857-40.571428v-79.428572h73.142857v79.428572q33.142857 12 53.142857 40.571428t20 62.857143z m73.142857 0q0-44-19.428571-82.285714t-53.714286-64V182.857143q0-45.714286-32-77.714286t-77.714286-32-77.714285 32-32 77.714286v438.857143q-34.285714 25.714286-53.714286 64t-19.428572 82.285714q0 76 53.428572 129.428571T449.420434 950.857143t129.428572-53.428572T632.277577 768z m73.142857 0q0 105.714286-75.142857 180.857143T449.420434 1024t-180.857143-75.142857T193.420434 768q0-104 73.142857-178.857143V182.857143q0-76 53.428572-129.428572T449.420434 0t129.428572 53.428571T632.277577 182.857143v406.285714q73.142857 74.857143 73.142857 178.857143z m73.142857-329.142857v73.142857H668.849006V438.857143h109.714285z m0-146.285714v73.142857H668.849006V292.571429h109.714285z m0-146.285715v73.142857H668.849006V146.285714h109.714285z\"  ></path></symbol><symbol id=\"icon-thermometer\" viewBox=\"0 0 1024 1024\"><path d=\"M559.13472 768q0 45.714286-32 77.714286t-77.714286 32-77.714285-32-32-77.714286q0-34.285714 20-62.857143t53.142857-40.571428V146.285714h73.142857v518.285715q33.142857 12 53.142857 40.571428t20 62.857143z m73.142857 0q0-44-19.428571-82.285714t-53.714286-64V182.857143q0-45.714286-32-77.714286t-77.714286-32-77.714285 32-32 77.714286v438.857143q-34.285714 25.714286-53.714286 64t-19.428572 82.285714q0 76 53.428572 129.428571T449.420434 950.857143t129.428572-53.428572T632.277577 768z m73.142857 0q0 105.714286-75.142857 180.857143T449.420434 1024t-180.857143-75.142857T193.420434 768q0-104 73.142857-178.857143V182.857143q0-76 53.428572-129.428572T449.420434 0t129.428572 53.428571T632.277577 182.857143v406.285714q73.142857 74.857143 73.142857 178.857143z m73.142857-329.142857v73.142857H668.849006V438.857143h109.714285z m0-146.285714v73.142857H668.849006V292.571429h109.714285z m0-146.285715v73.142857H668.849006V146.285714h109.714285z\"  ></path></symbol><symbol id=\"icon-thumbs-down\" viewBox=\"0 0 1024 1024\"><path d=\"M182.857143 329.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143q-15.428571 0-26-10.857143T109.714286 329.142857q0-15.428571 10.571428-26T146.285714 292.571429q14.857143 0 25.714286 10.571428t10.857143 26z m91.428571 292.571429V256q0-14.857143-10.857143-25.714286t-25.714285-10.857143H73.142857q-14.857143 0-25.714286 10.857143T36.571429 256v365.714286q0 14.857143 10.857142 25.714285t25.714286 10.857143h164.571429q14.857143 0 25.714285-10.857143t10.857143-25.714285z m645.142857-85.142857q31.428571 34.857143 31.428572 85.142857-0.571429 44.571429-32.857143 77.142857t-76.857143 32.571428h-158.285714q2.285714 8 4.571428 13.714286t6.285715 12.571429 5.714285 10.285714q10.285714 21.142857 15.428572 32.571429t10.857143 33.428571 5.714285 43.714286q0 13.714286-0.285714 22.285714t-2.857143 25.714286-6.857143 28.571428-13.714285 25.714286-22.857143 23.142857-34.285714 14.857143T603.428571 1024q-14.857143 0-25.714285-10.857143-11.428571-11.428571-19.428572-28.571428t-11.142857-29.714286-7.142857-34.857143q-5.142857-24-7.714286-34.571429T522.285714 857.714286t-17.714285-27.428572q-18.857143-18.857143-57.714286-68.571428-28-36.571429-57.714286-69.142857t-43.428571-33.714286q-14.285714-1.142857-24.571429-11.714286t-10.285714-24.857143V256q0-14.857143 10.857143-25.428571t25.714285-11.142858q20-0.571429 90.285715-25.142857 44-14.857143 68.857143-22.571428t69.428571-16.571429 82.285714-8.857143h73.714286q76 1.142857 112.571429 44.571429 33.142857 39.428571 28 103.428571 22.285714 21.142857 30.857142 53.714286 9.714286 34.857143 0 66.857143 26.285714 34.857143 24.571429 78.285714 0 18.285714-8.571429 43.428572z\"  ></path></symbol><symbol id=\"icon-times-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M729.714286 641.142857q0-14.857143-10.857143-25.714286L615.428571 512l103.428572-103.428571q10.857143-10.857143 10.857143-25.714286 0-15.428571-10.857143-26.285714l-51.428572-51.428572q-10.857143-10.857143-26.285714-10.857143-14.857143 0-25.714286 10.857143L512 408.571429 408.571429 305.142857q-10.857143-10.857143-25.714286-10.857143-15.428571 0-26.285714 10.857143l-51.428572 51.428572q-10.857143 10.857143-10.857143 26.285714 0 14.857143 10.857143 25.714286l103.428572 103.428571-103.428572 103.428571q-10.857143 10.857143-10.857143 25.714286 0 15.428571 10.857143 26.285714l51.428572 51.428572q10.857143 10.857143 26.285714 10.857143 14.857143 0 25.714286-10.857143l103.428571-103.428572 103.428571 103.428572q10.857143 10.857143 25.714286 10.857143 15.428571 0 26.285714-10.857143l51.428572-51.428572q10.857143-10.857143 10.857143-26.285714z m221.142857-129.142857q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-thumbs-up\" viewBox=\"0 0 1024 1024\"><path d=\"M182.857143 768q0-14.857143-10.857143-25.714286t-25.714286-10.857143q-15.428571 0-26 10.857143t-10.571428 25.714286q0 15.428571 10.571428 26T146.285714 804.571429q14.857143 0 25.714286-10.571429t10.857143-26z m91.428571-292.571429v365.714286q0 14.857143-10.857143 25.714286t-25.714285 10.857143H73.142857q-14.857143 0-25.714286-10.857143t-10.857142-25.714286V475.428571q0-14.857143 10.857142-25.714285t25.714286-10.857143h164.571429q14.857143 0 25.714285 10.857143t10.857143 25.714285z m676.571429 0q0 49.142857-31.428572 85.142858 8.571429 25.142857 8.571429 43.428571 1.714286 43.428571-24.571429 78.285714 9.714286 32 0 66.857143-8.571429 32.571429-30.857142 53.714286 5.142857 64-28 103.428571-36.571429 43.428571-112.571429 44.571429h-73.714286q-37.714286 0-82.285714-8.857143t-69.428571-16.571429T437.714286 902.857143q-70.285714-24.571429-90.285715-25.142857-14.857143-0.571429-25.714285-11.142857t-10.857143-25.428572V474.857143q0-14.285714 10.285714-24.857143t24.571429-11.714286q13.714286-1.142857 43.428571-33.714285t57.714286-69.142858q38.857143-49.714286 57.714286-68.571428 10.285714-10.285714 17.714285-27.428572t10-27.714285T540 177.142857q4-22.285714 7.142857-34.857143t11.142857-29.714285 19.428572-28.571429q10.857143-10.857143 25.714285-10.857143 26.285714 0 47.142858 6t34.285714 14.857143 22.857143 23.142857 13.714285 25.714286 6.857143 28.571428 2.857143 25.714286 0.285714 22.285714q0 21.714286-5.428571 43.428572t-10.857143 34.285714-15.714286 32q-1.714286 3.428571-5.714285 10.285714t-6.285715 12.571429-4.571428 13.714286h158.285714q44.571429 0 77.142857 32.571428t32.571429 77.142857z\"  ></path></symbol><symbol id=\"icon-ticket\" viewBox=\"0 0 1024 1024\"><path d=\"M585.142857 258.285714l180.571429 180.571429-326.857143 326.857143-180.571429-180.571429z m-120.571428 559.428572l353.142857-353.142857q10.857143-10.857143 10.857143-25.714286t-10.857143-25.714286l-206.857143-206.857143q-10.285714-10.285714-25.714286-10.285714t-25.714286 10.285714L206.285714 559.428571q-10.857143 10.857143-10.857143 25.714286t10.857143 25.714286l206.857143 206.857143q10.285714 10.285714 25.714286 10.285714t25.714286-10.285714z m508-364l-518.285715 518.857143q-21.142857 21.142857-51.714285 21.142857t-51.714286-21.142857l-72-72q32-32 32-77.714286t-32-77.714286-77.714286-32-77.714286 32L52 673.142857q-21.142857-21.142857-21.142857-51.714286T52 569.714286L570.285714 52q21.142857-21.142857 51.714286-21.142857t51.714286 21.142857l71.428571 71.428571q-32 32-32 77.714286t32 77.714286 77.714286 32 77.714286-32l72 71.428571q21.142857 21.142857 21.142857 51.714286t-21.142857 51.714286z\"  ></path></symbol><symbol id=\"icon-thumbs-o-down\" viewBox=\"0 0 1024 1024\"><path d=\"M219.428571 256q0-14.857143-10.857142-25.714286t-25.714286-10.857143-25.714286 10.857143-10.857143 25.714286 10.857143 25.714286 25.714286 10.857143 25.714286-10.857143 10.857142-25.714286z m658.285715 329.142857q0-20-12.285715-46.285714t-30.571428-26.857143q8.571429-9.714286 14.285714-27.142857t5.714286-31.714286q0-39.428571-30.285714-68 10.285714-17.714286 10.285714-39.428571 0-21.142857-10-42T797.714286 273.714286q2.857143-17.142857 2.857143-32 0-48.571429-28-72t-77.714286-23.428572H621.714286q-74.857143 0-195.428572 41.714286-2.857143 1.142857-16.571428 6T389.428571 201.142857t-20 6.571429-21.714285 6.285714-18.857143 3.714286-18 1.714285h-18.285714v365.714286h18.285714q9.142857 0 20.285714 5.142857t22.857143 15.428572 22 20.285714 22.857143 25.142857 19.714286 24.285714 18 23.428572 13.142857 17.142857q31.428571 38.857143 44 52 23.428571 24.571429 34 62.571429T545.142857 902.285714t21.714286 48.571429q54.857143 0 73.142857-26.857143t18.285714-82.857143q0-33.714286-27.428571-91.714286T603.428571 658.285714h201.142858q28.571429 0 50.857142-22t22.285715-51.142857z m73.142857 0.571429q0 58.857143-43.428572 102.285714t-102.857142 43.428571h-100.571429q27.428571 56.571429 27.428571 109.714286 0 67.428571-20 106.285714-20 39.428571-58.285714 58T566.857143 1024q-29.142857 0-51.428572-21.142857-19.428571-18.857143-30.857142-46.857143t-14.571429-51.714286T460 856t-17.714286-36.571429q-27.428571-28.571429-61.142857-72.571428-57.714286-74.857143-78.285714-88.571429H146.285714q-30.285714 0-51.714285-21.428571T73.142857 585.142857V219.428571q0-30.285714 21.428572-51.714285T146.285714 146.285714h164.571429q12.571429 0 78.857143-22.857143 73.142857-25.142857 127.428571-37.714285t114.285714-12.571429h64q80 0 129.428572 45.142857t48.857143 123.428572v2.857143q34.285714 44 34.285714 101.714285 0 12.571429-1.714286 24.571429 21.714286 38.285714 21.714286 82.285714 0 20.571429-5.142857 39.428572 28 41.714286 28 93.142857z\"  ></path></symbol><symbol id=\"icon-thumbs-o-up\" viewBox=\"0 0 1024 1024\"><path d=\"M219.428571 768q0-14.857143-10.857142-25.714286t-25.714286-10.857143-25.714286 10.857143-10.857143 25.714286 10.857143 25.714286 25.714286 10.857143 25.714286-10.857143 10.857142-25.714286z m658.285715-329.142857q0-29.142857-22.285715-51.142857t-50.857142-22H603.428571q0-33.142857 27.428572-91.142857t27.428571-91.714286q0-56-18.285714-82.857143t-73.142857-26.857143q-14.857143 14.857143-21.714286 48.571429t-17.428571 71.714285T493.714286 256q-12.571429 13.142857-44 52-2.285714 2.857143-13.142857 17.142857t-18 23.428572-19.714286 24.285714-22.857143 25.142857-22 20.285714-22.857143 15.428572-20.285714 5.142857h-18.285714v365.714286h18.285714q7.428571 0 18 1.714285t18.857143 3.714286 21.714285 6.285714 20 6.571429 20.285715 7.142857 16.571428 6q120.571429 41.714286 195.428572 41.714286h69.142857q109.714286 0 109.714286-95.428572 0-14.857143-2.857143-32 17.142857-9.142857 27.142857-30t10-42-10.285714-39.428571q30.285714-28.571429 30.285714-68 0-14.285714-5.714286-31.714286t-14.285714-27.142857q18.285714-0.571429 30.571428-26.857143t12.285715-46.285714z m73.142857-0.571429q0 50.857143-28 93.142857 5.142857 18.857143 5.142857 39.428572 0 44-21.714286 82.285714 1.714286 12 1.714286 24.571429 0 57.714286-34.285714 101.714285 0.571429 79.428571-48.571429 125.428572t-129.714286 46H621.714286q-54.857143 0-108.285715-12.857143T389.714286 900.571429q-66.285714-22.857143-78.857143-22.857143H146.285714q-30.285714 0-51.714285-21.428572T73.142857 804.571429V438.857143q0-30.285714 21.428572-51.714286T146.285714 365.714286h156.571429q20.571429-13.714286 78.285714-88.571429 33.142857-42.857143 61.142857-73.142857 13.714286-14.285714 20.285715-48.857143T480 82.857143t35.428571-61.714286q22.285714-21.142857 51.428572-21.142857 48 0 86.285714 18.571429T711.428571 76.571429t20 106.285714q0 53.142857-27.428571 109.714286h100.571429q59.428571 0 102.857142 43.428571t43.428572 102.285714z\"  ></path></symbol><symbol id=\"icon-times-circle-o\" viewBox=\"0 0 1024 1024\"><path d=\"M700 616.571429l-83.428571 83.428571q-5.714286 5.714286-13.142858 5.714286t-13.142857-5.714286l-78.285714-78.285714-78.285714 78.285714q-5.714286 5.714286-13.142857 5.714286t-13.142858-5.714286l-83.428571-83.428571q-5.714286-5.714286-5.714286-13.142858t5.714286-13.142857l78.285714-78.285714-78.285714-78.285714q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142858l83.428571-83.428571q5.714286-5.714286 13.142858-5.714286t13.142857 5.714286l78.285714 78.285714 78.285714-78.285714q5.714286-5.714286 13.142857-5.714286t13.142858 5.714286l83.428571 83.428571q5.714286 5.714286 5.714286 13.142858t-5.714286 13.142857L621.714286 512l78.285714 78.285714q5.714286 5.714286 5.714286 13.142857t-5.714286 13.142858z m122.857143-104.571429q0-84.571429-41.714286-156t-113.142857-113.142857-156-41.714286-156 41.714286-113.142857 113.142857-41.714286 156 41.714286 156 113.142857 113.142857 156 41.714286 156-41.714286 113.142857-113.142857 41.714286-156z m128 0q0 119.428571-58.857143 220.285714T732.285714 892 512 950.857143t-220.285714-58.857143T132 732.285714 73.142857 512t58.857143-220.285714T291.714286 132 512 73.142857t220.285714 58.857143T892 291.714286 950.857143 512z\"  ></path></symbol><symbol id=\"icon-times-rectangle-o\" viewBox=\"0 0 1024 1024\"><path d=\"M718.285714 634.857143l-83.428571 83.428571q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-96.571429-96.571428-96.571429 96.571428q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-83.428571-83.428571q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l96.571428-96.571429-96.571428-96.571429q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l83.428571-83.428571q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l96.571429 96.571428 96.571429-96.571428q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l83.428571 83.428571q5.714286 5.714286 5.714286 13.142857t-5.714286 13.142857l-96.571428 96.571429 96.571428 96.571429q5.714286 5.714286 5.714286 13.142857t-5.714286 13.142857zM146.285714 804.571429h731.428572V219.428571H146.285714v585.142858zM1024 164.571429v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h841.142858q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-times-rectangle\" viewBox=\"0 0 1024 1024\"><path d=\"M671.428571 754.857143l83.428572-83.428572q5.714286-5.714286 5.714286-13.142857t-5.714286-13.142857l-133.142857-133.142857 133.142857-133.142857q5.714286-5.714286 5.714286-13.142857t-5.714286-13.142857l-83.428572-83.428572q-5.714286-5.714286-13.142857-5.714286t-13.142857 5.714286L512 402.285714 378.857143 269.142857q-5.714286-5.714286-13.142857-5.714286t-13.142857 5.714286L269.142857 352.571429q-5.714286 5.714286-5.714286 13.142857t5.714286 13.142857l133.142857 133.142857-133.142857 133.142857q-5.714286 5.714286-5.714286 13.142857t5.714286 13.142857l83.428572 83.428572q5.714286 5.714286 13.142857 5.714286t13.142857-5.714286l133.142857-133.142857 133.142857 133.142857q5.714286 5.714286 13.142857 5.714286t13.142857-5.714286z m352.571429-590.285714v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h841.142858q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-times\" viewBox=\"0 0 1024 1024\"><path d=\"M851.428571 755.428571q0 22.857143-16 38.857143l-77.714285 77.714286q-16 16-38.857143 16t-38.857143-16l-168-168-168 168q-16 16-38.857143 16t-38.857143-16l-77.714285-77.714286q-16-16-16-38.857143t16-38.857142l168-168-168-168q-16-16-16-38.857143t16-38.857143l77.714285-77.714286q16-16 38.857143-16t38.857143 16l168 168 168-168q16-16 38.857143-16t38.857143 16l77.714285 77.714286q16 16 16 38.857143t-16 38.857143L667.428571 548.571429l168 168q16 16 16 38.857142z\"  ></path></symbol><symbol id=\"icon-tint\" viewBox=\"0 0 1024 1024\"><path d=\"M502.207311 658.285714q0-20.571429-11.428571-39.428571-0.571429-0.571429-8.857143-12.857143t-14.571428-21.714286-14.285715-25.142857-12-28.857143q-2.285714-9.142857-12-9.142857t-12 9.142857q-4 13.142857-12 28.857143t-14.285714 25.142857-14.571429 21.714286T367.350169 618.857143q-11.428571 18.857143-11.428572 39.428571 0 30.285714 21.428572 51.714286T429.064454 731.428571t51.714286-21.428571T502.207311 658.285714z m292.571429-73.142857q0 121.142857-85.714286 206.857143t-206.857143 85.714286-206.857142-85.714286T209.635883 585.142857q0-82.857143 46.285714-157.142857 3.428571-5.142857 35.714286-51.714286t57.714286-86.285714 56.857142-101.714286T453.635883 73.142857q5.142857-17.142857 19.428571-26.857143t29.142857-9.714285 29.428572 9.714285 19.142857 26.857143q16 53.142857 47.428571 115.142857t56.857143 101.714286 57.714286 86.285714T748.493026 428q46.285714 72.571429 46.285714 157.142857z\"  ></path></symbol><symbol id=\"icon-toggle-left\" viewBox=\"0 0 1024 1024\"><path d=\"M658.285714 329.142857v365.714286q0 14.857143-10.857143 25.714286t-25.714285 10.857142q-11.428571 0-21.142857-6.857142L344.571429 541.714286q-15.428571-10.857143-15.428572-29.714286t15.428572-29.714286l256-182.857143q9.714286-6.857143 21.142857-6.857142 14.857143 0 25.714285 10.857142t10.857143 25.714286z m146.285715 457.142857V237.714286q0-7.428571-5.428572-12.857143T786.285714 219.428571H237.714286q-7.428571 0-12.857143 5.428572T219.428571 237.714286v548.571428q0 7.428571 5.428572 12.857143t12.857143 5.428572h548.571428q7.428571 0 12.857143-5.428572t5.428572-12.857143z m146.285714-548.571428v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-toggle-down\" viewBox=\"0 0 1024 1024\"><path d=\"M727.428571 385.714286q10.285714 20-2.857142 37.714285l-182.857143 256q-10.857143 15.428571-29.714286 15.428572t-29.714286-15.428572L299.428571 423.428571q-13.142857-17.714286-2.857142-37.714285 9.714286-20 32.571428-20h365.714286q22.857143 0 32.571428 20z m77.142858 400.571428V237.714286q0-7.428571-5.428572-12.857143T786.285714 219.428571H237.714286q-7.428571 0-12.857143 5.428572T219.428571 237.714286v548.571428q0 7.428571 5.428572 12.857143t12.857143 5.428572h548.571428q7.428571 0 12.857143-5.428572t5.428572-12.857143z m146.285714-548.571428v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-toggle-off\" viewBox=\"0 0 1170 1024\"><path d=\"M658.285714 512q0-59.428571-23.142857-113.428571T572.571429 305.142857 479.142857 242.571429 365.714286 219.428571t-113.428572 23.142858T158.857143 305.142857 96.285714 398.571429 73.142857 512t23.142857 113.428571T158.857143 718.857143t93.428571 62.571428T365.714286 804.571429t113.428571-23.142858T572.571429 718.857143t62.571428-93.428572T658.285714 512z m438.857143 0q0-59.428571-23.142857-113.428571T1011.428571 305.142857t-93.428571-62.571428T804.571429 219.428571h-220.571429q68 51.428571 107.714286 128t39.714285 164.571429-39.714285 164.571429-107.714286 128h220.571429q59.428571 0 113.428571-23.142858T1011.428571 718.857143t62.571429-93.428572T1097.142857 512z m73.142857 0q0 74.285714-29.142857 142t-78 116.571429-116.571428 78-142 29.142857H365.714286q-74.285714 0-142-29.142857t-116.571429-78-78-116.571429T0 512t29.142857-142 78-116.571429 116.571429-78T365.714286 146.285714h438.857143q74.285714 0 142 29.142857t116.571428 78 78 116.571429 29.142857 142z\"  ></path></symbol><symbol id=\"icon-toggle-right\" viewBox=\"0 0 1024 1024\"><path d=\"M694.857143 512q0 18.857143-15.428572 29.714286l-256 182.857143q-17.714286 13.142857-37.714285 2.857142-20-9.714286-20-32.571428V329.142857q0-22.857143 20-32.571428 20-10.285714 37.714285 2.857142l256 182.857143q15.428571 10.857143 15.428572 29.714286z m109.714286 274.285714V237.714286q0-8-5.142858-13.142857t-13.142857-5.142858H237.714286q-8 0-13.142857 5.142858t-5.142858 13.142857v548.571428q0 8 5.142858 13.142857t13.142857 5.142858h548.571428q8 0 13.142857-5.142858t5.142858-13.142857z m146.285714-548.571428v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-toggle-on\" viewBox=\"0 0 1170 1024\"><path d=\"M0 512q0-74.285714 29.142857-142t78-116.571429 116.571429-78T365.714286 146.285714h438.857143q74.285714 0 142 29.142857t116.571428 78 78 116.571429 29.142857 142-29.142857 142-78 116.571429-116.571428 78-142 29.142857H365.714286q-74.285714 0-142-29.142857t-116.571429-78-78-116.571429T0 512z m804.571429 292.571429q59.428571 0 113.428571-23.142858T1011.428571 718.857143t62.571429-93.428572T1097.142857 512t-23.142857-113.428571T1011.428571 305.142857t-93.428571-62.571428T804.571429 219.428571t-113.428572 23.142858T597.714286 305.142857 535.142857 398.571429 512 512t23.142857 113.428571T597.714286 718.857143t93.428571 62.571428T804.571429 804.571429z\"  ></path></symbol><symbol id=\"icon-toggle-up\" viewBox=\"0 0 1024 1024\"><path d=\"M727.428571 638.285714q-9.714286 20-32.571428 20H329.142857q-22.857143 0-32.571428-20-10.285714-20 2.857142-37.714285l182.857143-256q10.857143-15.428571 29.714286-15.428572t29.714286 15.428572l182.857143 256q13.142857 17.714286 2.857142 37.714285z m77.142858 148V237.714286q0-7.428571-5.428572-12.857143T786.285714 219.428571H237.714286q-7.428571 0-12.857143 5.428572T219.428571 237.714286v548.571428q0 7.428571 5.428572 12.857143t12.857143 5.428572h548.571428q7.428571 0 12.857143-5.428572t5.428572-12.857143z m146.285714-548.571428v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-transgender-alt\" viewBox=\"0 0 1024 1024\"><path d=\"M731.428571 18.285714q0-8 5.142858-13.142857t13.142857-5.142857h164.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286v164.571428q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857V124.571429l-145.142857 145.714285q72 90.285714 72 205.142857 0 126.285714-84.285715 219.714286T512 802.285714v75.428572h54.857143q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143v54.857143q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857v-54.857143h-54.857143q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143v-75.428572q-124-13.714286-208.285714-107.142857T146.285714 475.428571q0-114.857143 72-205.142857l-29.714285-30.285714-57.714286 63.428571q-5.142857 5.714286-12.571429 6t-13.142857-4.285714l-27.428571-25.142857q-5.714286-4.571429-6-12.285714T76.571429 254.285714l60-65.714285-63.428572-64v76.571428q0 8-5.142857 13.142857t-13.142857 5.142857H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142857V36.571429q0-14.857143 10.857143-25.714286T36.571429 0h164.571428q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H125.142857l60.571429 61.142857 49.142857-53.714285q5.142857-5.714286 12.571428-6t13.142858 4.285714l27.428571 25.142857q5.714286 4.571429 6 12.285714T289.142857 129.714286l-51.428571 56.571428 32.571428 32q90.285714-72 205.142857-72t205.142858 72l145.714285-145.142857h-76.571428q-8 0-13.142857-5.142857t-5.142858-13.142857V18.285714zM475.428571 731.428571q105.714286 0 180.857143-75.142857T731.428571 475.428571t-75.142857-180.857142T475.428571 219.428571 294.571429 294.571429 219.428571 475.428571t75.142858 180.857143T475.428571 731.428571z\"  ></path></symbol><symbol id=\"icon-trademark\" viewBox=\"0 0 1127 1024\"><path d=\"M489.714286 310.857143v66.857143q0 7.428571-5.428572 12.571428t-12.857143 5.142857H301.142857v464q0 7.428571-5.142857 12.857143t-12.571429 5.428572H206.285714q-7.428571 0-12.857143-5.142857t-5.428571-13.142858V395.428571H18.285714q-7.428571 0-12.857143-5.142857T0 377.714286V310.857143q0-8 5.142857-13.142857t13.142857-5.142857h453.142857q7.428571 0 12.857143 5.428571T489.714286 310.857143z m593.142857-1.714286l44 549.142857q0.571429 7.428571-4.571429 13.714286-5.714286 5.714286-13.142857 5.714286h-76.571428q-6.857143 0-12-4.857143t-5.714286-11.714286l-26.285714-336-108 242.857143q-4.571429 10.857143-16.571429 10.857143h-68.571429q-11.428571 0-16.571428-10.857143l-107.428572-244-25.714285 337.142857q-0.571429 6.857143-5.714286 11.714286t-12 4.857143H550.857143q-7.428571 0-13.142857-5.714286-5.142857-5.714286-5.142857-13.714286l44.571428-549.142857q0.571429-6.857143 5.714286-11.714286t12-4.857142h81.142857q11.428571 0 16.571429 10.857142l125.714285 297.142858q5.714286 13.714286 11.428572 29.142857 1.714286-4 5.428571-14t6-15.142857l126.285714-297.142858q5.142857-10.857143 16.571429-10.857142h80.571429q7.428571 0 12.571428 4.857142t5.714286 11.714286z\"  ></path></symbol><symbol id=\"icon-train\" viewBox=\"0 0 1024 1024\"><path d=\"M694.857143 0q105.714286 0 180.857143 53.428571T950.857143 182.857143v512q0 74.285714-71.714286 126.857143t-174.571428 55.428571l121.714285 115.428572q9.142857 8.571429 4.571429 20t-17.142857 11.428571H210.285714q-12.571429 0-17.142857-11.428571t4.571429-20l121.714285-115.428572q-102.857143-2.857143-174.571428-55.428571T73.142857 694.857143V182.857143Q73.142857 106.857143 148.285714 53.428571T329.142857 0h365.714286zM512 768q45.714286 0 77.714286-32t32-77.714286-32-77.714285-77.714286-32-77.714286 32-32 77.714285 32 77.714286 77.714286 32z m329.142857-329.142857V146.285714H182.857143v292.571429h658.285714z\"  ></path></symbol><symbol id=\"icon-trash-o\" viewBox=\"0 0 1024 1024\"><path d=\"M402.285714 420.571429v329.142857q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857V420.571429q0-8 5.142857-13.142858t13.142857-5.142857h36.571429q8 0 13.142857 5.142857t5.142857 13.142858z m146.285715 0v329.142857q0 8-5.142858 13.142857t-13.142857 5.142857h-36.571428q-8 0-13.142857-5.142857t-5.142858-13.142857V420.571429q0-8 5.142858-13.142858t13.142857-5.142857h36.571428q8 0 13.142857 5.142857t5.142858 13.142858z m146.285714 0v329.142857q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857V420.571429q0-8 5.142857-13.142858t13.142857-5.142857h36.571429q8 0 13.142857 5.142857t5.142857 13.142858z m73.142857 413.714285V292.571429H256v541.714285q0 12.571429 4 23.142857t8.285714 15.428572 6 4.857143h475.428572q1.714286 0 6-4.857143t8.285714-15.428572 4-23.142857zM384 219.428571h256l-27.428571-66.857142q-4-5.142857-9.714286-6.285715H421.714286q-5.714286 1.142857-9.714286 6.285715z m530.285714 18.285715v36.571428q0 8-5.142857 13.142857t-13.142857 5.142858h-54.857143v541.714285q0 47.428571-26.857143 82t-64.571428 34.571429H274.285714q-37.714286 0-64.571428-33.428572T182.857143 836.571429V292.571429H128q-8 0-13.142857-5.142858t-5.142857-13.142857v-36.571428q0-8 5.142857-13.142857t13.142857-5.142858h176.571429l40-95.428571q8.571429-21.142857 30.857142-36t45.142858-14.857143h182.857142q22.857143 0 45.142858 14.857143t30.857142 36l40 95.428571h176.571429q8 0 13.142857 5.142858t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-trash\" viewBox=\"0 0 1024 1024\"><path d=\"M402.285714 786.285714V384q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142857v402.285714q0 8 5.142857 13.142857t13.142857 5.142858h36.571429q8 0 13.142857-5.142858t5.142857-13.142857z m146.285715 0V384q0-8-5.142858-13.142857t-13.142857-5.142857h-36.571428q-8 0-13.142857 5.142857t-5.142858 13.142857v402.285714q0 8 5.142858 13.142857t13.142857 5.142858h36.571428q8 0 13.142857-5.142858t5.142858-13.142857z m146.285714 0V384q0-8-5.142857-13.142857t-13.142857-5.142857h-36.571429q-8 0-13.142857 5.142857t-5.142857 13.142857v402.285714q0 8 5.142857 13.142857t13.142857 5.142858h36.571429q8 0 13.142857-5.142858t5.142857-13.142857zM384 219.428571h256l-27.428571-66.857142q-4-5.142857-9.714286-6.285715H421.714286q-5.714286 1.142857-9.714286 6.285715z m530.285714 18.285715v36.571428q0 8-5.142857 13.142857t-13.142857 5.142858h-54.857143v541.714285q0 47.428571-26.857143 82t-64.571428 34.571429H274.285714q-37.714286 0-64.571428-33.428572T182.857143 836.571429V292.571429H128q-8 0-13.142857-5.142858t-5.142857-13.142857v-36.571428q0-8 5.142857-13.142857t13.142857-5.142858h176.571429l40-95.428571q8.571429-21.142857 30.857142-36t45.142858-14.857143h182.857142q22.857143 0 45.142858 14.857143t30.857142 36l40 95.428571h176.571429q8 0 13.142857 5.142858t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-transgender\" viewBox=\"0 0 1024 1024\"><path d=\"M658.285714 18.285714q0-8 5.142857-13.142857t13.142858-5.142857h164.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286v164.571428q0 8-5.142857 13.142857t-13.142858 5.142857h-36.571428q-8 0-13.142857-5.142857t-5.142857-13.142857V124.571429l-145.142858 145.714285q72 90.285714 72 205.142857 0 126.285714-84.285714 219.714286T438.857143 802.285714v75.428572h54.857143q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143v54.857143q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857v-54.857143h-54.857143q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h54.857143v-75.428572q-85.142857-9.142857-154.571429-58.857143T104.571429 615.714286 74.285714 449.142857q9.142857-116.571429 91.428572-202T364 148.571429q67.428571-8 130.285714 10.857142t113.142857 58.857143l145.714286-145.142857h-76.571428q-8 0-13.142858-5.142857t-5.142857-13.142857V18.285714zM402.285714 731.428571q105.714286 0 180.857143-75.142857T658.285714 475.428571 583.142857 294.571429 402.285714 219.428571 221.428571 294.571429 146.285714 475.428571t75.142857 180.857143T402.285714 731.428571z\"  ></path></symbol><symbol id=\"icon-tree\" viewBox=\"0 0 1024 1024\"><path d=\"M932.571429 841.142857q0 14.857143-10.857143 25.714286t-25.714286 10.857143H632q0.571429 9.714286 3.428571 50t2.857143 62q0 14.285714-10.285714 24.285714t-24.571429 10H420.571429q-14.285714 0-24.571429-10t-10.285714-24.285714q0-21.714286 2.857143-62t3.428571-50H128q-14.857143 0-25.714286-10.857143t-10.857143-25.714286 10.857143-25.714286l229.714286-230.285714H201.142857q-14.857143 0-25.714286-10.857143t-10.857142-25.714285 10.857142-25.714286l229.714286-230.285714H292.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286 10.857143-25.714286L486.285714 10.857143q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l219.428571 219.428571q10.857143 10.857143 10.857143 25.714286t-10.857143 25.714286-25.714286 10.857143H618.857143l229.714286 230.285714q10.857143 10.857143 10.857142 25.714286t-10.857142 25.714285-25.714286 10.857143h-130.857143l229.714286 230.285714q10.857143 10.857143 10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-try\" viewBox=\"0 0 1024 1024\"><path d=\"M841.142857 475.428571q0 109.142857-54 201.714286T640.571429 823.714286 438.857143 877.714286H347.428571q-8 0-13.142857-5.142857t-5.142857-13.142858V510.285714L206.285714 548q-1.714286 0.571429-5.142857 0.571429-5.714286 0-10.857143-3.428572-7.428571-5.714286-7.428571-14.857143V457.142857q0-13.142857 13.142857-17.714286l133.142857-40.571428v-53.142857L206.285714 383.428571q-1.714286 0.571429-5.142857 0.571429-5.714286 0-10.857143-3.428571-7.428571-5.714286-7.428571-14.857143V292.571429q0-13.142857 13.142857-17.714286l133.142857-40.571429V91.428571q0-8 5.142857-13.142857t13.142857-5.142857h91.428572q8 0 13.142857 5.142857t5.142857 13.142857v103.428572l214.285714-66.285714q8.571429-2.857143 16 2.857142t7.428572 14.857143v73.142857q0 13.142857-13.142857 17.714286L457.142857 306.285714v53.142857l214.285714-66.285714q8.571429-2.857143 16 2.857143t7.428572 14.857143v73.142857q0 13.142857-13.142857 17.714286L457.142857 470.857143v278.285714q107.428571-7.428571 181.714286-86.285714t74.285714-187.428572q0-8 5.142857-13.142857t13.142857-5.142857h91.428572q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-trello\" viewBox=\"0 0 1024 1024\"><path d=\"M466.538891 768V182.857143q0-8-5.142857-13.142857t-13.142857-5.142857H173.967463q-8 0-13.142857 5.142857t-5.142857 13.142857v585.142857q0 8 5.142857 13.142857t13.142857 5.142857h274.285714q8 0 13.142857-5.142857t5.142857-13.142857z m384-219.428571V182.857143q0-8-5.142857-13.142857t-13.142857-5.142857H557.967463q-8 0-13.142857 5.142857t-5.142857 13.142857v365.714286q0 8 5.142857 13.142857t13.142857 5.142857h274.285714q8 0 13.142857-5.142857t5.142857-13.142857z m91.428572-438.857143v804.571428q0 14.857143-10.857143 25.714286t-25.714286 10.857143H100.824606q-14.857143 0-25.714286-10.857143t-10.857143-25.714286V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h804.571428q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-trophy\" viewBox=\"0 0 1024 1024\"><path d=\"M298.285714 504.571429q-42.285714-92.571429-42.285714-212H109.714286v54.857142q0 44.571429 54 92.571429T298.285714 504.571429z m616-157.142858v-54.857142h-146.285714q0 119.428571-42.285714 212 80.571429-16.571429 134.571428-64.571429t54-92.571429z m73.142857-73.142857v73.142857q0 40.571429-23.714285 81.714286t-64 74.285714-98.857143 55.714286T677.714286 584.571429q-24 30.857143-54.285715 54.285714-21.714286 19.428571-30 41.428571T585.142857 731.428571q0 30.857143 17.428572 52t55.714285 21.142858q42.857143 0 76.285715 26T768 896v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857H274.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-39.428571 33.428571-65.428571T365.714286 804.571429q38.285714 0 55.714285-21.142858t17.428572-52q0-29.142857-8.285714-51.142857T400.571429 638.857143q-30.285714-23.428571-54.285715-54.285714-64.571429-2.857143-123.142857-25.428572t-98.857143-55.714286-64-74.285714T36.571429 347.428571V274.285714q0-22.857143 16-38.857143t38.857142-16h164.571429v-54.857142q0-37.714286 26.857143-64.571429t64.571428-26.857143h329.142858q37.714286 0 64.571428 26.857143t26.857143 64.571429v54.857142h164.571429q22.857143 0 38.857142 16t16 38.857143z\"  ></path></symbol><symbol id=\"icon-tty\" viewBox=\"0 0 1024 1024\"><path d=\"M256 749.714286v109.714285q0 8-5.142857 13.142858t-13.142857 5.142857H128q-8 0-13.142857-5.142857t-5.142857-13.142858v-109.714285q0-8 5.142857-13.142857t13.142857-5.142858h109.714286q8 0 13.142857 5.142858t5.142857 13.142857zM146.285714 530.285714v109.714286q0 8-5.142857 13.142857t-13.142857 5.142857H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142857V530.285714q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857z m329.142857 219.428572v109.714285q0 8-5.142857 13.142858t-13.142857 5.142857H347.428571q-8 0-13.142857-5.142857t-5.142857-13.142858v-109.714285q0-8 5.142857-13.142857t13.142857-5.142858h109.714286q8 0 13.142857 5.142858t5.142857 13.142857zM365.714286 530.285714v109.714286q0 8-5.142857 13.142857t-13.142858 5.142857H237.714286q-8 0-13.142857-5.142857t-5.142858-13.142857V530.285714q0-8 5.142858-13.142857t13.142857-5.142857h109.714285q8 0 13.142858 5.142857t5.142857 13.142857zM37.714286 438.857143q-16 0-26.857143-10.857143T0 401.714286V328h293.714286v73.714286q0 15.428571-10.857143 26.285714t-26.285714 10.857143H37.714286z m657.142857 310.857143v109.714285q0 8-5.142857 13.142858t-13.142857 5.142857H566.857143q-8 0-13.142857-5.142857t-5.142857-13.142858v-109.714285q0-8 5.142857-13.142857t13.142857-5.142858h109.714286q8 0 13.142857 5.142858t5.142857 13.142857z m-109.714286-219.428572v109.714286q0 8-5.142857 13.142857t-13.142857 5.142857H457.142857q-8 0-13.142857-5.142857t-5.142857-13.142857V530.285714q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857z m329.142857 219.428572v109.714285q0 8-5.142857 13.142858t-13.142857 5.142857h-109.714286q-8 0-13.142857-5.142857t-5.142857-13.142858v-109.714285q0-8 5.142857-13.142857t13.142857-5.142858h109.714286q8 0 13.142857 5.142858t5.142857 13.142857z m-109.714285-219.428572v109.714286q0 8-5.142858 13.142857t-13.142857 5.142857h-109.714285q-8 0-13.142858-5.142857t-5.142857-13.142857V530.285714q0-8 5.142857-13.142857t13.142858-5.142857h109.714285q8 0 13.142857 5.142857t5.142858 13.142857z m219.428571-233.142857v7.428572h-293.714286v-5.714286q0-59.428571-218.285714-58.285714-218.285714 0.571429-218.285714 58.285714v5.714286H0v-7.428572q0-9.714286 4.857143-24.571428t19.428571-36.571429 37.428572-43.142857 63.142857-43.428572 91.428571-38.571428 128-27.142857T512 73.142857t167.428571 10.571429 128 27.142857 91.714286 38.571428 63.142857 43.428572 37.428572 43.142857 19.428571 36.571429 4.857143 24.571428z m0 233.142857v109.714286q0 8-5.142857 13.142857t-13.142857 5.142857h-109.714286q-8 0-13.142857-5.142857t-5.142857-13.142857V530.285714q0-8 5.142857-13.142857t13.142857-5.142857h109.714286q8 0 13.142857 5.142857t5.142857 13.142857z m0-202.285714v73.714286q0 15.428571-10.857143 26.285714t-26.285714 10.857143h-219.428572q-15.428571 0-26.285714-10.857143t-10.857143-26.285714V328h293.714286z\"  ></path></symbol><symbol id=\"icon-truck\" viewBox=\"0 0 1024 1024\"><path d=\"M365.714286 804.571429q0-29.714286-21.714286-51.428572t-51.428571-21.714286-51.428572 21.714286-21.714286 51.428572 21.714286 51.428571 51.428572 21.714286 51.428571-21.714286 21.714286-51.428571zM146.285714 512h219.428572V365.714286H275.428571q-7.428571 0-12.571428 5.142857L151.428571 482.285714q-5.142857 5.142857-5.142857 12.571429v17.142857z m731.428572 292.571429q0-29.714286-21.714286-51.428572t-51.428571-21.714286-51.428572 21.714286-21.714286 51.428572 21.714286 51.428571 51.428572 21.714286 51.428571-21.714286 21.714286-51.428571z m146.285714-621.714286v585.142857q0 8.571429-2.285714 15.142857t-7.714286 10.571429-9.428571 6.571428-13.428572 3.428572-12.857143 1.142857-14.571428 0-12.857143-0.285714q0 60.571429-42.857143 103.428571t-103.428571 42.857143-103.428572-42.857143-42.857143-103.428571H438.857143q0 60.571429-42.857143 103.428571t-103.428571 42.857143-103.428572-42.857143-42.857143-103.428571h-36.571428q-1.714286 0-12.857143 0.285714t-14.571429 0-12.857143-1.142857-13.428571-3.428572-9.428571-6.571428-7.714286-10.571429-2.285714-15.142857q0-14.857143 10.857142-25.714286t25.714286-10.857143V548.571429q0-4.571429-0.285714-20t0-21.714286 1.428571-19.714286 3.714286-21.142857 8-17.428571 12.857143-17.142858l113.142857-113.142857q10.857143-10.857143 28.857143-18.285714t33.428571-7.428571h91.428572V182.857143q0-14.857143 10.857143-25.714286t25.714285-10.857143h585.142857q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-tripadvisor\" viewBox=\"0 0 1316 1024\"><path d=\"M372 569.714286q0 22.285714-15.714286 38T318.857143 623.428571q-22.285714 0-38-15.714285T265.142857 569.714286q0-21.714286 15.714286-37.428572T318.857143 516.571429q21.714286 0 37.428571 15.714285T372 569.714286z m659.428571-0.571429q0 22.285714-15.714285 38T977.714286 622.857143t-38-15.714286T924 569.142857t15.714286-37.714286 38-15.428571 38 15.428571 15.714285 37.714286z m-594.285714 0.571429q0-45.142857-32.285714-77.714286T326.857143 459.428571t-78 32.285715T216.571429 569.714286t32.285714 78T326.857143 680t78-32.285714T437.142857 569.714286z m658.857143-0.571429q0-45.714286-32.285714-78T985.714286 458.857143q-45.142857 0-77.714286 32.285714T875.428571 569.142857t32.285715 78T985.714286 679.428571t78-32.285714T1096 569.142857z m-610.285714 0.571429q0 66.285714-46.571429 112.857143T326.857143 729.142857q-66.285714 0-112.857143-46.857143T167.428571 569.714286t46.857143-112.285715T326.857143 410.857143t112.285714 46.571428T485.714286 569.714286z m659.428571-0.571429q0 65.714286-46.571428 112.285714T985.714286 728q-65.714286 0-112.285715-46.571429T826.857143 569.142857t46.571428-112.285714T985.714286 410.285714q66.285714 0 112.857143 46.571429T1145.142857 569.142857z m-550.857143 1.714286q0-109.142857-77.428571-186.571429T330.285714 306.857143q-71.428571 0-132 35.428571T102.285714 438.571429 66.857143 570.857143t35.428571 132.285714T198.285714 799.428571t132 35.428572q109.142857 0 186.571429-77.428572T594.285714 570.857143z m381.714286-327.428572q-145.142857-63.428571-317.714286-63.428571-182.285714 0-327.428571 62.857143 66.857143 0 127.428571 26T562.571429 338.857143t69.714285 104.571428 26 127.428572q0-65.714286 24.857143-125.428572t67.428572-103.142857T852 272t124-28.571429z m273.714286 327.428572q0-109.142857-77.142857-186.571429T986.285714 306.857143t-186.571428 77.428571T722.285714 570.857143t77.428572 186.571428T986.285714 834.857143t186.285715-77.428572T1249.714286 570.857143z m-152-323.428572h218.857143q-25.142857 29.142857-42.857143 65.428572T1250.857143 378.285714q62.857143 86.285714 62.857143 192.571429 0 89.142857-44 164.571428t-119.428572 119.142858-164 43.714285q-76 0-142.285714-32t-112-88.571428q-26.857143 32-73.714286 102.285714-6.285714-12.571429-30.571428-47.142857T585.142857 777.142857q-45.714286 56.571429-112.285714 88.857143T330.285714 898.285714q-88.571429 0-164-43.714285T46.857143 735.428571 2.857143 570.857143q0-106.285714 62.857143-192.571429-5.142857-29.142857-22.857143-65.428571T0 247.428571h208.571429q85.142857-57.142857 202.857142-89.428571t246.857143-32.285714q128 0 240.571429 32t198.857143 89.714285z\"  ></path></symbol><symbol id=\"icon-tumblr-square\" viewBox=\"0 0 1024 1024\"><path d=\"M722.285714 834.857143l-35.428571-104.571429q-25.142857 12.571429-58.857143 12.571429-20.571429 0.571429-35.428571-6t-22-18-10-23.142857-2.857143-24.857143V443.428571h146.857143V332.571429H558.285714V146.285714H450.857143q-4.571429 0-5.142857 5.714286-2.857143 25.142857-10 49.714286t-22.285715 54.285714-44 54.285714T301.714286 349.142857v94.285714h74.285714v238.857143q0 32.571429 12.285714 65.714286t37.142857 63.428571 69.142858 48.857143T595.428571 877.714286q39.428571-0.571429 78-14.285715t48.857143-28.571428z m228.571429-597.142857v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-turkish-lira\" viewBox=\"0 0 1024 1024\"><path d=\"M841.142857 475.428571q0 109.142857-54 201.714286T640.571429 823.714286 438.857143 877.714286H347.428571q-8 0-13.142857-5.142857t-5.142857-13.142858V510.285714L206.285714 548q-1.714286 0.571429-5.142857 0.571429-5.714286 0-10.857143-3.428572-7.428571-5.714286-7.428571-14.857143V457.142857q0-13.142857 13.142857-17.714286l133.142857-40.571428v-53.142857L206.285714 383.428571q-1.714286 0.571429-5.142857 0.571429-5.714286 0-10.857143-3.428571-7.428571-5.714286-7.428571-14.857143V292.571429q0-13.142857 13.142857-17.714286l133.142857-40.571429V91.428571q0-8 5.142857-13.142857t13.142857-5.142857h91.428572q8 0 13.142857 5.142857t5.142857 13.142857v103.428572l214.285714-66.285714q8.571429-2.857143 16 2.857142t7.428572 14.857143v73.142857q0 13.142857-13.142857 17.714286L457.142857 306.285714v53.142857l214.285714-66.285714q8.571429-2.857143 16 2.857143t7.428572 14.857143v73.142857q0 13.142857-13.142857 17.714286L457.142857 470.857143v278.285714q107.428571-7.428571 181.714286-86.285714t74.285714-187.428572q0-8 5.142857-13.142857t13.142857-5.142857h91.428572q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-tumblr\" viewBox=\"0 0 1024 1024\"><path d=\"M696.759957 759.428571l45.714286 135.428572q-13.142857 20-63.428572 37.714286t-101.142857 18.285714q-59.428571 1.142857-108.857143-14.857143T387.6171 893.714286t-54.285714-60.571429-31.714286-68.571428-9.428571-67.428572V386.285714H196.188529V263.428571q41.142857-14.857143 73.714285-39.714285t52-51.428572 33.142857-58.285714 19.428572-56.571429T383.045671 6.857143q0.571429-2.857143 2.571429-4.857143T389.902814 0h139.428572v242.285714h190.285714v144H528.759957v296q0 17.142857 3.714286 32t12.857143 30 28.285714 23.714286 46.571429 8q44.571429-1.142857 76.571428-16.571429z\"  ></path></symbol><symbol id=\"icon-tv\" viewBox=\"0 0 1170 1024\"><path d=\"M1024 713.142857V164.571429q0-7.428571-5.428571-12.857143T1005.714286 146.285714H91.428571q-7.428571 0-12.857142 5.428572T73.142857 164.571429v548.571428q0 7.428571 5.428572 12.857143t12.857142 5.428571h914.285715q7.428571 0 12.857143-5.428571t5.428571-12.857143z m73.142857-548.571428v548.571428q0 37.714286-26.857143 64.571429t-64.571428 26.857143h-420.571429v73.142857h201.142857q8 0 13.142857 5.142857t5.142858 13.142857v36.571429q0 8-5.142858 13.142857t-13.142857 5.142857H310.857143q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h201.142857v-73.142857H91.428571q-37.714286 0-64.571428-26.857143T0 713.142857V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h914.285715q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-twitter\" viewBox=\"0 0 1024 1024\"><path d=\"M962.285714 233.142857q-38.285714 56-92.571428 95.428572 0.571429 8 0.571428 24 0 74.285714-21.714285 148.285714T782.571429 642.857143 677.142857 763.142857t-147.428571 83.428572-184.571429 31.142857q-154.857143 0-283.428571-82.857143 20 2.285714 44.571428 2.285714 128.571429 0 229.142857-78.857143-60-1.142857-107.428571-36.857143T162.857143 590.285714q18.857143 2.857143 34.857143 2.857143 24.571429 0 48.571428-6.285714-64-13.142857-106-63.714286T98.285714 405.714286v-2.285715q38.857143 21.714286 83.428572 23.428572-37.714286-25.142857-60-65.714286t-22.285715-88q0-50.285714 25.142858-93.142857 69.142857 85.142857 168.285714 136.285714T505.142857 373.142857q-4.571429-21.714286-4.571428-42.285714 0-76.571429 54-130.571429T685.142857 146.285714q80 0 134.857143 58.285715 62.285714-12 117.142857-44.571429-21.142857 65.714286-81.142857 101.714286 53.142857-5.714286 106.285714-28.571429z\"  ></path></symbol><symbol id=\"icon-twitter-square\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 348.571429q-32 14.285714-69.142858 19.428571 38.857143-22.857143 53.142858-66.857143-37.142857 21.714286-76.571429 29.142857-34.857143-37.714286-87.428571-37.714285-49.714286 0-84.857143 35.142857T504.571429 412.571429q0 16.571429 2.857142 27.428571-73.714286-4-138.285714-37.142857T259.428571 314.285714q-16.571429 28.571429-16.571428 60.571429 0 65.142857 52 100-26.857143-0.571429-57.142857-14.857143v1.142857q0 42.857143 28.571428 76.285714t70.285715 41.428572q-16.571429 4.571429-29.142858 4.571428-7.428571 0-22.285714-2.285714 12 36 42.571429 59.428572t69.428571 24q-66.285714 51.428571-149.142857 51.428571-14.857143 0-28.571429-1.714286 84.571429 53.714286 184 53.714286 64 0 120-20.285714t96-54.285715 68.857143-78.285714 42.857143-92.571428T745.142857 426.285714q0-10.285714-0.571428-15.428571 36-25.714286 60-62.285714z m146.285714-110.857143v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-twitch\" viewBox=\"0 0 1024 1024\"><path d=\"M512 248v248H429.142857V248h82.857143z m227.428571 0v248h-82.857142V248h82.857142z m0 434.285714l144.571429-145.142857V82.857143H201.714286v599.428571h186.285714v124l124-124h227.428571zM966.857143 0v578.857143l-248 248H532.571429l-124 124H284.571429v-124H57.142857V165.142857L119.428571 0h847.428572z\"  ></path></symbol><symbol id=\"icon-underline\" viewBox=\"0 0 1024 1024\"><path d=\"M86.500609 127.428571q-21.142857-1.142857-25.714286-2.285714l-1.714286-50.285714q7.428571-0.571429 22.857143-0.571429 34.285714 0 64 2.285715 75.428571 4 94.857143 4 49.142857 0 96-1.714286 66.285714-2.285714 83.428571-2.857143 32 0 49.142857-1.142857l-0.571428 8 1.142857 36.571428v5.142858q-34.285714 5.142857-70.857143 5.142857-34.285714 0-45.142857 14.285714-7.428571 8-7.428571 75.428571 0 7.428571 0.285714 18.571429t0.285714 14.571429l0.571429 130.857142 8 160q3.428571 70.857143 29.142857 115.428572 20 33.714286 54.857143 52.571428 50.285714 26.857143 101.142857 26.857143 59.428571 0 109.142857-16 32-10.285714 56.571429-29.142857 27.428571-20.571429 37.142857-36.571428 20.571429-32 30.285714-65.142858 12-41.714286 12-130.857142 0-45.142857-2-73.142858t-6.285714-70T769.92918 226.285714l-2.285714-33.714285q-2.857143-38.285714-13.714286-50.285715-19.428571-20-44-19.428571l-57.142857 1.142857-8-1.714286 1.142857-49.142857h48l117.142857 5.714286q43.428571 1.714286 112-5.714286l10.285714 1.142857q3.428571 21.714286 3.428572 29.142857 0 4-2.285714 17.714286-25.714286 6.857143-48 7.428572-41.714286 6.285714-45.142858 9.714285-8.571429 8.571429-8.571428 23.428572 0 4 0.857143 15.428571t0.857143 17.714286q4.571429 10.857143 12.571428 226.285714 3.428571 111.428571-8.571428 173.714286-8.571429 43.428571-23.428572 69.714286-21.714286 37.142857-64 70.285714-42.857143 32.571429-104 50.857143-62.285714 18.857143-145.714286 18.857143-95.428571 0-162.285714-26.285715-68-26.857143-102.285714-69.714285-34.857143-43.428571-47.428572-111.428572-9.142857-45.714286-9.142857-135.428571V271.428571q0-107.428571-9.714285-121.714285-14.285714-20.571429-84-22.285715z m850.285714 805.142858v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857H77.357751q-8 0-13.142857 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142857 5.142857h841.142858q8 0 13.142857-5.142857t5.142857-13.142857z\"  ></path></symbol><symbol id=\"icon-umbrella\" viewBox=\"0 0 1024 1024\"><path d=\"M548.571429 473.142857v331.428572q0 59.428571-43.428572 102.857142t-102.857143 43.428572-102.857143-43.428572-43.428571-102.857142q0-14.857143 10.857143-25.714286t25.714286-10.857143 25.714285 10.857143 10.857143 25.714286q0 28.571429 22.285714 50.857142t50.857143 22.285715 50.857143-22.285715 22.285714-50.857142V473.142857q18.857143-6.285714 36.571429-6.285714t36.571429 6.285714z m438.857142 15.428572q0 7.428571-5.428571 12.857142T969.142857 506.857143q-6.285714 0-13.142857-5.714286-28-26.285714-53.142857-39.428571t-58.285714-13.142857q-38.857143 0-73.142858 21.142857t-58.857142 55.428571q-4 5.714286-10 16t-8.285715 13.714286q-6.285714 9.714286-16 9.714286-10.285714 0-16.571428-9.714286-2.285714-3.428571-8.285715-13.714286t-10-16q-24.571429-34.285714-58.571428-55.428571T512 448.571429t-72.857143 21.142857T380.571429 525.142857q-4 5.714286-10 16T362.285714 554.857143q-6.285714 9.714286-16.571428 9.714286-9.714286 0-16-9.714286-2.285714-3.428571-8.285715-13.714286T311.428571 525.142857q-24.571429-34.285714-58.857142-55.428571t-73.142858-21.142857q-33.142857 0-58.285714 13.142857t-53.142857 39.428571q-6.857143 5.714286-13.142857 5.714286-7.428571 0-12.857143-5.428572T36.571429 488.571429q0-2.857143 0.571428-4 25.714286-104.571429 98.571429-182.571429t170.285714-116.857143T512 146.285714q80 0 156.857143 22.857143T809.714286 234t111.142857 106.857143T986.857143 484.571429q0.571429 1.142857 0.571428 4zM548.571429 73.142857v56q-24-1.142857-36.571429-1.142857t-36.571429 1.142857v-56q0-14.857143 10.857143-25.714286t25.714286-10.857142 25.714286 10.857142 10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-undo\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 512q0 89.142857-34.857143 170.285714t-93.714286 140-140 93.714286-170.285714 34.857143q-98.285714 0-186.857143-41.428572T174.285714 792.571429q-4-5.714286-3.714285-12.857143t4.857142-11.714286l78.285715-78.857143q5.714286-5.142857 14.285714-5.142857 9.142857 1.142857 13.142857 6.857143 41.714286 54.285714 102.285714 84t128.571429 29.714286q59.428571 0 113.428571-23.142858T718.857143 718.857143t62.571428-93.428572T804.571429 512t-23.142858-113.428571T718.857143 305.142857 625.428571 242.571429 512 219.428571q-56 0-107.428571 20.285715T313.142857 297.714286l78.285714 78.857143q17.714286 17.142857 8 39.428571-9.714286 22.857143-33.714285 22.857143H109.714286q-14.857143 0-25.714286-10.857143T73.142857 402.285714V146.285714q0-24 22.857143-33.714285 22.285714-9.714286 39.428571 8l74.285715 73.714285q61.142857-57.714286 139.714285-89.428571T512 73.142857q89.142857 0 170.285714 34.857143t140 93.714286 93.714286 140 34.857143 170.285714z\"  ></path></symbol><symbol id=\"icon-unlink\" viewBox=\"0 0 1024 1024\"><path d=\"M287.428571 726.285714l-146.285714 146.285715q-6.285714 5.142857-13.142857 5.142857t-13.142857-5.142857q-5.142857-5.714286-5.142857-13.142858t5.142857-13.142857l146.285714-146.285714q5.714286-5.142857 13.142857-5.142857t13.142857 5.142857q5.142857 5.714286 5.142858 13.142857t-5.142858 13.142857z m96.571429 23.428572v182.857143q0 8-5.142857 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142858-13.142857v-182.857143q0-8 5.142858-13.142857t13.142857-5.142858 13.142857 5.142858 5.142857 13.142857z m-128-128q0 8-5.142857 13.142857t-13.142857 5.142857H54.857143q-8 0-13.142857-5.142857t-5.142857-13.142857 5.142857-13.142857 13.142857-5.142858h182.857143q8 0 13.142857 5.142858t5.142857 13.142857z m722.285714 73.142857q0 68.571429-48.571428 116l-84 83.428571q-47.428571 47.428571-116 47.428572-69.142857 0-116.571429-48.571429l-190.857143-191.428571q-12-12-24-32l136.571429-10.285715 156 156.571429q15.428571 15.428571 38.857143 15.714286t38.857143-15.142857l84-83.428572q16-16 16-38.285714 0-22.857143-16-38.857143l-156.571429-157.142857 10.285714-136.571429q20 12 32 24l192 192q48 49.142857 48 116.571429z m-352.571428-413.714286l-136.571429 10.285714-156-156.571428q-16-16-38.857143-16-22.285714 0-38.857143 15.428571L171.428571 217.714286q-16 16-16 38.285714 0 22.857143 16 38.857143l156.571429 156.571428-10.285714 137.142858q-20-12-32-24L93.714286 372.571429q-48-49.142857-48-116.571429 0-68.571429 48.571428-116L178.285714 56.571429q47.428571-47.428571 116-47.428572 69.142857 0 116.571429 48.571429l190.857143 191.428571q12 12 24 32z m361.714285 48q0 8-5.142857 13.142857t-13.142857 5.142857h-182.857143q-8 0-13.142857-5.142857t-5.142857-13.142857 5.142857-13.142857 13.142857-5.142857h182.857143q8 0 13.142857 5.142857t5.142857 13.142857zM676.571429 18.285714v182.857143q0 8-5.142858 13.142857t-13.142857 5.142857-13.142857-5.142857-5.142857-13.142857V18.285714q0-8 5.142857-13.142857t13.142857-5.142857 13.142857 5.142857 5.142858 13.142857z m232.571428 86.285715l-146.285714 146.285714q-6.285714 5.142857-13.142857 5.142857t-13.142857-5.142857q-5.142857-5.714286-5.142858-13.142857t5.142858-13.142857l146.285714-146.285715q5.714286-5.142857 13.142857-5.142857t13.142857 5.142857q5.142857 5.714286 5.142857 13.142857t-5.142857 13.142858z\"  ></path></symbol><symbol id=\"icon-university\" viewBox=\"0 0 1170 1024\"><path d=\"M548.571429 0l548.571428 219.428571v73.142858h-73.142857q0 14.857143-11.714286 25.714285t-27.714285 10.857143H112.571429q-16 0-27.714286-10.857143T73.142857 292.571429H0V219.428571zM146.285714 365.714286h146.285715v438.857143h73.142857V365.714286h146.285714v438.857143h73.142857V365.714286h146.285714v438.857143h73.142858V365.714286h146.285714v438.857143h33.714286q16 0 27.714285 10.857142t11.714286 25.714286v36.571429H73.142857v-36.571429q0-14.857143 11.714286-25.714286t27.714286-10.857142h33.714285V365.714286z m911.428572 548.571428q16 0 27.714285 10.857143t11.714286 25.714286v73.142857H0v-73.142857q0-14.857143 11.714286-25.714286t27.714285-10.857143h1018.285715z\"  ></path></symbol><symbol id=\"icon-universal-access\" viewBox=\"0 0 1024 1024\"><path d=\"M785.142857 375.428571q-3.428571-14.857143-16.285714-22.571428T741.142857 348.571429q-149.142857 35.428571-229.142857 35.428571t-229.142857-35.428571q-14.857143-3.428571-27.714286 4.285714T238.857143 375.428571t4.285714 27.714286T265.714286 419.428571q110.857143 26.285714 173.142857 33.142858-1.142857 90.285714-8.857143 153.714285T414.857143 695.142857 391.428571 761.142857l-5.142857 12q-5.714286 14.285714 0.571429 28t20.571428 19.428572q5.142857 2.285714 13.142858 2.285714 25.142857 0 34.285714-23.428572l4.571428-11.428571q30.857143-79.428571 40.571429-148h24q9.714286 68.571429 40.571429 148l4.571428 11.428571q9.142857 23.428571 34.285714 23.428572 8 0 13.142858-2.285714 14.285714-5.714286 20.571428-19.428572t0.571429-28l-5.142857-12q-16-40.571429-23.428572-66t-15.142857-88.857143-8.857143-153.714285q62.285714-6.857143 173.142857-33.142858 14.857143-3.428571 22.571429-16.285714t4.285714-27.714286z m-200-82.857142q0-30.285714-21.428571-51.714286T512 219.428571t-51.714286 21.428572T438.857143 292.571429t21.428571 51.714285T512 365.714286t51.714286-21.428572T585.142857 292.571429z m329.142857 219.428571q0 81.714286-31.714285 156.285714t-85.714286 128.571429-128.571429 85.714286T512 914.285714t-156.285714-31.714285-128.571429-85.714286-85.714286-128.571429T109.714286 512t31.714285-156.285714 85.714286-128.571429 128.571429-85.714286T512 109.714286t156.285714 31.714285 128.571429 85.714286 85.714286 128.571429T914.285714 512zM512 73.142857q-89.142857 0-170.285714 34.857143T201.714286 201.714286 108 341.714286t-34.857143 170.285714 34.857143 170.285714 93.714286 140 140 93.714286 170.285714 34.857143 170.285714-34.857143 140-93.714286 93.714286-140 34.857143-170.285714-34.857143-170.285714-93.714286-140-140-93.714286-170.285714-34.857143z m512 438.857143q0 104-40.571429 198.857143t-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0t198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-unlock-alt\" viewBox=\"0 0 1024 1024\"><path d=\"M748.596971 438.857143q22.857143 0 38.857143 16t16 38.857143v329.142857q0 22.857143-16 38.857143t-38.857143 16H200.025543q-22.857143 0-38.857143-16t-16-38.857143V493.714286q0-22.857143 16-38.857143t38.857143-16h18.285714V256q0-105.714286 75.142857-180.857143T474.311257 0t180.857143 75.142857T730.311257 256q0 14.857143-10.857143 25.714286t-25.714285 10.857143h-36.571429q-14.857143 0-25.714286-10.857143t-10.857143-25.714286q0-60.571429-42.857142-103.428571t-103.428572-42.857143-103.428571 42.857143-42.857143 103.428571v182.857143h420.571428z\"  ></path></symbol><symbol id=\"icon-unlock\" viewBox=\"0 0 1024 1024\"><path d=\"M987.428571 329.142857v146.285714q0 14.857143-10.857142 25.714286t-25.714286 10.857143h-36.571429q-14.857143 0-25.714285-10.857143t-10.857143-25.714286V329.142857q0-60.571429-42.857143-103.428571t-103.428572-42.857143-103.428571 42.857143-42.857143 103.428571v109.714286h54.857143q22.857143 0 38.857143 16t16 38.857143v329.142857q0 22.857143-16 38.857143t-38.857143 16H91.428571q-22.857143 0-38.857142-16t-16-38.857143V493.714286q0-22.857143 16-38.857143t38.857142-16h384V329.142857q0-105.714286 75.142858-180.857143T731.428571 73.142857t180.857143 75.142857T987.428571 329.142857z\"  ></path></symbol><symbol id=\"icon-upload\" viewBox=\"0 0 1024 1024\"><path d=\"M768 841.142857q0-14.857143-10.857143-25.714286t-25.714286-10.857142-25.714285 10.857142-10.857143 25.714286 10.857143 25.714286 25.714285 10.857143 25.714286-10.857143 10.857143-25.714286z m146.285714 0q0-14.857143-10.857143-25.714286t-25.714285-10.857142-25.714286 10.857142-10.857143 25.714286 10.857143 25.714286 25.714286 10.857143 25.714285-10.857143 10.857143-25.714286z m73.142857-128v182.857143q0 22.857143-16 38.857143t-38.857142 16H91.428571q-22.857143 0-38.857142-16t-16-38.857143v-182.857143q0-22.857143 16-38.857143t38.857142-16h244q12 32 40.285715 52.571429t63.142857 20.571428h146.285714q34.857143 0 63.142857-20.571428t40.285715-52.571429h244q22.857143 0 38.857142 16t16 38.857143z m-185.714285-370.285714q-9.714286 22.857143-33.714286 22.857143h-146.285714v256q0 14.857143-10.857143 25.714285t-25.714286 10.857143H438.857143q-14.857143 0-25.714286-10.857143t-10.857143-25.714285V365.714286H256q-24 0-33.714286-22.857143-9.714286-22.285714 8-39.428572L486.285714 47.428571q10.285714-10.857143 25.714286-10.857142t25.714286 10.857142l256 256q17.714286 17.142857 8 39.428572z\"  ></path></symbol><symbol id=\"icon-unsorted\" viewBox=\"0 0 1024 1024\"><path d=\"M795.681749 621.714286q0 14.857143-10.857143 25.714285l-256 256q-10.857143 10.857143-25.714286 10.857143t-25.714286-10.857143L221.396034 647.428571q-10.857143-10.857143-10.857143-25.714285t10.857143-25.714286 25.714286-10.857143h512q14.857143 0 25.714286 10.857143t10.857143 25.714286z m0-219.428572q0 14.857143-10.857143 25.714286t-25.714286 10.857143H247.11032q-14.857143 0-25.714286-10.857143T210.538891 402.285714t10.857143-25.714285l256-256q10.857143-10.857143 25.714286-10.857143t25.714286 10.857143l256 256q10.857143 10.857143 10.857143 25.714285z\"  ></path></symbol><symbol id=\"icon-usd\" viewBox=\"0 0 1024 1024\"><path d=\"M748.526129 677.142857q0 87.428571-56.857143 150.571429T543.9547 905.714286v100q0 8-5.142857 13.142857t-13.142857 5.142857H448.526129q-7.428571 0-12.857143-5.428571T430.240414 1005.714286v-100q-37.714286-5.142857-72.857143-17.714286T299.383271 862.571429t-42.285714-27.428572-26.571428-21.428571-10-10.285715q-9.714286-12-1.142858-23.428571l58.857143-77.142857q4-5.714286 13.142857-6.857143 8.571429-1.142857 13.714286 5.142857l1.142857 1.142857q64.571429 56.571429 138.857143 71.428572 21.142857 4.571429 42.285714 4.571428 46.285714 0 81.428572-24.571428t35.142857-69.714286q0-16-8.571429-30.285714t-19.142857-24-33.428571-21.428572-37.714286-18.285714-45.714286-18.571429q-22.285714-9.142857-35.142857-14.285714T389.097557 542t-35.714286-17.714286T321.097557 504t-30.571428-24.285714-24.857143-28-20.285715-33.142857-12-38-4.857142-44.571429q0-78.857143 56-138.285714t145.714285-76.571429V18.285714q0-7.428571 5.428572-12.857143T448.526129 0h77.142857q8 0 13.142857 5.142857t5.142857 13.142857v100.571429q32.571429 3.428571 63.142857 13.142857t49.714286 19.142857T693.097557 172.571429t22.285714 16.571428 8.571429 8q9.714286 10.285714 2.857143 21.714286l-46.285714 83.428571q-4.571429 8.571429-13.142858 9.142857-8 1.714286-15.428571-4-1.714286-1.714286-8.285714-6.857142t-22.285715-15.142858-33.428571-18.285714-42.571429-14.857143T496.526129 245.714286q-54.285714 0-88.571429 24.571428t-34.285714 63.428572q0 14.857143 4.857143 27.428571t16.857142 23.714286 22.571429 18.857143 32 17.714285 34.571429 15.428572 40 15.714286q30.285714 11.428571 46.285714 18t43.428571 20 43.142857 24.285714 35.428572 28.571428 30.285714 36.285715T741.097557 623.428571t7.428572 53.714286z\"  ></path></symbol><symbol id=\"icon-usb\" viewBox=\"0 0 1316 1024\"><path d=\"M1307.428571 460q9.142857 4.571429 9.142858 15.428571t-9.142858 15.428572l-182.857142 109.714286q-4.571429 2.857143-9.142858 2.857142-5.142857 0-9.142857-2.285714-9.142857-5.714286-9.142857-16V512h-490.285714q21.142857 33.142857 47.428571 94.285714 9.142857 21.142857 14 31.428572t13.714286 28 15.428571 26.857143 15.428572 19.428571 18 14.857143 18.857143 4.571428h54.857143v-54.857142q0-8 5.142857-13.142858t13.142857-5.142857h182.857143q8 0 13.142857 5.142857t5.142857 13.142858v182.857142q0 8-5.142857 13.142858t-13.142857 5.142857h-182.857143q-8 0-13.142857-5.142857t-5.142857-13.142858v-54.857142h-54.857143q-18.285714 0-34.857143-5.714286t-29.142857-13.428572-25.714286-23.142857-21.142857-26.285714-19.142857-32.571429-16.285715-32.857142-16-34.571429q-13.142857-30.285714-21.142857-46.571429t-20.571428-37.142857-25.428572-30.571428-26.571428-9.714286H288q-12.571429 48-52 78.857143t-89.714286 30.857143q-60.571429 0-103.428571-42.857143T0 475.428571t42.857143-103.428571 103.428571-42.857143q50.285714 0 89.714286 30.857143t52 78.857143h59.428571q13.714286 0 26.571429-9.714286t25.428571-30.571428 20.571429-37.142858 21.142857-46.571428q10.857143-23.428571 16-34.571429t16.285714-32.857143 19.142858-32.571428 21.142857-26.285714 25.714285-23.142858 29.142858-13.428571 34.857142-5.714286h61.142858q12-32.571429 40-52.857143t63.428571-20.285714q45.714286 0 77.714286 32t32 77.714286-32 77.714286-77.714286 32q-35.428571 0-63.428571-20.285715t-40-52.857143h-61.142858q-9.714286 0-18.857142 4.571429t-18 14.857143-15.428572 19.428571-15.428571 26.857143-13.714286 28-14 31.428572q-26.285714 61.142857-47.428571 94.285714h636.571428V365.714286q0-10.285714 9.142857-16t18.285715 0.571428z\"  ></path></symbol><symbol id=\"icon-user-circle\" viewBox=\"0 0 1024 1024\"><path d=\"M870.285714 765.142857q-12.571429-88.571429-50-147.142857T714.857143 550.285714q-38.285714 42.285714-91.142857 66T512 640t-111.714286-23.714286T309.142857 550.285714q-68 9.142857-105.428571 67.714286T153.714286 765.142857q60.571429 85.714286 154.857143 135.714286t203.428571 50 203.428571-50 154.857143-135.714286z m-138.857143-399.428571q0-90.857143-64.285714-155.142857T512 146.285714 356.857143 210.571429 292.571429 365.714286t64.285714 155.142857T512 585.142857t155.142857-64.285714T731.428571 365.714286z m292.571429 146.285714q0 104-40.571429 198.571429t-108.857142 163.428571T711.428571 983.428571t-199.428571 40.571429q-104 0-198.857143-40.571429t-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0t198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-user-o\" viewBox=\"0 0 1024 1024\"><path d=\"M759.428571 448q26.857143 8 51.142858 21.714286t50.857142 41.714285 45.428572 66 31.428571 98.285715 12.571429 135.142857q0 88-57.142857 150.571428T756 1024H268q-80.571429 0-137.714286-62.571429T73.142857 810.857143q0-74.857143 12.571429-135.142857t31.428571-98.285715T162.571429 511.428571t50.857142-41.714285 51.142858-21.714286q-45.142857-71.428571-45.142858-155.428571 0-59.428571 23.142858-113.428572T305.142857 85.714286 398.571429 23.142857 512 0t113.428571 23.142857T718.857143 85.714286t62.571428 93.428571T804.571429 292.571429q0 84-45.142858 155.428571zM512 73.142857q-90.857143 0-155.142857 64.285714T292.571429 292.571429t64.285714 155.142857T512 512t155.142857-64.285714T731.428571 292.571429t-64.285714-155.142858T512 73.142857z m244 877.714286q50.285714 0 86-40.857143T877.714286 810.857143q0-136.571429-44.857143-215.428572T704 512.571429q-82.857143 72.571429-192 72.571428T320 512.571429q-84 4-128.857143 82.857142T146.285714 810.857143q0 58.285714 35.714286 99.142857T268 950.857143h488z\"  ></path></symbol><symbol id=\"icon-user-circle-o\" viewBox=\"0 0 1024 1024\"><path d=\"M512 0q104 0 198.857143 40.571429t163.428571 109.142857 109.142857 163.428571 40.571429 198.857143q0 103.428571-40.285714 198.285714T874.857143 873.714286t-163.428572 109.428571-199.428571 40.857143-199.428571-40.571429-163.142858-109.428571-108.857142-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0z m353.714286 772q85.142857-117.142857 85.142857-260 0-89.142857-34.857143-170.285714t-93.714286-140-140-93.714286-170.285714-34.857143-170.285714 34.857143-140 93.714286-93.714286 140-34.857143 170.285714q0 142.857143 85.142857 260 37.714286-186.857143 174.857143-186.857143 74.857143 73.142857 178.857143 73.142857t178.857143-73.142857q137.142857 0 174.857143 186.857143z m-134.285715-369.714286q0-90.857143-64.285714-155.142857T512 182.857143 356.857143 247.142857 292.571429 402.285714t64.285714 155.142857T512 621.714286t155.142857-64.285715T731.428571 402.285714z\"  ></path></symbol><symbol id=\"icon-user-plus\" viewBox=\"0 0 1170 1024\"><path d=\"M402.285714 512q-90.857143 0-155.142857-64.285714T182.857143 292.571429t64.285714-155.142858T402.285714 73.142857t155.142857 64.285714T621.714286 292.571429 557.428571 447.714286 402.285714 512z m548.571429 73.142857h201.142857q7.428571 0 12.857143 5.428572t5.428571 12.857142v109.714286q0 7.428571-5.428571 12.857143t-12.857143 5.428571h-201.142857v201.142858q0 7.428571-5.428572 12.857142t-12.857142 5.428572h-109.714286q-7.428571 0-12.857143-5.428572t-5.428571-12.857142v-201.142858h-201.142858q-7.428571 0-12.857142-5.428571t-5.428572-12.857143v-109.714286q0-7.428571 5.428572-12.857142t12.857142-5.428572h201.142858V384q0-7.428571 5.428571-12.857143t12.857143-5.428571h109.714286q7.428571 0 12.857142 5.428571t5.428572 12.857143v201.142857z m-420.571429 128q0 29.714286 21.714286 51.428572t51.428571 21.714285h146.285715v136q-38.857143 28.571429-97.714286 28.571429H152.571429q-69.142857 0-110.857143-39.428572T0 802.857143q0-30.285714 2-59.142857t8-62.285715T25.142857 619.428571t24.571429-55.714285 35.428571-46.285715 48.857143-30.571428T197.714286 475.428571q10.857143 0 22.285714 9.714286 45.142857 34.857143 88.285714 52.285714T402.285714 554.857143t94-17.428572T584.571429 485.142857q11.428571-9.714286 22.285714-9.714286 75.428571 0 124 54.857143h-127.428572q-29.714286 0-51.428571 21.714286t-21.714286 51.428571v109.714286z\"  ></path></symbol><symbol id=\"icon-user-md\" viewBox=\"0 0 1024 1024\"><path d=\"M323.42474 768q0 14.857143-10.857143 25.714286t-25.714286 10.857143-25.714285-10.857143-10.857143-25.714286 10.857143-25.714286 25.714285-10.857143 25.714286 10.857143 10.857143 25.714286z m585.142857 34.857143q0 69.142857-41.714286 108.571428t-110.857142 39.428572H256.567597q-69.142857 0-110.857143-39.428572T103.996169 802.857143q0-38.857143 3.142857-74.857143t13.714285-78.857143T147.996169 573.428571t46.285714-58.857142T262.853311 480q-12.571429 29.714286-12.571428 68.571429v116q-33.142857 11.428571-53.142857 40t-20 63.428571q0 45.714286 32 77.714286t77.714285 32 77.714286-32 32-77.714286q0-34.857143-20.285714-63.428571t-52.857143-40V548.571429q0-35.428571 14.285714-53.142858 75.428571 59.428571 168.571429 59.428572t168.571428-59.428572q14.285714 17.714286 14.285715 53.142858v36.571428q-60.571429 0-103.428572 42.857143t-42.857143 103.428571v50.857143q-18.285714 16.571429-18.285714 40.571429 0 22.857143 16 38.857143t38.857143 16 38.857143-16 16-38.857143q0-24-18.285714-40.571429v-50.857143q0-29.714286 21.714285-51.428571t51.428572-21.714286 51.428571 21.714286 21.714286 51.428571v50.857143q-18.285714 16.571429-18.285714 40.571429 0 22.857143 16 38.857143t38.857142 16 38.857143-16 16-38.857143q0-24-18.285714-40.571429v-50.857143q0-38.857143-19.714286-72.857142T762.281883 605.142857q0-5.714286 0.285714-24.285714t0-27.428572-1.428571-23.714285-4-26.857143-7.428572-22.857143q38.857143 8.571429 68.571429 34.571429t46.285714 58.857142 27.142857 75.714286 13.714286 78.857143 3.142857 74.857143z m-182.857143-510.285714q0 90.857143-64.285714 155.142857T506.281883 512 351.139026 447.714286 286.853311 292.571429t64.285715-155.142858T506.281883 73.142857t155.142857 64.285714T725.710454 292.571429z\"  ></path></symbol><symbol id=\"icon-user-secret\" viewBox=\"0 0 1024 1024\"><path d=\"M402.285714 877.714286l54.857143-256-54.857143-73.142857-73.142857-36.571429z m146.285715 0l73.142857-365.714286-73.142857 36.571429-54.857143 73.142857zM640 300.571429q-1.142857-2.285714-2.285714-3.428572-5.714286-4.571429-54.857143-4.571428-40 0-95.428572 10.857142-4 1.142857-12 1.142858t-12-1.142858q-55.428571-10.857143-95.428571-10.857142-49.142857 0-54.857143 4.571428-1.142857 1.142857-2.285714 3.428572 1.142857 10.285714 2.285714 15.428571 1.142857 1.714286 4.285714 3.714286T321.714286 325.714286q1.142857 2.285714 4.285714 11.714285t4 11.714286 4.285714 9.714286 4.857143 9.714286 5.142857 8 6.857143 7.714285 8 5.428572 10 4.571428 11.714286 2.285715 14 1.142857q20.571429 0 33.714286-7.142857t18.571428-17.142858T455.428571 353.714286t6.571429-16.857143T472 329.714286h6.857143q6.285714 0 10 7.142857T495.428571 353.714286t8.285715 19.714285 18.571428 17.142858 33.714286 7.142857q7.428571 0 14-1.142857t11.714286-2.285715 10-4.571428 8-5.428572 6.857143-7.714285 5.142857-8 4.857143-9.714286 4.285714-9.714286 4-11.714286T629.142857 325.714286q1.142857-4 4.285714-6t4.285715-3.714286q1.142857-5.142857 2.285714-15.428571z m237.714286 502.285714q0 69.142857-41.714286 108.571428t-110.857143 39.428572H225.714286q-69.142857 0-110.857143-39.428572T73.142857 802.857143q0-34.857143 2.571429-67.428572t10.857143-71.714285T108 593.142857t36.285714-59.142857T197.714286 491.428571l-51.428572-125.714285h122.285715q-12.571429-36.571429-12.571429-73.142857 0-6.857143 1.142857-18.285715-110.857143-22.857143-110.857143-54.857143 0-32.571429 120-56.571428 9.714286-35.428571 29.428572-76.571429T336 21.142857q18.285714-21.142857 43.428571-21.142857 17.142857 0 48 17.714286t48 17.714285 48-17.714285 48-17.714286q25.142857 0 43.428572 21.142857 20.571429 24 40.285714 65.142857t29.428572 76.571429q120 24 120 56.571428 0 32-110.857143 54.857143 4 46.285714-11.428572 91.428572h122.285715l-46.857143 128.571428q36 18.857143 61.428571 55.142857T856.571429 631.428571t16.571428 86.571429 4.571429 84.857143z\"  ></path></symbol><symbol id=\"icon-user\" viewBox=\"0 0 1024 1024\"><path d=\"M856.339597 799.428571q0 62.285714-35.714286 106.857143t-86 44.571429H246.625311q-50.285714 0-86-44.571429T124.911026 799.428571q0-48.571429 4.857143-91.714285t18-86.857143 33.428571-74.857143 53.714286-50.857143T311.768169 475.428571q74.857143 73.142857 178.857142 73.142858t178.857143-73.142858q43.428571 0 76.857143 19.714286t53.714286 50.857143 33.428571 74.857143 18 86.857143 4.857143 91.714285z m-146.285714-506.857142q0 90.857143-64.285714 155.142857T490.625311 512 335.482454 447.714286 271.19674 292.571429t64.285714-155.142858T490.625311 73.142857t155.142858 64.285714T710.053883 292.571429z\"  ></path></symbol><symbol id=\"icon-user-times\" viewBox=\"0 0 1170 1024\"><path d=\"M402.285714 512q-90.857143 0-155.142857-64.285714T182.857143 292.571429t64.285714-155.142858T402.285714 73.142857t155.142857 64.285714T621.714286 292.571429 557.428571 447.714286 402.285714 512z m615.428572 182.857143l142.285714 142.285714q5.142857 5.142857 5.142857 13.142857 0 7.428571-5.142857 12.571429l-77.714286 77.714286q-5.142857 5.142857-12.571428 5.142857-8 0-13.142857-5.142857l-142.285715-142.285715-142.285714 142.285715q-5.142857 5.142857-13.142857 5.142857-7.428571 0-12.571429-5.142857l-77.714285-77.714286q-5.142857-5.142857-5.142858-12.571429 0-8 5.142858-13.142857l142.285714-142.285714-142.285714-142.285714q-5.142857-5.142857-5.142858-13.142858 0-7.428571 5.142858-12.571428l77.714285-77.714286q5.142857-5.142857 12.571429-5.142857 8 0 13.142857 5.142857l142.285714 142.285714 142.285715-142.285714q5.142857-5.142857 13.142857-5.142857 7.428571 0 12.571428 5.142857l77.714286 77.714286q5.142857 5.142857 5.142857 12.571428 0 8-5.142857 13.142858z m-284.571429 0l-103.428571 103.428571q-21.142857 21.142857-21.142857 52 0 30.285714 21.142857 51.428572l47.428571 47.428571q-12 1.714286-25.142857 1.714286H152.571429q-69.142857 0-110.857143-39.428572T0 802.857143q0-30.285714 2-59.142857t8-62.285715T25.142857 619.428571t24.571429-55.714285 35.428571-46.285715 48.857143-30.571428T197.714286 475.428571q10.857143 0 22.285714 9.714286 88 69.714286 182.285714 69.714286t182.285715-69.714286q11.428571-9.714286 22.285714-9.714286 16 0 32.571428 3.428572-16 15.428571-23.428571 28.571428t-7.428571 32q0 30.857143 21.142857 52z\"  ></path></symbol><symbol id=\"icon-users\" viewBox=\"0 0 1097 1024\"><path d=\"M338.857143 512q-92.571429 2.857143-151.428572 73.142857H110.857143q-46.857143 0-78.857143-23.142857T0 494.285714q0-201.714286 70.857143-201.714285 3.428571 0 24.857143 12t55.714285 24.285714T219.428571 341.142857q38.285714 0 76-13.142857-2.857143 21.142857-2.857142 37.714286 0 79.428571 46.285714 146.285714z m612 364q0 68.571429-41.714286 108.285714t-110.857143 39.714286H298.857143q-69.142857 0-110.857143-39.714286T146.285714 876q0-30.285714 2-59.142857t8-62.285714T171.428571 692.571429t24.571429-55.714286 35.428571-46.285714 48.857143-30.571429T344 548.571429q5.714286 0 24.571429 12.285714t41.714285 27.428571 61.142857 27.428572 77.142858 12.285714 77.142857-12.285714 61.142857-27.428572 41.714286-27.428571 24.571428-12.285714q34.857143 0 63.714286 11.428571t48.857143 30.571429 35.428571 46.285714 24.571429 55.714286 15.142857 62 8 62.285714 2 59.142857zM365.714286 146.285714q0 60.571429-42.857143 103.428572t-103.428572 42.857143-103.428571-42.857143-42.857143-103.428572 42.857143-103.428571T219.428571 0t103.428572 42.857143 42.857143 103.428571z m402.285714 219.428572q0 90.857143-64.285714 155.142857T548.571429 585.142857 393.428571 520.857143 329.142857 365.714286t64.285714-155.142857T548.571429 146.285714t155.142857 64.285715T768 365.714286z m329.142857 128.571428q0 44.571429-32 67.714286t-78.857143 23.142857h-76.571428q-58.857143-70.285714-151.428572-73.142857 46.285714-66.857143 46.285715-146.285714 0-16.571429-2.857143-37.714286 37.714286 13.142857 76 13.142857 33.714286 0 68-12.285714t55.714285-24.285714 24.857143-12q70.857143 0 70.857143 201.714285z m-73.142857-348q0 60.571429-42.857143 103.428572t-103.428571 42.857143-103.428572-42.857143-42.857143-103.428572 42.857143-103.428571 103.428572-42.857143 103.428571 42.857143 42.857143 103.428571z\"  ></path></symbol><symbol id=\"icon-vcard-o\" viewBox=\"0 0 1170 1024\"><path d=\"M585.142857 646.285714q0 36.571429-21.142857 60.857143t-52 24.285714H219.428571q-30.857143 0-52-24.285714T146.285714 646.285714t5.142857-67.142857 16.857143-58.857143 34.571429-44.571428 55.428571-16.285715q3.428571 2.285714 17.142857 10.285715t21.428572 12.285714T317.142857 492t24.571429 8.285714 24 2.571429 24-2.571429 24.571428-8.285714 20.285715-10T456 469.714286t17.142857-10.285715q32.571429 0 55.428572 16.285715t34.571428 44.571428 16.857143 58.857143 5.142857 67.142857zM495.428571 349.142857q0 53.714286-38 91.714286T365.714286 478.857143t-91.714286-38T236 349.142857t38-91.714286T365.714286 219.428571t91.714285 38T495.428571 349.142857z m528.571429 254.285714v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-329.142857q-8 0-13.142858-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142858-5.142857h329.142857q8 0 13.142857 5.142857t5.142857 13.142857z m0-144v32q0 8.571429-6 14.571429T1003.428571 512h-324.571428q-8.571429 0-14.571429-6T658.285714 491.428571v-32q0-8.571429 6-14.571428T678.857143 438.857143h324.571428q8.571429 0 14.571429 6T1024 459.428571z m0-148.571428v36.571428q0 8-5.142857 13.142858t-13.142857 5.142857h-329.142857q-8 0-13.142858-5.142857t-5.142857-13.142858v-36.571428q0-8 5.142857-13.142857t13.142858-5.142857h329.142857q8 0 13.142857 5.142857t5.142857 13.142857z m73.142857 548.571428V164.571429q0-7.428571-5.428571-12.857143T1078.857143 146.285714H91.428571q-7.428571 0-12.857142 5.428572T73.142857 164.571429v694.857142q0 7.428571 5.428572 12.857143t12.857142 5.428572h201.142858v-54.857143q0-8 5.142857-13.142857t13.142857-5.142857h36.571428q8 0 13.142858 5.142857t5.142857 13.142857v54.857143h438.857143v-54.857143q0-8 5.142857-13.142857t13.142857-5.142857h36.571428q8 0 13.142858 5.142857t5.142857 13.142857v54.857143h201.142857q7.428571 0 12.857143-5.428572t5.428571-12.857143z m73.142857-694.857142v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h987.428572q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-vcard\" viewBox=\"0 0 1170 1024\"><path d=\"M585.142857 646.285714q0-36.571429-5.142857-67.142857t-16.857143-58.857143-34.571428-44.571428-55.428572-16.285715q-3.428571 2.285714-17.142857 10.285715t-21.428571 12.285714T414.285714 492t-24.571428 8.285714-24 2.571429-24-2.571429-24.571429-8.285714-20.285714-10T275.428571 469.714286t-17.142857-10.285715q-32.571429 0-55.428571 16.285715t-34.571429 44.571428-16.857143 58.857143-5.142857 67.142857 21.142857 60.857143 52 24.285714h292.571429q30.857143 0 52-24.285714t21.142857-60.857143zM495.428571 349.142857q0-53.714286-38-91.714286T365.714286 219.428571t-91.714286 38T236 349.142857t38 91.714286T365.714286 478.857143t91.714285-38T495.428571 349.142857z m528.571429 290.857143v-36.571429q0-8-5.142857-13.142857t-13.142857-5.142857h-329.142857q-8 0-13.142858 5.142857t-5.142857 13.142857v36.571429q0 8 5.142857 13.142857t13.142858 5.142857h329.142857q8 0 13.142857-5.142857t5.142857-13.142857z m0-148.571429v-32q0-8.571429-6-14.571428T1003.428571 438.857143h-324.571428q-8.571429 0-14.571429 6T658.285714 459.428571v32q0 8.571429 6 14.571429T678.857143 512h324.571428q8.571429 0 14.571429-6T1024 491.428571z m0-144v-36.571428q0-8-5.142857-13.142857t-13.142857-5.142857h-329.142857q-8 0-13.142858 5.142857t-5.142857 13.142857v36.571428q0 8 5.142857 13.142858t13.142858 5.142857h329.142857q8 0 13.142857-5.142857t5.142857-13.142858z m146.285714-182.857142v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143h-201.142857v-54.857143q0-8-5.142857-13.142857t-13.142858-5.142857h-36.571428q-8 0-13.142857 5.142857t-5.142857 13.142857v54.857143H365.714286v-54.857143q0-8-5.142857-13.142857t-13.142858-5.142857h-36.571428q-8 0-13.142857 5.142857t-5.142857 13.142857v54.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h987.428572q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-venus\" viewBox=\"0 0 1024 1024\"><path d=\"M804.571429 329.142857q0 126.285714-84.285715 219.714286T512 656v148.571429h128q8 0 13.142857 5.142857t5.142857 13.142857v36.571428q0 8-5.142857 13.142858t-13.142857 5.142857H512v128q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857v-128H310.857143q-8 0-13.142857-5.142857t-5.142857-13.142858v-36.571428q0-8 5.142857-13.142857t13.142857-5.142857h128v-148.571429q-85.714286-9.142857-155.142857-58.857143t-106.285715-128T147.428571 302.285714q6.285714-76.571429 46-142.285714t104-107.428571T437.714286 2.285714q97.142857-10.857143 182.285714 30.857143t134.857143 121.142857 49.714286 174.857143z m-585.142858 0q0 105.714286 75.142858 180.857143T475.428571 585.142857t180.857143-75.142857T731.428571 329.142857 656.285714 148.285714 475.428571 73.142857 294.571429 148.285714 219.428571 329.142857z\"  ></path></symbol><symbol id=\"icon-venus-mars\" viewBox=\"0 0 1170 1024\"><path d=\"M950.857143 18.285714q0-8 5.142857-13.142857t13.142857-5.142857h164.571429q14.857143 0 25.714285 10.857143t10.857143 25.714286v164.571428q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571429q-8 0-13.142857-5.142857t-5.142857-13.142857V124.571429l-145.142857 145.714285q43.428571 54.285714 61.428571 122.285715t5.428572 141.142857q-18.285714 102.857143-94 177.142857T745.714286 800.571429q-127.428571 19.428571-233.714286-51.428572-66.857143 44.571429-146.285714 53.142857v75.428572h54.857143q8 0 13.142857 5.142857t5.142857 13.142857v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-54.857143v54.857143q0 8-5.142857 13.142857t-13.142858 5.142857h-36.571428q-8 0-13.142857-5.142857t-5.142857-13.142857v-54.857143h-54.857143q-8 0-13.142857-5.142857t-5.142858-13.142857v-36.571429q0-8 5.142858-13.142857t13.142857-5.142857h54.857143v-75.428572q-88.571429-9.714286-159.714286-62.571428T26 604 3.428571 428.571429q14.285714-106.857143 91.142858-184.285715T277.714286 150.285714q128-19.428571 234.285714 51.428572 83.428571-55.428571 182.857143-55.428572 114.857143 0 205.142857 72l145.714286-145.142857h-76.571429q-8 0-13.142857-5.142857t-5.142857-13.142857V18.285714zM512 654.285714q73.142857-74.857143 73.142857-178.857143T512 296.571429Q438.857143 371.428571 438.857143 475.428571t73.142857 178.857143zM73.142857 475.428571q0 105.714286 75.142857 180.857143T329.142857 731.428571q66.857143 0 124.571429-32.571428-88-95.428571-88-223.428572t88-223.428571q-57.714286-32.571429-124.571429-32.571429-105.714286 0-180.857143 75.142858T73.142857 475.428571z m621.714286 256q105.714286 0 180.857143-75.142857T950.857143 475.428571t-75.142857-180.857142T694.857143 219.428571q-66.857143 0-124.571429 32.571429 88 95.428571 88 223.428571t-88 223.428572q57.714286 32.571429 124.571429 32.571428z\"  ></path></symbol><symbol id=\"icon-venus-double\" viewBox=\"0 0 1024 1024\"><path d=\"M1022.857143 302.285714q6.857143 88.571429-30 166.857143t-106.285714 128-155.142858 58.857143v148.571429h128q8 0 13.142858 5.142857t5.142857 13.142857v36.571428q0 8-5.142857 13.142858t-13.142858 5.142857h-128v128q0 8-5.142857 13.142857t-13.142857 5.142857h-36.571428q-8 0-13.142858-5.142857t-5.142857-13.142857v-128H365.714286v128q0 8-5.142857 13.142857t-13.142858 5.142857h-36.571428q-8 0-13.142857-5.142857t-5.142857-13.142857v-128H164.571429q-8 0-13.142858-5.142857t-5.142857-13.142858v-36.571428q0-8 5.142857-13.142857t13.142858-5.142857h128v-148.571429q-85.714286-9.142857-155.142858-58.857143t-106.285714-128T1.142857 302.285714q9.714286-117.714286 94-203.714285T296.571429 1.714286q117.714286-12 215.428571 53.714285 97.714286-65.714286 215.428571-53.714285 117.142857 10.857143 201.428572 96.857143T1022.857143 302.285714zM512 508q73.142857-74.857143 73.142857-178.857143T512 150.285714Q438.857143 225.142857 438.857143 329.142857t73.142857 178.857143z m-182.857143 77.142857q65.714286 0 124.571429-32.571428-88-94.285714-88-223.428572 0-128 88-223.428571-58.857143-32.571429-124.571429-32.571429-105.714286 0-180.857143 75.142857T73.142857 329.142857t75.142857 180.857143T329.142857 585.142857z m329.142857 219.428572v-148.571429q-78.285714-8.571429-146.285714-53.714286-68 45.142857-146.285714 53.714286v148.571429h292.571428z m36.571429-219.428572q105.714286 0 180.857143-75.142857T950.857143 329.142857t-75.142857-180.857143T694.857143 73.142857q-65.714286 0-124.571429 32.571429 88 95.428571 88 223.428571 0 129.142857-88 223.428572 58.857143 32.571429 124.571429 32.571428z\"  ></path></symbol><symbol id=\"icon-viadeo-square\" viewBox=\"0 0 1024 1024\"><path d=\"M673.142857 594.857143q0-44.571429-16-84-23.428571 14.285714-48.571428 19.428571 12.571429 28.571429 12.571428 65.142857 0 66.857143-44 113.428572T466.857143 755.428571t-110.571429-46.571428T312 595.428571q0-65.714286 44.571429-114T466.857143 433.142857q30.285714 0 56 10.857143 2.285714-24.571429 15.428571-49.714286-34.285714-12-71.428571-12-88 0-147.142857 62T260.571429 594.857143t59.142857 149.142857T466.857143 804.571429t147.142857-60.857143T673.142857 594.857143zM571.428571 392q1.142857 13.714286 1.142858 40.571429 0 36-2.857143 70.285714t-11.714286 75.714286-23.142857 74.285714-39.142857 60.571428T438.285714 753.714286q12 1.714286 24 1.714285h5.714286q125.142857-79.428571 125.142857-234.857142 0-66.285714-21.714286-128.571429z m0 0q-2.285714-45.714286-25.142857-98T490.285714 219.428571q52.571429 89.142857 81.142857 172.571429z m191.428572-60q0-58.285714-29.142857-99.428571-23.428571 49.142857-70.857143 62.285714-39.428571 10.857143-62.285714 30.571428T577.714286 382.285714q0 22.857143 13.714285 44 42.285714-9.714286 80.285715-38.285714t54.571428-65.714286q-2.285714 29.714286-42.571428 63.714286T604.571429 441.714286q29.714286 29.714286 62.857142 29.714285 29.142857 0 51.428572-21.142857t34.285714-51.428571q9.714286-24 9.714286-66.857143z m188-94.285714v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-viacoin\" viewBox=\"0 0 1024 1024\"><path d=\"M950.857143 0l-109.714286 256h109.714286v109.714286h-156.571429l-31.428571 73.142857h188v109.714286h-234.857143l-204 475.428571-204-475.428571H73.142857V438.857143h188l-31.428571-73.142857H73.142857V256h109.714286L73.142857 0h146.285714l184.571429 438.857143h216L804.571429 0h146.285714zM512 694.857143l61.714286-146.285714H450.285714z\"  ></path></symbol><symbol id=\"icon-viadeo\" viewBox=\"0 0 1024 1024\"><path d=\"M746.285714 632q0 122.857143-84 213.714286-84.571429 92-216 92-132.571429 0-216-92Q146.285714 754.857143 146.285714 632q0-84 38.857143-154.571429T293.142857 365.142857t153.142857-41.714286q54.857143 0 104 17.714286-18.285714 35.428571-22.285714 72-37.714286-16-81.714286-16-95.428571 0-160.285714 70.285714T221.142857 633.714286q0 97.142857 64.285714 164.857143T446.285714 866.285714t160.571429-67.714285T670.857143 633.714286q0-50.857143-18.285714-94.857143 37.714286-7.428571 70.285714-28 23.428571 56 23.428571 121.142857zM629.714286 524q0 109.714286-45.428572 197.142857T448 865.714286l-8 0.571428q-16.571429 0-35.428571-2.857143 47.428571-18.285714 83.714285-58.571428T545.142857 716.571429t33.428572-108 17.142857-110T600 396.571429q0-39.428571-1.714286-58.857143 31.428571 91.428571 31.428572 186.285714z m-31.428572-187.428571v1.142857q-41.714286-122.285714-117.714285-251.428572 50.285714 33.714286 81.428571 106.571429T598.285714 336.571429z m139.428572 116q-47.428571 0-91.428572-42.857143 124.571429-68.571429 165.714286-141.142857 10.857143-21.142857 12-32-24 53.714286-79.714286 95.142857T627.428571 387.428571q-20-30.857143-20-64.571428 0-21.142857 9.714286-45.142857t24.571429-38.857143q26.285714-25.142857 89.714285-42.285714 33.714286-9.142857 60.571429-33.428572t42.285714-57.428571q42.285714 60 42.285715 144.571428 0 62.285714-13.714286 97.142857-18.285714 44-50.571429 74.571429T737.714286 452.571429z\"  ></path></symbol><symbol id=\"icon-video-camera\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 201.142857v621.714286q0 24-22.285714 33.714286-7.428571 2.857143-14.285715 2.857142-15.428571 0-25.714285-10.857142l-230.285715-230.285715v94.857143q0 68-48.285714 116.285714T566.857143 877.714286H164.571429q-68 0-116.285715-48.285715T0 713.142857V310.857143q0-68 48.285714-116.285714T164.571429 146.285714h402.285714q68 0 116.285714 48.285715T731.428571 310.857143v94.285714l230.285715-229.714286q10.285714-10.857143 25.714285-10.857142 6.857143 0 14.285715 2.857142 22.285714 9.714286 22.285714 33.714286z\"  ></path></symbol><symbol id=\"icon-vimeo-square\" viewBox=\"0 0 1024 1024\"><path d=\"M811.428571 364.571429q5.714286-123.428571-92-126.857143-132-4.571429-178.285714 149.142857 25.142857-10.857143 46.857143-10.857143 48.571429 0 42.285714 54.857143-2.285714 32.571429-42.285714 95.428571t-60 62.857143q-24.571429 0-46.857143-96.571428-7.428571-30.857143-25.714286-145.714286-17.142857-108-91.428571-101.142857-33.714286 4-93.714286 57.142857l-46.285714 41.142857-46.285714 41.142857 29.714285 38.285714q43.428571-29.714286 49.714286-29.714285 32.571429 0 61.142857 102.285714 8.571429 31.428571 25.714286 94t25.714286 94q38.857143 102.285714 93.714285 102.285714 89.714286 0 218.857143-168 125.714286-161.714286 129.142857-253.714285z m139.428572-126.857143v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-vine\" viewBox=\"0 0 1024 1024\"><path d=\"M928.571429 472.571429v113.142857q-57.714286 13.142857-113.142858 13.142857-37.142857 77.714286-94.571428 154.857143T617.142857 876.857143 544 937.714286q-45.714286 25.714286-92.571429-1.714286-16-9.714286-34.571428-24.857143t-48.571429-47.714286T309.714286 790t-61.428572-105.142857-60.285714-139.428572T135.714286 365.714286 95.428571 142.857143h161.714286q14.857143 124.571429 40 227.714286t59.714286 181.142857T426.285714 686.285714t80 111.428572q96.571429-96.571429 164-232-81.142857-41.142857-127.428571-125.714286t-46.285714-190.285714q0-109.714286 59.428571-179.714286T718.285714 0q101.714286 0 156 60.285714t54.285715 170q0 90.857143-33.142858 163.428572-4 0.571429-11.142857 1.714285t-26.285714 1.142858-36-3.428572-35.428571-14.571428T757.714286 349.142857q17.714286-58.857143 17.714285-105.142857 0-49.714286-16.571428-75.428571t-45.142857-25.714286q-30.285714 0-48.571429 28.285714T646.857143 251.428571q0 106.285714 60 167.714286T859.428571 480.571429q35.428571 0 69.142858-8z\"  ></path></symbol><symbol id=\"icon-vimeo\" viewBox=\"0 0 1024 1024\"><path d=\"M976.571429 296q-5.714286 134.857143-189.714286 372-190.285714 246.285714-321.142857 246.285714-81.142857 0-137.142857-150.285714-25.142857-91.428571-75.428572-275.428571-41.142857-149.714286-89.714286-149.714286-10.285714 0-72.571428 43.428571l-44-56q13.714286-12 61.714286-55.142857T182.857143 205.142857q89.142857-78.857143 137.714286-83.428571 54.285714-5.142857 87.428571 31.714285T454.285714 269.714286q25.142857 164 37.714286 213.142857 31.428571 142.285714 68.571429 142.285714 29.142857 0 88-92 57.714286-92 62.285714-140.571428 7.428571-79.428571-62.285714-79.428572-32.571429 0-69.142858 14.857143 68.571429-224.571429 262.285715-218.285714 143.428571 4.571429 134.857143 186.285714z\"  ></path></symbol><symbol id=\"icon-vk\" viewBox=\"0 0 1097 1024\"><path d=\"M1096 297.142857q13.142857 36.571429-85.714286 168-13.714286 18.285714-37.142857 48.571429-22.857143 29.142857-31.428571 41.142857t-17.428572 28.285714-6.857143 24 7.428572 19.714286 18.571428 24.571428 32.571429 30.285715q2.285714 1.142857 2.857143 2.285714 80.571429 74.857143 109.142857 126.285714 1.714286 2.857143 3.714286 7.142857t4 15.142858-0.285715 19.428571-14.285714 15.714286-33.714286 7.142857l-146.285714 2.285714q-13.714286 2.857143-32-2.857143t-29.714286-12.571428l-11.428571-6.857143q-17.142857-12-40-36.571429t-39.142857-44.285714-34.857143-33.142857-32.285714-8.857143q-1.714286 0.571429-4.571429 2t-9.714286 8.285714-12.285714 16.857143-9.714286 29.714286-3.714285 44.285714q0 8.571429-2 15.714286t-4.285715 10.571428l-2.285714 2.857143q-10.285714 10.857143-30.285714 12.571429H537.142857q-40.571429 2.285714-83.428571-9.428572t-75.142857-30.285714-58.857143-37.714286T279.428571 764.571429l-14.285714-13.714286q-5.714286-5.714286-15.714286-17.142857t-40.857142-52-60.571429-86.285715-70-120.571428T3.428571 319.428571q-3.428571-9.142857-3.428571-15.428571t1.714286-9.142857l2.285714-3.428572q8.571429-10.857143 32.571429-10.857142l156.571428-1.142858q6.857143 1.142857 13.142857 3.714286t9.142857 4.857143l2.857143 1.714286q9.142857 6.285714 13.714286 18.285714 11.428571 28.571429 26.285714 59.142857t23.428572 46.571429l9.142857 16.571428q16.571429 34.285714 32 59.428572t27.714286 39.142857T374.285714 550.857143t19.428572 8 15.428571-2.857143q1.142857-0.571429 2.857143-2.857143t6.857143-12.571428 7.714286-26.857143 5.428571-46.285715 0-71.428571q-1.142857-22.857143-5.142857-41.714286t-8-26.285714l-3.428572-6.857143q-14.285714-19.428571-48.571428-24.571428-7.428571-1.142857 2.857143-13.714286 9.142857-10.857143 21.714285-17.142857 30.285714-14.857143 136.571429-13.714286 46.857143 0.571429 77.142857 7.428571 11.428571 2.857143 19.142857 7.714286t11.714286 13.714286 6 18.285714 2 26-0.571429 31.428572-1.428571 40.285714-0.857143 47.142857q0 6.285714-0.571428 24t-0.285715 27.428571 2 23.142858 6.571429 22.285714T661.714286 554.857143q4.571429 1.142857 9.714285 2.285714t14.857143-6.285714 21.714286-19.714286 29.714286-38.285714 38.857143-61.428572q34.285714-59.428571 61.142857-128.571428 2.285714-5.714286 5.714285-10t6.285715-6l2.285714-1.714286 2.857143-1.428571 7.428571-1.714286 11.428572-0.285714 164.571428-1.142857q22.285714-2.857143 36.571429 1.428571t17.714286 9.428571z\"  ></path></symbol><symbol id=\"icon-volume-control-phone\" viewBox=\"0 0 1024 1024\"><path d=\"M462.285714 965.142857q0-6.285714-7.428571-33.142857t-17.714286-61.142857-11.428571-39.428572q-0.571429-2.285714-2.857143-15.142857t-4.857143-20.571428T410.285714 783.428571q-8.571429-8-29.142857-8-13.142857 0-40 3.142858t-40.571428 3.142857q-19.428571 0-26.857143-6.285715-3.428571-2.857143-6.285715-8.857142t-4.285714-11.428572-3.714286-13.714286-2.857142-10.571428q-21.142857-73.142857-21.142858-145.714286t21.142858-145.714286q0.571429-2.285714 2.857142-10.571428t3.714286-13.714286 4.285714-11.428571 6.285715-8.857143q7.428571-6.285714 26.857143-6.285714 13.714286 0 40.571428 3.142857t40 3.142857q20.571429 0 29.142857-8 5.142857-4.571429 7.714286-12.285714t4.857143-20.571429 2.857143-15.142857q1.142857-5.142857 11.428571-39.428572t17.714286-61.142857 7.428571-33.142857q0-12.571429-24.857143-30T394.285714 150.857143q-11.428571-4.571429-25.714285-4.571429-19.428571 0-56 10.285715-32.571429 9.714286-55.142858 23.142857t-40.571428 37.714285-26.285714 40T164.571429 311.428571q-3.428571 6.857143-5.142858 10.857143-28 61.142857-38.857142 123.428572T109.714286 585.142857t10.857143 139.428572 38.857142 123.428571q32 69.714286 47.428572 92 36 52 102.285714 72.571429l3.428572 1.142857q36.571429 10.285714 56 10.285714 14.285714 0 25.714285-4.571429 18.285714-6.857143 43.142857-24.285714T462.285714 965.142857z m90.857143-521.714286q-14.857143 0-25.714286-10.857142t-10.857142-26 10.857142-26q21.142857-21.142857 21.142858-51.428572 0-29.714286-21.142858-52-10.857143-10.857143-10.857142-25.714286t10.857142-25.714285 25.714286-10.857143 25.714286 10.857143q42.857143 42.857143 42.857143 103.428571t-42.857143 103.428572q-12 10.857143-25.714286 10.857142z m103.428572 103.428572q-15.428571 0-25.714286-10.857143-10.857143-10.857143-10.857143-25.714286t10.857143-25.714285q64-65.142857 64-155.428572T630.857143 173.714286q-10.857143-10.857143-10.857143-25.714286t10.857143-25.714286 25.714286-10.857143 25.714285 10.857143q85.714286 85.714286 85.714286 206.857143t-85.714286 206.857143q-10.285714 10.857143-25.714285 10.857143z m103.428571 103.428571q-15.428571 0-25.714286-10.857143-10.857143-10.857143-10.857143-25.714285t10.857143-25.714286q51.428571-52 79.142857-118.857143t27.714286-140-27.714286-140T734.285714 70.285714q-10.857143-10.857143-10.857143-25.714285t10.857143-25.714286 25.714286-10.857143 25.714286 10.857143q62.285714 62.285714 95.428571 142.285714t33.142857 168-33.142857 168-95.428571 142.285714q-10.285714 10.857143-25.714286 10.857143z\"  ></path></symbol><symbol id=\"icon-volume-off\" viewBox=\"0 0 1024 1024\"><path d=\"M645.480746 201.142857v621.714286q0 14.857143-10.857143 25.714286t-25.714286 10.857142-25.714286-10.857142l-190.285714-190.285715H243.195031q-14.857143 0-25.714285-10.857143t-10.857143-25.714285V402.285714q0-14.857143 10.857143-25.714285t25.714285-10.857143h149.714286l190.285714-190.285715q10.857143-10.857143 25.714286-10.857142t25.714286 10.857142 10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-volume-down\" viewBox=\"0 0 1024 1024\"><path d=\"M621.714286 201.142857v621.714286q0 14.857143-10.857143 25.714286t-25.714286 10.857142-25.714286-10.857142l-190.285714-190.285715H219.428571q-14.857143 0-25.714285-10.857143t-10.857143-25.714285V402.285714q0-14.857143 10.857143-25.714285t25.714285-10.857143h149.714286l190.285714-190.285715q10.857143-10.857143 25.714286-10.857142t25.714286 10.857142 10.857143 25.714286z m219.428571 310.857143q0 43.428571-24.285714 80.857143T752.571429 646.285714q-5.714286 2.857143-14.285715 2.857143-14.857143 0-25.714285-10.571428t-10.857143-26q0-12 6.857143-20.285715t16.571428-14.285714 19.428572-13.142857 16.571428-20.571429 6.857143-32.285714-6.857143-32.285714-16.571428-20.571429-19.428572-13.142857-16.571428-14.285714-6.857143-20.285715q0-15.428571 10.857143-26t25.714285-10.571428q8.571429 0 14.285715 2.857143 40 15.428571 64.285714 53.142857t24.285714 81.142857z\"  ></path></symbol><symbol id=\"icon-warning\" viewBox=\"0 0 1024 1024\"><path d=\"M585.142857 785.714286v-108.571429q0-8-5.428571-13.428571T566.857143 658.285714H457.142857q-7.428571 0-12.857143 5.428572T438.857143 677.142857v108.571429q0 8 5.428571 13.428571t12.857143 5.428572h109.714286q7.428571 0 12.857143-5.428572t5.428571-13.428571z m-1.142857-213.714286l10.285714-262.285714q0-6.857143-5.714285-10.857143-7.428571-6.285714-13.714286-6.285714H449.142857q-6.285714 0-13.714286 6.285714-5.714286 4-5.714285 12l9.714285 261.142857q0 5.714286 5.714286 9.428571t13.714286 3.714286h105.714286q8 0 13.428571-3.714286t6-9.428571z m-8-533.714286l438.857143 804.571429q20 36-1.142857 72-9.714286 16.571429-26.571429 26.285714t-36.285714 9.714286H73.142857q-19.428571 0-36.285714-9.714286T10.285714 914.857143q-21.142857-36-1.142857-72L448 38.285714q9.714286-17.714286 26.857143-28t37.142857-10.285714 37.142857 10.285714 26.857143 28z\"  ></path></symbol><symbol id=\"icon-volume-up\" viewBox=\"0 0 1024 1024\"><path d=\"M475.428571 201.142857v621.714286q0 14.857143-10.857142 25.714286t-25.714286 10.857142-25.714286-10.857142l-190.285714-190.285715H73.142857q-14.857143 0-25.714286-10.857143t-10.857142-25.714285V402.285714q0-14.857143 10.857142-25.714285t25.714286-10.857143h149.714286l190.285714-190.285715q10.857143-10.857143 25.714286-10.857142t25.714286 10.857142 10.857142 25.714286z m219.428572 310.857143q0 43.428571-24.285714 80.857143T606.285714 646.285714q-5.714286 2.857143-14.285714 2.857143-14.857143 0-25.714286-10.571428t-10.857143-26q0-12 6.857143-20.285715t16.571429-14.285714 19.428571-13.142857 16.571429-20.571429 6.857143-32.285714-6.857143-32.285714-16.571429-20.571429-19.428571-13.142857-16.571429-14.285714-6.857143-20.285715q0-15.428571 10.857143-26t25.714286-10.571428q8.571429 0 14.285714 2.857143 40 15.428571 64.285715 53.142857t24.285714 81.142857z m146.285714 0q0 87.428571-48.571428 161.428571T664 781.142857q-7.428571 2.857143-14.285714 2.857143-15.428571 0-26.285715-10.857143t-10.857142-25.714286q0-22.285714 22.285714-33.714285 32-16.571429 43.428571-25.142857 42.285714-30.857143 66-77.428572T768 512t-23.714286-99.142857T678.285714 335.428571q-11.428571-8.571429-43.428571-25.142857-22.285714-11.428571-22.285714-33.714285 0-14.857143 10.857142-25.714286t25.714286-10.857143q7.428571 0 14.857143 2.857143 80 33.714286 128.571429 107.714286t48.571428 161.428571z m146.285714 0q0 131.428571-72.571428 241.428571T721.714286 915.428571q-7.428571 2.857143-14.857143 2.857143-14.857143 0-25.714286-10.857143t-10.857143-25.714285q0-20.571429 22.285715-33.714286 4-2.285714 12.857142-6t12.857143-6q26.285714-14.285714 46.857143-29.142857 70.285714-52 109.714286-129.714286t39.428571-165.142857-39.428571-165.142857-109.714286-129.714286q-20.571429-14.857143-46.857143-29.142857-4-2.285714-12.857143-6T692.571429 176q-22.285714-13.142857-22.285715-33.714286 0-14.857143 10.857143-25.714285t25.714286-10.857143q7.428571 0 14.857143 2.857143 120.571429 52 193.142857 162T987.428571 512z\"  ></path></symbol><symbol id=\"icon-wechat\" viewBox=\"0 0 1170 1024\"><path d=\"M331.428571 263.428571q0-23.428571-14.285714-37.714285t-37.714286-14.285715q-24.571429 0-43.428571 14.571429T217.142857 263.428571q0 22.285714 18.857143 36.857143t43.428571 14.571429q23.428571 0 37.714286-14t14.285714-37.428572z m424.571429 289.714286q0-16-14.571429-28.571428t-37.428571-12.571429q-15.428571 0-28.285714 12.857143T662.857143 553.142857q0 16 12.857143 28.857143t28.285714 12.857143q22.857143 0 37.428571-12.571429t14.571429-29.142857z m-134.857143-289.714286q0-23.428571-14-37.714285T569.714286 211.428571q-24.571429 0-43.428572 14.571429T507.428571 263.428571q0 22.285714 18.857143 36.857143t43.428572 14.571429q23.428571 0 37.428571-14T621.142857 263.428571z m362.857143 289.714286q0-16-14.857143-28.571428t-37.142857-12.571429q-15.428571 0-28.285714 12.857143T890.857143 553.142857q0 16 12.857143 28.857143t28.285714 12.857143q22.285714 0 37.142857-12.571429t14.857143-29.142857z m-152-226.857143q-17.714286-2.285714-40-2.285714-96.571429 0-177.714286 44T486.571429 487.142857 440 651.428571q0 44.571429 13.142857 86.857143-20 1.714286-38.857143 1.714286-14.857143 0-28.571428-0.857143t-31.428572-3.714286-25.428571-4-31.142857-6-28.571429-6l-144.571428 72.571429 41.142857-124.571429Q0 551.428571 0 387.428571q0-96.571429 55.714286-177.714285t150.857143-127.714286T414.285714 35.428571q100.571429 0 190 37.714286t149.714286 104.285714T832 326.285714z m338.285714 320.571429q0 66.857143-39.142857 127.714286T1025.142857 885.142857l31.428572 103.428572-113.714286-62.285715q-85.714286 21.142857-124.571429 21.142857-96.571429 0-177.714285-40.285714T512.857143 797.714286 466.285714 646.857143t46.571429-150.857143T640.571429 386.571429t177.714285-40.285715q92 0 173.142857 40.285715t130 109.714285T1170.285714 646.857143z\"  ></path></symbol><symbol id=\"icon-weibo\" viewBox=\"0 0 1024 1024\"><path d=\"M385.714286 733.714286q12-19.428571 6.285714-39.428572t-25.714286-28.571428q-19.428571-8-41.714285-0.571429t-34.285715 26.285714q-12.571429 19.428571-7.428571 39.142858t24.571428 28.857142 42.571429 1.428572T385.714286 733.714286z m53.714285-69.142857q4.571429-7.428571 2-15.142858T431.428571 638.857143q-8-2.857143-16.285714 0.285714T402.857143 649.714286q-9.714286 17.714286 7.428571 25.714285 8 2.857143 16.571429-0.285714t12.571428-10.571428z m99.428572 61.142857q-25.714286 58.285714-90.285714 85.714285t-128 6.857143q-61.142857-19.428571-84.285715-72.285714T240 638.857143q26.857143-53.142857 86.571429-79.428572T446.857143 548.571429q63.428571 16.571429 90.571428 68.285714T538.857143 725.714286z m178.285714-91.428572q-5.142857-54.857143-50.857143-97.142857T547.142857 474.857143 390.285714 462.857143q-127.428571 13.142857-211.142857 80.857143T103.428571 694.857143q5.142857 54.857143 50.857143 97.142857t119.142857 62.285714 156.857143 12q127.428571-13.142857 211.142857-80.857143T717.142857 634.285714z m176 2.285715q0 38.857143-21.142857 79.714285t-62.285714 78.285715-96.285715 67.142857-129.142857 47.428571-154.571428 17.714286-157.142857-19.142857-137.428572-53.142857-98-86.285715T0 654.285714q0-65.714286 39.714286-140T152.571429 366.857143q96.571429-96.571429 195.142857-134.857143t140.857143 4q37.142857 36.571429 11.428571 119.428571-2.285714 8-0.571429 11.428572t5.714286 4 8.285714-0.285714T521.142857 368.571429l3.428572-1.142858q79.428571-33.714286 140.571428-33.714285t87.428572 34.857143q25.714286 36 0 101.714285-1.142857 7.428571-2.571429 11.428572t2.571429 7.142857 6.857142 4.285714 9.714286 3.428572q32.571429 10.285714 58.857143 26.857142t45.714286 46.571429 19.428571 66.571429z m-42.285714-356.571429q24 26.857143 31.142857 62T878.285714 409.142857q-4.571429 13.142857-16.857143 19.428572t-25.428571 2.285714q-13.142857-4.571429-19.428571-16.857143t-2.285715-25.428571q11.428571-36-13.714285-63.428572t-61.142858-20q-13.714286 2.857143-25.714285-4.571428t-14.285715-21.142858q-2.857143-13.714286 4.571429-25.428571t21.142857-14.571429q34.285714-7.428571 68 3.142858t57.714286 37.428571z m103.428571-93.142857q49.714286 54.857143 64.285715 127.142857T1010.857143 452q-5.142857 15.428571-19.428572 22.857143t-29.714285 2.285714-22.857143-19.428571-2.857143-29.714286q16-46.857143 5.714286-98.285714t-45.714286-90.285715q-35.428571-39.428571-84.571429-54.571428t-98.857142-4.857143q-16 3.428571-29.714286-5.428571t-17.142857-24.857143 5.428571-29.428572T696 103.428571q70.285714-14.857143 139.428571 6.571429T954.285714 186.857143z\"  ></path></symbol><symbol id=\"icon-whatsapp\" viewBox=\"0 0 1024 1024\"><path d=\"M636 556.571429q7.428571 0 55.714286 25.142857t51.142857 30.285714q1.142857 2.857143 1.142857 8.571429 0 18.857143-9.714286 43.428571-9.142857 22.285714-40.571428 37.428571T635.428571 716.571429q-32.571429 0-108.571428-35.428572-56-25.714286-97.142857-67.428571T345.142857 508q-41.142857-61.142857-40.571428-110.857143v-4.571428q1.714286-52 42.285714-90.285715 13.714286-12.571429 29.714286-12.571428 3.428571 0 10.285714 0.857143t10.857143 0.857142q10.857143 0 15.142857 3.714286T421.714286 310.857143q4.571429 11.428571 18.857143 50.285714t14.285714 42.857143q0 12-19.714286 32.857143T415.428571 463.428571q0 4 2.857143 8.571429 19.428571 41.714286 58.285715 78.285714 32 30.285714 86.285714 57.714286 6.857143 4 12.571428 4 8.571429 0 30.857143-27.714286t29.714286-27.714285z m-116 302.857142q72.571429 0 139.142857-28.571428t114.571429-76.571429 76.571428-114.571428 28.571429-139.142857-28.571429-139.142858T773.714286 246.857143t-114.571429-76.571429T520 141.714286t-139.142857 28.571428T266.285714 246.857143 189.714286 361.428571 161.142857 500.571429q0 116 68.571429 210.285714l-45.142857 133.142857 138.285714-44q90.285714 59.428571 197.142857 59.428571z m0-789.714285q87.428571 0 167.142857 34.285714T824.571429 196t92 137.428571 34.285714 167.142858-34.285714 167.142857-92 137.428571-137.428572 92-167.142857 34.285714q-111.428571 0-208.571429-53.714285L73.142857 954.285714l77.714286-231.428571Q89.142857 621.142857 89.142857 500.571429q0-87.428571 34.285714-167.142858T215.428571 196t137.428572-92T520 69.714286z\"  ></path></symbol><symbol id=\"icon-weixin\" viewBox=\"0 0 1170 1024\"><path d=\"M331.428571 263.428571q0-23.428571-14.285714-37.714285t-37.714286-14.285715q-24.571429 0-43.428571 14.571429T217.142857 263.428571q0 22.285714 18.857143 36.857143t43.428571 14.571429q23.428571 0 37.714286-14t14.285714-37.428572z m424.571429 289.714286q0-16-14.571429-28.571428t-37.428571-12.571429q-15.428571 0-28.285714 12.857143T662.857143 553.142857q0 16 12.857143 28.857143t28.285714 12.857143q22.857143 0 37.428571-12.571429t14.571429-29.142857z m-134.857143-289.714286q0-23.428571-14-37.714285T569.714286 211.428571q-24.571429 0-43.428572 14.571429T507.428571 263.428571q0 22.285714 18.857143 36.857143t43.428572 14.571429q23.428571 0 37.428571-14T621.142857 263.428571z m362.857143 289.714286q0-16-14.857143-28.571428t-37.142857-12.571429q-15.428571 0-28.285714 12.857143T890.857143 553.142857q0 16 12.857143 28.857143t28.285714 12.857143q22.285714 0 37.142857-12.571429t14.857143-29.142857z m-152-226.857143q-17.714286-2.285714-40-2.285714-96.571429 0-177.714286 44T486.571429 487.142857 440 651.428571q0 44.571429 13.142857 86.857143-20 1.714286-38.857143 1.714286-14.857143 0-28.571428-0.857143t-31.428572-3.714286-25.428571-4-31.142857-6-28.571429-6l-144.571428 72.571429 41.142857-124.571429Q0 551.428571 0 387.428571q0-96.571429 55.714286-177.714285t150.857143-127.714286T414.285714 35.428571q100.571429 0 190 37.714286t149.714286 104.285714T832 326.285714z m338.285714 320.571429q0 66.857143-39.142857 127.714286T1025.142857 885.142857l31.428572 103.428572-113.714286-62.285715q-85.714286 21.142857-124.571429 21.142857-96.571429 0-177.714285-40.285714T512.857143 797.714286 466.285714 646.857143t46.571429-150.857143T640.571429 386.571429t177.714285-40.285715q92 0 173.142857 40.285715t130 109.714285T1170.285714 646.857143z\"  ></path></symbol><symbol id=\"icon-wheelchair-alt\" viewBox=\"0 0 1024 1024\"><path d=\"M894.857143 464.571429q19.428571 20 16.571428 46.857142l-25.142857 314.857143q-2.285714 24-19.714285 40t-40.857143 16q-3.428571 0-5.142857-0.571428-25.142857-1.714286-41.428572-20.857143T764.571429 816.571429l20-245.142858-81.714286 4.571429q31.428571 64.571429 31.428571 137.142857 0 123.428571-84.571428 212.571429l-78.285715-78.285715q52-57.714286 52-134.285714 0-82.857143-58.571428-141.714286T423.428571 512.571429q-76.571429 0-134.857142 52.571428L210.285714 486.285714q68.571429-65.142857 162.285715-80.571428l150.857142-171.428572-85.142857-49.714285-103.428571 92q-18.857143 17.142857-44 15.714285T249.142857 272t-15.142857-44 19.714286-41.714286l136.571428-121.714285q14.857143-13.142857 34.285715-15.142858t36.571428 8.285715l278.857143 161.714285q20.571429 12 27.428571 38.857143 9.714286 38.285714-14.857142 66.857143L635.428571 457.714286l212-11.428572q28-1.714286 47.428572 18.285715z m-113.142857-261.142858q-42.285714 0-72-29.714285t-29.714286-72 29.714286-72 72-29.714286 72.285714 29.714286 30 72-30 72-72.285714 29.714285zM423.428571 913.142857q60.571429 0 112-34.857143l79.428572 79.428572q-83.428571 66.285714-191.428572 66.285714-84.571429 0-156.285714-41.714286T153.714286 869.142857t-41.714286-156q0-107.428571 66.285714-192l79.428572 79.428572q-34.285714 50.285714-34.285715 112.571428 0 82.857143 58.571429 141.428572T423.428571 913.142857z\"  ></path></symbol><symbol id=\"icon-wheelchair\" viewBox=\"0 0 1024 1024\"><path d=\"M621.142857 678.285714l58.285714 116.571429q-33.142857 102.285714-120 165.714286t-193.714285 63.428571q-89.142857 0-164.857143-44.285714t-120-120T36.571429 694.857143q0-103.428571 59.714285-188.571429T253.142857 385.714286l9.714286 74.857143q-69.714286 30.857143-111.428572 94.571428T109.714286 694.857143q0 105.714286 75.142857 180.857143T365.714286 950.857143q72 0 132.857143-37.142857t94.285714-100.285715T621.142857 678.285714z m313.142857 57.142857l33.142857 65.142858-146.285714 73.142857q-7.428571 4-16.571428 4-22.857143 0-32.571429-20l-136.571429-272.571429H365.714286q-13.714286 0-24.285715-9.428571T329.142857 552.571429l-54.857143-445.142858q-1.142857-9.714286 3.428572-24 8-29.142857 32.571428-47.142857T365.714286 18.285714q37.714286 0 64.571428 26.857143t26.857143 64.571429q0 39.428571-29.714286 67.142857T358.857143 200.571429l21.142857 165.142857h241.714286v73.142857H389.142857l9.142857 73.142857h260q22.857143 0 32.571429 20l130.285714 260z\"  ></path></symbol><symbol id=\"icon-wikipedia-w\" viewBox=\"0 0 1316 1024\"><path d=\"M853.714286 936.571429l-168.571429-397.142858q-14.285714 28-90.571428 174.571429T481.142857 936.571429q-0.571429 0.571429-15.714286 0.285714T450.285714 936q-46.857143-110.285714-146-335.428571T156 260q-12-28.571429-38-61.428571T58.857143 141.142857 0.571429 116.571429q0-2.857143-0.285715-13.714286T0 87.428571h333.142857v28.571429q-22.285714 1.142857-45.428571 9.142857T249.714286 149.714286t-5.714286 36.571428q14.857143 33.714286 123.714286 285.142857T502.285714 780q17.714286-34.857143 80-152.285714T657.142857 486.285714q-10.857143-22.285714-72-160.571428T507.428571 157.142857q-21.714286-39.428571-114.857142-40.571428v-28.571429l293.142857 0.571429v26.857142q-34.285714 1.142857-53.428572 14.285715t-7.142857 39.428571q18.857143 40 49.714286 108.285714t49.142857 107.142858q62.857143-122.285714 98.857143-207.428572 13.714286-31.428571-5.714286-45.428571T743.428571 116.571429q0.571429-4 0.571429-14.285715v-13.714285q36.571429 0 97.428571-0.285715t102.857143-0.571428 52.857143-0.285715v28q-35.428571 1.142857-68 18.857143t-51.428571 46.285715l-121.714286 252.571428q7.428571 18.857143 72.857143 165.714286t69.428571 156.571428l252-581.142857q-8-21.714286-28.285714-35.714285t-37.142857-18-31.714286-4.571429v-28.571429l262.857143 2.285715 0.571429 1.142857-0.571429 25.142857q-79.428571 2.285714-114.857143 82.857143-300.571429 694.857143-319.428571 737.714286h-28z\"  ></path></symbol><symbol id=\"icon-wifi\" viewBox=\"0 0 1170 1024\"><path d=\"M585.142857 870.285714q-11.428571 0-53.142857-42t-41.714286-53.428571q0-18.285714 35.714286-30.857143t59.142857-12.571429 59.142857 12.571429 35.714286 30.857143q0 11.428571-41.714286 53.428571t-53.142857 42z m154.285714-154.857143q-1.142857 0-22.857142-14.285714t-58-28.571428-73.428572-14.285715-73.428571 14.285715-57.714286 28.571428-23.142857 14.285714q-10.285714 0-53.428572-42.857142t-43.142857-53.142858q0-7.428571 5.714286-13.142857 44.571429-44 112-69.142857t133.142857-25.142857 133.142857 25.142857 112 69.142857q5.714286 5.714286 5.714286 13.142857 0 10.285714-43.142857 53.142858t-53.428572 42.857142z m156-155.428571q-6.285714 0-13.142857-4.571429-77.714286-60-144-88.285714T585.142857 438.857143q-48.571429 0-97.428571 12.571428t-85.142857 30.285715T337.714286 517.142857t-45.142857 30.285714-17.714286 12.571429q-9.714286 0-52.571429-42.857143t-42.857143-53.142857q0-6.857143 5.714286-12.571429 75.428571-75.428571 182.857143-117.142857t217.142857-41.714285 217.142857 41.714285 182.857143 117.142857q5.714286 5.714286 5.714286 12.571429 0 10.285714-42.857143 53.142857t-52.571429 42.857143z m154.857143-154.857143q-6.285714 0-12.571428-5.142857-102.285714-89.714286-212.285715-135.142857T585.142857 219.428571t-240.285714 45.428572T132.571429 400q-6.285714 5.142857-12.571429 5.142857-9.714286 0-52.857143-42.857143T24 309.142857q0-7.428571 5.714286-13.142857 106.857143-106.285714 254.285714-164.571429t301.142857-58.285714 301.142857 58.285714 254.285715 164.571429q5.714286 5.714286 5.714285 13.142857 0 10.285714-43.142857 53.142857t-52.857143 42.857143z\"  ></path></symbol><symbol id=\"icon-window-close\" viewBox=\"0 0 1024 1024\"><path d=\"M671.428571 754.857143l83.428572-83.428572q5.714286-5.714286 5.714286-13.142857t-5.714286-13.142857l-133.142857-133.142857 133.142857-133.142857q5.714286-5.714286 5.714286-13.142857t-5.714286-13.142857l-83.428572-83.428572q-5.714286-5.714286-13.142857-5.714286t-13.142857 5.714286L512 402.285714 378.857143 269.142857q-5.714286-5.714286-13.142857-5.714286t-13.142857 5.714286L269.142857 352.571429q-5.714286 5.714286-5.714286 13.142857t5.714286 13.142857l133.142857 133.142857-133.142857 133.142857q-5.714286 5.714286-5.714286 13.142857t5.714286 13.142857l83.428572 83.428572q5.714286 5.714286 13.142857 5.714286t13.142857-5.714286l133.142857-133.142857 133.142857 133.142857q5.714286 5.714286 13.142857 5.714286t13.142857-5.714286z m352.571429-590.285714v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h841.142858q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-window-close-o\" viewBox=\"0 0 1024 1024\"><path d=\"M718.285714 634.857143l-83.428571 83.428571q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-96.571429-96.571428-96.571429 96.571428q-5.714286 5.714286-13.142857 5.714286t-13.142857-5.714286l-83.428571-83.428571q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l96.571428-96.571429-96.571428-96.571429q-5.714286-5.714286-5.714286-13.142857t5.714286-13.142857l83.428571-83.428571q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l96.571429 96.571428 96.571429-96.571428q5.714286-5.714286 13.142857-5.714286t13.142857 5.714286l83.428571 83.428571q5.714286 5.714286 5.714286 13.142857t-5.714286 13.142857l-96.571428 96.571429 96.571428 96.571429q5.714286 5.714286 5.714286 13.142857t-5.714286 13.142857zM146.285714 804.571429h731.428572V219.428571H146.285714v585.142858zM1024 164.571429v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h841.142858q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-window-maximize\" viewBox=\"0 0 1024 1024\"><path d=\"M146.285714 804.571429h731.428572V365.714286H146.285714v438.857143zM1024 164.571429v694.857142q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571V164.571429q0-37.714286 26.857143-64.571429t64.571428-26.857143h841.142858q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-window-minimize\" viewBox=\"0 0 1024 1024\"><path d=\"M1024 749.714286v109.714285q0 37.714286-26.857143 64.571429t-64.571428 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 859.428571v-109.714285q0-37.714286 26.857143-64.571429t64.571428-26.857143h841.142858q37.714286 0 64.571428 26.857143t26.857143 64.571429z\"  ></path></symbol><symbol id=\"icon-window-restore\" viewBox=\"0 0 1170 1024\"><path d=\"M146.285714 877.714286h438.857143v-292.571429H146.285714v292.571429z m585.142857-292.571429h292.571429V146.285714h-438.857143v146.285715h54.857143q37.714286 0 64.571429 26.857142t26.857142 64.571429v201.142857z m438.857143-493.714286v548.571429q0 37.714286-26.857143 64.571429t-64.571428 26.857142h-347.428572v201.142858q0 37.714286-26.857142 64.571428t-64.571429 26.857143H91.428571q-37.714286 0-64.571428-26.857143T0 932.571429V384q0-37.714286 26.857143-64.571429t64.571428-26.857142h347.428572V91.428571q0-37.714286 26.857143-64.571428T530.285714 0h548.571429q37.714286 0 64.571428 26.857143t26.857143 64.571428z\"  ></path></symbol><symbol id=\"icon-windows\" viewBox=\"0 0 1024 1024\"><path d=\"M426.285714 574.857143v372L36.571429 893.142857v-318.285714h389.714285z m0-424.571429v376.571429H36.571429V204z m561.142857 424.571429v449.142857l-518.285714-71.428571v-377.714286h518.285714z m0-501.714286v453.714286H469.142857V144.571429z\"  ></path></symbol><symbol id=\"icon-won\" viewBox=\"0 0 1024 1024\"><path d=\"M293.714286 682.857143l46.285714-170.857143H249.142857l42.857143 171.428571q0.571429 0.571429 0.571429 1.714286t0.571428 1.714286q0-0.571429 0.285714-2t0.285715-2z m66.285714-244l20-73.142857H213.142857l18.285714 73.142857h128.571429z m109.714286 0h79.428571l-20-73.142857h-40z m256.571428 244.571428l44.571429-171.428571h-92.571429l46.285715 170.857143q0 0.571429 0.285714 2t0.857143 2q0-0.571429 0.285714-1.714286t0.285714-1.714286z m63.428572-244.571428l18.857143-73.142857h-169.714286l19.428571 73.142857h131.428572z m234.285714 18.285714v36.571429q0 8-5.142857 13.142857t-13.142857 5.142857h-121.714286l-93.714286 352q-4 13.714286-17.714285 13.714286h-90.857143q-13.714286 0-17.714286-13.714286L569.142857 512H449.714286l-95.428572 352q-4 13.714286-17.714285 13.714286H245.714286q-6.285714 0-11.142857-4t-6-9.714286L137.142857 512H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142857v-36.571429q0-8 5.142857-13.142857t13.142857-5.142857h100l-18.857143-73.142857H18.285714q-8 0-13.142857-5.142857t-5.142857-13.142858v-36.571428q0-8 5.142857-13.142857t13.142857-5.142857h62.285715L29.714286 96q-2.857143-8.571429 2.857143-16 5.714286-6.857143 14.857142-6.857143h78.285715q14.857143 0 17.714285 13.714286l51.428572 205.714286h205.142857l55.428571-205.714286q4-13.714286 17.714286-13.714286h72q13.714286 0 17.714286 13.714286l56 205.714286h208.571428l53.142858-205.714286q2.857143-13.714286 17.714285-13.714286h78.285715q9.142857 0 14.857142 6.857143 5.714286 7.428571 2.857143 16l-52 196.571429h63.428572q8 0 13.142857 5.142857t5.142857 13.142857v36.571428q0 8-5.142857 13.142858t-13.142857 5.142857h-82.857143l-19.428572 73.142857h102.285715q8 0 13.142857 5.142857t5.142857 13.142857z\"  ></path></symbol><symbol id=\"icon-wordpress\" viewBox=\"0 0 1024 1024\"><path d=\"M72.571429 512q0-93.142857 38.285714-178.857143l209.714286 574.285714q-112-54.285714-180-160.571428T72.571429 512z m736-22.285714q0 10.857143-1.428572 22t-5.714286 28.285714-6.571428 25.142857-10 33.714286-10 33.142857l-43.428572 146.285714-158.857142-472q26.285714-1.714286 50.285714-4.571428 10.857143-1.142857 14.857143-10.571429t-1.428572-17.714286T620 265.714286l-117.142857 5.714285q-42.857143-0.571429-115.428572-5.714285-6.857143-0.571429-11.714285 2.857143T369.142857 277.142857t-0.857143 10.571429 5.142857 9.428571 11.142858 4.571429l45.714285 4.571428 68.571429 187.428572-96 288-160-475.428572q26.285714-1.714286 50.285714-4.571428 10.857143-1.142857 14.857143-10.571429t-1.428571-17.714286T290.285714 265.714286l-117.142857 5.714285q-4 0-13.142857-0.285714t-14.857143-0.285714q60-91.428571 156.857143-144.857143T512 72.571429q84 0 160.285714 30.285714T808.571429 188h-5.714286q-31.428571 0-52.571429 23.142857t-21.142857 54.571429q0 6.857143 1.142857 13.714285t2.285715 12.285715 4.571428 13.142857 5.142857 12 6.857143 12.857143 7.142857 12 8.285715 13.714285 8 13.142858q36 61.142857 36 121.142857zM519.428571 550.285714l135.428572 369.714286q0.571429 3.428571 2.857143 6.285714-72 25.142857-145.714286 25.142857-64 0-124-18.285714z m377.714286-249.142857q54.285714 99.428571 54.285714 210.857143 0 119.428571-59.428571 220.285714T732.571429 891.428571l134.285714-387.428571q33.714286-96.571429 33.714286-157.714286 0-24-3.428572-45.142857zM512 0q104 0 198.857143 40.571429t163.428571 109.142857 109.142857 163.428571 40.571429 198.857143-40.571429 198.857143-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0z m0 1000.571429q98.857143 0 189.428571-38.857143t156-104.285715 104.285715-156 38.857143-189.428571-38.857143-189.428571-104.285715-156-156-104.285715T512 23.428571t-189.428571 38.857143-156 104.285715-104.285715 156T23.428571 512t38.857143 189.428571 104.285715 156 156 104.285715 189.428571 38.857143z\"  ></path></symbol><symbol id=\"icon-wpexplorer\" viewBox=\"0 0 1024 1024\"><path d=\"M541.714286 587.428571l93.142857 188h-29.142857l-100-200-97.714286 200h-28l102.285714-213.714285-44.571428-18.857143 12-28 137.142857 58.285714-12 28.571429zM321.714286 249.142857l173.714285 74.285714-74.285714 173.714286-173.714286-74.285714z m196.571428 105.714286l137.142857 58.857143-58.857142 136.571428-136.571429-58.285714z m160.571429 85.714286l109.142857 46.285714-46.857143 108.571428-108.571428-46.285714z m281.142857 71.428571q0-90.857143-35.428571-173.714286t-95.714286-143.142857T685.714286 99.428571t-173.714286-35.428571-173.714286 35.428571-143.142857 95.714286T99.428571 338.285714t-35.428571 173.714286 35.428571 173.714286 95.714286 143.142857T338.285714 924.571429t173.714286 35.428571 173.714286-35.428571 143.142857-95.714286T924.571429 685.714286t35.428571-173.714286z m64 0q0 104-40.571429 198.857143t-109.142857 163.428571-163.428571 109.142857-198.857143 40.571429-198.857143-40.571429-163.428571-109.142857-109.142857-163.428571T0 512t40.571429-198.857143 109.142857-163.428571T313.142857 40.571429 512 0t198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z\"  ></path></symbol><symbol id=\"icon-wpbeginner\" viewBox=\"0 0 1024 1024\"><path d=\"M219.428571 475.428571h91.428572V347.428571H219.428571v128z m478.285715 189.714286v-52.571428q-59.428571 20.571429-138.857143 21.714285-77.142857 0.571429-148.285714-26.571428T284.571429 537.714286l0.571428 54.857143q50.285714 45.714286 121.142857 73.428571t155.428572 27.142857q73.714286 0 136-28zM365.714286 475.428571h365.714285V347.428571H365.714286v128z m658.285714-18.285714q0 106.857143-56.571429 201.142857 50.857143 58.285714 50.857143 130.857143 0 89.714286-74 153.142857T765.142857 1005.714286q-69.714286 0-128.571428-30T544.571429 895.428571q-10.857143 0.571429-32.571429 0.571429t-32.571429-0.571429q-33.142857 50.285714-92 80.285715T258.857143 1005.714286q-105.142857 0-179.142857-63.428572T5.714286 789.142857q0-72.571429 50.857143-130.857143Q0 564 0 457.142857q0-119.428571 68.571429-220.285714T255.142857 77.142857 512 18.285714t256.857143 58.857143T955.428571 236.857143 1024 457.142857z\"  ></path></symbol><symbol id=\"icon-xing-square\" viewBox=\"0 0 1024 1024\"><path d=\"M464.571429 437.142857q0-0.571429-72-126.857143-12-19.428571-29.714286-19.428571H257.714286q-10.285714 0-14.857143 6.285714-4 6.857143 0.571428 16.571429l71.428572 123.428571v0.571429l-112 197.714285q-5.142857 8 0 16 4.571429 7.428571 13.714286 7.428572h105.714285q17.714286 0 28.571429-20.571429z m356.571428-284q-4-6.857143-13.714286-6.857143h-106.857142q-17.142857 0-28 20l-234.857143 416.571429q0.571429 1.142857 149.714285 274.857143 11.428571 20 29.714286 20h105.142857q10.285714 0 14.285715-6.857143 4.571429-7.428571-0.571429-16l-148.571429-272v-0.571429l233.714286-413.142857q4.571429-9.142857 0-16z m129.714286 84.571429v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-wrench\" viewBox=\"0 0 1024 1024\"><path d=\"M256 841.142857q0-14.857143-10.857143-25.714286t-25.714286-10.857142-25.714285 10.857142-10.857143 25.714286 10.857143 25.714286 25.714285 10.857143 25.714286-10.857143 10.857143-25.714286z m368-240l-389.714286 389.714286q-21.142857 21.142857-51.428571 21.142857-29.714286 0-52-21.142857L70.285714 929.142857q-21.714286-20.571429-21.714285-51.428571 0-30.285714 21.714285-52l389.142857-389.142857q22.285714 56 65.428572 99.142857T624 601.142857z m362.285714-248.571428q0 22.285714-13.142857 60.571428-26.857143 76.571429-94 124.285714T731.428571 585.142857q-105.714286 0-180.857142-75.142857T475.428571 329.142857t75.142858-180.857143T731.428571 73.142857q33.142857 0 69.428572 9.428572T862.285714 109.142857q9.142857 6.285714 9.142857 16t-9.142857 16l-167.428571 96.571429v128l110.285714 61.142857q2.857143-1.714286 45.142857-27.714286t77.428572-46.285714T968 332.571429q8.571429 0 13.428571 5.714285t4.857143 14.285715z\"  ></path></symbol><symbol id=\"icon-wpforms\" viewBox=\"0 0 1024 1024\"><path d=\"M366.4594 520.571429v73.142857H222.4594V520.571429h144z m0-145.714286v72.571428H222.4594V374.857143h144z m433.142857 292v73.142857H604.745114v-73.142857h194.857143z m0-146.285714v73.142857H415.602257V520.571429h384z m0-145.714286v72.571428H415.602257V374.857143h384z m77.142857 491.428571V157.714286q0-4.571429-3.428571-8t-8-3.428572h-18.285714L631.030829 292.571429 511.030829 194.857143 391.030829 292.571429 175.030829 146.285714h-18.285715q-4.571429 0-8 3.428572t-3.428571 8v708.571428q0 4.571429 3.428571 8t8 3.428572h708.571429q4.571429 0 8-3.428572t3.428571-8zM388.173686 232l105.714285-85.714286H261.887971z m245.714285 0l126.285715-85.714286H528.173686z m316-74.285714v708.571428q0 35.428571-24.571428 60t-60 24.571429H156.745114q-35.428571 0-60-24.571429T72.173686 866.285714V157.714286q0-35.428571 24.571428-60t60-24.571429h708.571429q35.428571 0 60 24.571429t24.571428 60z\"  ></path></symbol><symbol id=\"icon-y-combinator\" viewBox=\"0 0 1024 1024\"><path d=\"M535.428571 573.714286l152-285.142857H623.428571L533.714286 466.857143q-13.714286 27.428571-25.142857 52.571428l-24-52.571428-88.571429-178.285714H327.428571l150.285715 281.714285v185.142857h57.714285v-181.714285z m415.428572-500.571429v877.714286H73.142857V73.142857h877.714286z\"  ></path></symbol><symbol id=\"icon-xing\" viewBox=\"0 0 1024 1024\"><path d=\"M450.857143 381.142857q-5.714286 10.285714-146.857143 260.571429-15.428571 26.285714-37.142857 26.285714H130.285714q-12 0-17.714285-9.714286t0-20.571428l144.571428-256q0.571429 0 0-0.571429L165.142857 221.714286q-6.857143-12.571429-0.571428-21.142857 5.142857-8.571429 18.285714-8.571429h136.571428q22.857143 0 37.714286 25.714286z m460.571428-366.857143q6.285714 9.142857 0 21.142857L609.714286 569.142857v0.571429l192 351.428571q6.285714 11.428571 0.571428 21.142857-5.714286 8.571429-18.285714 8.571429H647.428571q-24 0-37.714285-25.714286L416 569.714286q10.285714-18.285714 303.428571-538.285715 14.285714-25.714286 36.571429-25.714285h137.714286q12.571429 0 17.714285 8.571428z\"  ></path></symbol><symbol id=\"icon-y-combinator-square\" viewBox=\"0 0 1024 1024\"><path d=\"M535.428571 573.714286l152-285.142857H623.428571L533.714286 466.857143q-13.714286 27.428571-25.142857 52.571428l-24-52.571428-88.571429-178.285714H327.428571l150.285715 281.714285v185.142857h57.714285v-181.714285z m415.428572-336v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-yahoo\" viewBox=\"0 0 1024 1024\"><path d=\"M564 546.857143l7.428571 404q-35.428571-6.285714-60-6.285714-23.428571 0-60 6.285714l7.428572-404q-22.857143-39.428571-96.285714-168.857143T238.857143 164 135.428571 0q33.142857 8.571429 61.714286 8.571429 25.142857 0 63.428572-8.571429 36 63.428571 76.285714 131.142857t95.428571 158T511.428571 418.857143q21.142857-34.857143 62.571429-101.428572t67.142857-108.571428 60-100.571429T762.285714 0q30.857143 8 61.142857 8 32 0 65.142858-8-16 22.285714-34.285715 50.571429t-28.285714 44.857142-32.285714 54.857143-28 48q-83.428571 141.714286-201.714286 348.571429z\"  ></path></symbol><symbol id=\"icon-yc\" viewBox=\"0 0 1024 1024\"><path d=\"M535.428571 573.714286l152-285.142857H623.428571L533.714286 466.857143q-13.714286 27.428571-25.142857 52.571428l-24-52.571428-88.571429-178.285714H327.428571l150.285715 281.714285v185.142857h57.714285v-181.714285z m415.428572-500.571429v877.714286H73.142857V73.142857h877.714286z\"  ></path></symbol><symbol id=\"icon-yc-square\" viewBox=\"0 0 1024 1024\"><path d=\"M535.428571 573.714286l152-285.142857H623.428571L533.714286 466.857143q-13.714286 27.428571-25.142857 52.571428l-24-52.571428-88.571429-178.285714H327.428571l150.285715 281.714285v185.142857h57.714285v-181.714285z m415.428572-336v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-yen\" viewBox=\"0 0 1024 1024\"><path d=\"M559.250603 877.714286H460.964889q-7.428571 0-12.857143-5.142857t-5.428572-13.142858v-188.571428H278.107746q-7.428571 0-12.857143-5.142857t-5.428572-13.142857v-58.857143q0-7.428571 5.428572-12.857143t12.857143-5.428572h164.571428v-48.571428H278.107746q-7.428571 0-12.857143-5.142857T259.822031 508.571429V449.142857q0-7.428571 5.428572-12.857143T278.107746 430.857143h122.285714L216.964889 100.571429q-4.571429-9.142857 0-18.285715 5.714286-9.142857 16-9.142857h110.857142q10.857143 0 16.571429 10.285714l122.857143 242.857143q10.857143 21.714286 32 71.428572 5.714286-13.714286 17.428571-38.857143t15.714286-34.857143l109.142857-240q4.571429-10.857143 16.571429-10.857143h109.142857q9.714286 0 15.428571 9.142857 5.142857 8 0.571429 17.714286L620.39346 430.857143h122.857143q7.428571 0 12.857143 5.428571T761.536317 449.142857v59.428572q0 8-5.428571 13.142857t-12.857143 5.142857H577.536317v48.571428h165.714286q7.428571 0 12.857143 5.428572t5.428571 12.857143v58.857143q0 8-5.428571 13.142857t-12.857143 5.142857H577.536317v188.571428q0 7.428571-5.428571 12.857143T559.250603 877.714286z\"  ></path></symbol><symbol id=\"icon-yelp\" viewBox=\"0 0 1024 1024\"><path d=\"M514.857143 753.714286v72.571428q-0.571429 166.857143-3.428572 174.285715-6.857143 18.285714-29.142857 22.857142-30.857143 5.142857-103.714285-21.714285T285.714286 950.857143q-7.428571-8.571429-9.714286-20.571429-0.571429-6.857143 2.285714-14.857143 2.285714-5.714286 19.428572-26.857142t103.428571-123.428572q0.571429 0 34.285714-40 8.571429-10.857143 22.571429-14t28.285714 2q13.714286 5.714286 21.428572 16.571429t7.142857 24z m-85.142857-143.428572q-1.714286 31.428571-29.714286 40l-68.571429 22.285715q-157.142857 50.285714-166.857142 50.285714-20-1.142857-30.857143-20.571429-6.857143-14.285714-9.714286-42.857143-4.571429-43.428571 0.571429-95.142857T141.714286 493.142857t32-18.285714q7.428571 0 115.428571 44 40.571429 16.571429 65.714286 26.857143l48 19.428571q13.142857 5.142857 20.285714 17.428572T429.714286 610.285714z m472 169.714286q-4 30.857143-52.285715 92T772 944.571429q-21.142857 8-36-4-8-5.714286-105.142857-164l-26.857143-44q-8-12-6.571429-26.285715t11.142858-26.285714q20-24.571429 47.428571-14.857143 0.571429 0.571429 68 22.857143 116 37.714286 138.285714 45.428571t26.857143 11.714286q16 12.571429 12.571429 34.857143zM517.714286 418.857143q2.857143 58.285714-30.857143 69.714286-33.142857 9.714286-65.142857-40.571429L205.714286 106.285714q-4.571429-20 10.857143-35.428571 23.428571-24.571429 118.571428-51.142857T463.428571 1.714286q22.857143 5.714286 28 25.714285 1.714286 10.285714 12.571429 174.571429T517.714286 418.857143z m378.285714 61.714286q1.714286 22.285714-14.857143 33.714285-8.571429 5.714286-188 49.142857-38.285714 8.571429-52 13.142858l0.571429-1.142858q-13.142857 3.428571-26.285715-2.285714t-21.142857-18.285714q-17.142857-26.857143 0-49.714286 0.571429-0.571429 42.857143-58.285714 71.428571-97.714286 85.714286-116.571429t19.428571-22.285714q16-10.857143 37.142857-1.142857 27.428571 13.142857 70.285715 76.285714t46.285714 95.714286v1.714286z\"  ></path></symbol><symbol id=\"icon-yoast\" viewBox=\"0 0 1024 1024\"><path d=\"M230.285714 124.571429h394.857143l-14.857143 41.142857H230.285714q-62.857143 0-107.714285 45.142857T77.714286 318.857143v440.571428q0 54.285714 34.571428 96.857143T200 909.714286q13.142857 2.857143 56 2.857143v41.142857h-25.714286q-80 0-136.857143-57.142857T36.571429 759.428571V318.857143q0-80 56.857142-137.142857T230.285714 124.571429zM716.571429 0h141.142857L582.285714 739.428571q-13.142857 34.857143-23.142857 59.142858t-25.714286 56-30.857142 53.428571-36.857143 44.857143-45.428572 37.142857-54.571428 23.428571-66.285715 10.571429v-111.428571q93.142857-14.857143 125.714286-104 11.428571-29.714286 11.428572-60 0-30.857143-11.428572-60.571429L262.285714 269.142857h130.285715l106.857142 334.285714z m270.857142 318.857143v634.857143H533.142857q21.142857-31.428571 25.714286-41.714286h387.428571V318.857143q0-48.571429-28.285714-88.571429T844 173.714286l14.285714-38.285715q57.714286 19.428571 93.428572 70.571429T987.428571 318.857143z\"  ></path></symbol><symbol id=\"icon-youtube-play\" viewBox=\"0 0 1024 1024\"><path d=\"M406.285977 644.571429l276.571429-142.857143-276.571429-144.571429v287.428572z m105.714286-492.571429q96 0 185.428571 2.571429T828.571691 160l41.714286 2.285714q0.571429 0 9.714286 0.857143t13.142857 1.714286 13.428571 2.571428 16.285715 4.571429 16 7.428571 17.714285 11.142858 16.571429 15.142857q3.428571 3.428571 8.857143 10.571428t16.571428 33.428572 15.142858 57.714285q4.571429 36.571429 7.142857 78T1024.000263 450.285714v100.571429q0.571429 82.857143-10.285714 165.714286-4 31.428571-14.285715 56.857142t-18.285714 35.142858l-8 9.714285q-8 8.571429-16.571429 15.142857t-17.714285 10.857143-16 7.142857-16.285715 4.571429-13.714285 2.571429-13.142857 1.714285-9.428572 0.857143q-143.428571 10.857143-358.285714 10.857143-118.285714-1.142857-205.428572-3.714286T192.000263 864l-28-2.285714-20.571429-2.285715q-20.571429-2.857143-31.142857-5.714285t-29.142857-12-32.285714-23.428572q-3.428571-3.428571-8.857143-10.571428t-16.571429-33.428572T10.285977 716.571429q-4.571429-36.571429-7.142857-78T0.000263 573.714286V473.142857q-0.571429-82.857143 10.285714-165.714286 4-31.428571 14.285714-56.857142T42.857406 215.428571l8-9.714285q8-8.571429 16.571428-15.142857t17.714286-11.142858 16-7.428571 16.285714-4.571429 13.428572-2.571428 13.142857-1.714286 9.714286-0.857143q143.428571-10.285714 358.285714-10.285714z\"  ></path></symbol><symbol id=\"icon-youtube-square\" viewBox=\"0 0 1024 1024\"><path d=\"M598.285714 744.571429v-89.714286q0-28.571429-16.571428-28.571429-9.714286 0-18.857143 9.142857v128q9.142857 9.142857 18.857143 9.142858 16.571429 0 16.571428-28z m105.142857-69.714286h37.714286v-19.428572q0-29.142857-18.857143-29.142857t-18.857143 29.142857v19.428572zM377.142857 522.857143v40h-45.714286v241.714286h-42.285714V562.857143h-44.571428v-40h132.571428z m114.857143 72v209.714286h-38.285714v-22.857143q-22.285714 25.714286-43.428572 25.714285-18.857143 0-24-16-3.428571-9.714286-3.428571-30.857142v-165.714286h37.714286v154.285714q0 13.714286 0.571428 14.857143 0.571429 8.571429 8.571429 8.571429 11.428571 0 24-17.714286v-160h38.285714z m144 63.428571v83.428572q0 29.714286-4 41.714285-6.857143 24-30.285714 24-20 0-38.857143-23.428571v20.571429h-38.285714V522.857143h38.285714v92q18.285714-22.857143 38.857143-22.857143 23.428571 0 30.285714 24 4 12 4 42.285714z m143.428571 73.714286v5.142857q0 16.571429-1.142857 24.571429-1.714286 12.571429-8.571428 22.857143-15.428571 22.857143-45.714286 22.857142-29.714286 0-46.285714-21.714285-12-15.428571-12-49.142857v-73.714286q0-33.714286 11.428571-49.142857 16.571429-21.714286 45.714286-21.714286t44.571428 21.714286q12 16.571429 12 49.142857v43.428571h-76v37.142857q0 29.142857 19.428572 29.142858 13.714286 0 17.142857-14.857143 0-0.571429 0.285714-4t0.285715-9.428572V732h38.857142zM521.714286 261.142857v89.142857q0 29.142857-18.285715 29.142857t-18.285714-29.142857V261.142857q0-29.714286 18.285714-29.714286t18.285715 29.714286z m304.571428 407.428572q0-101.142857-10.857143-148.571429-5.714286-25.142857-24.571428-42t-43.428572-19.714286q-77.714286-8.571429-235.428571-8.571428-157.142857 0-234.857143 8.571428-25.142857 2.857143-43.714286 19.714286T209.142857 520q-11.428571 49.714286-11.428571 148.571429 0 100.571429 11.428571 148.571428 5.714286 24.571429 24.285714 41.714286t43.142858 20q78.285714 8.571429 235.428571 8.571428t235.428571-8.571428q24.571429-2.857143 43.142858-20t24.285714-41.714286q11.428571-48 11.428571-148.571428zM394.857143 296.571429l51.428571-169.142858h-42.857143l-29.142857 111.428572-30.285714-111.428572h-44.571429q4 13.142857 13.142858 39.428572l13.714285 39.428571q20 58.857143 26.285715 90.285715v114.857142h42.285714V296.571429z m165.142857 46.285714V268.571429q0-33.142857-12-49.714286-16.571429-21.714286-44.571429-21.714286-29.142857 0-44.571428 21.714286-12 16.571429-12 49.714286v74.285714q0 33.142857 12 49.714286 15.428571 21.714286 44.571428 21.714285 28 0 44.571429-21.714285 12-15.428571 12-49.714286z m103.428571 68.571428h38.285715V200h-38.285715v161.714286q-12.571429 17.714286-24 17.714285-8.571429 0-9.142857-9.142857-0.571429-1.142857-0.571428-14.857143V200h-38.285715v167.428571q0 21.142857 3.428572 31.428572 6.285714 15.428571 24.571428 15.428571 20.571429 0 44-25.714285v22.857142z m287.428572-173.714285v548.571428q0 68-48.285714 116.285715T786.285714 950.857143H237.714286q-68 0-116.285715-48.285714T73.142857 786.285714V237.714286q0-68 48.285714-116.285715T237.714286 73.142857h548.571428q68 0 116.285715 48.285714T950.857143 237.714286z\"  ></path></symbol><symbol id=\"icon-youtube\" viewBox=\"0 0 1024 1024\"><path d=\"M624.966337 710.857143v120.571428q0 38.285714-22.285714 38.285715-13.142857 0-25.714286-12.571429v-172q12.571429-12.571429 25.714286-12.571428 22.285714 0 22.285714 38.285714z m193.142857 0.571428v26.285715h-51.428571v-26.285715q0-38.857143 25.714286-38.857142t25.714285 38.857142z m-552-124.571428h61.142857v-53.714286H148.966337v53.714286h60v325.142857h57.142857v-325.142857z m164.571429 325.142857h50.857143v-282.285714h-50.857143v216q-17.142857 24-32.571429 24-10.285714 0-12-12-0.571429-1.714286-0.571428-20v-208h-50.857143v223.428571q0 28 4.571428 41.714286 6.857143 21.142857 33.142858 21.142857 27.428571 0 58.285714-34.857143v30.857143z m245.142857-84.571429v-112.571428q0-41.714286-5.142857-56.571429-9.714286-32-40.571429-32-28.571429 0-53.142857 30.857143V533.142857h-50.857143v378.857143h50.857143v-27.428571q25.714286 31.428571 53.142857 31.428571 30.857143 0 40.571429-31.428571 5.142857-15.428571 5.142857-57.142858z m193.142857-5.714285v-7.428572h-52q0 29.142857-1.142857 34.857143-4 20.571429-22.857143 20.571429-26.285714 0-26.285714-39.428572v-49.714285h102.285714v-58.857143q0-45.142857-15.428571-66.285715-22.285714-29.142857-60.571429-29.142857-38.857143 0-61.142857 29.142857-16 21.142857-16 66.285715v98.857143q0 45.142857 16.571429 66.285714 22.285714 29.142857 61.714285 29.142857 41.142857 0 61.714286-30.285714 10.285714-15.428571 12-30.857143 1.142857-5.142857 1.142857-33.142857zM521.537766 300V180q0-39.428571-24.571429-39.428571t-24.571428 39.428571v120q0 40 24.571428 40t24.571429-40z m410.857143 429.142857q0 133.714286-14.857143 200-8 33.714286-33.142857 56.571429t-58.285715 26.285714q-105.142857 12-317.142857 12t-317.142857-12q-33.142857-3.428571-58.571429-26.285714T100.394909 929.142857q-14.857143-64-14.857143-200 0-133.714286 14.857143-200 8-33.714286 33.142857-56.571428t58.857143-26.857143q104.571429-11.428571 316.571428-11.428572t317.142857 11.428572q33.142857 4 58.571429 26.857143t32.857143 56.571428q14.857143 64 14.857143 200zM362.109194 0h58.285715L351.252051 228v154.857143H294.109194V228q-8-42.285714-34.857143-121.142857Q238.109194 48 222.109194 0h60.571429l40.571428 150.285714z m211.428572 190.285714v100q0 46.285714-16 67.428572-21.714286 29.142857-60.571429 29.142857-38.285714 0-60-29.142857-16-21.714286-16-67.428572V190.285714q0-45.714286 16-66.857143 21.714286-29.142857 60-29.142857 38.857143 0 60.571429 29.142857 16 21.142857 16 66.857143z m191.428571-92.571428v285.142857h-52v-31.428572q-30.285714 35.428571-58.857143 35.428572-26.285714 0-33.714285-21.142857-4.571429-13.714286-4.571429-42.857143V97.714286h52v209.714285q0 18.857143 0.571429 20 1.714286 12.571429 12 12.571429 15.428571 0 32.571428-24.571429V97.714286h52z\"  ></path></symbol></svg>',t=(q=document.getElementsByTagName(\"script\"))[q.length-1].getAttribute(\"data-injectcss\");if(t&&!m.__iconfont__svg__cssinject__){m.__iconfont__svg__cssinject__=!0;try{document.write(\"<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>\")}catch(q){console&&console.log(q)}}!function(q){if(document.addEventListener)if(~[\"complete\",\"loaded\",\"interactive\"].indexOf(document.readyState))setTimeout(q,0);else{var t=function(){document.removeEventListener(\"DOMContentLoaded\",t,!1),q()};document.addEventListener(\"DOMContentLoaded\",t,!1)}else document.attachEvent&&(l=q,T=m.document,o=!1,(v=function(){try{T.documentElement.doScroll(\"left\")}catch(q){return void setTimeout(v,50)}h()})(),T.onreadystatechange=function(){\"complete\"==T.readyState&&(T.onreadystatechange=null,h())});function h(){o||(o=!0,l())}var l,T,o,v}(function(){var q,t,h,l,T,o;(q=document.createElement(\"div\")).innerHTML=v,v=null,(t=q.getElementsByTagName(\"svg\")[0])&&(t.setAttribute(\"aria-hidden\",\"true\"),t.style.position=\"absolute\",t.style.width=0,t.style.height=0,t.style.overflow=\"hidden\",h=t,(l=document.body).firstChild?(T=h,(o=l.firstChild).parentNode.insertBefore(T,o)):l.appendChild(h))})}(window);"
  },
  {
    "path": "src/main/resources/static/assets/vendor/iconfont/iconfont.json",
    "content": "{\n  \"id\": \"1601062\",\n  \"name\": \"1\",\n  \"font_family\": \"iconfont\",\n  \"css_prefix_text\": \"icon-\",\n  \"description\": \"\",\n  \"glyphs\": [\n    {\n      \"icon_id\": \"1260974\",\n      \"name\": \"bars\",\n      \"font_class\": \"bars\",\n      \"unicode\": \"e601\",\n      \"unicode_decimal\": 58881\n    },\n    {\n      \"icon_id\": \"1260980\",\n      \"name\": \"calendar\",\n      \"font_class\": \"calendar\",\n      \"unicode\": \"e602\",\n      \"unicode_decimal\": 58882\n    },\n    {\n      \"icon_id\": \"1260983\",\n      \"name\": \"camera\",\n      \"font_class\": \"camera\",\n      \"unicode\": \"e603\",\n      \"unicode_decimal\": 58883\n    },\n    {\n      \"icon_id\": \"1260989\",\n      \"name\": \"check\",\n      \"font_class\": \"check\",\n      \"unicode\": \"e604\",\n      \"unicode_decimal\": 58884\n    },\n    {\n      \"icon_id\": \"1260991\",\n      \"name\": \"check-square-o\",\n      \"font_class\": \"check-square-o\",\n      \"unicode\": \"e605\",\n      \"unicode_decimal\": 58885\n    },\n    {\n      \"icon_id\": \"1260995\",\n      \"name\": \"clock-o\",\n      \"font_class\": \"clock-o\",\n      \"unicode\": \"e606\",\n      \"unicode_decimal\": 58886\n    },\n    {\n      \"icon_id\": \"1261002\",\n      \"name\": \"500px\",\n      \"font_class\": \"500px\",\n      \"unicode\": \"e607\",\n      \"unicode_decimal\": 58887\n    },\n    {\n      \"icon_id\": \"1261005\",\n      \"name\": \"address-book-o\",\n      \"font_class\": \"address-book-o\",\n      \"unicode\": \"e608\",\n      \"unicode_decimal\": 58888\n    },\n    {\n      \"icon_id\": \"1261044\",\n      \"name\": \"address-book\",\n      \"font_class\": \"address-book\",\n      \"unicode\": \"e609\",\n      \"unicode_decimal\": 58889\n    },\n    {\n      \"icon_id\": \"1261052\",\n      \"name\": \"address-card-o\",\n      \"font_class\": \"address-card-o\",\n      \"unicode\": \"e60a\",\n      \"unicode_decimal\": 58890\n    },\n    {\n      \"icon_id\": \"1261068\",\n      \"name\": \"address-card\",\n      \"font_class\": \"address-card\",\n      \"unicode\": \"e60b\",\n      \"unicode_decimal\": 58891\n    },\n    {\n      \"icon_id\": \"1261071\",\n      \"name\": \"adjust\",\n      \"font_class\": \"adjust\",\n      \"unicode\": \"e60c\",\n      \"unicode_decimal\": 58892\n    },\n    {\n      \"icon_id\": \"1261072\",\n      \"name\": \"adn\",\n      \"font_class\": \"adn\",\n      \"unicode\": \"e60d\",\n      \"unicode_decimal\": 58893\n    },\n    {\n      \"icon_id\": \"1261076\",\n      \"name\": \"align-center\",\n      \"font_class\": \"align-center\",\n      \"unicode\": \"e60e\",\n      \"unicode_decimal\": 58894\n    },\n    {\n      \"icon_id\": \"1261078\",\n      \"name\": \"align-justify\",\n      \"font_class\": \"align-justify\",\n      \"unicode\": \"e60f\",\n      \"unicode_decimal\": 58895\n    },\n    {\n      \"icon_id\": \"1261080\",\n      \"name\": \"align-left\",\n      \"font_class\": \"align-left\",\n      \"unicode\": \"e610\",\n      \"unicode_decimal\": 58896\n    },\n    {\n      \"icon_id\": \"1261081\",\n      \"name\": \"align-right\",\n      \"font_class\": \"align-right\",\n      \"unicode\": \"e611\",\n      \"unicode_decimal\": 58897\n    },\n    {\n      \"icon_id\": \"1261082\",\n      \"name\": \"amazon\",\n      \"font_class\": \"amazon\",\n      \"unicode\": \"e612\",\n      \"unicode_decimal\": 58898\n    },\n    {\n      \"icon_id\": \"1261084\",\n      \"name\": \"ambulance\",\n      \"font_class\": \"ambulance\",\n      \"unicode\": \"e613\",\n      \"unicode_decimal\": 58899\n    },\n    {\n      \"icon_id\": \"1261086\",\n      \"name\": \"american-sign-language-interpreting\",\n      \"font_class\": \"american-sign-language-interpreting\",\n      \"unicode\": \"e614\",\n      \"unicode_decimal\": 58900\n    },\n    {\n      \"icon_id\": \"1261087\",\n      \"name\": \"anchor\",\n      \"font_class\": \"anchor\",\n      \"unicode\": \"e615\",\n      \"unicode_decimal\": 58901\n    },\n    {\n      \"icon_id\": \"1261088\",\n      \"name\": \"android\",\n      \"font_class\": \"android\",\n      \"unicode\": \"e616\",\n      \"unicode_decimal\": 58902\n    },\n    {\n      \"icon_id\": \"1261089\",\n      \"name\": \"angellist\",\n      \"font_class\": \"angellist\",\n      \"unicode\": \"e617\",\n      \"unicode_decimal\": 58903\n    },\n    {\n      \"icon_id\": \"1261090\",\n      \"name\": \"angle-double-down\",\n      \"font_class\": \"angle-double-down\",\n      \"unicode\": \"e618\",\n      \"unicode_decimal\": 58904\n    },\n    {\n      \"icon_id\": \"1261091\",\n      \"name\": \"angle-double-left\",\n      \"font_class\": \"angle-double-left\",\n      \"unicode\": \"e619\",\n      \"unicode_decimal\": 58905\n    },\n    {\n      \"icon_id\": \"1261093\",\n      \"name\": \"angle-double-right\",\n      \"font_class\": \"angle-double-right\",\n      \"unicode\": \"e61a\",\n      \"unicode_decimal\": 58906\n    },\n    {\n      \"icon_id\": \"1261094\",\n      \"name\": \"angle-double-up\",\n      \"font_class\": \"angle-double-up\",\n      \"unicode\": \"e61b\",\n      \"unicode_decimal\": 58907\n    },\n    {\n      \"icon_id\": \"1261097\",\n      \"name\": \"angle-down\",\n      \"font_class\": \"angle-down\",\n      \"unicode\": \"e61c\",\n      \"unicode_decimal\": 58908\n    },\n    {\n      \"icon_id\": \"1261099\",\n      \"name\": \"angle-left\",\n      \"font_class\": \"angle-left\",\n      \"unicode\": \"e61d\",\n      \"unicode_decimal\": 58909\n    },\n    {\n      \"icon_id\": \"1261100\",\n      \"name\": \"angle-right\",\n      \"font_class\": \"angle-right\",\n      \"unicode\": \"e61e\",\n      \"unicode_decimal\": 58910\n    },\n    {\n      \"icon_id\": \"1261102\",\n      \"name\": \"angle-up\",\n      \"font_class\": \"angle-up\",\n      \"unicode\": \"e61f\",\n      \"unicode_decimal\": 58911\n    },\n    {\n      \"icon_id\": \"1261103\",\n      \"name\": \"apple\",\n      \"font_class\": \"apple\",\n      \"unicode\": \"e620\",\n      \"unicode_decimal\": 58912\n    },\n    {\n      \"icon_id\": \"1261104\",\n      \"name\": \"archive\",\n      \"font_class\": \"archive\",\n      \"unicode\": \"e621\",\n      \"unicode_decimal\": 58913\n    },\n    {\n      \"icon_id\": \"1261106\",\n      \"name\": \"area-chart\",\n      \"font_class\": \"area-chart\",\n      \"unicode\": \"e622\",\n      \"unicode_decimal\": 58914\n    },\n    {\n      \"icon_id\": \"1261108\",\n      \"name\": \"arrow-circle-down\",\n      \"font_class\": \"arrow-circle-down\",\n      \"unicode\": \"e623\",\n      \"unicode_decimal\": 58915\n    },\n    {\n      \"icon_id\": \"1261109\",\n      \"name\": \"arrow-circle-left\",\n      \"font_class\": \"arrow-circle-left\",\n      \"unicode\": \"e624\",\n      \"unicode_decimal\": 58916\n    },\n    {\n      \"icon_id\": \"1261110\",\n      \"name\": \"arrow-circle-o-down\",\n      \"font_class\": \"arrow-circle-o-down\",\n      \"unicode\": \"e625\",\n      \"unicode_decimal\": 58917\n    },\n    {\n      \"icon_id\": \"1261111\",\n      \"name\": \"arrow-circle-o-left\",\n      \"font_class\": \"arrow-circle-o-left\",\n      \"unicode\": \"e626\",\n      \"unicode_decimal\": 58918\n    },\n    {\n      \"icon_id\": \"1261112\",\n      \"name\": \"arrow-circle-o-right\",\n      \"font_class\": \"arrow-circle-o-right\",\n      \"unicode\": \"e627\",\n      \"unicode_decimal\": 58919\n    },\n    {\n      \"icon_id\": \"1261113\",\n      \"name\": \"arrow-circle-o-up\",\n      \"font_class\": \"arrow-circle-o-up\",\n      \"unicode\": \"e628\",\n      \"unicode_decimal\": 58920\n    },\n    {\n      \"icon_id\": \"1261115\",\n      \"name\": \"arrow-circle-right\",\n      \"font_class\": \"arrow-circle-right\",\n      \"unicode\": \"e629\",\n      \"unicode_decimal\": 58921\n    },\n    {\n      \"icon_id\": \"1261116\",\n      \"name\": \"arrow-circle-up\",\n      \"font_class\": \"arrow-circle-up\",\n      \"unicode\": \"e62a\",\n      \"unicode_decimal\": 58922\n    },\n    {\n      \"icon_id\": \"1261117\",\n      \"name\": \"arrow-down\",\n      \"font_class\": \"arrow-down\",\n      \"unicode\": \"e62b\",\n      \"unicode_decimal\": 58923\n    },\n    {\n      \"icon_id\": \"1261119\",\n      \"name\": \"arrow-left\",\n      \"font_class\": \"arrow-left\",\n      \"unicode\": \"e62c\",\n      \"unicode_decimal\": 58924\n    },\n    {\n      \"icon_id\": \"1261120\",\n      \"name\": \"arrow-right\",\n      \"font_class\": \"arrow-right\",\n      \"unicode\": \"e62d\",\n      \"unicode_decimal\": 58925\n    },\n    {\n      \"icon_id\": \"1261121\",\n      \"name\": \"arrow-up\",\n      \"font_class\": \"arrow-up\",\n      \"unicode\": \"e62e\",\n      \"unicode_decimal\": 58926\n    },\n    {\n      \"icon_id\": \"1261122\",\n      \"name\": \"arrows-alt\",\n      \"font_class\": \"arrows-alt\",\n      \"unicode\": \"e62f\",\n      \"unicode_decimal\": 58927\n    },\n    {\n      \"icon_id\": \"1261124\",\n      \"name\": \"arrows-h\",\n      \"font_class\": \"arrows-h\",\n      \"unicode\": \"e630\",\n      \"unicode_decimal\": 58928\n    },\n    {\n      \"icon_id\": \"1261128\",\n      \"name\": \"arrows-v\",\n      \"font_class\": \"arrows-v\",\n      \"unicode\": \"e631\",\n      \"unicode_decimal\": 58929\n    },\n    {\n      \"icon_id\": \"1261129\",\n      \"name\": \"arrows\",\n      \"font_class\": \"arrows\",\n      \"unicode\": \"e632\",\n      \"unicode_decimal\": 58930\n    },\n    {\n      \"icon_id\": \"1261130\",\n      \"name\": \"asl-interpreting\",\n      \"font_class\": \"asl-interpreting\",\n      \"unicode\": \"e633\",\n      \"unicode_decimal\": 58931\n    },\n    {\n      \"icon_id\": \"1261132\",\n      \"name\": \"assistive-listening-systems\",\n      \"font_class\": \"assistive-listening-systems\",\n      \"unicode\": \"e634\",\n      \"unicode_decimal\": 58932\n    },\n    {\n      \"icon_id\": \"1261150\",\n      \"name\": \"asterisk\",\n      \"font_class\": \"asterisk\",\n      \"unicode\": \"e635\",\n      \"unicode_decimal\": 58933\n    },\n    {\n      \"icon_id\": \"1261151\",\n      \"name\": \"at\",\n      \"font_class\": \"at\",\n      \"unicode\": \"e636\",\n      \"unicode_decimal\": 58934\n    },\n    {\n      \"icon_id\": \"1261152\",\n      \"name\": \"audio-description\",\n      \"font_class\": \"audio-description\",\n      \"unicode\": \"e637\",\n      \"unicode_decimal\": 58935\n    },\n    {\n      \"icon_id\": \"1261153\",\n      \"name\": \"automobile\",\n      \"font_class\": \"automobile\",\n      \"unicode\": \"e638\",\n      \"unicode_decimal\": 58936\n    },\n    {\n      \"icon_id\": \"1261155\",\n      \"name\": \"backward\",\n      \"font_class\": \"backward\",\n      \"unicode\": \"e639\",\n      \"unicode_decimal\": 58937\n    },\n    {\n      \"icon_id\": \"1261156\",\n      \"name\": \"balance-scale\",\n      \"font_class\": \"balance-scale\",\n      \"unicode\": \"e63a\",\n      \"unicode_decimal\": 58938\n    },\n    {\n      \"icon_id\": \"1261157\",\n      \"name\": \"bandcamp\",\n      \"font_class\": \"bandcamp\",\n      \"unicode\": \"e63b\",\n      \"unicode_decimal\": 58939\n    },\n    {\n      \"icon_id\": \"1261158\",\n      \"name\": \"bank\",\n      \"font_class\": \"bank\",\n      \"unicode\": \"e63c\",\n      \"unicode_decimal\": 58940\n    },\n    {\n      \"icon_id\": \"1261160\",\n      \"name\": \"bars\",\n      \"font_class\": \"bars1\",\n      \"unicode\": \"e63d\",\n      \"unicode_decimal\": 58941\n    },\n    {\n      \"icon_id\": \"1261161\",\n      \"name\": \"bar-chart\",\n      \"font_class\": \"bar-chart\",\n      \"unicode\": \"e63e\",\n      \"unicode_decimal\": 58942\n    },\n    {\n      \"icon_id\": \"1261162\",\n      \"name\": \"bar-chart-o\",\n      \"font_class\": \"bar-chart-o\",\n      \"unicode\": \"e63f\",\n      \"unicode_decimal\": 58943\n    },\n    {\n      \"icon_id\": \"1261163\",\n      \"name\": \"bathtub\",\n      \"font_class\": \"bathtub\",\n      \"unicode\": \"e640\",\n      \"unicode_decimal\": 58944\n    },\n    {\n      \"icon_id\": \"1261164\",\n      \"name\": \"barcode\",\n      \"font_class\": \"barcode\",\n      \"unicode\": \"e641\",\n      \"unicode_decimal\": 58945\n    },\n    {\n      \"icon_id\": \"1261165\",\n      \"name\": \"bath\",\n      \"font_class\": \"bath\",\n      \"unicode\": \"e642\",\n      \"unicode_decimal\": 58946\n    },\n    {\n      \"icon_id\": \"1261166\",\n      \"name\": \"battery-0\",\n      \"font_class\": \"battery-0\",\n      \"unicode\": \"e643\",\n      \"unicode_decimal\": 58947\n    },\n    {\n      \"icon_id\": \"1261167\",\n      \"name\": \"battery-1\",\n      \"font_class\": \"battery-1\",\n      \"unicode\": \"e644\",\n      \"unicode_decimal\": 58948\n    },\n    {\n      \"icon_id\": \"1261168\",\n      \"name\": \"battery-2\",\n      \"font_class\": \"battery-2\",\n      \"unicode\": \"e645\",\n      \"unicode_decimal\": 58949\n    },\n    {\n      \"icon_id\": \"1261169\",\n      \"name\": \"battery-4\",\n      \"font_class\": \"battery-4\",\n      \"unicode\": \"e646\",\n      \"unicode_decimal\": 58950\n    },\n    {\n      \"icon_id\": \"1261170\",\n      \"name\": \"battery-3\",\n      \"font_class\": \"battery-3\",\n      \"unicode\": \"e647\",\n      \"unicode_decimal\": 58951\n    },\n    {\n      \"icon_id\": \"1261171\",\n      \"name\": \"battery-half\",\n      \"font_class\": \"battery-half\",\n      \"unicode\": \"e648\",\n      \"unicode_decimal\": 58952\n    },\n    {\n      \"icon_id\": \"1261172\",\n      \"name\": \"battery-empty\",\n      \"font_class\": \"battery-empty\",\n      \"unicode\": \"e649\",\n      \"unicode_decimal\": 58953\n    },\n    {\n      \"icon_id\": \"1261173\",\n      \"name\": \"battery-full\",\n      \"font_class\": \"battery-full\",\n      \"unicode\": \"e64a\",\n      \"unicode_decimal\": 58954\n    },\n    {\n      \"icon_id\": \"1261174\",\n      \"name\": \"battery-quarter\",\n      \"font_class\": \"battery-quarter\",\n      \"unicode\": \"e64b\",\n      \"unicode_decimal\": 58955\n    },\n    {\n      \"icon_id\": \"1261175\",\n      \"name\": \"battery-three-quarters\",\n      \"font_class\": \"battery-three-quarters\",\n      \"unicode\": \"e64c\",\n      \"unicode_decimal\": 58956\n    },\n    {\n      \"icon_id\": \"1261176\",\n      \"name\": \"battery\",\n      \"font_class\": \"battery\",\n      \"unicode\": \"e64d\",\n      \"unicode_decimal\": 58957\n    },\n    {\n      \"icon_id\": \"1261183\",\n      \"name\": \"beer\",\n      \"font_class\": \"beer\",\n      \"unicode\": \"e64e\",\n      \"unicode_decimal\": 58958\n    },\n    {\n      \"icon_id\": \"1261184\",\n      \"name\": \"bed\",\n      \"font_class\": \"bed\",\n      \"unicode\": \"e64f\",\n      \"unicode_decimal\": 58959\n    },\n    {\n      \"icon_id\": \"1261185\",\n      \"name\": \"behance\",\n      \"font_class\": \"behance\",\n      \"unicode\": \"e650\",\n      \"unicode_decimal\": 58960\n    },\n    {\n      \"icon_id\": \"1261186\",\n      \"name\": \"behance-square\",\n      \"font_class\": \"behance-square\",\n      \"unicode\": \"e651\",\n      \"unicode_decimal\": 58961\n    },\n    {\n      \"icon_id\": \"1261187\",\n      \"name\": \"bell-o\",\n      \"font_class\": \"bell-o\",\n      \"unicode\": \"e652\",\n      \"unicode_decimal\": 58962\n    },\n    {\n      \"icon_id\": \"1261188\",\n      \"name\": \"bell-slash-o\",\n      \"font_class\": \"bell-slash-o\",\n      \"unicode\": \"e653\",\n      \"unicode_decimal\": 58963\n    },\n    {\n      \"icon_id\": \"1261189\",\n      \"name\": \"bell-slash\",\n      \"font_class\": \"bell-slash\",\n      \"unicode\": \"e654\",\n      \"unicode_decimal\": 58964\n    },\n    {\n      \"icon_id\": \"1261190\",\n      \"name\": \"bicycle\",\n      \"font_class\": \"bicycle\",\n      \"unicode\": \"e655\",\n      \"unicode_decimal\": 58965\n    },\n    {\n      \"icon_id\": \"1261191\",\n      \"name\": \"bitbucket-square\",\n      \"font_class\": \"bitbucket-square\",\n      \"unicode\": \"e656\",\n      \"unicode_decimal\": 58966\n    },\n    {\n      \"icon_id\": \"1261192\",\n      \"name\": \"binoculars\",\n      \"font_class\": \"binoculars\",\n      \"unicode\": \"e657\",\n      \"unicode_decimal\": 58967\n    },\n    {\n      \"icon_id\": \"1261193\",\n      \"name\": \"bell\",\n      \"font_class\": \"bell\",\n      \"unicode\": \"e658\",\n      \"unicode_decimal\": 58968\n    },\n    {\n      \"icon_id\": \"1261194\",\n      \"name\": \"birthday-cake\",\n      \"font_class\": \"birthday-cake\",\n      \"unicode\": \"e659\",\n      \"unicode_decimal\": 58969\n    },\n    {\n      \"icon_id\": \"1261195\",\n      \"name\": \"bitbucket\",\n      \"font_class\": \"bitbucket\",\n      \"unicode\": \"e65a\",\n      \"unicode_decimal\": 58970\n    },\n    {\n      \"icon_id\": \"1261196\",\n      \"name\": \"black-tie\",\n      \"font_class\": \"black-tie\",\n      \"unicode\": \"e65b\",\n      \"unicode_decimal\": 58971\n    },\n    {\n      \"icon_id\": \"1261197\",\n      \"name\": \"bluetooth-b\",\n      \"font_class\": \"bluetooth-b\",\n      \"unicode\": \"e65c\",\n      \"unicode_decimal\": 58972\n    },\n    {\n      \"icon_id\": \"1261198\",\n      \"name\": \"bitcoin\",\n      \"font_class\": \"bitcoin\",\n      \"unicode\": \"e65d\",\n      \"unicode_decimal\": 58973\n    },\n    {\n      \"icon_id\": \"1261199\",\n      \"name\": \"blind\",\n      \"font_class\": \"blind\",\n      \"unicode\": \"e65e\",\n      \"unicode_decimal\": 58974\n    },\n    {\n      \"icon_id\": \"1261200\",\n      \"name\": \"bluetooth\",\n      \"font_class\": \"bluetooth\",\n      \"unicode\": \"e65f\",\n      \"unicode_decimal\": 58975\n    },\n    {\n      \"icon_id\": \"1261201\",\n      \"name\": \"bold\",\n      \"font_class\": \"bold\",\n      \"unicode\": \"e660\",\n      \"unicode_decimal\": 58976\n    },\n    {\n      \"icon_id\": \"1261202\",\n      \"name\": \"bolt\",\n      \"font_class\": \"bolt\",\n      \"unicode\": \"e661\",\n      \"unicode_decimal\": 58977\n    },\n    {\n      \"icon_id\": \"1261203\",\n      \"name\": \"bomb\",\n      \"font_class\": \"bomb\",\n      \"unicode\": \"e662\",\n      \"unicode_decimal\": 58978\n    },\n    {\n      \"icon_id\": \"1261204\",\n      \"name\": \"book\",\n      \"font_class\": \"book\",\n      \"unicode\": \"e663\",\n      \"unicode_decimal\": 58979\n    },\n    {\n      \"icon_id\": \"1261208\",\n      \"name\": \"bug\",\n      \"font_class\": \"bug\",\n      \"unicode\": \"e664\",\n      \"unicode_decimal\": 58980\n    },\n    {\n      \"icon_id\": \"1261209\",\n      \"name\": \"bookmark-o\",\n      \"font_class\": \"bookmark-o\",\n      \"unicode\": \"e665\",\n      \"unicode_decimal\": 58981\n    },\n    {\n      \"icon_id\": \"1261210\",\n      \"name\": \"btc\",\n      \"font_class\": \"btc\",\n      \"unicode\": \"e666\",\n      \"unicode_decimal\": 58982\n    },\n    {\n      \"icon_id\": \"1261211\",\n      \"name\": \"bookmark\",\n      \"font_class\": \"bookmark\",\n      \"unicode\": \"e667\",\n      \"unicode_decimal\": 58983\n    },\n    {\n      \"icon_id\": \"1261212\",\n      \"name\": \"briefcase\",\n      \"font_class\": \"briefcase\",\n      \"unicode\": \"e668\",\n      \"unicode_decimal\": 58984\n    },\n    {\n      \"icon_id\": \"1261213\",\n      \"name\": \"braille\",\n      \"font_class\": \"braille\",\n      \"unicode\": \"e669\",\n      \"unicode_decimal\": 58985\n    },\n    {\n      \"icon_id\": \"1261214\",\n      \"name\": \"bullhorn\",\n      \"font_class\": \"bullhorn\",\n      \"unicode\": \"e66a\",\n      \"unicode_decimal\": 58986\n    },\n    {\n      \"icon_id\": \"1261215\",\n      \"name\": \"bullseye\",\n      \"font_class\": \"bullseye\",\n      \"unicode\": \"e66b\",\n      \"unicode_decimal\": 58987\n    },\n    {\n      \"icon_id\": \"1261216\",\n      \"name\": \"bus\",\n      \"font_class\": \"bus\",\n      \"unicode\": \"e66c\",\n      \"unicode_decimal\": 58988\n    },\n    {\n      \"icon_id\": \"1261217\",\n      \"name\": \"building\",\n      \"font_class\": \"building\",\n      \"unicode\": \"e66d\",\n      \"unicode_decimal\": 58989\n    },\n    {\n      \"icon_id\": \"1261218\",\n      \"name\": \"cab\",\n      \"font_class\": \"cab\",\n      \"unicode\": \"e66e\",\n      \"unicode_decimal\": 58990\n    },\n    {\n      \"icon_id\": \"1261219\",\n      \"name\": \"buysellads\",\n      \"font_class\": \"buysellads\",\n      \"unicode\": \"e66f\",\n      \"unicode_decimal\": 58991\n    },\n    {\n      \"icon_id\": \"1261220\",\n      \"name\": \"building-o\",\n      \"font_class\": \"building-o\",\n      \"unicode\": \"e670\",\n      \"unicode_decimal\": 58992\n    },\n    {\n      \"icon_id\": \"1261230\",\n      \"name\": \"calendar-plus-o\",\n      \"font_class\": \"calendar-plus-o\",\n      \"unicode\": \"e671\",\n      \"unicode_decimal\": 58993\n    },\n    {\n      \"icon_id\": \"1261231\",\n      \"name\": \"calendar-o\",\n      \"font_class\": \"calendar-o\",\n      \"unicode\": \"e672\",\n      \"unicode_decimal\": 58994\n    },\n    {\n      \"icon_id\": \"1261232\",\n      \"name\": \"calendar-times-o\",\n      \"font_class\": \"calendar-times-o\",\n      \"unicode\": \"e673\",\n      \"unicode_decimal\": 58995\n    },\n    {\n      \"icon_id\": \"1261233\",\n      \"name\": \"calendar-check-o\",\n      \"font_class\": \"calendar-check-o\",\n      \"unicode\": \"e674\",\n      \"unicode_decimal\": 58996\n    },\n    {\n      \"icon_id\": \"1261234\",\n      \"name\": \"calendar-minus-o\",\n      \"font_class\": \"calendar-minus-o\",\n      \"unicode\": \"e675\",\n      \"unicode_decimal\": 58997\n    },\n    {\n      \"icon_id\": \"1261235\",\n      \"name\": \"calculator\",\n      \"font_class\": \"calculator\",\n      \"unicode\": \"e676\",\n      \"unicode_decimal\": 58998\n    },\n    {\n      \"icon_id\": \"1261236\",\n      \"name\": \"caret-down\",\n      \"font_class\": \"caret-down\",\n      \"unicode\": \"e677\",\n      \"unicode_decimal\": 58999\n    },\n    {\n      \"icon_id\": \"1261237\",\n      \"name\": \"caret-left\",\n      \"font_class\": \"caret-left\",\n      \"unicode\": \"e678\",\n      \"unicode_decimal\": 59000\n    },\n    {\n      \"icon_id\": \"1261238\",\n      \"name\": \"car\",\n      \"font_class\": \"car\",\n      \"unicode\": \"e679\",\n      \"unicode_decimal\": 59001\n    },\n    {\n      \"icon_id\": \"1261240\",\n      \"name\": \"camera-retro\",\n      \"font_class\": \"camera-retro\",\n      \"unicode\": \"e67a\",\n      \"unicode_decimal\": 59002\n    },\n    {\n      \"icon_id\": \"1261242\",\n      \"name\": \"caret-right\",\n      \"font_class\": \"caret-right\",\n      \"unicode\": \"e67b\",\n      \"unicode_decimal\": 59003\n    },\n    {\n      \"icon_id\": \"1261243\",\n      \"name\": \"caret-square-o-left\",\n      \"font_class\": \"caret-square-o-left\",\n      \"unicode\": \"e67c\",\n      \"unicode_decimal\": 59004\n    },\n    {\n      \"icon_id\": \"1261244\",\n      \"name\": \"caret-square-o-right\",\n      \"font_class\": \"caret-square-o-right\",\n      \"unicode\": \"e67d\",\n      \"unicode_decimal\": 59005\n    },\n    {\n      \"icon_id\": \"1261245\",\n      \"name\": \"caret-up\",\n      \"font_class\": \"caret-up\",\n      \"unicode\": \"e67e\",\n      \"unicode_decimal\": 59006\n    },\n    {\n      \"icon_id\": \"1261246\",\n      \"name\": \"caret-square-o-up\",\n      \"font_class\": \"caret-square-o-up\",\n      \"unicode\": \"e67f\",\n      \"unicode_decimal\": 59007\n    },\n    {\n      \"icon_id\": \"1261247\",\n      \"name\": \"cart-plus\",\n      \"font_class\": \"cart-plus\",\n      \"unicode\": \"e680\",\n      \"unicode_decimal\": 59008\n    },\n    {\n      \"icon_id\": \"1261248\",\n      \"name\": \"cart-arrow-down\",\n      \"font_class\": \"cart-arrow-down\",\n      \"unicode\": \"e681\",\n      \"unicode_decimal\": 59009\n    },\n    {\n      \"icon_id\": \"1261249\",\n      \"name\": \"caret-square-o-down\",\n      \"font_class\": \"caret-square-o-down\",\n      \"unicode\": \"e682\",\n      \"unicode_decimal\": 59010\n    },\n    {\n      \"icon_id\": \"1261251\",\n      \"name\": \"cc-discover\",\n      \"font_class\": \"cc-discover\",\n      \"unicode\": \"e683\",\n      \"unicode_decimal\": 59011\n    },\n    {\n      \"icon_id\": \"1261252\",\n      \"name\": \"cc-diners-club\",\n      \"font_class\": \"cc-diners-club\",\n      \"unicode\": \"e684\",\n      \"unicode_decimal\": 59012\n    },\n    {\n      \"icon_id\": \"1261253\",\n      \"name\": \"cc-paypal\",\n      \"font_class\": \"cc-paypal\",\n      \"unicode\": \"e685\",\n      \"unicode_decimal\": 59013\n    },\n    {\n      \"icon_id\": \"1261254\",\n      \"name\": \"cc-jcb\",\n      \"font_class\": \"cc-jcb\",\n      \"unicode\": \"e686\",\n      \"unicode_decimal\": 59014\n    },\n    {\n      \"icon_id\": \"1261255\",\n      \"name\": \"cc-mastercard\",\n      \"font_class\": \"cc-mastercard\",\n      \"unicode\": \"e687\",\n      \"unicode_decimal\": 59015\n    },\n    {\n      \"icon_id\": \"1261256\",\n      \"name\": \"cc-amex\",\n      \"font_class\": \"cc-amex\",\n      \"unicode\": \"e688\",\n      \"unicode_decimal\": 59016\n    },\n    {\n      \"icon_id\": \"1261257\",\n      \"name\": \"cc\",\n      \"font_class\": \"cc\",\n      \"unicode\": \"e689\",\n      \"unicode_decimal\": 59017\n    },\n    {\n      \"icon_id\": \"1261258\",\n      \"name\": \"cc-visa\",\n      \"font_class\": \"cc-visa\",\n      \"unicode\": \"e68a\",\n      \"unicode_decimal\": 59018\n    },\n    {\n      \"icon_id\": \"1261259\",\n      \"name\": \"cc-stripe\",\n      \"font_class\": \"cc-stripe\",\n      \"unicode\": \"e68b\",\n      \"unicode_decimal\": 59019\n    },\n    {\n      \"icon_id\": \"1261260\",\n      \"name\": \"check\",\n      \"font_class\": \"check1\",\n      \"unicode\": \"e68c\",\n      \"unicode_decimal\": 59020\n    },\n    {\n      \"icon_id\": \"1261261\",\n      \"name\": \"certificate\",\n      \"font_class\": \"certificate\",\n      \"unicode\": \"e68d\",\n      \"unicode_decimal\": 59021\n    },\n    {\n      \"icon_id\": \"1261262\",\n      \"name\": \"check-circle\",\n      \"font_class\": \"check-circle\",\n      \"unicode\": \"e68e\",\n      \"unicode_decimal\": 59022\n    },\n    {\n      \"icon_id\": \"1261263\",\n      \"name\": \"check-circle-o\",\n      \"font_class\": \"check-circle-o\",\n      \"unicode\": \"e68f\",\n      \"unicode_decimal\": 59023\n    },\n    {\n      \"icon_id\": \"1261264\",\n      \"name\": \"chain-broken\",\n      \"font_class\": \"chain-broken\",\n      \"unicode\": \"e690\",\n      \"unicode_decimal\": 59024\n    },\n    {\n      \"icon_id\": \"1261265\",\n      \"name\": \"chain\",\n      \"font_class\": \"chain\",\n      \"unicode\": \"e691\",\n      \"unicode_decimal\": 59025\n    },\n    {\n      \"icon_id\": \"1261266\",\n      \"name\": \"chevron-circle-down\",\n      \"font_class\": \"chevron-circle-down\",\n      \"unicode\": \"e692\",\n      \"unicode_decimal\": 59026\n    },\n    {\n      \"icon_id\": \"1261267\",\n      \"name\": \"chevron-circle-left\",\n      \"font_class\": \"chevron-circle-left\",\n      \"unicode\": \"e693\",\n      \"unicode_decimal\": 59027\n    },\n    {\n      \"icon_id\": \"1261268\",\n      \"name\": \"chevron-circle-right\",\n      \"font_class\": \"chevron-circle-right\",\n      \"unicode\": \"e694\",\n      \"unicode_decimal\": 59028\n    },\n    {\n      \"icon_id\": \"1261269\",\n      \"name\": \"chevron-down\",\n      \"font_class\": \"chevron-down\",\n      \"unicode\": \"e695\",\n      \"unicode_decimal\": 59029\n    },\n    {\n      \"icon_id\": \"1261270\",\n      \"name\": \"chevron-circle-up\",\n      \"font_class\": \"chevron-circle-up\",\n      \"unicode\": \"e696\",\n      \"unicode_decimal\": 59030\n    },\n    {\n      \"icon_id\": \"1261271\",\n      \"name\": \"chevron-left\",\n      \"font_class\": \"chevron-left\",\n      \"unicode\": \"e697\",\n      \"unicode_decimal\": 59031\n    },\n    {\n      \"icon_id\": \"1261272\",\n      \"name\": \"chevron-right\",\n      \"font_class\": \"chevron-right\",\n      \"unicode\": \"e698\",\n      \"unicode_decimal\": 59032\n    },\n    {\n      \"icon_id\": \"1261273\",\n      \"name\": \"chevron-up\",\n      \"font_class\": \"chevron-up\",\n      \"unicode\": \"e699\",\n      \"unicode_decimal\": 59033\n    },\n    {\n      \"icon_id\": \"1261274\",\n      \"name\": \"child\",\n      \"font_class\": \"child\",\n      \"unicode\": \"e69a\",\n      \"unicode_decimal\": 59034\n    },\n    {\n      \"icon_id\": \"1261277\",\n      \"name\": \"circle-thin\",\n      \"font_class\": \"circle-thin\",\n      \"unicode\": \"e69b\",\n      \"unicode_decimal\": 59035\n    },\n    {\n      \"icon_id\": \"1261278\",\n      \"name\": \"circle-o-notch\",\n      \"font_class\": \"circle-o-notch\",\n      \"unicode\": \"e69c\",\n      \"unicode_decimal\": 59036\n    },\n    {\n      \"icon_id\": \"1261279\",\n      \"name\": \"chrome\",\n      \"font_class\": \"chrome\",\n      \"unicode\": \"e69d\",\n      \"unicode_decimal\": 59037\n    },\n    {\n      \"icon_id\": \"1261280\",\n      \"name\": \"circle-o\",\n      \"font_class\": \"circle-o\",\n      \"unicode\": \"e69e\",\n      \"unicode_decimal\": 59038\n    },\n    {\n      \"icon_id\": \"1261281\",\n      \"name\": \"clipboard\",\n      \"font_class\": \"clipboard\",\n      \"unicode\": \"e69f\",\n      \"unicode_decimal\": 59039\n    },\n    {\n      \"icon_id\": \"1261282\",\n      \"name\": \"circle\",\n      \"font_class\": \"circle\",\n      \"unicode\": \"e6a0\",\n      \"unicode_decimal\": 59040\n    },\n    {\n      \"icon_id\": \"1261283\",\n      \"name\": \"cloud\",\n      \"font_class\": \"cloud\",\n      \"unicode\": \"e6a1\",\n      \"unicode_decimal\": 59041\n    },\n    {\n      \"icon_id\": \"1261284\",\n      \"name\": \"close\",\n      \"font_class\": \"close\",\n      \"unicode\": \"e6a2\",\n      \"unicode_decimal\": 59042\n    },\n    {\n      \"icon_id\": \"1261285\",\n      \"name\": \"cloud-upload\",\n      \"font_class\": \"cloud-upload\",\n      \"unicode\": \"e6a3\",\n      \"unicode_decimal\": 59043\n    },\n    {\n      \"icon_id\": \"1261286\",\n      \"name\": \"clone\",\n      \"font_class\": \"clone\",\n      \"unicode\": \"e6a4\",\n      \"unicode_decimal\": 59044\n    },\n    {\n      \"icon_id\": \"1261287\",\n      \"name\": \"cloud-download\",\n      \"font_class\": \"cloud-download\",\n      \"unicode\": \"e6a5\",\n      \"unicode_decimal\": 59045\n    },\n    {\n      \"icon_id\": \"1261288\",\n      \"name\": \"clock-o\",\n      \"font_class\": \"clock-o1\",\n      \"unicode\": \"e6a6\",\n      \"unicode_decimal\": 59046\n    },\n    {\n      \"icon_id\": \"1261289\",\n      \"name\": \"cny\",\n      \"font_class\": \"cny\",\n      \"unicode\": \"e6a7\",\n      \"unicode_decimal\": 59047\n    },\n    {\n      \"icon_id\": \"1261480\",\n      \"name\": \"code-fork\",\n      \"font_class\": \"code-fork\",\n      \"unicode\": \"e6a8\",\n      \"unicode_decimal\": 59048\n    },\n    {\n      \"icon_id\": \"1261481\",\n      \"name\": \"codiepie\",\n      \"font_class\": \"codiepie\",\n      \"unicode\": \"e6a9\",\n      \"unicode_decimal\": 59049\n    },\n    {\n      \"icon_id\": \"1261482\",\n      \"name\": \"codepen\",\n      \"font_class\": \"codepen\",\n      \"unicode\": \"e6aa\",\n      \"unicode_decimal\": 59050\n    },\n    {\n      \"icon_id\": \"1261483\",\n      \"name\": \"code\",\n      \"font_class\": \"code\",\n      \"unicode\": \"e6ab\",\n      \"unicode_decimal\": 59051\n    },\n    {\n      \"icon_id\": \"1261484\",\n      \"name\": \"cog\",\n      \"font_class\": \"cog\",\n      \"unicode\": \"e6ac\",\n      \"unicode_decimal\": 59052\n    },\n    {\n      \"icon_id\": \"1261485\",\n      \"name\": \"coffee\",\n      \"font_class\": \"coffee\",\n      \"unicode\": \"e6ad\",\n      \"unicode_decimal\": 59053\n    },\n    {\n      \"icon_id\": \"1261486\",\n      \"name\": \"columns\",\n      \"font_class\": \"columns\",\n      \"unicode\": \"e6ae\",\n      \"unicode_decimal\": 59054\n    },\n    {\n      \"icon_id\": \"1261487\",\n      \"name\": \"comment-o\",\n      \"font_class\": \"comment-o\",\n      \"unicode\": \"e6af\",\n      \"unicode_decimal\": 59055\n    },\n    {\n      \"icon_id\": \"1261488\",\n      \"name\": \"commenting-o\",\n      \"font_class\": \"commenting-o\",\n      \"unicode\": \"e6b0\",\n      \"unicode_decimal\": 59056\n    },\n    {\n      \"icon_id\": \"1261489\",\n      \"name\": \"commenting\",\n      \"font_class\": \"commenting\",\n      \"unicode\": \"e6b1\",\n      \"unicode_decimal\": 59057\n    },\n    {\n      \"icon_id\": \"1261490\",\n      \"name\": \"comment\",\n      \"font_class\": \"comment\",\n      \"unicode\": \"e6b2\",\n      \"unicode_decimal\": 59058\n    },\n    {\n      \"icon_id\": \"1261491\",\n      \"name\": \"cogs\",\n      \"font_class\": \"cogs\",\n      \"unicode\": \"e6b3\",\n      \"unicode_decimal\": 59059\n    },\n    {\n      \"icon_id\": \"1261492\",\n      \"name\": \"compass\",\n      \"font_class\": \"compass\",\n      \"unicode\": \"e6b4\",\n      \"unicode_decimal\": 59060\n    },\n    {\n      \"icon_id\": \"1261493\",\n      \"name\": \"compress\",\n      \"font_class\": \"compress\",\n      \"unicode\": \"e6b5\",\n      \"unicode_decimal\": 59061\n    },\n    {\n      \"icon_id\": \"1261494\",\n      \"name\": \"comments\",\n      \"font_class\": \"comments\",\n      \"unicode\": \"e6b6\",\n      \"unicode_decimal\": 59062\n    },\n    {\n      \"icon_id\": \"1261495\",\n      \"name\": \"comments-o\",\n      \"font_class\": \"comments-o\",\n      \"unicode\": \"e6b7\",\n      \"unicode_decimal\": 59063\n    },\n    {\n      \"icon_id\": \"1261496\",\n      \"name\": \"connectdevelop\",\n      \"font_class\": \"connectdevelop\",\n      \"unicode\": \"e6b8\",\n      \"unicode_decimal\": 59064\n    },\n    {\n      \"icon_id\": \"1261497\",\n      \"name\": \"copy\",\n      \"font_class\": \"copy\",\n      \"unicode\": \"e6b9\",\n      \"unicode_decimal\": 59065\n    },\n    {\n      \"icon_id\": \"1261498\",\n      \"name\": \"contao\",\n      \"font_class\": \"contao\",\n      \"unicode\": \"e6ba\",\n      \"unicode_decimal\": 59066\n    },\n    {\n      \"icon_id\": \"1261500\",\n      \"name\": \"copyright\",\n      \"font_class\": \"copyright\",\n      \"unicode\": \"e6bb\",\n      \"unicode_decimal\": 59067\n    },\n    {\n      \"icon_id\": \"1261501\",\n      \"name\": \"credit-card-alt\",\n      \"font_class\": \"credit-card-alt\",\n      \"unicode\": \"e6bc\",\n      \"unicode_decimal\": 59068\n    },\n    {\n      \"icon_id\": \"1261502\",\n      \"name\": \"credit-card\",\n      \"font_class\": \"credit-card\",\n      \"unicode\": \"e6bd\",\n      \"unicode_decimal\": 59069\n    },\n    {\n      \"icon_id\": \"1261503\",\n      \"name\": \"crop\",\n      \"font_class\": \"crop\",\n      \"unicode\": \"e6be\",\n      \"unicode_decimal\": 59070\n    },\n    {\n      \"icon_id\": \"1261504\",\n      \"name\": \"creative-commons\",\n      \"font_class\": \"creative-commons\",\n      \"unicode\": \"e6bf\",\n      \"unicode_decimal\": 59071\n    },\n    {\n      \"icon_id\": \"1261505\",\n      \"name\": \"crosshairs\",\n      \"font_class\": \"crosshairs\",\n      \"unicode\": \"e6c0\",\n      \"unicode_decimal\": 59072\n    },\n    {\n      \"icon_id\": \"1261506\",\n      \"name\": \"css3\",\n      \"font_class\": \"css3\",\n      \"unicode\": \"e6c1\",\n      \"unicode_decimal\": 59073\n    },\n    {\n      \"icon_id\": \"1261507\",\n      \"name\": \"cube\",\n      \"font_class\": \"cube\",\n      \"unicode\": \"e6c2\",\n      \"unicode_decimal\": 59074\n    },\n    {\n      \"icon_id\": \"1261508\",\n      \"name\": \"cutlery\",\n      \"font_class\": \"cutlery\",\n      \"unicode\": \"e6c3\",\n      \"unicode_decimal\": 59075\n    },\n    {\n      \"icon_id\": \"1261509\",\n      \"name\": \"cut\",\n      \"font_class\": \"cut\",\n      \"unicode\": \"e6c4\",\n      \"unicode_decimal\": 59076\n    },\n    {\n      \"icon_id\": \"1261510\",\n      \"name\": \"dashboard\",\n      \"font_class\": \"dashboard\",\n      \"unicode\": \"e6c5\",\n      \"unicode_decimal\": 59077\n    },\n    {\n      \"icon_id\": \"1261511\",\n      \"name\": \"dashcube\",\n      \"font_class\": \"dashcube\",\n      \"unicode\": \"e6c6\",\n      \"unicode_decimal\": 59078\n    },\n    {\n      \"icon_id\": \"1261512\",\n      \"name\": \"cubes\",\n      \"font_class\": \"cubes\",\n      \"unicode\": \"e6c7\",\n      \"unicode_decimal\": 59079\n    },\n    {\n      \"icon_id\": \"1261513\",\n      \"name\": \"database\",\n      \"font_class\": \"database\",\n      \"unicode\": \"e6c8\",\n      \"unicode_decimal\": 59080\n    },\n    {\n      \"icon_id\": \"1261514\",\n      \"name\": \"deaf\",\n      \"font_class\": \"deaf\",\n      \"unicode\": \"e6c9\",\n      \"unicode_decimal\": 59081\n    },\n    {\n      \"icon_id\": \"1261544\",\n      \"name\": \"delicious\",\n      \"font_class\": \"delicious\",\n      \"unicode\": \"e6ca\",\n      \"unicode_decimal\": 59082\n    },\n    {\n      \"icon_id\": \"1261545\",\n      \"name\": \"deviantart\",\n      \"font_class\": \"deviantart\",\n      \"unicode\": \"e6cb\",\n      \"unicode_decimal\": 59083\n    },\n    {\n      \"icon_id\": \"1261546\",\n      \"name\": \"diamond\",\n      \"font_class\": \"diamond\",\n      \"unicode\": \"e6cc\",\n      \"unicode_decimal\": 59084\n    },\n    {\n      \"icon_id\": \"1261547\",\n      \"name\": \"dedent\",\n      \"font_class\": \"dedent\",\n      \"unicode\": \"e6cd\",\n      \"unicode_decimal\": 59085\n    },\n    {\n      \"icon_id\": \"1261548\",\n      \"name\": \"desktop\",\n      \"font_class\": \"desktop\",\n      \"unicode\": \"e6ce\",\n      \"unicode_decimal\": 59086\n    },\n    {\n      \"icon_id\": \"1261549\",\n      \"name\": \"deafness\",\n      \"font_class\": \"deafness\",\n      \"unicode\": \"e6cf\",\n      \"unicode_decimal\": 59087\n    },\n    {\n      \"icon_id\": \"1261550\",\n      \"name\": \"drivers-license-o\",\n      \"font_class\": \"drivers-license-o\",\n      \"unicode\": \"e6d0\",\n      \"unicode_decimal\": 59088\n    },\n    {\n      \"icon_id\": \"1261551\",\n      \"name\": \"digg\",\n      \"font_class\": \"digg\",\n      \"unicode\": \"e6d1\",\n      \"unicode_decimal\": 59089\n    },\n    {\n      \"icon_id\": \"1261552\",\n      \"name\": \"dribbble\",\n      \"font_class\": \"dribbble\",\n      \"unicode\": \"e6d2\",\n      \"unicode_decimal\": 59090\n    },\n    {\n      \"icon_id\": \"1261553\",\n      \"name\": \"download\",\n      \"font_class\": \"download\",\n      \"unicode\": \"e6d3\",\n      \"unicode_decimal\": 59091\n    },\n    {\n      \"icon_id\": \"1261554\",\n      \"name\": \"dollar\",\n      \"font_class\": \"dollar\",\n      \"unicode\": \"e6d4\",\n      \"unicode_decimal\": 59092\n    },\n    {\n      \"icon_id\": \"1261555\",\n      \"name\": \"dot-circle-o\",\n      \"font_class\": \"dot-circle-o\",\n      \"unicode\": \"e6d5\",\n      \"unicode_decimal\": 59093\n    },\n    {\n      \"icon_id\": \"1261556\",\n      \"name\": \"edit\",\n      \"font_class\": \"edit\",\n      \"unicode\": \"e6d6\",\n      \"unicode_decimal\": 59094\n    },\n    {\n      \"icon_id\": \"1261557\",\n      \"name\": \"dropbox\",\n      \"font_class\": \"dropbox\",\n      \"unicode\": \"e6d7\",\n      \"unicode_decimal\": 59095\n    },\n    {\n      \"icon_id\": \"1261558\",\n      \"name\": \"edge\",\n      \"font_class\": \"edge\",\n      \"unicode\": \"e6d8\",\n      \"unicode_decimal\": 59096\n    },\n    {\n      \"icon_id\": \"1261559\",\n      \"name\": \"drupal\",\n      \"font_class\": \"drupal\",\n      \"unicode\": \"e6d9\",\n      \"unicode_decimal\": 59097\n    },\n    {\n      \"icon_id\": \"1261560\",\n      \"name\": \"drivers-license\",\n      \"font_class\": \"drivers-license\",\n      \"unicode\": \"e6da\",\n      \"unicode_decimal\": 59098\n    },\n    {\n      \"icon_id\": \"1261563\",\n      \"name\": \"eject\",\n      \"font_class\": \"eject\",\n      \"unicode\": \"e6db\",\n      \"unicode_decimal\": 59099\n    },\n    {\n      \"icon_id\": \"1261564\",\n      \"name\": \"ellipsis-h\",\n      \"font_class\": \"ellipsis-h\",\n      \"unicode\": \"e6dc\",\n      \"unicode_decimal\": 59100\n    },\n    {\n      \"icon_id\": \"1261565\",\n      \"name\": \"envelope-o\",\n      \"font_class\": \"envelope-o\",\n      \"unicode\": \"e6dd\",\n      \"unicode_decimal\": 59101\n    },\n    {\n      \"icon_id\": \"1261566\",\n      \"name\": \"ellipsis-v\",\n      \"font_class\": \"ellipsis-v\",\n      \"unicode\": \"e6de\",\n      \"unicode_decimal\": 59102\n    },\n    {\n      \"icon_id\": \"1261567\",\n      \"name\": \"eercast\",\n      \"font_class\": \"eercast\",\n      \"unicode\": \"e6df\",\n      \"unicode_decimal\": 59103\n    },\n    {\n      \"icon_id\": \"1261568\",\n      \"name\": \"empire\",\n      \"font_class\": \"empire\",\n      \"unicode\": \"e6e0\",\n      \"unicode_decimal\": 59104\n    },\n    {\n      \"icon_id\": \"1261569\",\n      \"name\": \"envelope-open-o\",\n      \"font_class\": \"envelope-open-o\",\n      \"unicode\": \"e6e1\",\n      \"unicode_decimal\": 59105\n    },\n    {\n      \"icon_id\": \"1261570\",\n      \"name\": \"envelope-open\",\n      \"font_class\": \"envelope-open\",\n      \"unicode\": \"e6e2\",\n      \"unicode_decimal\": 59106\n    },\n    {\n      \"icon_id\": \"1261571\",\n      \"name\": \"envelope\",\n      \"font_class\": \"envelope\",\n      \"unicode\": \"e6e3\",\n      \"unicode_decimal\": 59107\n    },\n    {\n      \"icon_id\": \"1261572\",\n      \"name\": \"envelope-square\",\n      \"font_class\": \"envelope-square\",\n      \"unicode\": \"e6e4\",\n      \"unicode_decimal\": 59108\n    },\n    {\n      \"icon_id\": \"1261573\",\n      \"name\": \"envira\",\n      \"font_class\": \"envira\",\n      \"unicode\": \"e6e5\",\n      \"unicode_decimal\": 59109\n    },\n    {\n      \"icon_id\": \"1261574\",\n      \"name\": \"etsy\",\n      \"font_class\": \"etsy\",\n      \"unicode\": \"e6e6\",\n      \"unicode_decimal\": 59110\n    },\n    {\n      \"icon_id\": \"1261575\",\n      \"name\": \"eraser\",\n      \"font_class\": \"eraser\",\n      \"unicode\": \"e6e7\",\n      \"unicode_decimal\": 59111\n    },\n    {\n      \"icon_id\": \"1261576\",\n      \"name\": \"eur\",\n      \"font_class\": \"eur\",\n      \"unicode\": \"e6e8\",\n      \"unicode_decimal\": 59112\n    },\n    {\n      \"icon_id\": \"1261580\",\n      \"name\": \"euro\",\n      \"font_class\": \"euro\",\n      \"unicode\": \"e6e9\",\n      \"unicode_decimal\": 59113\n    },\n    {\n      \"icon_id\": \"1261581\",\n      \"name\": \"exchange\",\n      \"font_class\": \"exchange\",\n      \"unicode\": \"e6ea\",\n      \"unicode_decimal\": 59114\n    },\n    {\n      \"icon_id\": \"1261582\",\n      \"name\": \"exclamation-triangle\",\n      \"font_class\": \"exclamation-triangle\",\n      \"unicode\": \"e6eb\",\n      \"unicode_decimal\": 59115\n    },\n    {\n      \"icon_id\": \"1261583\",\n      \"name\": \"expand\",\n      \"font_class\": \"expand\",\n      \"unicode\": \"e6ec\",\n      \"unicode_decimal\": 59116\n    },\n    {\n      \"icon_id\": \"1261584\",\n      \"name\": \"exclamation\",\n      \"font_class\": \"exclamation\",\n      \"unicode\": \"e6ed\",\n      \"unicode_decimal\": 59117\n    },\n    {\n      \"icon_id\": \"1261585\",\n      \"name\": \"exclamation-circle\",\n      \"font_class\": \"exclamation-circle\",\n      \"unicode\": \"e6ee\",\n      \"unicode_decimal\": 59118\n    },\n    {\n      \"icon_id\": \"1261586\",\n      \"name\": \"expeditedssl\",\n      \"font_class\": \"expeditedssl\",\n      \"unicode\": \"e6ef\",\n      \"unicode_decimal\": 59119\n    },\n    {\n      \"icon_id\": \"1261587\",\n      \"name\": \"external-link-square\",\n      \"font_class\": \"external-link-square\",\n      \"unicode\": \"e6f0\",\n      \"unicode_decimal\": 59120\n    },\n    {\n      \"icon_id\": \"1261588\",\n      \"name\": \"eyedropper\",\n      \"font_class\": \"eyedropper\",\n      \"unicode\": \"e6f1\",\n      \"unicode_decimal\": 59121\n    },\n    {\n      \"icon_id\": \"1261589\",\n      \"name\": \"external-link\",\n      \"font_class\": \"external-link\",\n      \"unicode\": \"e6f2\",\n      \"unicode_decimal\": 59122\n    },\n    {\n      \"icon_id\": \"1261590\",\n      \"name\": \"eye\",\n      \"font_class\": \"eye\",\n      \"unicode\": \"e6f3\",\n      \"unicode_decimal\": 59123\n    },\n    {\n      \"icon_id\": \"1261591\",\n      \"name\": \"eye-slash\",\n      \"font_class\": \"eye-slash\",\n      \"unicode\": \"e6f4\",\n      \"unicode_decimal\": 59124\n    },\n    {\n      \"icon_id\": \"1261592\",\n      \"name\": \"fa\",\n      \"font_class\": \"fa\",\n      \"unicode\": \"e6f5\",\n      \"unicode_decimal\": 59125\n    },\n    {\n      \"icon_id\": \"1261593\",\n      \"name\": \"facebook-official\",\n      \"font_class\": \"facebook-official\",\n      \"unicode\": \"e6f6\",\n      \"unicode_decimal\": 59126\n    },\n    {\n      \"icon_id\": \"1261594\",\n      \"name\": \"facebook-f\",\n      \"font_class\": \"facebook-f\",\n      \"unicode\": \"e6f7\",\n      \"unicode_decimal\": 59127\n    },\n    {\n      \"icon_id\": \"1261595\",\n      \"name\": \"facebook-square\",\n      \"font_class\": \"facebook-square\",\n      \"unicode\": \"e6f8\",\n      \"unicode_decimal\": 59128\n    },\n    {\n      \"icon_id\": \"1261596\",\n      \"name\": \"facebook\",\n      \"font_class\": \"facebook\",\n      \"unicode\": \"e6f9\",\n      \"unicode_decimal\": 59129\n    },\n    {\n      \"icon_id\": \"1261597\",\n      \"name\": \"fast-backward\",\n      \"font_class\": \"fast-backward\",\n      \"unicode\": \"e6fa\",\n      \"unicode_decimal\": 59130\n    },\n    {\n      \"icon_id\": \"1261598\",\n      \"name\": \"fast-forward\",\n      \"font_class\": \"fast-forward\",\n      \"unicode\": \"e6fb\",\n      \"unicode_decimal\": 59131\n    },\n    {\n      \"icon_id\": \"1261635\",\n      \"name\": \"feed\",\n      \"font_class\": \"feed\",\n      \"unicode\": \"e6fc\",\n      \"unicode_decimal\": 59132\n    },\n    {\n      \"icon_id\": \"1261636\",\n      \"name\": \"file-archive-o\",\n      \"font_class\": \"file-archive-o\",\n      \"unicode\": \"e6fd\",\n      \"unicode_decimal\": 59133\n    },\n    {\n      \"icon_id\": \"1261637\",\n      \"name\": \"female\",\n      \"font_class\": \"female\",\n      \"unicode\": \"e6fe\",\n      \"unicode_decimal\": 59134\n    },\n    {\n      \"icon_id\": \"1261638\",\n      \"name\": \"file-audio-o\",\n      \"font_class\": \"file-audio-o\",\n      \"unicode\": \"e6ff\",\n      \"unicode_decimal\": 59135\n    },\n    {\n      \"icon_id\": \"1261639\",\n      \"name\": \"fighter-jet\",\n      \"font_class\": \"fighter-jet\",\n      \"unicode\": \"e700\",\n      \"unicode_decimal\": 59136\n    },\n    {\n      \"icon_id\": \"1261641\",\n      \"name\": \"fax\",\n      \"font_class\": \"fax\",\n      \"unicode\": \"e701\",\n      \"unicode_decimal\": 59137\n    },\n    {\n      \"icon_id\": \"1261644\",\n      \"name\": \"file-code-o\",\n      \"font_class\": \"file-code-o\",\n      \"unicode\": \"e702\",\n      \"unicode_decimal\": 59138\n    },\n    {\n      \"icon_id\": \"1261645\",\n      \"name\": \"file-movie-o\",\n      \"font_class\": \"file-movie-o\",\n      \"unicode\": \"e703\",\n      \"unicode_decimal\": 59139\n    },\n    {\n      \"icon_id\": \"1261646\",\n      \"name\": \"file-image-o\",\n      \"font_class\": \"file-image-o\",\n      \"unicode\": \"e704\",\n      \"unicode_decimal\": 59140\n    },\n    {\n      \"icon_id\": \"1261647\",\n      \"name\": \"file-excel-o\",\n      \"font_class\": \"file-excel-o\",\n      \"unicode\": \"e705\",\n      \"unicode_decimal\": 59141\n    },\n    {\n      \"icon_id\": \"1261648\",\n      \"name\": \"file-o\",\n      \"font_class\": \"file-o\",\n      \"unicode\": \"e706\",\n      \"unicode_decimal\": 59142\n    },\n    {\n      \"icon_id\": \"1261649\",\n      \"name\": \"file-photo-o\",\n      \"font_class\": \"file-photo-o\",\n      \"unicode\": \"e707\",\n      \"unicode_decimal\": 59143\n    },\n    {\n      \"icon_id\": \"1261650\",\n      \"name\": \"file-pdf-o\",\n      \"font_class\": \"file-pdf-o\",\n      \"unicode\": \"e708\",\n      \"unicode_decimal\": 59144\n    },\n    {\n      \"icon_id\": \"1261652\",\n      \"name\": \"file-picture-o\",\n      \"font_class\": \"file-picture-o\",\n      \"unicode\": \"e709\",\n      \"unicode_decimal\": 59145\n    },\n    {\n      \"icon_id\": \"1261653\",\n      \"name\": \"file-sound-o\",\n      \"font_class\": \"file-sound-o\",\n      \"unicode\": \"e70a\",\n      \"unicode_decimal\": 59146\n    },\n    {\n      \"icon_id\": \"1261654\",\n      \"name\": \"file-powerpoint-o\",\n      \"font_class\": \"file-powerpoint-o\",\n      \"unicode\": \"e70b\",\n      \"unicode_decimal\": 59147\n    },\n    {\n      \"icon_id\": \"1261656\",\n      \"name\": \"file-text\",\n      \"font_class\": \"file-text\",\n      \"unicode\": \"e70c\",\n      \"unicode_decimal\": 59148\n    },\n    {\n      \"icon_id\": \"1261657\",\n      \"name\": \"file-text-o\",\n      \"font_class\": \"file-text-o\",\n      \"unicode\": \"e70d\",\n      \"unicode_decimal\": 59149\n    },\n    {\n      \"icon_id\": \"1261695\",\n      \"name\": \"file\",\n      \"font_class\": \"file\",\n      \"unicode\": \"e70e\",\n      \"unicode_decimal\": 59150\n    },\n    {\n      \"icon_id\": \"1261696\",\n      \"name\": \"file-video-o\",\n      \"font_class\": \"file-video-o\",\n      \"unicode\": \"e70f\",\n      \"unicode_decimal\": 59151\n    },\n    {\n      \"icon_id\": \"1261697\",\n      \"name\": \"files-o\",\n      \"font_class\": \"files-o\",\n      \"unicode\": \"e710\",\n      \"unicode_decimal\": 59152\n    },\n    {\n      \"icon_id\": \"1261698\",\n      \"name\": \"file-zip-o\",\n      \"font_class\": \"file-zip-o\",\n      \"unicode\": \"e711\",\n      \"unicode_decimal\": 59153\n    },\n    {\n      \"icon_id\": \"1261699\",\n      \"name\": \"file-word-o\",\n      \"font_class\": \"file-word-o\",\n      \"unicode\": \"e712\",\n      \"unicode_decimal\": 59154\n    },\n    {\n      \"icon_id\": \"1261700\",\n      \"name\": \"film\",\n      \"font_class\": \"film\",\n      \"unicode\": \"e713\",\n      \"unicode_decimal\": 59155\n    },\n    {\n      \"icon_id\": \"1261701\",\n      \"name\": \"filter\",\n      \"font_class\": \"filter\",\n      \"unicode\": \"e714\",\n      \"unicode_decimal\": 59156\n    },\n    {\n      \"icon_id\": \"1261702\",\n      \"name\": \"fire\",\n      \"font_class\": \"fire\",\n      \"unicode\": \"e715\",\n      \"unicode_decimal\": 59157\n    },\n    {\n      \"icon_id\": \"1261703\",\n      \"name\": \"fire-extinguisher\",\n      \"font_class\": \"fire-extinguisher\",\n      \"unicode\": \"e716\",\n      \"unicode_decimal\": 59158\n    },\n    {\n      \"icon_id\": \"1261704\",\n      \"name\": \"flag-checkered\",\n      \"font_class\": \"flag-checkered\",\n      \"unicode\": \"e717\",\n      \"unicode_decimal\": 59159\n    },\n    {\n      \"icon_id\": \"1261705\",\n      \"name\": \"firefox\",\n      \"font_class\": \"firefox\",\n      \"unicode\": \"e718\",\n      \"unicode_decimal\": 59160\n    },\n    {\n      \"icon_id\": \"1261706\",\n      \"name\": \"first-order\",\n      \"font_class\": \"first-order\",\n      \"unicode\": \"e719\",\n      \"unicode_decimal\": 59161\n    },\n    {\n      \"icon_id\": \"1261707\",\n      \"name\": \"flash\",\n      \"font_class\": \"flash\",\n      \"unicode\": \"e71a\",\n      \"unicode_decimal\": 59162\n    },\n    {\n      \"icon_id\": \"1261708\",\n      \"name\": \"flag\",\n      \"font_class\": \"flag\",\n      \"unicode\": \"e71b\",\n      \"unicode_decimal\": 59163\n    },\n    {\n      \"icon_id\": \"1261709\",\n      \"name\": \"flag-o\",\n      \"font_class\": \"flag-o\",\n      \"unicode\": \"e71c\",\n      \"unicode_decimal\": 59164\n    },\n    {\n      \"icon_id\": \"1261710\",\n      \"name\": \"flask\",\n      \"font_class\": \"flask\",\n      \"unicode\": \"e71d\",\n      \"unicode_decimal\": 59165\n    },\n    {\n      \"icon_id\": \"1261711\",\n      \"name\": \"flickr\",\n      \"font_class\": \"flickr\",\n      \"unicode\": \"e71e\",\n      \"unicode_decimal\": 59166\n    },\n    {\n      \"icon_id\": \"1261714\",\n      \"name\": \"folder-open\",\n      \"font_class\": \"folder-open\",\n      \"unicode\": \"e71f\",\n      \"unicode_decimal\": 59167\n    },\n    {\n      \"icon_id\": \"1261715\",\n      \"name\": \"folder-o\",\n      \"font_class\": \"folder-o\",\n      \"unicode\": \"e720\",\n      \"unicode_decimal\": 59168\n    },\n    {\n      \"icon_id\": \"1261716\",\n      \"name\": \"font-awesome\",\n      \"font_class\": \"font-awesome\",\n      \"unicode\": \"e721\",\n      \"unicode_decimal\": 59169\n    },\n    {\n      \"icon_id\": \"1261717\",\n      \"name\": \"folder\",\n      \"font_class\": \"folder\",\n      \"unicode\": \"e722\",\n      \"unicode_decimal\": 59170\n    },\n    {\n      \"icon_id\": \"1261718\",\n      \"name\": \"floppy-o\",\n      \"font_class\": \"floppy-o\",\n      \"unicode\": \"e723\",\n      \"unicode_decimal\": 59171\n    },\n    {\n      \"icon_id\": \"1261719\",\n      \"name\": \"folder-open-o\",\n      \"font_class\": \"folder-open-o\",\n      \"unicode\": \"e724\",\n      \"unicode_decimal\": 59172\n    },\n    {\n      \"icon_id\": \"1261720\",\n      \"name\": \"fonticons\",\n      \"font_class\": \"fonticons\",\n      \"unicode\": \"e725\",\n      \"unicode_decimal\": 59173\n    },\n    {\n      \"icon_id\": \"1261721\",\n      \"name\": \"font\",\n      \"font_class\": \"font\",\n      \"unicode\": \"e726\",\n      \"unicode_decimal\": 59174\n    },\n    {\n      \"icon_id\": \"1261722\",\n      \"name\": \"forumbee\",\n      \"font_class\": \"forumbee\",\n      \"unicode\": \"e727\",\n      \"unicode_decimal\": 59175\n    },\n    {\n      \"icon_id\": \"1261723\",\n      \"name\": \"fort-awesome\",\n      \"font_class\": \"fort-awesome\",\n      \"unicode\": \"e728\",\n      \"unicode_decimal\": 59176\n    },\n    {\n      \"icon_id\": \"1261724\",\n      \"name\": \"forward\",\n      \"font_class\": \"forward\",\n      \"unicode\": \"e729\",\n      \"unicode_decimal\": 59177\n    },\n    {\n      \"icon_id\": \"1261725\",\n      \"name\": \"foursquare\",\n      \"font_class\": \"foursquare\",\n      \"unicode\": \"e72a\",\n      \"unicode_decimal\": 59178\n    },\n    {\n      \"icon_id\": \"1261726\",\n      \"name\": \"free-code-camp\",\n      \"font_class\": \"free-code-camp\",\n      \"unicode\": \"e72b\",\n      \"unicode_decimal\": 59179\n    },\n    {\n      \"icon_id\": \"1261727\",\n      \"name\": \"frown-o\",\n      \"font_class\": \"frown-o\",\n      \"unicode\": \"e72c\",\n      \"unicode_decimal\": 59180\n    },\n    {\n      \"icon_id\": \"1261728\",\n      \"name\": \"futbol-o\",\n      \"font_class\": \"futbol-o\",\n      \"unicode\": \"e72d\",\n      \"unicode_decimal\": 59181\n    },\n    {\n      \"icon_id\": \"1261729\",\n      \"name\": \"gamepad\",\n      \"font_class\": \"gamepad\",\n      \"unicode\": \"e72e\",\n      \"unicode_decimal\": 59182\n    },\n    {\n      \"icon_id\": \"1261730\",\n      \"name\": \"gavel\",\n      \"font_class\": \"gavel\",\n      \"unicode\": \"e72f\",\n      \"unicode_decimal\": 59183\n    },\n    {\n      \"icon_id\": \"1261731\",\n      \"name\": \"gbp\",\n      \"font_class\": \"gbp\",\n      \"unicode\": \"e730\",\n      \"unicode_decimal\": 59184\n    },\n    {\n      \"icon_id\": \"1261732\",\n      \"name\": \"ge\",\n      \"font_class\": \"ge\",\n      \"unicode\": \"e731\",\n      \"unicode_decimal\": 59185\n    },\n    {\n      \"icon_id\": \"1261733\",\n      \"name\": \"gear\",\n      \"font_class\": \"gear\",\n      \"unicode\": \"e732\",\n      \"unicode_decimal\": 59186\n    },\n    {\n      \"icon_id\": \"1261734\",\n      \"name\": \"gears\",\n      \"font_class\": \"gears\",\n      \"unicode\": \"e733\",\n      \"unicode_decimal\": 59187\n    },\n    {\n      \"icon_id\": \"1261735\",\n      \"name\": \"genderless\",\n      \"font_class\": \"genderless\",\n      \"unicode\": \"e734\",\n      \"unicode_decimal\": 59188\n    },\n    {\n      \"icon_id\": \"1261736\",\n      \"name\": \"get-pocket\",\n      \"font_class\": \"get-pocket\",\n      \"unicode\": \"e735\",\n      \"unicode_decimal\": 59189\n    },\n    {\n      \"icon_id\": \"1261737\",\n      \"name\": \"gg-circle\",\n      \"font_class\": \"gg-circle\",\n      \"unicode\": \"e736\",\n      \"unicode_decimal\": 59190\n    },\n    {\n      \"icon_id\": \"1261746\",\n      \"name\": \"gift\",\n      \"font_class\": \"gift\",\n      \"unicode\": \"e737\",\n      \"unicode_decimal\": 59191\n    },\n    {\n      \"icon_id\": \"1261747\",\n      \"name\": \"gg\",\n      \"font_class\": \"gg\",\n      \"unicode\": \"e738\",\n      \"unicode_decimal\": 59192\n    },\n    {\n      \"icon_id\": \"1261748\",\n      \"name\": \"git-square\",\n      \"font_class\": \"git-square\",\n      \"unicode\": \"e739\",\n      \"unicode_decimal\": 59193\n    },\n    {\n      \"icon_id\": \"1261749\",\n      \"name\": \"git\",\n      \"font_class\": \"git\",\n      \"unicode\": \"e73a\",\n      \"unicode_decimal\": 59194\n    },\n    {\n      \"icon_id\": \"1261750\",\n      \"name\": \"github-alt\",\n      \"font_class\": \"github-alt\",\n      \"unicode\": \"e73b\",\n      \"unicode_decimal\": 59195\n    },\n    {\n      \"icon_id\": \"1261751\",\n      \"name\": \"github-square\",\n      \"font_class\": \"github-square\",\n      \"unicode\": \"e73c\",\n      \"unicode_decimal\": 59196\n    },\n    {\n      \"icon_id\": \"1261752\",\n      \"name\": \"github\",\n      \"font_class\": \"github\",\n      \"unicode\": \"e73d\",\n      \"unicode_decimal\": 59197\n    },\n    {\n      \"icon_id\": \"1261753\",\n      \"name\": \"gitlab\",\n      \"font_class\": \"gitlab\",\n      \"unicode\": \"e73e\",\n      \"unicode_decimal\": 59198\n    },\n    {\n      \"icon_id\": \"1261754\",\n      \"name\": \"gittip\",\n      \"font_class\": \"gittip\",\n      \"unicode\": \"e73f\",\n      \"unicode_decimal\": 59199\n    },\n    {\n      \"icon_id\": \"1261755\",\n      \"name\": \"glass\",\n      \"font_class\": \"glass\",\n      \"unicode\": \"e740\",\n      \"unicode_decimal\": 59200\n    },\n    {\n      \"icon_id\": \"1261756\",\n      \"name\": \"glide-g\",\n      \"font_class\": \"glide-g\",\n      \"unicode\": \"e741\",\n      \"unicode_decimal\": 59201\n    },\n    {\n      \"icon_id\": \"1261757\",\n      \"name\": \"glide\",\n      \"font_class\": \"glide\",\n      \"unicode\": \"e742\",\n      \"unicode_decimal\": 59202\n    },\n    {\n      \"icon_id\": \"1261758\",\n      \"name\": \"globe\",\n      \"font_class\": \"globe\",\n      \"unicode\": \"e743\",\n      \"unicode_decimal\": 59203\n    },\n    {\n      \"icon_id\": \"1261759\",\n      \"name\": \"google-plus-circle\",\n      \"font_class\": \"google-plus-circle\",\n      \"unicode\": \"e744\",\n      \"unicode_decimal\": 59204\n    },\n    {\n      \"icon_id\": \"1261760\",\n      \"name\": \"google-plus-official\",\n      \"font_class\": \"google-plus-official\",\n      \"unicode\": \"e745\",\n      \"unicode_decimal\": 59205\n    },\n    {\n      \"icon_id\": \"1261761\",\n      \"name\": \"google-plus-square\",\n      \"font_class\": \"google-plus-square\",\n      \"unicode\": \"e746\",\n      \"unicode_decimal\": 59206\n    },\n    {\n      \"icon_id\": \"1261762\",\n      \"name\": \"google-plus\",\n      \"font_class\": \"google-plus\",\n      \"unicode\": \"e747\",\n      \"unicode_decimal\": 59207\n    },\n    {\n      \"icon_id\": \"1261763\",\n      \"name\": \"google-wallet\",\n      \"font_class\": \"google-wallet\",\n      \"unicode\": \"e748\",\n      \"unicode_decimal\": 59208\n    },\n    {\n      \"icon_id\": \"1261764\",\n      \"name\": \"google\",\n      \"font_class\": \"google\",\n      \"unicode\": \"e749\",\n      \"unicode_decimal\": 59209\n    },\n    {\n      \"icon_id\": \"1261765\",\n      \"name\": \"graduation-cap\",\n      \"font_class\": \"graduation-cap\",\n      \"unicode\": \"e74a\",\n      \"unicode_decimal\": 59210\n    },\n    {\n      \"icon_id\": \"1261766\",\n      \"name\": \"gratipay\",\n      \"font_class\": \"gratipay\",\n      \"unicode\": \"e74b\",\n      \"unicode_decimal\": 59211\n    },\n    {\n      \"icon_id\": \"1261767\",\n      \"name\": \"grav\",\n      \"font_class\": \"grav\",\n      \"unicode\": \"e74c\",\n      \"unicode_decimal\": 59212\n    },\n    {\n      \"icon_id\": \"1261768\",\n      \"name\": \"group\",\n      \"font_class\": \"group\",\n      \"unicode\": \"e74d\",\n      \"unicode_decimal\": 59213\n    },\n    {\n      \"icon_id\": \"1261774\",\n      \"name\": \"h-square\",\n      \"font_class\": \"h-square\",\n      \"unicode\": \"e74e\",\n      \"unicode_decimal\": 59214\n    },\n    {\n      \"icon_id\": \"1261775\",\n      \"name\": \"hacker-news\",\n      \"font_class\": \"hacker-news\",\n      \"unicode\": \"e74f\",\n      \"unicode_decimal\": 59215\n    },\n    {\n      \"icon_id\": \"1261776\",\n      \"name\": \"hand-grab-o\",\n      \"font_class\": \"hand-grab-o\",\n      \"unicode\": \"e750\",\n      \"unicode_decimal\": 59216\n    },\n    {\n      \"icon_id\": \"1261777\",\n      \"name\": \"hand-o-left\",\n      \"font_class\": \"hand-o-left\",\n      \"unicode\": \"e751\",\n      \"unicode_decimal\": 59217\n    },\n    {\n      \"icon_id\": \"1261778\",\n      \"name\": \"hand-lizard-o\",\n      \"font_class\": \"hand-lizard-o\",\n      \"unicode\": \"e752\",\n      \"unicode_decimal\": 59218\n    },\n    {\n      \"icon_id\": \"1261779\",\n      \"name\": \"hand-o-down\",\n      \"font_class\": \"hand-o-down\",\n      \"unicode\": \"e753\",\n      \"unicode_decimal\": 59219\n    },\n    {\n      \"icon_id\": \"1261780\",\n      \"name\": \"hand-o-right\",\n      \"font_class\": \"hand-o-right\",\n      \"unicode\": \"e754\",\n      \"unicode_decimal\": 59220\n    },\n    {\n      \"icon_id\": \"1261781\",\n      \"name\": \"hand-o-up\",\n      \"font_class\": \"hand-o-up\",\n      \"unicode\": \"e755\",\n      \"unicode_decimal\": 59221\n    },\n    {\n      \"icon_id\": \"1261782\",\n      \"name\": \"hand-paper-o\",\n      \"font_class\": \"hand-paper-o\",\n      \"unicode\": \"e756\",\n      \"unicode_decimal\": 59222\n    },\n    {\n      \"icon_id\": \"1261783\",\n      \"name\": \"hand-pointer-o\",\n      \"font_class\": \"hand-pointer-o\",\n      \"unicode\": \"e757\",\n      \"unicode_decimal\": 59223\n    },\n    {\n      \"icon_id\": \"1261784\",\n      \"name\": \"hand-peace-o\",\n      \"font_class\": \"hand-peace-o\",\n      \"unicode\": \"e758\",\n      \"unicode_decimal\": 59224\n    },\n    {\n      \"icon_id\": \"1261785\",\n      \"name\": \"hand-spock-o\",\n      \"font_class\": \"hand-spock-o\",\n      \"unicode\": \"e759\",\n      \"unicode_decimal\": 59225\n    },\n    {\n      \"icon_id\": \"1261787\",\n      \"name\": \"hand-rock-o\",\n      \"font_class\": \"hand-rock-o\",\n      \"unicode\": \"e75a\",\n      \"unicode_decimal\": 59226\n    },\n    {\n      \"icon_id\": \"1261788\",\n      \"name\": \"hand-scissors-o\",\n      \"font_class\": \"hand-scissors-o\",\n      \"unicode\": \"e75b\",\n      \"unicode_decimal\": 59227\n    },\n    {\n      \"icon_id\": \"1261789\",\n      \"name\": \"hand-stop-o\",\n      \"font_class\": \"hand-stop-o\",\n      \"unicode\": \"e75c\",\n      \"unicode_decimal\": 59228\n    },\n    {\n      \"icon_id\": \"1261790\",\n      \"name\": \"hard-of-hearing\",\n      \"font_class\": \"hard-of-hearing\",\n      \"unicode\": \"e75d\",\n      \"unicode_decimal\": 59229\n    },\n    {\n      \"icon_id\": \"1261791\",\n      \"name\": \"handshake-o\",\n      \"font_class\": \"handshake-o\",\n      \"unicode\": \"e75e\",\n      \"unicode_decimal\": 59230\n    },\n    {\n      \"icon_id\": \"1261792\",\n      \"name\": \"hashtag\",\n      \"font_class\": \"hashtag\",\n      \"unicode\": \"e75f\",\n      \"unicode_decimal\": 59231\n    },\n    {\n      \"icon_id\": \"1261793\",\n      \"name\": \"headphones\",\n      \"font_class\": \"headphones\",\n      \"unicode\": \"e760\",\n      \"unicode_decimal\": 59232\n    },\n    {\n      \"icon_id\": \"1261794\",\n      \"name\": \"header\",\n      \"font_class\": \"header\",\n      \"unicode\": \"e761\",\n      \"unicode_decimal\": 59233\n    },\n    {\n      \"icon_id\": \"1261795\",\n      \"name\": \"hdd-o\",\n      \"font_class\": \"hdd-o\",\n      \"unicode\": \"e762\",\n      \"unicode_decimal\": 59234\n    },\n    {\n      \"icon_id\": \"1261796\",\n      \"name\": \"heart-o\",\n      \"font_class\": \"heart-o\",\n      \"unicode\": \"e763\",\n      \"unicode_decimal\": 59235\n    },\n    {\n      \"icon_id\": \"1261797\",\n      \"name\": \"heart\",\n      \"font_class\": \"heart\",\n      \"unicode\": \"e764\",\n      \"unicode_decimal\": 59236\n    },\n    {\n      \"icon_id\": \"1261800\",\n      \"name\": \"hotel\",\n      \"font_class\": \"hotel\",\n      \"unicode\": \"e765\",\n      \"unicode_decimal\": 59237\n    },\n    {\n      \"icon_id\": \"1261801\",\n      \"name\": \"heartbeat\",\n      \"font_class\": \"heartbeat\",\n      \"unicode\": \"e766\",\n      \"unicode_decimal\": 59238\n    },\n    {\n      \"icon_id\": \"1261802\",\n      \"name\": \"hourglass-1\",\n      \"font_class\": \"hourglass-1\",\n      \"unicode\": \"e767\",\n      \"unicode_decimal\": 59239\n    },\n    {\n      \"icon_id\": \"1261803\",\n      \"name\": \"home\",\n      \"font_class\": \"home\",\n      \"unicode\": \"e768\",\n      \"unicode_decimal\": 59240\n    },\n    {\n      \"icon_id\": \"1261804\",\n      \"name\": \"history\",\n      \"font_class\": \"history\",\n      \"unicode\": \"e769\",\n      \"unicode_decimal\": 59241\n    },\n    {\n      \"icon_id\": \"1261805\",\n      \"name\": \"hourglass-2\",\n      \"font_class\": \"hourglass-2\",\n      \"unicode\": \"e76a\",\n      \"unicode_decimal\": 59242\n    },\n    {\n      \"icon_id\": \"1261806\",\n      \"name\": \"hospital-o\",\n      \"font_class\": \"hospital-o\",\n      \"unicode\": \"e76b\",\n      \"unicode_decimal\": 59243\n    },\n    {\n      \"icon_id\": \"1261807\",\n      \"name\": \"hourglass-3\",\n      \"font_class\": \"hourglass-3\",\n      \"unicode\": \"e76c\",\n      \"unicode_decimal\": 59244\n    },\n    {\n      \"icon_id\": \"1261808\",\n      \"name\": \"hourglass-half\",\n      \"font_class\": \"hourglass-half\",\n      \"unicode\": \"e76d\",\n      \"unicode_decimal\": 59245\n    },\n    {\n      \"icon_id\": \"1261809\",\n      \"name\": \"hourglass-end\",\n      \"font_class\": \"hourglass-end\",\n      \"unicode\": \"e76e\",\n      \"unicode_decimal\": 59246\n    },\n    {\n      \"icon_id\": \"1261810\",\n      \"name\": \"hourglass-o\",\n      \"font_class\": \"hourglass-o\",\n      \"unicode\": \"e76f\",\n      \"unicode_decimal\": 59247\n    },\n    {\n      \"icon_id\": \"1261811\",\n      \"name\": \"hourglass-start\",\n      \"font_class\": \"hourglass-start\",\n      \"unicode\": \"e770\",\n      \"unicode_decimal\": 59248\n    },\n    {\n      \"icon_id\": \"1261812\",\n      \"name\": \"houzz\",\n      \"font_class\": \"houzz\",\n      \"unicode\": \"e771\",\n      \"unicode_decimal\": 59249\n    },\n    {\n      \"icon_id\": \"1261813\",\n      \"name\": \"html5\",\n      \"font_class\": \"html5\",\n      \"unicode\": \"e772\",\n      \"unicode_decimal\": 59250\n    },\n    {\n      \"icon_id\": \"1261814\",\n      \"name\": \"hourglass\",\n      \"font_class\": \"hourglass\",\n      \"unicode\": \"e773\",\n      \"unicode_decimal\": 59251\n    },\n    {\n      \"icon_id\": \"1261815\",\n      \"name\": \"id-badge\",\n      \"font_class\": \"id-badge\",\n      \"unicode\": \"e774\",\n      \"unicode_decimal\": 59252\n    },\n    {\n      \"icon_id\": \"1261816\",\n      \"name\": \"i-cursor\",\n      \"font_class\": \"i-cursor\",\n      \"unicode\": \"e775\",\n      \"unicode_decimal\": 59253\n    },\n    {\n      \"icon_id\": \"1261817\",\n      \"name\": \"id-card\",\n      \"font_class\": \"id-card\",\n      \"unicode\": \"e776\",\n      \"unicode_decimal\": 59254\n    },\n    {\n      \"icon_id\": \"1261818\",\n      \"name\": \"ils\",\n      \"font_class\": \"ils\",\n      \"unicode\": \"e777\",\n      \"unicode_decimal\": 59255\n    },\n    {\n      \"icon_id\": \"1261819\",\n      \"name\": \"id-card-o\",\n      \"font_class\": \"id-card-o\",\n      \"unicode\": \"e778\",\n      \"unicode_decimal\": 59256\n    },\n    {\n      \"icon_id\": \"1261820\",\n      \"name\": \"image\",\n      \"font_class\": \"image\",\n      \"unicode\": \"e779\",\n      \"unicode_decimal\": 59257\n    },\n    {\n      \"icon_id\": \"1261821\",\n      \"name\": \"inbox\",\n      \"font_class\": \"inbox\",\n      \"unicode\": \"e77a\",\n      \"unicode_decimal\": 59258\n    },\n    {\n      \"icon_id\": \"1261822\",\n      \"name\": \"indent\",\n      \"font_class\": \"indent\",\n      \"unicode\": \"e77b\",\n      \"unicode_decimal\": 59259\n    },\n    {\n      \"icon_id\": \"1261823\",\n      \"name\": \"industry\",\n      \"font_class\": \"industry\",\n      \"unicode\": \"e77c\",\n      \"unicode_decimal\": 59260\n    },\n    {\n      \"icon_id\": \"1261824\",\n      \"name\": \"imdb\",\n      \"font_class\": \"imdb\",\n      \"unicode\": \"e77d\",\n      \"unicode_decimal\": 59261\n    },\n    {\n      \"icon_id\": \"1261846\",\n      \"name\": \"info\",\n      \"font_class\": \"info\",\n      \"unicode\": \"e77e\",\n      \"unicode_decimal\": 59262\n    },\n    {\n      \"icon_id\": \"1261847\",\n      \"name\": \"institution\",\n      \"font_class\": \"institution\",\n      \"unicode\": \"e77f\",\n      \"unicode_decimal\": 59263\n    },\n    {\n      \"icon_id\": \"1261848\",\n      \"name\": \"info-circle\",\n      \"font_class\": \"info-circle\",\n      \"unicode\": \"e780\",\n      \"unicode_decimal\": 59264\n    },\n    {\n      \"icon_id\": \"1261849\",\n      \"name\": \"internet-explorer\",\n      \"font_class\": \"internet-explorer\",\n      \"unicode\": \"e781\",\n      \"unicode_decimal\": 59265\n    },\n    {\n      \"icon_id\": \"1261850\",\n      \"name\": \"inr\",\n      \"font_class\": \"inr\",\n      \"unicode\": \"e782\",\n      \"unicode_decimal\": 59266\n    },\n    {\n      \"icon_id\": \"1261851\",\n      \"name\": \"instagram\",\n      \"font_class\": \"instagram\",\n      \"unicode\": \"e783\",\n      \"unicode_decimal\": 59267\n    },\n    {\n      \"icon_id\": \"1261852\",\n      \"name\": \"ioxhost\",\n      \"font_class\": \"ioxhost\",\n      \"unicode\": \"e784\",\n      \"unicode_decimal\": 59268\n    },\n    {\n      \"icon_id\": \"1261853\",\n      \"name\": \"joomla\",\n      \"font_class\": \"joomla\",\n      \"unicode\": \"e785\",\n      \"unicode_decimal\": 59269\n    },\n    {\n      \"icon_id\": \"1261854\",\n      \"name\": \"jpy\",\n      \"font_class\": \"jpy\",\n      \"unicode\": \"e786\",\n      \"unicode_decimal\": 59270\n    },\n    {\n      \"icon_id\": \"1261855\",\n      \"name\": \"intersex\",\n      \"font_class\": \"intersex\",\n      \"unicode\": \"e787\",\n      \"unicode_decimal\": 59271\n    },\n    {\n      \"icon_id\": \"1261856\",\n      \"name\": \"jsfiddle\",\n      \"font_class\": \"jsfiddle\",\n      \"unicode\": \"e788\",\n      \"unicode_decimal\": 59272\n    },\n    {\n      \"icon_id\": \"1261857\",\n      \"name\": \"italic\",\n      \"font_class\": \"italic\",\n      \"unicode\": \"e789\",\n      \"unicode_decimal\": 59273\n    },\n    {\n      \"icon_id\": \"1261858\",\n      \"name\": \"key\",\n      \"font_class\": \"key\",\n      \"unicode\": \"e78a\",\n      \"unicode_decimal\": 59274\n    },\n    {\n      \"icon_id\": \"1261859\",\n      \"name\": \"keyboard-o\",\n      \"font_class\": \"keyboard-o\",\n      \"unicode\": \"e78b\",\n      \"unicode_decimal\": 59275\n    },\n    {\n      \"icon_id\": \"1261860\",\n      \"name\": \"krw\",\n      \"font_class\": \"krw\",\n      \"unicode\": \"e78c\",\n      \"unicode_decimal\": 59276\n    },\n    {\n      \"icon_id\": \"1261861\",\n      \"name\": \"laptop\",\n      \"font_class\": \"laptop\",\n      \"unicode\": \"e78d\",\n      \"unicode_decimal\": 59277\n    },\n    {\n      \"icon_id\": \"1261862\",\n      \"name\": \"language\",\n      \"font_class\": \"language\",\n      \"unicode\": \"e78e\",\n      \"unicode_decimal\": 59278\n    },\n    {\n      \"icon_id\": \"1261863\",\n      \"name\": \"leaf\",\n      \"font_class\": \"leaf\",\n      \"unicode\": \"e78f\",\n      \"unicode_decimal\": 59279\n    },\n    {\n      \"icon_id\": \"1261864\",\n      \"name\": \"lastfm\",\n      \"font_class\": \"lastfm\",\n      \"unicode\": \"e790\",\n      \"unicode_decimal\": 59280\n    },\n    {\n      \"icon_id\": \"1261865\",\n      \"name\": \"lastfm-square\",\n      \"font_class\": \"lastfm-square\",\n      \"unicode\": \"e791\",\n      \"unicode_decimal\": 59281\n    },\n    {\n      \"icon_id\": \"1261866\",\n      \"name\": \"legal\",\n      \"font_class\": \"legal\",\n      \"unicode\": \"e792\",\n      \"unicode_decimal\": 59282\n    },\n    {\n      \"icon_id\": \"1261867\",\n      \"name\": \"leanpub\",\n      \"font_class\": \"leanpub\",\n      \"unicode\": \"e793\",\n      \"unicode_decimal\": 59283\n    },\n    {\n      \"icon_id\": \"1261883\",\n      \"name\": \"level-down\",\n      \"font_class\": \"level-down\",\n      \"unicode\": \"e794\",\n      \"unicode_decimal\": 59284\n    },\n    {\n      \"icon_id\": \"1261884\",\n      \"name\": \"level-up\",\n      \"font_class\": \"level-up\",\n      \"unicode\": \"e795\",\n      \"unicode_decimal\": 59285\n    },\n    {\n      \"icon_id\": \"1261885\",\n      \"name\": \"life-ring\",\n      \"font_class\": \"life-ring\",\n      \"unicode\": \"e796\",\n      \"unicode_decimal\": 59286\n    },\n    {\n      \"icon_id\": \"1261886\",\n      \"name\": \"life-buoy\",\n      \"font_class\": \"life-buoy\",\n      \"unicode\": \"e797\",\n      \"unicode_decimal\": 59287\n    },\n    {\n      \"icon_id\": \"1261887\",\n      \"name\": \"life-bouy\",\n      \"font_class\": \"life-bouy\",\n      \"unicode\": \"e798\",\n      \"unicode_decimal\": 59288\n    },\n    {\n      \"icon_id\": \"1261888\",\n      \"name\": \"lemon-o\",\n      \"font_class\": \"lemon-o\",\n      \"unicode\": \"e799\",\n      \"unicode_decimal\": 59289\n    },\n    {\n      \"icon_id\": \"1261889\",\n      \"name\": \"lightbulb-o\",\n      \"font_class\": \"lightbulb-o\",\n      \"unicode\": \"e79a\",\n      \"unicode_decimal\": 59290\n    },\n    {\n      \"icon_id\": \"1261890\",\n      \"name\": \"life-saver\",\n      \"font_class\": \"life-saver\",\n      \"unicode\": \"e79b\",\n      \"unicode_decimal\": 59291\n    },\n    {\n      \"icon_id\": \"1261891\",\n      \"name\": \"line-chart\",\n      \"font_class\": \"line-chart\",\n      \"unicode\": \"e79c\",\n      \"unicode_decimal\": 59292\n    },\n    {\n      \"icon_id\": \"1261892\",\n      \"name\": \"linkedin\",\n      \"font_class\": \"linkedin\",\n      \"unicode\": \"e79d\",\n      \"unicode_decimal\": 59293\n    },\n    {\n      \"icon_id\": \"1261893\",\n      \"name\": \"linkedin-square\",\n      \"font_class\": \"linkedin-square\",\n      \"unicode\": \"e79e\",\n      \"unicode_decimal\": 59294\n    },\n    {\n      \"icon_id\": \"1261894\",\n      \"name\": \"link\",\n      \"font_class\": \"link\",\n      \"unicode\": \"e79f\",\n      \"unicode_decimal\": 59295\n    },\n    {\n      \"icon_id\": \"1261895\",\n      \"name\": \"linode\",\n      \"font_class\": \"linode\",\n      \"unicode\": \"e7a0\",\n      \"unicode_decimal\": 59296\n    },\n    {\n      \"icon_id\": \"1261896\",\n      \"name\": \"list\",\n      \"font_class\": \"list\",\n      \"unicode\": \"e7a1\",\n      \"unicode_decimal\": 59297\n    },\n    {\n      \"icon_id\": \"1261897\",\n      \"name\": \"list-ul\",\n      \"font_class\": \"list-ul\",\n      \"unicode\": \"e7a2\",\n      \"unicode_decimal\": 59298\n    },\n    {\n      \"icon_id\": \"1261898\",\n      \"name\": \"linux\",\n      \"font_class\": \"linux\",\n      \"unicode\": \"e7a3\",\n      \"unicode_decimal\": 59299\n    },\n    {\n      \"icon_id\": \"1261899\",\n      \"name\": \"list-ol\",\n      \"font_class\": \"list-ol\",\n      \"unicode\": \"e7a4\",\n      \"unicode_decimal\": 59300\n    },\n    {\n      \"icon_id\": \"1261900\",\n      \"name\": \"list-alt\",\n      \"font_class\": \"list-alt\",\n      \"unicode\": \"e7a5\",\n      \"unicode_decimal\": 59301\n    },\n    {\n      \"icon_id\": \"1261901\",\n      \"name\": \"location-arrow\",\n      \"font_class\": \"location-arrow\",\n      \"unicode\": \"e7a6\",\n      \"unicode_decimal\": 59302\n    },\n    {\n      \"icon_id\": \"1261902\",\n      \"name\": \"lock\",\n      \"font_class\": \"lock\",\n      \"unicode\": \"e7a7\",\n      \"unicode_decimal\": 59303\n    },\n    {\n      \"icon_id\": \"1261903\",\n      \"name\": \"long-arrow-up\",\n      \"font_class\": \"long-arrow-up\",\n      \"unicode\": \"e7a8\",\n      \"unicode_decimal\": 59304\n    },\n    {\n      \"icon_id\": \"1261904\",\n      \"name\": \"long-arrow-right\",\n      \"font_class\": \"long-arrow-right\",\n      \"unicode\": \"e7a9\",\n      \"unicode_decimal\": 59305\n    },\n    {\n      \"icon_id\": \"1261905\",\n      \"name\": \"long-arrow-left\",\n      \"font_class\": \"long-arrow-left\",\n      \"unicode\": \"e7aa\",\n      \"unicode_decimal\": 59306\n    },\n    {\n      \"icon_id\": \"1261906\",\n      \"name\": \"long-arrow-down\",\n      \"font_class\": \"long-arrow-down\",\n      \"unicode\": \"e7ab\",\n      \"unicode_decimal\": 59307\n    },\n    {\n      \"icon_id\": \"1261911\",\n      \"name\": \"magic\",\n      \"font_class\": \"magic\",\n      \"unicode\": \"e7ac\",\n      \"unicode_decimal\": 59308\n    },\n    {\n      \"icon_id\": \"1261912\",\n      \"name\": \"magnet\",\n      \"font_class\": \"magnet\",\n      \"unicode\": \"e7ad\",\n      \"unicode_decimal\": 59309\n    },\n    {\n      \"icon_id\": \"1261913\",\n      \"name\": \"low-vision\",\n      \"font_class\": \"low-vision\",\n      \"unicode\": \"e7ae\",\n      \"unicode_decimal\": 59310\n    },\n    {\n      \"icon_id\": \"1261914\",\n      \"name\": \"mail-reply-all\",\n      \"font_class\": \"mail-reply-all\",\n      \"unicode\": \"e7af\",\n      \"unicode_decimal\": 59311\n    },\n    {\n      \"icon_id\": \"1261915\",\n      \"name\": \"mail-reply\",\n      \"font_class\": \"mail-reply\",\n      \"unicode\": \"e7b0\",\n      \"unicode_decimal\": 59312\n    },\n    {\n      \"icon_id\": \"1261916\",\n      \"name\": \"mail-forward\",\n      \"font_class\": \"mail-forward\",\n      \"unicode\": \"e7b1\",\n      \"unicode_decimal\": 59313\n    },\n    {\n      \"icon_id\": \"1261917\",\n      \"name\": \"male\",\n      \"font_class\": \"male\",\n      \"unicode\": \"e7b2\",\n      \"unicode_decimal\": 59314\n    },\n    {\n      \"icon_id\": \"1261918\",\n      \"name\": \"map-pin\",\n      \"font_class\": \"map-pin\",\n      \"unicode\": \"e7b3\",\n      \"unicode_decimal\": 59315\n    },\n    {\n      \"icon_id\": \"1261919\",\n      \"name\": \"map-o\",\n      \"font_class\": \"map-o\",\n      \"unicode\": \"e7b4\",\n      \"unicode_decimal\": 59316\n    },\n    {\n      \"icon_id\": \"1261920\",\n      \"name\": \"map-marker\",\n      \"font_class\": \"map-marker\",\n      \"unicode\": \"e7b5\",\n      \"unicode_decimal\": 59317\n    },\n    {\n      \"icon_id\": \"1261921\",\n      \"name\": \"map\",\n      \"font_class\": \"map\",\n      \"unicode\": \"e7b6\",\n      \"unicode_decimal\": 59318\n    },\n    {\n      \"icon_id\": \"1261922\",\n      \"name\": \"map-signs\",\n      \"font_class\": \"map-signs\",\n      \"unicode\": \"e7b7\",\n      \"unicode_decimal\": 59319\n    },\n    {\n      \"icon_id\": \"1261923\",\n      \"name\": \"mars-stroke-h\",\n      \"font_class\": \"mars-stroke-h\",\n      \"unicode\": \"e7b8\",\n      \"unicode_decimal\": 59320\n    },\n    {\n      \"icon_id\": \"1261924\",\n      \"name\": \"mars-stroke\",\n      \"font_class\": \"mars-stroke\",\n      \"unicode\": \"e7b9\",\n      \"unicode_decimal\": 59321\n    },\n    {\n      \"icon_id\": \"1261925\",\n      \"name\": \"mars-stroke-v\",\n      \"font_class\": \"mars-stroke-v\",\n      \"unicode\": \"e7ba\",\n      \"unicode_decimal\": 59322\n    },\n    {\n      \"icon_id\": \"1261926\",\n      \"name\": \"mars-double\",\n      \"font_class\": \"mars-double\",\n      \"unicode\": \"e7bb\",\n      \"unicode_decimal\": 59323\n    },\n    {\n      \"icon_id\": \"1261927\",\n      \"name\": \"mars\",\n      \"font_class\": \"mars\",\n      \"unicode\": \"e7bc\",\n      \"unicode_decimal\": 59324\n    },\n    {\n      \"icon_id\": \"1261928\",\n      \"name\": \"maxcdn\",\n      \"font_class\": \"maxcdn\",\n      \"unicode\": \"e7bd\",\n      \"unicode_decimal\": 59325\n    },\n    {\n      \"icon_id\": \"1261929\",\n      \"name\": \"medium\",\n      \"font_class\": \"medium\",\n      \"unicode\": \"e7be\",\n      \"unicode_decimal\": 59326\n    },\n    {\n      \"icon_id\": \"1261930\",\n      \"name\": \"medkit\",\n      \"font_class\": \"medkit\",\n      \"unicode\": \"e7bf\",\n      \"unicode_decimal\": 59327\n    },\n    {\n      \"icon_id\": \"1261931\",\n      \"name\": \"meanpath\",\n      \"font_class\": \"meanpath\",\n      \"unicode\": \"e7c0\",\n      \"unicode_decimal\": 59328\n    },\n    {\n      \"icon_id\": \"1261932\",\n      \"name\": \"meetup\",\n      \"font_class\": \"meetup\",\n      \"unicode\": \"e7c1\",\n      \"unicode_decimal\": 59329\n    },\n    {\n      \"icon_id\": \"1261933\",\n      \"name\": \"meh-o\",\n      \"font_class\": \"meh-o\",\n      \"unicode\": \"e7c2\",\n      \"unicode_decimal\": 59330\n    },\n    {\n      \"icon_id\": \"1261934\",\n      \"name\": \"mercury\",\n      \"font_class\": \"mercury\",\n      \"unicode\": \"e7c3\",\n      \"unicode_decimal\": 59331\n    },\n    {\n      \"icon_id\": \"1261937\",\n      \"name\": \"microphone\",\n      \"font_class\": \"microphone\",\n      \"unicode\": \"e7c4\",\n      \"unicode_decimal\": 59332\n    },\n    {\n      \"icon_id\": \"1261938\",\n      \"name\": \"minus-circle\",\n      \"font_class\": \"minus-circle\",\n      \"unicode\": \"e7c5\",\n      \"unicode_decimal\": 59333\n    },\n    {\n      \"icon_id\": \"1261939\",\n      \"name\": \"minus-square\",\n      \"font_class\": \"minus-square\",\n      \"unicode\": \"e7c6\",\n      \"unicode_decimal\": 59334\n    },\n    {\n      \"icon_id\": \"1261940\",\n      \"name\": \"minus-square-o\",\n      \"font_class\": \"minus-square-o\",\n      \"unicode\": \"e7c7\",\n      \"unicode_decimal\": 59335\n    },\n    {\n      \"icon_id\": \"1261941\",\n      \"name\": \"microchip\",\n      \"font_class\": \"microchip\",\n      \"unicode\": \"e7c8\",\n      \"unicode_decimal\": 59336\n    },\n    {\n      \"icon_id\": \"1261942\",\n      \"name\": \"microphone-slash\",\n      \"font_class\": \"microphone-slash\",\n      \"unicode\": \"e7c9\",\n      \"unicode_decimal\": 59337\n    },\n    {\n      \"icon_id\": \"1261943\",\n      \"name\": \"minus\",\n      \"font_class\": \"minus\",\n      \"unicode\": \"e7ca\",\n      \"unicode_decimal\": 59338\n    },\n    {\n      \"icon_id\": \"1261944\",\n      \"name\": \"mixcloud\",\n      \"font_class\": \"mixcloud\",\n      \"unicode\": \"e7cb\",\n      \"unicode_decimal\": 59339\n    },\n    {\n      \"icon_id\": \"1261945\",\n      \"name\": \"mobile\",\n      \"font_class\": \"mobile\",\n      \"unicode\": \"e7cc\",\n      \"unicode_decimal\": 59340\n    },\n    {\n      \"icon_id\": \"1261946\",\n      \"name\": \"modx\",\n      \"font_class\": \"modx\",\n      \"unicode\": \"e7cd\",\n      \"unicode_decimal\": 59341\n    },\n    {\n      \"icon_id\": \"1261947\",\n      \"name\": \"money\",\n      \"font_class\": \"money\",\n      \"unicode\": \"e7ce\",\n      \"unicode_decimal\": 59342\n    },\n    {\n      \"icon_id\": \"1261949\",\n      \"name\": \"moon-o\",\n      \"font_class\": \"moon-o\",\n      \"unicode\": \"e7cf\",\n      \"unicode_decimal\": 59343\n    },\n    {\n      \"icon_id\": \"1261950\",\n      \"name\": \"motorcycle\",\n      \"font_class\": \"motorcycle\",\n      \"unicode\": \"e7d0\",\n      \"unicode_decimal\": 59344\n    },\n    {\n      \"icon_id\": \"1261951\",\n      \"name\": \"mouse-pointer\",\n      \"font_class\": \"mouse-pointer\",\n      \"unicode\": \"e7d1\",\n      \"unicode_decimal\": 59345\n    },\n    {\n      \"icon_id\": \"1261952\",\n      \"name\": \"mortar-board\",\n      \"font_class\": \"mortar-board\",\n      \"unicode\": \"e7d2\",\n      \"unicode_decimal\": 59346\n    },\n    {\n      \"icon_id\": \"1261953\",\n      \"name\": \"navicon\",\n      \"font_class\": \"navicon\",\n      \"unicode\": \"e7d3\",\n      \"unicode_decimal\": 59347\n    },\n    {\n      \"icon_id\": \"1261954\",\n      \"name\": \"neuter\",\n      \"font_class\": \"neuter\",\n      \"unicode\": \"e7d4\",\n      \"unicode_decimal\": 59348\n    },\n    {\n      \"icon_id\": \"1261955\",\n      \"name\": \"music\",\n      \"font_class\": \"music\",\n      \"unicode\": \"e7d5\",\n      \"unicode_decimal\": 59349\n    },\n    {\n      \"icon_id\": \"1261956\",\n      \"name\": \"object-group\",\n      \"font_class\": \"object-group\",\n      \"unicode\": \"e7d6\",\n      \"unicode_decimal\": 59350\n    },\n    {\n      \"icon_id\": \"1261957\",\n      \"name\": \"newspaper-o\",\n      \"font_class\": \"newspaper-o\",\n      \"unicode\": \"e7d7\",\n      \"unicode_decimal\": 59351\n    },\n    {\n      \"icon_id\": \"1261958\",\n      \"name\": \"object-ungroup\",\n      \"font_class\": \"object-ungroup\",\n      \"unicode\": \"e7d8\",\n      \"unicode_decimal\": 59352\n    },\n    {\n      \"icon_id\": \"1261959\",\n      \"name\": \"odnoklassniki-square\",\n      \"font_class\": \"odnoklassniki-square\",\n      \"unicode\": \"e7d9\",\n      \"unicode_decimal\": 59353\n    },\n    {\n      \"icon_id\": \"1261960\",\n      \"name\": \"odnoklassniki\",\n      \"font_class\": \"odnoklassniki\",\n      \"unicode\": \"e7da\",\n      \"unicode_decimal\": 59354\n    },\n    {\n      \"icon_id\": \"1261961\",\n      \"name\": \"opencart\",\n      \"font_class\": \"opencart\",\n      \"unicode\": \"e7db\",\n      \"unicode_decimal\": 59355\n    },\n    {\n      \"icon_id\": \"1261962\",\n      \"name\": \"openid\",\n      \"font_class\": \"openid\",\n      \"unicode\": \"e7dc\",\n      \"unicode_decimal\": 59356\n    },\n    {\n      \"icon_id\": \"1261963\",\n      \"name\": \"opera\",\n      \"font_class\": \"opera\",\n      \"unicode\": \"e7dd\",\n      \"unicode_decimal\": 59357\n    },\n    {\n      \"icon_id\": \"1261967\",\n      \"name\": \"paper-plane-o\",\n      \"font_class\": \"paper-plane-o\",\n      \"unicode\": \"e7de\",\n      \"unicode_decimal\": 59358\n    },\n    {\n      \"icon_id\": \"1261968\",\n      \"name\": \"pagelines\",\n      \"font_class\": \"pagelines\",\n      \"unicode\": \"e7df\",\n      \"unicode_decimal\": 59359\n    },\n    {\n      \"icon_id\": \"1261969\",\n      \"name\": \"outdent\",\n      \"font_class\": \"outdent\",\n      \"unicode\": \"e7e0\",\n      \"unicode_decimal\": 59360\n    },\n    {\n      \"icon_id\": \"1261970\",\n      \"name\": \"paper-plane\",\n      \"font_class\": \"paper-plane\",\n      \"unicode\": \"e7e1\",\n      \"unicode_decimal\": 59361\n    },\n    {\n      \"icon_id\": \"1261971\",\n      \"name\": \"paint-brush\",\n      \"font_class\": \"paint-brush\",\n      \"unicode\": \"e7e2\",\n      \"unicode_decimal\": 59362\n    },\n    {\n      \"icon_id\": \"1261972\",\n      \"name\": \"paragraph\",\n      \"font_class\": \"paragraph\",\n      \"unicode\": \"e7e3\",\n      \"unicode_decimal\": 59363\n    },\n    {\n      \"icon_id\": \"1261973\",\n      \"name\": \"paperclip\",\n      \"font_class\": \"paperclip\",\n      \"unicode\": \"e7e4\",\n      \"unicode_decimal\": 59364\n    },\n    {\n      \"icon_id\": \"1261974\",\n      \"name\": \"optin-monster\",\n      \"font_class\": \"optin-monster\",\n      \"unicode\": \"e7e5\",\n      \"unicode_decimal\": 59365\n    },\n    {\n      \"icon_id\": \"1261975\",\n      \"name\": \"pause-circle-o\",\n      \"font_class\": \"pause-circle-o\",\n      \"unicode\": \"e7e6\",\n      \"unicode_decimal\": 59366\n    },\n    {\n      \"icon_id\": \"1261976\",\n      \"name\": \"paste\",\n      \"font_class\": \"paste\",\n      \"unicode\": \"e7e7\",\n      \"unicode_decimal\": 59367\n    },\n    {\n      \"icon_id\": \"1261977\",\n      \"name\": \"pause\",\n      \"font_class\": \"pause\",\n      \"unicode\": \"e7e8\",\n      \"unicode_decimal\": 59368\n    },\n    {\n      \"icon_id\": \"1261978\",\n      \"name\": \"pause-circle\",\n      \"font_class\": \"pause-circle\",\n      \"unicode\": \"e7e9\",\n      \"unicode_decimal\": 59369\n    },\n    {\n      \"icon_id\": \"1261979\",\n      \"name\": \"paw\",\n      \"font_class\": \"paw\",\n      \"unicode\": \"e7ea\",\n      \"unicode_decimal\": 59370\n    },\n    {\n      \"icon_id\": \"1261980\",\n      \"name\": \"paypal\",\n      \"font_class\": \"paypal\",\n      \"unicode\": \"e7eb\",\n      \"unicode_decimal\": 59371\n    },\n    {\n      \"icon_id\": \"1261981\",\n      \"name\": \"pencil-square-o\",\n      \"font_class\": \"pencil-square-o\",\n      \"unicode\": \"e7ec\",\n      \"unicode_decimal\": 59372\n    },\n    {\n      \"icon_id\": \"1261982\",\n      \"name\": \"percent\",\n      \"font_class\": \"percent\",\n      \"unicode\": \"e7ed\",\n      \"unicode_decimal\": 59373\n    },\n    {\n      \"icon_id\": \"1261983\",\n      \"name\": \"pencil-square\",\n      \"font_class\": \"pencil-square\",\n      \"unicode\": \"e7ee\",\n      \"unicode_decimal\": 59374\n    },\n    {\n      \"icon_id\": \"1261984\",\n      \"name\": \"pencil\",\n      \"font_class\": \"pencil\",\n      \"unicode\": \"e7ef\",\n      \"unicode_decimal\": 59375\n    },\n    {\n      \"icon_id\": \"1261985\",\n      \"name\": \"phone-square\",\n      \"font_class\": \"phone-square\",\n      \"unicode\": \"e7f0\",\n      \"unicode_decimal\": 59376\n    },\n    {\n      \"icon_id\": \"1261986\",\n      \"name\": \"phone\",\n      \"font_class\": \"phone\",\n      \"unicode\": \"e7f1\",\n      \"unicode_decimal\": 59377\n    },\n    {\n      \"icon_id\": \"1261987\",\n      \"name\": \"photo\",\n      \"font_class\": \"photo\",\n      \"unicode\": \"e7f2\",\n      \"unicode_decimal\": 59378\n    },\n    {\n      \"icon_id\": \"1261988\",\n      \"name\": \"picture-o\",\n      \"font_class\": \"picture-o\",\n      \"unicode\": \"e7f3\",\n      \"unicode_decimal\": 59379\n    },\n    {\n      \"icon_id\": \"1261989\",\n      \"name\": \"pie-chart\",\n      \"font_class\": \"pie-chart\",\n      \"unicode\": \"e7f4\",\n      \"unicode_decimal\": 59380\n    },\n    {\n      \"icon_id\": \"1261990\",\n      \"name\": \"pied-piper-pp\",\n      \"font_class\": \"pied-piper-pp\",\n      \"unicode\": \"e7f5\",\n      \"unicode_decimal\": 59381\n    },\n    {\n      \"icon_id\": \"1261991\",\n      \"name\": \"pied-piper-alt\",\n      \"font_class\": \"pied-piper-alt\",\n      \"unicode\": \"e7f6\",\n      \"unicode_decimal\": 59382\n    },\n    {\n      \"icon_id\": \"1262035\",\n      \"name\": \"pinterest-p\",\n      \"font_class\": \"pinterest-p\",\n      \"unicode\": \"e7f7\",\n      \"unicode_decimal\": 59383\n    },\n    {\n      \"icon_id\": \"1262036\",\n      \"name\": \"plane\",\n      \"font_class\": \"plane\",\n      \"unicode\": \"e7f8\",\n      \"unicode_decimal\": 59384\n    },\n    {\n      \"icon_id\": \"1262037\",\n      \"name\": \"play-circle-o\",\n      \"font_class\": \"play-circle-o\",\n      \"unicode\": \"e7f9\",\n      \"unicode_decimal\": 59385\n    },\n    {\n      \"icon_id\": \"1262038\",\n      \"name\": \"pied-piper\",\n      \"font_class\": \"pied-piper\",\n      \"unicode\": \"e7fa\",\n      \"unicode_decimal\": 59386\n    },\n    {\n      \"icon_id\": \"1262039\",\n      \"name\": \"pinterest\",\n      \"font_class\": \"pinterest\",\n      \"unicode\": \"e7fb\",\n      \"unicode_decimal\": 59387\n    },\n    {\n      \"icon_id\": \"1262040\",\n      \"name\": \"pinterest-square\",\n      \"font_class\": \"pinterest-square\",\n      \"unicode\": \"e7fc\",\n      \"unicode_decimal\": 59388\n    },\n    {\n      \"icon_id\": \"1262041\",\n      \"name\": \"play\",\n      \"font_class\": \"play\",\n      \"unicode\": \"e7fd\",\n      \"unicode_decimal\": 59389\n    },\n    {\n      \"icon_id\": \"1262042\",\n      \"name\": \"play-circle\",\n      \"font_class\": \"play-circle\",\n      \"unicode\": \"e7fe\",\n      \"unicode_decimal\": 59390\n    },\n    {\n      \"icon_id\": \"1262043\",\n      \"name\": \"plug\",\n      \"font_class\": \"plug\",\n      \"unicode\": \"e7ff\",\n      \"unicode_decimal\": 59391\n    },\n    {\n      \"icon_id\": \"1262044\",\n      \"name\": \"plus-square-o\",\n      \"font_class\": \"plus-square-o\",\n      \"unicode\": \"e800\",\n      \"unicode_decimal\": 59392\n    },\n    {\n      \"icon_id\": \"1262045\",\n      \"name\": \"plus-square\",\n      \"font_class\": \"plus-square\",\n      \"unicode\": \"e801\",\n      \"unicode_decimal\": 59393\n    },\n    {\n      \"icon_id\": \"1262046\",\n      \"name\": \"plus-circle\",\n      \"font_class\": \"plus-circle\",\n      \"unicode\": \"e802\",\n      \"unicode_decimal\": 59394\n    },\n    {\n      \"icon_id\": \"1262047\",\n      \"name\": \"plus\",\n      \"font_class\": \"plus\",\n      \"unicode\": \"e803\",\n      \"unicode_decimal\": 59395\n    },\n    {\n      \"icon_id\": \"1262048\",\n      \"name\": \"product-hunt\",\n      \"font_class\": \"product-hunt\",\n      \"unicode\": \"e804\",\n      \"unicode_decimal\": 59396\n    },\n    {\n      \"icon_id\": \"1262049\",\n      \"name\": \"print\",\n      \"font_class\": \"print\",\n      \"unicode\": \"e805\",\n      \"unicode_decimal\": 59397\n    },\n    {\n      \"icon_id\": \"1262050\",\n      \"name\": \"puzzle-piece\",\n      \"font_class\": \"puzzle-piece\",\n      \"unicode\": \"e806\",\n      \"unicode_decimal\": 59398\n    },\n    {\n      \"icon_id\": \"1262051\",\n      \"name\": \"podcast\",\n      \"font_class\": \"podcast\",\n      \"unicode\": \"e807\",\n      \"unicode_decimal\": 59399\n    },\n    {\n      \"icon_id\": \"1262052\",\n      \"name\": \"power-off\",\n      \"font_class\": \"power-off\",\n      \"unicode\": \"e808\",\n      \"unicode_decimal\": 59400\n    },\n    {\n      \"icon_id\": \"1262053\",\n      \"name\": \"qq\",\n      \"font_class\": \"qq\",\n      \"unicode\": \"e809\",\n      \"unicode_decimal\": 59401\n    },\n    {\n      \"icon_id\": \"1262054\",\n      \"name\": \"question\",\n      \"font_class\": \"question\",\n      \"unicode\": \"e80a\",\n      \"unicode_decimal\": 59402\n    },\n    {\n      \"icon_id\": \"1262055\",\n      \"name\": \"qrcode\",\n      \"font_class\": \"qrcode\",\n      \"unicode\": \"e80b\",\n      \"unicode_decimal\": 59403\n    },\n    {\n      \"icon_id\": \"1262056\",\n      \"name\": \"quora\",\n      \"font_class\": \"quora\",\n      \"unicode\": \"e80c\",\n      \"unicode_decimal\": 59404\n    },\n    {\n      \"icon_id\": \"1262057\",\n      \"name\": \"question-circle-o\",\n      \"font_class\": \"question-circle-o\",\n      \"unicode\": \"e80d\",\n      \"unicode_decimal\": 59405\n    },\n    {\n      \"icon_id\": \"1262058\",\n      \"name\": \"question-circle\",\n      \"font_class\": \"question-circle\",\n      \"unicode\": \"e80e\",\n      \"unicode_decimal\": 59406\n    },\n    {\n      \"icon_id\": \"1262059\",\n      \"name\": \"quote-left\",\n      \"font_class\": \"quote-left\",\n      \"unicode\": \"e80f\",\n      \"unicode_decimal\": 59407\n    },\n    {\n      \"icon_id\": \"1262060\",\n      \"name\": \"quote-right\",\n      \"font_class\": \"quote-right\",\n      \"unicode\": \"e810\",\n      \"unicode_decimal\": 59408\n    },\n    {\n      \"icon_id\": \"1262061\",\n      \"name\": \"ra\",\n      \"font_class\": \"ra\",\n      \"unicode\": \"e811\",\n      \"unicode_decimal\": 59409\n    },\n    {\n      \"icon_id\": \"1262062\",\n      \"name\": \"ravelry\",\n      \"font_class\": \"ravelry\",\n      \"unicode\": \"e812\",\n      \"unicode_decimal\": 59410\n    },\n    {\n      \"icon_id\": \"1262063\",\n      \"name\": \"rebel\",\n      \"font_class\": \"rebel\",\n      \"unicode\": \"e813\",\n      \"unicode_decimal\": 59411\n    },\n    {\n      \"icon_id\": \"1262064\",\n      \"name\": \"random\",\n      \"font_class\": \"random\",\n      \"unicode\": \"e814\",\n      \"unicode_decimal\": 59412\n    },\n    {\n      \"icon_id\": \"1262071\",\n      \"name\": \"reddit-square\",\n      \"font_class\": \"reddit-square\",\n      \"unicode\": \"e815\",\n      \"unicode_decimal\": 59413\n    },\n    {\n      \"icon_id\": \"1262072\",\n      \"name\": \"reddit-alien\",\n      \"font_class\": \"reddit-alien\",\n      \"unicode\": \"e816\",\n      \"unicode_decimal\": 59414\n    },\n    {\n      \"icon_id\": \"1262073\",\n      \"name\": \"recycle\",\n      \"font_class\": \"recycle\",\n      \"unicode\": \"e817\",\n      \"unicode_decimal\": 59415\n    },\n    {\n      \"icon_id\": \"1262074\",\n      \"name\": \"reddit\",\n      \"font_class\": \"reddit\",\n      \"unicode\": \"e818\",\n      \"unicode_decimal\": 59416\n    },\n    {\n      \"icon_id\": \"1262075\",\n      \"name\": \"registered\",\n      \"font_class\": \"registered\",\n      \"unicode\": \"e819\",\n      \"unicode_decimal\": 59417\n    },\n    {\n      \"icon_id\": \"1262076\",\n      \"name\": \"refresh\",\n      \"font_class\": \"refresh\",\n      \"unicode\": \"e81a\",\n      \"unicode_decimal\": 59418\n    },\n    {\n      \"icon_id\": \"1262077\",\n      \"name\": \"renren\",\n      \"font_class\": \"renren\",\n      \"unicode\": \"e81b\",\n      \"unicode_decimal\": 59419\n    },\n    {\n      \"icon_id\": \"1262078\",\n      \"name\": \"reorder\",\n      \"font_class\": \"reorder\",\n      \"unicode\": \"e81c\",\n      \"unicode_decimal\": 59420\n    },\n    {\n      \"icon_id\": \"1262079\",\n      \"name\": \"repeat\",\n      \"font_class\": \"repeat\",\n      \"unicode\": \"e81d\",\n      \"unicode_decimal\": 59421\n    },\n    {\n      \"icon_id\": \"1262080\",\n      \"name\": \"reply-all\",\n      \"font_class\": \"reply-all\",\n      \"unicode\": \"e81e\",\n      \"unicode_decimal\": 59422\n    },\n    {\n      \"icon_id\": \"1262081\",\n      \"name\": \"remove\",\n      \"font_class\": \"remove\",\n      \"unicode\": \"e81f\",\n      \"unicode_decimal\": 59423\n    },\n    {\n      \"icon_id\": \"1262082\",\n      \"name\": \"rmb\",\n      \"font_class\": \"rmb\",\n      \"unicode\": \"e820\",\n      \"unicode_decimal\": 59424\n    },\n    {\n      \"icon_id\": \"1262083\",\n      \"name\": \"resistance\",\n      \"font_class\": \"resistance\",\n      \"unicode\": \"e821\",\n      \"unicode_decimal\": 59425\n    },\n    {\n      \"icon_id\": \"1262084\",\n      \"name\": \"road\",\n      \"font_class\": \"road\",\n      \"unicode\": \"e822\",\n      \"unicode_decimal\": 59426\n    },\n    {\n      \"icon_id\": \"1262085\",\n      \"name\": \"retweet\",\n      \"font_class\": \"retweet\",\n      \"unicode\": \"e823\",\n      \"unicode_decimal\": 59427\n    },\n    {\n      \"icon_id\": \"1262086\",\n      \"name\": \"reply\",\n      \"font_class\": \"reply\",\n      \"unicode\": \"e824\",\n      \"unicode_decimal\": 59428\n    },\n    {\n      \"icon_id\": \"1262087\",\n      \"name\": \"rocket\",\n      \"font_class\": \"rocket\",\n      \"unicode\": \"e825\",\n      \"unicode_decimal\": 59429\n    },\n    {\n      \"icon_id\": \"1262088\",\n      \"name\": \"rotate-left\",\n      \"font_class\": \"rotate-left\",\n      \"unicode\": \"e826\",\n      \"unicode_decimal\": 59430\n    },\n    {\n      \"icon_id\": \"1262089\",\n      \"name\": \"rouble\",\n      \"font_class\": \"rouble\",\n      \"unicode\": \"e827\",\n      \"unicode_decimal\": 59431\n    },\n    {\n      \"icon_id\": \"1262090\",\n      \"name\": \"rotate-right\",\n      \"font_class\": \"rotate-right\",\n      \"unicode\": \"e828\",\n      \"unicode_decimal\": 59432\n    },\n    {\n      \"icon_id\": \"1262091\",\n      \"name\": \"rss\",\n      \"font_class\": \"rss\",\n      \"unicode\": \"e829\",\n      \"unicode_decimal\": 59433\n    },\n    {\n      \"icon_id\": \"1262092\",\n      \"name\": \"rss-square\",\n      \"font_class\": \"rss-square\",\n      \"unicode\": \"e82a\",\n      \"unicode_decimal\": 59434\n    },\n    {\n      \"icon_id\": \"1262095\",\n      \"name\": \"ruble\",\n      \"font_class\": \"ruble\",\n      \"unicode\": \"e82b\",\n      \"unicode_decimal\": 59435\n    },\n    {\n      \"icon_id\": \"1262096\",\n      \"name\": \"rub\",\n      \"font_class\": \"rub\",\n      \"unicode\": \"e82c\",\n      \"unicode_decimal\": 59436\n    },\n    {\n      \"icon_id\": \"1262097\",\n      \"name\": \"s15\",\n      \"font_class\": \"s15\",\n      \"unicode\": \"e82d\",\n      \"unicode_decimal\": 59437\n    },\n    {\n      \"icon_id\": \"1262098\",\n      \"name\": \"save\",\n      \"font_class\": \"save\",\n      \"unicode\": \"e82e\",\n      \"unicode_decimal\": 59438\n    },\n    {\n      \"icon_id\": \"1262099\",\n      \"name\": \"rupee\",\n      \"font_class\": \"rupee\",\n      \"unicode\": \"e82f\",\n      \"unicode_decimal\": 59439\n    },\n    {\n      \"icon_id\": \"1262100\",\n      \"name\": \"safari\",\n      \"font_class\": \"safari\",\n      \"unicode\": \"e830\",\n      \"unicode_decimal\": 59440\n    },\n    {\n      \"icon_id\": \"1262101\",\n      \"name\": \"scissors\",\n      \"font_class\": \"scissors\",\n      \"unicode\": \"e831\",\n      \"unicode_decimal\": 59441\n    },\n    {\n      \"icon_id\": \"1262102\",\n      \"name\": \"scribd\",\n      \"font_class\": \"scribd\",\n      \"unicode\": \"e832\",\n      \"unicode_decimal\": 59442\n    },\n    {\n      \"icon_id\": \"1262103\",\n      \"name\": \"search-plus\",\n      \"font_class\": \"search-plus\",\n      \"unicode\": \"e833\",\n      \"unicode_decimal\": 59443\n    },\n    {\n      \"icon_id\": \"1262104\",\n      \"name\": \"search\",\n      \"font_class\": \"search\",\n      \"unicode\": \"e834\",\n      \"unicode_decimal\": 59444\n    },\n    {\n      \"icon_id\": \"1262105\",\n      \"name\": \"sellsy\",\n      \"font_class\": \"sellsy\",\n      \"unicode\": \"e835\",\n      \"unicode_decimal\": 59445\n    },\n    {\n      \"icon_id\": \"1262106\",\n      \"name\": \"send\",\n      \"font_class\": \"send\",\n      \"unicode\": \"e836\",\n      \"unicode_decimal\": 59446\n    },\n    {\n      \"icon_id\": \"1262107\",\n      \"name\": \"send-o\",\n      \"font_class\": \"send-o\",\n      \"unicode\": \"e837\",\n      \"unicode_decimal\": 59447\n    },\n    {\n      \"icon_id\": \"1262108\",\n      \"name\": \"search-minus\",\n      \"font_class\": \"search-minus\",\n      \"unicode\": \"e838\",\n      \"unicode_decimal\": 59448\n    },\n    {\n      \"icon_id\": \"1262109\",\n      \"name\": \"server\",\n      \"font_class\": \"server\",\n      \"unicode\": \"e839\",\n      \"unicode_decimal\": 59449\n    },\n    {\n      \"icon_id\": \"1262110\",\n      \"name\": \"share-alt-square\",\n      \"font_class\": \"share-alt-square\",\n      \"unicode\": \"e83a\",\n      \"unicode_decimal\": 59450\n    },\n    {\n      \"icon_id\": \"1262111\",\n      \"name\": \"share-alt\",\n      \"font_class\": \"share-alt\",\n      \"unicode\": \"e83b\",\n      \"unicode_decimal\": 59451\n    },\n    {\n      \"icon_id\": \"1262112\",\n      \"name\": \"share-square-o\",\n      \"font_class\": \"share-square-o\",\n      \"unicode\": \"e83c\",\n      \"unicode_decimal\": 59452\n    },\n    {\n      \"icon_id\": \"1262113\",\n      \"name\": \"share\",\n      \"font_class\": \"share\",\n      \"unicode\": \"e83d\",\n      \"unicode_decimal\": 59453\n    },\n    {\n      \"icon_id\": \"1262114\",\n      \"name\": \"share-square\",\n      \"font_class\": \"share-square\",\n      \"unicode\": \"e83e\",\n      \"unicode_decimal\": 59454\n    },\n    {\n      \"icon_id\": \"1262115\",\n      \"name\": \"shekel\",\n      \"font_class\": \"shekel\",\n      \"unicode\": \"e83f\",\n      \"unicode_decimal\": 59455\n    },\n    {\n      \"icon_id\": \"1262116\",\n      \"name\": \"sheqel\",\n      \"font_class\": \"sheqel\",\n      \"unicode\": \"e840\",\n      \"unicode_decimal\": 59456\n    },\n    {\n      \"icon_id\": \"1262117\",\n      \"name\": \"shield\",\n      \"font_class\": \"shield\",\n      \"unicode\": \"e841\",\n      \"unicode_decimal\": 59457\n    },\n    {\n      \"icon_id\": \"1262118\",\n      \"name\": \"ship\",\n      \"font_class\": \"ship\",\n      \"unicode\": \"e842\",\n      \"unicode_decimal\": 59458\n    },\n    {\n      \"icon_id\": \"1262123\",\n      \"name\": \"shirtsinbulk\",\n      \"font_class\": \"shirtsinbulk\",\n      \"unicode\": \"e843\",\n      \"unicode_decimal\": 59459\n    },\n    {\n      \"icon_id\": \"1262124\",\n      \"name\": \"shower\",\n      \"font_class\": \"shower\",\n      \"unicode\": \"e844\",\n      \"unicode_decimal\": 59460\n    },\n    {\n      \"icon_id\": \"1262125\",\n      \"name\": \"sign-in\",\n      \"font_class\": \"sign-in\",\n      \"unicode\": \"e845\",\n      \"unicode_decimal\": 59461\n    },\n    {\n      \"icon_id\": \"1262126\",\n      \"name\": \"shopping-basket\",\n      \"font_class\": \"shopping-basket\",\n      \"unicode\": \"e846\",\n      \"unicode_decimal\": 59462\n    },\n    {\n      \"icon_id\": \"1262127\",\n      \"name\": \"shopping-cart\",\n      \"font_class\": \"shopping-cart\",\n      \"unicode\": \"e847\",\n      \"unicode_decimal\": 59463\n    },\n    {\n      \"icon_id\": \"1262128\",\n      \"name\": \"shopping-bag\",\n      \"font_class\": \"shopping-bag\",\n      \"unicode\": \"e848\",\n      \"unicode_decimal\": 59464\n    },\n    {\n      \"icon_id\": \"1262129\",\n      \"name\": \"sign-language\",\n      \"font_class\": \"sign-language\",\n      \"unicode\": \"e849\",\n      \"unicode_decimal\": 59465\n    },\n    {\n      \"icon_id\": \"1262130\",\n      \"name\": \"sign-out\",\n      \"font_class\": \"sign-out\",\n      \"unicode\": \"e84a\",\n      \"unicode_decimal\": 59466\n    },\n    {\n      \"icon_id\": \"1262131\",\n      \"name\": \"signal\",\n      \"font_class\": \"signal\",\n      \"unicode\": \"e84b\",\n      \"unicode_decimal\": 59467\n    },\n    {\n      \"icon_id\": \"1262132\",\n      \"name\": \"simplybuilt\",\n      \"font_class\": \"simplybuilt\",\n      \"unicode\": \"e84c\",\n      \"unicode_decimal\": 59468\n    },\n    {\n      \"icon_id\": \"1262133\",\n      \"name\": \"sitemap\",\n      \"font_class\": \"sitemap\",\n      \"unicode\": \"e84d\",\n      \"unicode_decimal\": 59469\n    },\n    {\n      \"icon_id\": \"1262134\",\n      \"name\": \"signing\",\n      \"font_class\": \"signing\",\n      \"unicode\": \"e84e\",\n      \"unicode_decimal\": 59470\n    },\n    {\n      \"icon_id\": \"1262135\",\n      \"name\": \"sliders\",\n      \"font_class\": \"sliders\",\n      \"unicode\": \"e84f\",\n      \"unicode_decimal\": 59471\n    },\n    {\n      \"icon_id\": \"1262136\",\n      \"name\": \"skype\",\n      \"font_class\": \"skype\",\n      \"unicode\": \"e850\",\n      \"unicode_decimal\": 59472\n    },\n    {\n      \"icon_id\": \"1262137\",\n      \"name\": \"skyatlas\",\n      \"font_class\": \"skyatlas\",\n      \"unicode\": \"e851\",\n      \"unicode_decimal\": 59473\n    },\n    {\n      \"icon_id\": \"1262138\",\n      \"name\": \"slack\",\n      \"font_class\": \"slack\",\n      \"unicode\": \"e852\",\n      \"unicode_decimal\": 59474\n    },\n    {\n      \"icon_id\": \"1262139\",\n      \"name\": \"slideshare\",\n      \"font_class\": \"slideshare\",\n      \"unicode\": \"e853\",\n      \"unicode_decimal\": 59475\n    },\n    {\n      \"icon_id\": \"1262140\",\n      \"name\": \"snapchat-square\",\n      \"font_class\": \"snapchat-square\",\n      \"unicode\": \"e854\",\n      \"unicode_decimal\": 59476\n    },\n    {\n      \"icon_id\": \"1262141\",\n      \"name\": \"snapchat-ghost\",\n      \"font_class\": \"snapchat-ghost\",\n      \"unicode\": \"e855\",\n      \"unicode_decimal\": 59477\n    },\n    {\n      \"icon_id\": \"1262142\",\n      \"name\": \"smile-o\",\n      \"font_class\": \"smile-o\",\n      \"unicode\": \"e856\",\n      \"unicode_decimal\": 59478\n    },\n    {\n      \"icon_id\": \"1262143\",\n      \"name\": \"snapchat\",\n      \"font_class\": \"snapchat\",\n      \"unicode\": \"e857\",\n      \"unicode_decimal\": 59479\n    },\n    {\n      \"icon_id\": \"1262144\",\n      \"name\": \"snowflake-o\",\n      \"font_class\": \"snowflake-o\",\n      \"unicode\": \"e858\",\n      \"unicode_decimal\": 59480\n    },\n    {\n      \"icon_id\": \"1262145\",\n      \"name\": \"soccer-ball-o\",\n      \"font_class\": \"soccer-ball-o\",\n      \"unicode\": \"e859\",\n      \"unicode_decimal\": 59481\n    },\n    {\n      \"icon_id\": \"1262146\",\n      \"name\": \"sort-alpha-asc\",\n      \"font_class\": \"sort-alpha-asc\",\n      \"unicode\": \"e85a\",\n      \"unicode_decimal\": 59482\n    },\n    {\n      \"icon_id\": \"1262152\",\n      \"name\": \"sort-alpha-desc\",\n      \"font_class\": \"sort-alpha-desc\",\n      \"unicode\": \"e85b\",\n      \"unicode_decimal\": 59483\n    },\n    {\n      \"icon_id\": \"1262153\",\n      \"name\": \"sort-amount-asc\",\n      \"font_class\": \"sort-amount-asc\",\n      \"unicode\": \"e85c\",\n      \"unicode_decimal\": 59484\n    },\n    {\n      \"icon_id\": \"1262154\",\n      \"name\": \"sort-desc\",\n      \"font_class\": \"sort-desc\",\n      \"unicode\": \"e85d\",\n      \"unicode_decimal\": 59485\n    },\n    {\n      \"icon_id\": \"1262155\",\n      \"name\": \"sort-down\",\n      \"font_class\": \"sort-down\",\n      \"unicode\": \"e85e\",\n      \"unicode_decimal\": 59486\n    },\n    {\n      \"icon_id\": \"1262156\",\n      \"name\": \"sort-numeric-asc\",\n      \"font_class\": \"sort-numeric-asc\",\n      \"unicode\": \"e85f\",\n      \"unicode_decimal\": 59487\n    },\n    {\n      \"icon_id\": \"1262157\",\n      \"name\": \"sort-asc\",\n      \"font_class\": \"sort-asc\",\n      \"unicode\": \"e860\",\n      \"unicode_decimal\": 59488\n    },\n    {\n      \"icon_id\": \"1262158\",\n      \"name\": \"sort-amount-desc\",\n      \"font_class\": \"sort-amount-desc\",\n      \"unicode\": \"e861\",\n      \"unicode_decimal\": 59489\n    },\n    {\n      \"icon_id\": \"1262159\",\n      \"name\": \"sort-numeric-desc\",\n      \"font_class\": \"sort-numeric-desc\",\n      \"unicode\": \"e862\",\n      \"unicode_decimal\": 59490\n    },\n    {\n      \"icon_id\": \"1262160\",\n      \"name\": \"sort-up\",\n      \"font_class\": \"sort-up\",\n      \"unicode\": \"e863\",\n      \"unicode_decimal\": 59491\n    },\n    {\n      \"icon_id\": \"1262161\",\n      \"name\": \"sort\",\n      \"font_class\": \"sort\",\n      \"unicode\": \"e864\",\n      \"unicode_decimal\": 59492\n    },\n    {\n      \"icon_id\": \"1262162\",\n      \"name\": \"soundcloud\",\n      \"font_class\": \"soundcloud\",\n      \"unicode\": \"e865\",\n      \"unicode_decimal\": 59493\n    },\n    {\n      \"icon_id\": \"1262163\",\n      \"name\": \"space-shuttle\",\n      \"font_class\": \"space-shuttle\",\n      \"unicode\": \"e866\",\n      \"unicode_decimal\": 59494\n    },\n    {\n      \"icon_id\": \"1262164\",\n      \"name\": \"spinner\",\n      \"font_class\": \"spinner\",\n      \"unicode\": \"e867\",\n      \"unicode_decimal\": 59495\n    },\n    {\n      \"icon_id\": \"1262165\",\n      \"name\": \"spoon\",\n      \"font_class\": \"spoon\",\n      \"unicode\": \"e868\",\n      \"unicode_decimal\": 59496\n    },\n    {\n      \"icon_id\": \"1262166\",\n      \"name\": \"square-o\",\n      \"font_class\": \"square-o\",\n      \"unicode\": \"e869\",\n      \"unicode_decimal\": 59497\n    },\n    {\n      \"icon_id\": \"1262167\",\n      \"name\": \"spotify\",\n      \"font_class\": \"spotify\",\n      \"unicode\": \"e86a\",\n      \"unicode_decimal\": 59498\n    },\n    {\n      \"icon_id\": \"1262168\",\n      \"name\": \"square\",\n      \"font_class\": \"square\",\n      \"unicode\": \"e86b\",\n      \"unicode_decimal\": 59499\n    },\n    {\n      \"icon_id\": \"1262169\",\n      \"name\": \"stack-exchange\",\n      \"font_class\": \"stack-exchange\",\n      \"unicode\": \"e86c\",\n      \"unicode_decimal\": 59500\n    },\n    {\n      \"icon_id\": \"1262170\",\n      \"name\": \"star-half-empty\",\n      \"font_class\": \"star-half-empty\",\n      \"unicode\": \"e86d\",\n      \"unicode_decimal\": 59501\n    },\n    {\n      \"icon_id\": \"1262171\",\n      \"name\": \"stack-overflow\",\n      \"font_class\": \"stack-overflow\",\n      \"unicode\": \"e86e\",\n      \"unicode_decimal\": 59502\n    },\n    {\n      \"icon_id\": \"1262172\",\n      \"name\": \"star-half\",\n      \"font_class\": \"star-half\",\n      \"unicode\": \"e86f\",\n      \"unicode_decimal\": 59503\n    },\n    {\n      \"icon_id\": \"1262173\",\n      \"name\": \"star\",\n      \"font_class\": \"star\",\n      \"unicode\": \"e870\",\n      \"unicode_decimal\": 59504\n    },\n    {\n      \"icon_id\": \"1262174\",\n      \"name\": \"star-half-o\",\n      \"font_class\": \"star-half-o\",\n      \"unicode\": \"e871\",\n      \"unicode_decimal\": 59505\n    },\n    {\n      \"icon_id\": \"1262175\",\n      \"name\": \"star-o\",\n      \"font_class\": \"star-o\",\n      \"unicode\": \"e872\",\n      \"unicode_decimal\": 59506\n    },\n    {\n      \"icon_id\": \"1262176\",\n      \"name\": \"star-half-full\",\n      \"font_class\": \"star-half-full\",\n      \"unicode\": \"e873\",\n      \"unicode_decimal\": 59507\n    },\n    {\n      \"icon_id\": \"1262192\",\n      \"name\": \"sticky-note-o\",\n      \"font_class\": \"sticky-note-o\",\n      \"unicode\": \"e874\",\n      \"unicode_decimal\": 59508\n    },\n    {\n      \"icon_id\": \"1262193\",\n      \"name\": \"step-forward\",\n      \"font_class\": \"step-forward\",\n      \"unicode\": \"e875\",\n      \"unicode_decimal\": 59509\n    },\n    {\n      \"icon_id\": \"1262194\",\n      \"name\": \"steam\",\n      \"font_class\": \"steam\",\n      \"unicode\": \"e876\",\n      \"unicode_decimal\": 59510\n    },\n    {\n      \"icon_id\": \"1262195\",\n      \"name\": \"steam-square\",\n      \"font_class\": \"steam-square\",\n      \"unicode\": \"e877\",\n      \"unicode_decimal\": 59511\n    },\n    {\n      \"icon_id\": \"1262196\",\n      \"name\": \"stethoscope\",\n      \"font_class\": \"stethoscope\",\n      \"unicode\": \"e878\",\n      \"unicode_decimal\": 59512\n    },\n    {\n      \"icon_id\": \"1262197\",\n      \"name\": \"step-backward\",\n      \"font_class\": \"step-backward\",\n      \"unicode\": \"e879\",\n      \"unicode_decimal\": 59513\n    },\n    {\n      \"icon_id\": \"1262198\",\n      \"name\": \"stop\",\n      \"font_class\": \"stop\",\n      \"unicode\": \"e87a\",\n      \"unicode_decimal\": 59514\n    },\n    {\n      \"icon_id\": \"1262199\",\n      \"name\": \"stop-circle\",\n      \"font_class\": \"stop-circle\",\n      \"unicode\": \"e87b\",\n      \"unicode_decimal\": 59515\n    },\n    {\n      \"icon_id\": \"1262200\",\n      \"name\": \"stop-circle-o\",\n      \"font_class\": \"stop-circle-o\",\n      \"unicode\": \"e87c\",\n      \"unicode_decimal\": 59516\n    },\n    {\n      \"icon_id\": \"1262201\",\n      \"name\": \"sticky-note\",\n      \"font_class\": \"sticky-note\",\n      \"unicode\": \"e87d\",\n      \"unicode_decimal\": 59517\n    },\n    {\n      \"icon_id\": \"1262202\",\n      \"name\": \"street-view\",\n      \"font_class\": \"street-view\",\n      \"unicode\": \"e87e\",\n      \"unicode_decimal\": 59518\n    },\n    {\n      \"icon_id\": \"1262203\",\n      \"name\": \"strikethrough\",\n      \"font_class\": \"strikethrough\",\n      \"unicode\": \"e87f\",\n      \"unicode_decimal\": 59519\n    },\n    {\n      \"icon_id\": \"1262204\",\n      \"name\": \"stumbleupon\",\n      \"font_class\": \"stumbleupon\",\n      \"unicode\": \"e880\",\n      \"unicode_decimal\": 59520\n    },\n    {\n      \"icon_id\": \"1262205\",\n      \"name\": \"subway\",\n      \"font_class\": \"subway\",\n      \"unicode\": \"e881\",\n      \"unicode_decimal\": 59521\n    },\n    {\n      \"icon_id\": \"1262206\",\n      \"name\": \"stumbleupon-circle\",\n      \"font_class\": \"stumbleupon-circle\",\n      \"unicode\": \"e882\",\n      \"unicode_decimal\": 59522\n    },\n    {\n      \"icon_id\": \"1262207\",\n      \"name\": \"suitcase\",\n      \"font_class\": \"suitcase\",\n      \"unicode\": \"e883\",\n      \"unicode_decimal\": 59523\n    },\n    {\n      \"icon_id\": \"1262208\",\n      \"name\": \"subscript\",\n      \"font_class\": \"subscript\",\n      \"unicode\": \"e884\",\n      \"unicode_decimal\": 59524\n    },\n    {\n      \"icon_id\": \"1262209\",\n      \"name\": \"sun-o\",\n      \"font_class\": \"sun-o\",\n      \"unicode\": \"e885\",\n      \"unicode_decimal\": 59525\n    },\n    {\n      \"icon_id\": \"1262210\",\n      \"name\": \"superpowers\",\n      \"font_class\": \"superpowers\",\n      \"unicode\": \"e886\",\n      \"unicode_decimal\": 59526\n    },\n    {\n      \"icon_id\": \"1262211\",\n      \"name\": \"tablet\",\n      \"font_class\": \"tablet\",\n      \"unicode\": \"e887\",\n      \"unicode_decimal\": 59527\n    },\n    {\n      \"icon_id\": \"1262212\",\n      \"name\": \"table\",\n      \"font_class\": \"table\",\n      \"unicode\": \"e888\",\n      \"unicode_decimal\": 59528\n    },\n    {\n      \"icon_id\": \"1262213\",\n      \"name\": \"support\",\n      \"font_class\": \"support\",\n      \"unicode\": \"e889\",\n      \"unicode_decimal\": 59529\n    },\n    {\n      \"icon_id\": \"1262214\",\n      \"name\": \"superscript\",\n      \"font_class\": \"superscript\",\n      \"unicode\": \"e88a\",\n      \"unicode_decimal\": 59530\n    },\n    {\n      \"icon_id\": \"1262233\",\n      \"name\": \"tasks\",\n      \"font_class\": \"tasks\",\n      \"unicode\": \"e88b\",\n      \"unicode_decimal\": 59531\n    },\n    {\n      \"icon_id\": \"1262234\",\n      \"name\": \"tags\",\n      \"font_class\": \"tags\",\n      \"unicode\": \"e88c\",\n      \"unicode_decimal\": 59532\n    },\n    {\n      \"icon_id\": \"1262235\",\n      \"name\": \"tag\",\n      \"font_class\": \"tag\",\n      \"unicode\": \"e88d\",\n      \"unicode_decimal\": 59533\n    },\n    {\n      \"icon_id\": \"1262236\",\n      \"name\": \"tachometer\",\n      \"font_class\": \"tachometer\",\n      \"unicode\": \"e88e\",\n      \"unicode_decimal\": 59534\n    },\n    {\n      \"icon_id\": \"1262237\",\n      \"name\": \"telegram\",\n      \"font_class\": \"telegram\",\n      \"unicode\": \"e88f\",\n      \"unicode_decimal\": 59535\n    },\n    {\n      \"icon_id\": \"1262238\",\n      \"name\": \"taxi\",\n      \"font_class\": \"taxi\",\n      \"unicode\": \"e890\",\n      \"unicode_decimal\": 59536\n    },\n    {\n      \"icon_id\": \"1262239\",\n      \"name\": \"terminal\",\n      \"font_class\": \"terminal\",\n      \"unicode\": \"e891\",\n      \"unicode_decimal\": 59537\n    },\n    {\n      \"icon_id\": \"1262240\",\n      \"name\": \"tencent-weibo\",\n      \"font_class\": \"tencent-weibo\",\n      \"unicode\": \"e892\",\n      \"unicode_decimal\": 59538\n    },\n    {\n      \"icon_id\": \"1262241\",\n      \"name\": \"television\",\n      \"font_class\": \"television\",\n      \"unicode\": \"e893\",\n      \"unicode_decimal\": 59539\n    },\n    {\n      \"icon_id\": \"1262242\",\n      \"name\": \"text-height\",\n      \"font_class\": \"text-height\",\n      \"unicode\": \"e894\",\n      \"unicode_decimal\": 59540\n    },\n    {\n      \"icon_id\": \"1262243\",\n      \"name\": \"text-width\",\n      \"font_class\": \"text-width\",\n      \"unicode\": \"e895\",\n      \"unicode_decimal\": 59541\n    },\n    {\n      \"icon_id\": \"1262244\",\n      \"name\": \"th-large\",\n      \"font_class\": \"th-large\",\n      \"unicode\": \"e896\",\n      \"unicode_decimal\": 59542\n    },\n    {\n      \"icon_id\": \"1262245\",\n      \"name\": \"th-list\",\n      \"font_class\": \"th-list\",\n      \"unicode\": \"e897\",\n      \"unicode_decimal\": 59543\n    },\n    {\n      \"icon_id\": \"1262246\",\n      \"name\": \"thermometer-0\",\n      \"font_class\": \"thermometer-0\",\n      \"unicode\": \"e898\",\n      \"unicode_decimal\": 59544\n    },\n    {\n      \"icon_id\": \"1262247\",\n      \"name\": \"th\",\n      \"font_class\": \"th\",\n      \"unicode\": \"e899\",\n      \"unicode_decimal\": 59545\n    },\n    {\n      \"icon_id\": \"1262248\",\n      \"name\": \"themeisle\",\n      \"font_class\": \"themeisle\",\n      \"unicode\": \"e89a\",\n      \"unicode_decimal\": 59546\n    },\n    {\n      \"icon_id\": \"1262249\",\n      \"name\": \"thermometer-1\",\n      \"font_class\": \"thermometer-1\",\n      \"unicode\": \"e89b\",\n      \"unicode_decimal\": 59547\n    },\n    {\n      \"icon_id\": \"1262250\",\n      \"name\": \"thermometer-2\",\n      \"font_class\": \"thermometer-2\",\n      \"unicode\": \"e89c\",\n      \"unicode_decimal\": 59548\n    },\n    {\n      \"icon_id\": \"1262251\",\n      \"name\": \"thermometer-3\",\n      \"font_class\": \"thermometer-3\",\n      \"unicode\": \"e89d\",\n      \"unicode_decimal\": 59549\n    },\n    {\n      \"icon_id\": \"1262252\",\n      \"name\": \"thermometer-4\",\n      \"font_class\": \"thermometer-4\",\n      \"unicode\": \"e89e\",\n      \"unicode_decimal\": 59550\n    },\n    {\n      \"icon_id\": \"1262253\",\n      \"name\": \"thermometer-empty\",\n      \"font_class\": \"thermometer-empty\",\n      \"unicode\": \"e89f\",\n      \"unicode_decimal\": 59551\n    },\n    {\n      \"icon_id\": \"1262254\",\n      \"name\": \"thermometer-full\",\n      \"font_class\": \"thermometer-full\",\n      \"unicode\": \"e8a0\",\n      \"unicode_decimal\": 59552\n    },\n    {\n      \"icon_id\": \"1262255\",\n      \"name\": \"thermometer-half\",\n      \"font_class\": \"thermometer-half\",\n      \"unicode\": \"e8a1\",\n      \"unicode_decimal\": 59553\n    },\n    {\n      \"icon_id\": \"1262256\",\n      \"name\": \"thumb-tack\",\n      \"font_class\": \"thumb-tack\",\n      \"unicode\": \"e8a2\",\n      \"unicode_decimal\": 59554\n    },\n    {\n      \"icon_id\": \"1262257\",\n      \"name\": \"thermometer-three-quarters\",\n      \"font_class\": \"thermometer-three-quarters\",\n      \"unicode\": \"e8a3\",\n      \"unicode_decimal\": 59555\n    },\n    {\n      \"icon_id\": \"1262258\",\n      \"name\": \"thermometer-quarter\",\n      \"font_class\": \"thermometer-quarter\",\n      \"unicode\": \"e8a4\",\n      \"unicode_decimal\": 59556\n    },\n    {\n      \"icon_id\": \"1262259\",\n      \"name\": \"thermometer\",\n      \"font_class\": \"thermometer\",\n      \"unicode\": \"e8a5\",\n      \"unicode_decimal\": 59557\n    },\n    {\n      \"icon_id\": \"1262260\",\n      \"name\": \"thumbs-down\",\n      \"font_class\": \"thumbs-down\",\n      \"unicode\": \"e8a6\",\n      \"unicode_decimal\": 59558\n    },\n    {\n      \"icon_id\": \"1262281\",\n      \"name\": \"times-circle\",\n      \"font_class\": \"times-circle\",\n      \"unicode\": \"e8a7\",\n      \"unicode_decimal\": 59559\n    },\n    {\n      \"icon_id\": \"1262282\",\n      \"name\": \"thumbs-up\",\n      \"font_class\": \"thumbs-up\",\n      \"unicode\": \"e8a8\",\n      \"unicode_decimal\": 59560\n    },\n    {\n      \"icon_id\": \"1262283\",\n      \"name\": \"ticket\",\n      \"font_class\": \"ticket\",\n      \"unicode\": \"e8a9\",\n      \"unicode_decimal\": 59561\n    },\n    {\n      \"icon_id\": \"1262284\",\n      \"name\": \"thumbs-o-down\",\n      \"font_class\": \"thumbs-o-down\",\n      \"unicode\": \"e8aa\",\n      \"unicode_decimal\": 59562\n    },\n    {\n      \"icon_id\": \"1262285\",\n      \"name\": \"thumbs-o-up\",\n      \"font_class\": \"thumbs-o-up\",\n      \"unicode\": \"e8ab\",\n      \"unicode_decimal\": 59563\n    },\n    {\n      \"icon_id\": \"1262286\",\n      \"name\": \"times-circle-o\",\n      \"font_class\": \"times-circle-o\",\n      \"unicode\": \"e8ac\",\n      \"unicode_decimal\": 59564\n    },\n    {\n      \"icon_id\": \"1262287\",\n      \"name\": \"times-rectangle-o\",\n      \"font_class\": \"times-rectangle-o\",\n      \"unicode\": \"e8ad\",\n      \"unicode_decimal\": 59565\n    },\n    {\n      \"icon_id\": \"1262288\",\n      \"name\": \"times-rectangle\",\n      \"font_class\": \"times-rectangle\",\n      \"unicode\": \"e8ae\",\n      \"unicode_decimal\": 59566\n    },\n    {\n      \"icon_id\": \"1262289\",\n      \"name\": \"times\",\n      \"font_class\": \"times\",\n      \"unicode\": \"e8af\",\n      \"unicode_decimal\": 59567\n    },\n    {\n      \"icon_id\": \"1262290\",\n      \"name\": \"tint\",\n      \"font_class\": \"tint\",\n      \"unicode\": \"e8b0\",\n      \"unicode_decimal\": 59568\n    },\n    {\n      \"icon_id\": \"1262291\",\n      \"name\": \"toggle-left\",\n      \"font_class\": \"toggle-left\",\n      \"unicode\": \"e8b1\",\n      \"unicode_decimal\": 59569\n    },\n    {\n      \"icon_id\": \"1262292\",\n      \"name\": \"toggle-down\",\n      \"font_class\": \"toggle-down\",\n      \"unicode\": \"e8b2\",\n      \"unicode_decimal\": 59570\n    },\n    {\n      \"icon_id\": \"1262293\",\n      \"name\": \"toggle-off\",\n      \"font_class\": \"toggle-off\",\n      \"unicode\": \"e8b3\",\n      \"unicode_decimal\": 59571\n    },\n    {\n      \"icon_id\": \"1262294\",\n      \"name\": \"toggle-right\",\n      \"font_class\": \"toggle-right\",\n      \"unicode\": \"e8b4\",\n      \"unicode_decimal\": 59572\n    },\n    {\n      \"icon_id\": \"1262295\",\n      \"name\": \"toggle-on\",\n      \"font_class\": \"toggle-on\",\n      \"unicode\": \"e8b5\",\n      \"unicode_decimal\": 59573\n    },\n    {\n      \"icon_id\": \"1262296\",\n      \"name\": \"toggle-up\",\n      \"font_class\": \"toggle-up\",\n      \"unicode\": \"e8b6\",\n      \"unicode_decimal\": 59574\n    },\n    {\n      \"icon_id\": \"1262298\",\n      \"name\": \"transgender-alt\",\n      \"font_class\": \"transgender-alt\",\n      \"unicode\": \"e8b7\",\n      \"unicode_decimal\": 59575\n    },\n    {\n      \"icon_id\": \"1262299\",\n      \"name\": \"trademark\",\n      \"font_class\": \"trademark\",\n      \"unicode\": \"e8b8\",\n      \"unicode_decimal\": 59576\n    },\n    {\n      \"icon_id\": \"1262300\",\n      \"name\": \"train\",\n      \"font_class\": \"train\",\n      \"unicode\": \"e8b9\",\n      \"unicode_decimal\": 59577\n    },\n    {\n      \"icon_id\": \"1262301\",\n      \"name\": \"trash-o\",\n      \"font_class\": \"trash-o\",\n      \"unicode\": \"e8ba\",\n      \"unicode_decimal\": 59578\n    },\n    {\n      \"icon_id\": \"1262302\",\n      \"name\": \"trash\",\n      \"font_class\": \"trash\",\n      \"unicode\": \"e8bb\",\n      \"unicode_decimal\": 59579\n    },\n    {\n      \"icon_id\": \"1262303\",\n      \"name\": \"transgender\",\n      \"font_class\": \"transgender\",\n      \"unicode\": \"e8bc\",\n      \"unicode_decimal\": 59580\n    },\n    {\n      \"icon_id\": \"1262304\",\n      \"name\": \"tree\",\n      \"font_class\": \"tree\",\n      \"unicode\": \"e8bd\",\n      \"unicode_decimal\": 59581\n    },\n    {\n      \"icon_id\": \"1262309\",\n      \"name\": \"try\",\n      \"font_class\": \"try\",\n      \"unicode\": \"e8be\",\n      \"unicode_decimal\": 59582\n    },\n    {\n      \"icon_id\": \"1262310\",\n      \"name\": \"trello\",\n      \"font_class\": \"trello\",\n      \"unicode\": \"e8bf\",\n      \"unicode_decimal\": 59583\n    },\n    {\n      \"icon_id\": \"1262311\",\n      \"name\": \"trophy\",\n      \"font_class\": \"trophy\",\n      \"unicode\": \"e8c0\",\n      \"unicode_decimal\": 59584\n    },\n    {\n      \"icon_id\": \"1262312\",\n      \"name\": \"tty\",\n      \"font_class\": \"tty\",\n      \"unicode\": \"e8c1\",\n      \"unicode_decimal\": 59585\n    },\n    {\n      \"icon_id\": \"1262313\",\n      \"name\": \"truck\",\n      \"font_class\": \"truck\",\n      \"unicode\": \"e8c2\",\n      \"unicode_decimal\": 59586\n    },\n    {\n      \"icon_id\": \"1262314\",\n      \"name\": \"tripadvisor\",\n      \"font_class\": \"tripadvisor\",\n      \"unicode\": \"e8c3\",\n      \"unicode_decimal\": 59587\n    },\n    {\n      \"icon_id\": \"1262315\",\n      \"name\": \"tumblr-square\",\n      \"font_class\": \"tumblr-square\",\n      \"unicode\": \"e8c4\",\n      \"unicode_decimal\": 59588\n    },\n    {\n      \"icon_id\": \"1262316\",\n      \"name\": \"turkish-lira\",\n      \"font_class\": \"turkish-lira\",\n      \"unicode\": \"e8c5\",\n      \"unicode_decimal\": 59589\n    },\n    {\n      \"icon_id\": \"1262317\",\n      \"name\": \"tumblr\",\n      \"font_class\": \"tumblr\",\n      \"unicode\": \"e8c6\",\n      \"unicode_decimal\": 59590\n    },\n    {\n      \"icon_id\": \"1262318\",\n      \"name\": \"tv\",\n      \"font_class\": \"tv\",\n      \"unicode\": \"e8c7\",\n      \"unicode_decimal\": 59591\n    },\n    {\n      \"icon_id\": \"1262319\",\n      \"name\": \"twitter\",\n      \"font_class\": \"twitter\",\n      \"unicode\": \"e8c8\",\n      \"unicode_decimal\": 59592\n    },\n    {\n      \"icon_id\": \"1262320\",\n      \"name\": \"twitter-square\",\n      \"font_class\": \"twitter-square\",\n      \"unicode\": \"e8c9\",\n      \"unicode_decimal\": 59593\n    },\n    {\n      \"icon_id\": \"1262321\",\n      \"name\": \"twitch\",\n      \"font_class\": \"twitch\",\n      \"unicode\": \"e8ca\",\n      \"unicode_decimal\": 59594\n    },\n    {\n      \"icon_id\": \"1262322\",\n      \"name\": \"underline\",\n      \"font_class\": \"underline\",\n      \"unicode\": \"e8cb\",\n      \"unicode_decimal\": 59595\n    },\n    {\n      \"icon_id\": \"1262323\",\n      \"name\": \"umbrella\",\n      \"font_class\": \"umbrella\",\n      \"unicode\": \"e8cc\",\n      \"unicode_decimal\": 59596\n    },\n    {\n      \"icon_id\": \"1262324\",\n      \"name\": \"undo\",\n      \"font_class\": \"undo\",\n      \"unicode\": \"e8cd\",\n      \"unicode_decimal\": 59597\n    },\n    {\n      \"icon_id\": \"1262325\",\n      \"name\": \"unlink\",\n      \"font_class\": \"unlink\",\n      \"unicode\": \"e8ce\",\n      \"unicode_decimal\": 59598\n    },\n    {\n      \"icon_id\": \"1262326\",\n      \"name\": \"university\",\n      \"font_class\": \"university\",\n      \"unicode\": \"e8cf\",\n      \"unicode_decimal\": 59599\n    },\n    {\n      \"icon_id\": \"1262327\",\n      \"name\": \"universal-access\",\n      \"font_class\": \"universal-access\",\n      \"unicode\": \"e8d0\",\n      \"unicode_decimal\": 59600\n    },\n    {\n      \"icon_id\": \"1262328\",\n      \"name\": \"unlock-alt\",\n      \"font_class\": \"unlock-alt\",\n      \"unicode\": \"e8d1\",\n      \"unicode_decimal\": 59601\n    },\n    {\n      \"icon_id\": \"1262329\",\n      \"name\": \"unlock\",\n      \"font_class\": \"unlock\",\n      \"unicode\": \"e8d2\",\n      \"unicode_decimal\": 59602\n    },\n    {\n      \"icon_id\": \"1262330\",\n      \"name\": \"upload\",\n      \"font_class\": \"upload\",\n      \"unicode\": \"e8d3\",\n      \"unicode_decimal\": 59603\n    },\n    {\n      \"icon_id\": \"1262331\",\n      \"name\": \"unsorted\",\n      \"font_class\": \"unsorted\",\n      \"unicode\": \"e8d4\",\n      \"unicode_decimal\": 59604\n    },\n    {\n      \"icon_id\": \"1262332\",\n      \"name\": \"usd\",\n      \"font_class\": \"usd\",\n      \"unicode\": \"e8d5\",\n      \"unicode_decimal\": 59605\n    },\n    {\n      \"icon_id\": \"1262333\",\n      \"name\": \"usb\",\n      \"font_class\": \"usb\",\n      \"unicode\": \"e8d6\",\n      \"unicode_decimal\": 59606\n    },\n    {\n      \"icon_id\": \"1262334\",\n      \"name\": \"user-circle\",\n      \"font_class\": \"user-circle\",\n      \"unicode\": \"e8d7\",\n      \"unicode_decimal\": 59607\n    },\n    {\n      \"icon_id\": \"1262335\",\n      \"name\": \"user-o\",\n      \"font_class\": \"user-o\",\n      \"unicode\": \"e8d8\",\n      \"unicode_decimal\": 59608\n    },\n    {\n      \"icon_id\": \"1262336\",\n      \"name\": \"user-circle-o\",\n      \"font_class\": \"user-circle-o\",\n      \"unicode\": \"e8d9\",\n      \"unicode_decimal\": 59609\n    },\n    {\n      \"icon_id\": \"1262337\",\n      \"name\": \"user-plus\",\n      \"font_class\": \"user-plus\",\n      \"unicode\": \"e8da\",\n      \"unicode_decimal\": 59610\n    },\n    {\n      \"icon_id\": \"1262338\",\n      \"name\": \"user-md\",\n      \"font_class\": \"user-md\",\n      \"unicode\": \"e8db\",\n      \"unicode_decimal\": 59611\n    },\n    {\n      \"icon_id\": \"1262339\",\n      \"name\": \"user-secret\",\n      \"font_class\": \"user-secret\",\n      \"unicode\": \"e8dc\",\n      \"unicode_decimal\": 59612\n    },\n    {\n      \"icon_id\": \"1262340\",\n      \"name\": \"user\",\n      \"font_class\": \"user\",\n      \"unicode\": \"e8dd\",\n      \"unicode_decimal\": 59613\n    },\n    {\n      \"icon_id\": \"1262341\",\n      \"name\": \"user-times\",\n      \"font_class\": \"user-times\",\n      \"unicode\": \"e8de\",\n      \"unicode_decimal\": 59614\n    },\n    {\n      \"icon_id\": \"1262342\",\n      \"name\": \"users\",\n      \"font_class\": \"users\",\n      \"unicode\": \"e8df\",\n      \"unicode_decimal\": 59615\n    },\n    {\n      \"icon_id\": \"1262343\",\n      \"name\": \"vcard-o\",\n      \"font_class\": \"vcard-o\",\n      \"unicode\": \"e8e0\",\n      \"unicode_decimal\": 59616\n    },\n    {\n      \"icon_id\": \"1262344\",\n      \"name\": \"vcard\",\n      \"font_class\": \"vcard\",\n      \"unicode\": \"e8e1\",\n      \"unicode_decimal\": 59617\n    },\n    {\n      \"icon_id\": \"1262345\",\n      \"name\": \"venus\",\n      \"font_class\": \"venus\",\n      \"unicode\": \"e8e2\",\n      \"unicode_decimal\": 59618\n    },\n    {\n      \"icon_id\": \"1262346\",\n      \"name\": \"venus-mars\",\n      \"font_class\": \"venus-mars\",\n      \"unicode\": \"e8e3\",\n      \"unicode_decimal\": 59619\n    },\n    {\n      \"icon_id\": \"1262347\",\n      \"name\": \"venus-double\",\n      \"font_class\": \"venus-double\",\n      \"unicode\": \"e8e4\",\n      \"unicode_decimal\": 59620\n    },\n    {\n      \"icon_id\": \"1262348\",\n      \"name\": \"viadeo-square\",\n      \"font_class\": \"viadeo-square\",\n      \"unicode\": \"e8e5\",\n      \"unicode_decimal\": 59621\n    },\n    {\n      \"icon_id\": \"1262349\",\n      \"name\": \"viacoin\",\n      \"font_class\": \"viacoin\",\n      \"unicode\": \"e8e6\",\n      \"unicode_decimal\": 59622\n    },\n    {\n      \"icon_id\": \"1262350\",\n      \"name\": \"viadeo\",\n      \"font_class\": \"viadeo\",\n      \"unicode\": \"e8e7\",\n      \"unicode_decimal\": 59623\n    },\n    {\n      \"icon_id\": \"1262351\",\n      \"name\": \"video-camera\",\n      \"font_class\": \"video-camera\",\n      \"unicode\": \"e8e8\",\n      \"unicode_decimal\": 59624\n    },\n    {\n      \"icon_id\": \"1262352\",\n      \"name\": \"vimeo-square\",\n      \"font_class\": \"vimeo-square\",\n      \"unicode\": \"e8e9\",\n      \"unicode_decimal\": 59625\n    },\n    {\n      \"icon_id\": \"1262353\",\n      \"name\": \"vine\",\n      \"font_class\": \"vine\",\n      \"unicode\": \"e8ea\",\n      \"unicode_decimal\": 59626\n    },\n    {\n      \"icon_id\": \"1262354\",\n      \"name\": \"vimeo\",\n      \"font_class\": \"vimeo\",\n      \"unicode\": \"e8eb\",\n      \"unicode_decimal\": 59627\n    },\n    {\n      \"icon_id\": \"1262355\",\n      \"name\": \"vk\",\n      \"font_class\": \"vk\",\n      \"unicode\": \"e8ec\",\n      \"unicode_decimal\": 59628\n    },\n    {\n      \"icon_id\": \"1262356\",\n      \"name\": \"volume-control-phone\",\n      \"font_class\": \"volume-control-phone\",\n      \"unicode\": \"e8ed\",\n      \"unicode_decimal\": 59629\n    },\n    {\n      \"icon_id\": \"1262357\",\n      \"name\": \"volume-off\",\n      \"font_class\": \"volume-off\",\n      \"unicode\": \"e8ee\",\n      \"unicode_decimal\": 59630\n    },\n    {\n      \"icon_id\": \"1262358\",\n      \"name\": \"volume-down\",\n      \"font_class\": \"volume-down\",\n      \"unicode\": \"e8ef\",\n      \"unicode_decimal\": 59631\n    },\n    {\n      \"icon_id\": \"1262359\",\n      \"name\": \"warning\",\n      \"font_class\": \"warning\",\n      \"unicode\": \"e8f0\",\n      \"unicode_decimal\": 59632\n    },\n    {\n      \"icon_id\": \"1262360\",\n      \"name\": \"volume-up\",\n      \"font_class\": \"volume-up\",\n      \"unicode\": \"e8f1\",\n      \"unicode_decimal\": 59633\n    },\n    {\n      \"icon_id\": \"1262361\",\n      \"name\": \"wechat\",\n      \"font_class\": \"wechat\",\n      \"unicode\": \"e8f2\",\n      \"unicode_decimal\": 59634\n    },\n    {\n      \"icon_id\": \"1262362\",\n      \"name\": \"weibo\",\n      \"font_class\": \"weibo\",\n      \"unicode\": \"e8f3\",\n      \"unicode_decimal\": 59635\n    },\n    {\n      \"icon_id\": \"1262363\",\n      \"name\": \"whatsapp\",\n      \"font_class\": \"whatsapp\",\n      \"unicode\": \"e8f4\",\n      \"unicode_decimal\": 59636\n    },\n    {\n      \"icon_id\": \"1262364\",\n      \"name\": \"weixin\",\n      \"font_class\": \"weixin\",\n      \"unicode\": \"e8f5\",\n      \"unicode_decimal\": 59637\n    },\n    {\n      \"icon_id\": \"1262365\",\n      \"name\": \"wheelchair-alt\",\n      \"font_class\": \"wheelchair-alt\",\n      \"unicode\": \"e8f6\",\n      \"unicode_decimal\": 59638\n    },\n    {\n      \"icon_id\": \"1262366\",\n      \"name\": \"wheelchair\",\n      \"font_class\": \"wheelchair\",\n      \"unicode\": \"e8f7\",\n      \"unicode_decimal\": 59639\n    },\n    {\n      \"icon_id\": \"1262367\",\n      \"name\": \"wikipedia-w\",\n      \"font_class\": \"wikipedia-w\",\n      \"unicode\": \"e8f8\",\n      \"unicode_decimal\": 59640\n    },\n    {\n      \"icon_id\": \"1262368\",\n      \"name\": \"wifi\",\n      \"font_class\": \"wifi\",\n      \"unicode\": \"e8f9\",\n      \"unicode_decimal\": 59641\n    },\n    {\n      \"icon_id\": \"1262369\",\n      \"name\": \"window-close\",\n      \"font_class\": \"window-close\",\n      \"unicode\": \"e8fa\",\n      \"unicode_decimal\": 59642\n    },\n    {\n      \"icon_id\": \"1262370\",\n      \"name\": \"window-close-o\",\n      \"font_class\": \"window-close-o\",\n      \"unicode\": \"e8fb\",\n      \"unicode_decimal\": 59643\n    },\n    {\n      \"icon_id\": \"1262371\",\n      \"name\": \"window-maximize\",\n      \"font_class\": \"window-maximize\",\n      \"unicode\": \"e8fc\",\n      \"unicode_decimal\": 59644\n    },\n    {\n      \"icon_id\": \"1262372\",\n      \"name\": \"window-minimize\",\n      \"font_class\": \"window-minimize\",\n      \"unicode\": \"e8fd\",\n      \"unicode_decimal\": 59645\n    },\n    {\n      \"icon_id\": \"1262373\",\n      \"name\": \"window-restore\",\n      \"font_class\": \"window-restore\",\n      \"unicode\": \"e8fe\",\n      \"unicode_decimal\": 59646\n    },\n    {\n      \"icon_id\": \"1262374\",\n      \"name\": \"windows\",\n      \"font_class\": \"windows\",\n      \"unicode\": \"e8ff\",\n      \"unicode_decimal\": 59647\n    },\n    {\n      \"icon_id\": \"1262375\",\n      \"name\": \"won\",\n      \"font_class\": \"won\",\n      \"unicode\": \"e900\",\n      \"unicode_decimal\": 59648\n    },\n    {\n      \"icon_id\": \"1262376\",\n      \"name\": \"wordpress\",\n      \"font_class\": \"wordpress\",\n      \"unicode\": \"e901\",\n      \"unicode_decimal\": 59649\n    },\n    {\n      \"icon_id\": \"1262377\",\n      \"name\": \"wpexplorer\",\n      \"font_class\": \"wpexplorer\",\n      \"unicode\": \"e902\",\n      \"unicode_decimal\": 59650\n    },\n    {\n      \"icon_id\": \"1262378\",\n      \"name\": \"wpbeginner\",\n      \"font_class\": \"wpbeginner\",\n      \"unicode\": \"e903\",\n      \"unicode_decimal\": 59651\n    },\n    {\n      \"icon_id\": \"1262379\",\n      \"name\": \"xing-square\",\n      \"font_class\": \"xing-square\",\n      \"unicode\": \"e904\",\n      \"unicode_decimal\": 59652\n    },\n    {\n      \"icon_id\": \"1262380\",\n      \"name\": \"wrench\",\n      \"font_class\": \"wrench\",\n      \"unicode\": \"e905\",\n      \"unicode_decimal\": 59653\n    },\n    {\n      \"icon_id\": \"1262381\",\n      \"name\": \"wpforms\",\n      \"font_class\": \"wpforms\",\n      \"unicode\": \"e906\",\n      \"unicode_decimal\": 59654\n    },\n    {\n      \"icon_id\": \"1262382\",\n      \"name\": \"y-combinator\",\n      \"font_class\": \"y-combinator\",\n      \"unicode\": \"e907\",\n      \"unicode_decimal\": 59655\n    },\n    {\n      \"icon_id\": \"1262383\",\n      \"name\": \"xing\",\n      \"font_class\": \"xing\",\n      \"unicode\": \"e908\",\n      \"unicode_decimal\": 59656\n    },\n    {\n      \"icon_id\": \"1262384\",\n      \"name\": \"y-combinator-square\",\n      \"font_class\": \"y-combinator-square\",\n      \"unicode\": \"e909\",\n      \"unicode_decimal\": 59657\n    },\n    {\n      \"icon_id\": \"1262385\",\n      \"name\": \"yahoo\",\n      \"font_class\": \"yahoo\",\n      \"unicode\": \"e90a\",\n      \"unicode_decimal\": 59658\n    },\n    {\n      \"icon_id\": \"1262386\",\n      \"name\": \"yc\",\n      \"font_class\": \"yc\",\n      \"unicode\": \"e90b\",\n      \"unicode_decimal\": 59659\n    },\n    {\n      \"icon_id\": \"1262387\",\n      \"name\": \"yc-square\",\n      \"font_class\": \"yc-square\",\n      \"unicode\": \"e90c\",\n      \"unicode_decimal\": 59660\n    },\n    {\n      \"icon_id\": \"1262388\",\n      \"name\": \"yen\",\n      \"font_class\": \"yen\",\n      \"unicode\": \"e90d\",\n      \"unicode_decimal\": 59661\n    },\n    {\n      \"icon_id\": \"1262389\",\n      \"name\": \"yelp\",\n      \"font_class\": \"yelp\",\n      \"unicode\": \"e90e\",\n      \"unicode_decimal\": 59662\n    },\n    {\n      \"icon_id\": \"1262390\",\n      \"name\": \"yoast\",\n      \"font_class\": \"yoast\",\n      \"unicode\": \"e90f\",\n      \"unicode_decimal\": 59663\n    },\n    {\n      \"icon_id\": \"1262391\",\n      \"name\": \"youtube-play\",\n      \"font_class\": \"youtube-play\",\n      \"unicode\": \"e910\",\n      \"unicode_decimal\": 59664\n    },\n    {\n      \"icon_id\": \"1262392\",\n      \"name\": \"youtube-square\",\n      \"font_class\": \"youtube-square\",\n      \"unicode\": \"e911\",\n      \"unicode_decimal\": 59665\n    },\n    {\n      \"icon_id\": \"1262393\",\n      \"name\": \"youtube\",\n      \"font_class\": \"youtube\",\n      \"unicode\": \"e912\",\n      \"unicode_decimal\": 59666\n    }\n  ]\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery/jquery-1.12.4.js",
    "content": "/*!\n * jQuery JavaScript Library v1.12.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:17Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar deletedIds = [];\n\nvar document = window.document;\n\nvar slice = deletedIds.slice;\n\nvar concat = deletedIds.concat;\n\nvar push = deletedIds.push;\n\nvar indexOf = deletedIds.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"1.12.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1, IE<9\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: deletedIds.sort,\n\tsplice: deletedIds.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type( obj ) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\t/* jshint eqeqeq: false */\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Handle iteration over inherited properties before own properties.\n\t\tif ( !support.ownFirst ) {\n\t\t\tfor ( key in obj ) {\n\t\t\t\treturn hasOwn.call( obj, key );\n\t\t\t}\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data ); // jscs:ignore requireDotNotation\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1, IE<9\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( indexOf ) {\n\t\t\t\treturn indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\twhile ( j < len ) {\n\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)\n\t\tif ( len !== len ) {\n\t\t\twhile ( second[ j ] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: function() {\n\t\treturn +( new Date() );\n\t},\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tret = [],\n\t\t\tself = this,\n\t\t\tlen = self.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// init accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt( 0 ) === \"<\" &&\n\t\t\t\tselector.charAt( selector.length - 1 ) === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[ 2 ] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof root.ready !== \"undefined\" ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[ 0 ], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tret = jQuery.uniqueSort( ret );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tret = ret.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = true;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * Clean-up method for dom ready events\n */\nfunction detach() {\n\tif ( document.addEventListener ) {\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\t\twindow.removeEventListener( \"load\", completed );\n\n\t} else {\n\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\twindow.detachEvent( \"onload\", completed );\n\t}\n}\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\n\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\tif ( document.addEventListener ||\n\t\twindow.event.type === \"load\" ||\n\t\tdocument.readyState === \"complete\" ) {\n\n\t\tdetach();\n\t\tjQuery.ready();\n\t}\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE6-10\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\n\t\t// If IE event model is used\n\t\t} else {\n\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch ( e ) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t( function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll( \"left\" );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn window.setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t} )();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Support: IE<9\n// Iteration over object's inherited properties before its own\nvar i;\nfor ( i in jQuery( support ) ) {\n\tbreak;\n}\nsupport.ownFirst = i === \"0\";\n\n// Note: most support tests are defined in their respective modules.\n// false until the test is run\nsupport.inlineBlockNeedsLayout = false;\n\n// Execute ASAP in case we need to set body.style.zoom\njQuery( function() {\n\n\t// Minified: var a,b,c,d\n\tvar val, div, body, container;\n\n\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\tif ( !body || !body.style ) {\n\n\t\t// Return for frameset docs that don't have a body\n\t\treturn;\n\t}\n\n\t// Setup\n\tdiv = document.createElement( \"div\" );\n\tcontainer = document.createElement( \"div\" );\n\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\n\tbody.appendChild( container ).appendChild( div );\n\n\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\n\t\t// Support: IE<8\n\t\t// Check if natively block-level elements act like inline-block\n\t\t// elements when setting their display to 'inline' and giving\n\t\t// them layout\n\t\tdiv.style.cssText = \"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\";\n\n\t\tsupport.inlineBlockNeedsLayout = val = div.offsetWidth === 3;\n\t\tif ( val ) {\n\n\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t// Support: IE<8\n\t\t\tbody.style.zoom = 1;\n\t\t}\n\t}\n\n\tbody.removeChild( container );\n} );\n\n\n( function() {\n\tvar div = document.createElement( \"div\" );\n\n\t// Support: IE<9\n\tsupport.deleteExpando = true;\n\ttry {\n\t\tdelete div.test;\n\t} catch ( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Null elements to avoid leaks in IE.\n\tdiv = null;\n} )();\nvar acceptData = function( elem ) {\n\tvar noData = jQuery.noData[ ( elem.nodeName + \" \" ).toLowerCase() ],\n\t\tnodeType = +elem.nodeType || 1;\n\n\t// Do not set data on non-element DOM nodes because it will not be cleared (#8335).\n\treturn nodeType !== 1 && nodeType !== 9 ?\n\t\tfalse :\n\n\t\t// Nodes accept data unless otherwise specified; rejection can be conditional\n\t\t!noData || noData !== true && elem.getAttribute( \"classid\" ) === noData;\n};\n\n\n\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[ name ] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ) {\n\tif ( !acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar ret, thisCache,\n\t\tinternalKey = jQuery.expando,\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&\n\t\tdata === undefined && typeof name === \"string\" ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\tid = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( typeof name === \"string\" ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, i,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split( \" \" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete thisCache[ name[ i ] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t/* jshint eqeqeq: false */\n\t} else if ( support.deleteExpando || cache != cache.window ) {\n\t\t/* jshint eqeqeq: true */\n\t\tdelete cache[ id ];\n\n\t// When all else fails, undefined\n\t} else {\n\t\tcache[ id ] = undefined;\n\t}\n}\n\njQuery.extend( {\n\tcache: {},\n\n\t// The following elements (space-suffixed to avoid Object.prototype collisions)\n\t// throw uncatchable exceptions if you attempt to set expando properties\n\tnoData: {\n\t\t\"applet \": true,\n\t\t\"embed \": true,\n\n\t\t// ...but Flash objects (which have this classid) *can* handle expandos\n\t\t\"object \": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Special expections of .data basically thwart jQuery.access,\n\t\t// so implement the relevant behavior ourselves\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn arguments.length > 1 ?\n\n\t\t\t// Sets one value\n\t\t\tthis.each( function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t} ) :\n\n\t\t\t// Gets one value\n\t\t\t// Try to fetch any internally stored data first\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object,\n\t// or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\n\n( function() {\n\tvar shrinkWrapBlocksVal;\n\n\tsupport.shrinkWrapBlocks = function() {\n\t\tif ( shrinkWrapBlocksVal != null ) {\n\t\t\treturn shrinkWrapBlocksVal;\n\t\t}\n\n\t\t// Will be changed later if needed.\n\t\tshrinkWrapBlocksVal = false;\n\n\t\t// Minified: var b,c,d\n\t\tvar div, body, container;\n\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\t\tif ( !body || !body.style ) {\n\n\t\t\t// Test fired too early or in an unsupported environment, exit.\n\t\t\treturn;\n\t\t}\n\n\t\t// Setup\n\t\tdiv = document.createElement( \"div\" );\n\t\tcontainer = document.createElement( \"div\" );\n\t\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE6\n\t\t// Check if elements with layout shrink-wrap their children\n\t\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border\n\t\t\tdiv.style.cssText =\n\n\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;\" +\n\t\t\t\t\"padding:1px;width:1px;zoom:1\";\n\t\t\tdiv.appendChild( document.createElement( \"div\" ) ).style.width = \"5px\";\n\t\t\tshrinkWrapBlocksVal = div.offsetWidth !== 3;\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\treturn shrinkWrapBlocksVal;\n\t};\n\n} )();\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlength = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ],\n\t\t\t\t\tkey,\n\t\t\t\t\traw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlength ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\nvar rleadingWhitespace = ( /^\\s+/ );\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|\" +\n\t\t\"details|dialog|figcaption|figure|footer|header|hgroup|main|\" +\n\t\t\"mark|meter|nav|output|picture|progress|section|summary|template|time|video\";\n\n\n\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\n\n( function() {\n\tvar div = document.createElement( \"div\" ),\n\t\tfragment = document.createDocumentFragment(),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Setup\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\t// IE strips leading whitespace when .innerHTML is used\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\n\n\t// Make sure that tbody elements aren't automatically inserted\n\t// IE will insert them into empty tables\n\tsupport.tbody = !div.getElementsByTagName( \"tbody\" ).length;\n\n\t// Make sure that link elements get serialized correctly by innerHTML\n\t// This requires a wrapper element in IE\n\tsupport.htmlSerialize = !!div.getElementsByTagName( \"link\" ).length;\n\n\t// Makes sure cloning an html5 element does not cause problems\n\t// Where outerHTML is undefined, this still works\n\tsupport.html5Clone =\n\t\tdocument.createElement( \"nav\" ).cloneNode( true ).outerHTML !== \"<:nav></:nav>\";\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tinput.type = \"checkbox\";\n\tinput.checked = true;\n\tfragment.appendChild( input );\n\tsupport.appendChecked = input.checked;\n\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t// Support: IE6-IE11+\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tfragment.appendChild( div );\n\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput = document.createElement( \"input\" );\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\n\t// old WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Cloned elements keep attachEvent handlers, we use addEventListener on IE9+\n\tsupport.noCloneEvent = !!div.addEventListener;\n\n\t// Support: IE<9\n\t// Since attributes and properties are the same in IE,\n\t// cleanData must set properties to undefined rather than use removeAttribute\n\tdiv[ jQuery.expando ] = 1;\n\tsupport.attributes = !div.getAttribute( jQuery.expando );\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\tarea: [ 1, \"<map>\", \"</map>\" ],\n\n\t// Support: IE8\n\tparam: [ 1, \"<object>\", \"</object>\" ],\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t// unless wrapped in a div with non-breaking characters in front of it.\n\t_default: support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\" ]\n};\n\n// Support: IE8-IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context;\n\t\t\t( elem = elems[ i ] ) != null;\n\t\t\ti++\n\t\t) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\tjQuery._data(\n\t\t\telem,\n\t\t\t\"globalEval\",\n\t\t\t!refElements || jQuery._data( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/,\n\trtbody = /<tbody/i;\n\nfunction fixDefaultChecked( elem ) {\n\tif ( rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar j, elem, contains,\n\t\ttmp, tag, tbody, wrap,\n\t\tl = elems.length,\n\n\t\t// Ensure a safe fragment\n\t\tsafe = createSafeFragment( context ),\n\n\t\tnodes = [],\n\t\ti = 0;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || safe.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Manually add leading whitespace removed by IE\n\t\t\t\tif ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[ 0 ] ) );\n\t\t\t\t}\n\n\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\tif ( !support.tbody ) {\n\n\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\twrap[ 1 ] === \"<table>\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t0;\n\n\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\tif ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), \"tbody\" ) &&\n\t\t\t\t\t\t\t!tbody.childNodes.length ) {\n\n\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t}\n\n\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\ttmp = safe.lastChild;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Fix #11356: Clear elements from fragment\n\tif ( tmp ) {\n\t\tsafe.removeChild( tmp );\n\t}\n\n\t// Reset defaultChecked for any radios and checkboxes\n\t// about to be appended to the DOM in IE 6/7 (#8060)\n\tif ( !support.appendChecked ) {\n\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t}\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttmp = null;\n\n\treturn safe;\n}\n\n\n( function() {\n\tvar i, eventName,\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)\n\tfor ( i in { submit: true, change: true, focusin: true } ) {\n\t\teventName = \"on\" + i;\n\n\t\tif ( !( support[ i ] = eventName in window ) ) {\n\n\t\t\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n\t\t\tdiv.setAttribute( eventName, \"t\" );\n\t\t\tsupport[ i ] = div.attributes[ eventName ].expando === false;\n\t\t}\n\t}\n\n\t// Null elements to avoid leaks in IE.\n\tdiv = null;\n} )();\n\n\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" &&\n\t\t\t\t\t( !e || jQuery.event.triggered !== e.type ) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak\n\t\t\t// with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tjQuery._data( cur, \"handle\" );\n\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif (\n\t\t\t\t( !special._default ||\n\t\t\t\t special._default.apply( eventPath.pop(), data ) === false\n\t\t\t\t) && acceptData( elem )\n\t\t\t) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\t/* jshint eqeqeq: false */\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\t/* jshint eqeqeq: true */\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Safari 6-8+\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY fromElement offsetX offsetY \" +\n\t\t\t\"pageX pageY screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ?\n\t\t\t\t\toriginal.toElement :\n\t\t\t\t\tfromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// Guard for simulated events was moved to jQuery.event.stopPropagation function\n\t\t\t\t// since `originalEvent` should point to the original event for the\n\t\t\t\t// constancy with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event,\n\t\t\t// to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === \"undefined\" ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: IE < 9, Android < 4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( !e || this.isSimulated ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\n// IE submit delegation\nif ( !support.submit ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ?\n\n\t\t\t\t\t\t// Support: IE <=8\n\t\t\t\t\t\t// We use jQuery.prop instead of elem.form\n\t\t\t\t\t\t// to allow fixing the IE8 delegated submit issue (gh-2332)\n\t\t\t\t\t\t// by 3rd party polyfills/workarounds.\n\t\t\t\t\t\tjQuery.prop( elem, \"form\" ) :\n\t\t\t\t\t\tundefined;\n\n\t\t\t\tif ( form && !jQuery._data( form, \"submit\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submitBubble = true;\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery._data( form, \"submit\", true );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submitBubble ) {\n\t\t\t\tdelete event._submitBubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !support.change ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._justChanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._justChanged && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._justChanged = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"change\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery._data( elem, \"change\", true );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger ||\n\t\t\t\t( elem.type !== \"radio\" && elem.type !== \"checkbox\" ) ) {\n\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = jQuery._data( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tjQuery._data( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = jQuery._data( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tjQuery._removeData( doc, fix );\n\t\t\t\t} else {\n\t\t\t\t\tjQuery._data( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar rinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp( \"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\" ),\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement( \"div\" ) );\n\n// Support: IE<8\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( jQuery.find.attr( elem, \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar first, node, hasScripts,\n\t\tscripts, doc, fragment,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval(\n\t\t\t\t\t\t\t\t( node.text || node.textContent || node.innerHTML || \"\" )\n\t\t\t\t\t\t\t\t\t.replace( rcleanScript, \"\" )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\tfragment = first = null;\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\telems = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = elems[ i ] ) != null; i++ ) {\n\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( support.html5Clone || jQuery.isXMLDoc( elem ) ||\n\t\t\t!rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( ( !support.noCloneEvent || !support.noCloneChecked ) &&\n\t\t\t\t( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) {\n\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[ i ] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems, /* internal */ forceAcceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tattributes = support.attributes,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\tif ( forceAcceptData || acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes\n\t\t\t\t\t\t// IE creates expando attributes along with the property\n\t\t\t\t\t\t// IE does not have a removeAttribute function on Document nodes\n\t\t\t\t\t\tif ( !attributes && typeof elem.removeAttribute !== \"undefined\" ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdeletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append(\n\t\t\t\t\t( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value )\n\t\t\t\t);\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( support.htmlSerialize || !rnoshimcache.test( value )  ) &&\n\t\t\t\t( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[ i ] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, pixelMarginRightVal, boxSizingReliableVal,\n\t\treliableHiddenOffsetsVal, reliableMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\tdiv.style.cssText = \"float:left;opacity:.5\";\n\n\t// Support: IE<9\n\t// Make sure that element opacity exists (as opposed to filter)\n\tsupport.opacity = div.style.opacity === \"0.5\";\n\n\t// Verify style float existence\n\t// (IE uses styleFloat instead of cssFloat)\n\tsupport.cssFloat = !!div.style.cssFloat;\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer = document.createElement( \"div\" );\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tdiv.innerHTML = \"\";\n\tcontainer.appendChild( div );\n\n\t// Support: Firefox<29, Android 2.3\n\t// Vendor-prefix box-sizing\n\tsupport.boxSizing = div.style.boxSizing === \"\" || div.style.MozBoxSizing === \"\" ||\n\t\tdiv.style.WebkitBoxSizing === \"\";\n\n\tjQuery.extend( support, {\n\t\treliableHiddenOffsets: function() {\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableHiddenOffsetsVal;\n\t\t},\n\n\t\tboxSizingReliable: function() {\n\n\t\t\t// We're checking for pixelPositionVal here instead of boxSizingReliableVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\n\t\tpixelPosition: function() {\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelPositionVal;\n\t\t},\n\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginRightVal;\n\t\t},\n\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n\n\tfunction computeStyleTests() {\n\t\tvar contents, divStyle,\n\t\t\tdocumentElement = document.documentElement;\n\n\t\t// Setup\n\t\tdocumentElement.appendChild( container );\n\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\n\t\t// Support: IE<9\n\t\t// Assume reasonable values in the absence of getComputedStyle\n\t\tpixelPositionVal = boxSizingReliableVal = reliableMarginLeftVal = false;\n\t\tpixelMarginRightVal = reliableMarginRightVal = true;\n\n\t\t// Check for getComputedStyle so that this code is not run in IE<9.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tdivStyle = window.getComputedStyle( div );\n\t\t\tpixelPositionVal = ( divStyle || {} ).top !== \"1%\";\n\t\t\treliableMarginLeftVal = ( divStyle || {} ).marginLeft === \"2px\";\n\t\t\tboxSizingReliableVal = ( divStyle || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.marginRight = \"50%\";\n\t\t\tpixelMarginRightVal = ( divStyle || { marginRight: \"4px\" } ).marginRight === \"4px\";\n\n\t\t\t// Support: Android 2.3 only\n\t\t\t// Div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tcontents = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tcontents.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\tcontents.style.marginRight = contents.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\treliableMarginRightVal =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( contents ) || {} ).marginRight );\n\n\t\t\tdiv.removeChild( contents );\n\t\t}\n\n\t\t// Support: IE6-8\n\t\t// First check that getClientRects works as expected\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.style.display = \"none\";\n\t\treliableHiddenOffsetsVal = div.getClientRects().length === 0;\n\t\tif ( reliableHiddenOffsetsVal ) {\n\t\t\tdiv.style.display = \"\";\n\t\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\t\tdiv.childNodes[ 0 ].style.borderCollapse = \"separate\";\n\t\t\tcontents = div.getElementsByTagName( \"td\" );\n\t\t\tcontents[ 0 ].style.cssText = \"margin:0;border:0;padding:0;display:none\";\n\t\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\n\t\t\tif ( reliableHiddenOffsetsVal ) {\n\t\t\t\tcontents[ 0 ].style.display = \"\";\n\t\t\t\tcontents[ 1 ].style.display = \"none\";\n\t\t\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\n\t\t\t}\n\t\t}\n\n\t\t// Teardown\n\t\tdocumentElement.removeChild( container );\n\t}\n\n} )();\n\n\nvar getStyles, curCSS,\n\trposition = /^(top|right|bottom|left)$/;\n\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\tcurCSS = function( elem, name, computed ) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles( elem );\n\n\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t\t// Support: Opera 12.1x only\n\t\t// Fall back to style even without computed\n\t\t// computed is undefined for elems on document fragments\n\t\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\tif ( computed ) {\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\"\n\t\t\t// instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values,\n\t\t\t// but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec:\n\t\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\treturn ret === undefined ?\n\t\t\tret :\n\t\t\tret + \"\";\n\t};\n} else if ( documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, computed ) {\n\t\tvar left, rs, rsLeft, ret,\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles( elem );\n\t\tret = computed ? computed[ name ] : undefined;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are\n\t\t// proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it\n\t\t// might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\treturn ret === undefined ?\n\t\t\tret :\n\t\t\tret + \"\" || \"auto\";\n\t};\n}\n\n\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/i,\n\n\t// swappable if display is none or starts with table except\n\t// \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values:\n\t// https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt( 0 ).toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] =\n\t\t\t\t\tjQuery._data( elem, \"olddisplay\", defaultDisplay( elem.nodeName ) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\tjQuery._data(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = support.boxSizing &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\n\t\t// normalize float css property\n\t\t\"float\": support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set. See: #7116\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight\n\t\t\t// (for every problematic property) identical functions\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\t// Support: IE\n\t\t\t\t// Swallow errors from 'invalid' CSS values (#5509)\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar num, val, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tsupport.boxSizing &&\n\t\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n} );\n\nif ( !support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( ( computed && elem.currentStyle ?\n\t\t\t\telem.currentStyle.filter :\n\t\t\t\telem.style.filter ) || \"\" ) ?\n\t\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist -\n\t\t\t// attempt to remove filter attribute #6652\n\t\t\t// if value === \"\", then remove inline opacity #12685\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there is no filter style applied in a css rule\n\t\t\t\t// or unset inline opacity, we are done\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn (\n\t\t\t\tparseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\n\t\t\t\t// Support: IE<=11+\n\t\t\t\t// Running getBoundingClientRect on a disconnected node in IE throws an error\n\t\t\t\t// Support: IE8 only\n\t\t\t\t// getClientRects() errors on disconnected elems\n\t\t\t\t( jQuery.contains( elem.ownerDocument, elem ) ?\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t0\n\t\t\t\t)\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = jQuery._data( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE does not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tjQuery._data( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !support.shrinkWrapBlocks() ) {\n\t\t\tanim.always( function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t} );\n\t\t}\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = jQuery._data( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\t\t\tjQuery._removeData( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || jQuery._data( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = jQuery._data( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar a,\n\t\tinput = document.createElement( \"input\" ),\n\t\tdiv = document.createElement( \"div\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\t// Setup\n\tdiv = document.createElement( \"div\" );\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\n\n\t// Support: Windows Web Apps (WWA)\n\t// `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"checkbox\" );\n\tdiv.appendChild( input );\n\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\n\n\t// First batch of tests.\n\ta.style.cssText = \"top:1px\";\n\n\t// Test setAttribute on camelCase class.\n\t// If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\tsupport.getSetAttribute = div.className !== \"t\";\n\n\t// Get the style information from getAttribute\n\t// (IE uses .cssText instead)\n\tsupport.style = /top/.test( a.getAttribute( \"style\" ) );\n\n\t// Make sure that URLs aren't manipulated\n\t// (IE normalizes it by default)\n\tsupport.hrefNormalized = a.getAttribute( \"href\" ) === \"/a\";\n\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\tsupport.checkOn = !!input.value;\n\n\t// Make sure that a selected-by-default option has a working selected property.\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\tsupport.optSelected = opt.selected;\n\n\t// Tests for enctype support on a form (#6743)\n\tsupport.enctype = !!document.createElement( \"form\" ).enctype;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE8 only\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement( \"input\" );\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif (\n\t\t\t\t\thooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled :\n\t\t\t\t\t\t\t\toption.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 ) {\n\n\t\t\t\t\t\t// Support: IE6\n\t\t\t\t\t\t// When new option element is added to select box we need to\n\t\t\t\t\t\t// force reflow of newly added node in order to workaround delay\n\t\t\t\t\t\t// of initialization properties\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\toption.selected = optionSet = true;\n\n\t\t\t\t\t\t} catch ( _ ) {\n\n\t\t\t\t\t\t\t// Will be executed only in IE6\n\t\t\t\t\t\t\toption.scrollHeight;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\toption.selected = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\n\t\t\t\treturn options;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = support.getSetAttribute,\n\tgetSetInput = support.input;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE8-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\n\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t} else {\n\n\t\t\t// Support: IE<9\n\t\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\t\tvar ret, handle;\n\t\t\tif ( !isXML ) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[ name ];\n\t\t\t\tattrHandle[ name ] = ret;\n\t\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[ name ] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t} else {\n\t\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\t\tif ( !isXML ) {\n\t\t\t\treturn elem[ jQuery.camelCase( \"default-\" + name ) ] ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t\t}\n\t\t};\n\t}\n} );\n\n// fix oldIE attroperties\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = {\n\t\tset: function( elem, value, name ) {\n\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t( ret = elem.ownerDocument.createAttribute( name ) )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\tif ( name === \"value\" || value === elem.getAttribute( name ) ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n\n\t// Some attributes are constructed with empty-string values when not defined\n\tattrHandle.id = attrHandle.name = attrHandle.coords =\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar ret;\n\t\t\tif ( !isXML ) {\n\t\t\t\treturn ( ret = elem.getAttributeNode( name ) ) && ret.value !== \"\" ?\n\t\t\t\t\tret.value :\n\t\t\t\t\tnull;\n\t\t\t}\n\t\t};\n\n\t// Fixing value retrieval on a button requires this module\n\tjQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( ret && ret.specified ) {\n\t\t\t\treturn ret.value;\n\t\t\t}\n\t\t},\n\t\tset: nodeHook.set\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each( [ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\n\nif ( !support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case sensitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each( function() {\n\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch ( e ) {}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !support.hrefNormalized ) {\n\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each( [ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t} );\n}\n\n// Support: Safari, IE9+\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// IE6/7 call enctype encoding\nif ( !support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn jQuery.attr( elem, \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tjQuery.attr( elem, \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tjQuery.attr( elem, \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tjQuery.attr( this, \"class\",\n\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\"\" :\n\t\t\t\t\tjQuery._data( this, \"__className__\" ) || \"\"\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\nvar rvalidtokens = /(,)|(\\[|{)|(}|])|\"(?:[^\"\\\\\\r\\n]|\\\\[\"\\\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*\"\\s*:?|true|false|null|-?(?!0\\d)\\d+(?:\\.\\d+|)(?:[eE][+-]?\\d+|)/g;\n\njQuery.parseJSON = function( data ) {\n\n\t// Attempt to parse using the native JSON parser first\n\tif ( window.JSON && window.JSON.parse ) {\n\n\t\t// Support: Android 2.3\n\t\t// Workaround failure to string-cast null input\n\t\treturn window.JSON.parse( data + \"\" );\n\t}\n\n\tvar requireNonComma,\n\t\tdepth = null,\n\t\tstr = jQuery.trim( data + \"\" );\n\n\t// Guard against invalid (and possibly dangerous) input by ensuring that nothing remains\n\t// after removing valid tokens\n\treturn str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {\n\n\t\t// Force termination if we see a misplaced comma\n\t\tif ( requireNonComma && comma ) {\n\t\t\tdepth = 0;\n\t\t}\n\n\t\t// Perform no more replacements after returning to outermost depth\n\t\tif ( depth === 0 ) {\n\t\t\treturn token;\n\t\t}\n\n\t\t// Commas must not follow \"[\", \"{\", or \",\"\n\t\trequireNonComma = open || comma;\n\n\t\t// Determine new depth\n\t\t// array/object open (\"[\" or \"{\"): depth += true - false (increment)\n\t\t// array/object close (\"]\" or \"}\"): depth += false - true (decrement)\n\t\t// other cases (\",\" or primitive): depth += true - true (numeric cast)\n\t\tdepth += !close - !open;\n\n\t\t// Remove this token\n\t\treturn \"\";\n\t} ) ) ?\n\t\t( Function( \"return \" + str ) )() :\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tif ( window.DOMParser ) { // Standard\n\t\t\ttmp = new window.DOMParser();\n\t\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t\t} else { // IE\n\t\t\txml = new window.ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\txml.async = \"false\";\n\t\t\txml.loadXML( data );\n\t\t}\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\n\t// IE leaves an \\r character at EOL\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Document location\n\tajaxLocation = location.href,\n\n\t// Segment location into parts\n\tajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType.charAt( 0 ) === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar deep, key,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\tvar firstDataType, ct, finalDataType, type,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) { // jscs:ignore requireDotNotation\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar\n\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers as string\n\t\t\tresponseHeadersString,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\ttransport,\n\n\t\t\t// Response headers\n\t\t\tresponseHeaders,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" )\n\t\t\t.replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\nfunction getDisplay( elem ) {\n\treturn elem.style && elem.style.display || jQuery.css( elem, \"display\" );\n}\n\nfunction filterHidden( elem ) {\n\n\t// Disconnected elements are considered hidden\n\tif ( !jQuery.contains( elem.ownerDocument || document, elem ) ) {\n\t\treturn true;\n\t}\n\twhile ( elem && elem.nodeType === 1 ) {\n\t\tif ( getDisplay( elem ) === \"none\" || elem.type === \"hidden\" ) {\n\t\t\treturn true;\n\t\t}\n\t\telem = elem.parentNode;\n\t}\n\treturn false;\n}\n\njQuery.expr.filters.hidden = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn support.reliableHiddenOffsets() ?\n\t\t( elem.offsetWidth <= 0 && elem.offsetHeight <= 0 &&\n\t\t\t!elem.getClientRects().length ) :\n\t\t\tfilterHidden( elem );\n};\n\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is(\":disabled\") so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?\n\n\t// Support: IE6-IE8\n\tfunction() {\n\n\t\t// XHR cannot access local files, always use ActiveX for that case\n\t\tif ( this.isLocal ) {\n\t\t\treturn createActiveXHR();\n\t\t}\n\n\t\t// Support: IE 9-11\n\t\t// IE seems to error on cross-domain PATCH requests when ActiveX XHR\n\t\t// is used. In IE 9+ always use the native XHR.\n\t\t// Note: this condition won't catch Edge as it doesn't define\n\t\t// document.documentMode but it also doesn't support ActiveX so it won't\n\t\t// reach this code.\n\t\tif ( document.documentMode > 8 ) {\n\t\t\treturn createStandardXHR();\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// oldIE XHR does not support non-RFC2616 methods (#13240)\n\t\t// See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx\n\t\t// and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9\n\t\t// Although this check for six methods instead of eight\n\t\t// since IE also does not support \"trace\" and \"connect\"\n\t\treturn /^(get|post|head|put|delete|options)$/i.test( this.type ) &&\n\t\t\tcreateStandardXHR() || createActiveXHR();\n\t} :\n\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE<10\n// Open requests must be manually aborted on unload (#5280)\n// See https://support.microsoft.com/kb/2856746 for more info\nif ( window.attachEvent ) {\n\twindow.attachEvent( \"onunload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( undefined, true );\n\t\t}\n\t} );\n}\n\n// Determine support properties\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nxhrSupported = support.ajax = !!xhrSupported;\n\n// Create transport if the browser can provide an xhr\nif ( xhrSupported ) {\n\n\tjQuery.ajaxTransport( function( options ) {\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !options.crossDomain || support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor ( i in headers ) {\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// IE's ActiveXObject throws a 'Type Mismatch' exception when setting\n\t\t\t\t\t\t// request header to a null-value.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// To keep consistent with other XHR implementations, cast the value\n\t\t\t\t\t\t// to string and ignore `undefined`.\n\t\t\t\t\t\tif ( headers[ i ] !== undefined ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] + \"\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( options.hasContent && options.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\t\t\t\t\t\tvar status, statusText, responses;\n\n\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t// Clean up\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = undefined;\n\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\n\t\t\t\t\t\t\t// Abort manually if needed\n\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\tstatus = xhr.status;\n\n\t\t\t\t\t\t\t\t// Support: IE<10\n\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\n\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\tif ( !status && options.isLocal && !options.crossDomain ) {\n\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\n\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, xhr.getAllResponseHeaders() );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// `xhr.send` may raise an exception, but it will be\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\tif ( !options.async ) {\n\n\t\t\t\t\t\t// If we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\twindow.setTimeout( callback );\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Register the callback, but delay it in case `xhr.send` throws\n\t\t\t\t\t\t// Add to the list of active xhr callbacks\n\t\t\t\t\t\txhr.onreadystatechange = xhrCallbacks[ id ] = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback( undefined, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t} );\n}\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\n\t} catch ( e ) {}\n}\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || jQuery( \"head\" )[ 0 ] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement( \"script\" );\n\n\t\t\t\tscript.async = true;\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( script.parentNode ) {\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = null;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( undefined, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// data: string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off, url.length ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\tjQuery.inArray( \"auto\", [ curCSSTop, curCSSLeft ] ) > -1;\n\n\t\t// need to be able to calculate position if either top or left\n\t\t// is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ],\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\t// BlackBerry 5, iOS 3 (original iPhone)\n\t\tif ( typeof elem.getBoundingClientRect !== \"undefined\" ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),\n\t\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\tparentOffset = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ];\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top  += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? ( prop in win ) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// getComputedStyle returns percent when specified for top/left/bottom/right\n// rather than make the css module depend on the offset module, we just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\tfunction( defaultExtra, funcName ) {\n\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only,\n\t\t\t\t\t// but there is currently no good, small way to fix it.\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in\n// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery/jquery-1.12.4.min.js",
    "content": "/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */\n!function(a,b){\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error(\"jQuery requires a window with a document\");return b(a)}:b(a)}(\"undefined\"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m=\"1.12.4\",n=function(a,b){return new n.fn.init(a,b)},o=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,p=/^-ms-/,q=/-([\\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:\"\",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for(\"boolean\"==typeof g&&(j=g,g=arguments[h]||{},h++),\"object\"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:\"jQuery\"+(m+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return\"function\"===n.type(a)},isArray:Array.isArray||function(a){return\"array\"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||\"object\"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,\"constructor\")&&!k.call(a.constructor.prototype,\"isPrototypeOf\"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+\"\":\"object\"==typeof a||\"function\"==typeof a?i[j.call(a)]||\"object\":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,\"ms-\").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?\"\":(a+\"\").replace(o,\"\")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,\"string\"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return\"string\"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),\"function\"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(a,b){i[\"[object \"+b+\"]\"]=b.toLowerCase()});function s(a){var b=!!a&&\"length\"in a&&a.length,c=n.type(a);return\"function\"===c||n.isWindow(a)?!1:\"array\"===c||0===b||\"number\"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u=\"sizzle\"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",L=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",M=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",N=\"\\\\[\"+L+\"*(\"+M+\")(?:\"+L+\"*([*^$|!~]?=)\"+L+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+M+\"))|)\"+L+\"*\\\\]\",O=\":(\"+M+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+N+\")*)|.*)\\\\)|)\",P=new RegExp(L+\"+\",\"g\"),Q=new RegExp(\"^\"+L+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+L+\"+$\",\"g\"),R=new RegExp(\"^\"+L+\"*,\"+L+\"*\"),S=new RegExp(\"^\"+L+\"*([>+~]|\"+L+\")\"+L+\"*\"),T=new RegExp(\"=\"+L+\"*([^\\\\]'\\\"]*?)\"+L+\"*\\\\]\",\"g\"),U=new RegExp(O),V=new RegExp(\"^\"+M+\"$\"),W={ID:new RegExp(\"^#(\"+M+\")\"),CLASS:new RegExp(\"^\\\\.(\"+M+\")\"),TAG:new RegExp(\"^(\"+M+\"|[*])\"),ATTR:new RegExp(\"^\"+N),PSEUDO:new RegExp(\"^\"+O),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+L+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+L+\"*(?:([+-]|)\"+L+\"*(\\\\d+)|))\"+L+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+K+\")$\",\"i\"),needsContext:new RegExp(\"^\"+L+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+L+\"*((?:-\\\\d)?\\\\d*)\"+L+\"*\\\\)|)(?=[^-]|$)\",\"i\")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\\d$/i,Z=/^[^{]+\\{\\s*\\[native \\w/,$=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,_=/[+~]/,aa=/'|\\\\/g,ba=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+L+\"?|(\"+L+\")|.)\",\"ig\"),ca=function(a,b,c){var d=\"0x\"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],\"string\"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+\" \"]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if(\"object\"!==b.nodeName.toLowerCase()){(k=b.getAttribute(\"id\"))?k=k.replace(aa,\"\\\\$&\"):b.setAttribute(\"id\",k=u),r=g(a),h=r.length,l=V.test(k)?\"#\"+k:\"[id='\"+k+\"']\";while(h--)r[h]=l+\" \"+qa(r[h]);s=r.join(\",\"),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute(\"id\")}}}return i(a.replace(Q,\"$1\"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+\" \")>d.cacheLength&&delete b[a.shift()],b[c+\" \"]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement(\"div\");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split(\"|\"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return\"input\"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return(\"input\"===c||\"button\"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&\"undefined\"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?\"HTML\"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener(\"unload\",da,!1):e.attachEvent&&e.attachEvent(\"onunload\",da)),c.attributes=ia(function(a){return a.className=\"i\",!a.getAttribute(\"className\")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment(\"\")),!a.getElementsByTagName(\"*\").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(\"undefined\"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute(\"id\")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c=\"undefined\"!=typeof a.getAttributeNode&&a.getAttributeNode(\"id\");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return\"undefined\"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if(\"*\"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return\"undefined\"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML=\"<a id='\"+u+\"'></a><select id='\"+u+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",a.querySelectorAll(\"[msallowcapture^='']\").length&&q.push(\"[*^$]=\"+L+\"*(?:''|\\\"\\\")\"),a.querySelectorAll(\"[selected]\").length||q.push(\"\\\\[\"+L+\"*(?:value|\"+K+\")\"),a.querySelectorAll(\"[id~=\"+u+\"-]\").length||q.push(\"~=\"),a.querySelectorAll(\":checked\").length||q.push(\":checked\"),a.querySelectorAll(\"a#\"+u+\"+*\").length||q.push(\".#.+[+~]\")}),ia(function(a){var b=n.createElement(\"input\");b.setAttribute(\"type\",\"hidden\"),a.appendChild(b).setAttribute(\"name\",\"D\"),a.querySelectorAll(\"[name=d]\").length&&q.push(\"name\"+L+\"*[*^$|!~]?=\"),a.querySelectorAll(\":enabled\").length||q.push(\":enabled\",\":disabled\"),a.querySelectorAll(\"*,:x\"),q.push(\",.*:\")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,\"div\"),s.call(a,\"[s!='']:x\"),r.push(\"!=\",O)}),q=q.length&&new RegExp(q.join(\"|\")),r=r.length&&new RegExp(r.join(\"|\")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,\"='$1']\"),c.matchesSelector&&p&&!A[b+\" \"]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error(\"Syntax error, unrecognized expression: \"+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c=\"\",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if(\"string\"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||\"\").replace(ba,ca),\"~=\"===a[2]&&(a[3]=\" \"+a[3]+\" \"),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),\"nth\"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*(\"even\"===a[3]||\"odd\"===a[3])),a[5]=+(a[7]+a[8]||\"odd\"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||\"\":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(\")\",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return\"*\"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+\" \"];return b||(b=new RegExp(\"(^|\"+L+\")\"+a+\"(\"+L+\"|$)\"))&&y(a,function(a){return b.test(\"string\"==typeof a.className&&a.className||\"undefined\"!=typeof a.getAttribute&&a.getAttribute(\"class\")||\"\")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?\"!=\"===b:b?(e+=\"\",\"=\"===b?e===c:\"!=\"===b?e!==c:\"^=\"===b?c&&0===e.indexOf(c):\"*=\"===b?c&&e.indexOf(c)>-1:\"$=\"===b?c&&e.slice(-c.length)===c:\"~=\"===b?(\" \"+e.replace(P,\" \")+\" \").indexOf(c)>-1:\"|=\"===b?e===c||e.slice(0,c.length+1)===c+\"-\":!1):!0}},CHILD:function(a,b,c,d,e){var f=\"nth\"!==a.slice(0,3),g=\"last\"!==a.slice(-4),h=\"of-type\"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?\"nextSibling\":\"previousSibling\",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p=\"only\"===a&&!o&&\"nextSibling\"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error(\"unsupported pseudo: \"+a);return e[u]?e(b):e.length>1?(c=[a,a,\"\",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,\"$1\"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||\"\")||fa.error(\"unsupported lang: \"+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute(\"xml:lang\")||b.getAttribute(\"lang\"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+\"-\");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&!!a.checked||\"option\"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&\"button\"===a.type||\"button\"===b},text:function(a){var b;return\"input\"===a.nodeName.toLowerCase()&&\"text\"===a.type&&(null==(b=a.getAttribute(\"type\"))||\"text\"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+\" \"];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q,\" \")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d=\"\";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&\"parentNode\"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||\"*\",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[\" \"],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:\" \"===a[i-2].type?\"*\":\"\"})).replace(Q,\"$1\"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s=\"0\",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG(\"*\",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+\" \"];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n=\"function\"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&\"ID\"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split(\"\").sort(B).join(\"\")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement(\"div\"))}),ia(function(a){return a.innerHTML=\"<a href='#'></a>\",\"#\"===a.firstChild.getAttribute(\"href\")})||ja(\"type|href|height|width\",function(a,b,c){return c?void 0:a.getAttribute(b,\"type\"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML=\"<input/>\",a.firstChild.setAttribute(\"value\",\"\"),\"\"===a.firstChild.getAttribute(\"value\")})||ja(\"value\",function(a,b,c){return c||\"input\"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute(\"disabled\")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[\":\"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=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},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/,y=/^.[^:#\\[\\.,]*$/;function z(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(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==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=[],d=this,e=d.length;if(\"string\"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+\" \"+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,\"string\"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,\"string\"==typeof a){if(e=\"<\"===a.charAt(0)&&\">\"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?\"undefined\"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.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.uniqueSort(f):f)},index:function(a){return a?\"string\"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&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 u(a,\"parentNode\")},parentsUntil:function(a,b,c){return u(a,\"parentNode\",c)},next:function(a){return F(a,\"nextSibling\")},prev:function(a){return F(a,\"previousSibling\")},nextAll:function(a){return u(a,\"nextSibling\")},prevAll:function(a){return u(a,\"previousSibling\")},nextUntil:function(a,b,c){return u(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return u(a,\"previousSibling\",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,\"iframe\")?a.contentDocument||a.contentWindow.document: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&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a=\"string\"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:\"\")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&\"string\"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c=\"\",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},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().progress(c.notify).done(c.resolve).fail(c.reject):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=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;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||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler(\"ready\"),n(d).off(\"ready\"))))}});function J(){d.addEventListener?(d.removeEventListener(\"DOMContentLoaded\",K),a.removeEventListener(\"load\",K)):(d.detachEvent(\"onreadystatechange\",K),a.detachEvent(\"onload\",K))}function K(){(d.addEventListener||\"load\"===a.event.type||\"complete\"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),\"complete\"===d.readyState||\"loading\"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener(\"DOMContentLoaded\",K),a.addEventListener(\"load\",K);else{d.attachEvent(\"onreadystatechange\",K),a.attachEvent(\"onload\",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll(\"left\")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst=\"0\"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName(\"body\")[0],c&&c.style&&(b=d.createElement(\"div\"),e=d.createElement(\"div\"),e.style.cssText=\"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\",c.appendChild(e).appendChild(b),\"undefined\"!=typeof b.style.zoom&&(b.style.cssText=\"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement(\"div\");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+\" \").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute(\"classid\")===b},N=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d=\"data-\"+b.replace(O,\"-$1\").toLowerCase();if(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){}n.data(a,b,c)}else c=void 0;\n}return c}function Q(a){var b;for(b in a)if((\"data\"!==b||!n.isEmptyObject(a[b]))&&\"toJSON\"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||\"string\"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),\"object\"!=typeof b&&\"function\"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),\"string\"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(\" \")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{\"applet \":!0,\"embed \":!0,\"object \":\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),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=n.data(f),1===f.nodeType&&!n._data(f,\"parsedAttrs\"))){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])));n._data(f,\"parsedAttrs\",!0)}return e}return\"object\"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||\"fx\")+\"queue\",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(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 n._data(a,c)||n._data(a,c,{empty:n.Callbacks(\"once memory\").add(function(){n._removeData(a,b+\"queue\"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return\"string\"!=typeof a&&(b=a,a=\"fx\",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),\"fx\"===a&&\"inprogress\"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};\"string\"!=typeof a&&(b=a,a=void 0),a=a||\"fx\";while(g--)c=n._data(f[g],a+\"queueHooks\"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName(\"body\")[0],c&&c.style?(b=d.createElement(\"div\"),e=d.createElement(\"div\"),e.style.cssText=\"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\",c.appendChild(e).appendChild(b),\"undefined\"!=typeof b.style.zoom&&(b.style.cssText=\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1\",b.appendChild(d.createElement(\"div\")).style.width=\"5px\",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,U=new RegExp(\"^(?:([+-])=|)(\"+T+\")([a-z%]*)$\",\"i\"),V=[\"Top\",\"Right\",\"Bottom\",\"Left\"],W=function(a,b){return a=b||a,\"none\"===n.css(a,\"display\")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,\"\")},i=h(),j=c&&c[3]||(n.cssNumber[b]?\"\":\"px\"),k=(n.cssNumber[b]||\"px\"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||\".5\",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=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)Y(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},Z=/^(?:checkbox|radio)$/i,$=/<([\\w:-]+)/,_=/^$|\\/(?:java|ecma)script/i,aa=/^\\s+/,ba=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video\";function ca(a){var b=ba.split(\"|\"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement(\"div\"),b=d.createDocumentFragment(),c=d.createElement(\"input\");a.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName(\"tbody\").length,l.htmlSerialize=!!a.getElementsByTagName(\"link\").length,l.html5Clone=\"<:nav></:nav>\"!==d.createElement(\"nav\").cloneNode(!0).outerHTML,c.type=\"checkbox\",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML=\"<textarea>x</textarea>\",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement(\"input\"),c.setAttribute(\"type\",\"radio\"),c.setAttribute(\"checked\",\"checked\"),c.setAttribute(\"name\",\"t\"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],area:[1,\"<map>\",\"</map>\"],param:[1,\"<object>\",\"</object>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:l.htmlSerialize?[0,\"\",\"\"]:[1,\"X<div>\",\"</div>\"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f=\"undefined\"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||\"*\"):\"undefined\"!=typeof a.querySelectorAll?a.querySelectorAll(b||\"*\"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,\"globalEval\",!b||n._data(b[d],\"globalEval\"))}var ga=/<|&#?\\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if(\"object\"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement(\"div\")),j=($.exec(g)||[\"\",\"\"])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g=\"table\"!==j||ha.test(g)?\"<table>\"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],\"tbody\")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent=\"\";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,\"input\"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),\"script\"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||\"\")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement(\"div\");for(b in{submit:!0,change:!0,focusin:!0})c=\"on\"+b,(l[b]=c in a)||(e.setAttribute(c,\"t\"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if(\"object\"==typeof b){\"string\"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&(\"string\"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return\"undefined\"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||\"\").match(G)||[\"\"],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||\"\").split(\".\").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=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(\".\")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent(\"on\"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||\"\").match(G)||[\"\"],j=b.length;while(j--)if(h=oa.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=k[o]||[],h=h[2]&&new RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&(\"**\"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,\"events\"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,\"type\")?b.type:b,r=k.call(b,\"namespace\")?b.namespace.split(\".\"):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(\".\")>-1&&(r=q.split(\".\"),q=r.shift(),r.sort()),h=q.indexOf(\":\")<0&&\"on\"+q,b=b[n.expando]?b:new n.Event(q,\"object\"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join(\".\"),b.rnamespace=b.namespace?new RegExp(\"(^|\\\\.)\"+r.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,\"events\")||{})[b.type]&&n._data(i,\"handle\"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(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.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!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&&(\"click\"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(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)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:\"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:\"focusin\"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:\"focusout\"},click:{trigger:function(){return n.nodeName(this,\"input\")&&\"checkbox\"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,\"a\")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d=\"on\"+b;a.detachEvent&&(\"undefined\"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,\"form\")?!1:void n.event.add(this,\"click._submit keypress._submit\",function(a){var b=a.target,c=n.nodeName(b,\"input\")||n.nodeName(b,\"button\")?n.prop(b,\"form\"):void 0;c&&!n._data(c,\"submit\")&&(n.event.add(c,\"submit._submit\",function(a){a._submitBubble=!0}),n._data(c,\"submit\",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate(\"submit\",this.parentNode,a))},teardown:function(){return n.nodeName(this,\"form\")?!1:void n.event.remove(this,\"._submit\")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?(\"checkbox\"!==this.type&&\"radio\"!==this.type||(n.event.add(this,\"propertychange._change\",function(a){\"checked\"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,\"click._change\",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate(\"change\",this,a)})),!1):void n.event.add(this,\"beforeactivate._change\",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,\"change\")&&(n.event.add(b,\"change._change\",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate(\"change\",this.parentNode,a)}),n._data(b,\"change\",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||\"radio\"!==b.type&&\"checkbox\"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,\"._change\"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+\".\"+d.namespace:d.origType,d.selector,d.handler),this;if(\"object\"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&\"function\"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\\d+=\"(?:null|\\d+)\"/g,ua=new RegExp(\"<(?:\"+ba+\")[\\\\s/>]\",\"i\"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,wa=/<script|<style|<link/i,xa=/checked\\s*(?:[^=]|=\\s*.checked.)/i,ya=/^true\\/(.*)/,za=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement(\"div\"));function Ca(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 Da(a){return a.type=(null!==n.find.attr(a,\"type\"))+\"/\"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute(\"type\"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}\"script\"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):\"object\"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):\"input\"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):\"option\"===c?b.defaultSelected=b.selected=a.defaultSelected:\"input\"!==c&&\"textarea\"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&\"string\"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,\"script\"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,\"script\"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||\"\")&&!n._data(g,\"globalEval\")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||\"\").replace(za,\"\")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,\"script\")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,\"<$1></$2>\")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test(\"<\"+a.nodeName+\">\")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,\"script\"),d.length>0&&fa(d,!i&&ea(a,\"script\")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||\"undefined\"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,\"select\")&&(a.options.length=0)}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 Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,\"\"):void 0;if(\"string\"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||[\"\",\"\"])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:\"block\",BODY:\"block\"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],\"display\");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),\"none\"!==c&&c||(Ja=(Ja||n(\"<iframe frameborder='0' width='0' height='0'/>\")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp(\"^(\"+T+\")(?!px)[a-z%]+$\",\"i\"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement(\"div\"),j=d.createElement(\"div\");if(j.style){j.style.cssText=\"float:left;opacity:.5\",l.opacity=\"0.5\"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip=\"content-box\",j.cloneNode(!0).style.backgroundClip=\"\",l.clearCloneStyle=\"content-box\"===j.style.backgroundClip,i=d.createElement(\"div\"),i.style.cssText=\"border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute\",j.innerHTML=\"\",i.appendChild(j),l.boxSizing=\"\"===j.style.boxSizing||\"\"===j.style.MozBoxSizing||\"\"===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText=\"-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%\",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b=\"1%\"!==(l||{}).top,h=\"2px\"===(l||{}).marginLeft,e=\"4px\"===(l||{width:\"4px\"}).width,j.style.marginRight=\"50%\",c=\"4px\"===(l||{marginRight:\"4px\"}).marginRight,k=j.appendChild(d.createElement(\"div\")),k.style.cssText=j.style.cssText=\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0\",k.style.marginRight=k.style.width=\"0\",j.style.width=\"1px\",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display=\"none\",f=0===j.getClientRects().length,f&&(j.style.display=\"\",j.innerHTML=\"<table><tr><td></td><td>t</td></tr></table>\",j.childNodes[0].style.borderCollapse=\"separate\",k=j.getElementsByTagName(\"td\"),k[0].style.cssText=\"margin:0;border:0;padding:0;display:none\",f=0===k[0].offsetHeight,f&&(k[0].style.display=\"\",k[1].style.display=\"none\",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,\"\"!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+\"\"}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left=\"fontSize\"===b?\"1em\":g,g=h.pixelLeft+\"px\",h.left=d,f&&(e.left=f)),void 0===g?g:g+\"\"||\"auto\"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\\([^)]*\\)/i,Wa=/opacity\\s*=\\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp(\"^(\"+T+\")(.*)$\",\"i\"),Za={position:\"absolute\",visibility:\"hidden\",display:\"block\"},$a={letterSpacing:\"0\",fontWeight:\"400\"},_a=[\"Webkit\",\"O\",\"Moz\",\"ms\"],ab=d.createElement(\"div\").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,\"olddisplay\"),c=d.style.display,b?(f[g]||\"none\"!==c||(d.style.display=\"\"),\"\"===d.style.display&&W(d)&&(f[g]=n._data(d,\"olddisplay\",Ma(d.nodeName)))):(e=W(d),(c&&\"none\"!==c||!e)&&n._data(d,\"olddisplay\",e?c:n.css(d,\"display\"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&\"none\"!==d.style.display&&\"\"!==d.style.display||(d.style.display=b?f[g]||\"\":\"none\"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||\"px\"):b}function eb(a,b,c,d,e){for(var f=c===(d?\"border\":\"content\")?4:\"width\"===b?1:0,g=0;4>f;f+=2)\"margin\"===c&&(g+=n.css(a,c+V[f],!0,e)),d?(\"content\"===c&&(g-=n.css(a,\"padding\"+V[f],!0,e)),\"margin\"!==c&&(g-=n.css(a,\"border\"+V[f]+\"Width\",!0,e))):(g+=n.css(a,\"padding\"+V[f],!0,e),\"padding\"!==c&&(g+=n.css(a,\"border\"+V[f]+\"Width\",!0,e)));return g}function fb(a,b,c){var d=!0,e=\"width\"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&\"border-box\"===n.css(a,\"boxSizing\",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?\"border\":\"content\"),d,f)+\"px\"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,\"opacity\");return\"\"===c?\"1\":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":l.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&\"get\"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,\"string\"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f=\"number\"),null!=c&&c===c&&(\"number\"===f&&(c+=e&&e[3]||(n.cssNumber[h]?\"\":\"px\")),l.clearCloneStyle||\"\"!==c||0!==b.indexOf(\"background\")||(i[b]=\"inherit\"),!(g&&\"set\"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&\"get\"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),\"normal\"===f&&b in $a&&(f=$a[b]),\"\"===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each([\"height\",\"width\"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,\"display\"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&\"border-box\"===n.css(a,\"boxSizing\",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":b?\"1\":\"\"},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?\"alpha(opacity=\"+100*b+\")\":\"\",f=d&&d.filter||c.filter||\"\";c.zoom=1,(b>=1||\"\"===b)&&\"\"===n.trim(f.replace(Va,\"\"))&&c.removeAttribute&&(c.removeAttribute(\"filter\"),\"\"===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+\" \"+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:\"inline-block\"},Sa,[a,\"marginRight\"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,\"marginLeft\"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{\nmarginLeft:0},function(){return a.getBoundingClientRect().left}):0))+\"px\":void 0}),n.each({margin:\"\",padding:\"\",border:\"Width\"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f=\"string\"==typeof c?c.split(\" \"):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return\"boolean\"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?\"\":\"px\")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,\"\"),b&&\"auto\"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:\"swing\"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d[\"margin\"+c]=d[\"padding\"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners[\"*\"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,\"fxshow\");c.queue||(h=n._queueHooks(a,\"fx\"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,\"fx\").length||h.empty.fire()})})),1===a.nodeType&&(\"height\"in b||\"width\"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,\"display\"),k=\"none\"===j?n._data(a,\"olddisplay\")||Ma(a.nodeName):j,\"inline\"===k&&\"none\"===n.css(a,\"float\")&&(l.inlineBlockNeedsLayout&&\"inline\"!==Ma(a.nodeName)?p.zoom=1:p.display=\"inline-block\")),c.overflow&&(p.overflow=\"hidden\",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||\"toggle\"===e,e===(q?\"hide\":\"show\")){if(\"show\"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))\"inline\"===(\"none\"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?\"hidden\"in r&&(q=r.hidden):r=n._data(a,\"fxshow\",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,\"fxshow\");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start=\"width\"===d||\"height\"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&\"expand\"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{\"*\":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=[\"*\"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&\"object\"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:\"number\"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue=\"fx\"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,\"finish\"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return\"string\"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||\"fx\",[]),this.each(function(){var b=!0,e=null!=a&&a+\"queueHooks\",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||\"fx\"),this.each(function(){var b,c=n._data(this),d=c[a+\"queue\"],e=c[a+\"queueHooks\"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each([\"toggle\",\"show\",\"hide\"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||\"boolean\"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb(\"show\"),slideUp:mb(\"hide\"),slideToggle:mb(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||\"fx\",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement(\"input\"),c=d.createElement(\"div\"),e=d.createElement(\"select\"),f=e.appendChild(d.createElement(\"option\"));c=d.createElement(\"div\"),c.setAttribute(\"className\",\"t\"),c.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",a=c.getElementsByTagName(\"a\")[0],b.setAttribute(\"type\",\"checkbox\"),c.appendChild(b),a=c.getElementsByTagName(\"a\")[0],a.style.cssText=\"top:1px\",l.getSetAttribute=\"t\"!==c.className,l.style=/top/.test(a.getAttribute(\"style\")),l.hrefNormalized=\"/a\"===a.getAttribute(\"href\"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement(\"form\").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement(\"input\"),b.setAttribute(\"value\",\"\"),l.input=\"\"===b.getAttribute(\"value\"),b.value=\"t\",b.setAttribute(\"type\",\"radio\"),l.radioValue=\"t\"===b.value}();var rb=/\\r/g,sb=/[\\x20\\t\\r\\n\\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e=\"\":\"number\"==typeof e?e+=\"\":n.isArray(e)&&(e=n.map(e,function(a){return null==a?\"\":a+\"\"})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&\"set\"in b&&void 0!==b.set(this,e,\"value\")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&\"get\"in b&&void 0!==(c=b.get(e,\"value\"))?c:(c=e.value,\"string\"==typeof c?c.replace(rb,\"\"):null==c?\"\":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,\"value\");return null!=b?b:n.trim(n.text(a)).replace(sb,\" \")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f=\"select-one\"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute(\"disabled\"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,\"optgroup\"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each([\"radio\",\"checkbox\"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute(\"value\")?\"on\":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return\"undefined\"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&\"set\"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+\"\"),c):e&&\"get\"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&\"radio\"===b&&n.nodeName(a,\"input\")){var c=a.value;return a.setAttribute(\"type\",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase(\"default-\"+c)]=a[d]=!1:n.attr(a,c,\"\"),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase(\"default-\"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase(\"default-\"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,\"input\")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+=\"\",\"value\"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&\"\"!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,\"\"===b?!1:b,c)}},n.each([\"width\",\"height\"],function(a,b){n.attrHooks[b]={set:function(a,c){return\"\"===c?(a.setAttribute(b,\"auto\"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+\"\"}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&\"set\"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&\"get\"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,\"tabindex\");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),l.hrefNormalized||n.each([\"href\",\"src\"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype=\"encoding\");var Bb=/[\\t\\r\\n\\f]/g;function Cb(a){return n.attr(a,\"class\")||\"\"}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if(\"string\"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(\" \"+e+\" \").replace(Bb,\" \")){g=0;while(f=b[g++])d.indexOf(\" \"+f+\" \")<0&&(d+=f+\" \");h=n.trim(d),e!==h&&n.attr(c,\"class\",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if(\"string\"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(\" \"+e+\" \").replace(Bb,\" \")){g=0;while(f=b[g++])while(d.indexOf(\" \"+f+\" \")>-1)d=d.replace(\" \"+f+\" \",\" \");h=n.trim(d),e!==h&&n.attr(c,\"class\",h)}}return this},toggleClass:function(a,b){var c=typeof a;return\"boolean\"==typeof b&&\"string\"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if(\"string\"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&\"boolean\"!==c||(b=Cb(this),b&&n._data(this,\"__className__\",b),n.attr(this,\"class\",b||a===!1?\"\":n._data(this,\"__className__\")||\"\"))})},hasClass:function(a){var b,c,d=0;b=\" \"+a+\" \";while(c=this[d++])if(1===c.nodeType&&(\" \"+Cb(c)+\" \").replace(Bb,\" \").indexOf(b)>-1)return!0;return!1}}),n.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\\?/,Gb=/(,)|(\\[|{)|(}|])|\"(?:[^\"\\\\\\r\\n]|\\\\[\"\\\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*\"\\s*:?|true|false|null|-?(?!0\\d)\\d+(?:\\.\\d+|)(?:[eE][+-]?\\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+\"\");var c,d=null,e=n.trim(b+\"\");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,\"\")}))?Function(\"return \"+e)():n.error(\"Invalid JSON: \"+b)},n.parseXML=function(b){var c,d;if(!b||\"string\"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,\"text/xml\")):(c=new a.ActiveXObject(\"Microsoft.XMLDOM\"),c.async=\"false\",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName(\"parsererror\").length||n.error(\"Invalid XML: \"+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\\/\\//,Nb=/^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,Ob={},Pb={},Qb=\"*/\".concat(\"*\"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){\"string\"!=typeof b&&(c=b,b=\"*\");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])\"+\"===d.charAt(0)?(d=d.slice(1)||\"*\",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return\"string\"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e[\"*\"]&&g(\"*\")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while(\"*\"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader(\"Content-Type\"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+\" \"+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if(\"*\"===f)f=i;else if(\"*\"!==i&&i!==f){if(g=j[i+\" \"+f]||j[\"* \"+f],!g)for(e in j)if(h=e.split(\" \"),h[1]===f&&(g=j[i+\" \"+h[0]]||j[\"* \"+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a[\"throws\"])b=g(b);else try{b=g(b)}catch(l){return{state:\"parsererror\",error:g?l:\"No conversion from \"+i+\" to \"+f}}}return{state:\"success\",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:\"GET\",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Qb,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":n.parseJSON,\"text xml\":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){\"object\"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks(\"once memory\"),r=l.statusCode||{},s={},t={},u=0,v=\"canceled\",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+\"\").replace(Hb,\"\").replace(Mb,Sb[1]+\"//\"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||\"*\").toLowerCase().match(G)||[\"\"],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||(\"http:\"===d[1]?\"80\":\"443\"))===(Sb[3]||(\"http:\"===Sb[1]?\"80\":\"443\")))),l.data&&l.processData&&\"string\"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger(\"ajaxStart\"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?\"&\":\"?\")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,\"$1_=\"+Eb++):f+(Fb.test(f)?\"&\":\"?\")+\"_=\"+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader(\"If-Modified-Since\",n.lastModified[f]),n.etag[f]&&w.setRequestHeader(\"If-None-Match\",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader(\"Content-Type\",l.contentType),w.setRequestHeader(\"Accept\",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(\"*\"!==l.dataTypes[0]?\", \"+Qb+\"; q=0.01\":\"\"):l.accepts[\"*\"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v=\"abort\";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger(\"ajaxSend\",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort(\"timeout\")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,\"No Transport\");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||\"\",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader(\"Last-Modified\"),x&&(n.lastModified[f]=x),x=w.getResponseHeader(\"etag\"),x&&(n.etag[f]=x)),204===b||\"HEAD\"===l.type?y=\"nocontent\":304===b?y=\"notmodified\":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y=\"error\",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+\"\",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?\"ajaxSuccess\":\"ajaxError\",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger(\"ajaxComplete\",[w,l]),--n.active||n.event.trigger(\"ajaxStop\")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,\"json\")},getScript:function(a,b){return n.get(a,void 0,b,\"script\")}}),n.each([\"get\",\"post\"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,\"throws\":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,\"body\")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,\"display\")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if(\"none\"===Yb(a)||\"hidden\"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\\[\\]$/,ac=/\\r?\\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+\"[\"+(\"object\"==typeof e&&null!=e?b:\"\")+\"]\",e,c,d)});else if(c||\"object\"!==n.type(b))d(a,b);else for(e in b)dc(a+\"[\"+e+\"]\",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?\"\":b,d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join(\"&\").replace($b,\"+\")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,\"elements\");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(\":disabled\")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,\"\\r\\n\")}}):{name:b.name,value:c.replace(ac,\"\\r\\n\")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent(\"onunload\",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&\"withCredentials\"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d[\"X-Requested-With\"]||(d[\"X-Requested-With\"]=\"XMLHttpRequest\");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+\"\");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,\"string\"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=\"\"}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(b){}}n.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter(\"script\",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\",a.global=!1)}),n.ajaxTransport(\"script\",function(a){if(a.crossDomain){var b,c=d.head||n(\"head\")[0]||d.documentElement;return{send:function(e,f){b=d.createElement(\"script\"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,\"success\"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\\?(?=&|$)|\\?\\?/;n.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var a=jc.pop()||n.expando+\"_\"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter(\"json jsonp\",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?\"url\":\"string\"==typeof b.data&&0===(b.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&kc.test(b.data)&&\"data\");return h||\"jsonp\"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,\"$1\"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?\"&\":\"?\")+b.jsonp+\"=\"+e),b.converters[\"script json\"]=function(){return g||n.error(e+\" was not called\"),g[0]},b.dataTypes[0]=\"json\",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),\"script\"):void 0}),n.parseHTML=function(a,b,c){if(!a||\"string\"!=typeof a)return null;\"boolean\"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if(\"string\"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(\" \");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&\"object\"==typeof b&&(e=\"POST\"),g.length>0&&n.ajax({url:a,type:e||\"GET\",dataType:\"html\",data:b}).done(function(a){f=arguments,g.html(d?n(\"<div>\").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,\"position\"),l=n(a),m={};\"static\"===k&&(a.style.position=\"relative\"),h=l.offset(),f=n.css(a,\"top\"),i=n.css(a,\"left\"),j=(\"absolute\"===k||\"fixed\"===k)&&n.inArray(\"auto\",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),\"using\"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(\"undefined\"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return\"fixed\"===n.css(d,\"position\")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],\"html\")||(c=a.offset()),c.top+=n.css(a[0],\"borderTopWidth\",!0),c.left+=n.css(a[0],\"borderLeftWidth\",!0)),{top:b.top-c.top-n.css(d,\"marginTop\",!0),left:b.left-c.left-n.css(d,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,\"html\")&&\"static\"===n.css(a,\"position\"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each([\"top\",\"left\"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+\"px\":c):void 0})}),n.each({Height:\"height\",Width:\"width\"},function(a,b){n.each({\npadding:\"inner\"+a,content:b,\"\":\"outer\"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||\"boolean\"!=typeof d),g=c||(d===!0||e===!0?\"margin\":\"border\");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement[\"client\"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body[\"scroll\"+a],e[\"scroll\"+a],b.body[\"offset\"+a],e[\"offset\"+a],e[\"client\"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,\"**\"):this.off(b,a||\"**\",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/changelog.txt",
    "content": "Version 1.9.x\n-------------\n* Bug\n * layout: The icon on the collapsed panel is overlaped by title. fixed.\n* Improvement\n * datagrid: The 'sorter' function on the column accepts the entire row as the sorting parameters.\n * datebox: Add 'getDate' and 'setDate' methods.\n * pagination: Add 'onBeforeSelectPage' event.\n * combo: Prevent from conflicting with svg.\n * window: Add 'fixed' property.\n\nVersion 1.9.0\n-------------\n* Bug\n * datagrid: Slow scrolling with mousewheel on frozen columns. fixed.\n * datagrid: The 'rowStyler' function is called on empty row. fixed.\n * linkbutton: Calling 'disable' method still can submit the form. fixed.\n * combotree: The 'onBeforeSelect' event fires twice while selecting a node. fixed.\n * combotreegrid: The 'onSelect' event fires twice while selecting a row. fixed.\n* Improvement\n * checkbox: Add 'readonly' property.\n * radiobutton: Add 'readonly' property.\n * Compatible with jQuery 3.x.\n* New Plugins\n * timepicker: Allow the user to choose time on a clock.\n\nVersion 1.8.0\n-------------\n* Bug\n * treegrid: The 'pageNumber' can't be initialized with the specified value. fixed.\n * checkbox: The disabled checkbox has no disabled label. fixed.\n* Improvement\n * switchbutton: Add the 'label','labelAlign','labelPosition','labelWidth' properties.\n * switchbutton: Accept 'tabindex' attribute to get focus when the user press TAB key.\n * form: The 'onChange' event is available for all the form component.\n * calendar: The 'Date' property is available to support the hijri date.\n * textbox: The floating label is available.\n\nVersion 1.7.0\n-------------\n* Bug\n * sidemenu: The tooltip has a wrong position when the 'floatMenuPosition' is set to 'left'. fixed.\n * datagrid: The horizontal scrollbar has a wrong state when the 'showHeader' is set to true. fixed.\n * combo: The initialized value will trigger the form's 'onChange' event when the 'multiple' is set to true. fixed.\n * panel: The horizontal panel doesn't work normally when 'noheader' property is set to true. fixed.\n * pagination: The extended buttons may lose in IE when rebuild the component. fixed.\n* Improvement\n * tree: Add 'findBy' method to find a node by any fields.\n * tree: The 'find' method is enhanced to find a node easily.\n * combo: Add 'panelValign' property.\n * datagrid: The sorting parameters will be ignored when the 'remoteSort' is set to false.\n * timespinner: Add 'hour12' property to display in 12 hour format.\n\nVersion 1.6.0\n-------------\n* Bug\n * maskedbox: The component does not accept numeric keypad. fixed.\n * combogrid: When selecting multiple records, the datagrid will scroll to the last checked record. fixed.\n* Improvement\n * Compatible with jQuery 3.x.\n * tabs: The 'toolPosition' property can accept 'top' and 'bottom' values.\n * textbox: The textbox label has the animating feature when focus or blur on it.\n * tooltip: Add 'valign' property.\n * tree: The node class can be initialized by setting the 'nodeCls' in the data.\n* New Plugins\n * sidemenu: The sidemenu is created from accordion and tree plugins. It builds a collapsible menu with some categories.\n * radiobutton: This plugin provides a round interface to select one option from a number of options.\n * checkbox: This plugin allows a user to select a value from a small set of options.\n\nVersion 1.5.5\n-------------\n* Bug\n * tabs: The selecting history has wrong order when the title contains complex elements. fixed.\n * combo: The drop-down panel may not be hidden if a bigger 'delay' value is set. fixed.\n * layout: The expanding panel does not collapse when move mouse quickly away from it. fixed.\n * tagbox: The tagbox and the label don't stay in the same line. fixed.\n* Improvement\n * combo: The 'blur' event handler is attached to the 'inputEvents' property.\n * numberbox: The 'cloneFrom' method is available.\n * slider: The 'step' property can be set with a floating number.\n * menu: The 'findItem' method allows the user to find menu item by any parameters.\n * menubutton: Add 'showEvent' and 'hideEvent' properties.\n* New Plugins\n * maskedbox: The maskedbox enforces its structure as the user types.\n\nVersion 1.5.4\n-------------\n* Bug\n * combotreegrid: The 'onChange' event does not fire when entering values on the inputing box. fixed.\n * combobox: Clicking on the drop-down panel will jump to the bottom of body on win10 IE11. fixed.\n * datebox: Clicking on the 'Today' button doesn't trigger the 'onSelect' event. fixed.\n * propertygrid: The 'getChanges' method doesn't work after editing the only one row. fixed.\n* Improvement\n * combo: Add the 'panelEvents' property.\n * combo: Attach the default 'mousedown' event handler.\n * combobox: The 'setValues' method can be called to initialize the displaying text.\n * combotreegrid: Press ENTER key to select the highlighted rows.\n * panel: Improve the resizing performance.\n * filebox: The 'files' method allows the user to get the selected file list.\n * searchbox: Improvent the 'selectName' method.\n\nVersion 1.5.3\n-------------\n* Bug\n * combobox: The 'iconCls' property can not be parsed from the <option> markup. fixed.\n * combobox: Clicking scrollbar will cause the drop-down panel to be hidden in IE. fixed.\n * pagination: The pagination height will shrink when the 'displayMsg' property is set to false. fixed.\n * tabs: The tab panel takes a wrong 'data' parameter in the 'onLoad' event. fixed.\n* Improvement\n * draggable: Add 'onEndDrag' event.\n * resizable: Retrieve more than one resizing directions with different edges.\n * datagrid: Add 'resizeEdge' property.\n * datagrid: Avoid the memory leaks.\n * combo: The 'originalValue' property value is corrected in multiple mode.\n * form: Add the tagbox to the form fields.\n * tagbox: Add the 'reset' method.\n * progress: Increase the response time to open and close the progress message window.\n \nVersion 1.5.2\n-------------\n* Bug\n * form: The initialized value of the inputing box will disappear after calling the 'reset' method. fixed.\n * textbox: Calling the 'destroy' method does not clean the field label. fixed.\n * datagrid: Calling the 'selectRow' method on an unexisting row causes undesired record set. fixed.\n* Improvement\n * datagrid: The ctrl selection is supported on Mac keyboards.\n * datagrid: The 'scrollOnSelect' property is available for the user to determine whether to scroll to the specified row when selecting it.\n * combotree: Add the 'textField' property.\n * combotreegrid: Add the 'textField' property.\n * pagination: Add 'showPageInfo' property.\n * panel: Add 'halign' and 'titleDirection' properties to allow the user to align the panel header to left or right side.\n * accordion: Add 'halign' property to build the horizontal accordion.\n * tagbox: The 'required' propery can be applied to validate whether the value is empty.\n\nVersion 1.5.1\n-------------\n* Bug\n * datagrid: The selecting and checking flags will lose after calling 'updateRow' method. fixed.\n * tabs: The trip tools have a wrong position when calling 'update' method. fixed.\n * window: When the height is set to 'auto', it will disappear after moving the window. fixed.\n * messager: When display the progress message window and then close it immediately, an exception occurs. fixed.\n * form: The 'clear' method does not clear the selected drop-down items of the combobox. fixed.\n* Improvement\n * textbox: The 'cls' property is available to add a custom style to textbox.\n * numberbox: Allow the user to format currency in Italian.\n * combo: Add 'multivalue' property that allows the user to determine how to submit the multiple values.\n * combobox: Add 'reversed' property.\n * combobox: Add 'onClick' event.\n * combogrid: Add 'reversed' property.\n * treegrid: Enable multiple selection with the shift key.\n* New Plugins\n * tagbox: Allows the user to add tags to a form field.\n\nVersion 1.5\n-------------\n* Bug\n * combobox: The 'onSelect' event does not fire when load data that contains the selected item. fixed.\n * datagrid: The 'updateRow' method sometimes does not work properly when the field is set to a blank value. fixed.\n* Improvement\n * A label can be associated to any form fields.\n * combobox: Enhance the 'select' and 'unselect' rules on the drop-down items.\n * combobox: Add 'limitToList' property to limit the inputed values to the listed items.\n * combogrid: Allow the user to clone the component quickly.\n * form: Add the 'dirty' property that allows the user to submit the only changed fields.\n * form: Add 'resetDirty' method.\n * datagrid: Allow the user to display a message when there are no records to be shown.\n * textbox: Add 'label','labelWidth','labelPosition' and 'labelAlign' properties.\n * spinner: Add 'spinAlign' property.\n * calendar: Allow the user to display week number of the year.\n * window: Add 'constrain' property.\n* New Plugins\n * passwordbox: The plugin that allows the user to input passwords with nice feedback.\n * combotreegrid: Combines combobox with drop-down treegrid component.\n\nVersion 1.4.5\n-------------\n* Bug\n * datagrid: The 'getChanges' method does not return the updated rows after calling 'updateRow' method. fixed.\n * treegrid: The 'onLoadSuccess' event fires when append or insert a row. fixed.\n * tree: The 'onLoadSuccess' event fires when append or insert a node. fixed.\n* Improvement\n * window: The displaying style can be customized.\n * window: The 'border' property allows the user to set different border style.\n * navpanel: The 'href' property is enabled to load content from remote server.\n * combotree: The 'setValue' and 'setValues' methods accept the paremter values in 'id' and 'text' pairs\n * combobox: Add 'showItemIcon' property.\n * combobox: Set 'groupPosition' property to 'sticky' to stick the item group to the top of drop-down panel.\n * messager: Pressing ENTER key on input box will trigger click event of the first button.\n * validatebox: Add 'editable',disabled' and 'readonly' properties.\n * validatebox: Add 'enable','disable','readonly' methods.\n * validatebox: Allow the user to determine how to display the error message.\n * filebox: Add 'accept' and 'multiple' properties.\n * form: Add 'iframe' property and 'onProgress' event.\n * treegrid: Add cascade checkbox selection.\n * treegrid: Add 'getCheckedNodes','checkNode' and 'uncheckNode' methods.\n\nVersion 1.4.4\n-------------\n* Bug\n * filebox: The 'clear' and 'reset' methods do not work properly in IE9. fixed.\n * messager: After calling $.messager.progress() with no arguments, the $.messager.progress('close') does not work properly. fixed.\n * timespinner: The value does not display properly in IE8 while clicking the spin buttons. fixed.\n * window: The window does not display when calling 'options' method in 'onMove' event. fixed.\n * treegrid: The 'getLevel' method does not accept the parameter value of 0. fixed.\n* Improvement\n * layout: The 'collapsedContent','expandMode' and 'hideExpandTool' properties are supported in region panel.\n * layout: The 'hideCollapsedContent' property can be set to display the vertical title bar on collapsed panel.\n * layout: Add 'onCollapse','onExpand','onAdd','onRemove' events.\n * datagrid: Display the 'up-down' icon on the sortable columns.\n * datagrid: Add 'gotoPage' method.\n * propertygrid: Add 'groups' method that allows to get all the data groups.\n * messager: Auto scroll feature is supported when displaying long messages.\n * tabs: The 'disabled' property is supported when defining a disabled tab panel.\n * tabs: The percentange size is supported now.\n\nVersion 1.4.3\n-------------\n* Bug\n * textbox: The 'setText' method does not accept value 0. fixed.\n * timespinner: When running in IE11, the error occurs when clicking on the empty textbox. fixed.\n * tabs: The 'update' method can not update only the panel body. fixed.\n* Improvement\n * combobox: Improve the performance of displaying the drop-down panel.\n * combogrid: Remember the displaying text when the drop-down datagrid go to other pages.\n * combogrid: The 'setValue' and 'setValues' methods accept a key-value object.\n * window: The inline window's mask can auto-stretch its size to fill parent container.\n * tabs: The 'showTool' and 'hideTool' methods are available for users to show or hide the tools.\n * layout: Allow the user to override the 'cls','headerCls' and 'bodyCls' property values.\n* New Plugins\n * switchbutton: The switch button with two states:'on' and 'off'.\n\nVersion 1.4.2\n-------------\n* Bug\n * treegrid: The column will restore its size to original size after recreating the treegrid. fixed.\n* Improvement\n * draggable: Add 'delay' property that allows the user to delay the drag operation.\n * tree: Add 'filter' property and 'doFilter' method.\n * tabs: The 'add' method allows the user to insert a tab panel at a specified index.\n * tabs: The user can determine what tab panel can be selected.\n * tabs: Add 'justified' and 'narrow' properties.\n * layout: Add 'unsplit' and 'split' methods.\n * messager: Keyboard navigation features are supported now.\n * form: Add 'onChange' event.\n * combobox: Add 'queryParams' property.\n * slider: Add 'range' property.\n * menu: Add 'itemHeight','inline','noline' properties.\n * panel: The 'header' property allows the user to customize the panel header.\n * menubutton: Add 'hasDownArrow' property.\n* New Plugins\n * datalist: The plugin to render items in a list.\n * navpanel: The root component for the mobile page.\n * mobile: The plugin to provide the mobile page stack management and navigation.\n\nVersion 1.4.1\n-------------\n* Bug\n * combogrid: The combogrid has different height than other combo components. fixed.\n * datagrid: The row element loses some class style value after calling 'updateRow' method. fixed.\n * menubutton: Calling 'enable' method on a disabled button can not work well. fixed.\n * form: The filebox components in the form do not work correctly after calling 'clear' method. fixed.\n* Improvement\n * tabs: The 'update' method accepts 'type' option that allows the user to update the header,body,or both.\n * panel: Add 'openAnimation','openDuration','closeAnimation' and 'closeDuration' properties to set the animation for opening or closing a panel.\n * panel: Add 'footer' property that allows the user to add a footer bar to the bottom of panel.\n * datagrid: Calling 'endEdit' method will accept the editing value correctly.\n * datagrid: Add 'onBeforeSelect','onBeforeCheck','onBeforeUnselect','onBeforeUncheck' events.\n * propertygrid: The user can edit a row by calling 'beginEdit' method.\n * datebox: Add 'cloneFrom' method to create the datebox component quickly.\n * datetimebox: Add 'cloneFrom' method to create the datetimebox component quickly.\n\nVersion 1.4\n-------------\n* Bug\n * menu: The menu should not has a correct height when removed a menu item. fixed.\n * datagrid: The 'fitColumns' method does not work normally when the datarid width is too small. fixed.\n* Improvement\n * The fluid/percentange size is supported now for all easyui components.\n * menu: Add 'showItem', 'hideItem' and 'resize' methods.\n * menu: Auto resize the height upon the window size.\n * menu: Add 'duration' property that allows the user to define duration time in milliseconds to hide menu.\n * validatebox: Add 'onBeforeValidate' and 'onValidate' events.\n * combo: Extended from textbox now.\n * combo: Add 'panelMinWidth','panelMaxWidth','panelMinHeight' and 'panelMaxHeight' properties.\n * searchbox: Extended from textbox now.\n * tree: The 'getRoot' method will return the top parent node of a specified node if pass a 'nodeEl' parameter.\n * tree: Add 'queryParams' property.\n * datetimebox: Add 'spinnerWidth' property.\n * panel: Add 'doLayout' method to cause the panel to lay out its components.\n * panel: Add 'clear' method to clear the panel's content.\n * datagrid: The user is allowed to assign percent width to columns.\n * form: Add 'ajax','novalidate' and 'queryParams' properties.\n * linkbutton: Add 'resize' method.\n* New Plugins\n * textbox: A enhanced input field that allows users build their form easily.\n * datetimespinner: A date and time spinner that allows to pick a specific day.\n * filebox: The filebox component represents a file field of the forms.\n\nVersion 1.3.6\n-------------\n* Bug\n * treegrid: The 'getChecked' method can not return correct checked rows. fixed.\n * tree: The checkbox does not display properly on async tree when 'onlyLeafCheck' property is true. fixed.\n* Improvement\n * treegrid: All the selecting and checking methods are extended from datagrid component.\n * linkbutton: The icon alignment is fully supported, possible values are: 'top','bottom','left','right'.\n * linkbutton: Add 'size' property, possible values are: 'small','large'.\n * linkbutton: Add 'onClick' event.\n * menubutton: Add 'menuAlign' property that allows the user set top level menu alignment.\n * combo: Add 'panelAlign' property, possible values are: 'left','right'.\n * calendar: The 'formatter','styler' and 'validator' options are available to custom the calendar dates.\n * calendar: Add 'onChange' event.\n * panel: Add 'method','queryParams' and 'loader' options.\n * panel: Add 'onLoadError' event.\n * datagrid: Add 'onBeginEdit' event that fires when a row goes into edit mode.\n * datagrid: Add 'onEndEdit' event that fires when finishing editing but before destroying editors.\n * datagrid: Add 'sort' method and 'onBeforeSortColumn' event.\n * datagrid: The 'combogrid' editor has been integrated into datagrid.\n * datagrid: Add 'ctrlSelect' property that only allows multi-selection when ctrl+click is used.\n * slider: Add 'converter' option that allows users determine how to convert a value to the slider position or the slider position to the value.\n * searchbox: Add 'disabled' property.\n * searchbox: Add 'disable','enable','clear','reset' methods.\n * spinner: Add 'readonly' property, 'readonly' method and 'onChange' event.\n\nVersion 1.3.5\n-------------\n* Bug\n * searchbox: The 'searcher' function can not offer 'name' parameter value correctly. fixed.\n * combo: The 'isValid' method can not return boolean value. fixed.\n * combo: Clicking combo will trigger the 'onHidePanel' event of other combo components that have hidden drop-down panels. fixed.\n * combogrid: Some methods can not inherit from combo. fixed.\n* Improvement\n * datagrid: Improve performance on checking rows.\n * menu: Allows to append a menu separator.\n * menu: Add 'hideOnUnhover' property to indicate if the menu should be hidden when mouse exits it.\n * slider: Add 'clear' and 'reset' methods.\n * tabs: Add 'unselect' method that will trigger 'onUnselect' event.\n * tabs: Add 'selected' property to specify what tab panel will be opened.\n * tabs: The 'collapsible' property of tab panel is supported to determine if the tab panel can be collapsed.\n * tabs: Add 'showHeader' property, 'showHeader' and 'hideHeader' methods.\n * combobox: The 'disabled' property can be used to disable some items.\n * tree: Improve loading performance.\n * pagination: The 'layout' property can be used to customize the pagination layout.\n * accordion: Add 'unselect' method that will trigger 'onUnselect' event.\n * accordion: Add 'selected' and 'multiple' properties.\n * accordion: Add 'getSelections' method.\n * datebox: Add 'sharedCalendar' property that allows multiple datebox components share one calendar component.\n\nVersion 1.3.4\n-------------\n* Bug\n * combobox: The onLoadSuccess event fires when parsing empty local data. fixed.\n * form: Calling 'reset' method can not reset datebox field. fixed.\n* Improvement\n * mobile: The context menu and double click features are supported on mobile devices.\n * combobox: The 'groupField' and 'groupFormatter' options are available to display items in groups.\n * tree: When append or insert nodes, the 'data' parameter accepts one or more nodes data.\n * tree: The 'getChecked' method accepts a single 'state' or an array of 'state'.\n * tree: Add 'scrollTo' method.\n * datagrid: The 'multiSort' property is added to support multiple column sorting.\n * datagrid: The 'rowStyler' and column 'styler' can return CSS class name or inline styles.\n * treegrid: Add 'load' method to load data and navigate to the first page.\n * tabs: Add 'tabWidth' and 'tabHeight' properties.\n * validatebox: The 'novalidate' property is available to indicate whether to perform the validation.\n * validatebox: Add 'enableValidation' and 'disableValidation' methods.\n * form: Add 'enableValidation' and 'disableValidation' methods.\n * slider: Add 'onComplete' event.\n * pagination: The 'buttons' property accepts the existing element.\n\nVersion 1.3.3\n-------------\n* Bug\n * datagrid: Some style features are not supported by column styler function. fixed.\n * datagrid: IE 31 stylesheet limit. fixed.\n * treegrid: Some style features are not supported by column styler function. fixed.\n * menu: The auto width of menu item displays incorrect in ie6. fixed.\n * combo: The 'onHidePanel' event can not fire when clicked outside the combo area. fixed. \n* Improvement\n * datagrid: Add 'scrollTo' and 'highlightRow' methods.\n * treegrid: Enable treegrid to parse data from <tbody> element.\n * combo: Add 'selectOnNavigation' and 'readonly' options.\n * combobox: Add 'loadFilter' option to allow users to change data format before loading into combobox.\n * tree: Add 'onBeforeDrop' callback event.\n * validatebox: Dependent on tooltip plugin now, add 'deltaX' property.\n * numberbox: The 'filter' options can be used to determine if the key pressed was accepted.\n * linkbutton: The group button is available.\n * layout: The 'minWidth','maxWidth','minHeight','maxHeight' and 'collapsible' properties are available for region panel.\n* New Plugins\n * tooltip: Display a popup message when moving mouse over an element.\n \nVersion 1.3.2\n-------------\n* Bug\n * datagrid: The loading message window can not be centered when changing the width of datagrid. fixed.\n * treegrid: The 'mergeCells' method can not work normally. fixed.\n * propertygrid: Calling 'endEdit' method to stop editing a row will cause errors. fixed.\n * tree: Can not load empty data when 'lines' property set to true. fixed.\n* Improvement\n * RTL feature is supported now.\n * tabs: Add 'scrollBy' method to scroll the tab header by the specified amount of pixels\n * tabs: Add 'toolPosition' property to set tab tools to left or right.\n * tabs: Add 'tabPosition' property to define the tab position, possible values are: 'top','bottom','left','right'.\n * datagrid: Add a column level property 'order' that allows users to define different default sort order per column.\n * datagrid: Add a column level property 'halign' that allows users to define how to align the column header.\n * datagrid: Add 'resizeHandle' property to define the resizing column position, by grabbing the left or right edge of the column.\n * datagrid: Add 'freezeRow' method to freeze some rows that will always be displayed at the top when the datagrid is scrolled down.\n * datagrid: Add 'clearChecked' method to clear all checked records.\n * datagrid: Add 'data' property to initialize the datagrid data.\n * linkbutton: Add 'iconAlgin' property to define the icon position, supported values are: 'left','right'.\n * menu: Add 'minWidth' property.\n * menu: The menu width can be automatically calculated.\n * tree: New events are available including 'onBeforeDrag','onStartDrag','onDragEnter','onDragOver','onDragLeave',etc.\n * combo: Add 'height' property to allow users to define the height of combo.\n * combo: Add 'reset' method.\n * numberbox: Add 'reset' method.\n * spinner: Add 'reset' method.\n * spinner: Add 'height' property to allow users to define the height of spinner.\n * searchbox: Add 'height' property to allow users to define the height of searchbox.\n * form: Add 'reset' method.\n * validatebox: Add 'delay' property to delay validating from the last inputting value.\n * validatebox: Add 'tipPosition' property to define the tip position, supported values are: 'left','right'.\n * validatebox: Multiple validate rules on a field is supported now.\n * slider: Add 'reversed' property to determine if the min value and max value will switch their positions.\n * progressbar: Add 'height' property to allow users to define the height of progressbar.\n\nVersion 1.3.1\n-------------\n* Bug\n * datagrid: Setting the 'pageNumber' property is not valid. fixed.\n * datagrid: The id attribute of rows isn't adjusted properly while calling 'insertRow' or 'deleteRow' method.\n * dialog: When load content from 'href', the script will run twice. fixed.\n * propertygrid: The editors that extended from combo can not accept its changed value. fixed.\n* Improvement\n * droppable: Add 'disabled' property.\n * droppable: Add 'options','enable' and 'disable' methods.\n * tabs: The tab panel tools can be changed by calling 'update' method.\n * messager: When show a message window, the user can define the window position by applying 'style' property.\n * window: Prevent script on window body from running twice.\n * window: Add 'hcenter','vcenter' and 'center' methods.\n * tree: Add 'onBeforeCheck' callback event.\n * tree: Extend the 'getChecked' method to allow users to get 'checked','unchecked' or 'indeterminate' nodes.\n * treegrid: Add 'update' method to update a specified node.\n * treegrid: Add 'insert' method to insert a new node.\n * treegrid: Add 'pop' method to remove a node and get the removed node data.\n\nVersion 1.3\n-----------\n* Bug\n * combogrid: When set to 'remote' query mode, the 'queryParams' parameters can't be sent to server. fixed.\n * combotree: The tree nodes on drop-down panel can not be unchecked while calling 'clear' method. fixed.\n * datetimebox: Setting 'showSeconds' property to false cannot hide seconds info. fixed.\n * datagrid: Calling 'mergeCells' method can't auto resize the merged cell while header is hidden. fixed.\n * dialog: Set cache to false and load data via ajax, the content cannot be refreshed. fixed.\n* Improvement\n * The HTML5 'data-options' attribute is available for components to declare all custom options, including properties and events.\n * More detailed documentation is available.\n * panel: Prevent script on panel body from running twice.\n * accordion: Add 'getPanelIndex' method.\n * accordion: The tools can be added on panel header.\n * datetimebox: Add 'timeSeparator' option that allows users to define the time separator.\n * pagination: Add 'refresh' and 'select' methods.\n * datagrid: Auto resize the column width to fit the contents when the column width is not defined.\n * datagrid: Double click on the right border of columns to auto resize the columns to the contents in the columns.\n * datagrid: Add 'autoSizeColumn' method that allows users to adjust the column width to fit the contents.\n * datagrid: Add 'getChecked' method to get all rows where the checkbox has been checked.\n * datagrid: Add 'selectOnCheck' and 'checkOnSelect' properties and some checking methods to enhance the row selections.\n * datagrid: Add 'pagePosition' property to allow users to display pager bar at either top,bottom or both places of the grid.\n * datagrid: The buffer view and virtual scroll view are supported to display large amounts of records without pagination.\n * tabs: Add 'disableTab' and 'enableTab' methods to allow users to disable or enable a tab panel.\n\nVersion 1.2.6\n-------------\n* Bug\n * tabs: Call 'add' method with 'selected:false' option, the added tab panel is always selected. fixed.\n * treegrid: The 'onSelect' and 'onUnselect' events can't be triggered. fixed.\n * treegrid: Cannot display zero value field. fixed. \n* Improvement\n * propertygrid: Add 'expandGroup' and 'collapseGroup' methods.\n * layout: Allow users to create collapsed layout panels by assigning 'collapsed' property to true.\n * layout: Add 'add' and 'remove' methods that allow users to dynamically add or remove region panel.\n * layout: Additional tool icons can be added on region panel header.\n * calendar: Add 'firstDay' option that allow users to set first day of week. Sunday is 0, Monday is 1, ...\n * tree: Add 'lines' option, true to display tree lines. \n * tree: Add 'loadFilter' option that allow users to change data format before loading into the tree.\n * tree: Add 'loader' option that allow users to define how to load data from remote server.\n * treegrid: Add 'onClickCell' and 'onDblClickCell' callback function options.\n * datagrid: Add 'autoRowHeight' property that allow users to determine if set the row height based on the contents of that row.\n * datagrid: Improve performance to load large data set.\n * datagrid: Add 'loader' option that allow users to define how to load data from remote server.\n * treegrid: Add 'loader' option that allow users to define how to load data from remote server.\n * combobox: Add 'onBeforeLoad' callback event function.\n * combobox: Add 'loader' option that allow users to define how to load data from remote server.\n * Add support for other loading mode such as dwr,xml,etc.\n* New Plugins\n * slider: Allows the user to choose a numeric value from a finite range.\n\nVersion 1.2.5\n-------------\n* Bug\n * tabs: When add a new tab panel with href property, the content page is loaded twice. fixed.\n * form: Failed to call 'load' method to load form input with complex name. fixed.\n * draggable: End drag in ie9, the cursor cannot be restored. fixed.\n* Improvement\n * panel: The tools can be defined via html markup.\n * tabs: Call 'close' method to close specified tab panel, users can pass tab title or index of tab panel. Other methods such 'select','getTab' and 'exists' are similar to 'close' method.\n * tabs: Add 'getTabIndex' method.\n * tabs: Users can define mini tools on tabs.\n * tree: The mouse must move a specified distance to begin drag and drop operation.\n * resizable: Add 'options','enable' and 'disable' methods.\n * numberbox: Allow users to change number format.\n * datagrid: The subgrid is supported now.\n * searchbox: Add 'selectName' method to select searching type name.\n\nVersion 1.2.4\n-------------\n* Bug\n * menu: The menu position is wrong when scroll bar appears. fixed.\n * accordion: Cannot display the default selected panel in jQuery 1.6.2. fixed.\n * tabs: Cannot display the default selected tab panel in jQuery 1.6.2. fixed.\n* Improvement\n * menu: Allow users to disable or enable menu item.\n * combo: Add 'delay' property to set the delay time to do searching from the last key input event.\n * treegrid: The 'getEditors' and 'getEditor' methods are supported now.\n * treegrid: The 'loadFilter' option is supported now.\n * messager: Add 'progress' method to display a message box with a progress bar.\n * panel: Add 'extractor' option to allow users to extract panel content from ajax response.\n* New Plugins\n * searchbox: Allow users to type words into box and do searching operation.\n * progressbar: To display the progress of a task.\n \nVersion 1.2.3\n-------------\n* Bug\n * window: Cannot resize the window with iframe content. fixed.\n * tree: The node will be removed when dragging to its child. fixed.\n * combogrid: The onChange event fires multiple times. fixed.\n * accordion: Cannot add batch new panels when animate property is set to true. fixed.\n* Improvement\n * treegrid: The footer row and row styler features are supported now.\n * treegrid: Add 'getLevel','reloadFooter','getFooterRows' methods.\n * treegrid: Support root nodes pagination and editable features.\n * datagrid: Add 'getFooterRows','reloadFooter','insertRow' methods and improve editing performance.\n * datagrid: Add 'loadFilter' option that allow users to change original source data to standard data format.\n * draggable: Add 'onBeforeDrag' callback event function.\n * validatebox: Add 'remote' validation type.\n * combobox: Add 'method' option.\n* New Plugins\n * propertygrid: Allow users to edit property value in datagrid. \n\nVersion 1.2.2\n-------------\n* Bug\n * datagrid: Apply fitColumns cannot work fine while set checkbox column. fixed.\n * datagrid: The validateRow method cannot return boolean type value. fixed.\n * numberbox: Cannot fix value in chrome when min or max property isn't defined. fixed.\n* Improvement\n * menu: Add some crud methods.\n * combo: Add hasDownArrow property to determine whether to display the down arrow button.\n * tree: Supports inline editing.\n * calendar: Add some useful methods such as 'resize', 'moveTo' etc.\n * timespinner: Add some useful methods.\n * datebox: Refactoring based on combo and calendar plugin now.\n * datagrid: Allow users to change row style in some conditions.\n * datagrid: Users can use the footer row to display summary information.\n* New Plugins\n * datetimebox: Combines datebox with timespinner component.\n  \nVersion 1.2.1\n-------------\n* Bug\n * easyloader: Some dependencies cannot be loaded by their order. fixed.\n * tree: The checkbox is setted incorrectly when removing a node. fixed.\n * dialog: The dialog layout incorrectly when 'closed' property is setted to true. fixed.\n* Improvement\n * parser: Add onComplete callback function that can indicate whether the parse action is complete.\n * menu: Add onClick callback function and some other methods.\n * tree: Add some useful methods.\n * tree: Drag and Drop feature is supported now.\n * tree: Add onContextMenu callback function.\n * tabs: Add onContextMenu callback function.\n * tabs: Add 'tools' property that can create buttons on right bar.\n * datagrid: Add onHeaderContextMenu and onRowContextMenu callback functions.\n * datagrid: Custom view is supported.\n * treegrid: Add onContextMenu callback function and append,remove methods.\n  \nVersion 1.2\n-------------\n* Improvement\n * tree: Add cascadeCheck,onlyLeafCheck properties and select event.\n * combobox: Enable multiple selection.\n * combotree: Enable multiple selection.\n * tabs: Remember the trace of selection, when current tab panel is closed, the previous selected tab will be selected.\n * datagrid: Extend from panel, so many properties defined in panel can be used for datagrid.\n* New Plugins\n * treegrid: Represent tabular data in hierarchical view, combines tree view and datagrid.\n * combo: The basic component that allow user to extend their combo component such as combobox,combotree,etc.\n * combogrid: Combines combobox with drop-down datagrid component.\n * spinner: The basic plugin to create numberspinner,timespinner,etc.\n * numberspinner: The numberbox that allow user to change value by clicking up and down spin buttons.\n * timespinner: The time selector that allow user to quickly inc/dec a time.\n \nVersion 1.1.2\n-------------\n* Bug\n * messager: When call show method in layout, the message window will be blocked. fixed.\n* Improvement\n * datagrid: Add validateRow method, remember the current editing row status when do editing action.\n * datagrid: Add the ability to create merged cells.\n * form: Add callback functions when loading data.\n * panel,window,dialog: Add maximize,minimize,restore,collapse,expand methods.\n * panel,tabs,accordion: The lazy loading feature is supported.\n * tabs: Add getSelected,update,getTab methods.\n * accordion: Add crud methods.\n * linkbutton: Accept an id option to set the id attribute.\n * tree: Enhance tree node operation.\n \nVersion 1.1.1\n-------------\n* Bug\n * form: Cannot clear the value of combobox and combotree component. fixed.\n* Improvement\n * tree: Add some useful methods such as 'getRoot','getChildren','update',etc.\n * datagrid: Add editable feature, improve performance while loading data.\n * datebox: Add destroy method.\n * combobox: Add destroy and clear method.\n * combotree: Add destroy and clear method.\n \nVersion 1.1\n-------------\n* Bug\n * messager: When call show method with timeout property setted, an error occurs while clicking the close button. fixed.\n * combobox: The editable property of combobox plugin is invalid. fixed.\n * window: The proxy box will not be removed when dragging or resizing exceed browser border in ie. fixed.\n* Improvement\n * menu: The menu item can use <a> markup to display a different page.\n * tree: The tree node can use <a> markup to act as a tree menu.\n * pagination: Add some event on refresh button and page list.\n * datagrid: Add a 'param' parameter for reload method, with which users can pass query parameter when reload data.\n * numberbox: Add required validation support, the usage is same as validatebox plugin.\n * combobox: Add required validation support.\n * combotree: Add required validation support.\n * layout: Add some method that can get a region panel and attach event handlers.\n* New Plugins\n * droppable: A droppable plugin that supports drag drop operation.\n * calendar: A calendar plugin that can either be embedded within a page or popup.\n * datebox: Combines a textbox with a calendar that let users to select date.\n * easyloader: A JavaScript loader that allows you to load plugin and their dependencies into your page.\n \nVersion 1.0.5\n* Bug\n * panel: The fit property of panel performs incorrectly. fixed.\n* Improvement\n * menu: Add a href attribute for menu item, with which user can display a different page in the current browser window.\n * form: Add a validate method to do validation for validatebox component.\n * dialog: The dialog can read collapsible,minimizable,maximizable and resizable attribute from markup.\n* New Plugins\n * validatebox: A validation plugin that checks to make sure the user's input value is valid. \n \nVersion 1.0.4\n-------------\n* Bug\n * panel: When panel is invisible, it is abnormal when resized. fixed.\n * panel: Memory leak in method 'destroy'. fixed.\n * messager: Memory leak when messager box is closed. fixed.\n * dialog: No onLoad event occurs when loading remote data. fixed.\n* Improvement\n * panel: Add method 'setTitle'.\n * window: Add method 'setTitle'.\n * dialog: Add method 'setTitle'.\n * combotree: Add method 'getValue'.\n * combobox: Add method 'getValue'.\n * form: The 'load' method can load data and fill combobox and combotree field correctly.\n \nVersion 1.0.3\n-------------\n* Bug\n * menu: When menu is show in a DIV container, it will be cropped. fixed.\n * layout: If you collpase a region panel and then expand it immediately, the region panel will not show normally. fixed.\n * accordion: If no panel selected then the first one will become selected and the first panel's body height will not set correctly. fixed.\n* Improvement\n * tree: Add some methods to support CRUD operation.\n * datagrid: Toolbar can accept a new property named 'disabled' to disable the specified tool button.\n* New Plugins\n * combobox: Combines a textbox with a list of options that users are able to choose from.\n * combotree: Combines combobox with drop-down tree component.\n * numberbox: Make input element can only enter number char.\n * dialog: rewrite the dialog plugin, dialog can contains toolbar and buttons.\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/accordion/_content.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>AJAX Content</title>\n</head>\n<body>\n\t<p style=\"font-size:14px\">Here is the content loaded via AJAX.</p>\n\t<ul>\n\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t<li>easyui provides essential functionality for building modern, interactive, javascript applications.</li>\n\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t<li>complete framework for HTML5 web page.</li>\n\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t<li>easyui is very easy but powerful.</li>\n\t</ul>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/accordion/actions.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Accordion Actions - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Accordion Actions</h2>\n\t<p>Click the buttons below to add or remove accordion items.</p>\n\t<div style=\"margin:20px 0 10px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"selectPanel()\">Select</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"addPanel()\">Add</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"removePanel()\">Remove</a>\n\t</div>\n\t<div id=\"aa\" class=\"easyui-accordion\" style=\"width:500px;height:300px;\">\n\t\t<div title=\"About\" data-options=\"iconCls:'icon-ok'\" style=\"overflow:auto;padding:10px;\">\n\t\t\t<h3 style=\"color:#0099FF;\">Accordion for jQuery</h3>\n\t\t\t<p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>\n\t\t</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction selectPanel(){\n\t\t\t$.messager.prompt('Prompt','Please enter the panel title:',function(s){\n\t\t\t\tif (s){\n\t\t\t\t\t$('#aa').accordion('select',s);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tvar idx = 1;\n\t\tfunction addPanel(){\n\t\t\t$('#aa').accordion('add',{\n\t\t\t\ttitle:'Title'+idx,\n\t\t\t\tcontent:'<div style=\"padding:10px\">Content'+idx+'</div>'\n\t\t\t});\n\t\t\tidx++;\n\t\t}\n\t\tfunction removePanel(){\n\t\t\tvar pp = $('#aa').accordion('getSelected');\n\t\t\tif (pp){\n\t\t\t\tvar index = $('#aa').accordion('getPanelIndex',pp);\n\t\t\t\t$('#aa').accordion('remove',index);\n\t\t\t}\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/accordion/ajax.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Loading Accordion Content with AJAX - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Loading Accordion Content with AJAX</h2>\n\t<p>Click AJAX panel header to load content via AJAX.</p>\n\t<div style=\"margin:20px 0 10px 0;\"></div>\n\t<div class=\"easyui-accordion\" style=\"width:500px;height:300px;\">\n\t\t<div title=\"About\" data-options=\"iconCls:'icon-ok'\" style=\"overflow:auto;padding:10px;\">\n\t\t\t<h3 style=\"color:#0099FF;\">Accordion for jQuery</h3>\n\t\t\t<p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>\n\t\t</div>\n\t\t<div title=\"Help\" data-options=\"iconCls:'icon-help'\" style=\"padding:10px;\">\n\t\t\t<p>The accordion allows you to provide multiple panels and display one or more at a time. Each panel has built-in support for expanding and collapsing. Clicking on a panel header to expand or collapse that panel body. The panel content can be loaded via ajax by specifying a 'href' property. Users can define a panel to be selected. If it is not specified, then the first panel is taken by default.</p> \t\t\n\t\t</div>\n\t\t<div title=\"Ajax\" data-options=\"href:'_content.html'\" style=\"padding:10px\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/accordion/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Accordion - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Accordion</h2>\n\t<p>Click on panel header to show its content.</p>\n\t<div style=\"margin:20px 0 10px 0;\"></div>\n\t<div class=\"easyui-accordion\" style=\"width:500px;height:300px;\">\n\t\t<div title=\"About\" data-options=\"iconCls:'icon-ok'\" style=\"overflow:auto;padding:10px;\">\n\t\t\t<h3 style=\"color:#0099FF;\">Accordion for jQuery</h3>\n\t\t\t<p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>\n\t\t</div>\n\t\t<div title=\"Help\" data-options=\"iconCls:'icon-help'\" style=\"padding:10px;\">\n\t\t\t<p>The accordion allows you to provide multiple panels and display one or more at a time. Each panel has built-in support for expanding and collapsing. Clicking on a panel header to expand or collapse that panel body. The panel content can be loaded via ajax by specifying a 'href' property. Users can define a panel to be selected. If it is not specified, then the first panel is taken by default.</p> \t\t\n\t\t</div>\n\t\t<div title=\"TreeMenu\" data-options=\"iconCls:'icon-search'\" style=\"padding:10px 0;\">\n\t\t\t<ul class=\"easyui-tree\">\n\t\t\t\t<li>\n\t\t\t\t\t<span>Foods</span>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<span>Fruits</span>\n\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t<li>apple</li>\n\t\t\t\t\t\t\t\t<li>orange</li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<span>Vegetables</span>\n\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t<li>tomato</li>\n\t\t\t\t\t\t\t\t<li>carrot</li>\n\t\t\t\t\t\t\t\t<li>cabbage</li>\n\t\t\t\t\t\t\t\t<li>potato</li>\n\t\t\t\t\t\t\t\t<li>lettuce</li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/accordion/datagrid_data1.json",
    "content": "{\"total\":28,\"rows\":[\n\t{\"productid\":\"FI-SW-01\",\"productname\":\"Koi\",\"unitcost\":10.00,\"status\":\"P\",\"listprice\":36.50,\"attr1\":\"Large\",\"itemid\":\"EST-1\"},\n\t{\"productid\":\"K9-DL-01\",\"productname\":\"Dalmation\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":18.50,\"attr1\":\"Spotted Adult Female\",\"itemid\":\"EST-10\"},\n\t{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":38.50,\"attr1\":\"Venomless\",\"itemid\":\"EST-11\"},\n\t{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":26.50,\"attr1\":\"Rattleless\",\"itemid\":\"EST-12\"},\n\t{\"productid\":\"RP-LI-02\",\"productname\":\"Iguana\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":35.50,\"attr1\":\"Green Adult\",\"itemid\":\"EST-13\"},\n\t{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":158.50,\"attr1\":\"Tailless\",\"itemid\":\"EST-14\"},\n\t{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":83.50,\"attr1\":\"With tail\",\"itemid\":\"EST-15\"},\n\t{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":23.50,\"attr1\":\"Adult Female\",\"itemid\":\"EST-16\"},\n\t{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":89.50,\"attr1\":\"Adult Male\",\"itemid\":\"EST-17\"},\n\t{\"productid\":\"AV-CB-01\",\"productname\":\"Amazon Parrot\",\"unitcost\":92.00,\"status\":\"P\",\"listprice\":63.50,\"attr1\":\"Adult Male\",\"itemid\":\"EST-18\"}\n]}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/accordion/expandable.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Keep Expandable Panel in Accordion - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Keep Expandable Panel in Accordion</h2>\n\t<p>Keep a expandable panel and prevent it from collapsing.</p>\n\t<div style=\"margin:20px 0 10px 0;\"></div>\n\t<div class=\"easyui-accordion\" style=\"width:500px;height:300px;\">\n\t\t<div title=\"Top Panel\" data-options=\"iconCls:'icon-search',collapsed:false,collapsible:false\" style=\"padding:10px;\">\n\t\t\t<input class=\"easyui-searchbox\" prompt=\"Enter something here\" style=\"width:300px;\">\n\t\t</div>\n\t\t<div title=\"About\" data-options=\"selected:true\" style=\"padding:10px;\">\n\t\t\t<h3 style=\"color:#0099FF;\">Accordion for jQuery</h3>\n\t\t\t<p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>\n\t\t</div>\n\t\t<div title=\"Title1\" style=\"padding:10px\">\n\t\t\t<p>Content1</p>\n\t\t</div>\n\t\t<div title=\"Title2\" style=\"padding:10px\">\n\t\t\t<p>Content2</p>\n\t\t</div>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/accordion/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid Accordion - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid Accordion</h2>\n\t<p>This example shows how to set the width of accordion to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0 10px 0;\"></div>\n\t<div class=\"easyui-accordion\" style=\"width:100%;height:180px;\">\n\t\t<div title=\"About\" data-options=\"iconCls:'icon-ok'\" style=\"overflow:auto;padding:10px;\">\n\t\t\t<p>width: 100%</p>\n\t\t</div>\n\t\t<div title=\"Help\" data-options=\"iconCls:'icon-help',href:'_content.html'\" style=\"padding:10px;\">\n\t\t</div>\n\t</div>\n\t\t<div style=\"margin:20px 0 10px 0;\"></div>\n\n\t<div class=\"easyui-accordion\" style=\"width:50%;height:180px;\">\n\t\t<div title=\"About\" data-options=\"iconCls:'icon-ok'\" style=\"overflow:auto;padding:10px;\">\n\t\t\t<p>width: 50%</p>\n\t\t</div>\n\t\t<div title=\"Help\" data-options=\"iconCls:'icon-help',href:'_content.html'\" style=\"padding:10px;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/accordion/horizontal.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Horizontal Accordion - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Horizontal Accordion</h2>\n\t<p>You can easily set the 'halign' property to create a horizontal accordion.</p>\n\t<div style=\"margin:20px 0 10px 0;\"></div>\n\t<div class=\"easyui-accordion\" halign=\"left\" style=\"width:700px;height:300px;\">\n\t\t<div title=\"About\" titleDirection=\"up\" style=\"overflow:auto;padding:10px;\">\n\t\t\t<h3 style=\"color:#0099FF;\">Accordion for jQuery</h3>\n\t\t\t<p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>\n\t\t</div>\n\t\t<div title=\"Help\" titleDirection=\"up\" style=\"padding:10px;\">\n\t\t\t<p>The accordion allows you to provide multiple panels and display one or more at a time. Each panel has built-in support for expanding and collapsing. Clicking on a panel header to expand or collapse that panel body. The panel content can be loaded via ajax by specifying a 'href' property. Users can define a panel to be selected. If it is not specified, then the first panel is taken by default.</p> \t\t\n\t\t</div>\n\t\t<div title=\"TreeMenu\" titleDirection=\"up\" style=\"padding:10px;\">\n\t\t\t<ul class=\"easyui-tree\">\n\t\t\t\t<li>\n\t\t\t\t\t<span>Foods</span>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<span>Fruits</span>\n\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t<li>apple</li>\n\t\t\t\t\t\t\t\t<li>orange</li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<span>Vegetables</span>\n\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t<li>tomato</li>\n\t\t\t\t\t\t\t\t<li>carrot</li>\n\t\t\t\t\t\t\t\t<li>cabbage</li>\n\t\t\t\t\t\t\t\t<li>potato</li>\n\t\t\t\t\t\t\t\t<li>lettuce</li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/accordion/multiple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Multiple Accordion Panels - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Multiple Accordion Panels</h2>\n\t<p>Enable 'multiple' mode to expand multiple panels at one time.</p>\n\t<div style=\"margin:20px 0 10px 0;\"></div>\n\t<div class=\"easyui-accordion\" data-options=\"multiple:true\" style=\"width:500px;\">\n\t\t<div title=\"Language\" data-options=\"iconCls:'icon-ok'\" style=\"overflow:auto;padding:10px;\">\n\t\t\t<p>A programming language is a formal language designed to communicate instructions to a machine, particularly a computer. Programming languages can be used to create programs that control the behavior of a machine and/or to express algorithms precisely.</p>\n\t\t</div>\n\t\t<div title=\"Java\" style=\"padding:10px;\">\n\t\t\t<p>Java (Indonesian: Jawa) is an island of Indonesia. With a population of 135 million (excluding the 3.6 million on the island of Madura which is administered as part of the provinces of Java), Java is the world's most populous island, and one of the most densely populated places in the world.</p>\n\t\t</div>\n\t\t<div title=\"C#\" style=\"padding:10px;\">\n\t\t\t<p>C# is a multi-paradigm programming language encompassing strong typing, imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming disciplines.</p>\n\t\t</div>\n\t\t<div title=\"Ruby\" style=\"padding:10px;\">\n\t\t\t<p>A dynamic, reflective, general-purpose object-oriented programming language.</p>\n\t\t</div>\n\t\t<div title=\"Fortran\" style=\"padding:10px;\">\n\t\t\t<p>Fortran (previously FORTRAN) is a general-purpose, imperative programming language that is especially suited to numeric computation and scientific computing.</p>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/accordion/tools.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Accordion Tools - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Accordion Tools</h2>\n\t<p>Click the tools on top right of panel to perform actions.</p>\n\t<div style=\"margin:20px 0 10px 0;\"></div>\n\t<div class=\"easyui-accordion\" style=\"width:500px;height:300px;\">\n\t\t<div title=\"About\" data-options=\"iconCls:'icon-ok'\" style=\"overflow:auto;padding:10px;\">\n\t\t\t<h3 style=\"color:#0099FF;\">Accordion for jQuery</h3>\n\t\t\t<p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>\n\t\t</div>\n\t\t<div title=\"Help\" data-options=\"iconCls:'icon-help'\" style=\"padding:10px;\">\n\t\t\t<p>The accordion allows you to provide multiple panels and display one ore more at a time. Each panel has built-in support for expanding and collapsing. Clicking on a panel header to expand or collapse that panel body. The panel content can be loaded via ajax by specifying a 'href' property. Users can define a panel to be selected. If it is not specified, then the first panel is taken by default.</p> \t\t\n\t\t</div>\n\t\t<div title=\"DataGrid\" style=\"padding:10px\" data-options=\"\n\t\t\t\tselected:true,\n\t\t\t\ttools:[{\n\t\t\t\t\ticonCls:'icon-reload',\n\t\t\t\t\thandler:function(){\n\t\t\t\t\t\t$('#dg').datagrid('reload');\n\t\t\t\t\t}\n\t\t\t\t}]\">\n\t\t\t<table id=\"dg\" class=\"easyui-datagrid\" \n\t\t\t\t\tdata-options=\"url:'datagrid_data1.json',method:'get',fit:true,fitColumns:true,singleSelect:true\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t\t\t<th data-options=\"field:'productid',width:100\">Product ID</th>\n\t\t\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right'\">List Price</th>\n\t\t\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t\t\t<th data-options=\"field:'attr1',width:150\">Attribute</th>\n\t\t\t\t\t\t<th data-options=\"field:'status',width:50,align:'center'\">Status</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t</table>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/calendar/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Calendar - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Calendar</h2>\n\t<p>Click to select date.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-calendar\" style=\"width:250px;height:250px;\"></div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/calendar/custom.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom Calendar - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom Calendar</h2>\n\t<p>This example shows how to custom the calendar date by using 'formatter' function.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t\n\t<div class=\"easyui-calendar\" style=\"width:250px;height:250px;\" data-options=\"formatter:formatDay\"></div>\n\t\t\t\n\t<script>\n\t\tvar d1 = Math.floor((Math.random()*30)+1);\n\t\tvar d2 = Math.floor((Math.random()*30)+1);\n\t\tfunction formatDay(date){\n\t\t\tvar m = date.getMonth()+1;\n\t\t\tvar d = date.getDate();\n\t\t\tvar opts = $(this).calendar('options');\n\t\t\tif (opts.month == m && d == d1){\n\t\t\t\treturn '<div class=\"icon-ok md\">' + d + '</div>';\n\t\t\t} else if (opts.month == m && d == d2){\n\t\t\t\treturn '<div class=\"icon-search md\">' + d + '</div>';\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t</script>\n\t<style scoped=\"scoped\">\n\t\t.md{\n\t\t\theight:16px;\n\t\t\tline-height:16px;\n\t\t\tbackground-position:2px center;\n\t\t\ttext-align:right;\n\t\t\tfont-weight:bold;\n\t\t\tpadding:0 2px;\n\t\t\tcolor:red;\n\t\t}\n\t</style>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/calendar/disabledate.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Disable Calendar Date - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Disable Calendar Date</h2>\n\t<p>This example shows how to disable specified dates, only allows the user to select Mondays.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t\n\t<div class=\"easyui-calendar\" style=\"width:250px;height:250px;\" data-options=\"\n\t\t\tvalidator: function(date){\n\t\t\t\tif (date.getDay() == 1){\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\"></div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/calendar/firstday.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>First Day of Week - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>First Day of Week</h2>\n\t<p>Choose the first day of the week.</p>\n\t\n\t<div style=\"margin:20px 0\">\n\t\t<select onchange=\"$('#cc').calendar({firstDay:this.value})\">\n\t\t\t<option value=\"0\">Sunday</option>\n\t\t\t<option value=\"1\">Monday</option>\n\t\t\t<option value=\"2\">Tuesday</option>\n\t\t\t<option value=\"3\">Wednesday</option>\n\t\t\t<option value=\"4\">Thursday</option>\n\t\t\t<option value=\"5\">Friday</option>\n\t\t\t<option value=\"6\">Saturday</option>\n\t\t</select>\n\t</div>\n\t\n\t<div id=\"cc\" class=\"easyui-calendar\" style=\"width:250px;height:250px;\"></div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/calendar/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid Calendar - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid Calendar</h2>\n\t<p>This example shows how to set the width of calendar to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:700px;padding:10px\">\n\t\t<p>width: 50%, height: 250px</p>\n\t\t<div class=\"easyui-calendar\" style=\"width:50%;height:250px;\"></div>\n\t\t<p>width: 30%, height: 40%</p>\n\t\t<div class=\"easyui-calendar\" style=\"width:30%;height:40%;\"></div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/calendar/weeknumber.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Week Number on Calendar - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Week Number on Calendar</h2>\n\t<p>This example shows how to display the week number on calendar.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-calendar\" showWeek=\"true\" weekNumberHeader=\"Wk\" style=\"width:250px;height:250px;\"></div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/checkbox/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic CheckBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic CheckBox</h2>\n\t<form id=\"ff\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-checkbox\" name=\"fruit\" value=\"Apple\" label=\"Apple:\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-checkbox\" name=\"fruit\" value=\"Orange\" label=\"Orange:\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-checkbox\" name=\"fruit\" value=\"Banana\" label=\"Banana:\">\n\t\t</div>\n\t</form>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combo/animation.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Combo Animation - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Combo Animation</h2>\n\t<p>Change the animation type when open & close the drop-down panel.</p>\n\t<div style=\"margin:20px 0\">\n\t\t<span>Animation Type:</span>\n\t\t<select onchange=\"changeAnimation(this.value)\">\n\t\t\t<option>slide</option>\n\t\t\t<option>fade</option>\n\t\t\t<option>show</option>\n\t\t</select>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"cc\" label=\"Animation:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\t$(function(){\n\t\t\t$('#cc').combo();\n\t\t\tchangeAnimation('slide');\n\t\t});\n\t\tfunction changeAnimation(atype){\n\t\t\t$('#cc').combo('panel').panel({\n\t\t\t\topenAnimation:atype,\n\t\t\t\tcloseAnimation:(atype=='show'?'hide':atype)\n\t\t\t});\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combo/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Combo - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Combo</h2>\n\t<p>Click the right arrow button to show drop down panel that can be filled with any content.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"cc\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n\t<div id=\"sp\">\n\t\t<div style=\"line-height:22px;background:#fafafa;padding:5px;\">Select a language</div>\n\t\t<div style=\"padding:10px\">\n\t\t\t<input type=\"radio\" name=\"lang\" value=\"01\"><span>Java</span><br/>\n\t\t\t<input type=\"radio\" name=\"lang\" value=\"02\"><span>C#</span><br/>\n\t\t\t<input type=\"radio\" name=\"lang\" value=\"03\"><span>Ruby</span><br/>\n\t\t\t<input type=\"radio\" name=\"lang\" value=\"04\"><span>Basic</span><br/>\n\t\t\t<input type=\"radio\" name=\"lang\" value=\"05\"><span>Fortran</span>\n\t\t</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\t$(function(){\n\t\t\t$('#cc').combo({\n\t\t\t\trequired:true,\n\t\t\t\teditable:false,\n\t\t\t\tlabel:'Language:',\n\t\t\t\tlabelPosition:'top'\n\t\t\t});\n\t\t\t$('#sp').appendTo($('#cc').combo('panel'));\n\t\t\t$('#sp input').click(function(){\n\t\t\t\tvar v = $(this).val();\n\t\t\t\tvar s = $(this).next('span').text();\n\t\t\t\t$('#cc').combo('setValue', v).combo('setText', s).combo('hidePanel');\n\t\t\t});\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/actions.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>ComboBox Actions - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>ComboBox</h2>\n\t<p>Click the buttons below to perform actions.</p>\n\t\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"setvalue()\">SetValue</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"alert($('#state').combobox('getValue'))\">GetValue</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#state').combobox('disable')\">Disable</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#state').combobox('enable')\">Enable</a>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<select id=\"state\" class=\"easyui-combobox\" name=\"state\" label=\"State:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t\t\t<option value=\"AL\">Alabama</option>\n\t\t\t\t<option value=\"AK\">Alaska</option>\n\t\t\t\t<option value=\"AZ\">Arizona</option>\n\t\t\t\t<option value=\"AR\">Arkansas</option>\n\t\t\t\t<option value=\"CA\">California</option>\n\t\t\t\t<option value=\"CO\">Colorado</option>\n\t\t\t\t<option value=\"CT\">Connecticut</option>\n\t\t\t\t<option value=\"DE\">Delaware</option>\n\t\t\t\t<option value=\"FL\">Florida</option>\n\t\t\t\t<option value=\"GA\">Georgia</option>\n\t\t\t\t<option value=\"HI\">Hawaii</option>\n\t\t\t\t<option value=\"ID\">Idaho</option>\n\t\t\t\t<option value=\"IL\">Illinois</option>\n\t\t\t\t<option value=\"IN\">Indiana</option>\n\t\t\t\t<option value=\"IA\">Iowa</option>\n\t\t\t\t<option value=\"KS\">Kansas</option>\n\t\t\t\t<option value=\"KY\">Kentucky</option>\n\t\t\t\t<option value=\"LA\">Louisiana</option>\n\t\t\t\t<option value=\"ME\">Maine</option>\n\t\t\t\t<option value=\"MD\">Maryland</option>\n\t\t\t\t<option value=\"MA\">Massachusetts</option>\n\t\t\t\t<option value=\"MI\">Michigan</option>\n\t\t\t\t<option value=\"MN\">Minnesota</option>\n\t\t\t\t<option value=\"MS\">Mississippi</option>\n\t\t\t\t<option value=\"MO\">Missouri</option>\n\t\t\t\t<option value=\"MT\">Montana</option>\n\t\t\t\t<option value=\"NE\">Nebraska</option>\n\t\t\t\t<option value=\"NV\">Nevada</option>\n\t\t\t\t<option value=\"NH\">New Hampshire</option>\n\t\t\t\t<option value=\"NJ\">New Jersey</option>\n\t\t\t\t<option value=\"NM\">New Mexico</option>\n\t\t\t\t<option value=\"NY\">New York</option>\n\t\t\t\t<option value=\"NC\">North Carolina</option>\n\t\t\t\t<option value=\"ND\">North Dakota</option>\n\t\t\t\t<option value=\"OH\" selected>Ohio</option>\n\t\t\t\t<option value=\"OK\">Oklahoma</option>\n\t\t\t\t<option value=\"OR\">Oregon</option>\n\t\t\t\t<option value=\"PA\">Pennsylvania</option>\n\t\t\t\t<option value=\"RI\">Rhode Island</option>\n\t\t\t\t<option value=\"SC\">South Carolina</option>\n\t\t\t\t<option value=\"SD\">South Dakota</option>\n\t\t\t\t<option value=\"TN\">Tennessee</option>\n\t\t\t\t<option value=\"TX\">Texas</option>\n\t\t\t\t<option value=\"UT\">Utah</option>\n\t\t\t\t<option value=\"VT\">Vermont</option>\n\t\t\t\t<option value=\"VA\">Virginia</option>\n\t\t\t\t<option value=\"WA\">Washington</option>\n\t\t\t\t<option value=\"WV\">West Virginia</option>\n\t\t\t\t<option value=\"WI\">Wisconsin</option>\n\t\t\t\t<option value=\"WY\">Wyoming</option>\n\t\t\t</select>\n\t\t</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction setvalue(){\n\t\t\t$.messager.prompt('SetValue','Please input the value(CO,NV,UT,etc):',function(v){\n\t\t\t\tif (v){\n\t\t\t\t\t$('#state').combobox('setValue',v);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic ComboBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic ComboBox</h2>\n\t<p>Type in ComboBox to try auto complete.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<select class=\"easyui-combobox\" name=\"state\" label=\"State:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t\t\t<option value=\"AL\">Alabama</option>\n\t\t\t\t<option value=\"AK\">Alaska</option>\n\t\t\t\t<option value=\"AZ\">Arizona</option>\n\t\t\t\t<option value=\"AR\">Arkansas</option>\n\t\t\t\t<option value=\"CA\">California</option>\n\t\t\t\t<option value=\"CO\">Colorado</option>\n\t\t\t\t<option value=\"CT\">Connecticut</option>\n\t\t\t\t<option value=\"DE\">Delaware</option>\n\t\t\t\t<option value=\"FL\">Florida</option>\n\t\t\t\t<option value=\"GA\">Georgia</option>\n\t\t\t\t<option value=\"HI\">Hawaii</option>\n\t\t\t\t<option value=\"ID\">Idaho</option>\n\t\t\t\t<option value=\"IL\">Illinois</option>\n\t\t\t\t<option value=\"IN\">Indiana</option>\n\t\t\t\t<option value=\"IA\">Iowa</option>\n\t\t\t\t<option value=\"KS\">Kansas</option>\n\t\t\t\t<option value=\"KY\">Kentucky</option>\n\t\t\t\t<option value=\"LA\">Louisiana</option>\n\t\t\t\t<option value=\"ME\">Maine</option>\n\t\t\t\t<option value=\"MD\">Maryland</option>\n\t\t\t\t<option value=\"MA\">Massachusetts</option>\n\t\t\t\t<option value=\"MI\">Michigan</option>\n\t\t\t\t<option value=\"MN\">Minnesota</option>\n\t\t\t\t<option value=\"MS\">Mississippi</option>\n\t\t\t\t<option value=\"MO\">Missouri</option>\n\t\t\t\t<option value=\"MT\">Montana</option>\n\t\t\t\t<option value=\"NE\">Nebraska</option>\n\t\t\t\t<option value=\"NV\">Nevada</option>\n\t\t\t\t<option value=\"NH\">New Hampshire</option>\n\t\t\t\t<option value=\"NJ\">New Jersey</option>\n\t\t\t\t<option value=\"NM\">New Mexico</option>\n\t\t\t\t<option value=\"NY\">New York</option>\n\t\t\t\t<option value=\"NC\">North Carolina</option>\n\t\t\t\t<option value=\"ND\">North Dakota</option>\n\t\t\t\t<option value=\"OH\" selected>Ohio</option>\n\t\t\t\t<option value=\"OK\">Oklahoma</option>\n\t\t\t\t<option value=\"OR\">Oregon</option>\n\t\t\t\t<option value=\"PA\">Pennsylvania</option>\n\t\t\t\t<option value=\"RI\">Rhode Island</option>\n\t\t\t\t<option value=\"SC\">South Carolina</option>\n\t\t\t\t<option value=\"SD\">South Dakota</option>\n\t\t\t\t<option value=\"TN\">Tennessee</option>\n\t\t\t\t<option value=\"TX\">Texas</option>\n\t\t\t\t<option value=\"UT\">Utah</option>\n\t\t\t\t<option value=\"VT\">Vermont</option>\n\t\t\t\t<option value=\"VA\">Virginia</option>\n\t\t\t\t<option value=\"WA\">Washington</option>\n\t\t\t\t<option value=\"WV\">West Virginia</option>\n\t\t\t\t<option value=\"WI\">Wisconsin</option>\n\t\t\t\t<option value=\"WY\">Wyoming</option>\n\t\t\t</select>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/combobox_data1.json",
    "content": "[{\n\t\"id\":1,\n\t\"text\":\"Java\",\n\t\"desc\":\"Write once, run anywhere\"\n},{\n\t\"id\":2,\n\t\"text\":\"C#\",\n\t\"desc\":\"One of the programming languages designed for the Common Language Infrastructure\"\n},{\n\t\"id\":3,\n\t\"text\":\"Ruby\",\n\t\"selected\":true,\n\t\"desc\":\"A dynamic, reflective, general-purpose object-oriented programming language\"\n},{\n\t\"id\":4,\n\t\"text\":\"Perl\",\n\t\"desc\":\"A high-level, general-purpose, interpreted, dynamic programming language\"\n},{\n\t\"id\":5,\n\t\"text\":\"Basic\",\n\t\"desc\":\"A family of general-purpose, high-level programming languages\"\n}]"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/combobox_data2.json",
    "content": "[{\n\t\"value\":\"f20\",\n\t\"text\":\"Firefox 2.0 or higher\",\n\t\"group\":\"Firefox\"\n},{\n\t\"value\":\"f15\",\n\t\"text\":\"Firefox 1.5.x\",\n\t\"group\":\"Firefox\"\n},{\n\t\"value\":\"f10\",\n\t\"text\":\"Firefox 1.0.x\",\n\t\"group\":\"Firefox\"\n},{\n\t\"value\":\"ie7\",\n\t\"text\":\"Microsoft Internet Explorer 7.0 or higher\",\n\t\"group\":\"Microsoft Internet Explorer\"\n},{\n\t\"value\":\"ie6\",\n\t\"text\":\"Microsoft Internet Explorer 6.x\",\n\t\"group\":\"Microsoft Internet Explorer\"\n},{\n\t\"value\":\"ie5\",\n\t\"text\":\"Microsoft Internet Explorer 5.x\",\n\t\"group\":\"Microsoft Internet Explorer\"\n},{\n\t\"value\":\"ie4\",\n\t\"text\":\"Microsoft Internet Explorer 4.x\",\n\t\"group\":\"Microsoft Internet Explorer\"\n},{\n\t\"value\":\"op9\",\n\t\"text\":\"Opera 9.0 or higher\",\n\t\"group\":\"Opera\"\n},{\n\t\"value\":\"op8\",\n\t\"text\":\"Opera 8.x\",\n\t\"group\":\"Opera\"\n},{\n\t\"value\":\"op7\",\n\t\"text\":\"Opera 7.x\",\n\t\"group\":\"Opera\"\n},{\n\t\"value\":\"Safari\",\n\t\"text\":\"Safari\"\n},{\n\t\"value\":\"Other\",\n\t\"text\":\"Other\"\n}]"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/customformat.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom Format in ComboBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom Format in ComboBox</h2>\n\t<p>This sample shows how to custom the format of list item.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combobox\" name=\"language\" style=\"width:100%;\" data-options=\"\n\t\t\t\t\turl: 'combobox_data1.json',\n\t\t\t\t\tmethod: 'get',\n\t\t\t\t\tvalueField: 'id',\n\t\t\t\t\ttextField: 'text',\n\t\t\t\t\tpanelWidth: 350,\n\t\t\t\t\tpanelHeight: 'auto',\n\t\t\t\t\tformatter: formatItem,\n\t\t\t\t\tlabel: 'Language:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\t\">\n\t\t</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction formatItem(row){\n\t\t\tvar s = '<span style=\"font-weight:bold\">' + row.text + '</span><br/>' +\n\t\t\t\t\t'<span style=\"color:#888\">' + row.desc + '</span>';\n\t\t\treturn s;\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/dynamicdata.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Load Dynamic ComboBox Data - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Load Dynamic ComboBox Data</h2>\n\t<p>Click the button below to load data.</p>\n\t\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#language').combobox('reload', 'combobox_data1.json')\">LoadData</a>\n\t</div>\n\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"language\" class=\"easyui-combobox\" name=\"language\" style=\"width:100%;\" data-options=\"\n\t\t\t\t\tvalueField: 'id',\n\t\t\t\t\ttextField: 'text',\n\t\t\t\t\tlabel: 'Language:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\t\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid ComboBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid ComboBox</h2>\n\t<p>This example shows how to set the width of combobox to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combobox\" name=\"language\" style=\"width:100%;\"\n\t\t\t\t\tdata-options=\"\n\t\t\t\t\t\turl: 'combobox_data2.json',\n\t\t\t\t\t\tmethod: 'get',\n\t\t\t\t\t\tvalueField:'value',\n\t\t\t\t\t\ttextField:'text',\n\t\t\t\t\t\tgroupField:'group',\n\t\t\t\t\t\tlabel: 'width: 100%',\n\t\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\t\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combobox\" name=\"language\" style=\"width:50%;\"\n\t\t\t\t\tdata-options=\"\n\t\t\t\t\t\turl: 'combobox_data2.json',\n\t\t\t\t\t\tmethod: 'get',\n\t\t\t\t\t\tvalueField:'value',\n\t\t\t\t\t\ttextField:'text',\n\t\t\t\t\t\tgroupField:'group',\n\t\t\t\t\t\tlabel: 'width: 50%',\n\t\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\t\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/group.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Group ComboBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Group ComboBox</h2>\n\t<p>This example shows how to display combobox items in groups.</p>\n\t<div style=\"margin:20px 0\">\n\t\t<input type=\"checkbox\" onchange=\"$('#cc').combobox({groupPosition:$(this).is(':checked')?'sticky':'static'})\">\n\t\t<span>Sticky Group</span>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"cc\" class=\"easyui-combobox\" name=\"browser\" style=\"width:100%;\" data-options=\"\n\t\t\t\t\turl: 'combobox_data2.json',\n\t\t\t\t\tmethod: 'get',\n\t\t\t\t\tvalueField:'value',\n\t\t\t\t\ttextField:'text',\n\t\t\t\t\tgroupField:'group',\n\t\t\t\t\tlabel: 'Browser:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\t\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/icons.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>ComboBox with Extra Icons- jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>ComboBox with Extra Icons</h2>\n\t<p>The user can attach extra icons to the ComboBox.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combobox\" name=\"language\" style=\"width:100%;\" data-options=\"\n\t\t\t\t\turl:'combobox_data1.json',\n\t\t\t\t\tmethod:'get',\n\t\t\t\t\tvalueField:'id',\n\t\t\t\t\ttextField:'text',\n\t\t\t\t\tpanelHeight:'auto',\n\t\t\t\t\ticonWidth:22,\n\t\t\t\t\ticons:[{\n\t\t\t\t\t\ticonCls:'icon-add'\n\t\t\t\t\t},{\n\t\t\t\t\t\ticonCls:'icon-cut'\n\t\t\t\t\t}],\n\t\t\t\t\tlabel: 'Language:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\t\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/itemicon.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Show Item Icon in ComboBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Show Item Icon in ComboBox</h2>\n\t<p>This example shows how to display item icon in ComboBox.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combobox\" style=\"width:100%;\" data-options=\"\n\t\t\t\t\tshowItemIcon: true,\n\t\t\t\t\tdata: [\n\t\t\t\t\t\t{value:'add',text:'Add',iconCls:'icon-add'},\n\t\t\t\t\t\t{value:'del',text:'Delete',iconCls:'icon-remove'},\n\t\t\t\t\t\t{value:'save',text:'Save',iconCls:'icon-save',selected:true},\n\t\t\t\t\t\t{value:'cancel',text:'Cancel',iconCls:'icon-cancel'},\n\t\t\t\t\t\t{value:'undo',text:'Undo',iconCls:'icon-undo'},\n\t\t\t\t\t\t{value:'redo',text:'Redo',iconCls:'icon-redo'}\n\t\t\t\t\t],\n\t\t\t\t\teditable: false,\n\t\t\t\t\tpanelHeight: 'auto',\n\t\t\t\t\tlabel: 'Perform Action:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\t\">\n\t\t</div>\n\t</div>\n</body>\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/multiline.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Multiline ComboBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Multiline ComboBox</h2>\n\t<p>This example shows how to create a multiline ComboBox.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<select class=\"easyui-combobox\" name=\"state\" multiple=\"true\" multiline=\"true\" label=\"Select States:\" labelPosition=\"top\" style=\"width:100%;height:100px;\">\n\t\t\t\t<option value=\"AL\">Alabama</option>\n\t\t\t\t<option value=\"AK\">Alaska</option>\n\t\t\t\t<option value=\"AZ\">Arizona</option>\n\t\t\t\t<option value=\"AR\">Arkansas</option>\n\t\t\t\t<option value=\"CA\">California</option>\n\t\t\t\t<option value=\"CO\">Colorado</option>\n\t\t\t\t<option value=\"CT\" selected>Connecticut</option>\n\t\t\t\t<option value=\"DE\">Delaware</option>\n\t\t\t\t<option value=\"FL\">Florida</option>\n\t\t\t\t<option value=\"GA\">Georgia</option>\n\t\t\t\t<option value=\"HI\">Hawaii</option>\n\t\t\t\t<option value=\"ID\">Idaho</option>\n\t\t\t\t<option value=\"IL\">Illinois</option>\n\t\t\t\t<option value=\"IN\">Indiana</option>\n\t\t\t\t<option value=\"IA\">Iowa</option>\n\t\t\t\t<option value=\"KS\">Kansas</option>\n\t\t\t\t<option value=\"KY\">Kentucky</option>\n\t\t\t\t<option value=\"LA\" selected>Louisiana</option>\n\t\t\t\t<option value=\"ME\">Maine</option>\n\t\t\t\t<option value=\"MD\">Maryland</option>\n\t\t\t\t<option value=\"MA\" selected>Massachusetts</option>\n\t\t\t\t<option value=\"MI\">Michigan</option>\n\t\t\t\t<option value=\"MN\">Minnesota</option>\n\t\t\t\t<option value=\"MS\">Mississippi</option>\n\t\t\t\t<option value=\"MO\">Missouri</option>\n\t\t\t\t<option value=\"MT\">Montana</option>\n\t\t\t\t<option value=\"NE\">Nebraska</option>\n\t\t\t\t<option value=\"NV\">Nevada</option>\n\t\t\t\t<option value=\"NH\">New Hampshire</option>\n\t\t\t\t<option value=\"NJ\">New Jersey</option>\n\t\t\t\t<option value=\"NM\">New Mexico</option>\n\t\t\t\t<option value=\"NY\">New York</option>\n\t\t\t\t<option value=\"NC\">North Carolina</option>\n\t\t\t\t<option value=\"ND\">North Dakota</option>\n\t\t\t\t<option value=\"OH\" selected>Ohio</option>\n\t\t\t\t<option value=\"OK\">Oklahoma</option>\n\t\t\t\t<option value=\"OR\" selected>Oregon</option>\n\t\t\t\t<option value=\"PA\">Pennsylvania</option>\n\t\t\t\t<option value=\"RI\">Rhode Island</option>\n\t\t\t\t<option value=\"SC\">South Carolina</option>\n\t\t\t\t<option value=\"SD\">South Dakota</option>\n\t\t\t\t<option value=\"TN\">Tennessee</option>\n\t\t\t\t<option value=\"TX\">Texas</option>\n\t\t\t\t<option value=\"UT\">Utah</option>\n\t\t\t\t<option value=\"VT\">Vermont</option>\n\t\t\t\t<option value=\"VA\">Virginia</option>\n\t\t\t\t<option value=\"WA\">Washington</option>\n\t\t\t\t<option value=\"WV\">West Virginia</option>\n\t\t\t\t<option value=\"WI\">Wisconsin</option>\n\t\t\t\t<option value=\"WY\">Wyoming</option>\n\t\t\t</select>\n\t\t</div>\n\t</div>\n\t\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/multiple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Multiple Select - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Load Dynamic ComboBox Data</h2>\n\t<p>Drop down the panel and select multiple items.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combobox\" name=\"language[]\" style=\"width:100%;\" data-options=\"\n\t\t\t\t\turl:'combobox_data1.json',\n\t\t\t\t\tmethod:'get',\n\t\t\t\t\tvalueField:'id',\n\t\t\t\t\ttextField:'text',\n\t\t\t\t\tvalue:[1,3],\n\t\t\t\t\tmultiple:true,\n\t\t\t\t\tpanelHeight:'auto',\n\t\t\t\t\tlabel: 'Language:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\t\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/navigation.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Navigate ComboBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Navigate ComboBox</h2>\n\t<p>Navigate through combobox items width keyboard to select an item.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<input type=\"checkbox\" checked onchange=\"$('#cc').combobox({selectOnNavigation:$(this).is(':checked')})\">\n\t\t<span>SelectOnNavigation</span>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<select id=\"cc\" class=\"easyui-combobox\" name=\"state\" label=\"State:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t\t\t<option value=\"AL\">Alabama</option>\n\t\t\t\t<option value=\"AK\">Alaska</option>\n\t\t\t\t<option value=\"AZ\">Arizona</option>\n\t\t\t\t<option value=\"AR\">Arkansas</option>\n\t\t\t\t<option value=\"CA\">California</option>\n\t\t\t\t<option value=\"CO\">Colorado</option>\n\t\t\t\t<option value=\"CT\">Connecticut</option>\n\t\t\t\t<option value=\"DE\">Delaware</option>\n\t\t\t\t<option value=\"FL\">Florida</option>\n\t\t\t\t<option value=\"GA\">Georgia</option>\n\t\t\t\t<option value=\"HI\">Hawaii</option>\n\t\t\t\t<option value=\"ID\">Idaho</option>\n\t\t\t\t<option value=\"IL\">Illinois</option>\n\t\t\t\t<option value=\"IN\">Indiana</option>\n\t\t\t\t<option value=\"IA\">Iowa</option>\n\t\t\t\t<option value=\"KS\">Kansas</option>\n\t\t\t\t<option value=\"KY\">Kentucky</option>\n\t\t\t\t<option value=\"LA\">Louisiana</option>\n\t\t\t\t<option value=\"ME\">Maine</option>\n\t\t\t\t<option value=\"MD\">Maryland</option>\n\t\t\t\t<option value=\"MA\">Massachusetts</option>\n\t\t\t\t<option value=\"MI\">Michigan</option>\n\t\t\t\t<option value=\"MN\">Minnesota</option>\n\t\t\t\t<option value=\"MS\">Mississippi</option>\n\t\t\t\t<option value=\"MO\">Missouri</option>\n\t\t\t\t<option value=\"MT\">Montana</option>\n\t\t\t\t<option value=\"NE\">Nebraska</option>\n\t\t\t\t<option value=\"NV\">Nevada</option>\n\t\t\t\t<option value=\"NH\">New Hampshire</option>\n\t\t\t\t<option value=\"NJ\">New Jersey</option>\n\t\t\t\t<option value=\"NM\">New Mexico</option>\n\t\t\t\t<option value=\"NY\">New York</option>\n\t\t\t\t<option value=\"NC\">North Carolina</option>\n\t\t\t\t<option value=\"ND\">North Dakota</option>\n\t\t\t\t<option value=\"OK\">Oklahoma</option>\n\t\t\t\t<option value=\"OR\">Oregon</option>\n\t\t\t\t<option value=\"PA\">Pennsylvania</option>\n\t\t\t\t<option value=\"RI\">Rhode Island</option>\n\t\t\t\t<option value=\"SC\">South Carolina</option>\n\t\t\t\t<option value=\"SD\">South Dakota</option>\n\t\t\t\t<option value=\"TN\">Tennessee</option>\n\t\t\t\t<option value=\"TX\">Texas</option>\n\t\t\t\t<option value=\"UT\">Utah</option>\n\t\t\t\t<option value=\"VT\">Vermont</option>\n\t\t\t\t<option value=\"VA\">Virginia</option>\n\t\t\t\t<option value=\"WA\">Washington</option>\n\t\t\t\t<option value=\"WV\">West Virginia</option>\n\t\t\t\t<option value=\"WI\">Wisconsin</option>\n\t\t\t\t<option value=\"WY\">Wyoming</option>\n\t\t\t</select>\n\t\t</div>\n\t</div>\n\t\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/remotedata.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Binding to Remote Data - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Binding to Remote Data</h2>\n\t<p>The ComboBox is bound to a remote data.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combobox\" name=\"language\" style=\"width:100%;\" data-options=\"\n\t\t\t\t\turl:'combobox_data1.json',\n\t\t\t\t\tmethod:'get',\n\t\t\t\t\tvalueField:'id',\n\t\t\t\t\ttextField:'text',\n\t\t\t\t\tpanelHeight:'auto',\n\t\t\t\t\tlabel: 'Language:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\t\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combobox/remotejsonp.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Remote JSONP - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Remote JSONP</h2>\n\t<p>This sample shows how to use JSONP to retrieve data from a remote site.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combobox\" style=\"width:100%;\" data-options=\"\n\t\t\t\t\tloader: myloader,\n\t\t\t\t\tmode: 'remote',\n\t\t\t\t\tvalueField: 'id',\n\t\t\t\t\ttextField: 'name',\n\t\t\t\t\tlabel: 'State:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\t\">\n\t\t</div>\n\t</div>\n\t<script>\n\t\tvar myloader = function(param,success,error){\n\t\t\tvar q = param.q || '';\n\t\t\tif (q.length <= 2){return false}\n\t\t\t$.ajax({\n\t\t\t\turl: 'https://gd.geobytes.com/AutoCompleteCity',\n\t\t\t\tdataType: 'jsonp',\n                data: {\n                    q: q\n                },\n\t\t\t\tsuccess: function(data){\n\t\t\t\t\tvar items = $.map(data, function(item,index){\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid: index,\n\t\t\t\t\t\t\tname: item\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t\tsuccess(items);\n\t\t\t\t},\n                error: function(){\n\t\t\t\t\terror.apply(this, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combogrid/actions.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>ComboGrid Actions - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>ComboGrid Actions</h2>\n\t<p>Click the buttons below to perform actions.</p>\n\t<div style=\"margin:20px 0\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"getValue()\">GetValue</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"setValue()\">SetValue</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"disable()\">Disable</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"enable()\">Enable</a>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"cc\" class=\"easyui-combogrid\" style=\"width:100%\" data-options=\"\n\t\t\t\t\tpanelWidth: 500,\n\t\t\t\t\tidField: 'itemid',\n\t\t\t\t\ttextField: 'productname',\n\t\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\t\tmethod: 'get',\n\t\t\t\t\tcolumns: [[\n\t\t\t\t\t\t{field:'itemid',title:'Item ID',width:80},\n\t\t\t\t\t\t{field:'productname',title:'Product',width:120},\n\t\t\t\t\t\t{field:'listprice',title:'List Price',width:80,align:'right'},\n\t\t\t\t\t\t{field:'unitcost',title:'Unit Cost',width:80,align:'right'},\n\t\t\t\t\t\t{field:'attr1',title:'Attribute',width:200},\n\t\t\t\t\t\t{field:'status',title:'Status',width:60,align:'center'}\n\t\t\t\t\t]],\n\t\t\t\t\tfitColumns: true,\n\t\t\t\t\tlabel: 'Select Item:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\">\n\t\t</div>\n\t</div>\n\n\t<script type=\"text/javascript\">\n\t\tfunction getValue(){\n\t\t\tvar val = $('#cc').combogrid('getValue');\n\t\t\talert(val);\n\t\t}\n\t\tfunction setValue(){\n\t\t\t$('#cc').combogrid('setValue', 'EST-13');\n\t\t}\n\t\tfunction disable(){\n\t\t\t$('#cc').combogrid('disable');\n\t\t}\n\t\tfunction enable(){\n\t\t\t$('#cc').combogrid('enable');\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combogrid/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic ComboGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic ComboGrid</h2>\n\t<p>Click the right arrow button to show the DataGrid.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<select class=\"easyui-combogrid\" style=\"width:100%\" data-options=\"\n\t\t\t\t\tpanelWidth: 500,\n\t\t\t\t\tidField: 'itemid',\n\t\t\t\t\ttextField: 'productname',\n\t\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\t\tmethod: 'get',\n\t\t\t\t\tcolumns: [[\n\t\t\t\t\t\t{field:'itemid',title:'Item ID',width:80},\n\t\t\t\t\t\t{field:'productname',title:'Product',width:120},\n\t\t\t\t\t\t{field:'listprice',title:'List Price',width:80,align:'right'},\n\t\t\t\t\t\t{field:'unitcost',title:'Unit Cost',width:80,align:'right'},\n\t\t\t\t\t\t{field:'attr1',title:'Attribute',width:200},\n\t\t\t\t\t\t{field:'status',title:'Status',width:60,align:'center'}\n\t\t\t\t\t]],\n\t\t\t\t\tfitColumns: true,\n\t\t\t\t\tlabel: 'Select Item:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\">\n\t\t\t</select>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combogrid/datagrid_data1.json",
    "content": "{\"total\":28,\"rows\":[\n\t{\"productid\":\"FI-SW-01\",\"productname\":\"Koi\",\"unitcost\":10.00,\"status\":\"P\",\"listprice\":36.50,\"attr1\":\"Large\",\"itemid\":\"EST-1\"},\n\t{\"productid\":\"K9-DL-01\",\"productname\":\"Dalmation\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":18.50,\"attr1\":\"Spotted Adult Female\",\"itemid\":\"EST-10\"},\n\t{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":38.50,\"attr1\":\"Venomless\",\"itemid\":\"EST-11\"},\n\t{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":26.50,\"attr1\":\"Rattleless\",\"itemid\":\"EST-12\"},\n\t{\"selected\":true,\"productid\":\"RP-LI-02\",\"productname\":\"Iguana\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":35.50,\"attr1\":\"Green Adult\",\"itemid\":\"EST-13\"},\n\t{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":158.50,\"attr1\":\"Tailless\",\"itemid\":\"EST-14\"},\n\t{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":83.50,\"attr1\":\"With tail\",\"itemid\":\"EST-15\"},\n\t{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":23.50,\"attr1\":\"Adult Female\",\"itemid\":\"EST-16\"},\n\t{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":89.50,\"attr1\":\"Adult Male\",\"itemid\":\"EST-17\"},\n\t{\"productid\":\"AV-CB-01\",\"productname\":\"Amazon Parrot\",\"unitcost\":92.00,\"status\":\"P\",\"listprice\":63.50,\"attr1\":\"Adult Male\",\"itemid\":\"EST-18\"}\n]}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combogrid/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid ComboGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid ComboGrid</h2>\n\t<p>This example shows how to set the width of ComboGrid to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<select class=\"easyui-combogrid\" style=\"width:100%\" data-options=\"\n\t\t\t\t\tpanelWidth: 500,\n\t\t\t\t\tpanelMinWidth: '50%',\n\t\t\t\t\tidField: 'itemid',\n\t\t\t\t\ttextField: 'productname',\n\t\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\t\tmethod: 'get',\n\t\t\t\t\tcolumns: [[\n\t\t\t\t\t\t{field:'itemid',title:'Item ID',width:80},\n\t\t\t\t\t\t{field:'productname',title:'Product',width:120},\n\t\t\t\t\t\t{field:'listprice',title:'List Price',width:80,align:'right'},\n\t\t\t\t\t\t{field:'unitcost',title:'Unit Cost',width:80,align:'right'},\n\t\t\t\t\t\t{field:'attr1',title:'Attribute',width:200},\n\t\t\t\t\t\t{field:'status',title:'Status',width:60,align:'center'}\n\t\t\t\t\t]],\n\t\t\t\t\tfitColumns: true,\n\t\t\t\t\tlabel: 'width: 100%',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\">\n\t\t\t</select>\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<select class=\"easyui-combogrid\" style=\"width:50%\" data-options=\"\n\t\t\t\t\tpanelWidth: 500,\n\t\t\t\t\tpanelMinWidth: '50%',\n\t\t\t\t\tidField: 'itemid',\n\t\t\t\t\ttextField: 'productname',\n\t\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\t\tmethod: 'get',\n\t\t\t\t\tcolumns: [[\n\t\t\t\t\t\t{field:'itemid',title:'Item ID',width:80},\n\t\t\t\t\t\t{field:'productname',title:'Product',width:120},\n\t\t\t\t\t\t{field:'listprice',title:'List Price',width:80,align:'right'},\n\t\t\t\t\t\t{field:'unitcost',title:'Unit Cost',width:80,align:'right'},\n\t\t\t\t\t\t{field:'attr1',title:'Attribute',width:200},\n\t\t\t\t\t\t{field:'status',title:'Status',width:60,align:'center'}\n\t\t\t\t\t]],\n\t\t\t\t\tfitColumns: true,\n\t\t\t\t\tlabel: 'width: 50%',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\">\n\t\t\t</select>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combogrid/initvalue.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Initialize Value for ComboGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Initialize Value for ComboGrid</h2>\n\t<p>Initialize value when ComboGrid is created.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<select class=\"easyui-combogrid\" style=\"width:100%\" data-options=\"\n\t\t\t\t\tpanelWidth: 500,\n\t\t\t\t\tidField: 'itemid',\n\t\t\t\t\ttextField: 'productname',\n\t\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\t\tmethod: 'get',\n\t\t\t\t\tvalue: 'EST-12',\n\t\t\t\t\tcolumns: [[\n\t\t\t\t\t\t{field:'itemid',title:'Item ID',width:80},\n\t\t\t\t\t\t{field:'productname',title:'Product',width:120},\n\t\t\t\t\t\t{field:'listprice',title:'List Price',width:80,align:'right'},\n\t\t\t\t\t\t{field:'unitcost',title:'Unit Cost',width:80,align:'right'},\n\t\t\t\t\t\t{field:'attr1',title:'Attribute',width:200},\n\t\t\t\t\t\t{field:'status',title:'Status',width:60,align:'center'}\n\t\t\t\t\t]],\n\t\t\t\t\tfitColumns: true,\n\t\t\t\t\tlabel: 'Select Item:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\">\n\t\t\t</select>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combogrid/multiple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Multiple ComboGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Multiple ComboGrid</h2>\n\t<p>Click the right arrow button to show the DataGrid and select items.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<select class=\"easyui-combogrid\" style=\"width:100%\" data-options=\"\n\t\t\t\t\tpanelWidth: 500,\n\t\t\t\t\tmultiple: true,\n\t\t\t\t\tidField: 'itemid',\n\t\t\t\t\ttextField: 'productname',\n\t\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\t\tmethod: 'get',\n\t\t\t\t\tvalue: ['EST-11','EST-13'],\n\t\t\t\t\tcolumns: [[\n\t\t\t\t\t\t{field:'itemid',title:'Item ID',width:80},\n\t\t\t\t\t\t{field:'productname',title:'Product',width:120},\n\t\t\t\t\t\t{field:'listprice',title:'List Price',width:80,align:'right'},\n\t\t\t\t\t\t{field:'unitcost',title:'Unit Cost',width:80,align:'right'},\n\t\t\t\t\t\t{field:'attr1',title:'Attribute',width:200},\n\t\t\t\t\t\t{field:'status',title:'Status',width:60,align:'center'}\n\t\t\t\t\t]],\n\t\t\t\t\tfitColumns: true,\n\t\t\t\t\tlabel: 'Select Items:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\">\n\t\t\t</select>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combogrid/navigation.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Navigate ComboGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Navigate ComboGrid</h2>\n\t<p>Navigate through grid items with keyboard to select an item.</p>\n\t<div style=\"margin:20px 0\">\n\t\t<input type=\"checkbox\" checked onchange=\"$('#cc').combogrid({selectOnNavigation:$(this).is(':checked')})\">\n\t\t<span>SelectOnNavigation</span>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<select id=\"cc\" class=\"easyui-combogrid\" style=\"width:100%\" data-options=\"\n\t\t\t\t\tpanelWidth: 500,\n\t\t\t\t\tidField: 'itemid',\n\t\t\t\t\ttextField: 'productname',\n\t\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\t\tmethod: 'get',\n\t\t\t\t\tcolumns: [[\n\t\t\t\t\t\t{field:'itemid',title:'Item ID',width:80},\n\t\t\t\t\t\t{field:'productname',title:'Product',width:120},\n\t\t\t\t\t\t{field:'listprice',title:'List Price',width:80,align:'right'},\n\t\t\t\t\t\t{field:'unitcost',title:'Unit Cost',width:80,align:'right'},\n\t\t\t\t\t\t{field:'attr1',title:'Attribute',width:200},\n\t\t\t\t\t\t{field:'status',title:'Status',width:60,align:'center'}\n\t\t\t\t\t]],\n\t\t\t\t\tfitColumns: true,\n\t\t\t\t\tlabel: 'Select Item:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\">\n\t\t\t</select>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combogrid/setvalue.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Set Value for ComboGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Set Value for ComboGrid</h2>\n\t<p>Click the buttons below to perform actions.</p>\n\t<div style=\"margin:20px 0\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"getValue()\">GetValue</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"setValue1()\">SetValue1</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"setValue2()\">SetValue2</a>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<select id=\"cc\" class=\"easyui-combogrid\" style=\"width:100%\" data-options=\"\n\t\t\t\t\tpanelWidth: 500,\n\t\t\t\t\tidField: 'itemid',\n\t\t\t\t\ttextField: 'productname',\n\t\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\t\tmethod: 'get',\n\t\t\t\t\tcolumns: [[\n\t\t\t\t\t\t{field:'itemid',title:'Item ID',width:80},\n\t\t\t\t\t\t{field:'productname',title:'Product',width:120},\n\t\t\t\t\t\t{field:'listprice',title:'List Price',width:80,align:'right'},\n\t\t\t\t\t\t{field:'unitcost',title:'Unit Cost',width:80,align:'right'},\n\t\t\t\t\t\t{field:'attr1',title:'Attribute',width:200},\n\t\t\t\t\t\t{field:'status',title:'Status',width:60,align:'center'}\n\t\t\t\t\t]],\n\t\t\t\t\tfitColumns: true,\n\t\t\t\t\tlabel: 'Select Item:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\">\n\t\t\t</select>\n\t\t</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction getValue(){\n\t\t\tvar val = $('#cc').combogrid('getValue');\n\t\t\talert(val);\n\t\t}\n\t\tfunction setValue1(){\n\t\t\t$('#cc').combogrid('setValue', 'EST-13');\n\t\t}\n\t\tfunction setValue2(){\n\t\t\t$('#cc').combogrid('setValue', {\n\t\t\t\titemid: 'customid',\n\t\t\t\tproductname: 'CustomName'\n\t\t\t});\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combotree/actions.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>ComboTree Actions - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>ComboTree Actions</h2>\n\t<p>Click the buttons below to perform actions</p>\n\t<div style=\"margin:20px 0\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"getValue()\">GetValue</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"setValue()\">SetValue</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"disable()\">Disable</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"enable()\">Enable</a>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"cc\" class=\"easyui-combotree\" data-options=\"url:'tree_data1.json',method:'get',label:'Select Node:',labelPosition:'top'\" style=\"width:100%\">\n\t\t</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction getValue(){\n\t\t\tvar val = $('#cc').combotree('getValue');\n\t\t\talert(val);\n\t\t}\n\t\tfunction setValue(){\n\t\t\t$('#cc').combotree('setValue', '122');\n\t\t}\n\t\tfunction disable(){\n\t\t\t$('#cc').combotree('disable');\n\t\t}\n\t\tfunction enable(){\n\t\t\t$('#cc').combotree('enable');\n\t\t}\n\t</script>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combotree/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic ComboTree - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic ComboTree</h2>\n\t<p>Click the right arrow button to show the tree panel.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combotree\" data-options=\"url:'tree_data1.json',method:'get',label:'Select Node:',labelPosition:'top'\" style=\"width:100%\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combotree/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid ComboTree - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid ComboTree</h2>\n\t<p>This example shows how to set the width of ComboTree to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combotree\" data-options=\"url:'tree_data1.json',method:'get',label:'width: 100%',labelPosition:'top'\" style=\"width:100%\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combotree\" data-options=\"url:'tree_data1.json',method:'get',label:'width: 80%',labelPosition:'top'\" style=\"width:80%\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combotree/initvalue.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Initialize Value for ComboTree - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Initialize Value for ComboTree</h2>\n\t<p>Initialize Value when ComboTree is created.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combotree\" value=\"122\" data-options=\"url:'tree_data1.json',method:'get',label:'Select Node:',labelPosition:'top'\" style=\"width:100%\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combotree/multiple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Multiple ComboTree - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Multiple ComboTree</h2>\n\t<p>Click the right arrow button to show the tree panel and select multiple nodes.</p>\n\t<div style=\"margin:20px 0\">\n\t\t<span>Cascade Check: </span>\n\t\t<input type=\"checkbox\" checked onclick=\"$('#cc').combotree({cascadeCheck:$(this).is(':checked')})\">\n\t</div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"cc\" class=\"easyui-combotree\" data-options=\"url:'tree_data1.json',method:'get',label:'Select Nodes:',labelPosition:'top',multiple:true,value:[122,124]\" style=\"width:100%\">\n\t\t</div>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combotree/test.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic ComboTree - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../source/jquery.textbox.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../source/jquery.combo.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../source/jquery.combotree.js\"></script>\n\t<script type=\"text/javascript\">\n\t\t$(function(){\n\t\t\t$('#ct').combotree({\n\t\t\t\tonLoadSuccess: function(node,data){\n\t\t\t\t\tconsole.log(this)\n\t\t\t\t\t// var opts = $(this).combotree('options')\n\t\t\t\t\t// console.log(opts)\n\t\t\t\t\t$('#ct').combotree('setValue', 113)\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t</script>\n</head>\n<body>\n\t<h2>Basic ComboTree</h2>\n\t<p>Click the right arrow button to show the tree panel.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"ct\" data-options=\"url:'tree_data1.json',method:'get',label:'Select Node:',labelPosition:'top'\" style=\"width:100%\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combotree/tree_data1.json",
    "content": "[{\n\t\"id\":1,\n\t\"text\":\"My Documents\",\n\t\"children\":[{\n\t\t\"id\":11,\n\t\t\"text\":\"Photos\",\n\t\t\"state\":\"closed\",\n\t\t\"children\":[{\n\t\t\t\"id\":111,\n\t\t\t\"text\":\"Friend\"\n\t\t},{\n\t\t\t\"id\":112,\n\t\t\t\"text\":\"Wife\"\n\t\t},{\n\t\t\t\"id\":113,\n\t\t\t\"text\":\"Company\"\n\t\t}]\n\t},{\n\t\t\"id\":12,\n\t\t\"text\":\"Program Files\",\n\t\t\"children\":[{\n\t\t\t\"id\":121,\n\t\t\t\"text\":\"Intel\"\n\t\t},{\n\t\t\t\"id\":122,\n\t\t\t\"text\":\"Java\",\n\t\t\t\"attributes\":{\n\t\t\t\t\"p1\":\"Custom Attribute1\",\n\t\t\t\t\"p2\":\"Custom Attribute2\"\n\t\t\t}\n\t\t},{\n\t\t\t\"id\":123,\n\t\t\t\"text\":\"Microsoft Office\"\n\t\t},{\n\t\t\t\"id\":124,\n\t\t\t\"text\":\"Games\",\n\t\t\t\"checked\":true\n\t\t}]\n\t},{\n\t\t\"id\":13,\n\t\t\"text\":\"index.html\"\n\t},{\n\t\t\"id\":14,\n\t\t\"text\":\"about.html\"\n\t},{\n\t\t\"id\":15,\n\t\t\"text\":\"welcome.html\"\n\t}]\n}]\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combotreegrid/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic ComboTreeGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic ComboTreeGrid</h2>\n\t<p>Click the right arrow button to show the TreeGrid.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combotreegrid\" data-options=\"\n\t\t\t\t\twidth:'100%',\n\t\t\t\t\tpanelWidth:500,\n\t\t\t\t\tlabel:'Select Item:',\n\t\t\t\t\tlabelPosition:'top',\n\t\t\t\t\turl:'treegrid_data1.json',\n\t\t\t\t\tidField:'id',\n\t\t\t\t\ttreeField:'name',\n\t\t\t\t\tcolumns:[[\n\t\t\t\t\t\t{field:'name',title:'Name',width:200},\n\t\t\t\t\t\t{field:'size',title:'Size',width:100},\n\t\t\t\t\t\t{field:'date',title:'Date',width:100}\n\t\t\t\t\t]]\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combotreegrid/multiple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Multiple ComboTreeGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Multiple ComboTreeGrid</h2>\n\t<p>Click the right arrow button to show the TreeGrid and select items.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-combotreegrid\" data-options=\"\n\t\t\t\t\twidth:'100%',\n\t\t\t\t\tpanelWidth:500,\n\t\t\t\t\tlabel:'Select Items:',\n\t\t\t\t\tlabelPosition:'top',\n\t\t\t\t\turl:'treegrid_data1.json',\n\t\t\t\t\tidField:'id',\n\t\t\t\t\ttreeField:'name',\n\t\t\t\t\tmultiple:true,\n\t\t\t\t\tvalue:['211','31'],\n\t\t\t\t\tcolumns:[[\n\t\t\t\t\t\t{field:'name',title:'Name',width:200},\n\t\t\t\t\t\t{field:'size',title:'Size',width:100},\n\t\t\t\t\t\t{field:'date',title:'Date',width:100}\n\t\t\t\t\t]]\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/combotreegrid/treegrid_data1.json",
    "content": "[{\n\t\"id\":1,\n\t\"name\":\"C\",\n\t\"size\":\"\",\n\t\"date\":\"02/19/2010\",\n\t\"children\":[{\n\t\t\"id\":2,\n\t\t\"name\":\"Program Files\",\n\t\t\"size\":\"120 MB\",\n\t\t\"date\":\"03/20/2010\",\n\t\t\"children\":[{\n\t\t\t\"id\":21,\n\t\t\t\"name\":\"Java\",\n\t\t\t\"size\":\"\",\n\t\t\t\"date\":\"01/13/2010\",\n\t\t\t\"state\":\"closed\",\n\t\t\t\"children\":[{\n\t\t\t\t\"id\":211,\n\t\t\t\t\"name\":\"java.exe\",\n\t\t\t\t\"size\":\"142 KB\",\n\t\t\t\t\"date\":\"01/13/2010\"\n\t\t\t},{\n\t\t\t\t\"id\":212,\n\t\t\t\t\"name\":\"jawt.dll\",\n\t\t\t\t\"size\":\"5 KB\",\n\t\t\t\t\"date\":\"01/13/2010\"\n\t\t\t}]\n\t\t},{\n\t\t\t\"id\":22,\n\t\t\t\"name\":\"MySQL\",\n\t\t\t\"size\":\"\",\n\t\t\t\"date\":\"01/13/2010\",\n\t\t\t\"state\":\"closed\",\n\t\t\t\"children\":[{\n\t\t\t\t\"id\":221,\n\t\t\t\t\"name\":\"my.ini\",\n\t\t\t\t\"size\":\"10 KB\",\n\t\t\t\t\"date\":\"02/26/2009\"\n\t\t\t},{\n\t\t\t\t\"id\":222,\n\t\t\t\t\"name\":\"my-huge.ini\",\n\t\t\t\t\"size\":\"5 KB\",\n\t\t\t\t\"date\":\"02/26/2009\"\n\t\t\t},{\n\t\t\t\t\"id\":223,\n\t\t\t\t\"name\":\"my-large.ini\",\n\t\t\t\t\"size\":\"5 KB\",\n\t\t\t\t\"date\":\"02/26/2009\"\n\t\t\t}]\n\t\t}]\n\t},{\n\t\t\"id\":3,\n\t\t\"name\":\"eclipse\",\n\t\t\"size\":\"\",\n\t\t\"date\":\"01/20/2010\",\n\t\t\"children\":[{\n\t\t\t\"id\":31,\n\t\t\t\"name\":\"eclipse.exe\",\n\t\t\t\"size\":\"56 KB\",\n\t\t\t\"date\":\"05/19/2009\"\n\t\t},{\n\t\t\t\"id\":32,\n\t\t\t\"name\":\"eclipse.ini\",\n\t\t\t\"size\":\"1 KB\",\n\t\t\t\"date\":\"04/20/2010\"\n\t\t},{\n\t\t\t\"id\":33,\n\t\t\t\"name\":\"notice.html\",\n\t\t\t\"size\":\"7 KB\",\n\t\t\t\"date\":\"03/17/2005\"\n\t\t}]\n\t}]\n}]"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/aligncolumns.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Aligning Columns in DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Aligning Columns in DataGrid</h2>\n\t<p>Use align and halign properties to set the alignment of the columns and their header.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t\n\t<table class=\"easyui-datagrid\" title=\"Aligning Columns in DataGrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"singleSelect:true,collapsible:true,url:'datagrid_data1.json',method:'get'\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80,halign:'center'\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100,halign:'center'\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right',halign:'center'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right',halign:'center'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:250,halign:'center'\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center',halign:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic DataGrid</h2>\n\t<p>The DataGrid is created from markup, no JavaScript code needed.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t\n\t<table class=\"easyui-datagrid\" title=\"Basic DataGrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"singleSelect:true,collapsible:true,url:'datagrid_data1.json',method:'get'\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:250\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/cacheeditor.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Cache Editor for DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Cache Editor for DataGrid</h2>\n\t<p>This example shows how to cache the editors for datagrid to improve the editing speed.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t\n\t<table id=\"dg\" class=\"easyui-datagrid\" title=\"Cache Editor for DataGrid\" style=\"width:700px;height:auto\"\n\t\t\tdata-options=\"\n\t\t\t\ticonCls: 'icon-edit',\n\t\t\t\tsingleSelect: true,\n\t\t\t\ttoolbar: '#tb',\n\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tonClickRow: onClickRow\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100,\n\t\t\t\t\t\tformatter:function(value,row){\n\t\t\t\t\t\t\treturn row.productname;\n\t\t\t\t\t\t},\n\t\t\t\t\t\teditor:{\n\t\t\t\t\t\t\ttype:'combobox',\n\t\t\t\t\t\t\toptions:{\n\t\t\t\t\t\t\t\tvalueField:'productid',\n\t\t\t\t\t\t\t\ttextField:'productname',\n\t\t\t\t\t\t\t\tmethod:'get',\n\t\t\t\t\t\t\t\turl:'products.json',\n\t\t\t\t\t\t\t\trequired:true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right',editor:{type:'numberbox',options:{precision:2}}\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right',editor:{type:'numberbox',options:{precision:2}}\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:250,editor:'text'\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center',editor:{type:'checkbox',options:{on:'P',off:''}}\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n\t<div id=\"tb\" style=\"height:auto\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-save',plain:true\" onclick=\"accept()\">Accept</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-undo',plain:true\" onclick=\"reject()\">Reject</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-search',plain:true\" onclick=\"getChanges()\">GetChanges</a>\n\t</div>\n\t\n\t<script type=\"text/javascript\">\n\t\t(function($){\n\t\t\tfunction getCacheContainer(t){\n\t\t\t\tvar view = $(t).closest('div.datagrid-view');\n\t\t\t\tvar c = view.children('div.datagrid-editor-cache');\n\t\t\t\tif (!c.length){\n\t\t\t\t\tc = $('<div class=\"datagrid-editor-cache\" style=\"position:absolute;display:none\"></div>').appendTo(view);\n\t\t\t\t}\n\t\t\t\treturn c;\n\t\t\t}\n\t\t\tfunction getCacheEditor(t, field){\n\t\t\t\tvar c = getCacheContainer(t);\n\t\t\t\treturn c.children('div.datagrid-editor-cache-' + field);\n\t\t\t}\n\t\t\tfunction setCacheEditor(t, field, editor){\n\t\t\t\tvar c = getCacheContainer(t);\n\t\t\t\tc.children('div.datagrid-editor-cache-' + field).remove();\n\t\t\t\tvar e = $('<div class=\"datagrid-editor-cache-' + field + '\"></div>').appendTo(c);\n\t\t\t\te.append(editor);\n\t\t\t}\n\t\t\t\n\t\t\tvar editors = $.fn.datagrid.defaults.editors;\n\t\t\tfor(var editor in editors){\n\t\t\t\tvar opts = editors[editor];\n\t\t\t\t(function(){\n\t\t\t\t\tvar init = opts.init;\n\t\t\t\t\topts.init = function(container, options){\n\t\t\t\t\t\tvar field = $(container).closest('td[field]').attr('field');\n\t\t\t\t\t\tvar ed = getCacheEditor(container, field);\n\t\t\t\t\t\tif (ed.length){\n\t\t\t\t\t\t\ted.appendTo(container);\n\t\t\t\t\t\t\treturn ed.find('.datagrid-editable-input');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn init(container, options);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t\t(function(){\n\t\t\t\t\tvar destroy = opts.destroy;\n\t\t\t\t\topts.destroy = function(target){\n\t\t\t\t\t\tif ($(target).hasClass('datagrid-editable-input')){\n\t\t\t\t\t\t\tvar field = $(target).closest('td[field]').attr('field');\n\t\t\t\t\t\t\tsetCacheEditor(target, field, $(target).parent().children());\n\t\t\t\t\t\t} else if (destroy){\n\t\t\t\t\t\t\tdestroy(target);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t})(jQuery);\n\t</script>\n\t<script type=\"text/javascript\">\n\t\tvar editIndex = undefined;\n\t\tfunction endEditing(){\n\t\t\tif (editIndex == undefined){return true}\n\t\t\tif ($('#dg').datagrid('validateRow', editIndex)){\n\t\t\t\tvar ed = $('#dg').datagrid('getEditor', {index:editIndex,field:'productid'});\n\t\t\t\tvar productname = $(ed.target).combobox('getText');\n\t\t\t\t$('#dg').datagrid('getRows')[editIndex]['productname'] = productname;\n\t\t\t\t$('#dg').datagrid('endEdit', editIndex);\n\t\t\t\teditIndex = undefined;\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tfunction onClickRow(index){\n\t\t\tif (editIndex != index){\n\t\t\t\tif (endEditing()){\n\t\t\t\t\t$('#dg').datagrid('selectRow', index)\n\t\t\t\t\t\t\t.datagrid('beginEdit', index);\n\t\t\t\t\teditIndex = index;\n\t\t\t\t} else {\n\t\t\t\t\t$('#dg').datagrid('selectRow', editIndex);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfunction accept(){\n\t\t\tif (endEditing()){\n\t\t\t\t$('#dg').datagrid('acceptChanges');\n\t\t\t}\n\t\t}\n\t\tfunction reject(){\n\t\t\t$('#dg').datagrid('rejectChanges');\n\t\t\teditIndex = undefined;\n\t\t}\n\t\tfunction getChanges(){\n\t\t\tvar rows = $('#dg').datagrid('getChanges');\n\t\t\talert(rows.length+' rows are changed!');\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/cellediting.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Cell Editing in DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Cell Editing in DataGrid</h2>\n\t<p>Click a cell to start editing.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t\n\t<table id=\"dg\" title=\"Cell Editing in DataGrid\" style=\"width:700px;height:auto\"\n\t\t\tdata-options=\"\n\t\t\t\ticonCls: 'icon-edit',\n\t\t\t\tsingleSelect: true,\n\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\tmethod:'get'\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100,editor:'text'\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right',editor:{type:'numberbox',options:{precision:2}}\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right',editor:{type:'numberbox',options:{precision:2}}\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:250,editor:'text'\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center',editor:{type:'checkbox',options:{on:'P',off:''}}\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n\t<script type=\"text/javascript\">\n\t\t$.extend($.fn.datagrid.methods, {\n\t\t\teditCell: function(jq,param){\n\t\t\t\treturn jq.each(function(){\n\t\t\t\t\tvar opts = $(this).datagrid('options');\n\t\t\t\t\tvar fields = $(this).datagrid('getColumnFields',true).concat($(this).datagrid('getColumnFields'));\n\t\t\t\t\tfor(var i=0; i<fields.length; i++){\n\t\t\t\t\t\tvar col = $(this).datagrid('getColumnOption', fields[i]);\n\t\t\t\t\t\tcol.editor1 = col.editor;\n\t\t\t\t\t\tif (fields[i] != param.field){\n\t\t\t\t\t\t\tcol.editor = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t$(this).datagrid('beginEdit', param.index);\n                    var ed = $(this).datagrid('getEditor', param);\n                    if (ed){\n                        if ($(ed.target).hasClass('textbox-f')){\n                            $(ed.target).textbox('textbox').focus();\n                        } else {\n                            $(ed.target).focus();\n                        }\n                    }\n\t\t\t\t\tfor(var i=0; i<fields.length; i++){\n\t\t\t\t\t\tvar col = $(this).datagrid('getColumnOption', fields[i]);\n\t\t\t\t\t\tcol.editor = col.editor1;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n            enableCellEditing: function(jq){\n                return jq.each(function(){\n                    var dg = $(this);\n                    var opts = dg.datagrid('options');\n                    opts.oldOnClickCell = opts.onClickCell;\n                    opts.onClickCell = function(index, field){\n                        if (opts.editIndex != undefined){\n                            if (dg.datagrid('validateRow', opts.editIndex)){\n                                dg.datagrid('endEdit', opts.editIndex);\n                                opts.editIndex = undefined;\n                            } else {\n                                return;\n                            }\n                        }\n                        dg.datagrid('selectRow', index).datagrid('editCell', {\n                            index: index,\n                            field: field\n                        });\n                        opts.editIndex = index;\n                        opts.oldOnClickCell.call(this, index, field);\n                    }\n                });\n            }\n\t\t});\n\n\t\t$(function(){\n\t\t\t$('#dg').datagrid().datagrid('enableCellEditing');\n\t\t})\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/cellstyle.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>DataGrid Cell Style - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>DataGrid Cell Style</h2>\n\t<p>The cells which listprice value is less than 30 are highlighted.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table class=\"easyui-datagrid\" title=\"DataGrid Cell Style\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\tsingleSelect: true,\n\t\t\t\ticonCls: 'icon-save',\n\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\tmethod: 'get'\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right',styler:cellStyler\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:250\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<script type=\"text/javascript\">\n\t\tfunction cellStyler(value,row,index){\n\t\t\tif (value < 30){\n\t\t\t\treturn 'background-color:#ffee00;color:red;';\n\t\t\t}\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/checkbox.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>CheckBox Selection on DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>CheckBox Selection on DataGrid</h2>\n\t<p>Click the checkbox on header to select or unselect all selections.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t\n\t<table id=\"dg\" class=\"easyui-datagrid\" title=\"CheckBox Selection on DataGrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"rownumbers:true,singleSelect:true,url:'datagrid_data1.json',method:'get'\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'ck',checkbox:true\"></th>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:220\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<div style=\"margin:10px 0;\">\n\t\t<span>Selection Mode: </span>\n\t\t<select onchange=\"$('#dg').datagrid({singleSelect:(this.value==0)})\">\n\t\t\t<option value=\"0\">Single Row</option>\n\t\t\t<option value=\"1\">Multiple Rows</option>\n\t\t</select><br/>\n\t\tSelectOnCheck: <input type=\"checkbox\" checked onchange=\"$('#dg').datagrid({selectOnCheck:$(this).is(':checked')})\"><br/>\n\t\tCheckOnSelect: <input type=\"checkbox\" checked onchange=\"$('#dg').datagrid({checkOnSelect:$(this).is(':checked')})\">\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/clientpagination.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Client Side Pagination in DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Client Side Pagination in DataGrid</h2>\n\t<p>This sample shows how to implement client side pagination in DataGrid.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t\n\t<table id=\"dg\" title=\"Client Side Pagination\" style=\"width:700px;height:300px\" data-options=\"\n\t\t\t\trownumbers:true,\n\t\t\t\tsingleSelect:true,\n\t\t\t\tautoRowHeight:false,\n\t\t\t\tpagination:true,\n\t\t\t\tpageSize:10\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th field=\"inv\" width=\"80\">Inv No</th>\n\t\t\t\t<th field=\"date\" width=\"100\">Date</th>\n\t\t\t\t<th field=\"name\" width=\"80\">Name</th>\n\t\t\t\t<th field=\"amount\" width=\"80\" align=\"right\">Amount</th>\n\t\t\t\t<th field=\"price\" width=\"80\" align=\"right\">Price</th>\n\t\t\t\t<th field=\"cost\" width=\"100\" align=\"right\">Cost</th>\n\t\t\t\t<th field=\"note\" width=\"110\">Note</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<script>\n\t\t(function($){\n\t\t\tfunction pagerFilter(data){\n\t\t\t\tif ($.isArray(data)){\t// is array\n\t\t\t\t\tdata = {\n\t\t\t\t\t\ttotal: data.length,\n\t\t\t\t\t\trows: data\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar target = this;\n\t\t\t\tvar dg = $(target);\n\t\t\t\tvar state = dg.data('datagrid');\n\t\t\t\tvar opts = dg.datagrid('options');\n\t\t\t\tif (!state.allRows){\n\t\t\t\t\tstate.allRows = (data.rows);\n\t\t\t\t}\n\t\t\t\tif (!opts.remoteSort && opts.sortName){\n\t\t\t\t\tvar names = opts.sortName.split(',');\n\t\t\t\t\tvar orders = opts.sortOrder.split(',');\n\t\t\t\t\tstate.allRows.sort(function(r1,r2){\n\t\t\t\t\t\tvar r = 0;\n\t\t\t\t\t\tfor(var i=0; i<names.length; i++){\n\t\t\t\t\t\t\tvar sn = names[i];\n\t\t\t\t\t\t\tvar so = orders[i];\n\t\t\t\t\t\t\tvar col = $(target).datagrid('getColumnOption', sn);\n\t\t\t\t\t\t\tvar sortFunc = col.sorter || function(a,b){\n\t\t\t\t\t\t\t\treturn a==b ? 0 : (a>b?1:-1);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tr = sortFunc(r1[sn], r2[sn]) * (so=='asc'?1:-1);\n\t\t\t\t\t\t\tif (r != 0){\n\t\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tvar start = (opts.pageNumber-1)*parseInt(opts.pageSize);\n\t\t\t\tvar end = start + parseInt(opts.pageSize);\n\t\t\t\tdata.rows = state.allRows.slice(start, end);\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tvar loadDataMethod = $.fn.datagrid.methods.loadData;\n\t\t\tvar deleteRowMethod = $.fn.datagrid.methods.deleteRow;\n\t\t\t$.extend($.fn.datagrid.methods, {\n\t\t\t\tclientPaging: function(jq){\n\t\t\t\t\treturn jq.each(function(){\n\t\t\t\t\t\tvar dg = $(this);\n                        var state = dg.data('datagrid');\n                        var opts = state.options;\n                        opts.loadFilter = pagerFilter;\n                        var onBeforeLoad = opts.onBeforeLoad;\n                        opts.onBeforeLoad = function(param){\n                            state.allRows = null;\n                            return onBeforeLoad.call(this, param);\n                        }\n                        var pager = dg.datagrid('getPager');\n\t\t\t\t\t\tpager.pagination({\n\t\t\t\t\t\t\tonSelectPage:function(pageNum, pageSize){\n\t\t\t\t\t\t\t\topts.pageNumber = pageNum;\n\t\t\t\t\t\t\t\topts.pageSize = pageSize;\n\t\t\t\t\t\t\t\tpager.pagination('refresh',{\n\t\t\t\t\t\t\t\t\tpageNumber:pageNum,\n\t\t\t\t\t\t\t\t\tpageSize:pageSize\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tdg.datagrid('loadData',state.allRows);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n                        $(this).datagrid('loadData', state.data);\n                        if (opts.url){\n                        \t$(this).datagrid('reload');\n                        }\n\t\t\t\t\t});\n\t\t\t\t},\n                loadData: function(jq, data){\n                    jq.each(function(){\n                        $(this).data('datagrid').allRows = null;\n                    });\n                    return loadDataMethod.call($.fn.datagrid.methods, jq, data);\n                },\n                deleteRow: function(jq, index){\n                \treturn jq.each(function(){\n                \t\tvar row = $(this).datagrid('getRows')[index];\n                \t\tdeleteRowMethod.call($.fn.datagrid.methods, $(this), index);\n                \t\tvar state = $(this).data('datagrid');\n                \t\tif (state.options.loadFilter == pagerFilter){\n                \t\t\tfor(var i=0; i<state.allRows.length; i++){\n                \t\t\t\tif (state.allRows[i] == row){\n                \t\t\t\t\tstate.allRows.splice(i,1);\n                \t\t\t\t\tbreak;\n                \t\t\t\t}\n                \t\t\t}\n                \t\t\t$(this).datagrid('loadData', state.allRows);\n                \t\t}\n                \t});\n                },\n                getAllRows: function(jq){\n                \treturn jq.data('datagrid').allRows;\n                }\n\t\t\t})\n\t\t})(jQuery);\n\n\t\tfunction getData(){\n\t\t\tvar rows = [];\n\t\t\tfor(var i=1; i<=800; i++){\n\t\t\t\tvar amount = Math.floor(Math.random()*1000);\n\t\t\t\tvar price = Math.floor(Math.random()*1000);\n\t\t\t\trows.push({\n\t\t\t\t\tinv: 'Inv No '+i,\n\t\t\t\t\tdate: $.fn.datebox.defaults.formatter(new Date()),\n\t\t\t\t\tname: 'Name '+i,\n\t\t\t\t\tamount: amount,\n\t\t\t\t\tprice: price,\n\t\t\t\t\tcost: amount*price,\n\t\t\t\t\tnote: 'Note '+i\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn rows;\n\t\t}\n\t\t\n\t\t$(function(){\n\t\t\t$('#dg').datagrid({data:getData()}).datagrid('clientPaging');\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/columngroup.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Column Group - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Column Group</h2>\n\t<p>The header cells can be merged. Useful to group columns under a category.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table class=\"easyui-datagrid\" title=\"Column Group\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"rownumbers:true,singleSelect:true,url:'datagrid_data1.json',method:'get'\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\" rowspan=\"2\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100\" rowspan=\"2\">Product</th>\n\t\t\t\t<th colspan=\"4\">Item Details</th>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:240\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/complextoolbar.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>DataGrid Complex Toolbar - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>DataGrid Complex Toolbar</h2>\n\t<p>The DataGrid toolbar can be defined from a &lt;div&gt; markup, so you can define the layout of toolbar easily.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table class=\"easyui-datagrid\" title=\"DataGrid Complex Toolbar\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"rownumbers:true,singleSelect:true,url:'datagrid_data1.json',method:'get',toolbar:'#tb',footer:'#ft'\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:240\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<div id=\"tb\" style=\"padding:2px 5px;\">\n\t\tDate From: <input class=\"easyui-datebox\" style=\"width:110px\">\n\t\tTo: <input class=\"easyui-datebox\" style=\"width:110px\">\n\t\tLanguage: \n\t\t<select class=\"easyui-combobox\" panelHeight=\"auto\" style=\"width:100px\">\n\t\t\t<option value=\"java\">Java</option>\n\t\t\t<option value=\"c\">C</option>\n\t\t\t<option value=\"basic\">Basic</option>\n\t\t\t<option value=\"perl\">Perl</option>\n\t\t\t<option value=\"python\">Python</option>\n\t\t</select>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" iconCls=\"icon-search\">Search</a>\n\t</div>\n\t<div id=\"ft\" style=\"padding:2px 5px;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" iconCls=\"icon-add\" plain=\"true\"></a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" iconCls=\"icon-edit\" plain=\"true\"></a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" iconCls=\"icon-save\" plain=\"true\"></a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" iconCls=\"icon-cut\" plain=\"true\"></a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" iconCls=\"icon-remove\" plain=\"true\"></a>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/contextmenu.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Context Menu on DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Context Menu on DataGrid</h2>\n\t<p>Right click on the header of DataGrid to display context menu.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table id=\"dg\"></table>\n\t<script type=\"text/javascript\">\n\t\t(function($){\n\t\t\tfunction buildMenu(target){\n\t\t\t\tvar state = $(target).data('datagrid');\n\t\t\t\tif (!state.columnMenu){\n\t\t\t\t\tstate.columnMenu = $('<div></div>').appendTo('body');\n\t\t\t\t\tstate.columnMenu.menu({\n\t\t\t\t\t\tonClick: function(item){\n\t\t\t\t\t\t\tif (item.iconCls == 'tree-checkbox1'){\n\t\t\t\t\t\t\t\t$(target).datagrid('hideColumn', item.name);\n\t\t\t\t\t\t\t\t$(this).menu('setIcon', {\n\t\t\t\t\t\t\t\t\ttarget: item.target,\n\t\t\t\t\t\t\t\t\ticonCls: 'tree-checkbox0'\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$(target).datagrid('showColumn', item.name);\n\t\t\t\t\t\t\t\t$(this).menu('setIcon', {\n\t\t\t\t\t\t\t\t\ttarget: item.target,\n\t\t\t\t\t\t\t\t\ticonCls: 'tree-checkbox1'\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\tvar fields = $(target).datagrid('getColumnFields',true).concat($(target).datagrid('getColumnFields',false));\n\t\t\t\t\tfor(var i=0; i<fields.length; i++){\n\t\t\t\t\t\tvar field = fields[i];\n\t\t\t\t\t\tvar col = $(target).datagrid('getColumnOption', field);\n\t\t\t\t\t\tstate.columnMenu.menu('appendItem', {\n\t\t\t\t\t\t\ttext: col.title,\n\t\t\t\t\t\t\tname: field,\n\t\t\t\t\t\t\ticonCls: 'tree-checkbox1'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn state.columnMenu;\n\t\t\t}\n\t\t\t$.extend($.fn.datagrid.methods, {\n\t\t\t\tcolumnMenu: function(jq){\n\t\t\t\t\treturn buildMenu(jq[0]);\n\t\t\t\t}\n\t\t\t});\n\t\t})(jQuery);\n\n\t\t$(function(){\n\t\t\t$('#dg').datagrid({\n\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\ttitle: 'Context Menu on DataGrid',\n\t\t\t\ticonCls: 'icon-save',\n\t\t\t\twidth: 700,\n\t\t\t\theight: 250,\n\t\t\t\tfitColumns: true,\n\t\t\t\tsingleSelect: true,\n\t\t\t\tcolumns:[[\n\t\t\t\t\t{field:'itemid',title:'Item ID',width:80},\n\t\t\t\t\t{field:'productid',title:'Product ID',width:120},\n\t\t\t\t\t{field:'listprice',title:'List Price',width:80,align:'right'},\n\t\t\t\t\t{field:'unitcost',title:'Unit Cost',width:80,align:'right'},\n\t\t\t\t\t{field:'attr1',title:'Attribute',width:250},\n\t\t\t\t\t{field:'status',title:'Status',width:60,align:'center'}\n\t\t\t\t]],\n\t\t\t\tonHeaderContextMenu: function(e, field){\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t$(this).datagrid('columnMenu').menu('show', {\n\t\t\t\t\t\tleft:e.pageX,\n\t\t\t\t\t\ttop:e.pageY\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/custompager.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom DataGrid Pager - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom DataGrid Pager</h2>\n\t<p>You can append some buttons to the standard datagrid pager bar.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table id=\"dg\" title=\"Custom DataGrid Pager\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"rownumbers:true,singleSelect:true,pagination:true,url:'datagrid_data1.json',method:'get'\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:240\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<script type=\"text/javascript\">\n\t\t$(function(){\n\t\t\tvar pager = $('#dg').datagrid().datagrid('getPager');\t// get the pager of datagrid\n\t\t\tpager.pagination({\n\t\t\t\tbuttons:[{\n\t\t\t\t\ticonCls:'icon-search',\n\t\t\t\t\thandler:function(){\n\t\t\t\t\t\talert('search');\n\t\t\t\t\t}\n\t\t\t\t},{\n\t\t\t\t\ticonCls:'icon-add',\n\t\t\t\t\thandler:function(){\n\t\t\t\t\t\talert('add');\n\t\t\t\t\t}\n\t\t\t\t},{\n\t\t\t\t\ticonCls:'icon-edit',\n\t\t\t\t\thandler:function(){\n\t\t\t\t\t\talert('edit');\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t});\t\t\t\n\t\t})\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/datagrid_data1.json",
    "content": "{\"total\":28,\"rows\":[\n\t{\"productid\":\"FI-SW-01\",\"productname\":\"Koi\",\"unitcost\":\"10.00\",\"status\":\"P\",\"listprice\":\"36.50\",\"attr1\":\"Large\",\"itemid\":\"EST-1\"},\n\t{\"productid\":\"K9-DL-01\",\"productname\":\"Dalmation\",\"unitcost\":\"12.00\",\"status\":\"P\",\"listprice\":\"18.50\",\"attr1\":\"Spotted Adult Female\",\"itemid\":\"EST-10\"},\n\t{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\",\"unitcost\":\"12.00\",\"status\":\"P\",\"listprice\":\"38.50\",\"attr1\":\"Venomless\",\"itemid\":\"EST-11\"},\n\t{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\",\"unitcost\":\"12.00\",\"status\":\"P\",\"listprice\":\"26.50\",\"attr1\":\"Rattleless\",\"itemid\":\"EST-12\"},\n\t{\"productid\":\"RP-LI-02\",\"productname\":\"Iguana\",\"unitcost\":\"12.00\",\"status\":\"P\",\"listprice\":\"35.50\",\"attr1\":\"Green Adult\",\"itemid\":\"EST-13\"},\n\t{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\",\"unitcost\":\"12.00\",\"status\":\"P\",\"listprice\":\"158.50\",\"attr1\":\"Tailless\",\"itemid\":\"EST-14\"},\n\t{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\",\"unitcost\":\"12.00\",\"status\":\"P\",\"listprice\":\"83.50\",\"attr1\":\"With tail\",\"itemid\":\"EST-15\"},\n\t{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\",\"unitcost\":\"12.00\",\"status\":\"P\",\"listprice\":\"23.50\",\"attr1\":\"Adult Female\",\"itemid\":\"EST-16\"},\n\t{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\",\"unitcost\":\"12.00\",\"status\":\"P\",\"listprice\":\"89.50\",\"attr1\":\"Adult Male\",\"itemid\":\"EST-17\"},\n\t{\"productid\":\"AV-CB-01\",\"productname\":\"Amazon Parrot\",\"unitcost\":\"92.00\",\"status\":\"P\",\"listprice\":\"63.50\",\"attr1\":\"Adult Male\",\"itemid\":\"EST-18\"}\n]}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/datagrid_data2.json",
    "content": "{\"total\":28,\"rows\":[\n\t{\"productid\":\"FI-SW-01\",\"unitcost\":10.00,\"status\":\"P\",\"listprice\":36.50,\"attr1\":\"Large\",\"itemid\":\"EST-1\"},\n\t{\"productid\":\"K9-DL-01\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":18.50,\"attr1\":\"Spotted Adult Female\",\"itemid\":\"EST-10\"},\n\t{\"productid\":\"RP-SN-01\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":28.50,\"attr1\":\"Venomless\",\"itemid\":\"EST-11\"},\n\t{\"productid\":\"RP-SN-01\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":26.50,\"attr1\":\"Rattleless\",\"itemid\":\"EST-12\"},\n\t{\"productid\":\"RP-LI-02\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":35.50,\"attr1\":\"Green Adult\",\"itemid\":\"EST-13\"},\n\t{\"productid\":\"FL-DSH-01\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":158.50,\"attr1\":\"Tailless\",\"itemid\":\"EST-14\"},\n\t{\"productid\":\"FL-DSH-01\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":83.50,\"attr1\":\"With tail\",\"itemid\":\"EST-15\"},\n\t{\"productid\":\"FL-DLH-02\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":63.50,\"attr1\":\"Adult Female\",\"itemid\":\"EST-16\"},\n\t{\"productid\":\"FL-DLH-02\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":89.50,\"attr1\":\"Adult Male\",\"itemid\":\"EST-17\"},\n\t{\"productid\":\"AV-CB-01\",\"unitcost\":92.00,\"status\":\"P\",\"listprice\":63.50,\"attr1\":\"Adult Male\",\"itemid\":\"EST-18\"}\n],\"footer\":[\n\t{\"unitcost\":19.80,\"listprice\":60.40,\"productid\":\"Average:\"},\n\t{\"unitcost\":198.00,\"listprice\":604.00,\"productid\":\"Total:\"}\n]}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid DataGrid</h2>\n\t<p>This example shows how to assign percentage width to a column in DataGrid.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t\n\t<table id=\"dg\" class=\"easyui-datagrid\" title=\"Fluid DataGrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"singleSelect:true,collapsible:true,url:'datagrid_data1.json',method:'get'\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',resizable:false\" width=\"15%\">Item ID(15%)</th>\n\t\t\t\t<th data-options=\"field:'productid',resizable:false\" width=\"15%\">Product(15%)</th>\n\t\t\t\t<th data-options=\"field:'listprice',align:'right',resizable:false\" width=\"15%\">List Price(15%)</th>\n\t\t\t\t<th data-options=\"field:'unitcost',align:'right',resizable:false\" width=\"15%\">Unit Cost(15%)</th>\n\t\t\t\t<th data-options=\"field:'attr1',resizable:false\" width=\"25%\">Attribute(25%)</th>\n\t\t\t\t<th data-options=\"field:'status',align:'center',resizable:false\" width=\"15%\">Status(15%)</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/footer.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Footer Rows in DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Footer Rows in DataGrid</h2>\n\t<p>The summary informations can be displayed in footer rows.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table class=\"easyui-datagrid\" title=\"Footer Rows in DataGrid\" style=\"width:700px;height:220px\"\n\t\t\tdata-options=\"\n\t\t\t\turl: 'datagrid_data2.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tfitColumns: true,\n\t\t\t\tsingleSelect: true,\n\t\t\t\trownumbers: true,\n\t\t\t\tshowFooter: true\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:120\">Product ID</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:250\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/formatcolumns.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Format DataGrid Columns - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Format DataGrid Columns</h2>\n\t<p>The list price value will show red color when less than 30.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table class=\"easyui-datagrid\" title=\"Format DataGrid Columns\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"rownumbers:true,singleSelect:true,iconCls:'icon-ok',url:'datagrid_data1.json',method:'get'\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right',formatter:formatPrice\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:240\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<script>\n\t\tfunction formatPrice(val,row){\n\t\t\tif (val < 30){\n\t\t\t\treturn '<span style=\"color:red;\">('+val+')</span>';\n\t\t\t} else {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/frozencolumns.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Frozen Columns in DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Frozen Columns in DataGrid</h2>\n\t<p>You can freeze some columns that can't scroll out of view.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table class=\"easyui-datagrid\" title=\"Frozen Columns in DataGrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"rownumbers:true,singleSelect:true,url:'datagrid_data1.json',method:'get'\">\n\t\t<thead data-options=\"frozen:true\">\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:100\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:120\">Product</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'listprice',width:90,align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:90,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:250\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/frozenrows.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Frozen Rows in DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Frozen Rows in DataGrid</h2>\n\t<p>This sample shows how to freeze some rows that will always be displayed at the top when the datagrid is scrolled down.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table class=\"easyui-datagrid\" title=\"Frozen Rows in DataGrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\tsingleSelect: true,\n\t\t\t\tcollapsible: true,\n\t\t\t\trownumbers: true,\n\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tonLoadSuccess: function(){\n\t\t\t\t\t$(this).datagrid('freezeRow',0).datagrid('freezeRow',1);\n\t\t\t\t}\n\t\t\t\">\n\t\t<thead data-options=\"frozen:true\">\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:100\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:120\">Product</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'listprice',width:90,align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:90,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:230\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/mergecells.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Merge Cells for DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Merge Cells for DataGrid</h2>\n\t<p>Cells in DataGrid body can be merged.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table class=\"easyui-datagrid\" title=\"Merge Cells for DataGrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\trownumbers: true,\n\t\t\t\tsingleSelect: true,\n\t\t\t\ticonCls: 'icon-save',\n\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tonLoadSuccess: onLoadSuccess\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'productid',width:100\">Product</th>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:240\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<script type=\"text/javascript\">\n\t\tfunction onLoadSuccess(data){\n\t\t\tvar merges = [{\n\t\t\t\tindex: 2,\n\t\t\t\trowspan: 2\n\t\t\t},{\n\t\t\t\tindex: 5,\n\t\t\t\trowspan: 2\n\t\t\t},{\n\t\t\t\tindex: 7,\n\t\t\t\trowspan: 2\n\t\t\t}];\n\t\t\tfor(var i=0; i<merges.length; i++){\n\t\t\t\t$(this).datagrid('mergeCells',{\n\t\t\t\t\tindex: merges[i].index,\n\t\t\t\t\tfield: 'productid',\n\t\t\t\t\trowspan: merges[i].rowspan\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/multisorting.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Multiple Sorting - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Multiple Sorting</h2>\n\t<p>Set 'multiSort' property to true to enable multiple column sorting.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t\n\t<table class=\"easyui-datagrid\" title=\"Multiple Sorting\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"singleSelect:true,collapsible:true,\n\t\t\t\turl:'datagrid_data1.json',\n\t\t\t\tmethod:'get',\n\t\t\t\tremoteSort:false,\n\t\t\t\tmultiSort:true\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80,sortable:true\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100,sortable:true\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right',sortable:true,sorter:numSorter\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right',sortable:true,sorter:numSorter\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:250\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<script type=\"text/javascript\">\n\t\tfunction numSorter(a,b){\n\t\t\ta = parseFloat(a);\n\t\t\tb = parseFloat(b);\n\t\t\treturn a==b?0:(a>b?1:-1);\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/products.json",
    "content": "[\n{\"productid\":\"FI-SW-01\",\"productname\":\"Koi\"},\n{\"productid\":\"K9-DL-01\",\"productname\":\"Dalmation\"},\n{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\"},\n{\"productid\":\"RP-LI-02\",\"productname\":\"Iguana\"},\n{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\"},\n{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\"},\n{\"productid\":\"AV-CB-01\",\"productname\":\"Amazon Parrot\"}\n]\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/rowborder.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Row Border in DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Row Border in DataGrid</h2>\n\t<p>This sample shows how to change the row border style of datagrid.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<span>Border:</span>\n\t\t<select onchange=\"changeBorder(this.value)\">\n\t\t\t<option value=\"lines-both\">Both</option>\n\t\t\t<option value=\"lines-no\">No Border</option>\n\t\t\t<option value=\"lines-right\">Right Border</option>\n\t\t\t<option value=\"lines-bottom\">Bottom Border</option>\n\t\t</select>\n\t\t<span>Striped:</span>\n\t\t<input type=\"checkbox\" onclick=\"$('#dg').datagrid({striped:$(this).is(':checked')})\">\n\t</div>\n\t<table id=\"dg\" class=\"easyui-datagrid\" title=\"Row Border in DataGrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"singleSelect:true,fitColumns:true,url:'datagrid_data1.json',method:'get'\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:250\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<script type=\"text/javascript\">\n\t\tfunction changeBorder(cls){\n\t\t\t$('#dg').datagrid('getPanel').removeClass('lines-both lines-no lines-right lines-bottom').addClass(cls);\n\t\t}\n\t</script>\n\t<style type=\"text/css\">\n\t\t.lines-both .datagrid-body td{\n\t\t}\n\t\t.lines-no .datagrid-body td{\n\t\t\tborder-right:1px dotted transparent;\n\t\t\tborder-bottom:1px dotted transparent;\n\t\t}\n\t\t.lines-right .datagrid-body td{\n\t\t\tborder-bottom:1px dotted transparent;\n\t\t}\n\t\t.lines-bottom .datagrid-body td{\n\t\t\tborder-right:1px dotted transparent;\n\t\t}\n\t</style>\n\t\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/rowediting.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Row Editing in DataGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Row Editing in DataGrid</h2>\n\t<p>Click the row to start editing.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t\n\t<table id=\"dg\" class=\"easyui-datagrid\" title=\"Row Editing in DataGrid\" style=\"width:700px;height:auto\"\n\t\t\tdata-options=\"\n\t\t\t\ticonCls: 'icon-edit',\n\t\t\t\tsingleSelect: true,\n\t\t\t\ttoolbar: '#tb',\n\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tonClickCell: onClickCell,\n\t\t\t\tonEndEdit: onEndEdit\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100,\n\t\t\t\t\t\tformatter:function(value,row){\n\t\t\t\t\t\t\treturn row.productname;\n\t\t\t\t\t\t},\n\t\t\t\t\t\teditor:{\n\t\t\t\t\t\t\ttype:'combobox',\n\t\t\t\t\t\t\toptions:{\n\t\t\t\t\t\t\t\tvalueField:'productid',\n\t\t\t\t\t\t\t\ttextField:'productname',\n\t\t\t\t\t\t\t\tmethod:'get',\n\t\t\t\t\t\t\t\turl:'products.json',\n\t\t\t\t\t\t\t\trequired:true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right',editor:{type:'numberbox',options:{precision:2}}\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right',editor:{type:'numberbox',options:{precision:2}}\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:250,editor:'textbox'\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center',editor:{type:'checkbox',options:{on:'P',off:''}}\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n\t<div id=\"tb\" style=\"height:auto\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-add',plain:true\" onclick=\"append()\">Append</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-remove',plain:true\" onclick=\"removeit()\">Remove</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-save',plain:true\" onclick=\"acceptit()\">Accept</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-undo',plain:true\" onclick=\"reject()\">Reject</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-search',plain:true\" onclick=\"getChanges()\">GetChanges</a>\n\t</div>\n\t\n\t<script type=\"text/javascript\">\n\t\tvar editIndex = undefined;\n\t\tfunction endEditing(){\n\t\t\tif (editIndex == undefined){return true}\n\t\t\tif ($('#dg').datagrid('validateRow', editIndex)){\n\t\t\t\t$('#dg').datagrid('endEdit', editIndex);\n\t\t\t\teditIndex = undefined;\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tfunction onClickCell(index, field){\n\t\t\tif (editIndex != index){\n\t\t\t\tif (endEditing()){\n\t\t\t\t\t$('#dg').datagrid('selectRow', index)\n\t\t\t\t\t\t\t.datagrid('beginEdit', index);\n\t\t\t\t\tvar ed = $('#dg').datagrid('getEditor', {index:index,field:field});\n\t\t\t\t\tif (ed){\n\t\t\t\t\t\t($(ed.target).data('textbox') ? $(ed.target).textbox('textbox') : $(ed.target)).focus();\n\t\t\t\t\t}\n\t\t\t\t\teditIndex = index;\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\t$('#dg').datagrid('selectRow', editIndex);\n\t\t\t\t\t},0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfunction onEndEdit(index, row){\n\t\t\tvar ed = $(this).datagrid('getEditor', {\n\t\t\t\tindex: index,\n\t\t\t\tfield: 'productid'\n\t\t\t});\n\t\t\trow.productname = $(ed.target).combobox('getText');\n\t\t}\n\t\tfunction append(){\n\t\t\tif (endEditing()){\n\t\t\t\t$('#dg').datagrid('appendRow',{status:'P'});\n\t\t\t\teditIndex = $('#dg').datagrid('getRows').length-1;\n\t\t\t\t$('#dg').datagrid('selectRow', editIndex)\n\t\t\t\t\t\t.datagrid('beginEdit', editIndex);\n\t\t\t}\n\t\t}\n\t\tfunction removeit(){\n\t\t\tif (editIndex == undefined){return}\n\t\t\t$('#dg').datagrid('cancelEdit', editIndex)\n\t\t\t\t\t.datagrid('deleteRow', editIndex);\n\t\t\teditIndex = undefined;\n\t\t}\n\t\tfunction acceptit(){\n\t\t\tif (endEditing()){\n\t\t\t\t$('#dg').datagrid('acceptChanges');\n\t\t\t}\n\t\t}\n\t\tfunction reject(){\n\t\t\t$('#dg').datagrid('rejectChanges');\n\t\t\teditIndex = undefined;\n\t\t}\n\t\tfunction getChanges(){\n\t\t\tvar rows = $('#dg').datagrid('getChanges');\n\t\t\talert(rows.length+' rows are changed!');\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/rowstyle.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>DataGrid Row Style - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>DataGrid Row Style</h2>\n\t<p>The rows which listprice value is less than 30 are highlighted.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table class=\"easyui-datagrid\" title=\"DataGrid Row Style\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\tsingleSelect: true,\n\t\t\t\ticonCls: 'icon-save',\n\t\t\t\turl: 'datagrid_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\trowStyler: function(index,row){\n\t\t\t\t\tif (row.listprice < 30){\n\t\t\t\t\t\treturn 'background-color:#6293BB;color:#fff;font-weight:bold;';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:250\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/selection.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>DataGrid Selection - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>DataGrid Selection</h2>\n\t<p>Choose a selection mode and select one or more rows.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"getSelected()\">GetSelected</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"getSelections()\">GetSelections</a>\n\t</div>\n\t<table id=\"dg\" class=\"easyui-datagrid\" title=\"DataGrid Selection\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"singleSelect:true,url:'datagrid_data1.json',method:'get'\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:250\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<div style=\"margin:10px 0;\">\n\t\t<span>Selection Mode: </span>\n\t\t<select onchange=\"$('#dg').datagrid({singleSelect:(this.value==0)})\">\n\t\t\t<option value=\"0\">Single Row</option>\n\t\t\t<option value=\"1\">Multiple Rows</option>\n\t\t</select>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction getSelected(){\n\t\t\tvar row = $('#dg').datagrid('getSelected');\n\t\t\tif (row){\n\t\t\t\t$.messager.alert('Info', row.itemid+\":\"+row.productid+\":\"+row.attr1);\n\t\t\t}\n\t\t}\n\t\tfunction getSelections(){\n\t\t\tvar ss = [];\n\t\t\tvar rows = $('#dg').datagrid('getSelections');\n\t\t\tfor(var i=0; i<rows.length; i++){\n\t\t\t\tvar row = rows[i];\n\t\t\t\tss.push('<span>'+row.itemid+\":\"+row.productid+\":\"+row.attr1+'</span>');\n\t\t\t}\n\t\t\t$.messager.alert('Info', ss.join('<br/>'));\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/simpletoolbar.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>DataGrid with Toolbar - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>DataGrid with Toolbar</h2>\n\t<p>Put buttons on top toolbar of DataGrid.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table class=\"easyui-datagrid\" title=\"DataGrid with Toolbar\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"rownumbers:true,singleSelect:true,url:'datagrid_data1.json',method:'get',toolbar:toolbar\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>\n\t\t\t\t<th data-options=\"field:'attr1',width:240\">Attribute</th>\n\t\t\t\t<th data-options=\"field:'status',width:60,align:'center'\">Status</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<script type=\"text/javascript\">\n\t\tvar toolbar = [{\n\t\t\ttext:'Add',\n\t\t\ticonCls:'icon-add',\n\t\t\thandler:function(){alert('add')}\n\t\t},{\n\t\t\ttext:'Cut',\n\t\t\ticonCls:'icon-cut',\n\t\t\thandler:function(){alert('cut')}\n\t\t},'-',{\n\t\t\ttext:'Save',\n\t\t\ticonCls:'icon-save',\n\t\t\thandler:function(){alert('save')}\n\t\t}];\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datagrid/transform.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Transform DataGrid from Table - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Transform DataGrid from Table</h2>\n\t<p>Transform DataGrid from an existing, unformatted html table.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"javascript:$('#dg').datagrid()\">Transform</a>\n\t</div>\n\t<table id=\"dg\" style=\"width:700px;height:auto;border:1px solid #ccc;\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid'\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid'\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',align:'right'\">List Price</th>\n\t\t\t\t<th data-options=\"field:'attr1'\">Attribute</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td>EST-1</td><td>FI-SW-01</td><td>36.50</td><td>Large</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>EST-10</td><td>K9-DL-01</td><td>18.50</td><td>Spotted Adult Female</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>EST-11</td><td>RP-SN-01</td><td>28.50</td><td>Venomless</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>EST-12</td><td>RP-SN-01</td><td>26.50</td><td>Rattleless</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>EST-13</td><td>RP-LI-02</td><td>35.50</td><td>Green Adult</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datalist/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic DataList - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic DataList</h2>\n\t<p>The DataList can be created from the &lt;ul&gt; element.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<ul class=\"easyui-datalist\" title=\"Basic DataList\" lines=\"true\" style=\"width:400px;height:250px\">\n\t\t<li value=\"AL\">Alabama</li>\n\t\t<li value=\"AK\">Alaska</li>\n\t\t<li value=\"AZ\">Arizona</li>\n\t\t<li value=\"AR\">Arkansas</li>\n\t\t<li value=\"CA\">California</li>\n\t\t<li value=\"CO\">Colorado</li>\n\t\t<li value=\"CT\">Connecticut</li>\n\t\t<li value=\"DE\">Delaware</li>\n\t\t<li value=\"FL\">Florida</li>\n\t\t<li value=\"GA\">Georgia</li>\n\t\t<li value=\"HI\">Hawaii</li>\n\t\t<li value=\"ID\">Idaho</li>\n\t\t<li value=\"IL\">Illinois</li>\n\t\t<li value=\"IN\">Indiana</li>\n\t\t<li value=\"IA\">Iowa</li>\n\t\t<li value=\"KS\">Kansas</li>\n\t\t<li value=\"KY\">Kentucky</li>\n\t\t<li value=\"LA\">Louisiana</li>\n\t\t<li value=\"ME\">Maine</li>\n\t\t<li value=\"MD\">Maryland</li>\n\t\t<li value=\"MA\">Massachusetts</li>\n\t\t<li value=\"MI\">Michigan</li>\n\t\t<li value=\"MN\">Minnesota</li>\n\t\t<li value=\"MS\">Mississippi</li>\n\t\t<li value=\"MO\">Missouri</li>\n\t\t<li value=\"MT\">Montana</li>\n\t\t<li value=\"NE\">Nebraska</li>\n\t\t<li value=\"NV\">Nevada</li>\n\t\t<li value=\"NH\">New Hampshire</li>\n\t\t<li value=\"NJ\">New Jersey</li>\n\t\t<li value=\"NM\">New Mexico</li>\n\t\t<li value=\"NY\">New York</li>\n\t\t<li value=\"NC\">North Carolina</li>\n\t\t<li value=\"ND\">North Dakota</li>\n\t\t<li value=\"OH\">Ohio</li>\n\t\t<li value=\"OK\">Oklahoma</li>\n\t\t<li value=\"OR\">Oregon</li>\n\t\t<li value=\"PA\">Pennsylvania</li>\n\t\t<li value=\"RI\">Rhode Island</li>\n\t\t<li value=\"SC\">South Carolina</li>\n\t\t<li value=\"SD\">South Dakota</li>\n\t\t<li value=\"TN\">Tennessee</li>\n\t\t<li value=\"TX\">Texas</li>\n\t\t<li value=\"UT\">Utah</li>\n\t\t<li value=\"VT\">Vermont</li>\n\t\t<li value=\"VA\">Virginia</li>\n\t\t<li value=\"WA\">Washington</li>\n\t\t<li value=\"WV\">West Virginia</li>\n\t\t<li value=\"WI\">Wisconsin</li>\n\t\t<li value=\"WY\">Wyoming</li>\n\t</ul>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datalist/checkbox.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Checkbox in DataList - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Checkbox in DataList</h2>\n\t<p>Each item in the DataList has a checkbox.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-datalist\" title=\"Checkbox in DataList\" style=\"width:400px;height:250px\" data-options=\"\n\t\t\turl: 'datalist_data1.json',\n\t\t\tmethod: 'get',\n\t\t\tcheckbox: true,\n\t\t\tselectOnCheck: false,\n\t\t\tonBeforeSelect: function(){return false;}\n\t\t\t\">\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datalist/datalist_data1.json",
    "content": "[\n{\"text\":\"Epson WorkForce 845\",\"group\":\"Printer\"},\n{\"text\":\"Canon PIXMA MG5320\",\"group\":\"Printer\"},\n{\"text\":\"HP Deskjet 1000 Printer\",\"group\":\"Printer\"},\n{\"text\":\"Cisco RV110W-A-NA-K9\",\"group\":\"Firewall\"},\n{\"text\":\"ZyXEL ZyWALL USG50\",\"group\":\"Firewall\"},\n{\"text\":\"NETGEAR FVS318\",\"group\":\"Firewall\"},\n{\"text\":\"Logitech Keyboard K120\",\"group\":\"Keyboard\"},\n{\"text\":\"Microsoft Natural Ergonomic Keyboard 4000\",\"group\":\"Keyboard\"},\n{\"text\":\"Logitech Wireless Touch Keyboard K400\",\"group\":\"Keyboard\"},\n{\"text\":\"Logitech Gaming Keyboard G110\",\"group\":\"Keyboard\"},\n{\"text\":\"Nikon COOLPIX L26 16.1 MP\",\"group\":\"Camera\"},\n{\"text\":\"Canon PowerShot A1300\",\"group\":\"Camera\"},\n{\"text\":\"Canon PowerShot A2300\",\"group\":\"Camera\"}\n\n\n\n]"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datalist/group.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Group DataList - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Group DataList</h2>\n\t<p>This example shows how to display items in groups.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-datalist\" title=\"Group DataList\" style=\"width:400px;height:250px\" data-options=\"\n\t\t\turl: 'datalist_data1.json',\n\t\t\tmethod: 'get',\n\t\t\tgroupField: 'group'\n\t\t\t\">\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datalist/multiselect.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Multiple Selection DataList - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Multiple Selection DataList</h2>\n\t<p>The multiple selection allows the user to select multiple items in a datalist.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-datalist\" title=\"Multiple Selection DataList\" style=\"width:400px;height:250px\" data-options=\"\n\t\t\turl: 'datalist_data1.json',\n\t\t\tmethod: 'get',\n\t\t\tsingleSelect: false\n\t\t\t\">\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datalist/remotedata.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Binding to Remote Data - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Binding to Remote Data</h2>\n\t<p>The DataList is bound to a remote data.</p>\n\t<div style=\"margin:20px 0\"></div>\n\t<div class=\"easyui-datalist\" title=\"Remote Data\" style=\"width:400px;height:250px\" data-options=\"\n\t\t\turl: 'datalist_data1.json',\n\t\t\tmethod: 'get'\n\t\t\t\">\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datebox/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic DateBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic DateBox</h2>\n\t<p>Click the calendar image on the right side.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datebox\" label=\"Start Date:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datebox\" label=\"End Date:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datebox/buttons.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>DateBox Buttons - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>DateBox Buttons</h2>\n\t<p>This example shows how to customize the datebox buttons underneath the calendar.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datebox\" label=\"Date With 2 Buttons:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datebox\" label=\"Date With 3 Buttons:\" labelPosition=\"top\" data-options=\"buttons:buttons\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n\t<script>\n\t\tvar buttons = $.extend([], $.fn.datebox.defaults.buttons);\n\t\tbuttons.splice(1, 0, {\n\t\t\ttext: 'MyBtn',\n\t\t\thandler: function(target){\n\t\t\t\talert('click MyBtn');\n\t\t\t}\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datebox/clone.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Clone DateBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Clone DateBox</h2>\n\t<p>Click the 'Clone' button to clone datebox components from the exiting datebox.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"cloneDatebox()\">Clone</a>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"dt\" class=\"easyui-datebox\" label=\"Select Date:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div id=\"cc\" style=\"margin-top:10px\"></div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction cloneDatebox(){\n\t\t\tvar dt = $('<input>').appendTo('#cc');\n\t\t\tdt.datebox('cloneFrom', '#dt');\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datebox/dateformat.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Date Format - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Date Format</h2>\n\t<p>Different date formats are applied to different DateBox components.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datebox\" label=\"Default Format:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datebox\" label=\"Customized Format:\" labelPosition=\"top\" data-options=\"formatter:myformatter,parser:myparser\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction myformatter(date){\n\t\t\tvar y = date.getFullYear();\n\t\t\tvar m = date.getMonth()+1;\n\t\t\tvar d = date.getDate();\n\t\t\treturn y+'-'+(m<10?('0'+m):m)+'-'+(d<10?('0'+d):d);\n\t\t}\n\t\tfunction myparser(s){\n\t\t\tif (!s) return new Date();\n\t\t\tvar ss = (s.split('-'));\n\t\t\tvar y = parseInt(ss[0],10);\n\t\t\tvar m = parseInt(ss[1],10);\n\t\t\tvar d = parseInt(ss[2],10);\n\t\t\tif (!isNaN(y) && !isNaN(m) && !isNaN(d)){\n\t\t\t\treturn new Date(y,m-1,d);\n\t\t\t} else {\n\t\t\t\treturn new Date();\n\t\t\t}\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datebox/events.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>DateBox Events - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>DateBox Events</h2>\n\t<p>Click the calendar image on the right side.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datebox\" data-options=\"label:'Select Date:',labelPosition:'top',onSelect:onSelect\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin:10px 0\">\n\t\t\t<span>Selected Date: </span>\n\t\t\t<span id=\"result\"></span>\n\t\t</div>\n\t</div>\n\t<script>\n\t\tfunction onSelect(date){\n\t\t\t$('#result').text(date)\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datebox/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid DateBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid DateBox</h2>\n\t<p>This example shows how to set the width of DateBox to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datebox\" label=\"width: 100%\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datebox\" label=\"width: 50%\" labelPosition=\"top\" style=\"width:50%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datebox/restrict.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Restrict Date Range in DateBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Restrict Date Range in DateBox</h2>\n\t<p>This example shows how to restrict the user to select only ten days from now.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"dd\" label=\"Select Date:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n\t<script>\n\t\t$(function(){\n\t\t\t$('#dd').datebox().datebox('calendar').calendar({\n\t\t\t\tvalidator: function(date){\n\t\t\t\t\tvar now = new Date();\n\t\t\t\t\tvar d1 = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\t\t\t\t\tvar d2 = new Date(now.getFullYear(), now.getMonth(), now.getDate()+10);\n\t\t\t\t\treturn d1<=date && date<=d2;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datebox/sharedcalendar.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Shared Calendar in DateBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Shared Calendar in DateBox</h2>\n\t<p>Multiple datebox components can share a calendar and use it to pick dates.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datebox\" data-options=\"label:'Start Date:',labelPosition:'top',sharedCalendar:'#cc'\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datebox\" data-options=\"label:'End Date:',labelPosition:'top',sharedCalendar:'#cc'\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n\t<div id=\"cc\" class=\"easyui-calendar\"></div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datebox/validate.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Validate DateBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Validate DateBox</h2>\n\t<p>When the selected date is greater than specified date. The field validator will raise an error.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datebox\" label=\"Required Date:\" labelPosition=\"top\" required style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datebox\" label=\"End Date:\" labelPosition=\"top\" required data-options=\"validType:'md[\\'10/11/2015\\']'\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n\t<script>\n\t\t$.extend($.fn.validatebox.defaults.rules, {\n\t\t\tmd: {\n\t\t\t\tvalidator: function(value, param){\n\t\t\t\t\tvar d1 = $.fn.datebox.defaults.parser(param[0]);\n\t\t\t\t\tvar d2 = $.fn.datebox.defaults.parser(value);\n\t\t\t\t\treturn d2<=d1;\n\t\t\t\t},\n\t\t\t\tmessage: 'The date must be less than or equals to {0}.'\n\t\t\t}\n\t\t})\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datetimebox/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic DateTimeBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic DateTimeBox</h2>\n\t<p>Click the calendar image on the right side.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datetimebox\" label=\"Select DateTime:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" label=\"Description:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datetimebox/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid DateTimeBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid DateTimeBox</h2>\n\t<p>This example shows how to set the width of DateTimeBox to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datetimebox\" label=\"width: 100%\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datetimebox\" label=\"width: 80%\" labelPosition=\"top\" style=\"width:80%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datetimebox/initvalue.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Initialize Value for DateTime - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Initialize Value for DateTime</h2>\n\t<p>The value is initialized when DateTimeBox has been created.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datetimebox\" label=\"Select DateTime:\" labelPosition=\"top\" value=\"10/11/2015 2:3:56\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datetimebox/showseconds.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Display Seconds - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Display Seconds</h2>\n\t<p>The user can decide to display seconds part or not.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<span>Show Seconds: </span>\n\t\t<input type=\"checkbox\" checked onchange=\"$('#dt').datetimebox({showSeconds:$(this).is(':checked')})\">\n\t</div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"dt\" class=\"easyui-datetimebox\" label=\"Select DateTime:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datetimespinner/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic DateTimeSpinner - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic DateTimeSpinner</h2>\n\t<p>Click spin button to adjust date and time.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datetimespinner\" label=\"Start Time:\" labelPosition=\"top\" value=\"6/24/2015 17:23\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datetimespinner\" label=\"End Time:\" labelPosition=\"top\" value=\"6/25/2015 20:23\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datetimespinner/clearicon.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>DateTimeSpinner with Clear Icon - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>DateTimeSpinner with Clear Icon</h2>\n\t<p>A clear icon can be attached to the datetimespinner. Click it to clear the entered value.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datetimespinner\" value=\"6/24/2015 17:23:40\" style=\"width:100%;\" data-options=\"\n\t\t\t\t\tshowSeconds: true,\n\t\t\t\t\tprompt: 'Input date time here!',\n\t\t\t\t\ticons:[{\n\t\t\t\t\t\ticonCls:'icon-clear',\n\t\t\t\t\t\thandler: function(e){\n\t\t\t\t\t\t\t$(e.data.target).datetimespinner('clear');\n\t\t\t\t\t\t}\n\t\t\t\t\t}],\n\t\t\t\t\tlabel: 'Start Time:',\n\t\t\t\t\tlabelPosition: 'top'\n\t\t\t\t\t\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datetimespinner/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid DateTimeSpinner - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid DateTimeSpinner</h2>\n\t<p>The width of datetimespinner is set in percentages.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datetimespinner\" label=\"width: 100%\" labelPosition=\"top\" value=\"6/24/2015 17:23\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datetimespinner\" label=\"width: 80%\" labelPosition=\"top\" value=\"6/25/2015 20:23\" style=\"width:80%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/datetimespinner/format.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Format DateTimeSpinner - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Format DateTimeSpinner</h2>\n\t<p>The DataTimeSpinner value can be formatted by specifying the 'formatter' and 'parser' functions.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datetimespinner\" label=\"mm/dd/yyyy hh:mm\" labelPosition=\"top\" value=\"6/24/2015 17:23\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datetimespinner\" value=\"6/24/2015\" data-options=\"label:'mm/dd/yyyy',labelPosition:'top',formatter:formatter1,parser:parser1\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-datetimespinner\" value=\"2015-6\" data-options=\"label:'yyyy-mm',labelPosition:'top',formatter:formatter2,parser:parser2,selections:[[0,4],[5,7]]\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction formatter1(date){\n\t\t\tif (!date){return '';}\n\t\t\treturn $.fn.datebox.defaults.formatter.call(this, date);\n\t\t}\n\t\tfunction parser1(s){\n\t\t\tif (!s){return null;}\n\t\t\treturn $.fn.datebox.defaults.parser.call(this, s);\n\t\t}\n\t\tfunction formatter2(date){\n\t\t\tif (!date){return '';}\n\t\t\tvar y = date.getFullYear();\n\t\t\tvar m = date.getMonth() + 1;\n\t\t\treturn y + '-' + (m<10?('0'+m):m);\n\t\t}\n\t\tfunction parser2(s){\n\t\t\tif (!s){return null;}\n\t\t\tvar ss = s.split('-');\n\t\t\tvar y = parseInt(ss[0],10);\n\t\t\tvar m = parseInt(ss[1],10);\n\t\t\tif (!isNaN(y) && !isNaN(m)){\n\t\t\t\treturn new Date(y,m-1,1);\n\t\t\t} else {\n\t\t\t\treturn new Date();\n\t\t\t}\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/demo.css",
    "content": "body {\n    font-family:verdana,helvetica,arial,sans-serif;\n    padding:20px;\n    font-size:12px;\n    margin:0;\n}\nh2 {\n    font-size:18px;\n    font-weight:bold;\n    margin:0;\n    margin-bottom:15px;\n}\n.demo-info{\n\tpadding:0 0 12px 0;\n}\n.demo-tip{\n\tdisplay:none;\n}\n.label-top{\n    display: block;\n    height: 22px;\n    line-height: 22px;\n    vertical-align: middle;\n}"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/dialog/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Dialog - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Dialog</h2>\n\t<p>Click below button to open or close dialog.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#dlg').dialog('open')\">Open</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#dlg').dialog('close')\">Close</a>\n\t</div>\n\t<div id=\"dlg\" class=\"easyui-dialog\" title=\"Basic Dialog\" data-options=\"iconCls:'icon-save'\" style=\"width:400px;height:200px;padding:10px\">\n\t\tThe dialog content.\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/dialog/complextoolbar.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Complex Toolbar on Dialog - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Complex Toolbar on Dialog</h2>\n\t<p>This sample shows how to create complex toolbar on dialog.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#dlg').dialog('open')\">Open</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#dlg').dialog('close')\">Close</a>\n\t</div>\n\t<div id=\"dlg\" class=\"easyui-dialog\" title=\"Complex Toolbar on Dialog\" style=\"width:400px;height:200px;padding:10px\"\n\t\t\tdata-options=\"\n\t\t\t\ticonCls: 'icon-save',\n\t\t\t\ttoolbar: '#dlg-toolbar',\n\t\t\t\tbuttons: '#dlg-buttons'\n\t\t\t\">\n\t\tThe dialog content.\n\t</div>\n\t<div id=\"dlg-toolbar\" style=\"padding:2px 0\">\n\t\t<table cellpadding=\"0\" cellspacing=\"0\" style=\"width:100%\">\n\t\t\t<tr>\n\t\t\t\t<td style=\"padding-left:2px\">\n\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-edit',plain:true\">Edit</a>\n\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-help',plain:true\">Help</a>\n\t\t\t\t</td>\n\t\t\t\t<td style=\"text-align:right;padding-right:2px\">\n\t\t\t\t\t<input class=\"easyui-searchbox\" data-options=\"prompt:'Please input somthing'\" style=\"width:150px\"></input>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</table>\n\t</div>\n\t<div id=\"dlg-buttons\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"javascript:alert('save')\">Save</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"javascript:$('#dlg').dialog('close')\">Close</a>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/dialog/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid Dialog - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid Dialog</h2>\n\t<p>This example shows how to set the width of Dialog to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-dialog\" title=\"Fluid Dialog\" style=\"width:80%;height:200px;max-width:800px;padding:10px\" data-options=\"\n\t\t\ticonCls:'icon-save',\n\t\t\tonResize:function(){\n\t\t\t\t$(this).dialog('center');\n\t\t\t}\">\n\t\t<p>width: 80%; height: 200px</p>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/dialog/toolbarbuttons.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Toolbar and Buttons - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Toolbar and Buttons</h2>\n\t<p>The toolbar and buttons can be added to dialog.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#dlg').dialog('open')\">Open</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#dlg').dialog('close')\">Close</a>\n\t</div>\n\t<div id=\"dlg\" class=\"easyui-dialog\" title=\"Toolbar and Buttons\" style=\"width:400px;height:200px;padding:10px\"\n\t\t\tdata-options=\"\n\t\t\t\ticonCls: 'icon-save',\n\t\t\t\ttoolbar: [{\n\t\t\t\t\ttext:'Add',\n\t\t\t\t\ticonCls:'icon-add',\n\t\t\t\t\thandler:function(){\n\t\t\t\t\t\talert('add')\n\t\t\t\t\t}\n\t\t\t\t},'-',{\n\t\t\t\t\ttext:'Save',\n\t\t\t\t\ticonCls:'icon-save',\n\t\t\t\t\thandler:function(){\n\t\t\t\t\t\talert('save')\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tbuttons: [{\n\t\t\t\t\ttext:'Ok',\n\t\t\t\t\ticonCls:'icon-ok',\n\t\t\t\t\thandler:function(){\n\t\t\t\t\t\talert('ok');\n\t\t\t\t\t}\n\t\t\t\t},{\n\t\t\t\t\ttext:'Cancel',\n\t\t\t\t\thandler:function(){\n\t\t\t\t\t\talert('cancel');;\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t\">\n\t\tThe dialog content.\n\t</div>\n\t\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/draggable/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Draggable - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Draggable</h2>\n\t<p>Move the boxes below by clicking on it with mouse.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-draggable\" style=\"width:200px;height:150px;background:#fafafa;border:1px solid #ccc\"></div>\n\t<div class=\"easyui-draggable\" data-options=\"handle:'#title'\" style=\"width:200px;height:150px;background:#fafafa;border:1px solid #ccc;margin-top:10px\">\n\t\t<div id=\"title\" style=\"padding:5px;background:#ccc;color:#fff\">Title</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/draggable/constrain.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Constrain Draggable - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Constrain Draggable</h2>\n\t<p>The draggable object can only be moved within its parent container.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"position:relative;overflow:hidden;width:500px;height:300px\">\n\t\t<div class=\"easyui-draggable\" data-options=\"onDrag:onDrag\" style=\"width:100px;height:100px;background:#fafafa;border:1px solid #ccc;\">\n\t\t</div>\n\t</div>\n\t<script>\n\t\tfunction onDrag(e){\n\t\t\tvar d = e.data;\n\t\t\tif (d.left < 0){d.left = 0}\n\t\t\tif (d.top < 0){d.top = 0}\n\t\t\tif (d.left + $(d.target).outerWidth() > $(d.parent).width()){\n\t\t\t\td.left = $(d.parent).width() - $(d.target).outerWidth();\n\t\t\t}\n\t\t\tif (d.top + $(d.target).outerHeight() > $(d.parent).height()){\n\t\t\t\td.top = $(d.parent).height() - $(d.target).outerHeight();\n\t\t\t}\n\t\t}\n\t</script>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/draggable/snap.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Snap Draggable - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Snap Draggable</h2>\n\t<p>This sample shows how to snap a draggable object to a 20x20 grid.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"position:relative;overflow:hidden;width:500px;height:300px\">\n\t\t<div class=\"easyui-draggable\" data-options=\"onDrag:onDrag\" style=\"width:100px;height:100px;background:#fafafa;border:1px solid #ccc;\">\n\t\t</div>\n\t</div>\n\t<script>\n\t\tfunction onDrag(e){\n\t\t\tvar d = e.data;\n\t\t\td.left = repair(d.left);\n\t\t\td.top = repair(d.top);\n\t\t\t\n\t\t\tfunction repair(v){\n\t\t\t\tvar r = parseInt(v/20)*20;\n\t\t\t\tif (Math.abs(v % 20) > 10){\n\t\t\t\t\tr += v > 0 ? 20 : -20;\n\t\t\t\t}\n\t\t\t\treturn r;\n\t\t\t}\n\t\t}\n\t</script>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/droppable/accept.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Accept a Drop - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Accept a Drop</h2>\n\t<p>Some draggable object can not be accepted.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div id=\"source\" style=\"border:1px solid #ccc;width:300px;height:400px;float:left;margin:5px;\">\n\t\tdrag me!\n\t\t<div id=\"d1\" class=\"drag\">Drag 1</div>\n\t\t<div id=\"d2\" class=\"drag\">Drag 2</div>\n\t\t<div id=\"d3\" class=\"drag\">Drag 3</div>\n\t</div>\n\t<div id=\"target\" style=\"border:1px solid #ccc;width:300px;height:400px;float:left;margin:5px;\">\n\t\tdrop here!\n\t</div>\n\t<div style=\"clear:both\"></div>\n\t<style type=\"text/css\">\n\t\t.drag{\n\t\t\twidth:100px;\n\t\t\theight:50px;\n\t\t\tpadding:10px;\n\t\t\tmargin:5px;\n\t\t\tborder:1px solid #ccc;\n\t\t\tbackground:#AACCFF;\n\t\t}\n\t\t.dp{\n\t\t\topacity:0.5;\n\t\t\tfilter:alpha(opacity=50);\n\t\t}\n\t\t.over{\n\t\t\tbackground:#FBEC88;\n\t\t}\n\t</style>\n\t<script>\n\t\t$(function(){\n\t\t\t$('.drag').draggable({\n\t\t\t\tproxy:'clone',\n\t\t\t\trevert:true,\n\t\t\t\tcursor:'auto',\n\t\t\t\tonStartDrag:function(){\n\t\t\t\t\t$(this).draggable('options').cursor='not-allowed';\n\t\t\t\t\t$(this).draggable('proxy').addClass('dp');\n\t\t\t\t},\n\t\t\t\tonStopDrag:function(){\n\t\t\t\t\t$(this).draggable('options').cursor='auto';\n\t\t\t\t}\n\t\t\t});\n\t\t\t$('#target').droppable({\n\t\t\t\taccept:'#d1,#d3',\n\t\t\t\tonDragEnter:function(e,source){\n\t\t\t\t\t$(source).draggable('options').cursor='auto';\n\t\t\t\t\t$(source).draggable('proxy').css('border','1px solid red');\n\t\t\t\t\t$(this).addClass('over');\n\t\t\t\t},\n\t\t\t\tonDragLeave:function(e,source){\n\t\t\t\t\t$(source).draggable('options').cursor='not-allowed';\n\t\t\t\t\t$(source).draggable('proxy').css('border','1px solid #ccc');\n\t\t\t\t\t$(this).removeClass('over');\n\t\t\t\t},\n\t\t\t\tonDrop:function(e,source){\n\t\t\t\t\t$(this).append(source)\n\t\t\t\t\t$(this).removeClass('over');\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t</script>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/droppable/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Droppable - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Droppable</h2>\n\t<p>Drag the boxed on left to the target area on right.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div style=\"float:left;width:200px;margin-right:20px;\">\n\t\t<div class=\"title\">Source</div>\n\t\t<div>\n\t\t\t<div class=\"dragitem\">Apple</div>\n\t\t\t<div class=\"dragitem\">Peach</div>\n\t\t\t<div class=\"dragitem\">Orange</div>\n\t\t</div>\n\t</div>\n\t<div style=\"float:left;width:200px;\">\n\t\t<div class=\"title\">Target</div>\n\t\t<div class=\"easyui-droppable targetarea\"\n\t\t\t\tdata-options=\"\n\t\t\t\t\taccept: '.dragitem',\n\t\t\t\t\tonDragEnter:function(e,source){\n\t\t\t\t\t\t$(this).html('enter');\n\t\t\t\t\t},\n\t\t\t\t\tonDragLeave: function(e,source){\n\t\t\t\t\t\t$(this).html('leave');\n\t\t\t\t\t},\n\t\t\t\t\tonDrop: function(e,source){\n\t\t\t\t\t\t$(this).html($(source).html() + ' dropped');\n\t\t\t\t\t}\n\t\t\t\t\">\n\t\t</div>\n\t</div>\n\t<div style=\"clear:both\"></div>\n\t<style type=\"text/css\">\n\t\t.title{\n\t\t\tmargin-bottom:10px;\n\t\t}\n\t\t.dragitem{\n\t\t\tborder:1px solid #ccc;\n\t\t\twidth:50px;\n\t\t\theight:50px;\n\t\t\tmargin-bottom:10px;\n\t\t}\n\t\t.targetarea{\n\t\t\tborder:1px solid red;\n\t\t\theight:150px;\n\t\t}\n\t\t.proxy{\n\t\t\tborder:1px solid #ccc;\n\t\t\twidth:80px;\n\t\t\tbackground:#fafafa;\n\t\t}\n\t</style>\n\t<script>\n\t\t$(function(){\n\t\t\t$('.dragitem').draggable({\n\t\t\t\trevert:true,\n\t\t\t\tdeltaX:10,\n\t\t\t\tdeltaY:10,\n\t\t\t\tproxy:function(source){\n\t\t\t\t\tvar n = $('<div class=\"proxy\"></div>');\n\t\t\t\t\tn.html($(source).html()).appendTo('body');\n\t\t\t\t\treturn n;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/droppable/sort.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Change Items Order - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Change Items Order</h2>\n\t<p>Drag the list items to change their order.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<ul style=\"margin:0;padding:0;margin-left:10px;\">\n\t\t<li class=\"drag-item\">Drag 1</li>\n\t\t<li class=\"drag-item\">Drag 2</li>\n\t\t<li class=\"drag-item\">Drag 3</li>\n\t\t<li class=\"drag-item\">Drag 4</li>\n\t\t<li class=\"drag-item\">Drag 5</li>\n\t\t<li class=\"drag-item\">Drag 6</li>\n\t</ul>\n\t<style type=\"text/css\">\n\t\t.drag-item{\n\t\t\tlist-style-type:none;\n\t\t\tdisplay:block;\n\t\t\tpadding:5px;\n\t\t\tborder:1px solid #ccc;\n\t\t\tmargin:2px;\n\t\t\twidth:300px;\n\t\t\tbackground:#fafafa;\n\t\t\tcolor:#444;\n\t\t}\n\t\t.indicator{\n\t\t\tposition:absolute;\n\t\t\tfont-size:9px;\n\t\t\twidth:10px;\n\t\t\theight:10px;\n\t\t\tdisplay:none;\n\t\t\tcolor:red;\n\t\t}\n\t</style>\n\t<script>\n\t\t$(function(){\n\t\t\tvar indicator = $('<div class=\"indicator\">>></div>').appendTo('body');\n\t\t\t$('.drag-item').draggable({\n\t\t\t\trevert:true,\n\t\t\t\tdeltaX:0,\n\t\t\t\tdeltaY:0\n\t\t\t}).droppable({\n\t\t\t\tonDragOver:function(e,source){\n\t\t\t\t\tindicator.css({\n\t\t\t\t\t\tdisplay:'block',\n\t\t\t\t\t\tleft:$(this).offset().left-10,\n\t\t\t\t\t\ttop:$(this).offset().top+$(this).outerHeight()-5\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonDragLeave:function(e,source){\n\t\t\t\t\tindicator.hide();\n\t\t\t\t},\n\t\t\t\tonDrop:function(e,source){\n\t\t\t\t\t$(source).insertAfter(this);\n\t\t\t\t\tindicator.hide();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t</script>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/easyloader/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic EasyLoader - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../easyloader.js\"></script>\n</head>\n<body>\n\t<h2>Basic EasyLoader</h2>\n\t<div class=\"demo-info\">\n\t\t<div class=\"demo-tip icon-tip\"></div>\n\t\t<div>Click the buttons below to load components dynamically.</div>\n\t</div>\n\t<div style=\"margin:10px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"load1()\">Load Calendar</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"load2()\">Load Dialog</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"load3()\">Load DataGrid</a>\n\t</div>\n\t<div id=\"cc\"></div>\n\t<div id=\"dd\"></div>\n\t<table id=\"tt\"></table>\n\t<script type=\"text/javascript\" src=\"../../easyloader.js\"></script>\n\t<script>\n\t\tfunction load1(){\n\t\t\tusing('calendar', function(){\n\t\t\t\t$('#cc').calendar({\n\t\t\t\t\twidth:180,\n\t\t\t\t\theight:180\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tfunction load2(){\n\t\t\tusing(['dialog','messager'], function(){\n\t\t\t\t$('#dd').dialog({\n\t\t\t\t\ttitle:'Dialog',\n\t\t\t\t\twidth:300,\n\t\t\t\t\theight:200\n\t\t\t\t});\n\t\t\t\t$.messager.show({\n\t\t\t\t\ttitle:'info',\n\t\t\t\t\tmsg:'dialog created'\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tfunction load3(){\n\t\t\tusing('datagrid', function(){\n\t\t\t\t$('#tt').datagrid({\n\t\t\t\t\ttitle:'DataGrid',\n\t\t\t\t\twidth:300,\n\t\t\t\t\theight:200,\n\t\t\t\t\tfitColumns:true,\n\t\t\t\t\tcolumns:[[\n\t\t\t\t\t\t{field:'productid',title:'Product ID',width:100},\n\t\t\t\t\t\t{field:'productname',title:'Product Name',width:200}\n\t\t\t\t\t]],\n\t\t\t\t\tdata: [\n\t\t\t\t\t\t{\"productid\":\"FI-SW-01\",\"productname\":\"Koi\"},\n\t\t\t\t\t\t{\"productid\":\"K9-DL-01\",\"productname\":\"Dalmation\"},\n\t\t\t\t\t\t{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\"},\n\t\t\t\t\t\t{\"productid\":\"RP-LI-02\",\"productname\":\"Iguana\"},\n\t\t\t\t\t\t{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\"},\n\t\t\t\t\t\t{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\"},\n\t\t\t\t\t\t{\"productid\":\"AV-CB-01\",\"productname\":\"Amazon Parrot\"}\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t</script>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/filebox/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic FileBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic FileBox</h2>\n\t<p>The filebox component represents a file field of the forms.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"Upload File\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" label=\"Name:\" labelPosition=\"top\" style=\"width:100%\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-filebox\" label=\"File1:\" labelPosition=\"top\" data-options=\"prompt:'Choose a file...'\" style=\"width:100%\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:40px\">\n\t\t\t<input class=\"easyui-filebox\" label=\"File2:\" labelPosition=\"top\" data-options=\"prompt:'Choose another file...'\" style=\"width:100%\">\n\t\t</div>\n\t\t<div>\n\t\t\t<a href=\"#\" class=\"easyui-linkbutton\" style=\"width:100%\">Upload</a>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/filebox/buttonalign.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Button Align on FileBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Button Align on FileBox</h2>\n\t<p>Change the button align to the left or right of filebox.</p>\n\t<div style=\"margin:20px 0 40px 0;\"></div>\n\t<span>Select Button Align:</span>\n\t<select onchange=\"changeAlign(this.value)\">\n\t\t<option value=\"left\">Left</option>\n\t\t<option value=\"right\" selected>Right</option>\n\t</select>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<input id=\"fb\" class=\"easyui-filebox\" style=\"width:100%\" data-options=\"prompt:'Choose a file...'\">\n\t</div>\n\n\t<script type=\"text/javascript\">\n\t\tfunction changeAlign(align){\n\t\t\t$('#fb').filebox({buttonAlign:align});\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/filebox/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid FileBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid FileBox</h2>\n\t<p>This example shows how to set the width of FileBox to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-filebox\" label=\"width: 100%\" labelPosition=\"top\" style=\"width:100%\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-filebox\" label=\"width: 80%\" labelPosition=\"top\" style=\"width:80%\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/form/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Form - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Form</h2>\n\t<p>Fill the form and submit it.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"New Topic\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<form id=\"ff\" method=\"post\">\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"name\" style=\"width:100%\" data-options=\"label:'Name:',required:true\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"email\" style=\"width:100%\" data-options=\"label:'Email:',required:true,validType:'email'\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"subject\" style=\"width:100%\" data-options=\"label:'Subject:',required:true\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"message\" style=\"width:100%;height:60px\" data-options=\"label:'Message:',multiline:true\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<select class=\"easyui-combobox\" name=\"language\" label=\"Language\" style=\"width:100%\"><option value=\"ar\">Arabic</option><option value=\"bg\">Bulgarian</option><option value=\"ca\">Catalan</option><option value=\"zh-cht\">Chinese Traditional</option><option value=\"cs\">Czech</option><option value=\"da\">Danish</option><option value=\"nl\">Dutch</option><option value=\"en\" selected=\"selected\">English</option><option value=\"et\">Estonian</option><option value=\"fi\">Finnish</option><option value=\"fr\">French</option><option value=\"de\">German</option><option value=\"el\">Greek</option><option value=\"ht\">Haitian Creole</option><option value=\"he\">Hebrew</option><option value=\"hi\">Hindi</option><option value=\"mww\">Hmong Daw</option><option value=\"hu\">Hungarian</option><option value=\"id\">Indonesian</option><option value=\"it\">Italian</option><option value=\"ja\">Japanese</option><option value=\"ko\">Korean</option><option value=\"lv\">Latvian</option><option value=\"lt\">Lithuanian</option><option value=\"no\">Norwegian</option><option value=\"fa\">Persian</option><option value=\"pl\">Polish</option><option value=\"pt\">Portuguese</option><option value=\"ro\">Romanian</option><option value=\"ru\">Russian</option><option value=\"sk\">Slovak</option><option value=\"sl\">Slovenian</option><option value=\"es\">Spanish</option><option value=\"sv\">Swedish</option><option value=\"th\">Thai</option><option value=\"tr\">Turkish</option><option value=\"uk\">Ukrainian</option><option value=\"vi\">Vietnamese</option></select>\n\t\t\t</div>\n\t\t</form>\n\t\t<div style=\"text-align:center;padding:5px 0\">\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"submitForm()\" style=\"width:80px\">Submit</a>\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"clearForm()\" style=\"width:80px\">Clear</a>\n\t\t</div>\n\t</div>\n\t<script>\n\t\tfunction submitForm(){\n\t\t\t$('#ff').form('submit');\n\t\t}\n\t\tfunction clearForm(){\n\t\t\t$('#ff').form('clear');\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/form/floatinglabel.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Floating Label - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/material-blue/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../source/jquery.validatebox.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../source/jquery.textbox.js\"></script>\n</head>\n<body>\n\t<h2>Floating Label</h2>\n\t<p>This example shows how to create inspired text fields with animated floating labels.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"New Topic\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<form id=\"ff\" method=\"post\">\n\t\t\t<div class=\"form-floating-label form-field\" style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"name\" style=\"width:100%\" data-options=\"label:'Name:',labelPosition:'top'\">\n\t\t\t</div>\n\t\t\t<div class=\"form-floating-label form-field\" style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"email\" style=\"width:100%\" data-options=\"label:'Email:',labelPosition:'top',validType:'email'\">\n\t\t\t</div>\n\t\t\t<div class=\"form-floating-label form-field\" style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"subject\" style=\"width:100%\" data-options=\"label:'Subject:',labelPosition:'top'\">\n\t\t\t</div>\n\t\t\t<div class=\"form-floating-label form-field\" style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"message\" style=\"width:100%;min-height:100px\" data-options=\"label:'Message:',labelPosition:'top',multiline:true\">\n\t\t\t</div>\n\t\t</form>\n\t\t<div style=\"text-align:center;padding:5px 0\">\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"submitForm()\" style=\"width:80px\">Submit</a>\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"clearForm()\" style=\"width:80px\">Clear</a>\n\t\t</div>\n\t</div>\n\t<script>\n\t\tfunction submitForm(){\n\t\t\t$('#ff').form('submit');\n\t\t}\n\t\tfunction clearForm(){\n\t\t\t$('#ff').form('clear');\n\t\t}\n\t\tfunction err(target, message){\n\t\t\tvar t = $(target);\n\t\t\tif (t.hasClass('textbox-text')){\n\t\t\t\tt = t.parent();\n\t\t\t}\n\t\t\tvar m = t.next('.error-message');\n\t\t\tif (!m.length){\n\t\t\t\tm = $('<div class=\"error-message\"></div>').insertAfter(t);\n\t\t\t}\n\t\t\tm.html(message);\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/form/form_data1.json",
    "content": "{\n\t\"name\":\"easyui\",\n\t\"email\":\"easyui@gmail.com\",\n\t\"subject\":\"Subject Title\",\n\t\"message\":\"Message Content\",\n\t\"language\":\"de\",\n\t\"accept\":\"true\"\n}"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/form/load.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Load Form Data - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Load Form Data</h2>\n\t<p>Click the buttons below to load form data.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"loadLocal()\">LoadLocal</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"loadRemote()\">LoadRemote</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"clearForm()\">Clear</a>\n\t</div>\n\t<div class=\"easyui-panel\" title=\"New Topic\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<form id=\"ff\" method=\"post\">\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"name\" style=\"width:100%\" data-options=\"label:'Name:',required:true\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"email\" style=\"width:100%\" data-options=\"label:'Email:',required:true,validType:'email'\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"subject\" style=\"width:100%\" data-options=\"label:'Subject:',required:true\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"message\" style=\"width:100%;height:60px\" data-options=\"label:'Message:',multiline:true\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<select class=\"easyui-combobox\" name=\"language\" label=\"Language\" style=\"width:100%\"><option value=\"ar\">Arabic</option><option value=\"bg\">Bulgarian</option><option value=\"ca\">Catalan</option><option value=\"zh-cht\">Chinese Traditional</option><option value=\"cs\">Czech</option><option value=\"da\">Danish</option><option value=\"nl\">Dutch</option><option value=\"en\" selected=\"selected\">English</option><option value=\"et\">Estonian</option><option value=\"fi\">Finnish</option><option value=\"fr\">French</option><option value=\"de\">German</option><option value=\"el\">Greek</option><option value=\"ht\">Haitian Creole</option><option value=\"he\">Hebrew</option><option value=\"hi\">Hindi</option><option value=\"mww\">Hmong Daw</option><option value=\"hu\">Hungarian</option><option value=\"id\">Indonesian</option><option value=\"it\">Italian</option><option value=\"ja\">Japanese</option><option value=\"ko\">Korean</option><option value=\"lv\">Latvian</option><option value=\"lt\">Lithuanian</option><option value=\"no\">Norwegian</option><option value=\"fa\">Persian</option><option value=\"pl\">Polish</option><option value=\"pt\">Portuguese</option><option value=\"ro\">Romanian</option><option value=\"ru\">Russian</option><option value=\"sk\">Slovak</option><option value=\"sl\">Slovenian</option><option value=\"es\">Spanish</option><option value=\"sv\">Swedish</option><option value=\"th\">Thai</option><option value=\"tr\">Turkish</option><option value=\"uk\">Ukrainian</option><option value=\"vi\">Vietnamese</option></select>\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<label for=\"accept\" class=\"textbox-label\">Accept:</label>\n\t\t\t\t<input id=\"accept\" type=\"checkbox\" name=\"accept\" value=\"true\">\n\t\t\t</div>\n\t\t</form>\n\t</div>\n\t<script>\n\t\tfunction loadLocal(){\n\t\t\t$('#ff').form('load',{\n\t\t\t\tname:'myname',\n\t\t\t\temail:'mymail@gmail.com',\n\t\t\t\tsubject:'subject',\n\t\t\t\tmessage:'message',\n\t\t\t\tlanguage:'en',\n\t\t\t\taccept:true\n\t\t\t});\n\t\t}\n\t\tfunction loadRemote(){\n\t\t\t$('#ff').form('load', 'form_data1.json');\n\t\t}\n\t\tfunction clearForm(){\n\t\t\t$('#ff').form('clear');\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/form/validateonsubmit.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Validate Form on Submit - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Validate Form on Submit</h2>\n\t<p>The form does not perform validation before being submitted.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"New Topic\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<form id=\"ff\" class=\"easyui-form\" method=\"post\" data-options=\"novalidate:true\">\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"name\" style=\"width:100%\" data-options=\"label:'Name:',required:true\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"email\" style=\"width:100%\" data-options=\"label:'Email:',required:true,validType:'email'\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"subject\" style=\"width:100%\" data-options=\"label:'Subject:',required:true\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<input class=\"easyui-textbox\" name=\"message\" style=\"width:100%;height:60px\" data-options=\"label:'Message:',multiline:true\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:20px\">\n\t\t\t\t<select class=\"easyui-combobox\" name=\"language\" label=\"Language\" style=\"width:100%\"><option value=\"ar\">Arabic</option><option value=\"bg\">Bulgarian</option><option value=\"ca\">Catalan</option><option value=\"zh-cht\">Chinese Traditional</option><option value=\"cs\">Czech</option><option value=\"da\">Danish</option><option value=\"nl\">Dutch</option><option value=\"en\" selected=\"selected\">English</option><option value=\"et\">Estonian</option><option value=\"fi\">Finnish</option><option value=\"fr\">French</option><option value=\"de\">German</option><option value=\"el\">Greek</option><option value=\"ht\">Haitian Creole</option><option value=\"he\">Hebrew</option><option value=\"hi\">Hindi</option><option value=\"mww\">Hmong Daw</option><option value=\"hu\">Hungarian</option><option value=\"id\">Indonesian</option><option value=\"it\">Italian</option><option value=\"ja\">Japanese</option><option value=\"ko\">Korean</option><option value=\"lv\">Latvian</option><option value=\"lt\">Lithuanian</option><option value=\"no\">Norwegian</option><option value=\"fa\">Persian</option><option value=\"pl\">Polish</option><option value=\"pt\">Portuguese</option><option value=\"ro\">Romanian</option><option value=\"ru\">Russian</option><option value=\"sk\">Slovak</option><option value=\"sl\">Slovenian</option><option value=\"es\">Spanish</option><option value=\"sv\">Swedish</option><option value=\"th\">Thai</option><option value=\"tr\">Turkish</option><option value=\"uk\">Ukrainian</option><option value=\"vi\">Vietnamese</option></select>\n\t\t\t</div>\n\t\t</form>\n\t\t<div style=\"text-align:center;padding:5px 0\">\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"submitForm()\" style=\"width:80px\">Submit</a>\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"clearForm()\" style=\"width:80px\">Clear</a>\n\t\t</div>\n\t</div>\n\t<script>\n\t\tfunction submitForm(){\n\t\t\t$('#ff').form('submit',{\n\t\t\t\tonSubmit:function(){\n\t\t\t\t\treturn $(this).form('enableValidation').form('validate');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfunction clearForm(){\n\t\t\t$('#ff').form('clear');\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/_content.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>AJAX Content</title>\n</head>\n<body>\n\t<p style=\"font-size:14px\">jQuery EasyUI framework help you build your web page easily.</p>\n\t<ul>\n\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t<li>easyui provides essential functionality for building modern, interactive, javascript applications.</li>\n\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t<li>complete framework for HTML5 web page.</li>\n\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t<li>easyui is very easy but powerful.</li>\n\t</ul>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/addremove.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Add and Remove Layout - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Add and Remove Layout</h2>\n\t<p>Click the buttons below to add or remove region panel of layout.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<span>Select Region Panel:</span>\n\t\t<select id=\"region\">\n\t\t\t<option value=\"north\">North</option>\n\t\t\t<option value=\"south\">South</option>\n\t\t\t<option value=\"east\">East</option>\n\t\t\t<option value=\"west\">West</option>\n\t\t</select>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"addPanel()\">Add</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"removePanel()\">Remove</a>\n\t</div>\n\t<div id=\"cc\" class=\"easyui-layout\" style=\"width:700px;height:350px;\">\n\t\t<div data-options=\"region:'north'\" style=\"height:50px\"></div>\n\t\t<div data-options=\"region:'south',split:true\" style=\"height:50px;\"></div>\n\t\t<div data-options=\"region:'east',split:true\" title=\"East\" style=\"width:100px;\"></div>\n\t\t<div data-options=\"region:'west',split:true\" title=\"West\" style=\"width:100px;\"></div>\n\t\t<div data-options=\"region:'center',title:'Center'\"></div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction addPanel(){\n\t\t\tvar region = $('#region').val();\n\t\t\tvar options = {\n\t\t\t\tregion: region\n\t\t\t};\n\t\t\tif (region=='north' || region=='south'){\n\t\t\t\toptions.height = 50;\n\t\t\t} else {\n\t\t\t\toptions.width = 100;\n\t\t\t\toptions.split = true;\n\t\t\t\toptions.title = $('#region option:selected').text();\n\t\t\t}\n\t\t\t$('#cc').layout('add', options);\n\t\t}\n\t\tfunction removePanel(){\n\t\t\t$('#cc').layout('remove', $('#region').val());\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/autoheight.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Auto Height for Layout - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Auto Height for Layout</h2>\n\t<p>This example shows how to auto adjust layout height after dynamically adding items.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"addItem()\">Add Item</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"removeItem()\">Remove Item</a>\n\t</div>\n\t<div id=\"cc\" style=\"width:700px;height:350px;\">\n\t\t<div data-options=\"region:'north'\" style=\"height:50px\"></div>\n\t\t<div data-options=\"region:'south'\" style=\"height:50px;\"></div>\n\t\t<div data-options=\"region:'west'\" style=\"width:150px;\"></div>\n\t\t<div data-options=\"region:'center'\" style=\"padding:20px\">\n\t\t\t<p>Panel Content.</p>\n\t\t\t<p>Panel Content.</p>\n\t\t\t<p>Panel Content.</p>\n\t\t\t<p>Panel Content.</p>\n\t\t\t<p>Panel Content.</p>\n\t\t</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\t$(function(){\n\t\t\t$('#cc').layout();\n\t\t\tsetHeight();\n\t\t});\n\t\t\n\t\tfunction addItem(){\n\t\t\t$('#cc').layout('panel','center').append('<p>More Panel Content.</p>');\n\t\t\tsetHeight();\n\t\t}\n\t\t\n\t\tfunction removeItem(){\n\t\t\t$('#cc').layout('panel','center').find('p:last').remove();\n\t\t\tsetHeight();\n\t\t}\n\t\t\n\t\tfunction setHeight(){\n\t\t\tvar c = $('#cc');\n\t\t\tvar p = c.layout('panel','center');\t// get the center panel\n\t\t\tvar oldHeight = p.panel('panel').outerHeight();\n\t\t\tp.panel('resize', {height:'auto'});\n\t\t\tvar newHeight = p.panel('panel').outerHeight();\n\t\t\tc.layout('resize',{\n\t\t\t\theight: (c.height() + newHeight - oldHeight)\n\t\t\t});\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Layout - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Layout</h2>\n\t<p>The layout contains north,south,west,east and center regions.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-layout\" style=\"width:700px;height:350px;\">\n\t\t<div data-options=\"region:'north'\" style=\"height:50px\"></div>\n\t\t<div data-options=\"region:'south',split:true\" style=\"height:50px;\"></div>\n\t\t<div data-options=\"region:'east',split:true\" title=\"East\" style=\"width:100px;\"></div>\n\t\t<div data-options=\"region:'west',split:true\" title=\"West\" style=\"width:100px;\"></div>\n\t\t<div data-options=\"region:'center',title:'Main Title',iconCls:'icon-ok'\">\n\t\t\t<table class=\"easyui-datagrid\"\n\t\t\t\t\tdata-options=\"url:'datagrid_data1.json',method:'get',border:false,singleSelect:true,fit:true,fitColumns:true\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th data-options=\"field:'itemid'\" width=\"80\">Item ID</th>\n\t\t\t\t\t\t<th data-options=\"field:'productid'\" width=\"100\">Product ID</th>\n\t\t\t\t\t\t<th data-options=\"field:'listprice',align:'right'\" width=\"80\">List Price</th>\n\t\t\t\t\t\t<th data-options=\"field:'unitcost',align:'right'\" width=\"80\">Unit Cost</th>\n\t\t\t\t\t\t<th data-options=\"field:'attr1'\" width=\"150\">Attribute</th>\n\t\t\t\t\t\t<th data-options=\"field:'status',align:'center'\" width=\"60\">Status</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t</table>\n\t\t</div>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/collapsetitle.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Collapse Title in Layout - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Collapse Title in Layout</h2>\n\t<p>The title bar will display while collapse a region panel.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-layout\" style=\"width:700px;height:350px;\">\n\t\t<div data-options=\"region:'north'\" style=\"height:50px\"></div>\n\t\t<div data-options=\"region:'south',split:true\" style=\"height:50px;\"></div>\n\t\t<div data-options=\"region:'east',split:true,hideCollapsedContent:false\" title=\"East\" style=\"width:100px;\"></div>\n\t\t<div data-options=\"region:'west',split:true,hideCollapsedContent:false,collapsed:true\" title=\"West\" style=\"width:100px;\"></div>\n\t\t<div data-options=\"region:'center',title:'Main Title'\">\n\t\t\t<table class=\"easyui-datagrid\"\n\t\t\t\t\tdata-options=\"url:'datagrid_data1.json',method:'get',border:false,singleSelect:true,fit:true,fitColumns:true\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th data-options=\"field:'itemid'\" width=\"80\">Item ID</th>\n\t\t\t\t\t\t<th data-options=\"field:'productid'\" width=\"100\">Product ID</th>\n\t\t\t\t\t\t<th data-options=\"field:'listprice',align:'right'\" width=\"80\">List Price</th>\n\t\t\t\t\t\t<th data-options=\"field:'unitcost',align:'right'\" width=\"80\">Unit Cost</th>\n\t\t\t\t\t\t<th data-options=\"field:'attr1'\" width=\"150\">Attribute</th>\n\t\t\t\t\t\t<th data-options=\"field:'status',align:'center'\" width=\"60\">Status</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t</table>\n\t\t</div>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/complex.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Complex Layout - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Complex Layout</h2>\n\t<p>This sample shows how to create a complex layout.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-layout\" style=\"width:700px;height:350px;\">\n\t\t<div data-options=\"region:'north'\" style=\"height:50px\"></div>\n\t\t<div data-options=\"region:'south',split:true\" style=\"height:50px;\"></div>\n\t\t<div data-options=\"region:'east',split:true\" title=\"East\" style=\"width:180px;\">\n\t\t\t<ul class=\"easyui-tree\" data-options=\"url:'tree_data1.json',method:'get',animate:true,dnd:true\"></ul>\n\t\t</div>\n\t\t<div data-options=\"region:'west',split:true\" title=\"West\" style=\"width:100px;\">\n\t\t\t<div class=\"easyui-accordion\" data-options=\"fit:true,border:false\">\n\t\t\t\t<div title=\"Title1\" style=\"padding:10px;\">\n\t\t\t\t\tcontent1\n\t\t\t\t</div>\n\t\t\t\t<div title=\"Title2\" data-options=\"selected:true\" style=\"padding:10px;\">\n\t\t\t\t\tcontent2\n\t\t\t\t</div>\n\t\t\t\t<div title=\"Title3\" style=\"padding:10px\">\n\t\t\t\t\tcontent3\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div data-options=\"region:'center',title:'Main Title',iconCls:'icon-ok'\">\n\t\t\t<div class=\"easyui-tabs\" data-options=\"fit:true,border:false,plain:true\">\n\t\t\t\t<div title=\"About\" data-options=\"href:'_content.html'\" style=\"padding:10px\"></div>\n\t\t\t\t<div title=\"DataGrid\" style=\"padding:5px\">\n\t\t\t\t\t<table class=\"easyui-datagrid\"\n\t\t\t\t\t\t\tdata-options=\"url:'datagrid_data1.json',method:'get',singleSelect:true,fit:true,fitColumns:true\">\n\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<th data-options=\"field:'itemid'\" width=\"80\">Item ID</th>\n\t\t\t\t\t\t\t\t<th data-options=\"field:'productid'\" width=\"100\">Product ID</th>\n\t\t\t\t\t\t\t\t<th data-options=\"field:'listprice',align:'right'\" width=\"80\">List Price</th>\n\t\t\t\t\t\t\t\t<th data-options=\"field:'unitcost',align:'right'\" width=\"80\">Unit Cost</th>\n\t\t\t\t\t\t\t\t<th data-options=\"field:'attr1'\" width=\"150\">Attribute</th>\n\t\t\t\t\t\t\t\t<th data-options=\"field:'status',align:'center'\" width=\"50\">Status</th>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</thead>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/customcollapsetitle.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom Collapse Title in Layout - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom Collapse Title in Layout</h2>\n\t<p>Any components can display on the title bar of a collapsed panel.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div id=\"cc\" class=\"easyui-layout\" style=\"width:700px;height:350px;\">\n\t\t<div data-options=\"region:'east',split:true,hideCollapsedContent:false\" title=\"East\" style=\"width:100px;\"></div>\n\t\t<div data-options=\"region:'west',split:true,collapsed:true,\n\t\t\t\thideExpandTool: true,\n\t\t\t\texpandMode: null,\n\t\t\t\thideCollapsedContent: false,\n\t\t\t\tcollapsedSize: 68,\n\t\t\t\tcollapsedContent: function(){\n\t\t\t\t\treturn $('#titlebar');\n\t\t\t\t}\n\t\t\t\t\" title=\"West\" style=\"width:100px;\"></div>\n\t\t<div data-options=\"region:'center',title:'Main Title'\">\n\t\t\t<table class=\"easyui-datagrid\"\n\t\t\t\t\tdata-options=\"url:'datagrid_data1.json',method:'get',border:false,singleSelect:true,fit:true,fitColumns:true\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th data-options=\"field:'itemid'\" width=\"80\">Item ID</th>\n\t\t\t\t\t\t<th data-options=\"field:'productid'\" width=\"100\">Product ID</th>\n\t\t\t\t\t\t<th data-options=\"field:'listprice',align:'right'\" width=\"80\">List Price</th>\n\t\t\t\t\t\t<th data-options=\"field:'unitcost',align:'right'\" width=\"80\">Unit Cost</th>\n\t\t\t\t\t\t<th data-options=\"field:'attr1'\" width=\"150\">Attribute</th>\n\t\t\t\t\t\t<th data-options=\"field:'status',align:'center'\" width=\"60\">Status</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t</table>\n\t\t</div>\n\t</div>\n\t<div id=\"titlebar\" style=\"padding:2px\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" style=\"width:100%\" data-options=\"iconCls:'layout-button-right'\" onclick=\"$('#cc').layout('expand','west')\"></a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" style=\"width:100%\" data-options=\"iconCls:'icon-large-picture',size:'large',iconAlign:'top'\">Picture</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" style=\"width:100%\" data-options=\"iconCls:'icon-large-shapes',size:'large',iconAlign:'top'\">Shapes</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" style=\"width:100%\" data-options=\"iconCls:'icon-large-smartart',size:'large',iconAlign:'top'\">SmartArt</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" style=\"width:100%\" data-options=\"iconCls:'icon-large-chart',size:'large',iconAlign:'top'\">Chart</a>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/datagrid_data1.json",
    "content": "{\"total\":28,\"rows\":[\n\t{\"productid\":\"FI-SW-01\",\"productname\":\"Koi\",\"unitcost\":10.00,\"status\":\"P\",\"listprice\":36.50,\"attr1\":\"Large\",\"itemid\":\"EST-1\"},\n\t{\"productid\":\"K9-DL-01\",\"productname\":\"Dalmation\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":18.50,\"attr1\":\"Spotted Adult Female\",\"itemid\":\"EST-10\"},\n\t{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":38.50,\"attr1\":\"Venomless\",\"itemid\":\"EST-11\"},\n\t{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":26.50,\"attr1\":\"Rattleless\",\"itemid\":\"EST-12\"},\n\t{\"productid\":\"RP-LI-02\",\"productname\":\"Iguana\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":35.50,\"attr1\":\"Green Adult\",\"itemid\":\"EST-13\"},\n\t{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":158.50,\"attr1\":\"Tailless\",\"itemid\":\"EST-14\"},\n\t{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":83.50,\"attr1\":\"With tail\",\"itemid\":\"EST-15\"},\n\t{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":23.50,\"attr1\":\"Adult Female\",\"itemid\":\"EST-16\"},\n\t{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":89.50,\"attr1\":\"Adult Male\",\"itemid\":\"EST-17\"},\n\t{\"productid\":\"AV-CB-01\",\"productname\":\"Amazon Parrot\",\"unitcost\":92.00,\"status\":\"P\",\"listprice\":63.50,\"attr1\":\"Adult Male\",\"itemid\":\"EST-18\"}\n]}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid Layout - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid Layout</h2>\n\t<p>Percentage width of region panel in a layout.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-layout\" style=\"width:700px;height:350px;\">\n\t\t<div id=\"p\" data-options=\"region:'west'\" title=\"West\" style=\"width:30%;padding:10px\">\n\t\t\t<p>width: 30%</p>\n\t\t</div>\n\t\t<div data-options=\"region:'center'\" title=\"Center\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/full.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Full Layout - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body class=\"easyui-layout\">\n\t<div data-options=\"region:'north',border:false\" style=\"height:60px;background:#B3DFDA;padding:10px\">north region</div>\n\t<div data-options=\"region:'west',split:true,title:'West'\" style=\"width:150px;padding:10px;\">west content</div>\n\t<div data-options=\"region:'east',split:true,collapsed:true,title:'East'\" style=\"width:100px;padding:10px;\">east region</div>\n\t<div data-options=\"region:'south',border:false\" style=\"height:50px;background:#A9FACD;padding:10px;\">south region</div>\n\t<div data-options=\"region:'center',title:'Center'\"></div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/nestedlayout.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Nested Layout - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Nested Layout</h2>\n\t<p>The layout region panel contains another layout or other components.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-layout\" style=\"width:700px;height:350px;\">\n\t\t<div data-options=\"region:'north'\" style=\"height:50px\"></div>\n\t\t<div data-options=\"region:'south',split:true\" style=\"height:50px;\"></div>\n\t\t<div data-options=\"region:'east',split:true\" title=\"East\" style=\"width:180px;\"></div>\n\t\t<div data-options=\"region:'west',split:true\" title=\"West\" style=\"width:100px;\"></div>\n\t\t<div data-options=\"region:'center',iconCls:'icon-ok'\" title=\"Center\" style=\"padding:5px\">\n\t\t\t<div class=\"easyui-layout\" data-options=\"fit:true\">\n\t\t\t\t<div data-options=\"region:'north',split:true\" style=\"height:50px\"></div>\n\t\t\t\t<div data-options=\"region:'west',split:true\" style=\"width:100px\"></div>\n\t\t\t\t<div data-options=\"region:'center'\"></div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/nocollapsible.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>No collapsible button in Layout - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>No collapsible button in Layout</h2>\n\t<p>The layout region panel has no collapsible button.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-layout\" style=\"width:700px;height:350px;\">\n\t\t<div data-options=\"region:'north'\" style=\"height:50px\"></div>\n\t\t<div data-options=\"region:'south',split:true\" style=\"height:50px;\"></div>\n\t\t<div data-options=\"region:'east',split:true,title:'East',collapsible:false\" style=\"width:250px;\">\n\t\t\t<table id=\"tt\" class=\"easyui-propertygrid\" data-options=\"\n\t\t\t\t\t\turl: 'propertygrid_data1.json',\n\t\t\t\t\t\tmethod: 'get',\n\t\t\t\t\t\tshowGroup: true,\n\t\t\t\t\t\tfit: true,\n\t\t\t\t\t\tborder: false\n\t\t\t\t\t\">\n\t\t\t</table>\n\t\t</div>\n\t\t<div data-options=\"region:'center',title:'Main Title',iconCls:'icon-ok',href:'_content.html'\" style=\"padding:10px\">\n\t\t</div>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/propertygrid_data1.json",
    "content": "{\"total\":7,\"rows\":[\n\t{\"name\":\"Name\",\"value\":\"Bill Smith\",\"group\":\"ID Settings\",\"editor\":\"text\"},\n\t{\"name\":\"Address\",\"value\":\"\",\"group\":\"ID Settings\",\"editor\":\"text\"},\n\t{\"name\":\"Age\",\"value\":\"40\",\"group\":\"ID Settings\",\"editor\":\"numberbox\"},\n\t{\"name\":\"Birthday\",\"value\":\"01/02/2012\",\"group\":\"ID Settings\",\"editor\":\"datebox\"},\n\t{\"name\":\"SSN\",\"value\":\"123-456-7890\",\"group\":\"ID Settings\",\"editor\":\"text\"},\n\t{\"name\":\"Email\",\"value\":\"bill@gmail.com\",\"group\":\"Marketing Settings\",\"editor\":{\n\t\t\"type\":\"validatebox\",\n\t\t\"options\":{\n\t\t\t\"validType\":\"email\"\n\t\t}\n\t}},\n\t{\"name\":\"FrequentBuyer\",\"value\":\"false\",\"group\":\"Marketing Settings\",\"editor\":{\n\t\t\"type\":\"checkbox\",\n\t\t\"options\":{\n\t\t\t\"on\":true,\n\t\t\t\"off\":false\n\t\t}\n\t}}\n]}"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/layout/tree_data1.json",
    "content": "[{\n\t\"id\":1,\n\t\"text\":\"My Documents\",\n\t\"children\":[{\n\t\t\"id\":11,\n\t\t\"text\":\"Photos\",\n\t\t\"state\":\"closed\",\n\t\t\"children\":[{\n\t\t\t\"id\":111,\n\t\t\t\"text\":\"Friend\"\n\t\t},{\n\t\t\t\"id\":112,\n\t\t\t\"text\":\"Wife\"\n\t\t},{\n\t\t\t\"id\":113,\n\t\t\t\"text\":\"Company\"\n\t\t}]\n\t},{\n\t\t\"id\":12,\n\t\t\"text\":\"Program Files\",\n\t\t\"children\":[{\n\t\t\t\"id\":121,\n\t\t\t\"text\":\"Intel\"\n\t\t},{\n\t\t\t\"id\":122,\n\t\t\t\"text\":\"Java\",\n\t\t\t\"attributes\":{\n\t\t\t\t\"p1\":\"Custom Attribute1\",\n\t\t\t\t\"p2\":\"Custom Attribute2\"\n\t\t\t}\n\t\t},{\n\t\t\t\"id\":123,\n\t\t\t\"text\":\"Microsoft Office\"\n\t\t},{\n\t\t\t\"id\":124,\n\t\t\t\"text\":\"Games\",\n\t\t\t\"checked\":true\n\t\t}]\n\t},{\n\t\t\"id\":13,\n\t\t\"text\":\"index.html\"\n\t},{\n\t\t\"id\":14,\n\t\t\"text\":\"about.html\"\n\t},{\n\t\t\"id\":15,\n\t\t\"text\":\"welcome.html\"\n\t}]\n}]\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/linkbutton/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic LinkButton - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic LinkButton</h2>\n\t<p>Buttons can be created from &lt;a&gt; or &lt;button&gt; elements.</p>\n\t<div style=\"margin:10px 0 40px 0;\"></div>\n\t<p>Basic Buttons</p>\n\t<div style=\"padding:5px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-add'\">Add</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-remove'\">Remove</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-save'\">Save</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-cut',disabled:true\">Cut</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\">Text Button</a>\n\t</div>\n\t<p>Fixed Width Buttons</p>\n\t<div style=\"padding:5px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-search'\" style=\"width:80px\">Search</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-print'\" style=\"width:80px\">Print</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-reload'\" style=\"width:80px\">Reload</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-help'\" style=\"width:80px\">Help</a>\n\t</div>\n\t\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/linkbutton/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid LinkButton - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid LinkButton</h2>\n\t<p>This example shows how to set the width of LinkButton to a percentage of its parent container.</p>\n\t<div style=\"margin:10px 0 40px 0;\"></div>\n\t<p>width: 15%</p>\n\t<div style=\"padding:5px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-add'\" style=\"width:15%\">Add</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-remove'\" style=\"width:15%\">Remove</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-save'\" style=\"width:15%\">Save</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-cut',disabled:true\" style=\"width:15%\">Cut</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" style=\"width:15%\">Text Button</a>\n\t</div>\n\t<p>width: 20%</p>\n\t<div style=\"padding:5px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-search'\" style=\"width:20%\">Search</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-print'\" style=\"width:20%\">Print</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-reload'\" style=\"width:20%\">Reload</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-help'\" style=\"width:20%\">Help</a>\n\t</div>\n\t\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/linkbutton/group.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Button Group - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Button Group</h2>\n\t<p>In a button group only one button can be selected.</p>\n\t<div style=\"margin:10px 0 40px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"toggle:true,group:'g1'\">Button 1</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"toggle:true,group:'g1',selected:true\">Button 2</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"toggle:true,group:'g1'\">Button 3</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"toggle:true,group:'g1'\">Button 4</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"toggle:true,group:'g1'\">Button 5</a>\n\t</div>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"toggle:true,group:'g2',plain:true\">Button 1</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"toggle:true,group:'g2',plain:true,selected:true\">Button 2</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"toggle:true,group:'g2',plain:true\">Button 3</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"toggle:true,group:'g2',plain:true\">Button 4</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"toggle:true,group:'g2',plain:true\">Button 5</a>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/linkbutton/iconalign.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Icon Align on LinkButton - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Icon Align on LinkButton</h2>\n\t<p>Change the icon align to place icon on left, right, top or bottom of button.</p>\n\t<div style=\"margin:10px 0 40px 0;\"></div>\n\t<div style=\"margin:10px 0 20px 0\">\n\t\t<span>Select Icon Align: </span>\n\t\t<select onchange=\"$('#button-bar a').linkbutton({iconAlign:this.value})\">\n\t\t\t<option value=\"left\">Left</option>\n\t\t\t<option value=\"right\">Right</option>\n\t\t\t<option value=\"top\">Top</option>\n\t\t\t<option value=\"bottom\">Bottom</option>\n\t\t</select>\n\t</div>\n\t<div id=\"button-bar\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-add'\">Add</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-remove'\">Remove</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-save'\">Save</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-cut',disabled:true\">Cut</a>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/linkbutton/plain.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Plain LinkButton - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Plain LinkButton</h2>\n\t<p>The buttons with plain style have transparent background.</p>\n\t<div style=\"margin:10px 0 40px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true,iconCls:'icon-cancel'\">Cancel</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true,iconCls:'icon-reload'\">Refresh</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true,iconCls:'icon-search'\">Search</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true\">Text Button</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true,iconCls:'icon-print'\">Print</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true,iconCls:'icon-help'\"> </a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true,iconCls:'icon-save'\"></a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true,iconCls:'icon-back'\"></a>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/linkbutton/size.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>LinkButton Size - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>LinkButton Size</h2>\n\t<p>This sample shows how to display small buttons and large buttons.</p>\n\t<div style=\"margin:10px 0 40px 0;\"></div>\n\t<p>Small Buttons</p>\n\t<div style=\"padding:5px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-add'\">Add</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-remove'\">Remove</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-save'\">Save</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-cut',disabled:true\">Cut</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\">Text Button</a>\n\t</div>\n\t<p>Large Buttons</p>\n\t<div style=\"padding:5px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-picture',size:'large',iconAlign:'top'\">Picture</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-clipart',size:'large',iconAlign:'top'\">Clip Art</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-shapes',size:'large',iconAlign:'top'\">Shapes</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-smartart',size:'large',iconAlign:'top'\">SmartArt</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-chart',size:'large',iconAlign:'top'\">Chart</a>\n\t</div>\n\t\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/linkbutton/style.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Style LinkButton - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/color.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Style LinkButton</h2>\n\t<p>This example shows how to style a linkbutton.</p>\n\t<div style=\"margin:10px 0 40px 0;\"></div>\n\t<div style=\"margin:20px 0\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton c1\" style=\"width:120px\">Button1</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton c2\" style=\"width:120px\">Button2</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton c3\" style=\"width:120px\">Button3</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton c4\" style=\"width:120px\">Button4</a>\n\t</div>\n\t<div style=\"margin:20px 0\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton c5\" style=\"width:120px\">Button5</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton c6\" style=\"width:120px\">Button6</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton c7\" style=\"width:120px\">Button7</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton c8\" style=\"width:120px\">Button8</a>\n\t</div>\n\n\t\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/linkbutton/toggle.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Toggle Button - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Toggle Button</h2>\n\t<p>Click the button below to switch its selected state.</p>\n\t<div style=\"margin:10px 0 40px 0;\"></div>\n\t<div style=\"padding:5px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-add',toggle:true\">Add</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-remove',toggle:true\">Remove</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-save',toggle:true,selected:true\">Save</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-cut',toggle:true\">Cut</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"toggle:true\">Text Button</a>\n\t</div>\n\t\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/maskedbox/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic MaskedBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic MaskedBox</h2>\n\t<p>The maskedbox enforces its structure as the user types.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"Basic MaskedBox\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-maskedbox\" mask=\"(999) 999-9999\" label=\"Phone Number:\" labelPosition=\"top\" style=\"width:100%\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-maskedbox\" mask=\"9999 9999 9999 9999\" label=\"Credit Card:\" labelPosition=\"top\" style=\"width:100%\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-maskedbox\" mask=\"99%\" label=\"Percent:\" labelPosition=\"top\" style=\"width:100%\">\n\t\t</div>\n\t</div>\n\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/menu/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Menu - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Menu</h2>\n\t<p>Right click on page to display menu.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t\n\t<div id=\"mm\" class=\"easyui-menu\" style=\"width:120px;\">\n\t\t<div onclick=\"javascript:alert('new')\">New</div>\n\t\t<div>\n\t\t\t<span>Open</span>\n\t\t\t<div style=\"width:150px;\">\n\t\t\t\t<div><b>Word</b></div>\n\t\t\t\t<div>Excel</div>\n\t\t\t\t<div>PowerPoint</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span>M1</span>\n\t\t\t\t\t<div style=\"width:120px;\">\n\t\t\t\t\t\t<div>sub1</div>\n\t\t\t\t\t\t<div>sub2</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<span>Sub</span>\n\t\t\t\t\t\t\t<div style=\"width:80px;\">\n\t\t\t\t\t\t\t\t<div onclick=\"javascript:alert('sub21')\">sub21</div>\n\t\t\t\t\t\t\t\t<div>sub22</div>\n\t\t\t\t\t\t\t\t<div>sub23</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div>sub3</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span>Window Demos</span>\n\t\t\t\t\t<div style=\"width:120px;\">\n\t\t\t\t\t\t<div data-options=\"href:'window.html'\">Window</div>\n\t\t\t\t\t\t<div data-options=\"href:'dialog.html'\">Dialog</div>\n\t\t\t\t\t\t<div><a href=\"http://www.jeasyui.com\" target=\"_blank\">EasyUI</a></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div data-options=\"iconCls:'icon-save'\">Save</div>\n\t\t<div data-options=\"iconCls:'icon-print',disabled:true\">Print</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>Exit</div>\n\t</div>\n\t<script>\n\t\t$(function(){\n\t\t\t$(document).bind('contextmenu',function(e){\n\t\t\t\te.preventDefault();\n\t\t\t\t$('#mm').menu('show', {\n\t\t\t\t\tleft: e.pageX,\n\t\t\t\t\ttop: e.pageY\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/menu/customitem.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom Menu Item - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom Menu Item</h2>\n\t<p>Right click on page to display menu, move to the 'Open' item to display its custom sub content.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div id=\"mm\" style=\"width:120px;\">\n\t\t<div>New</div>\n\t\t<div>\n\t\t\t<span>Open</span>\n\t\t\t<div class=\"menu-content\" style=\"text-align:left;padding:10px\">\n\t\t\t\t<div style=\"font-weight:bold;font-size:14px;margin-bottom:10px\">Select Your Language:</div>\n\t\t\t\t<ul id=\"tt\">\n\t\t\t\t\t<li>Java</li>\n\t\t\t\t\t<li>Basic</li>\n\t\t\t\t\t<li>C++</li>\n\t\t\t\t\t<li>Fortran</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div data-options=\"iconCls:'icon-save'\">Save</div>\n\t\t<div data-options=\"iconCls:'icon-print'\">Print</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>Exit</div>\n\t</div>\n\t<script>\n\t\t$(function(){\n\t\t\t$('#mm').menu();\n\t\t\t$('#tt').tree();\n\t\t\t$(document).bind('contextmenu',function(e){\n\t\t\t\te.preventDefault();\n\t\t\t\t$('#mm').menu('show', {\n\t\t\t\t\tleft: e.pageX,\n\t\t\t\t\ttop: e.pageY\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t</script>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/menu/events.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Menu Events - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Menu Events</h2>\n\t<p>Right click on page to display menu and click an item.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div id=\"mm\" class=\"easyui-menu\" data-options=\"onClick:menuHandler\" style=\"width:120px;\">\n\t\t<div data-options=\"name:'new'\">New</div>\n\t\t<div data-options=\"name:'save',iconCls:'icon-save'\">Save</div>\n\t\t<div data-options=\"name:'print',iconCls:'icon-print'\">Print</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div data-options=\"name:'exit'\">Exit</div>\n\t</div>\n\t<div id=\"log\" class=\"easyui-panel\" title=\"Event Log\" style=\"height:250px;padding:10px\">\n\t</div>\n\t<script>\n\t\tfunction menuHandler(item){\n\t\t\t$('#log').prepend('<p>Click Item: '+item.name+'</p>');\n\t\t}\n\t\t$(function(){\n\t\t\t$(document).bind('contextmenu',function(e){\n\t\t\t\te.preventDefault();\n\t\t\t\t$('#mm').menu('show', {\n\t\t\t\t\tleft: e.pageX,\n\t\t\t\t\ttop: e.pageY\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/menu/inline.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Inline Menu - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Inline Menu</h2>\n\t<p>The inline menu stays inside its parent container.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t\n\t<div class=\"easyui-panel\" title=\"Menu\" style=\"width:150px;\">\n\t\t<div class=\"easyui-menu\" data-options=\"inline:true\" style=\"width:100%\">\n\t\t\t<div onclick=\"javascript:alert('new')\">New</div>\n\t\t\t<div>\n\t\t\t\t<span>Open</span>\n\t\t\t\t<div style=\"width:150px;\">\n\t\t\t\t\t<div><b>Word</b></div>\n\t\t\t\t\t<div>Excel</div>\n\t\t\t\t\t<div>PowerPoint</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span>M1</span>\n\t\t\t\t\t\t<div style=\"width:120px;\">\n\t\t\t\t\t\t\t<div>sub1</div>\n\t\t\t\t\t\t\t<div>sub2</div>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<span>Sub</span>\n\t\t\t\t\t\t\t\t<div style=\"width:80px;\">\n\t\t\t\t\t\t\t\t\t<div onclick=\"javascript:alert('sub21')\">sub21</div>\n\t\t\t\t\t\t\t\t\t<div>sub22</div>\n\t\t\t\t\t\t\t\t\t<div>sub23</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div>sub3</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span>Window Demos</span>\n\t\t\t\t\t\t<div style=\"width:120px;\">\n\t\t\t\t\t\t\t<div data-options=\"href:'window.html'\">Window</div>\n\t\t\t\t\t\t\t<div data-options=\"href:'dialog.html'\">Dialog</div>\n\t\t\t\t\t\t\t<div><a href=\"http://www.jeasyui.com\" target=\"_blank\">EasyUI</a></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div data-options=\"iconCls:'icon-save'\">Save</div>\n\t\t\t<div data-options=\"iconCls:'icon-print',disabled:true\">Print</div>\n\t\t\t<div class=\"menu-sep\"></div>\n\t\t\t<div>Exit</div>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/menu/nav.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Keyboard Navigation in Menu - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Keyboard Navigation in Menu</h2>\n\t<p>Press Alt+W to focus the menu. Once the menu get focus, you will be able to navigate menu using keyboard keys.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t\n\t<div class=\"easyui-panel\" title=\"Menu\" style=\"width:150px;\">\n\t\t<div id=\"mm-nav\" data-options=\"inline:true\" style=\"width:100%\">\n\t\t\t<div onclick=\"javascript:alert('new')\">New</div>\n\t\t\t<div>\n\t\t\t\t<span>Open</span>\n\t\t\t\t<div style=\"width:150px;\">\n\t\t\t\t\t<div><b>Word</b></div>\n\t\t\t\t\t<div>Excel</div>\n\t\t\t\t\t<div>PowerPoint</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span>M1</span>\n\t\t\t\t\t\t<div style=\"width:120px;\">\n\t\t\t\t\t\t\t<div>sub1</div>\n\t\t\t\t\t\t\t<div>sub2</div>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<span>Sub</span>\n\t\t\t\t\t\t\t\t<div style=\"width:80px;\">\n\t\t\t\t\t\t\t\t\t<div>sub21</div>\n\t\t\t\t\t\t\t\t\t<div>sub22</div>\n\t\t\t\t\t\t\t\t\t<div>sub23</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div>sub3</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span>Window Demos</span>\n\t\t\t\t\t\t<div style=\"width:120px;\">\n\t\t\t\t\t\t\t<div>Window</div>\n\t\t\t\t\t\t\t<div>Dialog</div>\n\t\t\t\t\t\t\t<div>EasyUI</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div data-options=\"iconCls:'icon-save'\">Save</div>\n\t\t\t<div data-options=\"iconCls:'icon-print',disabled:true\">Print</div>\n\t\t\t<div class=\"menu-sep\"></div>\n\t\t\t<div>Exit</div>\n\t\t</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\t(function($){\n\t\t\tfunction getParentMenu(rootMenu, menu){\n\t\t\t\treturn findParent(rootMenu);\n\n\t\t\t\tfunction findParent(pmenu){\n\t\t\t\t\tvar p = undefined;\n\t\t\t\t\t$(pmenu).find('.menu-item').each(function(){\n\t\t\t\t\t\tif (!p && this.submenu){\n\t\t\t\t\t\t\tif ($(this.submenu)[0] == $(menu)[0]){\n\t\t\t\t\t\t\t\tp = pmenu;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tp = findParent(this.submenu);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfunction getParentItem(pmenu, menu){\n\t\t\t\tvar item = undefined;\n\t\t\t\t$(pmenu).find('.menu-item').each(function(){\n\t\t\t\t\tif ($(this.submenu)[0] == $(menu)[0]){\n\t\t\t\t\t\titem = $(this);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn item;\n\t\t\t}\n\n\t\t\t$.extend($.fn.menu.methods, {\n\t\t\t\tenableNav: function(jq, rootMenu){\n\t\t\t\t\tvar firstItemSelector = '.menu-item:not(.menu-item-disabled):first';\n\t\t\t\t\tvar lastItemSelector = '.menu-item:not(.menu-item-disabled):last';\n\t\t\t\t\treturn jq.each(function(){\n\t\t\t\t\t\tvar menu = $(this);\n\t\t\t\t\t\trootMenu = $(rootMenu).length ? $(rootMenu) : menu;\n\t\t\t\t\t\tmenu.attr('tabindex','0').css('outline','none').unbind('.menunav').bind('keydown.menunav', function(e){\n\t\t\t\t\t\t\tvar item = $(this).find('.menu-active');\n\t\t\t\t\t\t\tswitch(e.keyCode){\n\t\t\t\t\t\t\t\tcase 13:  // enter\n\t\t\t\t\t\t\t\t\titem.trigger('click');\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 27:  // esc\n\t\t\t\t\t\t\t\t\trootMenu.find('.menu-active').trigger('mouseleave');\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 38:  // up\n\t\t\t\t\t\t\t\t\tvar prev = item.length ? item.prevAll(firstItemSelector) : menu.find(lastItemSelector);\n\t\t\t\t\t\t\t\t\tprev.trigger('mouseenter');\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\tcase 40:  // down\n\t\t\t\t\t\t\t\t\tvar next = item.length ? item.nextAll(firstItemSelector) : menu.find(firstItemSelector);\n\t\t\t\t\t\t\t\t\tnext.trigger('mouseenter');\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\tcase 37:  // left\n\t\t\t\t\t\t\t\t\tvar pmenu = getParentMenu(rootMenu, menu);\n\t\t\t\t\t\t\t\t\tif (pmenu){\n\t\t\t\t\t\t\t\t\t\titem.trigger('mouseleave');\n\t\t\t\t\t\t\t\t\t\tvar pitem = getParentItem(pmenu, menu);\n\t\t\t\t\t\t\t\t\t\tif (pitem){\n\t\t\t\t\t\t\t\t\t\t\tpitem.trigger('mouseenter');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tpmenu.focus();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\tcase 39:  // right\n\t\t\t\t\t\t\t\t\tif (item.length && item[0].submenu){\n\t\t\t\t\t\t\t\t\t\t$(item[0].submenu).menu('enableNav', rootMenu).find(firstItemSelector).trigger('mouseenter');\n\t\t\t\t\t\t\t\t\t\t$(item[0].submenu).focus();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t})(jQuery);\n\n\t\t$(function(){\n\t\t\t$('#mm-nav').menu().menu('enableNav');\n\t\t\t$(document).keydown(function(e){\n\t\t\t\tif (e.altKey && e.keyCode == 87){\n\t\t\t\t\t$('#mm-nav').focus();\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/menubutton/actions.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>MenuButton Actions - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>MenuButton Actions</h2>\n\t<p>Click the buttons below to perform actions.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"$('#btn-edit').menubutton('disable')\">Disable Edit</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"$('#btn-edit').menubutton('enable')\">Enable Edit</a>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"padding:5px;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true\">Home</a>\n\t\t<a id=\"btn-edit\" href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm1',iconCls:'icon-edit'\">Edit</a>\n\t\t<a href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm2',iconCls:'icon-help'\">Help</a>\n\t\t<a href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm3'\">About</a>\n\t</div>\n\t<div id=\"mm1\" style=\"width:150px;\">\n\t\t<div data-options=\"iconCls:'icon-undo'\">Undo</div>\n\t\t<div data-options=\"iconCls:'icon-redo'\">Redo</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>Cut</div>\n\t\t<div>Copy</div>\n\t\t<div>Paste</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>\n\t\t\t<span>Toolbar</span>\n\t\t\t<div>\n\t\t\t\t<div>Address</div>\n\t\t\t\t<div>Link</div>\n\t\t\t\t<div>Navigation Toolbar</div>\n\t\t\t\t<div>Bookmark Toolbar</div>\n\t\t\t\t<div class=\"menu-sep\"></div>\n\t\t\t\t<div>New Toolbar...</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div data-options=\"iconCls:'icon-remove'\">Delete</div>\n\t\t<div>Select All</div>\n\t</div>\n\t<div id=\"mm2\" style=\"width:100px;\">\n\t\t<div>Help</div>\n\t\t<div>Update</div>\n\t\t<div>About</div>\n\t</div>\n\t<div id=\"mm3\" class=\"menu-content\" style=\"background:#f0f0f0;padding:10px;text-align:left\">\n\t\t<img src=\"http://www.jeasyui.com/images/logo1.png\" style=\"width:150px;height:50px\">\n\t\t<p style=\"font-size:14px;color:#444;\">Try jQuery EasyUI to build your modern, interactive, javascript applications.</p>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/menubutton/alignment.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Menu Alignment on MenuButton - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Menu Alignment on MenuButton</h2>\n\t<p>This example shows how to change the alignment of the top level menu.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<span>Change Alignment: </span>\n\t\t<select onchange=\"setalign(this.value)\">\n\t\t\t<option value=\"left\">Left</option>\n\t\t\t<option value=\"right\">Right</option>\n\t\t</select>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"padding:5px;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true\">Home</a>\n\t\t<a href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm1',iconCls:'icon-edit'\">Edit</a>\n\t\t<a href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm2',iconCls:'icon-help'\">Help</a>\n\t\t<a href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm3'\">About</a>\n\t\t\n\t</div>\n\t<div id=\"mm1\" style=\"width:150px;\">\n\t\t<div data-options=\"iconCls:'icon-undo'\">Undo</div>\n\t\t<div data-options=\"iconCls:'icon-redo'\">Redo</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>Cut</div>\n\t\t<div>Copy</div>\n\t\t<div>Paste</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>\n\t\t\t<span>Toolbar</span>\n\t\t\t<div>\n\t\t\t\t<div>Address</div>\n\t\t\t\t<div>Link</div>\n\t\t\t\t<div>Navigation Toolbar</div>\n\t\t\t\t<div>Bookmark Toolbar</div>\n\t\t\t\t<div class=\"menu-sep\"></div>\n\t\t\t\t<div>New Toolbar...</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div data-options=\"iconCls:'icon-remove'\">Delete</div>\n\t\t<div>Select All</div>\n\t</div>\n\t<div id=\"mm2\" style=\"width:100px;\">\n\t\t<div>Help</div>\n\t\t<div>Update</div>\n\t\t<div>About</div>\n\t</div>\n\t<div id=\"mm3\">\n\t\t<div>History</div>\n\t\t<div>Faq</div>\n\t\t<div>Our Team</div>\n\t</div>\n\t<script>\n\t\tfunction setalign(align){\n\t\t\t$('a.easyui-menubutton').menubutton({\n\t\t\t\tmenuAlign: align\n\t\t\t})\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/menubutton/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic MenuButton - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic MenuButton</h2>\n\t<p>Move mouse over the button to drop down menu.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true\">Home</a>\n\t\t<a href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm1',iconCls:'icon-edit'\">Edit</a>\n\t\t<a href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm2',iconCls:'icon-help'\">Help</a>\n\t\t<a href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm3'\">About</a>\n\t</div>\n\t<div id=\"mm1\" style=\"width:150px;\">\n\t\t<div data-options=\"iconCls:'icon-undo'\">Undo</div>\n\t\t<div data-options=\"iconCls:'icon-redo'\">Redo</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>Cut</div>\n\t\t<div>Copy</div>\n\t\t<div>Paste</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>\n\t\t\t<span>Toolbar</span>\n\t\t\t<div>\n\t\t\t\t<div>Address</div>\n\t\t\t\t<div>Link</div>\n\t\t\t\t<div>Navigation Toolbar</div>\n\t\t\t\t<div>Bookmark Toolbar</div>\n\t\t\t\t<div class=\"menu-sep\"></div>\n\t\t\t\t<div>New Toolbar...</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div data-options=\"iconCls:'icon-remove'\">Delete</div>\n\t\t<div>Select All</div>\n\t</div>\n\t<div id=\"mm2\" style=\"width:100px;\">\n\t\t<div>Help</div>\n\t\t<div>Update</div>\n\t\t<div>About</div>\n\t</div>\n\t<div id=\"mm3\" class=\"menu-content\" style=\"background:#f0f0f0;padding:10px;text-align:left\">\n\t\t<img src=\"http://www.jeasyui.com/images/logo1.png\" style=\"width:150px;height:50px\">\n\t\t<p style=\"font-size:14px;color:#444;\">Try jQuery EasyUI to build your modern, interactive, javascript applications.</p>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/menubutton/nav.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Keyboard Navigation in MenuButton - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Keyboard Navigation in MenuButton</h2>\n\t<p>Press Alt+W to focus the menubutton. Once the menubutton get focus, you will be able to navigate menubutton using keyboard keys.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px;\">\n\t\t<a id=\"btn-home\" href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true\">Home</a>\n\t\t<a href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm1',iconCls:'icon-edit'\">Edit</a>\n\t\t<a href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm2',iconCls:'icon-help'\">Help</a>\n\t\t<a href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm3'\">About</a>\n\t</div>\n\t<div id=\"mm1\" style=\"width:150px;\">\n\t\t<div data-options=\"iconCls:'icon-undo'\">Undo</div>\n\t\t<div data-options=\"iconCls:'icon-redo'\">Redo</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>Cut</div>\n\t\t<div>Copy</div>\n\t\t<div>Paste</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>\n\t\t\t<span>Toolbar</span>\n\t\t\t<div>\n\t\t\t\t<div>Address</div>\n\t\t\t\t<div>Link</div>\n\t\t\t\t<div>Navigation Toolbar</div>\n\t\t\t\t<div>Bookmark Toolbar</div>\n\t\t\t\t<div class=\"menu-sep\"></div>\n\t\t\t\t<div>New Toolbar...</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div data-options=\"iconCls:'icon-remove'\">Delete</div>\n\t\t<div>Select All</div>\n\t</div>\n\t<div id=\"mm2\" style=\"width:100px;\">\n\t\t<div>Help</div>\n\t\t<div>Update</div>\n\t\t<div>About</div>\n\t</div>\n\t<div id=\"mm3\" class=\"menu-content\" style=\"background:#f0f0f0;padding:10px;text-align:left\">\n\t\t<img src=\"http://www.jeasyui.com/images/logo1.png\" style=\"width:150px;height:50px\">\n\t\t<p style=\"font-size:14px;color:#444;\">Try jQuery EasyUI to build your modern, interactive, javascript applications.</p>\n\t</div>\n\n\t<script type=\"text/javascript\">\n\t\t(function($){\n\t\t\tfunction getParentMenu(rootMenu, menu){\n\t\t\t\treturn findParent(rootMenu);\n\n\t\t\t\tfunction findParent(pmenu){\n\t\t\t\t\tvar p = undefined;\n\t\t\t\t\t$(pmenu).find('.menu-item').each(function(){\n\t\t\t\t\t\tif (!p && this.submenu){\n\t\t\t\t\t\t\tif ($(this.submenu)[0] == $(menu)[0]){\n\t\t\t\t\t\t\t\tp = pmenu;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tp = findParent(this.submenu);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfunction getParentItem(pmenu, menu){\n\t\t\t\tvar item = undefined;\n\t\t\t\t$(pmenu).find('.menu-item').each(function(){\n\t\t\t\t\tif ($(this.submenu)[0] == $(menu)[0]){\n\t\t\t\t\t\titem = $(this);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn item;\n\t\t\t}\n\n\t\t\t$.extend($.fn.menubutton.methods, {\n\t\t\t\tenableNav: function(enabled){\n\t\t\t\t\tvar curr;\n\t\t\t\t\t$(document).unbind('.menubutton');\n\t\t\t\t\tif (enabled == undefined){enabled = true;}\n\t\t\t\t\tif (enabled){\n\t\t\t\t\t\t$(document).bind('keydown.menubutton', function(e){\n\t\t\t\t\t\t\tvar currButton = $(this).find('.m-btn-active,.m-btn-plain-active,.l-btn:focus');\n\t\t\t\t\t\t\tif (!currButton.length){\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!curr || curr.button != currButton[0]){\n\t\t\t\t\t\t\t\tcurr = {\n\t\t\t\t\t\t\t\t\tmenu: currButton.data('menubutton') ? $(currButton.menubutton('options').menu) : $(),\n\t\t\t\t\t\t\t\t\tbutton: currButton[0]\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar item = curr.menu.find('.menu-active');\n\n\t\t\t\t\t\t\tswitch(e.keyCode){\n\t\t\t\t\t\t\t\tcase 13:  // enter\n\t\t\t\t\t\t\t\t\titem.trigger('click');\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 27:  // esc\n\t\t\t\t\t\t\t\t\tcurrButton.trigger('mouseleave');\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 38:  // up\n\t\t\t\t\t\t\t\t\tvar prev = !item.length ? curr.menu.find('.menu-item:last') : item.prevAll('.menu-item:first');\n\t\t\t\t\t\t\t\t\tprev.trigger('mouseenter');\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\tcase 40:  // down\n\t\t\t\t\t\t\t\t\tvar next = !item.length ? curr.menu.find('.menu-item:first') : item.nextAll('.menu-item:first');\n\t\t\t\t\t\t\t\t\tnext.trigger('mouseenter');\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\tcase 37:  // left\n\t\t\t\t\t\t\t\t\tvar pmenu = getParentMenu(currButton.data('menubutton') ? $(currButton.menubutton('options').menu) : $(), curr.menu);\n\t\t\t\t\t\t\t\t\tif (pmenu){\n\t\t\t\t\t\t\t\t\t\titem.trigger('mouseleave');\n\t\t\t\t\t\t\t\t\t\tvar pitem = getParentItem(pmenu, curr.menu);\n\t\t\t\t\t\t\t\t\t\tif (pitem){\n\t\t\t\t\t\t\t\t\t\t\tpitem.trigger('mouseenter');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcurr.menu = pmenu;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tvar prev = currButton.prevAll('.l-btn:first');\n\t\t\t\t\t\t\t\t\t\tif (prev.length){\n\t\t\t\t\t\t\t\t\t\t\tcurrButton.trigger('mouseleave');\n\t\t\t\t\t\t\t\t\t\t\tprev.focus();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\tcase 39:  // right\n\t\t\t\t\t\t\t\t\tif (item.length && item[0].submenu){\n\t\t\t\t\t\t\t\t\t\tcurr.menu = $(item[0].submenu);\n\t\t\t\t\t\t\t\t\t\tcurr.button = currButton[0];\n\t\t\t\t\t\t\t\t\t\tcurr.menu.find('.menu-item:first').trigger('mouseenter');\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tvar next = currButton.nextAll('.l-btn:first');\n\t\t\t\t\t\t\t\t\t\tif (next.length){\n\t\t\t\t\t\t\t\t\t\t\tcurrButton.trigger('mouseleave');\n\t\t\t\t\t\t\t\t\t\t\tnext.focus();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t})(jQuery);\n\n\t\t$(function(){\n\t\t\t$.fn.menubutton.methods.enableNav();\n\t\t\t$(document).keydown(function(e){\n\t\t\t\tif (e.altKey && e.keyCode == 87){\n\t\t\t\t\t$('#btn-home').focus();\n\t\t\t\t}\n\t\t\t})\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/messager/alert.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Alert Messager - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Alert Messager</h2>\n\t<p>Click on each button to display different alert message box.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"alert1()\">Alert</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"alert2()\">Error</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"alert3()\">Info</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"alert4()\">Question</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"alert5()\">Warning</a>\n\t</div>\n\t<script>\n\t\tfunction alert1(){\n\t\t\t$.messager.alert('My Title','Here is a message!');\n\t\t}\n\t\tfunction alert2(){\n\t\t\t$.messager.alert('My Title','Here is a error message!','error');\n\t\t}\n\t\tfunction alert3(){\n\t\t\t$.messager.alert('My Title','Here is a info message!','info');\n\t\t}\n\t\tfunction alert4(){\n\t\t\t$.messager.alert('My Title','Here is a question message!','question');\n\t\t}\n\t\tfunction alert5(){\n\t\t\t$.messager.alert('My Title','Here is a warning message!','warning');\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/messager/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Messager - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Messager</h2>\n\t<p>Click on each button to see a distinct message box.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"show()\">Show</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"slide()\">Slide</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"fade()\">Fade</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"progress()\">Progress</a>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction show(){\n\t\t\t$.messager.show({\n\t\t\t\ttitle:'My Title',\n\t\t\t\tmsg:'Message will be closed after 4 seconds.',\n\t\t\t\tshowType:'show'\n\t\t\t});\n\t\t}\n\t\tfunction slide(){\n\t\t\t$.messager.show({\n\t\t\t\ttitle:'My Title',\n\t\t\t\tmsg:'Message will be closed after 5 seconds.',\n\t\t\t\ttimeout:5000,\n\t\t\t\tshowType:'slide'\n\t\t\t});\n\t\t}\n\t\tfunction fade(){\n\t\t\t$.messager.show({\n\t\t\t\ttitle:'My Title',\n\t\t\t\tmsg:'Message never be closed.',\n\t\t\t\ttimeout:0,\n\t\t\t\tshowType:'fade'\n\t\t\t});\n\t\t}\n\t\tfunction progress(){\n\t\t\tvar win = $.messager.progress({\n\t\t\t\ttitle:'Please waiting',\n\t\t\t\tmsg:'Loading data...'\n\t\t\t});\n\t\t\tsetTimeout(function(){\n\t\t\t\t$.messager.progress('close');\n\t\t\t},5000)\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/messager/interactive.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Interactive Messager - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Interactive Messager</h2>\n\t<p>Click on each button to display interactive message box.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"confirm1();\">Confirm</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"prompt1()\">Prompt</a>\n\t</div>\n\t<script>\n\t\tfunction confirm1(){\n\t\t\t$.messager.confirm('My Title', 'Are you confirm this?', function(r){\n\t\t\t\tif (r){\n\t\t\t\t\talert('confirmed: '+r);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfunction prompt1(){\n\t\t\t$.messager.prompt('My Title', 'Please type something', function(r){\n\t\t\t\tif (r){\n\t\t\t\t\talert('you type: '+r);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/messager/position.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Message Box Position - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Message Box Position</h2>\n\t<p>Click the buttons below to display message box on different position.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<p>\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"topLeft();\">TopLeft</a>\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"topCenter()\">TopCenter</a>\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"topRight()\">TopRight</a>\n\t\t</p>\n\t\t<p>\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"centerLeft()\">CenterLeft</a>\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"center()\">Center</a>\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"centerRight()\">CenterRight</a>\n\t\t</p>\n\t\t<p>\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"bottomLeft()\">BottomLeft</a>\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"bottomCenter()\">BottomCenter</a>\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"bottomRight()\">BottomRight</a>\n\t\t</p>\n\t</div>\n\t<script>\n\t\tfunction topLeft(){\n\t\t\t$.messager.show({\n\t\t\t\ttitle:'My Title',\n\t\t\t\tmsg:'The message content',\n\t\t\t\tshowType:'show',\n\t\t\t\tstyle:{\n\t\t\t\t\tright:'',\n\t\t\t\t\tleft:0,\n\t\t\t\t\ttop:document.body.scrollTop+document.documentElement.scrollTop,\n\t\t\t\t\tbottom:''\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfunction topCenter(){\n\t\t\t$.messager.show({\n\t\t\t\ttitle:'My Title',\n\t\t\t\tmsg:'The message content',\n\t\t\t\tshowType:'slide',\n\t\t\t\tstyle:{\n\t\t\t\t\tright:'',\n\t\t\t\t\ttop:document.body.scrollTop+document.documentElement.scrollTop,\n\t\t\t\t\tbottom:''\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfunction topRight(){\n\t\t\t$.messager.show({\n\t\t\t\ttitle:'My Title',\n\t\t\t\tmsg:'The message content',\n\t\t\t\tshowType:'show',\n\t\t\t\tstyle:{\n\t\t\t\t\tleft:'',\n\t\t\t\t\tright:0,\n\t\t\t\t\ttop:document.body.scrollTop+document.documentElement.scrollTop,\n\t\t\t\t\tbottom:''\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfunction centerLeft(){\n\t\t\t$.messager.show({\n\t\t\t\ttitle:'My Title',\n\t\t\t\tmsg:'The message content',\n\t\t\t\tshowType:'fade',\n\t\t\t\tstyle:{\n\t\t\t\t\tleft:0,\n\t\t\t\t\tright:'',\n\t\t\t\t\tbottom:''\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfunction center(){\n\t\t\t$.messager.show({\n\t\t\t\ttitle:'My Title',\n\t\t\t\tmsg:'The message content',\n\t\t\t\tshowType:'fade',\n\t\t\t\tstyle:{\n\t\t\t\t\tright:'',\n\t\t\t\t\tbottom:''\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfunction centerRight(){\n\t\t\t$.messager.show({\n\t\t\t\ttitle:'My Title',\n\t\t\t\tmsg:'The message content',\n\t\t\t\tshowType:'fade',\n\t\t\t\tstyle:{\n\t\t\t\t\tleft:'',\n\t\t\t\t\tright:0,\n\t\t\t\t\tbottom:''\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfunction bottomLeft(){\n\t\t\t$.messager.show({\n\t\t\t\ttitle:'My Title',\n\t\t\t\tmsg:'The message content',\n\t\t\t\tshowType:'show',\n\t\t\t\tstyle:{\n\t\t\t\t\tleft:0,\n\t\t\t\t\tright:'',\n\t\t\t\t\ttop:'',\n\t\t\t\t\tbottom:-document.body.scrollTop-document.documentElement.scrollTop\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfunction bottomCenter(){\n\t\t\t$.messager.show({\n\t\t\t\ttitle:'My Title',\n\t\t\t\tmsg:'The message content',\n\t\t\t\tshowType:'slide',\n\t\t\t\tstyle:{\n\t\t\t\t\tright:'',\n\t\t\t\t\ttop:'',\n\t\t\t\t\tbottom:-document.body.scrollTop-document.documentElement.scrollTop\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfunction bottomRight(){\n\t\t\t$.messager.show({\n\t\t\t\ttitle:'My Title',\n\t\t\t\tmsg:'The message content',\n\t\t\t\tshowType:'show'\n\t\t\t});\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/numberbox/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic NumberBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic NumberBox</h2>\n\t<p>The NumberBox can only accept inputing numbers.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberbox\" label=\"List Price:\" labelPosition=\"top\" precision=\"2\" value=\"234.56\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberbox\" label=\"Amount:\" labelPosition=\"top\" value=\"100\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberbox\" label=\"Discount:\" labelPosition=\"top\" value=\"20\" suffix=\"%\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n\t\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/numberbox/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid NumberBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid NumberBox</h2>\n\t<p>This example shows how to set the width of NumberBox to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberbox\" label=\"width: 100%\" labelPosition=\"top\" precision=\"2\" value=\"234.56\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberbox\" label=\"width: 50%\" labelPosition=\"top\" value=\"100\" style=\"width:50%;\">\n\t\t</div>\n\t</div>\n\t\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/numberbox/format.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Format NumberBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Format NumberBox</h2>\n\t<p>Number formatting is the ability to control how a number is displayed.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberbox\" value=\"1234567.89\" data-options=\"label:'Number in the United States',labelPosition:'top',precision:2,groupSeparator:',',width:'100%'\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberbox\" value=\"1234567.89\" data-options=\"label:'Number in France',labelPosition:'top',precision:2,groupSeparator:' ',decimalSeparator:',',width:'100%'\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberbox\" value=\"1234567.89\" data-options=\"label:'Currency:USD',labelPosition:'top',precision:2,groupSeparator:',',decimalSeparator:'.',prefix:'$',width:'100%'\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberbox\" value=\"1234567.89\" data-options=\"label:'Currency:EUR',labelPosition:'top',precision:2,groupSeparator:',',decimalSeparator:' ',prefix:'€',width:'100%'\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberbox\" value=\"1234567.89\" data-options=\"label:'Currency:EUR',labelPosition:'top',precision:2,groupSeparator:' ',decimalSeparator:',',suffix:'€',width:'100%'\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/numberbox/range.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Number Range - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Number Range</h2>\n\t<p>The value is constrained to a specified range.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberbox\" data-options=\"label:'Amount:',labelPosition:'top',min:10,max:90,precision:2\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberbox\" data-options=\"label:'Weight:',labelPosition:'top',min:10,max:90\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberbox\" data-options=\"label:'Age:',labelPosition:'top',min:0,max:100\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/numberspinner/align.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Number Spin Alignment - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Number Spin Alignment</h2>\n\t<p>This example shows how to set different spin alignments on numberspinner.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberspinner\" value=\"30\" data-options=\"label:'Right:',labelPosition:'top',spinAlign:'right'\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberspinner\" value=\"30\" data-options=\"label:'Left:',labelPosition:'top',spinAlign:'left'\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberspinner\" value=\"30\" data-options=\"label:'Horizontal:',labelPosition:'top',spinAlign:'horizontal'\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberspinner\" value=\"30\" data-options=\"label:'Vertical:',labelPosition:'top',spinAlign:'vertical'\" style=\"width:100%;max-width:60px;text-align:center\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/numberspinner/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic NumberSpinner - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic NumberSpinner</h2>\n\t<p>Click spinner button to change value.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<input class=\"easyui-numberspinner\" style=\"width:100%;\" data-options=\"\n\t\t\t\t\tonChange: function(value){\n\t\t\t\t\t\t$('#vv').text(value);\n\t\t\t\t\t}\n\t\t\t\t\">\n\t\t<div style=\"margin:10px 0;\">\n\t\t\tValue: <span id=\"vv\"></span>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/numberspinner/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid NumberSpinner - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid NumberSpinner</h2>\n\t<p>This example shows how to set the width of NumberSpinner to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberspinner\" label=\"width: 100%\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberspinner\" label=\"width: 50%\" labelPosition=\"top\" style=\"width:50%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/numberspinner/increment.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Increment Number - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Increment Number</h2>\n\t<p>The sample shows how to set the increment step.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberspinner\" value=\"1000\" data-options=\"label:'List Price:',labelPosition:'top',increment:100\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberspinner\" value=\"100\" data-options=\"label:'Discount:',labelPosition:'top',increment:10,suffix:'%'\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberspinner\" value=\"100\" data-options=\"label:'Amount:',labelPosition:'top',increment:10\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/numberspinner/range.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Number Range - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Number Range</h2>\n\t<p>The value is constrained to a range between 10 and 100.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberspinner\" value=\"30\" data-options=\"label:'Age:',labelPosition:'top',min:1,max:100\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-numberspinner\" value=\"3000\" data-options=\"label:'Salary:',labelPosition:'top',min:1000,max:6000,increment:100,prefix:'$'\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/pagination/attaching.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Attaching Other Components - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Attaching Other Components</h2>\n\t<p>Any other components can be attached to page bar.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\">\n\t\t<div class=\"easyui-pagination\" data-options=\"showPageList:false,total:114,buttons:$('#buttons')\"></div>\n\t</div>\n\t<div id=\"buttons\">\n\t\t<table style=\"border-spacing:0\">\n\t\t\t<tr>\n\t\t\t\t<td>\n\t\t\t\t\t<input class=\"easyui-searchbox\" style=\"width:150px\">\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-save',plain:true\"></a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</table>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/pagination/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Pagination - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Pagination</h2>\n\t<p>The user can change page number and page size on page bar.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\">\n\t\t<div class=\"easyui-pagination\" data-options=\"total:114\"></div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/pagination/custombuttons.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom Pagination Buttons - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom Pagination Buttons</h2>\n\t<p>The customized buttons can be appended to page bar.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\">\n\t\t<div class=\"easyui-pagination\" data-options=\"total:114,buttons:buttons\"></div>\n\t</div>\n\t<script>\n\t\tvar buttons = [{\n\t\t\ticonCls:'icon-add',\n\t\t\thandler:function(){\n\t\t\t\talert('add');\n\t\t\t}\n\t\t},{\n\t\t\ticonCls:'icon-cut',\n\t\t\thandler:function(){\n\t\t\t\talert('cut');\n\t\t\t}\n\t\t},{\n\t\t\ticonCls:'icon-save',\n\t\t\thandler:function(){\n\t\t\t\talert('save');\n\t\t\t}\n\t\t}];\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/pagination/layout.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Pagination Layout - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Pagination Layout</h2>\n\t<p>The pagination layout supports various types of pages which you can choose.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\">\n\t\t<div id=\"pp\" class=\"easyui-pagination\" data-options=\"\n\t\t\t\t\ttotal:114,\n\t\t\t\t\tlayout:['first','prev','next','last','info']\n\t\t\t\t\"></div>\n\t</div>\n\t<div style=\"margin-top:10px\">\n\t\t<select onchange=\"setLayout(this.value)\">\n\t\t\t<option value=\"1\">Previous Next</option>\n\t\t\t<option value=\"2\">Manual Page Input</option>\n\t\t\t<option value=\"3\">Numeric Links</option>\n\t\t\t<option value=\"4\">Previous Links Next</option>\n\t\t\t<option value=\"5\">Go To Page</option>\n\t\t</select>\n\t</div>\n\t<script>\n\t\tfunction setLayout(type){\n\t\t\tvar p = $('#pp');\n\t\t\tswitch(parseInt(type)){\n\t\t\tcase 1:\n\t\t\t\tp.pagination({layout:['first','prev','next','last','info']});\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tp.pagination({\n\t\t\t\t\tlayout:['list','sep','first','prev','sep','manual','sep','next','last','sep','refresh'],\n\t\t\t\t\tbeforePageText:'Page',\n\t\t\t\t\tafterPageText:'of {pages}'\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tp.pagination({layout:['links']});\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tp.pagination({layout:['first','prev','links','next','last']});\n\t\t\t\tbreak;\n\t\t\tcase 5:\n\t\t\t\tp.pagination({\n\t\t\t\t\tlayout:['first','prev','next','last','sep','links','sep','manual','info'],\n\t\t\t\t\tbeforePageText:'Go Page',\n\t\t\t\t\tafterPageText:''\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/pagination/links.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Pagination Links - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Pagination Links</h2>\n\t<p>The example shows how to customize numbered pagination links.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\">\n\t\t<div class=\"easyui-pagination\" data-options=\"\n\t\t\t\t\ttotal:114,\n\t\t\t\t\tlayout:['list','sep','first','prev','links','next','last','sep','refresh','info']\n\t\t\t\t\"></div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/pagination/simple.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Simplify Pagination - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Simplify Pagination</h2>\n\t<p>The sample shows how to simplify pagination.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\">\n\t\t<div class=\"easyui-pagination\" data-options=\"\n\t\t\t\t\ttotal: 114,\n\t\t\t\t\tshowPageList: false,\n\t\t\t\t\tshowPageInfo: false,\n\t\t\t\t\tshowRefresh: false\n\t\t\t\t\"></div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/panel/_content.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>AJAX Content</title>\n</head>\n<body>\n\t<p style=\"font-size:14px\">Here is the content loaded via AJAX.</p>\n\t<ul>\n\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t<li>easyui provides essential functionality for building modern, interactive, javascript applications.</li>\n\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t<li>complete framework for HTML5 web page.</li>\n\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t<li>easyui is very easy but powerful.</li>\n\t</ul>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/panel/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Panel - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Panel</h2>\n\t<p>The panel is a container for other components or elements.</p>\n\t<div style=\"margin:20px 0 10px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"javascript:$('#p').panel('open')\">Open</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"javascript:$('#p').panel('close')\">Close</a>\n\t</div>\n\t<div id=\"p\" class=\"easyui-panel\" title=\"Basic Panel\" style=\"width:700px;height:200px;padding:10px;\">\n\t\t<p style=\"font-size:14px\">jQuery EasyUI framework helps you build your web pages easily.</p>\n\t\t<ul>\n\t\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t\t<li>easyui provides essential functionality for building modem, interactive, javascript applications.</li>\n\t\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t\t<li>complete framework for HTML5 web page.</li>\n\t\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t\t<li>easyui is very easy but powerful.</li>\n\t\t</ul>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/panel/customtools.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom Panel Tools - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom Panel Tools</h2>\n\t<p>Click the right top buttons to perform actions with panel.</p>\n\t<div style=\"margin:20px 0 10px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"Custom Panel Tools\" style=\"width:700px;height:200px;padding:10px;\"\n\t\t\tdata-options=\"iconCls:'icon-save',closable:true,tools:'#tt'\">\n\t\t<p style=\"font-size:14px\">jQuery EasyUI framework helps you build your web pages easily.</p>\n\t\t<ul>\n\t\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t\t<li>easyui provides essential functionality for building modem, interactive, javascript applications.</li>\n\t\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t\t<li>complete framework for HTML5 web page.</li>\n\t\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t\t<li>easyui is very easy but powerful.</li>\n\t\t</ul>\n\t</div>\n\t<div id=\"tt\">\n\t\t<a href=\"javascript:void(0)\" class=\"icon-add\" onclick=\"javascript:alert('add')\"></a>\n\t\t<a href=\"javascript:void(0)\" class=\"icon-edit\" onclick=\"javascript:alert('edit')\"></a>\n\t\t<a href=\"javascript:void(0)\" class=\"icon-cut\" onclick=\"javascript:alert('cut')\"></a>\n\t\t<a href=\"javascript:void(0)\" class=\"icon-help\" onclick=\"javascript:alert('help')\"></a>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/panel/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid Panel - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid Panel</h2>\n\t<p>This example shows how to set the width of Panel to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0 10px 0;\">\n\t</div>\n\t<div id=\"p\" class=\"easyui-panel\" title=\"Fluid Panel\" style=\"width:100%;height:200px;padding:10px;\">\n\t\t<p>The panel has a width of 100%.<p>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/panel/footer.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Panel Footer - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Panel Footer</h2>\n\t<p>The panel footer is displayed at the bottom of the panel and can consist of any other components.</p>\n\t<div style=\"margin:20px 0 10px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"Panel Footer\" style=\"width:700px;height:200px;\" data-options=\"footer:'#footer'\">\n\t</div>\n\t<div id=\"footer\" style=\"padding:5px;\">\n\t\tFooter Content.\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/panel/halign.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Panel Header Alignment - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Panel Header Alignment</h2>\n\t<p>The panel header can be aligned horizontally or vertically.</p>\n\t<div style=\"margin:20px 0 10px 0;\">\n\t</div>\n\t<div class=\"easyui-panel\" title=\"Head on Top\" style=\"width:700px;height:120px;\">\n\t</div>\n\t<div style=\"margin-bottom:10px\"></div>\n\t<div class=\"easyui-panel\" title=\"Head on Left\" halign=\"left\" titleDirection=\"up\" style=\"width:700px;height:120px;\">\n\t</div>\n\t<div style=\"margin-bottom:10px\"></div>\n\t<div class=\"easyui-panel\" title=\"Head on Right\" halign=\"right\" style=\"width:700px;height:120px;\">\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/panel/loadcontent.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Load Panel Content - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Load Panel Content</h2>\n\t<p>Click the refresh button on top right of panel to load content.</p>\n\t<div style=\"margin:20px 0 10px 0;\"></div>\n\t<div id=\"p\" class=\"easyui-panel\" title=\"Load Panel Content\" style=\"width:700px;height:200px;padding:10px;\"\n\t\t\tdata-options=\"\n\t\t\t\ttools:[{\n\t\t\t\t\ticonCls:'icon-reload',\n\t\t\t\t\thandler:function(){\n\t\t\t\t\t\t$('#p').panel('refresh', '_content.html');\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t\">\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/panel/nestedpanel.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Nested Panel - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Nested Panel</h2>\n\t<p>The panel can be placed inside containers and can contain other components.</p>\n\t<div style=\"margin:20px 0 10px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"Nested Panel\" style=\"width:700px;height:200px;padding:10px;\">\n\t\t<div class=\"easyui-layout\" data-options=\"fit:true\">\n\t\t\t<div data-options=\"region:'west',split:true\" style=\"width:100px;padding:10px\">\n\t\t\t\tLeft Content\n\t\t\t</div>\n\t\t\t<div data-options=\"region:'east'\" style=\"width:100px;padding:10px\">\n\t\t\t\tRight Content\n\t\t\t</div>\n\t\t\t<div data-options=\"region:'center'\" style=\"padding:10px\">\n\t\t\t\tCenter Content\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/panel/paneltools.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Panel Tools - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Panel Tools</h2>\n\t<p>Click the right top buttons to perform actions with panel.</p>\n\t<div style=\"margin:20px 0 10px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"javascript:$('#p').panel('open')\">Open</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"javascript:$('#p').panel('close')\">Close</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"javascript:$('#p').panel('expand',true)\">Expand</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"javascript:$('#p').panel('collapse',true)\">Collapse</a>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"height:350px;padding:5px;\">\n\t\t<div id=\"p\" class=\"easyui-panel\" title=\"Panel Tools\" style=\"width:600px;height:200px;padding:10px;\"\n\t\t\t\tdata-options=\"iconCls:'icon-save',collapsible:true,minimizable:true,maximizable:true,closable:true\">\n\t\t\t<p style=\"font-size:14px\">jQuery EasyUI framework helps you build your web pages easily.</p>\n\t\t\t<ul>\n\t\t\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t\t\t<li>easyui provides essential functionality for building modem, interactive, javascript applications.</li>\n\t\t\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t\t\t<li>complete framework for HTML5 web page.</li>\n\t\t\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t\t\t<li>easyui is very easy but powerful.</li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/passwordbox/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic PasswordBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic PasswordBox</h2>\n\t<p>The passwordbox allows a user to enter passwords.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:400px;padding:50px 60px\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" prompt=\"Username\" iconWidth=\"28\" style=\"width:100%;height:34px;padding:10px;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-passwordbox\" prompt=\"Password\" iconWidth=\"28\" style=\"width:100%;height:34px;padding:10px\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/passwordbox/flash.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Flash PasswordBox Letters - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Flash PasswordBox Letters</h2>\n\t<p>This example shows how to flash the entered password letter by letter.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:400px;padding:50px 60px\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" prompt=\"Username\" iconWidth=\"28\" style=\"width:100%;height:34px;padding:10px;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"pass\" class=\"easyui-passwordbox\" prompt=\"Password\" iconWidth=\"28\" style=\"width:100%;height:34px;padding:10px\">\n\t\t</div>\n\t</div>\n\t<div id=\"viewer\"></div>\n\n\t<script type=\"text/javascript\">\n\t\t$('#pass').passwordbox({\n\t\t\tinputEvents: $.extend({}, $.fn.passwordbox.defaults.inputEvents, {\n\t\t\t\tkeypress: function(e){\n\t\t\t\t\tvar char = String.fromCharCode(e.which);\n\t\t\t\t\t$('#viewer').html(char).fadeIn(200, function(){\n\t\t\t\t\t\t$(this).fadeOut();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t</script>\n\t<style>\n\t\t#viewer{\n\t\t\tposition: relative;\n\t\t\tpadding: 0 60px;\n\t\t\ttop: -70px;\n\t\t\tfont-size: 54px;\n\t\t\tline-height: 60px;\n\t\t}\n\t</style>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/passwordbox/validatepassword.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Validate Password - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Validate Password</h2>\n\t<p>This example shows how to validate whether a user enters the same password.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:400px;padding:50px 60px\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" prompt=\"Username\" iconWidth=\"28\" style=\"width:100%;height:34px;padding:10px;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"pass\" class=\"easyui-passwordbox\" prompt=\"Password\" iconWidth=\"28\" style=\"width:100%;height:34px;padding:10px\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-passwordbox\" prompt=\"Confirm your password\" iconWidth=\"28\" validType=\"confirmPass['#pass']\" style=\"width:100%;height:34px;padding:10px\">\n\t\t</div>\n\t</div>\n\n\t<script type=\"text/javascript\">\n\t\t$.extend($.fn.validatebox.defaults.rules, {\n\t\t\tconfirmPass: {\n\t\t\t\tvalidator: function(value, param){\n\t\t\t\t\tvar pass = $(param[0]).passwordbox('getValue');\n\t\t\t\t\treturn value == pass;\n\t\t\t\t},\n\t\t\t\tmessage: 'Password does not match confirmation.'\n\t\t\t}\n\t\t})\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/progressbar/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic ProgressBar - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic ProgressBar</h2>\n\t<p>Click the button below to show progress information.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"start()\">Start</a>\n\t</div>\n\t<div id=\"p\" class=\"easyui-progressbar\" style=\"width:400px;\"></div>\n\t<script>\n\t\tfunction start(){\n\t\t\tvar value = $('#p').progressbar('getValue');\n\t\t\tif (value < 100){\n\t\t\t\tvalue += Math.floor(Math.random() * 10);\n\t\t\t\t$('#p').progressbar('setValue', value);\n\t\t\t\tsetTimeout(arguments.callee, 200);\n\t\t\t}\n\t\t};\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/progressbar/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid ProgressBar - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid ProgressBar</h2>\n\t<p>This example shows how to set the width of ProgressBar to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<p>width: 50%</p>\n\t<div class=\"easyui-progressbar\" data-options=\"value:80\" style=\"width:50%;\"></div>\n\t<p>width: 30%</p>\n\t<div class=\"easyui-progressbar\" data-options=\"value:40\" style=\"width:30%;\"></div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/propertygrid/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic PropertyGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic PropertyGrid</h2>\n\t<p>Click on row to change each property value.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"showGroup()\">ShowGroup</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"hideGroup()\">HideGroup</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"showHeader()\">ShowHeader</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"hideHeader()\">HideHeader</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"getChanges()\">GetChanges</a>\n\t</div>\n\t<table id=\"pg\" class=\"easyui-propertygrid\" style=\"width:300px\" data-options=\"\n\t\t\t\turl:'propertygrid_data1.json',\n\t\t\t\tmethod:'get',\n\t\t\t\tshowGroup:true,\n\t\t\t\tscrollbarSize:0\n\t\t\t\">\n\t</table>\n\n\t<script type=\"text/javascript\">\n\t\tfunction showGroup(){\n\t\t\t$('#pg').propertygrid({\n\t\t\t\tshowGroup:true\n\t\t\t});\n\t\t}\n\t\tfunction hideGroup(){\n\t\t\t$('#pg').propertygrid({\n\t\t\t\tshowGroup:false\n\t\t\t});\n\t\t}\n\t\tfunction showHeader(){\n\t\t\t$('#pg').propertygrid({\n\t\t\t\tshowHeader:true\n\t\t\t});\n\t\t}\n\t\tfunction hideHeader(){\n\t\t\t$('#pg').propertygrid({\n\t\t\t\tshowHeader:false\n\t\t\t});\n\t\t}\n\t\tfunction getChanges(){\n\t\t\tvar s = '';\n\t\t\tvar rows = $('#pg').propertygrid('getChanges');\n\t\t\tfor(var i=0; i<rows.length; i++){\n\t\t\t\ts += rows[i].name + ':' + rows[i].value + ',';\n\t\t\t}\n\t\t\talert(s)\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/propertygrid/customcolumns.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Customize Columns of PropertyGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Customize Columns of PropertyGrid</h2>\n\t<p>The columns of PropertyGrid can be changed.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table class=\"easyui-propertygrid\" style=\"width:300px\" data-options=\"\n\t\t\t\turl: 'propertygrid_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tshowGroup: true,\n\t\t\t\tscrollbarSize: 0,\n\t\t\t\tcolumns: mycolumns\n\t\t\t\">\n\t</table>\n\t<script>\n\t\tvar mycolumns = [[\n    \t\t{field:'name',title:'MyName',width:100,sortable:true},\n   \t\t    {field:'value',title:'MyValue',width:100,resizable:false}\n        ]];\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/propertygrid/groupformat.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Group Format - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Group Format</h2>\n\t<p>The user can change the group information.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table class=\"easyui-propertygrid\" style=\"width:300px\" data-options=\"\n\t\t\t\turl: 'propertygrid_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tshowGroup: true,\n\t\t\t\tscrollbarSize: 0,\n\t\t\t\tgroupFormatter: groupFormatter\n\t\t\t\">\n\t</table>\n\t<script>\n\t\tfunction groupFormatter(fvalue, rows){\n\t\t\treturn fvalue + ' - <span style=\"color:red\">' + rows.length + ' rows</span>';\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/propertygrid/propertygrid_data1.json",
    "content": "{\"total\":7,\"rows\":[\n\t{\"name\":\"Name\",\"value\":\"Bill Smith\",\"group\":\"ID Settings\",\"editor\":\"text\"},\n\t{\"name\":\"Address\",\"value\":\"\",\"group\":\"ID Settings\",\"editor\":\"text\"},\n\t{\"name\":\"Age\",\"value\":\"40\",\"group\":\"ID Settings\",\"editor\":\"numberbox\"},\n\t{\"name\":\"Birthday\",\"value\":\"01/02/2012\",\"group\":\"ID Settings\",\"editor\":\"datebox\"},\n\t{\"name\":\"SSN\",\"value\":\"123-456-7890\",\"group\":\"ID Settings\",\"editor\":\"text\"},\n\t{\"name\":\"Email\",\"value\":\"bill@gmail.com\",\"group\":\"Marketing Settings\",\"editor\":{\n\t\t\"type\":\"validatebox\",\n\t\t\"options\":{\n\t\t\t\"validType\":\"email\"\n\t\t}\n\t}},\n\t{\"name\":\"FrequentBuyer\",\"value\":\"false\",\"group\":\"Marketing Settings\",\"editor\":{\n\t\t\"type\":\"checkbox\",\n\t\t\"options\":{\n\t\t\t\"on\":true,\n\t\t\t\"off\":false\n\t\t}\n\t}}\n]}"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/radiobutton/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic RadioButton - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic RadioButton</h2>\n\t<form id=\"ff\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-radiobutton\" name=\"fruit\" value=\"Apple\" label=\"Apple:\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-radiobutton\" name=\"fruit\" value=\"Orange\" label=\"Orange:\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-radiobutton\" name=\"fruit\" value=\"Banana\" label=\"Banana:\">\n\t\t</div>\n\t</form>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/resizable/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Resizable - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Resizable</h2>\n\t<p>Click on the edge of box and move the edge to resize the box.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-resizable\" data-options=\"minWidth:50,minHeight:50\" style=\"width:200px;height:150px;border:1px solid #ccc;\">\n\t\t<div style=\"padding:20px\">Resize Me</div>\n\t</div>\n\t<div id=\"dd\" class=\"easyui-draggable easyui-resizable\" data-options=\"handle:'#mytitle'\" style=\"width:200px;height:150px;border:1px solid #ccc\">\n\t\t<div id=\"mytitle\" style=\"background:#ddd;padding:5px;\">Title</div>\n\t\t<div style=\"padding:20px\">Drag and Resize Me</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/searchbox/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic SearchBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic SearchBox</h2>\n\t<p>Click search button or press enter key in input box to do searching.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<input class=\"easyui-searchbox\" data-options=\"prompt:'Please Input Value',searcher:doSearch\" style=\"width:100%\">\n\t</div>\n\t<script>\n\t\tfunction doSearch(value){\n\t\t\talert('You input: ' + value);\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/searchbox/category.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Search Category - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Search Category</h2>\n\t<p>Select a category and click search button or press enter key in input box to do searching.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<input class=\"easyui-searchbox\" data-options=\"prompt:'Please Input Value',menu:'#mm',searcher:doSearch\" style=\"width:100%\">\n\t</div>\n\t<div id=\"mm\">\n\t\t<div data-options=\"name:'all',iconCls:'icon-ok'\">All News</div>\n\t\t<div data-options=\"name:'sports'\">Sports News</div>\n\t</div>\n\t<script>\n\t\tfunction doSearch(value,name){\n\t\t\talert('You input: ' + value+'('+name+')');\n\t\t}\n\t</script>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/searchbox/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid SearchBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid SearchBox</h2>\n\t<p>This example shows how to set the width of SearchBox to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-searchbox\" data-options=\"label:'width: 100%',labelPosition:'top',prompt:'Please Input Value',menu:'#mm'\" style=\"width:100%\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-searchbox\" data-options=\"label:'width: 80%',labelPosition:'top',prompt:'Please Input Value'\" style=\"width:80%\">\n\t\t</div>\n\t</div>\n\t<div id=\"mm\">\n\t\t<div data-options=\"name:'all',iconCls:'icon-ok'\">All News</div>\n\t\t<div data-options=\"name:'sports'\">Sports News</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/sidemenu/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic SideMenu - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic SideMenu</h2>\n\t<p>Collapse the side menu to display the main icon.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:;\" class=\"easyui-linkbutton\" onclick=\"toggle()\">Toggle</a>\n\t</div>\n\t<div id=\"sm\" class=\"easyui-sidemenu\" data-options=\"data:data\"></div>\n\t<script type=\"text/javascript\">\n\t\tvar data = [{\n\t        text: 'Item1',\n\t        iconCls: 'icon-sum',\n\t        state: 'open',\n\t        children: [{\n\t            text: 'Option1'\n\t        },{\n\t            text: 'Option2'\n\t        },{\n\t            text: 'Option3',\n\t            children: [{\n\t                text: 'Option31'\n\t            },{\n\t                text: 'Option32'\n\t            }]\n\t        }]\n\t    },{\n\t        text: 'Item2',\n\t        iconCls: 'icon-more',\n\t        children: [{\n\t            text: 'Option4'\n\t        },{\n\t            text: 'Option5'\n\t        },{\n\t            text: 'Option6'\n\t        }]\n\t    }];\n\n\t\tfunction toggle(){\n\t\t\tvar opts = $('#sm').sidemenu('options');\n\t\t\t$('#sm').sidemenu(opts.collapsed ? 'expand' : 'collapse');\n\t\t\topts = $('#sm').sidemenu('options');\n\t\t\t$('#sm').sidemenu('resize', {\n\t\t\t\twidth: opts.collapsed ? 60 : 200\n\t\t\t})\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/sidemenu/sidemenu_style.css",
    "content": "@import 'http://netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css';\n \n.sidemenu .accordion .panel-title{\n    color: #b8c7ce;\n}\n.sidemenu .accordion .accordion-header{\n    background: #222d32;\n    color: #b8c7ce;\n}\n.sidemenu .accordion .accordion-body{\n    background: #2c3b41;\n    color: #8aa4af;\n}\n.sidemenu .accordion .accordion-header-selected{\n    background: #1e282c;\n}\n.sidemenu .accordion .accordion-collapse{\n    background: transparent;\n}\n.sidemenu .tree-node-hover{\n    background: #2c3b41;\n    color: #fff;\n}\n.sidemenu .tree-node-selected{\n    background: #2c3b41;\n    color: #fff;\n}\n.sidemenu .accordion-header .panel-icon{\n    font-size: 16px;\n}\n.sidemenu .accordion-header .panel-tool{\n    display: none;\n}\n.sidemenu .accordion-header::after,\n.sidemenu .tree-node-nonleaf::after{\n    display: inline-block;\n    vertical-align: top;\n    border-style: solid;\n    transform:rotate(45deg);\n    width: 4px;\n    height: 4px;\n    content: '';\n    position: absolute;\n    right: 10px;\n    top: 50%;\n    margin-top: -3px;\n    border-width: 0 1px 1px 0;\n}\n.sidemenu .accordion-header-selected::after{\n    transform:rotate(-135deg);\n}\n.sidemenu .tree-node-nonleaf::after{\n    transform:rotate(-135deg);\n}\n.sidemenu .tree-node-nonleaf-collapsed::after{\n    transform:rotate(45deg);\n}\n.sidemenu-collapsed .accordion-header::after{\n    display: none;\n}\n.sidemenu-tooltip .accordion{\n    border-color: #1e282c;\n}"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/sidemenu/style.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>SideMenu Style - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>SideMenu Style</h2>\n\t<p>Collapse the side menu to display the main icon.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:;\" class=\"easyui-linkbutton\" onclick=\"toggle()\">Toggle</a>\n\t</div>\n\t<div id=\"sm\" class=\"easyui-sidemenu\" data-options=\"data:data\"></div>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"sidemenu_style.css\">\n\t<script type=\"text/javascript\">\n\t\tvar data = [{\n\t        text: 'Forms',\n\t        iconCls: 'fa fa-wpforms',\n\t        state: 'open',\n\t        children: [{\n\t            text: 'Form Element'\n\t        },{\n\t            text: 'Wizard'\n\t        },{\n\t            text: 'File Upload'\n\t        }]\n\t    },{\n\t        text: 'Mail',\n\t        iconCls: 'fa fa-at',\n\t        selected: true,\n\t        children: [{\n\t            text: 'Inbox'\n\t        },{\n\t            text: 'Sent'\n\t        },{\n\t            text: 'Trash',\n\t            children: [{\n\t                text: 'Item1'\n\t            },{\n\t                text: 'Item2'\n\t            }]\n\t        }]\n\t    },{\n\t        text: 'Layout',\n\t        iconCls: 'fa fa-table',\n\t        children: [{\n\t            text: 'Panel'\n\t        },{\n\t            text: 'Accordion'\n\t        },{\n\t            text: 'Tabs'\n\t        }]\n\t    }];\n\n\t\tfunction toggle(){\n\t\t\tvar opts = $('#sm').sidemenu('options');\n\t\t\t$('#sm').sidemenu(opts.collapsed ? 'expand' : 'collapse');\n\t\t\topts = $('#sm').sidemenu('options');\n\t\t\t$('#sm').sidemenu('resize', {\n\t\t\t\twidth: opts.collapsed ? 60 : 200\n\t\t\t})\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/slider/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Slider - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Slider</h2>\n\t<p>Drag the slider to change value.</p>\n\t<div style=\"margin:20px 0 50px 0;\"></div>\n\t<input class=\"easyui-slider\" style=\"width:300px\" data-options=\"showTip:true\">\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/slider/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid Slider - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid Slider</h2>\n\t<p>This example shows how to set the width of Slider to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0 50px 0;\"></div>\n\t<p>width: 50%</p>\n\t<input class=\"easyui-slider\" value=\"50\" data-options=\"showTip:true\" style=\"width:50%;\">\n\t<p>width: 30%</p>\n\t<input class=\"easyui-slider\" value=\"50\" data-options=\"showTip:true\" style=\"width:30%;\">\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/slider/formattip.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Format Tip Information - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Format Tip Information</h2>\n\t<p>This sample shows how to format tip information.</p>\n\t<div style=\"margin:20px 0 50px 0;\"></div>\n\t<input class=\"easyui-slider\" value=\"12\" style=\"width:300px\" data-options=\"\n\t\t\tshowTip: true,\n\t\t\trule: [0,'|',25,'|',50,'|',75,'|',100],\n\t\t\ttipFormatter: function(value){\n\t\t\t\treturn value+'px';\n\t\t\t},\n\t\t\tonChange: function(value){\n\t\t\t\t$('#ff').css('font-size', value);\n\t\t\t}\">\n\t<div id=\"ff\" style=\"margin-top:50px;font-size:12px\">jQuery EasyUI</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/slider/nonlinear.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Non Linear Slider - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Non Linear Slider</h2>\n\t<p>This example shows how to create a slider with a non-linear scale.</p>\n\t<div style=\"margin:20px 0 50px 0;\"></div>\n\t<div style=\"padding:2px\">\n\t<input class=\"easyui-slider\" style=\"width:400px\" data-options=\"\n\t\t\tshowTip:true,\n\t\t\trule: [0,'PI/4','PI/2'],\n\t\t\tmin:0,\n\t\t\tmax:300,\n\t\t\ttipFormatter:function(value){\n\t\t\t\treturn (value/300.0).toFixed(4);\n\t\t\t},\n\t\t\tconverter:{\n\t\t\t\ttoPosition:function(value,size){\n\t\t\t\t\tvar opts = $(this).slider('options');\n\t\t\t\t\treturn Math.asin(value/opts.max)/(Math.PI)*2*size;\n\t\t\t\t},\n\t\t\t\ttoValue:function(pos,size){\n\t\t\t\t\tvar opts = $(this).slider('options');\n\t\t\t\t\treturn Math.sin(pos/size*Math.PI/2)*opts.max;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonChange:function(v){\n\t\t\t\tvar opts = $(this).slider('options');\n\t\t\t\tvar pos = opts.converter.toPosition.call(this, v, opts.width);\n\t\t\t\tvar p = $('<div class=point></div>').appendTo('#cc');\n\t\t\t\tp.css('top', v);\n\t\t\t\tp.css(opts.reversed?'right':'left', pos);\n\t\t\t}\n\t\t\t\">\n\t</div>\n\t<div style=\"margin-bottom:30px\"></div>\n\t<div id=\"cc\" class=\"easyui-panel\" style=\"position:relative;width:404px;height:304px;\">\n\t</div>\n\t\n\t<style scoped=\"scoped\">\n\t\t.point{\n\t\t\tposition:absolute;\n\t\t\twidth:2px;\n\t\t\theight:2px;\n\t\t\tfont-size:0;\n\t\t\tbackground:red;\n\t\t}\n\t</style>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/slider/range.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Range Slider - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Range Slider</h2>\n\t<p>This sample shows how to define a range slider.</p>\n\t<div style=\"margin:20px 0 50px 0;\"></div>\n\t<input class=\"easyui-slider\" style=\"width:300px\" data-options=\"\n\t\t\t\tshowTip: true,\n\t\t\t\trange: true,\n\t\t\t\tvalue: [20,60],\n\t\t\t\trule: [0,'|',25,'|',50,'|',75,'|',100]\n\t\t\t\">\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/slider/rule.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Slider Rule - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Slider Rule</h2>\n\t<p>This sample shows how to define slider rule.</p>\n\t<div style=\"margin:20px 0 50px 0;\"></div>\n\t<input class=\"easyui-slider\" style=\"width:300px\" data-options=\"\n\t\t\t\tshowTip:true,\n\t\t\t\trule: [0,'|',25,'|',50,'|',75,'|',100]\n\t\t\t\">\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/slider/vertical.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Vertical Slider - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Vertical Slider</h2>\n\t<p>This sample shows how to create a vertical slider.</p>\n\t<div style=\"margin:20px 0 50px 0;\"></div>\n\t<div style=\"margin:0 50px\">\n\t<input class=\"easyui-slider\" style=\"height:300px\" data-options=\"\n\t\t\t\tshowTip: true,\n\t\t\t\tmode: 'v',\n\t\t\t\treversed: false,\n\t\t\t\trule: [0,'|',25,'|',50,'|',75,'|',100]\n\t\t\t\">\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/splitbutton/actions.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>SplitButton Actions - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>SplitButton Actions</h2>\n\t<p>Click the buttons below to perform actions.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"$('#btn-edit').splitbutton('disable')\">Disable Edit</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"$('#btn-edit').splitbutton('enable')\">Enable Edit</a>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"padding:5px;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true\">Home</a>\n\t\t<a id=\"btn-edit\" href=\"#\" class=\"easyui-splitbutton\" data-options=\"menu:'#mm1',iconCls:'icon-edit'\">Edit</a>\n\t\t<a href=\"#\" class=\"easyui-splitbutton\" data-options=\"menu:'#mm2',iconCls:'icon-ok'\">Ok</a>\n\t\t<a href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm3',iconCls:'icon-help'\">Help</a>\n\t</div>\n\t<div id=\"mm1\" style=\"width:150px;\">\n\t\t<div data-options=\"iconCls:'icon-undo'\">Undo</div>\n\t\t<div data-options=\"iconCls:'icon-redo'\">Redo</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>Cut</div>\n\t\t<div>Copy</div>\n\t\t<div>Paste</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>\n\t\t\t<span>Toolbar</span>\n\t\t\t<div>\n\t\t\t\t<div>Address</div>\n\t\t\t\t<div>Link</div>\n\t\t\t\t<div>Navigation Toolbar</div>\n\t\t\t\t<div>Bookmark Toolbar</div>\n\t\t\t\t<div class=\"menu-sep\"></div>\n\t\t\t\t<div>New Toolbar...</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div data-options=\"iconCls:'icon-remove'\">Delete</div>\n\t\t<div>Select All</div>\n\t</div>\n\t<div id=\"mm2\" style=\"width:100px;\">\n\t\t<div data-options=\"iconCls:'icon-ok'\">Ok</div>\n\t\t<div data-options=\"iconCls:'icon-cancel'\">Cancel</div>\n\t</div>\n\t<div id=\"mm3\" style=\"width:150px;\">\n\t\t<div>Help</div>\n\t\t<div>Update</div>\n\t\t<div>\n\t\t\t<span>About</span>\n\t\t\t<div class=\"menu-content\" style=\"padding:10px;text-align:left\">\n\t\t\t\t<img src=\"http://www.jeasyui.com/images/logo1.png\" style=\"width:150px;height:50px\">\n\t\t\t\t<p style=\"font-size:14px;color:#444\">Try jQuery EasyUI to build your modern, interactive, javascript applications.</p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/splitbutton/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic SplitButton - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic SplitButton</h2>\n\t<p>Move mouse over the arrow area of button to drop down menu.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"plain:true\">Home</a>\n\t\t<a href=\"#\" class=\"easyui-splitbutton\" data-options=\"menu:'#mm1',iconCls:'icon-edit'\">Edit</a>\n\t\t<a href=\"#\" class=\"easyui-splitbutton\" data-options=\"menu:'#mm2',iconCls:'icon-ok'\">Ok</a>\n\t\t<a href=\"#\" class=\"easyui-menubutton\" data-options=\"menu:'#mm3',iconCls:'icon-help'\">Help</a>\n\t</div>\n\t<div id=\"mm1\" style=\"width:150px;\">\n\t\t<div data-options=\"iconCls:'icon-undo'\">Undo</div>\n\t\t<div data-options=\"iconCls:'icon-redo'\">Redo</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>Cut</div>\n\t\t<div>Copy</div>\n\t\t<div>Paste</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>\n\t\t\t<span>Toolbar</span>\n\t\t\t<div>\n\t\t\t\t<div>Address</div>\n\t\t\t\t<div>Link</div>\n\t\t\t\t<div>Navigation Toolbar</div>\n\t\t\t\t<div>Bookmark Toolbar</div>\n\t\t\t\t<div class=\"menu-sep\"></div>\n\t\t\t\t<div>New Toolbar...</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div data-options=\"iconCls:'icon-remove'\">Delete</div>\n\t\t<div>Select All</div>\n\t</div>\n\t<div id=\"mm2\" style=\"width:100px;\">\n\t\t<div data-options=\"iconCls:'icon-ok'\">Ok</div>\n\t\t<div data-options=\"iconCls:'icon-cancel'\">Cancel</div>\n\t</div>\n\t<div id=\"mm3\" style=\"width:150px;\">\n\t\t<div>Help</div>\n\t\t<div>Update</div>\n\t\t<div>\n\t\t\t<span>About</span>\n\t\t\t<div class=\"menu-content\" style=\"padding:10px;text-align:left\">\n\t\t\t\t<img src=\"http://www.jeasyui.com/images/logo1.png\" style=\"width:150px;height:50px\">\n\t\t\t\t<p style=\"font-size:14px;color:#444\">Try jQuery EasyUI to build your modern, interactive, javascript applications.</p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/switchbutton/action.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>SwitchButton Actions - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>SwitchButton Actions</h2>\n\t<p>Click the buttons below to perform actions.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\n    <div style=\"margin:20px 0;\">\n        <a href=\"#\" class=\"easyui-linkbutton\" onclick=\"$('#sb').switchbutton('disable')\">Disable</a>\n        <a href=\"#\" class=\"easyui-linkbutton\" onclick=\"$('#sb').switchbutton('enable')\">Enable</a>\n    </div>\n\n    <input id=\"sb\" class=\"easyui-switchbutton\" checked style=\"width:100px;height:30px\">\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/switchbutton/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic SwitchButton - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic SwitchButton</h2>\n\t<p>Click the switchbutton to change its state.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div style=\"margin-bottom:20px\">\n\t\t<input class=\"easyui-switchbutton\" checked label=\"Receive mail:\" labelWidth=\"120\" tabindex=\"1\">\n\t</div>\n\t<div style=\"margin-bottom:20px\">\n\t\t<input class=\"easyui-switchbutton\" checked label=\"Shared network:\" labelWidth=\"120\" tabindex=\"2\">\n\t</div>\n\t<div style=\"margin-bottom:20px\">\n\t\t<input class=\"easyui-switchbutton\" label=\"Subscribed:\" labelWidth=\"120\" tabindex=\"3\">\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/_content.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>AJAX Content</title>\n</head>\n<body>\n\t<p style=\"font-size:14px\">Here is the content loaded via AJAX.</p>\n\t<ul>\n\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t<li>easyui provides essential functionality for building modern, interactive, javascript applications.</li>\n\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t<li>complete framework for HTML5 web page.</li>\n\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t<li>easyui is very easy but powerful.</li>\n\t</ul>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/autoheight.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Auto Height for Tabs - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Auto Height for Tabs</h2>\n\t<p>The tabs height is auto adjusted according to tab panel content.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-tabs\" style=\"width:700px;height:auto\">\n\t\t<div title=\"About\" style=\"padding:10px\">\n\t\t\t<p style=\"font-size:14px\">jQuery EasyUI framework helps you build your web pages easily.</p>\n\t\t\t<ul>\n\t\t\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t\t\t<li>easyui provides essential functionality for building modem, interactive, javascript applications.</li>\n\t\t\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t\t\t<li>complete framework for HTML5 web page.</li>\n\t\t\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t\t\t<li>easyui is very easy but powerful.</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<div title=\"My Documents\" style=\"padding:10px\">\n\t\t\t<ul class=\"easyui-tree\" data-options=\"url:'tree_data1.json',method:'get',animate:true\"></ul>\n\t\t</div>\n\t\t<div title=\"Help\" data-options=\"iconCls:'icon-help',closable:true\" style=\"padding:10px\">\n\t\t\tThis is the help content.\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Tabs - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Tabs</h2>\n\t<p>Click tab strip to swap tab panel content.</p>\n\t<div style=\"margin:20px 0 10px 0;\"></div>\n\t<div class=\"easyui-tabs\" style=\"width:700px;height:250px\">\n\t\t<div title=\"About\" style=\"padding:10px\">\n\t\t\t<p style=\"font-size:14px\">jQuery EasyUI framework helps you build your web pages easily.</p>\n\t\t\t<ul>\n\t\t\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t\t\t<li>easyui provides essential functionality for building modem, interactive, javascript applications.</li>\n\t\t\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t\t\t<li>complete framework for HTML5 web page.</li>\n\t\t\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t\t\t<li>easyui is very easy but powerful.</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<div title=\"My Documents\" style=\"padding:10px\">\n\t\t\t<ul class=\"easyui-tree\" data-options=\"url:'tree_data1.json',method:'get',animate:true\"></ul>\n\t\t</div>\n\t\t<div title=\"Help\" data-options=\"iconCls:'icon-help',closable:true\" style=\"padding:10px\">\n\t\t\tThis is the help content.\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/dropdown.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Tabs with DropDown - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Tabs with DropDown</h2>\n\t<p>This sample shows how to add a dropdown menu over a tab strip.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div id=\"tt\" style=\"width:700px;height:250px\">\n\t\t<div title=\"About\" style=\"padding:10px\">\n\t\t\t<p style=\"font-size:14px\">jQuery EasyUI framework helps you build your web pages easily.</p>\n\t\t\t<ul>\n\t\t\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t\t\t<li>easyui provides essential functionality for building modem, interactive, javascript applications.</li>\n\t\t\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t\t\t<li>complete framework for HTML5 web page.</li>\n\t\t\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t\t\t<li>easyui is very easy but powerful.</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<div title=\"My Documents\" style=\"padding:10px\">\n\t\t\t<ul class=\"easyui-tree\" data-options=\"url:'tree_data1.json',method:'get',animate:true\"></ul>\n\t\t</div>\n\t\t<div title=\"Help\" style=\"padding:10px\">\n\t\t\tThis is the help content.\n\t\t</div>\n\t</div>\n\t<div id=\"mm\">\n\t\t<div>Welcome</div>\n\t\t<div>Help Contents</div>\n\t\t<div data-options=\"iconCls:'icon-search'\">Search</div>\n\t\t<div>Dynamic Help</div>\n\t</div>\n\t\n\t<script>\n\t\t$(function(){\n\t\t\tvar p = $('#tt').tabs().tabs('tabs')[2];\n\t\t\tvar mb = p.panel('options').tab.find('a.tabs-inner');\n\t\t\tmb.menubutton({\n\t\t\t\tmenu:'#mm',\n\t\t\t\ticonCls:'icon-help'\n\t\t\t}).click(function(){\n\t\t\t\t$('#tt').tabs('select',2);\n\t\t\t});\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/fixedwidth.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fixed Tab Width - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fixed Tab Width</h2>\n\t<p>The tab strips have fixed width and height.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-tabs\" data-options=\"tabWidth:112\" style=\"width:700px;height:250px\">\n\t\t<div title=\"Home\" style=\"padding:10px\">\n\t\t\t<p>Home Content.</p>\n\t\t</div>\n\t\t<div title=\"Maps\" style=\"padding:10px\">\n\t\t\t<p>Maps Content.</p>\n\t\t</div>\n\t\t<div title=\"Journal\" style=\"padding:10px\">\n\t\t\t<p>Journal Content.</p>\n\t\t</div>\n\t\t<div title=\"History\" style=\"padding:10px\">\n\t\t\t<p>History Content.</p>\n\t\t</div>\n\t\t<div title=\"References\" style=\"padding:10px\">\n\t\t\t<p>References Content.</p>\n\t\t</div>\n\t\t<div title=\"Contact\" data-options=\"tabWidth:110\" style=\"padding:10px\">\n\t\t\t<p>Contact Content.</p>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid Tabs - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid Tabs</h2>\n\t<p>This example shows how to set the width of Tabs to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0 10px 0;\"></div>\n\t<div class=\"easyui-tabs\" style=\"width:100%;height:250px\">\n\t\t<div title=\"About\" style=\"padding:10px\">\n\t\t\t<p>The tabs has a width of 100%.</p>\n\t\t</div>\n\t\t<div title=\"Title2\"></div>\n\t\t<div title=\"Title3\"></div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/hover.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Hover Tabs - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Hover Tabs</h2>\n\t<p>Move mouse over the tab strip to open the tab panel.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div id=\"tt\" class=\"easyui-tabs\" style=\"width:700px;height:250px\">\n\t\t<div title=\"About\" style=\"padding:10px\">\n\t\t\t<p style=\"font-size:14px\">jQuery EasyUI framework helps you build your web pages easily.</p>\n\t\t\t<ul>\n\t\t\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t\t\t<li>easyui provides essential functionality for building modem, interactive, javascript applications.</li>\n\t\t\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t\t\t<li>complete framework for HTML5 web page.</li>\n\t\t\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t\t\t<li>easyui is very easy but powerful.</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<div title=\"My Documents\" style=\"padding:10px\">\n\t\t\t<ul class=\"easyui-tree\" data-options=\"url:'tree_data1.json',method:'get',animate:true\"></ul>\n\t\t</div>\n\t\t<div title=\"Help\" data-options=\"iconCls:'icon-help',closable:true\" style=\"padding:10px\">\n\t\t\tThis is the help content.\n\t\t</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\t$(function(){\n\t\t\tvar tabs = $('#tt').tabs().tabs('tabs');\n\t\t\tfor(var i=0; i<tabs.length; i++){\n\t\t\t\ttabs[i].panel('options').tab.unbind().bind('mouseenter',{index:i},function(e){\n\t\t\t\t\t$('#tt').tabs('select', e.data.index);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/nestedtabs.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Nested Tabs - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Nested Tabs</h2>\n\t<p>The tab panel can contain sub tabs or other components.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-tabs\" data-options=\"tools:'#tab-tools'\" style=\"width:700px;height:250px\">\n\t\t<div title=\"Sub Tabs\" style=\"padding:10px;\">\n\t\t\t<div class=\"easyui-tabs\" data-options=\"fit:true,plain:true\">\n\t\t\t\t<div title=\"Title1\" style=\"padding:10px;\">Content 1</div>\n\t\t\t\t<div title=\"Title2\" style=\"padding:10px;\">Content 2</div>\n\t\t\t\t<div title=\"Title3\" style=\"padding:10px;\">Content 3</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div title=\"Ajax\" data-options=\"href:'_content.html',closable:true\" style=\"padding:10px\"></div>\n\t\t<div title=\"Iframe\" data-options=\"closable:true\" style=\"overflow:hidden\">\n\t\t\t<iframe scrolling=\"yes\" frameborder=\"0\"  src=\"http://www.jeasyui.com/forum/index.php\" style=\"width:100%;height:100%;\"></iframe>\n\t\t</div>\n\t\t<div title=\"DataGrid\" data-options=\"closable:true\" style=\"padding:10px\">\n\t\t\t<table class=\"easyui-datagrid\" data-options=\"fit:true,singleSelect:true,rownumbers:true\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th data-options=\"field:'f1',width:100\">Title1</th>\n\t\t\t\t\t\t<th data-options=\"field:'f2',width:100\">Title2</th>\n\t\t\t\t\t\t<th data-options=\"field:'f3',width:100\">Title3</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>d11</td>\n\t\t\t\t\t\t<td>d12</td>\n\t\t\t\t\t\t<td>d13</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>d21</td>\n\t\t\t\t\t\t<td>d22</td>\n\t\t\t\t\t\t<td>d23</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/striptools.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Tabs Strip Tools - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Tabs Strip Tools</h2>\n\t<p>Click the mini-buttons on the tab strip to perform actions.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-tabs\" style=\"width:700px;height:250px\">\n\t\t<div title=\"About\" data-options=\"tools:'#p-tools'\" style=\"padding:10px\">\n\t\t\t<p style=\"font-size:14px\">jQuery EasyUI framework helps you build your web pages easily.</p>\n\t\t\t<ul>\n\t\t\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t\t\t<li>easyui provides essential functionality for building modem, interactive, javascript applications.</li>\n\t\t\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t\t\t<li>complete framework for HTML5 web page.</li>\n\t\t\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t\t\t<li>easyui is very easy but powerful.</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<div title=\"Help\" data-options=\"iconCls:'icon-help',closable:true\" style=\"padding:10px\">\n\t\t\tThis is the help content.\n\t\t</div>\n\t</div>\n\t<div id=\"p-tools\">\n\t\t<a href=\"javascript:void(0)\" class=\"icon-mini-add\" onclick=\"alert('add')\"></a>\n\t\t<a href=\"javascript:void(0)\" class=\"icon-mini-edit\" onclick=\"alert('edit')\"></a>\n\t\t<a href=\"javascript:void(0)\" class=\"icon-mini-refresh\" onclick=\"alert('refresh')\"></a>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/style.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Tabs Style - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Tabs Style</h2>\n\t<p>Click the options below to change the tabs style.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<input id=\"plain\" type=\"checkbox\" onclick=\"setTabs()\"><span>plain</span><br>\n\t\t<input id=\"narrow\" type=\"checkbox\" onclick=\"setTabs()\"><span>narrow</span><br>\n\t\t<input id=\"pill\" type=\"checkbox\" onclick=\"setTabs()\"><span>pill</span><br>\n\t\t<input id=\"justified\" type=\"checkbox\" onclick=\"setTabs()\"><span>justified</span>\n\t</div>\n\t<div id=\"tt\" class=\"easyui-tabs\" style=\"width:700px;height:250px\">\n\t\t<div title=\"About\" style=\"padding:10px\">\n\t\t\t<p style=\"font-size:14px\">jQuery EasyUI framework helps you build your web pages easily.</p>\n\t\t\t<ul>\n\t\t\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t\t\t<li>easyui provides essential functionality for building modem, interactive, javascript applications.</li>\n\t\t\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t\t\t<li>complete framework for HTML5 web page.</li>\n\t\t\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t\t\t<li>easyui is very easy but powerful.</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<div title=\"My Documents\" style=\"padding:10px\">\n\t\t\t<ul class=\"easyui-tree\" data-options=\"url:'tree_data1.json',method:'get',animate:true\"></ul>\n\t\t</div>\n\t\t<div title=\"Help\" data-options=\"iconCls:'icon-help',closable:true\" style=\"padding:10px\">\n\t\t\tThis is the help content.\n\t\t</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction setTabs(){\n\t\t\t$('#tt').tabs({\n\t\t\t\tplain: $('#plain').is(':checked'),\n\t\t\t\tnarrow: $('#narrow').is(':checked'),\n\t\t\t\tpill: $('#pill').is(':checked'),\n\t\t\t\tjustified: $('#justified').is(':checked')\n\t\t\t})\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/tabimage.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Tabs with Images - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Tabs with Images</h2>\n\t<p>The tab strip can display big images.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-tabs\" data-options=\"tabWidth:100,tabHeight:60\" style=\"width:700px;height:250px\">\n\t\t<div title=\"<span class='tt-inner'><img src='images/modem.png'/><br>Modem</span>\" style=\"padding:10px\">\n\t\t\t<p>A modem (modulator-demodulator) is a device that modulates an analog carrier signal to encode digital information, and also demodulates such a carrier signal to decode the transmitted information.</p>\n\t\t</div>\n\t\t<div title=\"<span class='tt-inner'><img src='images/scanner.png'/><br>Scanner</span>\" style=\"padding:10px\">\n\t\t\t<p>In computing, an image scanner—often abbreviated to just scanner—is a device that optically scans images, printed text, handwriting, or an object, and converts it to a digital image.</p>\n\t\t</div>\n\t\t<div title=\"<span class='tt-inner'><img src='images/pda.png'/><br>Pda</span>\" style=\"padding:10px\">\n\t\t\t<p>A personal digital assistant (PDA), also known as a palmtop computer, or personal data assistant, is a mobile device that functions as a personal information manager. PDAs are largely considered obsolete with the widespread adoption of smartphones.</p>\n\t\t</div>\n\t\t<div title=\"<span class='tt-inner'><img src='images/tablet.png'/><br>Tablet</span>\" style=\"padding:10px\">\n\t\t\t<p>A tablet computer, or simply tablet, is a one-piece mobile computer. Devices typically have a touchscreen, with finger or stylus gestures replacing the conventional computer mouse.</p>\n\t\t</div>\n\t</div>\n\t<style scoped=\"scoped\">\n\t\t.tt-inner{\n\t\t\tdisplay:inline-block;\n\t\t\tline-height:12px;\n\t\t\tpadding-top:5px;\n\t\t}\n\t\t.tt-inner img{\n\t\t\tborder:0;\n\t\t}\n\t</style>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/tabposition.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Tab Position - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Tab Position</h2>\n\t<p>Click the 'position' drop-down list and select an item to change the tab position.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<span>Position:</span>\n\t\t<select onchange=\"$('#tt').tabs({tabPosition:this.value})\">\n\t\t\t<option value=\"top\">Top</option>\n\t\t\t<option value=\"bottom\">Bottom</option>\n\t\t\t<option value=\"left\">Left</option>\n\t\t\t<option value=\"right\">Right</option>\n\t\t</select>\n\t</div>\n\t<div id=\"tt\" class=\"easyui-tabs\" style=\"width:700px;height:250px\">\n\t\t<div title=\"About\" style=\"padding:10px\">\n\t\t\t<p style=\"font-size:14px\">jQuery EasyUI framework helps you build your web pages easily.</p>\n\t\t\t<ul>\n\t\t\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t\t\t<li>easyui provides essential functionality for building modem, interactive, javascript applications.</li>\n\t\t\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t\t\t<li>complete framework for HTML5 web page.</li>\n\t\t\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t\t\t<li>easyui is very easy but powerful.</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<div title=\"My Documents\" style=\"padding:10px\">\n\t\t\t<ul class=\"easyui-tree\" data-options=\"url:'tree_data1.json',method:'get',animate:true\"></ul>\n\t\t</div>\n\t\t<div title=\"Help\" data-options=\"iconCls:'icon-help',closable:true\" style=\"padding:10px\">\n\t\t\tThis is the help content.\n\t\t</div>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/tabstools.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Tabs Tools - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Tabs Tools</h2>\n\t<p>Click the buttons on the top right of tabs header to add or remove tab panel.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div id=\"tt\" class=\"easyui-tabs\" data-options=\"tools:'#tab-tools'\" style=\"width:700px;height:250px\">\n\t</div>\n\t<div id=\"tab-tools\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"plain:true,iconCls:'icon-add'\" onclick=\"addPanel()\"></a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"plain:true,iconCls:'icon-remove'\" onclick=\"removePanel()\"></a>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tvar index = 0;\n\t\tfunction addPanel(){\n\t\t\tindex++;\n\t\t\t$('#tt').tabs('add',{\n\t\t\t\ttitle: 'Tab'+index,\n\t\t\t\tcontent: '<div style=\"padding:10px\">Content'+index+'</div>',\n\t\t\t\tclosable: true\n\t\t\t});\n\t\t}\n\t\tfunction removePanel(){\n\t\t\tvar tab = $('#tt').tabs('getSelected');\n\t\t\tif (tab){\n\t\t\t\tvar index = $('#tt').tabs('getTabIndex', tab);\n\t\t\t\t$('#tt').tabs('close', index);\n\t\t\t}\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/tree_data1.json",
    "content": "[{\n\t\"id\":1,\n\t\"text\":\"My Documents\",\n\t\"children\":[{\n\t\t\"id\":11,\n\t\t\"text\":\"Photos\",\n\t\t\"state\":\"closed\",\n\t\t\"children\":[{\n\t\t\t\"id\":111,\n\t\t\t\"text\":\"Friend\"\n\t\t},{\n\t\t\t\"id\":112,\n\t\t\t\"text\":\"Wife\"\n\t\t},{\n\t\t\t\"id\":113,\n\t\t\t\"text\":\"Company\"\n\t\t}]\n\t},{\n\t\t\"id\":12,\n\t\t\"text\":\"Program Files\",\n\t\t\"children\":[{\n\t\t\t\"id\":121,\n\t\t\t\"text\":\"Intel\"\n\t\t},{\n\t\t\t\"id\":122,\n\t\t\t\"text\":\"Java\",\n\t\t\t\"attributes\":{\n\t\t\t\t\"p1\":\"Custom Attribute1\",\n\t\t\t\t\"p2\":\"Custom Attribute2\"\n\t\t\t}\n\t\t},{\n\t\t\t\"id\":123,\n\t\t\t\"text\":\"Microsoft Office\"\n\t\t},{\n\t\t\t\"id\":124,\n\t\t\t\"text\":\"Games\",\n\t\t\t\"checked\":true\n\t\t}]\n\t},{\n\t\t\"id\":13,\n\t\t\"text\":\"index.html\"\n\t},{\n\t\t\"id\":14,\n\t\t\"text\":\"about.html\"\n\t},{\n\t\t\"id\":15,\n\t\t\"text\":\"welcome.html\"\n\t}]\n}]\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/autocomplete.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>TagBox with Autocomplete - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>TagBox with Autocomplete</h2>\n\t<p>The autocomplete is the built-in feature that allows the user to select a value from the drop-down list.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<input class=\"easyui-tagbox\" label=\"Add a tag\" style=\"width:100%\" data-options=\"\n\t\t\t\turl: 'tagbox_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tvalue: '3',\n\t\t\t\tvalueField: 'id',\n\t\t\t\ttextField: 'text',\n\t\t\t\tlimitToList: true,\n\t\t\t\thasDownArrow: true,\n\t\t\t\tprompt: 'Select a Language'\n\t\t\t\t\">\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic TagBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic TagBox</h2>\n\t<p>The TagBox is created from a simple input element.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<input class=\"easyui-tagbox\" value=\"Apple,Orange\" label=\"Add a tag\" style=\"width:100%\">\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/button.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>TagBox with Button - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>TagBox with Button</h2>\n\t<p>The button can be attached to a tagbox.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<input class=\"easyui-tagbox\" value=\"Apple,Orange\" label=\"Add a tag\" style=\"width:100%\" data-options=\"\n\t\t\t\tbuttonText: 'Button',\n\t\t\t\tonClickButton: function(){\n\t\t\t\t\talert('click button');\n\t\t\t\t}\n\t\t\t\t\">\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/format.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Format TagBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Format TagBox</h2>\n\t<p>This example shows how to format the tagbox values.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<input class=\"easyui-tagbox\" value=\"Apple,Orange\" label=\"Add a tag\" style=\"width:100%\" data-options=\"\n\t\t\t\ttagFormatter: function(value, row){\n\t\t\t\t\treturn '[' + value + ']';\n\t\t\t\t}\n\t\t\t\t\">\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/style.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom TagBox Style - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom TagBox Style</h2>\n\t<p>This example shows how to apply different CSS styles to different tags.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<input class=\"easyui-tagbox\" value=\"3\" label=\"Add a tag\" style=\"width:100%\" data-options=\"\n\t\t\t\turl: 'tagbox_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tvalue: '3,4',\n\t\t\t\tvalueField: 'id',\n\t\t\t\ttextField: 'text',\n\t\t\t\tlimitToList: true,\n\t\t\t\tprompt: 'Select a Language',\n\t\t\t\ttagStyler: function(value){\n\t\t\t\t\tif (value == 3){\n\t\t\t\t\t\treturn 'background:#ffd7d7;color:#c65353';\n\t\t\t\t\t} else if (value == 4){\n\t\t\t\t\t\treturn 'background:#b8eecf;color:#45872c';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\">\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/tagbox_data1.json",
    "content": "[{\n\t\"id\":\"1\",\n\t\"text\":\"Java\",\n\t\"desc\":\"Write once, run anywhere\"\n},{\n\t\"id\":\"2\",\n\t\"text\":\"C#\",\n\t\"desc\":\"One of the programming languages designed for the Common Language Infrastructure\"\n},{\n\t\"id\":\"3\",\n\t\"text\":\"Ruby\",\n\t\"desc\":\"A dynamic, reflective, general-purpose object-oriented programming language\"\n},{\n\t\"id\":\"4\",\n\t\"text\":\"Perl\",\n\t\"desc\":\"A high-level, general-purpose, interpreted, dynamic programming language\"\n},{\n\t\"id\":\"5\",\n\t\"text\":\"Basic\",\n\t\"desc\":\"A family of general-purpose, high-level programming languages\"\n}]"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/validate.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Validate TagBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Validate TagBox</h2>\n\t<p>This example shows how to validate the tagbox values.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<input class=\"easyui-tagbox\" value=\"Apple,Orange\" label=\"Add a tag\" style=\"width:100%\" data-options=\"\n\t\t\t\tvalidType: ['length[3,10]','uniquetag']\n\t\t\t\t\">\n\t</div>\n\t<script type=\"text/javascript\">\n\t\t$.extend($.fn.validatebox.defaults.rules, {\n\t\t\tuniquetag: {\n\t\t\t\tvalidator: function(value, param){\n\t\t\t\t\tvar tb = $(this).closest('.tagbox').prev();\n\t\t\t\t\tvar values = tb.tagbox('getValues');\n\t\t\t\t\treturn $.inArray(value, values)==-1;\n\t\t\t\t},\n\t\t\t\tmessage: 'The tag value already exists.'\n\t\t\t}\n\t\t})\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic TextBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic TextBox</h2>\n\t<p>The textbox allows a user to enter information.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"Register\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" label=\"Email:\" labelPosition=\"top\" data-options=\"prompt:'Enter a email address...',validType:'email'\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" label=\"First Name:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" label=\"Last Name:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" label=\"Company:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t\n\t\t<div>\n\t\t\t<a href=\"#\" class=\"easyui-linkbutton\" iconCls=\"icon-ok\" style=\"width:100%;height:32px\">Register</a>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/button.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>TextBox with Button - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>TextBox with Button</h2>\n\t<p>The button can be attached to a textbox.</p>\n\t<div style=\"margin:20px 0 40px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" data-options=\"buttonText:'SEARCH',prompt:'Search...'\" style=\"width:100%;height:32px;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" data-options=\"buttonText:'Search',buttonAlign:'left',buttonIcon:'icon-search',prompt:'Search...'\" style=\"width:100%;height:32px;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/clearicon.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>TextBox with Clear Icon - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>TextBox with Clear Icon</h2>\n\t<p>This example shows how to create an textbox with an icon to clear the input element itself.</p>\n\t<div style=\"margin:20px 0 40px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"tt\" style=\"width:100%;\" data-options=\"\n\t\t\t\t\tlabel: 'Email:',\n\t\t\t\t\tlabelPosition: 'top',\n\t\t\t\t\tprompt: 'Input something here!',\n\t\t\t\t\tvalue: 'my@email.com',\n\t\t\t\t\ticons:[{\n\t\t\t\t\t\ticonCls:'icon-search',\n\t\t\t\t\t\thandler: function(e){\n\t\t\t\t\t\t\tvar v = $(e.data.target).textbox('getValue');\n\t\t\t\t\t\t\talert('The inputed value is ' + (v ? v : 'empty'));\n\t\t\t\t\t\t}\n\t\t\t\t\t}]\n\t\t\t\t\t\">\n\t\t</div>\n\t</div>\n\t<script>\n\t\t$.extend($.fn.textbox.methods, {\n\t\t\taddClearBtn: function(jq, iconCls){\n\t\t\t\treturn jq.each(function(){\n\t\t\t\t\tvar t = $(this);\n\t\t\t\t\tvar opts = t.textbox('options');\n\t\t\t\t\topts.icons = opts.icons || [];\n\t\t\t\t\topts.icons.unshift({\n\t\t\t\t\t\ticonCls: iconCls,\n\t\t\t\t\t\thandler: function(e){\n\t\t\t\t\t\t\t$(e.data.target).textbox('clear').textbox('textbox').focus();\n\t\t\t\t\t\t\t$(this).css('visibility','hidden');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tt.textbox();\n\t\t\t\t\tif (!t.textbox('getText')){\n\t\t\t\t\t\tt.textbox('getIcon',0).css('visibility','hidden');\n\t\t\t\t\t}\n\t\t\t\t\tt.textbox('textbox').bind('keyup', function(){\n\t\t\t\t\t\tvar icon = t.textbox('getIcon',0);\n\t\t\t\t\t\tif ($(this).val()){\n\t\t\t\t\t\t\ticon.css('visibility','visible');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ticon.css('visibility','hidden');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\t$(function(){\n\t\t\t$('#tt').textbox().textbox('addClearBtn', 'icon-clear');\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/custom.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom TextBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom TextBox</h2>\n\t<p>This example shows how to custom a login form.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"Login to system\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:10px\">\n\t\t\t<input class=\"easyui-textbox\" style=\"width:100%;height:40px;padding:12px\" data-options=\"prompt:'Username',iconCls:'icon-man',iconWidth:38\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" type=\"password\" style=\"width:100%;height:40px;padding:12px\" data-options=\"prompt:'Password',iconCls:'icon-lock',iconWidth:38\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t\t<span>Remember me</span>\n\t\t</div>\n\t\t<div>\n\t\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-ok'\" style=\"padding:5px 0px;width:100%;\">\n\t\t\t\t<span style=\"font-size:14px;\">Login</span>\n\t\t\t</a>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid TextBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid TextBox</h2>\n\t<p>This example shows how to set the width of TextBox to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" data-options=\"label:'width: 100%',labelPosition:'top',prompt:'Enter something here...'\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" data-options=\"label:'width: 50%',labelPosition:'top',prompt:'Enter something here...'\" style=\"width:50%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/icons.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>TextBox with Icons - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>TextBox with Icons</h2>\n\t<p>Click the icons on textbox to perform actions.</p>\n\t<div style=\"margin:20px 0 40px 0;\"></div>\n    <div style=\"margin:10px 0 20px 0\">\n        <span>Select Icon Align: </span>\n        <select onchange=\"$('#tt').textbox({iconAlign:this.value})\">\n            <option value=\"right\">Right</option>\n            <option value=\"left\">Left</option>\n        </select>\n    </div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"tt\" class=\"easyui-textbox\" style=\"width:100%;\" data-options=\"\n\t\t\t\t\tlabel: 'Icons:',\n\t\t\t\t\tlabelPosition: 'top',\n\t\t\t\t\tprompt: 'Input something here!',\n\t\t\t\t\ticonWidth: 22,\n\t\t\t\t\ticons: [{\n\t\t\t\t\t\ticonCls:'icon-add',\n\t\t\t\t\t\thandler: function(e){\n\t\t\t\t\t\t\t$(e.data.target).textbox('setValue', 'Something added!');\n\t\t\t\t\t\t}\n\t\t\t\t\t},{\n\t\t\t\t\t\ticonCls:'icon-remove',\n\t\t\t\t\t\thandler: function(e){\n\t\t\t\t\t\t\t$(e.data.target).textbox('clear');\n\t\t\t\t\t\t}\n\t\t\t\t\t},{\n\t\t\t\t\t\ticonCls:'icon-search',\n\t\t\t\t\t\thandler: function(e){\n\t\t\t\t\t\t\tvar v = $(e.data.target).textbox('getValue');\n\t\t\t\t\t\t\talert('The inputed value is ' + (v ? v : 'empty'));\n\t\t\t\t\t\t}\n\t\t\t\t\t}]\n\t\t\t\t\t\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/multiline.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Multiline TextBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Multiline TextBox</h2>\n\t<p>This example shows how to define a textbox for the user to enter multi-line text input.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" label=\"Name:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" label=\"Description:\" labelPosition=\"top\" multiline=\"true\" value=\"This TextBox will allow the user to enter multiple lines of text.\" style=\"width:100%;height:120px\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/size.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>TextBox Size - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>TextBox Size</h2>\n\t<p>The textbox can vary in size.</p>\n\t<div style=\"margin:20px 0 40px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" data-options=\"iconCls:'icon-search',iconWidth:28,prompt:'Search small...'\" style=\"width:100%;height:22px;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" data-options=\"iconCls:'icon-search',iconWidth:28,prompt:'Search large...'\" style=\"width:100%;height:26px;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" data-options=\"iconCls:'icon-search',iconWidth:28,prompt:'Search big...'\" style=\"width:100%;height:32px;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-textbox\" data-options=\"iconCls:'icon-search',iconWidth:28,prompt:'Search huge...'\" style=\"width:100%;height:40px;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/timepicker/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic TimePicker - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic TimePicker</h2>\n\t<p>Click drop-down button to choose time on a clock.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-timepicker\" label=\"Start Time:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-timepicker\" label=\"End Time:\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/timespinner/actions.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>TimeSpinner Actions - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>TimeSpinner Actions</h2>\n\t<p>Click the buttons below to perform actions.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"getValue()\">GetValue</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"setValue()\">SetValue</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"disable()\">Disable</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"enable()\">Enable</a>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input id=\"dt\" class=\"easyui-timespinner\" label=\"Select Time:\" labelPosition=\"top\" value=\"01:20\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n\t<script>\n\t\tfunction getValue(){\n\t\t\tvar val = $('#dt').timespinner('getValue');\n\t\t\talert(val);\n\t\t}\n\t\tfunction setValue(){\n\t\t\t$('#dt').timespinner('setValue', '09:45');\n\t\t}\n\t\tfunction disable(){\n\t\t\t$('#dt').timespinner('disable');\n\t\t}\n\t\tfunction enable(){\n\t\t\t$('#dt').timespinner('enable');\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/timespinner/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic TimeSpinner - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic TimeSpinner</h2>\n\t<p>Click spin button to adjust time.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-timespinner\" label=\"Start Time:\" labelPosition=\"top\" value=\"01:20\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-timespinner\" label=\"End Time:\" labelPosition=\"top\" value=\"14:45\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/timespinner/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid TimeSpinner - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid TimeSpinner</h2>\n\t<p>This example shows how to set the width of TimeSpinner to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-timespinner\" label=\"width: 100%\" labelPosition=\"top\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-timespinner\" label=\"width: 50%\" labelPosition=\"top\" style=\"width:50%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/timespinner/hour12.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>12 Hour Format - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>12 Hour Format</h2>\n\t<p>Displays in a 12 hour format.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-timespinner\" label=\"Start Time:\" labelPosition=\"top\" value=\"01:20\" hour12=\"true\" style=\"width:100%;\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-timespinner\" label=\"End Time:\" labelPosition=\"top\" value=\"14:45\" hour12=\"true\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/timespinner/range.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Time Range - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Time Range</h2>\n\t<p>The time value is constrained in specified range.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<span>From 08:30 to 18:00</span>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<input class=\"easyui-timespinner\" data-options=\"label:'Select Time:',labelPosition:'top',min:'08:30',max:'18:00'\" style=\"width:100%;\">\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/_content.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>AJAX Content</title>\n</head>\n<body>\n\t<p style=\"font-size:14px\">Here is the content loaded via AJAX.</p>\n\t<ul>\n\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t<li>easyui provides essential functionality for building modern, interactive, javascript applications.</li>\n\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t<li>complete framework for HTML5 web page.</li>\n\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t<li>easyui is very easy but powerful.</li>\n\t</ul>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/_dialog.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Dialog Content</title>\n</head>\n<body>\n\t<div style=\"padding:5px;\">\n\t\t<div style=\"padding:5px 10px\">\n\t\t\t<div>User Name:</div>\n\t\t\t<input style=\"width:160px\">\n\t\t</div>\n\t\t<div style=\"padding:5px 10px\">\n\t\t\t<div>Password:</div>\n\t\t\t<input type=\"password\" style=\"width:160px\">\n\t\t</div>\n\t\t<div style=\"padding:5px 10px;text-align:center\">\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\">Login</a>\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\">Cancel</a>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/ajax.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Ajax Tooltip - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Ajax Tooltip</h2>\n\t<p>The tooltip content can be loaded via AJAX.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<a href=\"#\" class=\"easyui-tooltip\" data-options=\"\n\t\t\tcontent: $('<div></div>'),\n\t\t\tonShow: function(){\n\t\t\t\t$(this).tooltip('arrow').css('left', 20);\n\t\t\t\t$(this).tooltip('tip').css('left', $(this).offset().left);\n\t\t\t},\n\t\t\tonUpdate: function(cc){\n\t\t\t\tcc.panel({\n\t\t\t\t\twidth: 500,\n\t\t\t\t\theight: 'auto',\n\t\t\t\t\tborder: false,\n\t\t\t\t\thref: '_content.html'\n\t\t\t\t});\n\t\t\t}\n\t\t\">Hove me</a> to display tooltip content via AJAX.\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Tooltip - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Tooltip</h2>\n\t<p>Hover the links to display tooltip message.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<p>The tooltip can use each elements title attribute.\n\t<a href=\"#\" title=\"This is the tooltip message.\" class=\"easyui-tooltip\">Hover me</a> to display tooltip.\n\t</p>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/customcontent.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom Tooltip Content - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom Tooltip Content</h2>\n\t<p>Access to each elements attribute to get the tooltip content.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\">\n\t\t<div id=\"pg\" data-options=\"total:114\"></div>\n\t</div>\n\t\n\t<script>\n\t\t$(function(){\n\t\t\t$('#pg').pagination().find('a.l-btn').tooltip({\n\t\t\t\tcontent: function(){\n\t\t\t\t\tvar cc = $(this).find('span.l-btn-icon').attr('class').split(' ');\n\t\t\t\t\tvar icon = cc[1].split('-')[1];\n\t\t\t\t\treturn icon + ' page';\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/customstyle.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom Tooltip Style - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom Tooltip Style</h2>\n\t<p>This sample shows how to change the tooltip style.</p>\n\t<div style=\"margin:s0px 0;\"></div>\n\t<div style=\"padding:10px 200px\">\n\t\t<div id=\"pp1\" class=\"easyui-panel\" style=\"width:100px;padding:5px\">Hover Me</div>\n\t</div>\n\t<div style=\"padding:10px 200px\">\n\t\t<div id=\"pp2\" class=\"easyui-panel\" style=\"width:100px;padding:5px\">Hover Me</div>\n\t</div>\n\t<script>\n\t\t$(function(){\n\t\t\t$('#pp1').tooltip({\n\t\t\t\tposition: 'right',\n\t\t\t\tcontent: '<span style=\"color:#fff\">This is the tooltip message.</span>',\n\t\t\t\tonShow: function(){\n\t\t\t\t\t$(this).tooltip('tip').css({\n\t\t\t\t\t\tbackgroundColor: '#666',\n\t\t\t\t\t\tborderColor: '#666'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\t$('#pp2').tooltip({\n\t\t\t\tposition: 'bottom',\n\t\t\t\tcontent: '<div style=\"padding:5px;background:#eee;color:#000\">This is the tooltip message.</div>',\n\t\t\t\tonShow: function(){\n\t\t\t\t\t$(this).tooltip('tip').css({\n\t\t\t\t\t\tbackgroundColor: '#fff000',\n\t\t\t\t\t\tborderColor: '#ff0000',\n\t\t\t\t\t\tboxShadow: '1px 1px 3px #292929'\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonPosition: function(){\n\t\t\t\t\t$(this).tooltip('tip').css('left', $(this).offset().left);\n\t\t\t\t\t$(this).tooltip('arrow').css('left', 20);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/position.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Tooltip Position - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Tooltip Position</h2>\n\t<p>Click the drop-down list below to change where the tooltip appears.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<span>Select position:</span>\n\t<select onchange=\"changePosition(this.value)\">\n\t\t<option value=\"bottom\">Bottom</option>\n\t\t<option value=\"top\">Top</option>\n\t\t<option value=\"left\">Left</option>\n\t\t<option value=\"right\">Right</option>\n\t</select>\n\t<div style=\"padding:10px 200px\">\n\t<div id=\"pp\" class=\"easyui-panel easyui-tooltip\" title=\"This is the tooltip message.\" style=\"width:100px;padding:5px\">Hover Me</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction changePosition(pos){\n\t\t\t$('#pp').tooltip({\n\t\t\t\tposition: pos\n\t\t\t});\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/toolbar.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Tooltip as Toolbar - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Tooltip as Toolbar</h2>\n\t<p>This sample shows how to create a tooltip style toolbar.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div style=\"padding:10px 200px\">\n\t\t<p><a id=\"dd\" href=\"javascript:void(0)\" class=\"easyui-tooltip\" data-options=\"\n\t\t\t\t\thideEvent: 'none',\n\t\t\t\t\tcontent: function(){\n\t\t\t\t\t\treturn $('#toolbar');\n\t\t\t\t\t},\n\t\t\t\t\tonShow: function(){\n\t\t\t\t\t\tvar t = $(this);\n\t\t\t\t\t\tt.tooltip('tip').focus().unbind().bind('blur',function(){\n\t\t\t\t\t\t\tt.tooltip('hide');\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\">Hover me</a> to display toolbar.</p>\n\t</div>\n\t<div style=\"display:none\">\n\t\t<div id=\"toolbar\">\n\t\t\t<a href=\"#\" class=\"easyui-linkbutton easyui-tooltip\" title=\"Add\" data-options=\"iconCls:'icon-add',plain:true\"></a>\n\t\t\t<a href=\"#\" class=\"easyui-linkbutton easyui-tooltip\" title=\"Cut\" data-options=\"iconCls:'icon-cut',plain:true\"></a>\n\t\t\t<a href=\"#\" class=\"easyui-linkbutton easyui-tooltip\" title=\"Remove\" data-options=\"iconCls:'icon-remove',plain:true\"></a>\n\t\t\t<a href=\"#\" class=\"easyui-linkbutton easyui-tooltip\" title=\"Undo\" data-options=\"iconCls:'icon-undo',plain:true\"></a>\n\t\t\t<a href=\"#\" class=\"easyui-linkbutton easyui-tooltip\" title=\"Redo\" data-options=\"iconCls:'icon-redo',plain:true\"></a>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/tooltipdialog.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Tooltip Dialog - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Tooltip Dialog</h2>\n\t<p>This sample shows how to create a tooltip dialog.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div style=\"padding:10px 200px\">\n\t\t<p><a id=\"dd\" href=\"javascript:void(0)\">Click here</a> to see the tooltip dialog.\n\t</div>\n\t<script>\n\t\t$(function(){\n\t\t\t$('#dd').tooltip({\n\t\t\t\tcontent: $('<div></div>'),\n\t\t\t\tshowEvent: 'click',\n\t\t\t\tonUpdate: function(content){\n\t\t\t\t\tcontent.panel({\n\t\t\t\t\t\twidth: 200,\n\t\t\t\t\t\tborder: false,\n\t\t\t\t\t\ttitle: 'Login',\n\t\t\t\t\t\thref: '_dialog.html'\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonShow: function(){\n\t\t\t\t\tvar t = $(this);\n\t\t\t\t\tt.tooltip('tip').unbind().bind('mouseenter', function(){\n\t\t\t\t\t\tt.tooltip('show');\n\t\t\t\t\t}).bind('mouseleave', function(){\n\t\t\t\t\t\tt.tooltip('hide');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/actions.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Tree Actions - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Tree Actions</h2>\n\t<p>Click the buttons below to perform actions.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"collapseAll()\">CollapseAll</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"expandAll()\">ExpandAll</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"expandTo()\">ExpandTo</a>\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"getSelected()\">GetSelected</a>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"padding:5px\">\n\t\t<ul id=\"tt\" class=\"easyui-tree\" data-options=\"url:'tree_data1.json',method:'get',animate:true\"></ul>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction collapseAll(){\n\t\t\t$('#tt').tree('collapseAll');\n\t\t}\n\t\tfunction expandAll(){\n\t\t\t$('#tt').tree('expandAll');\n\t\t}\n\t\tfunction expandTo(){\n\t\t\tvar node = $('#tt').tree('find',113);\n\t\t\t$('#tt').tree('expandTo', node.target).tree('select', node.target);\n\t\t}\n\t\tfunction getSelected(){\n\t\t\tvar node = $('#tt').tree('getSelected');\n\t\t\tif (node){\n\t\t\t\tvar s = node.text;\n\t\t\t\tif (node.attributes){\n\t\t\t\t\ts += \",\"+node.attributes.p1+\",\"+node.attributes.p2;\n\t\t\t\t}\n\t\t\t\talert(s);\n\t\t\t}\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/animation.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Animation Tree - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Animation Tree</h2>\n\t<p>Apply 'animate' property to true to enable animation effect.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px\">\n\t\t<ul class=\"easyui-tree\" data-options=\"url:'tree_data1.json',method:'get',animate:true\"></ul>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Tree - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Tree</h2>\n\t<p>Click the arrow on the left to expand or collapse nodes.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px\">\n\t\t<ul class=\"easyui-tree\">\n\t\t\t<li>\n\t\t\t\t<span>My Documents</span>\n\t\t\t\t<ul>\n\t\t\t\t\t<li data-options=\"state:'closed'\">\n\t\t\t\t\t\t<span>Photos</span>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span>Friend</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span>Wife</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span>Company</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<span>Program Files</span>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>Intel</li>\n\t\t\t\t\t\t\t<li>Java</li>\n\t\t\t\t\t\t\t<li>Microsoft Office</li>\n\t\t\t\t\t\t\t<li>Games</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>index.html</li>\n\t\t\t\t\t<li>about.html</li>\n\t\t\t\t\t<li>welcome.html</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/checkbox.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>CheckBox Tree - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>CheckBox Tree</h2>\n\t<p>Tree nodes with check boxes.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"#\" class=\"easyui-linkbutton\" onclick=\"getChecked()\">GetChecked</a> \n\t</div>\n\t<div style=\"margin:10px 0\">\n\t\t<input type=\"checkbox\" checked onchange=\"$('#tt').tree({cascadeCheck:$(this).is(':checked')})\">CascadeCheck \n\t\t<input type=\"checkbox\" onchange=\"$('#tt').tree({onlyLeafCheck:$(this).is(':checked')})\">OnlyLeafCheck\n\t</div>\n\t<div class=\"easyui-panel\" style=\"padding:5px\">\n\t\t<ul id=\"tt\" class=\"easyui-tree\" data-options=\"url:'tree_data1.json',method:'get',animate:true,checkbox:true\"></ul>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction getChecked(){\n\t\t\tvar nodes = $('#tt').tree('getChecked');\n\t\t\tvar s = '';\n\t\t\tfor(var i=0; i<nodes.length; i++){\n\t\t\t\tif (s != '') s += ',';\n\t\t\t\ts += nodes[i].text;\n\t\t\t}\n\t\t\talert(s);\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/contextmenu.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Tree Context Menu - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Tree Context Menu</h2>\n\t<p>Right click on a node to display context menu.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px\">\n\t\t<ul id=\"tt\" class=\"easyui-tree\" data-options=\"\n\t\t\t\turl: 'tree_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tanimate: true,\n\t\t\t\tonContextMenu: function(e,node){\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t$(this).tree('select',node.target);\n\t\t\t\t\t$('#mm').menu('show',{\n\t\t\t\t\t\tleft: e.pageX,\n\t\t\t\t\t\ttop: e.pageY\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\"></ul>\n\t</div>\n\t<div id=\"mm\" class=\"easyui-menu\" style=\"width:120px;\">\n\t\t<div onclick=\"append()\" data-options=\"iconCls:'icon-add'\">Append</div>\n\t\t<div onclick=\"removeit()\" data-options=\"iconCls:'icon-remove'\">Remove</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div onclick=\"expand()\">Expand</div>\n\t\t<div onclick=\"collapse()\">Collapse</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction append(){\n\t\t\tvar t = $('#tt');\n\t\t\tvar node = t.tree('getSelected');\n\t\t\tt.tree('append', {\n\t\t\t\tparent: (node?node.target:null),\n\t\t\t\tdata: [{\n\t\t\t\t\ttext: 'new item1'\n\t\t\t\t},{\n\t\t\t\t\ttext: 'new item2'\n\t\t\t\t}]\n\t\t\t});\n\t\t}\n\t\tfunction removeit(){\n\t\t\tvar node = $('#tt').tree('getSelected');\n\t\t\t$('#tt').tree('remove', node.target);\n\t\t}\n\t\tfunction collapse(){\n\t\t\tvar node = $('#tt').tree('getSelected');\n\t\t\t$('#tt').tree('collapse',node.target);\n\t\t}\n\t\tfunction expand(){\n\t\t\tvar node = $('#tt').tree('getSelected');\n\t\t\t$('#tt').tree('expand',node.target);\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/customcheckbox.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom CheckBox Tree - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom CheckBox Tree</h2>\n\t<p>Tree nodes with customized check boxes.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px\">\n\t\t<ul class=\"easyui-tree\" data-options=\"\n\t\t\t\turl:'tree_data1.json',\n\t\t\t\tmethod:'get',\n\t\t\t\tanimate:true,\n\t\t\t\tcheckbox:function(node){\n\t\t\t\t\tif (node.id == 11 || node.id == 122){\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\"></ul>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/dnd.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Drag Drop Tree Nodes - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Drag Drop Tree Nodes</h2>\n\t<p>Press mouse down and drag a node to another position.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px\">\n\t\t<ul class=\"easyui-tree\" data-options=\"url:'tree_data1.json',method:'get',animate:true,dnd:true\"></ul>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/editable.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Editable Tree - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Editable Tree</h2>\n\t<p>Click the node to begin edit, press enter key to stop edit or esc key to cancel edit.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px\">\n\t\t<ul id=\"tt\" class=\"easyui-tree\" data-options=\"\n\t\t\t\turl: 'tree_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tanimate: true,\n\t\t\t\tonClick: function(node){\n\t\t\t\t\t$(this).tree('beginEdit',node.target);\n\t\t\t\t}\n\t\t\t\"></ul>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/formatting.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Formatting Tree Nodes - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Formatting Tree Nodes</h2>\n\t<p>This example shows how to display extra information on nodes.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px\">\n\t\t<ul class=\"easyui-tree\" data-options=\"\n\t\t\t\t\turl:'tree_data1.json',\n\t\t\t\t\tmethod:'get',\n\t\t\t\t\tanimate:true,\n\t\t\t\t\tformatter:function(node){\n\t\t\t\t\t\tvar s = node.text;\n\t\t\t\t\t\tif (node.children){\n\t\t\t\t\t\t\ts += '&nbsp;<span style=\\'color:blue\\'>(' + node.children.length + ')</span>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn s;\n\t\t\t\t\t}\n\t\t\t\t\">\n\t\t</ul>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/icons.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Tree Node Icons - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Tree Node Icons</h2>\n\t<p>This sample illustrates how to add icons to tree node.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px\">\n\t\t<ul class=\"easyui-tree\" data-options=\"url:'tree_data2.json',method:'get',animate:true\"></ul>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/lazyload.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Lazy Load Tree Nodes - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Lazy Load Tree Nodes</h2>\n\t<p>Get full hierarchical tree data but lazy load nodes level by level.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px\">\n\t\t<ul class=\"easyui-tree\" data-options=\"url:'tree_data1.json',method:'get',loadFilter:myLoadFilter\"></ul>\n\t</div>\n\t<script>\n\t\tfunction myLoadFilter(data, parent){\n\t\t\tvar state = $.data(this, 'tree');\n\t\t\t\n\t\t    function setData(){\n\t\t    \tvar serno = 1;\n\t\t        var todo = [];\n\t\t        for(var i=0; i<data.length; i++){\n\t\t            todo.push(data[i]);\n\t\t        }\n\t\t        while(todo.length){\n\t\t            var node = todo.shift();\n\t\t            if (node.id == undefined){\n\t\t            \tnode.id = '_node_' + (serno++);\n\t\t            }\n\t\t            if (node.children){\n\t\t                node.state = 'closed';\n\t\t                node.children1 = node.children;\n\t\t                node.children = undefined;\n\t\t                todo = todo.concat(node.children1);\n\t\t            }\n\t\t        }\n\t\t        state.tdata = data;\n\t\t    }\n\t\t    function find(id){\n\t\t    \tvar data = state.tdata;\n\t\t    \tvar cc = [data];\n\t\t    \twhile(cc.length){\n\t\t    \t\tvar c = cc.shift();\n\t\t    \t\tfor(var i=0; i<c.length; i++){\n\t\t    \t\t\tvar node = c[i];\n\t\t    \t\t\tif (node.id == id){\n\t\t    \t\t\t\treturn node;\n\t\t    \t\t\t} else if (node.children1){\n\t\t    \t\t\t\tcc.push(node.children1);\n\t\t    \t\t\t}\n\t\t    \t\t}\n\t\t    \t}\n\t\t    \treturn null;\n\t\t    }\n\t\t    \n\t\t    setData();\n\t\t    \n\t\t    var t = $(this);\n\t\t    var opts = t.tree('options');\n\t\t    opts.onBeforeExpand = function(node){\n\t    \t\tvar n = find(node.id);\n\t    \t\tif (n.children && n.children.length){return}\n\t\t    \tif (n.children1){\n\t\t    \t\tvar filter = opts.loadFilter;\n\t\t    \t\topts.loadFilter = function(data){return data;};\n\t\t    \t\tt.tree('append',{\n\t\t    \t\t\tparent:node.target,\n\t\t    \t\t\tdata:n.children1\n\t\t    \t\t});\n\t\t    \t\topts.loadFilter = filter;\n\t\t    \t\tn.children = n.children1;\n\t\t    \t}\n\t\t    };\n\t\t\treturn data;\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/lines.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Tree Lines - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Tree Lines</h2>\n\t<p>This sample shows how to show tree lines.</p>\n\t<div style=\"margin:10px 0;\"></div>\n\t<div class=\"easyui-panel\" style=\"padding:5px\">\n\t\t<ul class=\"easyui-tree\" data-options=\"url:'tree_data1.json',method:'get',animate:true,lines:true\"></ul>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/tree_data1.json",
    "content": "[{\n\t\"id\":1,\n\t\"text\":\"My Documents\",\n\t\"children\":[{\n\t\t\"id\":11,\n\t\t\"text\":\"Photos\",\n\t\t\"state\":\"closed\",\n\t\t\"children\":[{\n\t\t\t\"id\":111,\n\t\t\t\"text\":\"Friend\"\n\t\t},{\n\t\t\t\"id\":112,\n\t\t\t\"text\":\"Wife\"\n\t\t},{\n\t\t\t\"id\":113,\n\t\t\t\"text\":\"Company\"\n\t\t}]\n\t},{\n\t\t\"id\":12,\n\t\t\"text\":\"Program Files\",\n\t\t\"children\":[{\n\t\t\t\"id\":121,\n\t\t\t\"text\":\"Intel\"\n\t\t},{\n\t\t\t\"id\":122,\n\t\t\t\"text\":\"Java\",\n\t\t\t\"attributes\":{\n\t\t\t\t\"p1\":\"Custom Attribute1\",\n\t\t\t\t\"p2\":\"Custom Attribute2\"\n\t\t\t}\n\t\t},{\n\t\t\t\"id\":123,\n\t\t\t\"text\":\"Microsoft Office\"\n\t\t},{\n\t\t\t\"id\":124,\n\t\t\t\"text\":\"Games\",\n\t\t\t\"checked\":true\n\t\t}]\n\t},{\n\t\t\"id\":13,\n\t\t\"text\":\"index.html\"\n\t},{\n\t\t\"id\":14,\n\t\t\"text\":\"about.html\"\n\t},{\n\t\t\"id\":15,\n\t\t\"text\":\"welcome.html\"\n\t}]\n}]\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/tree_data2.json",
    "content": "[{\n\t\"id\":1,\n\t\"text\":\"My Documents\",\n\t\"children\":[{\n\t\t\"id\":11,\n\t\t\"text\":\"Photos\",\n\t\t\"state\":\"closed\",\n\t\t\"children\":[{\n\t\t\t\"id\":111,\n\t\t\t\"text\":\"Friend\"\n\t\t},{\n\t\t\t\"id\":112,\n\t\t\t\"text\":\"Wife\"\n\t\t},{\n\t\t\t\"id\":113,\n\t\t\t\"text\":\"Company\"\n\t\t}]\n\t},{\n\t\t\"id\":12,\n\t\t\"text\":\"Program Files\",\n\t\t\"state\":\"closed\",\n\t\t\"children\":[{\n\t\t\t\"id\":121,\n\t\t\t\"text\":\"Intel\"\n\t\t},{\n\t\t\t\"id\":122,\n\t\t\t\"text\":\"Java\"\n\t\t},{\n\t\t\t\"id\":123,\n\t\t\t\"text\":\"Microsoft Office\"\n\t\t},{\n\t\t\t\"id\":124,\n\t\t\t\"text\":\"Games\"\n\t\t}]\n\t},{\n\t\t\"id\":16,\n\t\t\"text\":\"Actions\",\n\t\t\"children\":[{\n\t\t\t\"text\":\"Add\",\n\t\t\t\"iconCls\":\"icon-add\"\n\t\t},{\n\t\t\t\"text\":\"Remove\",\n\t\t\t\"iconCls\":\"icon-remove\"\n\t\t},{\n\t\t\t\"text\":\"Save\",\n\t\t\t\"iconCls\":\"icon-save\"\n\t\t},{\n\t\t\t\"text\":\"Search\",\n\t\t\t\"iconCls\":\"icon-search\"\n\t\t}]\n\t},{\n\t\t\"id\":13,\n\t\t\"text\":\"index.html\"\n\t},{\n\t\t\"id\":14,\n\t\t\"text\":\"about.html\"\n\t},{\n\t\t\"id\":15,\n\t\t\"text\":\"welcome.html\"\n\t}]\n}]\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/actions.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>TreeGrid Actions - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>TreeGrid Actions</h2>\n\t<p>Click the buttons below to perform actions.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"collapseAll()\">CollapseAll</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"expandAll()\">ExpandAll</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"expandTo()\">ExpandTo</a>\n\t</div>\n\t<table id=\"tg\" class=\"easyui-treegrid\" title=\"TreeGrid Actions\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\ticonCls: 'icon-ok',\n\t\t\t\trownumbers: true,\n\t\t\t\tanimate: true,\n\t\t\t\tcollapsible: true,\n\t\t\t\tfitColumns: true,\n\t\t\t\turl: 'treegrid_data2.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tidField: 'id',\n\t\t\t\ttreeField: 'name'\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'name',width:180\">Task Name</th>\n\t\t\t\t<th data-options=\"field:'persons',width:60,align:'right'\">Persons</th>\n\t\t\t\t<th data-options=\"field:'begin',width:80\">Begin Date</th>\n\t\t\t\t<th data-options=\"field:'end',width:80\">End Date</th>\n\t\t\t\t<th data-options=\"field:'progress',width:120,formatter:formatProgress\">Progress</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<script type=\"text/javascript\">\n\t\tfunction formatProgress(value){\n\t    \tif (value){\n\t\t    \tvar s = '<div style=\"width:100%;border:1px solid #ccc\">' +\n\t\t    \t\t\t'<div style=\"width:' + value + '%;background:#cc0000;color:#fff\">' + value + '%' + '</div>'\n\t\t    \t\t\t'</div>';\n\t\t    \treturn s;\n\t    \t} else {\n\t\t    \treturn '';\n\t    \t}\n\t\t}\n\t\tfunction collapseAll(){\n\t\t\t$('#tg').treegrid('collapseAll');\n\t\t}\n\t\tfunction expandAll(){\n\t\t\t$('#tg').treegrid('expandAll');\n\t\t}\n\t\tfunction expandTo(){\n\t\t\t$('#tg').treegrid('expandTo',21).treegrid('select',21);\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic TreeGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic TreeGrid</h2>\n\t<p>TreeGrid allows you to expand or collapse group rows.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table title=\"Folder Browser\" class=\"easyui-treegrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\turl: 'treegrid_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\trownumbers: true,\n\t\t\t\tidField: 'id',\n\t\t\t\ttreeField: 'name'\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'name'\" width=\"220\">Name</th>\n\t\t\t\t<th data-options=\"field:'size'\" width=\"100\" align=\"right\">Size</th>\n\t\t\t\t<th data-options=\"field:'date'\" width=\"150\">Modified Date</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/checkbox.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Cascade CheckBox in TreeGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Cascade CheckBox in TreeGrid</h2>\n\t<p>TreeGrid nodes with cascade check boxes.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table title=\"Folder Browser\" class=\"easyui-treegrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\turl: 'treegrid_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tcheckbox: true,\n\t\t\t\trownumbers: true,\n\t\t\t\tidField: 'id',\n\t\t\t\ttreeField: 'name'\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'name'\" width=\"220\">Name</th>\n\t\t\t\t<th data-options=\"field:'size'\" width=\"100\" align=\"right\">Size</th>\n\t\t\t\t<th data-options=\"field:'date'\" width=\"150\">Modified Date</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/clientpagination.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Client Side Pagination in TreeGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Client Side Pagination in TreeGrid</h2>\n\t<p>This sample shows how to implement client side pagination in TreeGrid.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table id=\"tg\" title=\"Client Side Pagination\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\ticonCls: 'icon-ok',\n\t\t\t\trownumbers: true,\n\t\t\t\tanimate: true,\n\t\t\t\tcollapsible: true,\n\t\t\t\tfitColumns: true,\n\t\t\t\turl: 'treegrid_data2.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tidField: 'id',\n\t\t\t\ttreeField: 'name',\n\t\t\t\tpagination: true,\n\t\t\t\tpageSize: 2,\n\t\t\t\tpageList: [2,5,10]\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'name',width:180\">Task Name</th>\n\t\t\t\t<th data-options=\"field:'persons',width:60,align:'right'\">Persons</th>\n\t\t\t\t<th data-options=\"field:'begin',width:80\">Begin Date</th>\n\t\t\t\t<th data-options=\"field:'end',width:80\">End Date</th>\n\t\t\t\t<th data-options=\"field:'progress',width:120,formatter:formatProgress\">Progress</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<script type=\"text/javascript\">\n\t\t(function($){\n\t\t\tfunction pagerFilter(data){\n\t\t        if ($.isArray(data)){    // is array  \n\t\t            data = {  \n\t\t                total: data.length,  \n\t\t                rows: data  \n\t\t            }  \n\t\t        }\n\t\t        var target = this;\n\t\t        var tg = $(target);  \n\t\t\t\tvar state = tg.data('treegrid');\n\t\t        var opts = tg.treegrid('options');  \n\t\t        if (!state.allRows){\n\t\t        \tstate.allRows = data.rows;\n\t\t        }\n\t\t\t\tif (!opts.remoteSort && opts.sortName){\n\t\t\t\t\tvar names = opts.sortName.split(',');\n\t\t\t\t\tvar orders = opts.sortOrder.split(',');\n\t\t\t\t\tstate.allRows.sort(function(r1,r2){\n\t\t\t\t\t\tvar r = 0;\n\t\t\t\t\t\tfor(var i=0; i<names.length; i++){\n\t\t\t\t\t\t\tvar sn = names[i];\n\t\t\t\t\t\t\tvar so = orders[i];\n\t\t\t\t\t\t\tvar col = $(target).treegrid('getColumnOption', sn);\n\t\t\t\t\t\t\tvar sortFunc = col.sorter || function(a,b){\n\t\t\t\t\t\t\t\treturn a==b ? 0 : (a>b?1:-1);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tr = sortFunc(r1[sn], r2[sn]) * (so=='asc'?1:-1);\n\t\t\t\t\t\t\tif (r != 0){\n\t\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t        var topRows = [];\n\t\t        var childRows = [];\n\t\t        $.map(state.allRows, function(row){\n\t\t        \trow._parentId ? childRows.push(row) : topRows.push(row);\n\t\t        \trow.children = null;\n\t\t        });\n\t\t        data.total = topRows.length;\n\t\t        var pager = tg.treegrid('getPager');\n\t\t        pager.pagination('refresh', {\n\t\t        \ttotal: data.total,\n\t\t        \tpageNumber: opts.pageNumber\n\t\t        });\n\t\t        opts.pageNumber = pager.pagination('options').pageNumber || 1;\n\t\t        var start = (opts.pageNumber-1)*parseInt(opts.pageSize);  \n\t\t        var end = start + parseInt(opts.pageSize);  \n\t\t\t\tdata.rows = topRows.slice(start, end).concat(childRows);\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tvar appendMethod = $.fn.treegrid.methods.append;\n\t\t\tvar removeMethod = $.fn.treegrid.methods.remove;\n\t\t\tvar loadDataMethod = $.fn.treegrid.methods.loadData;\n\t\t\t$.extend($.fn.treegrid.methods, {\n\t\t\t\tclientPaging: function(jq){\n\t\t\t\t\treturn jq.each(function(){\n\t\t\t\t\t\tvar tg = $(this);\n\t\t\t\t\t\tvar state = tg.data('treegrid');\n\t\t\t\t\t\tvar opts = state.options;\n\t\t\t\t\t\topts.loadFilter = pagerFilter;\n\t\t\t\t\t\tvar onBeforeLoad = opts.onBeforeLoad;\n\t\t\t\t\t\topts.onBeforeLoad = function(row,param){\n\t\t\t\t\t\t\tstate.allRows = null;\n\t\t\t\t\t\t\treturn onBeforeLoad.call(this, row, param);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar pager = tg.treegrid('getPager');\n\t\t\t\t\t\tpager.pagination({\n\t\t\t\t\t\t\tonSelectPage:function(pageNum, pageSize){\n\t\t\t\t\t\t\t\topts.pageNumber = pageNum;\n\t\t\t\t\t\t\t\topts.pageSize = pageSize;\n\t\t\t\t\t\t\t\tpager.pagination('refresh',{\n\t\t\t\t\t\t\t\t\tpageNumber:pageNum,\n\t\t\t\t\t\t\t\t\tpageSize:pageSize\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\ttg.treegrid('loadData',state.allRows);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\ttg.treegrid('loadData', state.data);\n\t\t\t\t\t\tif (opts.url){\n\t\t\t\t\t\t\ttg.treegrid('reload');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tloadData: function(jq, data){\n\t\t\t\t\tjq.each(function(){\n\t\t\t\t\t\t$(this).data('treegrid').allRows = null;\n\t\t\t\t\t});\n\t\t\t\t\treturn loadDataMethod.call($.fn.treegrid.methods, jq, data);\n\t\t\t\t},\n\t\t\t\tappend: function(jq, param){\n\t\t\t\t\treturn jq.each(function(){\n\t\t\t\t\t\tvar state = $(this).data('treegrid');\n\t\t\t\t\t\tif (state.options.loadFilter == pagerFilter){\n\t\t\t\t\t\t\t$.map(param.data, function(row){\n\t\t\t\t\t\t\t\trow._parentId = row._parentId || param.parent;\n\t\t\t\t\t\t\t\tstate.allRows.push(row);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t$(this).treegrid('loadData', state.allRows);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tappendMethod.call($.fn.treegrid.methods, $(this), param);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tremove: function(jq, id){\n\t\t\t\t\treturn jq.each(function(){\n\t\t\t\t\t\tif ($(this).treegrid('find', id)){\n\t\t\t\t\t\t\tremoveMethod.call($.fn.treegrid.methods, $(this), id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar state = $(this).data('treegrid');\n\t\t\t\t\t\tif (state.options.loadFilter == pagerFilter){\n\t\t\t\t\t\t\tfor(var i=0; i<state.allRows.length; i++){\n\t\t\t\t\t\t\t\tif (state.allRows[i][state.options.idField] == id){\n\t\t\t\t\t\t\t\t\tstate.allRows.splice(i,1);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$(this).treegrid('loadData', state.allRows);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tgetAllRows: function(jq){\n\t\t\t\t\treturn jq.data('treegrid').allRows;\n\t\t\t\t}\n\t\t\t});\n\n\t\t})(jQuery);\n\n\t\tfunction formatProgress(value){\n\t    \tif (value){\n\t\t    \tvar s = '<div style=\"width:100%;border:1px solid #ccc\">' +\n\t\t    \t\t\t'<div style=\"width:' + value + '%;background:#cc0000;color:#fff\">' + value + '%' + '</div>'\n\t\t    \t\t\t'</div>';\n\t\t    \treturn s;\n\t    \t} else {\n\t\t    \treturn '';\n\t    \t}\n\t\t}\n\t\t\n\t\t$(function(){\n\t\t\t$('#tg').treegrid().treegrid('clientPaging');\n\t\t})\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/contextmenu.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>TreeGrid ContextMenu - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>TreeGrid ContextMenu</h2>\n\t<p>Right click to display the context menu.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table id=\"tg\" class=\"easyui-treegrid\" title=\"TreeGrid ContextMenu\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\ticonCls: 'icon-ok',\n\t\t\t\trownumbers: true,\n\t\t\t\tanimate: true,\n\t\t\t\tcollapsible: true,\n\t\t\t\tfitColumns: true,\n\t\t\t\turl: 'treegrid_data2.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tidField: 'id',\n\t\t\t\ttreeField: 'name',\n\t\t\t\tonContextMenu: onContextMenu\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'name',width:180\">Task Name</th>\n\t\t\t\t<th data-options=\"field:'persons',width:60,align:'right'\">Persons</th>\n\t\t\t\t<th data-options=\"field:'begin',width:80\">Begin Date</th>\n\t\t\t\t<th data-options=\"field:'end',width:80\">End Date</th>\n\t\t\t\t<th data-options=\"field:'progress',width:120,formatter:formatProgress\">Progress</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<div id=\"mm\" class=\"easyui-menu\" style=\"width:120px;\">\n\t\t<div onclick=\"append()\" data-options=\"iconCls:'icon-add'\">Append</div>\n\t\t<div onclick=\"removeIt()\" data-options=\"iconCls:'icon-remove'\">Remove</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div onclick=\"collapse()\">Collapse</div>\n\t\t<div onclick=\"expand()\">Expand</div>\n\t</div>\n\t<script type=\"text/javascript\">\n\t\tfunction formatProgress(value){\n\t    \tif (value){\n\t\t    \tvar s = '<div style=\"width:100%;border:1px solid #ccc\">' +\n\t\t    \t\t\t'<div style=\"width:' + value + '%;background:#cc0000;color:#fff\">' + value + '%' + '</div>'\n\t\t    \t\t\t'</div>';\n\t\t    \treturn s;\n\t    \t} else {\n\t\t    \treturn '';\n\t    \t}\n\t\t}\n\t\tfunction onContextMenu(e,row){\n\t\t\tif (row){\n\t\t\t\te.preventDefault();\n\t\t\t\t$(this).treegrid('select', row.id);\n\t\t\t\t$('#mm').menu('show',{\n\t\t\t\t\tleft: e.pageX,\n\t\t\t\t\ttop: e.pageY\n\t\t\t\t});\t\t\t\t\n\t\t\t}\n\t\t}\n\t\tvar idIndex = 100;\n\t\tfunction append(){\n\t\t\tidIndex++;\n\t\t\tvar d1 = new Date();\n\t\t\tvar d2 = new Date();\n\t\t\td2.setMonth(d2.getMonth()+1);\n\t\t\tvar node = $('#tg').treegrid('getSelected');\n\t\t\t$('#tg').treegrid('append',{\n\t\t\t\tparent: node.id,\n\t\t\t\tdata: [{\n\t\t\t\t\tid: idIndex,\n\t\t\t\t\tname: 'New Task'+idIndex,\n\t\t\t\t\tpersons: parseInt(Math.random()*10),\n\t\t\t\t\tbegin: $.fn.datebox.defaults.formatter(d1),\n\t\t\t\t\tend: $.fn.datebox.defaults.formatter(d2),\n\t\t\t\t\tprogress: parseInt(Math.random()*100)\n\t\t\t\t}]\n\t\t\t})\n\t\t}\n\t\tfunction removeIt(){\n\t\t\tvar node = $('#tg').treegrid('getSelected');\n\t\t\tif (node){\n\t\t\t\t$('#tg').treegrid('remove', node.id);\n\t\t\t}\n\t\t}\n\t\tfunction collapse(){\n\t\t\tvar node = $('#tg').treegrid('getSelected');\n\t\t\tif (node){\n\t\t\t\t$('#tg').treegrid('collapse', node.id);\n\t\t\t}\n\t\t}\n\t\tfunction expand(){\n\t\t\tvar node = $('#tg').treegrid('getSelected');\n\t\t\tif (node){\n\t\t\t\t$('#tg').treegrid('expand', node.id);\n\t\t\t}\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/customcheckbox.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom CheckBox in TreeGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom CheckBox in TreeGrid</h2>\n\t<p>TreeGrid nodes with customized check boxes.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table title=\"Folder Browser\" class=\"easyui-treegrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\turl: 'treegrid_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\trownumbers: true,\n\t\t\t\tidField: 'id',\n\t\t\t\ttreeField: 'name',\n\t\t\t\tcheckbox: function(row){\n\t\t\t\t\tvar names = ['Java','eclipse.exe','eclipse.ini'];\n\t\t\t\t\tif ($.inArray(row.name, names)>=0){\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'name'\" width=\"220\">Name</th>\n\t\t\t\t<th data-options=\"field:'size'\" width=\"100\" align=\"right\">Size</th>\n\t\t\t\t<th data-options=\"field:'date'\" width=\"150\">Modified Date</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/editable.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Editable TreeGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Editable TreeGrid</h2>\n\t<p>Select one node and click edit button to perform editing.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"edit()\">Edit</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"save()\">Save</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"cancel()\">Cancel</a>\n\t</div>\n\t<table id=\"tg\" class=\"easyui-treegrid\" title=\"Editable TreeGrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\ticonCls: 'icon-ok',\n\t\t\t\trownumbers: true,\n\t\t\t\tanimate: true,\n\t\t\t\tcollapsible: true,\n\t\t\t\tfitColumns: true,\n\t\t\t\turl: 'treegrid_data2.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tidField: 'id',\n\t\t\t\ttreeField: 'name',\n\t\t\t\tshowFooter: true\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'name',width:180,editor:'text'\">Task Name</th>\n\t\t\t\t<th data-options=\"field:'persons',width:60,align:'right',editor:'numberbox'\">Persons</th>\n\t\t\t\t<th data-options=\"field:'begin',width:80,editor:'datebox'\">Begin Date</th>\n\t\t\t\t<th data-options=\"field:'end',width:80,editor:'datebox'\">End Date</th>\n\t\t\t\t<th data-options=\"field:'progress',width:120,formatter:formatProgress,editor:'numberbox'\">Progress</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<script type=\"text/javascript\">\n\t\tfunction formatProgress(value){\n\t    \tif (value){\n\t\t    \tvar s = '<div style=\"width:100%;border:1px solid #ccc\">' +\n\t\t    \t\t\t'<div style=\"width:' + value + '%;background:#cc0000;color:#fff\">' + value + '%' + '</div>'\n\t\t    \t\t\t'</div>';\n\t\t    \treturn s;\n\t    \t} else {\n\t\t    \treturn '';\n\t    \t}\n\t\t}\n\t\tvar editingId;\n\t\tfunction edit(){\n\t\t\tif (editingId != undefined){\n\t\t\t\t$('#tg').treegrid('select', editingId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar row = $('#tg').treegrid('getSelected');\n\t\t\tif (row){\n\t\t\t\teditingId = row.id\n\t\t\t\t$('#tg').treegrid('beginEdit', editingId);\n\t\t\t}\n\t\t}\n\t\tfunction save(){\n\t\t\tif (editingId != undefined){\n\t\t\t\tvar t = $('#tg');\n\t\t\t\tt.treegrid('endEdit', editingId);\n\t\t\t\teditingId = undefined;\n\t\t\t\tvar persons = 0;\n\t\t\t\tvar rows = t.treegrid('getChildren');\n\t\t\t\tfor(var i=0; i<rows.length; i++){\n\t\t\t\t\tvar p = parseInt(rows[i].persons);\n\t\t\t\t\tif (!isNaN(p)){\n\t\t\t\t\t\tpersons += p;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar frow = t.treegrid('getFooterRows')[0];\n\t\t\t\tfrow.persons = persons;\n\t\t\t\tt.treegrid('reloadFooter');\n\t\t\t}\n\t\t}\n\t\tfunction cancel(){\n\t\t\tif (editingId != undefined){\n\t\t\t\t$('#tg').treegrid('cancelEdit', editingId);\n\t\t\t\teditingId = undefined;\n\t\t\t}\n\t\t}\n\t</script>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid TreeGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid TreeGrid</h2>\n\t<p>This example shows how to assign percentage width to a column in TreeGrid.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table title=\"Fluid Browser\" class=\"easyui-treegrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\turl: 'treegrid_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tidField: 'id',\n\t\t\t\ttreeField: 'name'\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'name'\" width=\"50%\">Name(50%)</th>\n\t\t\t\t<th data-options=\"field:'size'\" width=\"20%\" align=\"right\">Size(20%)</th>\n\t\t\t\t<th data-options=\"field:'date'\" width=\"30%\">Modified Date(30%)</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/footer.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>TreeGrid with Footer - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>TreeGrid with Footer</h2>\n\t<p>Show summary information on TreeGrid footer.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table id=\"tg\"></table>\n\t<script type=\"text/javascript\">\n\t\t$(function(){\n\t\t\t$('#tg').treegrid({\n\t\t\t\ttitle:'TreeGrid with Footer',\n\t\t\t\ticonCls:'icon-ok',\n\t\t\t\twidth:700,\n\t\t\t\theight:250,\n\t\t\t\trownumbers: true,\n\t\t\t\tanimate:true,\n\t\t\t\tcollapsible:true,\n\t\t\t\tfitColumns:true,\n\t\t\t\turl:'treegrid_data2.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tidField:'id',\n\t\t\t\ttreeField:'name',\n\t\t\t\tshowFooter:true,\n\t\t\t\tcolumns:[[\n\t                {title:'Task Name',field:'name',width:180},\n\t\t\t\t\t{field:'persons',title:'Persons',width:60,align:'right'},\n\t\t\t\t\t{field:'begin',title:'Begin Date',width:80},\n\t\t\t\t\t{field:'end',title:'End Date',width:80},\n\t\t\t\t\t{field:'progress',title:'Progress',width:120,\n\t\t\t\t\t    formatter:function(value){\n\t\t\t\t\t    \tif (value){\n\t\t\t\t\t\t    \tvar s = '<div style=\"width:100%;border:1px solid #ccc\">' +\n\t\t\t\t\t\t    \t\t\t'<div style=\"width:' + value + '%;background:#cc0000;color:#fff\">' + value + '%' + '</div>'\n\t\t\t\t\t\t    \t\t\t'</div>';\n\t\t\t\t\t\t    \treturn s;\n\t\t\t\t\t    \t} else {\n\t\t\t\t\t\t    \treturn '';\n\t\t\t\t\t    \t}\n\t\t\t\t    \t}\n\t\t\t\t\t}\n\t\t\t\t]]\n\t\t\t});\n\t\t})\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/lines.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>TreeGrid Lines - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>TreeGrid Lines</h2>\n\t<p>This example shows how to show treegrid lines.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table title=\"TreeGrid Lines\" class=\"easyui-treegrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\turl: 'treegrid_data1.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\tlines: true,\n\t\t\t\trownumbers: true,\n\t\t\t\tidField: 'id',\n\t\t\t\ttreeField: 'name'\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'name'\" width=\"220\">Name</th>\n\t\t\t\t<th data-options=\"field:'size'\" width=\"100\" align=\"right\">Size</th>\n\t\t\t\t<th data-options=\"field:'date'\" width=\"150\">Modified Date</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/reports.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Reports using TreeGrid - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Reports using TreeGrid</h2>\n\t<p>Using TreeGrid to show complex reports.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<table title=\"Reports using TreeGrid\" class=\"easyui-treegrid\" style=\"width:700px;height:250px\"\n\t\t\tdata-options=\"\n\t\t\t\turl: 'treegrid_data3.json',\n\t\t\t\tmethod: 'get',\n\t\t\t\trownumbers: true,\n\t\t\t\tshowFooter: true,\n\t\t\t\tidField: 'id',\n\t\t\t\ttreeField: 'region'\n\t\t\t\">\n\t\t<thead frozen=\"true\">\n\t\t\t<tr>\n\t\t\t\t<th field=\"region\" width=\"200\">Region</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th colspan=\"4\">2009</th>\n\t\t\t\t<th colspan=\"4\">2010</th>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<th field=\"f1\" width=\"60\" align=\"right\">1st qrt.</th>\n\t\t\t\t<th field=\"f2\" width=\"60\" align=\"right\">2st qrt.</th>\n\t\t\t\t<th field=\"f3\" width=\"60\" align=\"right\">3st qrt.</th>\n\t\t\t\t<th field=\"f4\" width=\"60\" align=\"right\">4st qrt.</th>\n\t\t\t\t<th field=\"f5\" width=\"60\" align=\"right\">1st qrt.</th>\n\t\t\t\t<th field=\"f6\" width=\"60\" align=\"right\">2st qrt.</th>\n\t\t\t\t<th field=\"f7\" width=\"60\" align=\"right\">3st qrt.</th>\n\t\t\t\t<th field=\"f8\" width=\"60\" align=\"right\">4st qrt.</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/treegrid_data1.json",
    "content": "[{\n\t\"id\":1,\n\t\"name\":\"C\",\n\t\"size\":\"\",\n\t\"date\":\"02/19/2010\",\n\t\"children\":[{\n\t\t\"id\":2,\n\t\t\"name\":\"Program Files\",\n\t\t\"size\":\"120 MB\",\n\t\t\"date\":\"03/20/2010\",\n\t\t\"children\":[{\n\t\t\t\"id\":21,\n\t\t\t\"name\":\"Java\",\n\t\t\t\"size\":\"\",\n\t\t\t\"date\":\"01/13/2010\",\n\t\t\t\"state\":\"closed\",\n\t\t\t\"children\":[{\n\t\t\t\t\"id\":211,\n\t\t\t\t\"name\":\"java.exe\",\n\t\t\t\t\"size\":\"142 KB\",\n\t\t\t\t\"date\":\"01/13/2010\"\n\t\t\t},{\n\t\t\t\t\"id\":212,\n\t\t\t\t\"name\":\"jawt.dll\",\n\t\t\t\t\"size\":\"5 KB\",\n\t\t\t\t\"date\":\"01/13/2010\"\n\t\t\t}]\n\t\t},{\n\t\t\t\"id\":22,\n\t\t\t\"name\":\"MySQL\",\n\t\t\t\"size\":\"\",\n\t\t\t\"date\":\"01/13/2010\",\n\t\t\t\"state\":\"closed\",\n\t\t\t\"children\":[{\n\t\t\t\t\"id\":221,\n\t\t\t\t\"name\":\"my.ini\",\n\t\t\t\t\"size\":\"10 KB\",\n\t\t\t\t\"date\":\"02/26/2009\"\n\t\t\t},{\n\t\t\t\t\"id\":222,\n\t\t\t\t\"name\":\"my-huge.ini\",\n\t\t\t\t\"size\":\"5 KB\",\n\t\t\t\t\"date\":\"02/26/2009\"\n\t\t\t},{\n\t\t\t\t\"id\":223,\n\t\t\t\t\"name\":\"my-large.ini\",\n\t\t\t\t\"size\":\"5 KB\",\n\t\t\t\t\"date\":\"02/26/2009\"\n\t\t\t}]\n\t\t}]\n\t},{\n\t\t\"id\":3,\n\t\t\"name\":\"eclipse\",\n\t\t\"size\":\"\",\n\t\t\"date\":\"01/20/2010\",\n\t\t\"children\":[{\n\t\t\t\"id\":31,\n\t\t\t\"name\":\"eclipse.exe\",\n\t\t\t\"size\":\"56 KB\",\n\t\t\t\"date\":\"05/19/2009\"\n\t\t},{\n\t\t\t\"id\":32,\n\t\t\t\"name\":\"eclipse.ini\",\n\t\t\t\"size\":\"1 KB\",\n\t\t\t\"date\":\"04/20/2010\"\n\t\t},{\n\t\t\t\"id\":33,\n\t\t\t\"name\":\"notice.html\",\n\t\t\t\"size\":\"7 KB\",\n\t\t\t\"date\":\"03/17/2005\"\n\t\t}]\n\t}]\n}]"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/treegrid_data2.json",
    "content": "{\"total\":7,\"rows\":[\n\t{\"id\":1,\"name\":\"All Tasks\",\"begin\":\"3/4/2010\",\"end\":\"3/20/2010\",\"progress\":60,\"iconCls\":\"icon-ok\"},\n\t{\"id\":2,\"name\":\"Designing\",\"begin\":\"3/4/2010\",\"end\":\"3/10/2010\",\"progress\":100,\"_parentId\":1,\"state\":\"closed\"},\n\t{\"id\":21,\"name\":\"Database\",\"persons\":2,\"begin\":\"3/4/2010\",\"end\":\"3/6/2010\",\"progress\":100,\"_parentId\":2},\n\t{\"id\":22,\"name\":\"UML\",\"persons\":1,\"begin\":\"3/7/2010\",\"end\":\"3/8/2010\",\"progress\":100,\"_parentId\":2},\n\t{\"id\":23,\"name\":\"Export Document\",\"persons\":1,\"begin\":\"3/9/2010\",\"end\":\"3/10/2010\",\"progress\":100,\"_parentId\":2},\n\t{\"id\":3,\"name\":\"Coding\",\"persons\":2,\"begin\":\"3/11/2010\",\"end\":\"3/18/2010\",\"progress\":80},\n\t{\"id\":4,\"name\":\"Testing\",\"persons\":1,\"begin\":\"3/19/2010\",\"end\":\"3/20/2010\",\"progress\":20}\n],\"footer\":[\n\t{\"name\":\"Total Persons:\",\"persons\":7,\"iconCls\":\"icon-sum\"}\n]}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/treegrid_data3.json",
    "content": "{\"total\":9,\"rows\":[\n\t{\"id\":1,\"region\":\"Wyoming\"},\n\t{\"id\":11,\"region\":\"Albin\",\"f1\":2000,\"f2\":1800,\"f3\":1903,\"f4\":2183,\"f5\":2133,\"f6\":1923,\"f7\":2018,\"f8\":1838,\"_parentId\":1},\n\t{\"id\":12,\"region\":\"Canon\",\"f1\":2000,\"f2\":1800,\"f3\":1903,\"f4\":2183,\"f5\":2133,\"f6\":1923,\"f7\":2018,\"f8\":1838,\"_parentId\":1},\n\t{\"id\":13,\"region\":\"Egbert\",\"f1\":2000,\"f2\":1800,\"f3\":1903,\"f4\":2183,\"f5\":2133,\"f6\":1923,\"f7\":2018,\"f8\":1838,\"_parentId\":1},\n\t{\"id\":2,\"region\":\"Washington\"},\n\t{\"id\":21,\"region\":\"Bellingham\",\"f1\":2000,\"f2\":1800,\"f3\":1903,\"f4\":2183,\"f5\":2133,\"f6\":1923,\"f7\":2018,\"f8\":1838,\"_parentId\":2},\n\t{\"id\":22,\"region\":\"Chehalis\",\"f1\":2000,\"f2\":1800,\"f3\":1903,\"f4\":2183,\"f5\":2133,\"f6\":1923,\"f7\":2018,\"f8\":1838,\"_parentId\":2},\n\t{\"id\":23,\"region\":\"Ellensburg\",\"f1\":2000,\"f2\":1800,\"f3\":1903,\"f4\":2183,\"f5\":2133,\"f6\":1923,\"f7\":2018,\"f8\":1838,\"_parentId\":2},\n\t{\"id\":24,\"region\":\"Monroe\",\"f1\":2000,\"f2\":1800,\"f3\":1903,\"f4\":2183,\"f5\":2133,\"f6\":1923,\"f7\":2018,\"f8\":1838,\"_parentId\":2}\n],\"footer\":[\n\t{\"region\":\"Total\",\"f1\":14000,\"f2\":12600,\"f3\":13321,\"f4\":15281,\"f5\":14931,\"f6\":13461,\"f7\":14126,\"f8\":12866}\n]}"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/validatebox/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic ValidateBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic ValidateBox</h2>\n\t<p>It's easy to add validate logic to a input box.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"Register\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"username\" class=\"label-top\">User Name:</label>\n\t\t\t<input id=\"username\" class=\"easyui-validatebox tb\" data-options=\"required:true,validType:'length[3,10]'\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"email\" class=\"label-top\">Email:</label>\n\t\t\t<input id=\"email\" class=\"easyui-validatebox tb\" data-options=\"required:true,validType:'email'\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"url\" class=\"label-top\">Url:</label>\n\t\t\t<input id=\"url\" class=\"easyui-validatebox tb\" data-options=\"required:true,validType:'url'\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"phone\" class=\"label-top\">Phone:</label>\n\t\t\t<input id=\"phone\" class=\"easyui-validatebox tb\" data-options=\"required:true\">\n\t\t</div>\n\t</div>\n\t<style scoped=\"scoped\">\n\t\t.tb{\n\t\t\twidth:100%;\n\t\t\tmargin:0;\n\t\t\tpadding:5px 4px;\n\t\t\tborder:1px solid #ccc;\n\t\t\tbox-sizing:border-box;\n\t\t}\n\t</style>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/validatebox/customtooltip.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom ValidateBox Tooltip - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom ValidateBox Tooltip</h2>\n\t<p>This sample shows how to display another tooltip message on a valid textbox.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"Register\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"username\" class=\"label-top\">User Name:</label>\n\t\t\t<input id=\"username\" class=\"easyui-validatebox tb\" data-options=\"prompt:'Enter User Name.',required:true,validType:'length[3,10]'\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"email\" class=\"label-top\">Email:</label>\n\t\t\t<input id=\"email\" class=\"easyui-validatebox tb\" data-options=\"prompt:'Enter a valid email.',required:true,validType:'email'\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"url\" class=\"label-top\">Url:</label>\n\t\t\t<input id=\"url\" class=\"easyui-validatebox tb\" data-options=\"prompt:'Enter your URL.',required:true,validType:'url'\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"phone\" class=\"label-top\">Phone:</label>\n\t\t\t<input id=\"phone\" class=\"easyui-validatebox tb\" data-options=\"prompt:'Enter your phone number.',required:true\">\n\t\t</div>\n\t</div>\n\t<style scoped=\"scoped\">\n\t\t.tb{\n\t\t\twidth:100%;\n\t\t\tmargin:0;\n\t\t\tpadding:5px 4px;\n\t\t\tborder:1px solid #ccc;\n\t\t\tbox-sizing:border-box;\n\t\t}\n\t</style>\n\t<script>\n\t\t$(function(){\n\t\t\t$('input.easyui-validatebox').validatebox({\n\t\t\t\tvalidateOnCreate: false,\n\t\t\t\terr: function(target, message, action){\n\t\t\t\t\tvar opts = $(target).validatebox('options');\n\t\t\t\t\tmessage = message || opts.prompt;\n\t\t\t\t\t$.fn.validatebox.defaults.err(target, message, action);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/validatebox/errorplacement.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Error Placement in ValidateBox - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Error Placement in ValidateBox</h2>\n\t<p>This example shows how to display the error message below the field.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"Register\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"username\" class=\"label-top\">User Name:</label>\n\t\t\t<input id=\"username\" class=\"easyui-validatebox tb\" data-options=\"required:true,validType:'length[3,10]',validateOnCreate:true,err:err\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"email\" class=\"label-top\">Email:</label>\n\t\t\t<input id=\"email\" class=\"easyui-validatebox tb\" data-options=\"required:true,validType:'email',validateOnCreate:false,err:err\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"url\" class=\"label-top\">Url:</label>\n\t\t\t<input id=\"url\" class=\"easyui-validatebox tb\" data-options=\"required:true,validType:'url',validateOnCreate:false,err:err\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"phone\" class=\"label-top\">Phone:</label>\n\t\t\t<input id=\"phone\" class=\"easyui-validatebox tb\" data-options=\"required:true,validateOnCreate:false,err:err\">\n\t\t</div>\n\t</div>\n\t<style scoped=\"scoped\">\n\t\t.tb{\n\t\t\twidth:100%;\n\t\t\tmargin:0;\n\t\t\tpadding:5px 4px;\n\t\t\tborder:1px solid #ccc;\n\t\t\tbox-sizing:border-box;\n\t\t}\n\t\t.error-message{\n\t\t\tmargin: 4px 0 0 0;\n\t\t\tpadding: 0;\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n\t<script type=\"text/javascript\">\n\t\tfunction err(target, message){\n\t\t\tvar t = $(target);\n\t\t\tif (t.hasClass('textbox-text')){\n\t\t\t\tt = t.parent();\n\t\t\t}\n\t\t\tvar m = t.next('.error-message');\n\t\t\tif (!m.length){\n\t\t\t\tm = $('<div class=\"error-message\"></div>').insertAfter(t);\n\t\t\t}\n\t\t\tm.html(message);\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/validatebox/validateonblur.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Validate On Blur - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Validate On Blur</h2>\n\t<p>Active validation on first blur event.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div class=\"easyui-panel\" title=\"Register\" style=\"width:100%;max-width:400px;padding:30px 60px;\">\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"username\" class=\"label-top\">User Name:</label>\n\t\t\t<input id=\"username\" class=\"easyui-validatebox tb\" data-options=\"required:true,validType:'length[3,10]',validateOnCreate:false,validateOnBlur:true\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"email\" class=\"label-top\">Email:</label>\n\t\t\t<input id=\"email\" class=\"easyui-validatebox tb\" data-options=\"required:true,validType:'email',validateOnCreate:false,validateOnBlur:true\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"url\" class=\"label-top\">Url:</label>\n\t\t\t<input id=\"url\" class=\"easyui-validatebox tb\" data-options=\"required:true,validType:'url',validateOnCreate:false,validateOnBlur:true\">\n\t\t</div>\n\t\t<div style=\"margin-bottom:20px\">\n\t\t\t<label for=\"phone\" class=\"label-top\">Phone:</label>\n\t\t\t<input id=\"phone\" class=\"easyui-validatebox tb\" data-options=\"required:true,validateOnCreate:false,validateOnBlur:true\">\n\t\t</div>\n\t</div>\n\t<style scoped=\"scoped\">\n\t\t.tb{\n\t\t\twidth:100%;\n\t\t\tmargin:0;\n\t\t\tpadding:5px 4px;\n\t\t\tborder:1px solid #ccc;\n\t\t\tbox-sizing:border-box;\n\t\t}\n\t</style>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Basic Window - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Basic Window</h2>\n\t<p>Window can be dragged freely on screen.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#w').window('open')\">Open</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#w').window('close')\">Close</a>\n\t</div>\n\t<div id=\"w\" class=\"easyui-window\" title=\"Basic Window\" data-options=\"iconCls:'icon-save'\" style=\"width:500px;height:200px;padding:10px;\">\n\t\tThe window content.\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/borderstyle.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Window Border Style - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/color.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Window Border Style</h2>\n\t<p>This example shows how to set the different border style.</p>\n\t<div style=\"margin:20px 0;\">\n\t</div>\n\t<div style=\"position:relative;overflow:auto;height:370px;border:1px solid #ddd\">\n\t\t<div class=\"easyui-window\" title=\"Window\" data-options=\"width:300,height:150,left:10,top:10,inline:true\">\n\t\t\t<p class=\"w-content\">Window content</p>\n\t\t</div>\n\t\t<div class=\"easyui-window\" title=\"Window\" data-options=\"width:300,height:150,left:320,top:10,inline:true,cls:'c1'\">\n\t\t\t<p class=\"w-content\">Window content</p>\n\t\t</div>\n\t\t<div class=\"easyui-window\" title=\"Window\" data-options=\"width:300,height:150,left:630,top:10,inline:true,cls:'c2'\">\n\t\t\t<p class=\"w-content\">Window content</p>\n\t\t</div>\n\t\t<div class=\"easyui-window\" title=\"Window\" data-options=\"width:300,height:150,left:10,top:180,inline:true,border:'thin',cls:'c5'\">\n\t\t\t<p class=\"w-content\">Window content</p>\n\t\t</div>\n\t\t<div class=\"easyui-window\" title=\"Window\" data-options=\"width:300,height:150,left:320,top:180,inline:true,border:'thin',cls:'c6'\">\n\t\t\t<p class=\"w-content\">Window content</p>\n\t\t</div>\n\t\t<div class=\"easyui-window\" title=\"Window\" data-options=\"width:300,height:150,left:630,top:180,inline:true,border:'thin',cls:'c7'\">\n\t\t\t<p class=\"w-content\">Window content</p>\n\t\t</div>\n\t</div>\n\n\t<script type=\"text/javascript\">\n\t\t$('.easyui-window').window({\n\t\t\tcollapsible: false,\n\t\t\tminimizable: false,\n\t\t\tmaximizable: false,\n\t\t\tclosable: false\n\t\t});\n\t</script>\n\t<style type=\"text/css\" scoped=\"scoped\">\n\t\t.w-content{\n\t\t\tpadding:5px 10px;\n\t\t}\n\t</style>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/customtools.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Custom Window Tools - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Custom Window Tools</h2>\n\t<p>Click the right top buttons to perform actions.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#w').window('open')\">Open</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#w').window('close')\">Close</a>\n\t</div>\n\t<div id=\"w\" class=\"easyui-window\" title=\"Custom Window Tools\" data-options=\"iconCls:'icon-save',minimizable:false,tools:'#tt'\" style=\"width:500px;height:200px;padding:10px;\">\n\t\tThe window content.\n\t</div>\n\t<div id=\"tt\">\n\t\t<a href=\"javascript:void(0)\" class=\"icon-add\" onclick=\"javascript:alert('add')\"></a>\n\t\t<a href=\"javascript:void(0)\" class=\"icon-edit\" onclick=\"javascript:alert('edit')\"></a>\n\t\t<a href=\"javascript:void(0)\" class=\"icon-cut\" onclick=\"javascript:alert('cut')\"></a>\n\t\t<a href=\"javascript:void(0)\" class=\"icon-help\" onclick=\"javascript:alert('help')\"></a>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/fluid.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Fluid Window - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Fluid Window</h2>\n\t<p>This example shows how to set the width of Window to a percentage of its parent container.</p>\n\t<div style=\"margin:20px 0;\"></div>\n\t<div id=\"w\" class=\"easyui-window\" title=\"Fluid Window\" style=\"width:80%;height:200px;padding:10px;\" data-options=\"\n\t\t\ticonCls:'icon-save',\n\t\t\tonResize:function(){\n\t\t\t\t$(this).window('hcenter');\n\t\t\t}\">\n\t\t<p>The window has a width of 80%.</p>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/footer.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Window with a Footer - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Window with a Footer</h2>\n\t<p>This example shows how to attach a footer bar to the window.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#w').window('open')\">Open</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#w').window('close')\">Close</a>\n\t</div>\n\t<div id=\"w\" class=\"easyui-window\" title=\"Window with a Footer\" data-options=\"iconCls:'icon-save',footer:'#footer'\" style=\"width:500px;height:200px;padding:10px;\">\n\t\tThe window content.\n\t</div>\n\t<div id=\"footer\" style=\"padding:5px;\">Footer Content.</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/inlinewindow.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Inline Window - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Inline Window</h2>\n\t<p>The inline window stay inside its parent.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#w').window('open')\">Open</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#w').window('close')\">Close</a>\n\t</div>\n\t<div class=\"easyui-panel\" style=\"position:relative;width:500px;height:300px;overflow:auto;\">\n\t\t<div id=\"w\" class=\"easyui-window\" data-options=\"title:'Inline Window',inline:true\" style=\"width:250px;height:150px;padding:10px\">\n\t\t\tThis window stay inside its parent\n\t\t</div>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/modalwindow.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Modal Window - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Modal Window</h2>\n\t<p>Click the open button below to open the modal window.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#w').window('open')\">Open</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#w').window('close')\">Close</a>\n\t</div>\n\t<div id=\"w\" class=\"easyui-window\" title=\"Modal Window\" data-options=\"modal:true,closed:true,iconCls:'icon-save'\" style=\"width:500px;height:200px;padding:10px;\">\n\t\tThe window content.\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/windowlayout.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Window Layout - jQuery EasyUI Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/default/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../demo.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n</head>\n<body>\n\t<h2>Window Layout</h2>\n\t<p>Using layout on window.</p>\n\t<div style=\"margin:20px 0;\">\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#w').window('open')\">Open</a>\n\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$('#w').window('close')\">Close</a>\n\t</div>\n\t<div id=\"w\" class=\"easyui-window\" title=\"Window Layout\" data-options=\"iconCls:'icon-save'\" style=\"width:500px;height:200px;padding:5px;\">\n\t\t<div class=\"easyui-layout\" data-options=\"fit:true\">\n\t\t\t<div data-options=\"region:'east',split:true\" style=\"width:100px\"></div>\n\t\t\t<div data-options=\"region:'center'\" style=\"padding:10px;\">\n\t\t\t\tjQuery EasyUI framework help you build your web page easily.\n\t\t\t</div>\n\t\t\t<div data-options=\"region:'south',border:false\" style=\"text-align:right;padding:5px 0 0;\">\n\t\t\t\t<a class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-ok'\" href=\"javascript:void(0)\" onclick=\"javascript:alert('ok')\" style=\"width:80px\">Ok</a>\n\t\t\t\t<a class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-cancel'\" href=\"javascript:void(0)\" onclick=\"javascript:alert('cancel')\" style=\"width:80px\">Cancel</a>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/accordion/_content.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>AJAX Content</title>\n</head>\n<body>\n\t<p style=\"font-size:14px\">Here is the content loaded via AJAX.</p>\n\t<ul>\n\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t<li>easyui provides essential functionality for building modern, interactive, javascript applications.</li>\n\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t<li>complete framework for HTML5 web page.</li>\n\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t<li>easyui is very easy but powerful.</li>\n\t</ul>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/accordion/basic.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Basic Accordion - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Basic Accordion</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<div class=\"easyui-accordion\" fit=\"true\" border=\"false\">\r\t\t\t<div title=\"List\">\r\t\t\t\t<ul class=\"m-list\">\r\t\t\t\t\t<li>WLAN</li>\r\t\t\t\t\t<li>Memory</li>\r\t\t\t\t\t<li>Screen</li>\r\t\t\t\t\t<li>More...</li>\r\t\t\t\t</ul>\r\t\t\t</div>\r\t\t\t<div title=\"Ajax\" href=\"_content.html\" style=\"padding:10px\"></div>\r\t\t</div>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/accordion/header.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Custom Accordion Header - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Custom Accordion Header</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<div class=\"easyui-accordion\" data-options=\"fit:true,border:false,selected:-1\">\r\t\t\t<div>\r\t\t\t\t<header>\r\t\t\t\t\t<div class=\"hh-inner\">\r\t\t\t\t\t\t<span>List</span>\r\t\t\t\t\t\t<span class=\"m-badge\" style=\"float:right\">26/51</span>\r\t\t\t\t\t</div>\r\t\t\t\t</header>\r\t\t\t\t<ul class=\"m-list\">\r\t\t\t\t\t<li>WLAN</li>\r\t\t\t\t\t<li>Memory</li>\r\t\t\t\t\t<li>Screen</li>\r\t\t\t\t\t<li>More...</li>\r\t\t\t\t</ul>\r\t\t\t</div>\r\t\t\t<div href=\"_content.html\" style=\"padding:10px\">\r\t\t\t\t<header>\r\t\t\t\t\t<div class=\"hh-inner\">\r\t\t\t\t\t\t<span>Ajax</span>\r\t\t\t\t\t\t<span style=\"float:right\">\r\t\t\t\t\t\t\t<span style=\"color:#999;margin-right:5px\">Loading via ajax</span>\r\t\t\t\t\t\t\t<span class=\"m-badge\">23</span>\r\t\t\t\t\t\t</span>\r\t\t\t\t\t</div>\r\t\t\t\t</header>\r\t\t\t</div>\r\t\t</div>\r\t</div>\r\t<style scoped>\r\t\t.hh-inner{\r\t\t\tposition: relative;\r\t\t\tline-height: 20px;\r\t\t\tbackground: #fff;\r\t\t\tfont-weight: bold;\r\t\t\tmargin: -5px;\r\t\t\tpadding: 5px;\r\t\t}\r\t</style>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/animation/basic.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Basic Animation - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Basic Animation</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"m-list\">\r\t\t\t<li><a href=\"#p2\">Goto Panel2</a></li>\r\t\t</ul>\r\t</div>\r\t<div id=\"p2\" class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<div class=\"m-left\">\r\t\t\t\t\t<a href=\"#\" class=\"easyui-linkbutton m-back\" data-options=\"plain:true,outline:true,back:true\">Back</a>\r\t\t\t\t</div>\r\t\t\t\t<div class=\"m-title\">Panel2</div>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"m-list\">\r\t\t\t<li><a href=\"#p3\">Goto Panel3</a></li>\r\t\t</ul>\r\t</div>\r\t<div id=\"p3\" class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<div class=\"m-left\">\r\t\t\t\t\t<a href=\"#\" class=\"easyui-linkbutton m-back\" data-options=\"plain:true,outline:true,back:true\">Back</a>\r\t\t\t\t</div>\r\t\t\t\t<div class=\"m-title\">Panel3</div>\r\t\t\t</div>\r\t\t</header>\r\t\t<div style=\"padding:20px 10px\">\r\t\t\t<p>Panel3 Content.</p>\r\t\t</div>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/animation/fade.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Fade Animation - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Fade Animation</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"m-list\">\r\t\t\t<li><a href=\"#p2\" data-options=\"animation:'fade',direction:''\">Fade</a></li>\r\t\t</ul>\r\t</div>\r\t<div id=\"p2\" class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<div class=\"m-left\">\r\t\t\t\t\t<a href=\"#\" class=\"easyui-linkbutton m-back\" data-options=\"plain:true,outline:true,back:true\">Back</a>\r\t\t\t\t</div>\r\t\t\t\t<div class=\"m-title\">Panel2</div>\r\t\t\t</div>\r\t\t</header>\r\t\t<div style=\"padding:10px\">\r\t\t\t<p>Panel2 Content.</p>\r\t\t</div>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/animation/pop.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Pop Animation - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Pop Animation</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"m-list\">\r\t\t\t<li><a href=\"#p2\" data-options=\"animation:'pop',direction:''\">Pop</a></li>\r\t\t</ul>\r\t</div>\r\t<div id=\"p2\" class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<div class=\"m-left\">\r\t\t\t\t\t<a href=\"#\" class=\"easyui-linkbutton m-back\" data-options=\"plain:true,outline:true,back:true\">Back</a>\r\t\t\t\t</div>\r\t\t\t\t<div class=\"m-title\">Panel2</div>\r\t\t\t</div>\r\t\t</header>\r\t\t<div style=\"padding:10px\">\r\t\t\t<p>Panel2 Content.</p>\r\t\t</div>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/animation/slide.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Slide Animation - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Slide Animation</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"m-list\">\r\t\t\t<li><a href=\"#p2\" data-options=\"animation:'slide',direction:'left'\">Slide Left</a></li>\r\t\t\t<li><a href=\"#p2\" data-options=\"animation:'slide',direction:'right'\">Slide Right</a></li>\r\t\t\t<li><a href=\"#p2\" data-options=\"animation:'slide',direction:'up'\">Slide Up</a></li>\r\t\t\t<li><a href=\"#p2\" data-options=\"animation:'slide',direction:'down'\">Slide Down</a></li>\r\t\t</ul>\r\t</div>\r\t<div id=\"p2\" class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<div class=\"m-left\">\r\t\t\t\t\t<a href=\"#\" class=\"easyui-linkbutton m-back\" data-options=\"plain:true,outline:true,back:true\">Back</a>\r\t\t\t\t</div>\r\t\t\t\t<div class=\"m-title\">Panel2</div>\r\t\t\t</div>\r\t\t</header>\r\t\t<div style=\"padding:10px\">\r\t\t\t<p>Panel2 Content.</p>\r\t\t</div>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/badge/basic.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Basic Badge - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Basic Badge</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<div style=\"padding:20px 40px\">\r\t\t\t<a href=\"#\" class=\"easyui-linkbutton\">\r\t\t\t\tButton<span class=\"m-badge\">2</span>\r\t\t\t</a>\r\t\t</div>\r\t\t<div style=\"padding:20px 40px\">\r\t\t\t<a href=\"#\" class=\"easyui-linkbutton\" iconCls=\"icon-ok\">\r\t\t\t\tButton<span class=\"m-badge\">3</span>\r\t\t\t</a>\r\t\t</div>\r\t\t<div style=\"padding:20px 40px\">\r\t\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-picture',iconAlign:'top',size:'large'\">\r\t\t\t\tLargeButton<span class=\"m-badge\">4</span>\r\t\t\t</a>\r\t\t\t<a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-shapes',iconAlign:'top',size:'large'\" style=\"margin-left:20px\">\r\t\t\t\tLargeButton<span class=\"m-badge\">5</span>\r\t\t\t</a>\r\t\t</div>\r\t\t<div style=\"padding:20px 40px\">\r\t\t\t<a href=\"#\" class=\"easyui-linkbutton m-badge\" data-badge=\"22\" style=\"width:100px;height:40px\">Badge Attr</a>\r\t\t\t<a href=\"#\" class=\"easyui-linkbutton m-badge\" data-badge=\"23\" style=\"width:100px;height:40px;margin-left:20px\">Badge Attr</a>\r\t\t</div>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/badge/button.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Button Badge - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Button Badge</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<footer>\r            <div class=\"m-buttongroup m-buttongroup-justified\" style=\"width:100%\">\r                <a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-picture',size:'large',iconAlign:'top',plain:true\">Picture</a>\r                <a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-clipart',size:'large',iconAlign:'top',plain:true\">Clip Art</a>\r                <a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-shapes',size:'large',iconAlign:'top',plain:true\">Shapes<span class=\"m-badge\">23</span></a>\r                <a href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-smartart',size:'large',iconAlign:'top',plain:true\">SmartArt</a>\r            </div>\r\t\t</footer>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/badge/list.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>List Badge - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/color.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">List Badge</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"m-list\">\r\t\t\t<li>Large\r\t\t\t\t<div class=\"m-right\"><span class=\"m-badge\" style=\"margin-top:10px\">234</span></div>\r\t\t\t</li>\r\t\t\t<li>Spotted Adult Female\r\t\t\t\t<div class=\"m-right\"><span class=\"m-badge\" style=\"margin-top:10px\">215</span></div>\r\t\t\t</li>\r\t\t\t<li>Venomless\r\t\t\t\t<div class=\"m-right\"><span class=\"m-badge c1\" style=\"margin-top:10px\">12</span></div>\r\t\t\t</li>\r\t\t\t<li>Rattleless\r\t\t\t\t<div class=\"m-right\"><span class=\"m-badge c2\" style=\"margin-top:10px\">6</span></div>\r\t\t\t</li>\r\t\t\t<li>Green Adult</li>\r\t\t\t<li>Tailless</li>\r\t\t\t<li>With tail</li>\r\t\t\t<li>Adult Female</li>\r\t\t</ul>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/badge/tabs.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Tabs Badge - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t    <header>\r\t    \t<div class=\"m-toolbar\">\r\t    \t\t<div class=\"m-title\">Tabs Badge</div>\r\t    \t</div>\r\t    </header>\r\t\t<div class=\"easyui-tabs\" data-options=\"tabHeight:60,fit:true,tabPosition:'bottom',border:false,pill:true,narrow:true,justified:true\">\r\t\t\t<div style=\"padding:10px\">\r\t\t\t\t<div class=\"panel-header tt-inner\">\r\t\t\t\t\t<img src='../images/modem.png'/><br>Modem\r\t\t\t\t</div>\r\t\t\t\t<p>A modem (modulator-demodulator) is a device that modulates an analog carrier signal to encode digital information, and also demodulates such a carrier signal to decode the transmitted information.</p>\r\t\t\t</div>\r\t\t\t<div style=\"padding:10px\">\r\t\t\t\t<div class=\"panel-header tt-inner\">\r\t\t\t\t\t<img src='../images/scanner.png'/><br>Scanner\r\t\t\t\t</div>\r\t\t\t\t<p>In computing, an image scanner—often abbreviated to just scanner—is a device that optically scans images, printed text, handwriting, or an object, and converts it to a digital image.</p>\r\t\t\t</div>\r\t\t\t<div style=\"padding:10px\">\r\t\t\t\t<div class=\"panel-header tt-inner\">\r\t\t\t\t\t<img src='../images/pda.png'/><br>Pda\r\t\t\t\t\t<span class=\"m-badge\">23</span>\r\t\t\t\t</div>\r\t\t\t\t<p>A personal digital assistant (PDA), also known as a palmtop computer, or personal data assistant, is a mobile device that functions as a personal information manager. PDAs are largely considered obsolete with the widespread adoption of smartphones.</p>\r\t\t\t</div>\r\t\t\t<div style=\"padding:10px\">\r\t\t\t\t<div class=\"panel-header tt-inner\">\r\t\t\t\t\t<img src='../images/tablet.png'/><br>Pda\r\t\t\t\t\t<span class=\"m-badge\">13</span>\r\t\t\t\t</div>\r\t\t\t\t<p>A tablet computer, or simply tablet, is a one-piece mobile computer. Devices typically have a touchscreen, with finger or stylus gestures replacing the conventional computer mouse.</p>\r\t\t\t</div>\r\t\t</div>\r\t</div>\r\t<style scoped>\r       .tt-inner{\r            display:inline-block;\r            line-height:12px;\r            padding-top:6px;\r            position: relative;\r        }\r\t\tp{\r\t\t\tline-height:150%;\r\t\t}\r\t</style>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/button/basic.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Basic LinkButton - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Login to System</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<div style=\"margin:20px auto;width:100px;height:100px;border-radius:100px;overflow:hidden\">\r\t\t\t<img src=\"../images/login1.jpg\" style=\"margin:0;width:100%;height:100%;\">\r\t\t</div>\r\t\t<div style=\"padding:0 20px\">\r\t\t\t<div style=\"margin-bottom:10px\">\r\t\t\t\t<input class=\"easyui-textbox\" data-options=\"prompt:'Type username',iconCls:'icon-man'\" style=\"width:100%;height:38px\">\r\t\t\t</div>\r\t\t\t<div>\r\t\t\t\t<input class=\"easyui-passwordbox\" data-options=\"prompt:'Type password'\" style=\"width:100%;height:38px\">\r\t\t\t</div>\r\t\t\t<div style=\"text-align:center;margin-top:30px\">\r\t\t\t\t<a href=\"#\" class=\"easyui-linkbutton\" style=\"width:100%;height:40px\"><span style=\"font-size:16px\">Login</span></a>\r\t\t\t</div>\r\t\t\t<div style=\"text-align:center;margin-top:30px\">\r\t\t\t\t<a href=\"#\" class=\"easyui-linkbutton\" plain=\"true\" outline=\"true\" style=\"width:100px;height:35px\"><span style=\"font-size:16px\">Register</span></a> \r\t\t\t</div>\r\t\t</div>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/button/group.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Group LinkButton - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<div class=\"m-title\">Button Group</div>\r\t\t\t</div>\r\t\t</header>\r\t\t<div style=\"text-align:center;padding:10px\">\r\t\t\t<span class=\"m-buttongroup\">\r\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"toggle:true,group:'g1',selected:true\" onclick=\"show1('#m-modem')\" style=\"width:80px;height:30px\">Modem</a> \r\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"toggle:true,group:'g1'\" onclick=\"show1('#m-scanner')\" style=\"width:80px;height:30px\">Scanner</a> \r\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"toggle:true,group:'g1'\" onclick=\"show1('#m-tablet')\" style=\"width:80px;height:30px\">Tablet</a> \r\t\t\t</span>\r\t\t</div>\r\t\t<div id=\"items\" style=\"padding:10px 20px;\">\r\t\t\t<div id=\"m-modem\" class=\"m-item\">\r\t\t\t\t<img src=\"../images/modem.png\"/>\r\t\t\t\t<p>A modem (modulator-demodulator) is a device that modulates an analog carrier signal to encode digital information, and also demodulates such a carrier signal to decode the transmitted information.</p>\r\t\t\t</div>\r\t\t\t<div id=\"m-scanner\" class=\"m-item\" style=\"display:none\">\r\t\t\t\t<img src=\"../images/scanner.png\"/>\r\t\t\t\t<p>In computing, an image scanner—often abbreviated to just scanner—is a device that optically scans images, printed text, handwriting, or an object, and converts it to a digital image.</p>\r\t\t\t</div>\r\t\t\t<div id=\"m-tablet\" class=\"m-item\" style=\"display:none\">\r\t\t\t\t<img src=\"../images/tablet.png\"/>\r\t\t\t\t<p>A tablet computer, or simply tablet, is a one-piece mobile computer. Devices typically have a touchscreen, with finger or stylus gestures replacing the conventional computer mouse.</p>\r\t\t\t</div>\r\t\t</div>\r\t</div>\r\r\t<script>\r\t\tfunction show1(id){\r\t\t\t$('div.m-item').hide();\r\t\t\t$(id).show();\r\t\t}\r\t</script>\r\t<style scoped>\r\t\tp{\r\t\t\tline-height:150%;\r\t\t}\r\t\t#items img{\r\t\t\tmargin:0 10px 10px 0;\r\t\t\tfloat:left;\r\t\t}\r\t</style>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/button/style.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Button Style - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/color.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Button Style</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<div style=\"padding:20px\">\r\t\t\t<p>Style</p>\r\t\t\t<a href=\"#\" class=\"easyui-linkbutton\" style=\"width:80px\">Normal</a>\r\t\t\t<a href=\"#\" class=\"easyui-linkbutton\" plain=\"true\" outline=\"true\" style=\"width:80px\">Outline</a>\r\t\t\t<a href=\"#\" class=\"easyui-linkbutton\" disabled style=\"width:80px\">Disabled</a>\r\r\t\t\t<p>Colors<p>\r\t\t\t<p><a href=\"#\" class=\"easyui-linkbutton c1\" style=\"width:100%\">Button1</a></p>\r\t\t\t<p><a href=\"#\" class=\"easyui-linkbutton c2\" style=\"width:100%\">Button2</a></p>\r\t\t\t<p><a href=\"#\" class=\"easyui-linkbutton c3\" style=\"width:100%\">Button3</a></p>\r\t\t\t<p><a href=\"#\" class=\"easyui-linkbutton c4\" style=\"width:100%\">Button4</a></p>\r\t\t\t<p><a href=\"#\" class=\"easyui-linkbutton c5\" style=\"width:100%\">Button5</a></p>\r\t\t\t<p><a href=\"#\" class=\"easyui-linkbutton c6\" style=\"width:100%\">Button6</a></p>\r\t\t</div>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/button/switch.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Switch Button - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/color.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Switch Button</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"m-list\">\r\t\t\t<li>\r\t\t\t\t<span>Network</span>\r\t\t\t\t<div class=\"m-right\"><input class=\"easyui-switchbutton\" checked></div>\r\t\t\t</li>\r\t\t\t<li>\r\t\t\t\t<span>Bluetooth</span>\r\t\t\t\t<div class=\"m-right\"><input class=\"easyui-switchbutton\" checked></div>\r\t\t\t</li>\r\t\t\t<li>\r\t\t\t\t<span>Sent mail</span>\r\t\t\t\t<div class=\"m-right\"><input class=\"easyui-switchbutton\" data-options=\"checked:false\"></div>\r\t\t\t</li>\r\t\t\t<li>\r\t\t\t\t<a href=\"javascript:void(0)\">Storage...</a>\r\t\t\t</li>\r\t\t\t<li>\r\t\t\t\t<a href=\"javascript:void(0)\">More...</a>\r\t\t\t</li>\r\t\t</ul>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/datagrid/basic.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Basic DataGrid - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r    <table id=\"dg\" data-options=\"header:'#hh',singleSelect:true,border:false,fit:true,fitColumns:true,scrollbarSize:0\">  \r        <thead>  \r            <tr>  \r                <th data-options=\"field:'itemid',width:80\">Item ID</th>  \r                <th data-options=\"field:'productid',width:100\">Product</th>  \r                <th data-options=\"field:'listprice',width:80,align:'right'\">List Price</th>  \r                <th data-options=\"field:'unitcost',width:80,align:'right'\">Unit Cost</th>  \r            </tr>\r        </thead>  \r    </table>\r    <div id=\"hh\">\r    \t<div class=\"m-toolbar\">\r    \t\t<div class=\"m-title\">Basic DataGrid</div>\r    \t</div>\r    </div>\r\t<script>\r\t\tvar data = \t[\r\t\t\t{\"productid\":\"FI-SW-01\",\"productname\":\"Koi\",\"unitcost\":10.00,\"status\":\"P\",\"listprice\":36.50,\"attr1\":\"Large\",\"itemid\":\"EST-1\"},\r\t\t\t{\"productid\":\"K9-DL-01\",\"productname\":\"Dalmation\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":18.50,\"attr1\":\"Spotted Adult Female\",\"itemid\":\"EST-10\"},\r\t\t\t{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":38.50,\"attr1\":\"Venomless\",\"itemid\":\"EST-11\"},\r\t\t\t{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":26.50,\"attr1\":\"Rattleless\",\"itemid\":\"EST-12\"},\r\t\t\t{\"productid\":\"RP-LI-02\",\"productname\":\"Iguana\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":35.50,\"attr1\":\"Green Adult\",\"itemid\":\"EST-13\"},\r\t\t\t{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":158.50,\"attr1\":\"Tailless\",\"itemid\":\"EST-14\"},\r\t\t\t{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":83.50,\"attr1\":\"With tail\",\"itemid\":\"EST-15\"},\r\t\t\t{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":23.50,\"attr1\":\"Adult Female\",\"itemid\":\"EST-16\"},\r\t\t\t{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":89.50,\"attr1\":\"Adult Male\",\"itemid\":\"EST-17\"},\r\t\t\t{\"productid\":\"AV-CB-01\",\"productname\":\"Amazon Parrot\",\"unitcost\":92.00,\"status\":\"P\",\"listprice\":63.50,\"attr1\":\"Adult Male\",\"itemid\":\"EST-18\"}\r\t\t];\r\t\t$(function(){\r\t\t\t$('#dg').datagrid({\r\t\t\t\tdata: data\r\t\t\t});\r\t\t});\r\t</script>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/datagrid/rowediting.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\t<title>Row Editing DataGrid - jQuery EasyUI Mobile Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\n</head>\n<body>\n\t<table id=\"dg\" data-options=\"\n\t\t\t\theader:'#hh',\n\t\t\t\ticonCls: 'icon-edit',\n\t\t\t\tsingleSelect: true,\n\t\t\t\tfit:true,\n\t\t\t\tfitColumns:true,\n\t\t\t\tborder: false,\n\t\t\t\tscrollbarSize: 0,\n\t\t\t\tdata: data,\n\t\t\t\tonClickRow: onClickRow\n\t\t\t\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th data-options=\"field:'itemid',width:80\">Item ID</th>\n\t\t\t\t<th data-options=\"field:'productid',width:100,editor:'textbox'\">Product</th>\n\t\t\t\t<th data-options=\"field:'listprice',width:80,align:'right',editor:{type:'numberbox',options:{precision:1}}\">List Price</th>\n\t\t\t\t<th data-options=\"field:'unitcost',width:80,align:'right',editor:'numberbox'\">Unit Cost</th>\n\t\t\t</tr>\n\t\t</thead>\n\t</table>\n\t<div id=\"hh\">\n\t\t<div class=\"m-toolbar\">\n\t\t\t<div class=\"m-title\">Row Editing</div>\n\t\t\t<div class=\"m-right\">\n\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-remove',plain:true\" onclick=\"removeit()\"></a>\n\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-save',plain:true\" onclick=\"accept()\"></a>\n\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-undo',plain:true\" onclick=\"reject()\"></a>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t\n\t<script type=\"text/javascript\">\n\t\tvar data = \t[\n\t\t\t{\"productid\":\"FI-SW-01\",\"productname\":\"Koi\",\"unitcost\":10.00,\"status\":\"P\",\"listprice\":36.50,\"attr1\":\"Large\",\"itemid\":\"EST-1\"},\n\t\t\t{\"productid\":\"K9-DL-01\",\"productname\":\"Dalmation\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":18.50,\"attr1\":\"Spotted Adult Female\",\"itemid\":\"EST-10\"},\n\t\t\t{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":38.50,\"attr1\":\"Venomless\",\"itemid\":\"EST-11\"},\n\t\t\t{\"productid\":\"RP-SN-01\",\"productname\":\"Rattlesnake\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":26.50,\"attr1\":\"Rattleless\",\"itemid\":\"EST-12\"},\n\t\t\t{\"productid\":\"RP-LI-02\",\"productname\":\"Iguana\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":35.50,\"attr1\":\"Green Adult\",\"itemid\":\"EST-13\"},\n\t\t\t{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":158.50,\"attr1\":\"Tailless\",\"itemid\":\"EST-14\"},\n\t\t\t{\"productid\":\"FL-DSH-01\",\"productname\":\"Manx\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":83.50,\"attr1\":\"With tail\",\"itemid\":\"EST-15\"},\n\t\t\t{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":23.50,\"attr1\":\"Adult Female\",\"itemid\":\"EST-16\"},\n\t\t\t{\"productid\":\"FL-DLH-02\",\"productname\":\"Persian\",\"unitcost\":12.00,\"status\":\"P\",\"listprice\":89.50,\"attr1\":\"Adult Male\",\"itemid\":\"EST-17\"},\n\t\t\t{\"productid\":\"AV-CB-01\",\"productname\":\"Amazon Parrot\",\"unitcost\":92.00,\"status\":\"P\",\"listprice\":63.50,\"attr1\":\"Adult Male\",\"itemid\":\"EST-18\"}\n\t\t];\n\t\t$(function(){\n\t\t\t$('#dg').datagrid({\n\t\t\t\tdata: data\n\t\t\t});\n\t\t});\n\t\t\n\t\tvar editIndex = undefined;\n\t\tfunction endEditing(){\n\t\t\tif (editIndex == undefined){return true}\n\t\t\tif ($('#dg').datagrid('validateRow', editIndex)){\n\t\t\t\t$('#dg').datagrid('endEdit', editIndex);\n\t\t\t\teditIndex = undefined;\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tfunction onClickRow(index){\n\t\t\tif (editIndex != index){\n\t\t\t\tif (endEditing()){\n\t\t\t\t\t$('#dg').datagrid('selectRow', index)\n\t\t\t\t\t\t\t.datagrid('beginEdit', index);\n\t\t\t\t\teditIndex = index;\n\t\t\t\t} else {\n\t\t\t\t\t$('#dg').datagrid('selectRow', editIndex);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfunction removeit(){\n\t\t\tif (editIndex == undefined){return}\n\t\t\t$('#dg').datagrid('cancelEdit', editIndex)\n\t\t\t\t\t.datagrid('deleteRow', editIndex);\n\t\t\teditIndex = undefined;\n\t\t}\n\t\tfunction accept(){\n\t\t\tif (endEditing()){\n\t\t\t\t$('#dg').datagrid('acceptChanges');\n\t\t\t}\n\t\t}\n\t\tfunction reject(){\n\t\t\t$('#dg').datagrid('rejectChanges');\n\t\t\teditIndex = undefined;\n\t\t}\n\t</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/datalist/basic.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Basic DataList - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Basic DataList</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"easyui-datalist\" data-options=\"\r\t\t\t\tfit: true,\r\t\t\t\tlines: true,\r\t\t\t\tborder: false\r\t\t\t\t\">\r\t\t\t<li>Large</li>\r\t\t\t<li>Spotted Adult Female</li>\r\t\t\t<li>Venomless</li>\r\t\t\t<li><a href=\"javascript:void(0)\" class=\"datalist-link\">Rattleless</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" class=\"datalist-link\">Green Adult</a></li>\r\t\t\t<li>Tailless</li>\r\t\t\t<li>With tail</li>\r\t\t\t<li>Adult Female</li>\r\t\t</ul>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/datalist/group.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Group DataList - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Group DataList</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<div id=\"dl\" data-options=\"\r\t\t\t\tfit: true,\r\t\t\t\tborder: false,\r\t\t\t\tlines: true\r\t\t\t\t\">\r\t\t</div>\r\t</div>\r\t<div id=\"p2\" class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span id=\"p2-title\" class=\"m-title\">Detail</span>\r                <div class=\"m-left\">\r                    <a href=\"javascript:void(0)\" class=\"easyui-linkbutton m-back\" plain=\"true\" outline=\"true\" onclick=\"$.mobile.back()\">Back</a>\r                </div>\r\t\t\t</div>\r\t\t</header>\r        <div style=\"margin:50px 0 0;text-align:center\">\r            <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" style=\"width:100px;height:30px\" onclick=\"$.mobile.back()\">Go Back</a>\r        </div>\r\t</div>\r\t<script>\r\t\tvar data = [\r\t\t\t{\"group\":\"FL-DSH-01\",\"item\":\"Tailless\"},\r\t\t\t{\"group\":\"FL-DSH-01\",\"item\":\"With tail\"},\r\t\t\t{\"group\":\"FL-DSH-02\",\"item\":\"Adult Female\"},\r\t\t\t{\"group\":\"FL-DSH-02\",\"item\":\"Adult Male\"}\r\t\t];\r\t\t$(function(){\r\t\t\t$('#dl').datalist({\r\t\t\t\tdata: data,\r\t\t\t\ttextField: 'item',\r\t\t\t\tgroupField: 'group',\r\t\t\t\ttextFormatter: function(value){\r\t\t\t\t\treturn '<a href=\"javascript:void(0)\" class=\"datalist-link\">' + value + '</a>';\r\t\t\t\t},\r\t\t\t\tonClickRow: function(index,row){\r\t\t\t\t\t$('#p2-title').html(row.item);\r\t\t\t\t\t$.mobile.go('#p2');\r\t\t\t\t}\r\t\t\t})\r\t\t})\r\t</script>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/datalist/selection.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>DataList Selection - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">DataList Selection</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<div id=\"dl\" data-options=\"\r\t\t\t\tfit: true,\r\t\t\t\tborder: false,\r\t\t\t\tlines: true,\r\t\t\t\tcheckbox: true,\r\t\t\t\tsingleSelect: false\r\t\t\t\t\">\r\t\t</div>\r\t</div>\r\t<script>\r\t\tvar data = [\r\t\t\t{\"group\":\"FL-DSH-01\",\"item\":\"Tailless\"},\r\t\t\t{\"group\":\"FL-DSH-01\",\"item\":\"With tail\"},\r\t\t\t{\"group\":\"FL-DSH-02\",\"item\":\"Adult Female\"},\r\t\t\t{\"group\":\"FL-DSH-02\",\"item\":\"Adult Male\"}\r\t\t];\r\t\t$(function(){\r\t\t\t$('#dl').datalist({\r\t\t\t\tdata: data,\r\t\t\t\ttextField: 'item',\r\t\t\t\tgroupField: 'group'\r\t\t\t})\r\t\t})\r\t</script>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/dialog/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\t<title>Basic Dialog - jQuery EasyUI Mobile Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\n</head>\n<body>\n\t<div class=\"easyui-navpanel\" style=\"position:relative\">\n\t\t<header>\n\t\t\t<div class=\"m-toolbar\">\n\t\t\t\t<div class=\"m-title\">Basic Dialog</div>\n\t\t\t</div>\n\t\t</header>\n        <footer>\n            <div class=\"m-buttongroup m-buttongroup-justified\" style=\"width:100%\">\n                <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-picture',size:'large',iconAlign:'top',plain:true\">Picture</a>\n                <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-clipart',size:'large',iconAlign:'top',plain:true\">Clip Art</a>\n                <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-shapes',size:'large',iconAlign:'top',plain:true\">Shapes</a>\n                <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-smartart',size:'large',iconAlign:'top',plain:true\">SmartArt</a>\n            </div>\n        </footer>\n\t\t<div style=\"text-align:center;margin:50px 30px\">\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"plain:true,outline:true\" style=\"width:80px;height:30px\" onclick=\"$('#dlg1').dialog('open').dialog('center')\">Login</a>\n\t\t</div>\n\n\t\t<div id=\"dlg1\" class=\"easyui-dialog\" style=\"padding:20px 6px;width:80%;\" data-options=\"inline:true,modal:true,closed:true,title:'Login'\">\n\t\t\t<div style=\"margin-bottom:10px\">\n\t\t\t\t<input class=\"easyui-textbox\" prompt=\"Username\" style=\"width:100%;height:30px\">\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<input class=\"easyui-textbox\" type=\"password\" prompt=\"Password\" style=\"width:100%;height:30px\">\n\t\t\t</div>\n\t\t\t<div class=\"dialog-button\">\n\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" style=\"width:100%;height:35px\" onclick=\"$('#dlg1').dialog('close')\">Sign in</a>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/dialog/message.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\t<title>Message Dialog - jQuery EasyUI Mobile Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\n</head>\n<body>\n\t<div class=\"easyui-navpanel\" style=\"position:relative\">\n\t\t<header>\n\t\t\t<div class=\"m-toolbar\">\n\t\t\t\t<div class=\"m-title\">Message Dialog</div>\n\t\t\t</div>\n\t\t</header>\n        <footer>\n\t        <div class=\"m-buttongroup m-buttongroup-justified\" style=\"width:100%;\">\n                <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-picture',size:'large',iconAlign:'top',plain:true\">Picture</a>\n                <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-clipart',size:'large',iconAlign:'top',plain:true\">Clip Art</a>\n                <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-shapes',size:'large',iconAlign:'top',plain:true\">Shapes</a>\n                <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-smartart',size:'large',iconAlign:'top',plain:true\">SmartArt</a>\n\t        </div>\n        </footer>\n\t\t<div style=\"text-align:center;margin:50px 30px\">\n\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"plain:true,outline:true\" style=\"width:80px;height:30px\" onclick=\"$('#dlg1').dialog('open').dialog('center')\">Click me</a>\n\t\t</div>\n\n\t\t<div id=\"dlg1\" class=\"easyui-dialog\" style=\"padding:20px 6px;width:80%;\" data-options=\"inline:true,modal:true,closed:true,title:'Information'\">\n\t\t\t<p>This is a message dialog.</p>\n\t\t\t<div class=\"dialog-button\">\n\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" style=\"width:100%;height:35px\" onclick=\"$('#dlg1').dialog('close')\">OK</a>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/form/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\t<title>Basic Form - jQuery EasyUI Mobile Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\n</head>\n<body>\n\t<div class=\"easyui-navpanel\" style=\"position:relative;padding:20px\">\n\t\t<header>\n\t\t\t<div class=\"m-toolbar\">\n\t\t\t\t<div class=\"m-title\">Basic Form</div>\n\t\t\t\t<div class=\"m-right\">\n\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" plain=\"true\" outline=\"true\" onclick=\"$('#ff').form('reset')\" style=\"width:60px\">Reset</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</header>\n\t\t<form id=\"ff\">\n\t\t\t<div style=\"margin-bottom:10px\">\n\t\t\t\t<input class=\"easyui-textbox\" label=\"Full name:\" prompt=\"Full name\" style=\"width:100%\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:10px\">\n\t\t\t\t<input class=\"easyui-datebox\" label=\"Birthday:\" prompt=\"Birthday\" data-options=\"editable:false,panelWidth:220,panelHeight:240,iconWidth:30\" style=\"width:100%\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:10px\">\n\t\t\t\t<input class=\"easyui-passwordbox\" label=\"Password:\" prompt=\"Password\" style=\"width:100%\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:10px\">\n\t\t\t\t<input class=\"easyui-numberbox\" label=\"Number:\" prompt=\"Number\" style=\"width:100%\">\n\t\t\t</div>\n\t\t\t<div style=\"margin-bottom:10px\">\n\t\t\t\t<label class=\"textbox-label\">Switch:</label><!--\n\t\t\t\t--><input class=\"easyui-switchbutton\">\n\t\t\t</div>\n\t\t</form>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/input/numberspinner.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>NumberSpinner - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<div class=\"m-title\">NumberSpinner</div>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"m-list\">\r\t\t\t<li>\r\t\t\t\t<input class=\"easyui-numberspinner\" style=\"width:100%;\" data-options=\"\r\t\t\t\t\t\tlabel: 'Basic Number:',\r\t\t\t\t\t\tlabelPosition: 'top'\r\t\t\t\t\t\t\">\r\t\t\t</li>\r\t\t\t<li>\r\t\t\t\t<input class=\"easyui-numberspinner\" style=\"width:100%;\" data-options=\"\r\t\t\t\t\t\tlabel: 'Increment Number:',\r\t\t\t\t\t\tlabelPosition: 'top',\r\t\t\t\t\t\tvalue: 1000,\r\t\t\t\t\t\tincrement: 100\r\t\t\t\t\t\t\">\r\t\t\t</li>\r\t\t\t<li>\r\t\t\t\t<input class=\"easyui-numberspinner\" style=\"width:100%;\" data-options=\"\r\t\t\t\t\t\tlabel: 'Format Number:',\r\t\t\t\t\t\tlabelPosition: 'top',\r\t\t\t\t\t\tvalue: 23893,\r\t\t\t\t\t\tgroupSeparator: ',',\r\t\t\t\t\t\tdecimalSeparator: '.',\r\t\t\t\t\t\tprefix: '$'\r\t\t\t\t\t\t\">\r\t\t\t</li>\r\t\t</ul>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/input/textbox.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>TextBox - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<div class=\"m-title\">TextBox</div>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"m-list\">\r\t\t\t<li>\r\t\t\t\t<input class=\"easyui-textbox\" style=\"width:100%\" data-options=\"\r\t\t\t\t\t\tlabel: 'Standard TextBox:',\r\t\t\t\t\t\tlabelPosition: 'top',\r\t\t\t\t\t\tprompt: 'Search...'\r\t\t\t\t\t\t\">\r\t\t\t</li>\r\t\t\t<li>\r\t\t\t\t<input class=\"easyui-textbox\" style=\"width:100%\" data-options=\"\r\t\t\t\t\t\tlabel: 'Icon:',\r\t\t\t\t\t\tlabelPosition: 'top',\r\t\t\t\t\t\ticonCls: 'icon-search'\r\t\t\t\t\t\t\">\r\t\t\t</li>\r\t\t\t<li>\r\t\t\t\t<input class=\"easyui-textbox\" style=\"width:100%\" data-options=\"\r\t\t\t\t\t\tlabel: 'Button:',\r\t\t\t\t\t\tlabelPosition: 'top',\r\t\t\t\t\t\tbuttonText: 'Search'\r\t\t\t\t\t\t\">\r\t\t\t</li>\r\t\t</ul>\r\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/layout/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\t<title>Basic Layout - jQuery EasyUI Mobile Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\n</head>\n<body>\n\t<div class=\"easyui-navpanel\">\n        <header>\n            <div class=\"m-toolbar\">\n                <div class=\"m-title\">Layout</div>\n                <div class=\"m-left\">\n                    <a href=\"javascript:void(0)\" class=\"easyui-linkbutton m-back\" plain=\"true\" outline=\"true\">Back</a>\n                </div>\n                <div class=\"m-right\">\n                    <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" iconCls=\"icon-search\" plain=\"true\" outline=\"true\">Search</a>\n                </div>\n            </div>\n        </header>\n        <footer style=\"padding:2px 3px\">\n            <input class=\"easyui-textbox\" style=\"width:100%;height:32px;\" data-options=\"prompt:'Type something here',buttonText:'<span style=\\'padding:0 15px\\'>Send</span>'\">\n        </footer>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/menu/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\t<title>Basic Menu - jQuery EasyUI Mobile Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\n</head>\n<body>\n\t<div class=\"easyui-navpanel\">\n\t\t<header>\n\t\t\t<div class=\"m-toolbar\">\n\t\t\t\t<div class=\"m-title\">Menu</div>\n\t\t\t\t<div class=\"m-right\">\n\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-search',plain:true\"></a>\n\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-menubutton\" data-options=\"iconCls:'icon-more',menu:'#mm',menuAlign:'right',hasDownArrow:false\"></a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</header>\n\t</div>\n\t<div id=\"mm\" class=\"easyui-menu\" style=\"width:150px;\">\n\t\t<div data-options=\"iconCls:'icon-undo'\">Undo</div>\n\t\t<div data-options=\"iconCls:'icon-redo'\">Redo</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>Cut</div>\n\t\t<div>Copy</div>\n\t\t<div>Paste</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>Toolbar</div>\n\t\t<div data-options=\"iconCls:'icon-remove'\">Delete</div>\n\t\t<div>Select All</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/menu/menubar.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\t<title>Menubar - jQuery EasyUI Mobile Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\n</head>\n<body>\n\t<div class=\"easyui-navpanel\">\n\t\t<header>\n\t\t\t<div class=\"m-toolbar\">\n\t\t\t\t<div class=\"m-title\">\n\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"plain:true,outline:true\" style=\"width:70px\">Home</a>  \n\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-menubutton\" data-options=\"menu:'#mm1',iconCls:'icon-edit',outline:true\" style=\"width:70px\">Edit</a>  \n\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-menubutton\" data-options=\"menu:'#mm2',iconCls:'icon-help',outline:true\" style=\"width:75px\">Help</a>  \n\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"plain:true,outline:true\" style=\"width:70px\">About</a>  \n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</header>\n\t</div>\n\t<div id=\"mm1\" class=\"easyui-menu\" style=\"width:150px;\">\n\t\t<div data-options=\"iconCls:'icon-undo'\">Undo</div>\n\t\t<div data-options=\"iconCls:'icon-redo'\">Redo</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>Cut</div>\n\t\t<div>Copy</div>\n\t\t<div>Paste</div>\n\t\t<div class=\"menu-sep\"></div>\n\t\t<div>Toolbar</div>\n\t\t<div data-options=\"iconCls:'icon-remove'\">Delete</div>\n\t\t<div>Select All</div>\n\t</div>\n    <div id=\"mm2\" style=\"width:100px;\">  \n        <div>Help</div>  \n        <div>Update</div>  \n        <div>About</div>  \n    </div>  \n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/panel/_content.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>AJAX Content</title>\n</head>\n<body>\n\t<p style=\"font-size:14px\">Here is the content loaded via AJAX.</p>\n\t<ul>\n\t\t<li>easyui is a collection of user-interface plugin based on jQuery.</li>\n\t\t<li>easyui provides essential functionality for building modern, interactive, javascript applications.</li>\n\t\t<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>\n\t\t<li>complete framework for HTML5 web page.</li>\n\t\t<li>easyui save your time and scales while developing your products.</li>\n\t\t<li>easyui is very easy but powerful.</li>\n\t</ul>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/panel/ajax.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Ajax Panel - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\" data-options=\"href:'_content.html'\" style=\"padding:10px\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<div class=\"m-title\">Ajax Panel</div>\r\t\t\t</div>\r\t\t</header>\r\t\t<footer>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<div class=\"m-title\">Panel Footer</div>\r\t\t\t</div>\r\t\t</footer>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/panel/basic.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Basic Panel - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<div class=\"m-title\">Panel Header</div>\r\t\t\t</div>\r\t\t</header>\r\t\t<footer>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<div class=\"m-title\">Panel Footer</div>\r\t\t\t</div>\r\t\t</footer>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/panel/nav.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\t<title>Navigation Panel - jQuery EasyUI Mobile Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\n</head>\n<body>\n\t<div class=\"easyui-navpanel\">\n        <header>\n            <div class=\"m-toolbar\">\n                <div class=\"m-title\">Navigation</div>\n            </div>\n        </header>\n        <div style=\"margin:50px 0 0;text-align:center\">\n            <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" style=\"width:100px;height:30px\" onclick=\"$.mobile.go('#p2')\">Goto Panel2</a>\n        </div>\n\t</div>\n    <div id=\"p2\" class=\"easyui-navpanel\">\n        <header>\n            <div class=\"m-toolbar\">\n                <div class=\"m-title\">Panel2</div>\n                <div class=\"m-left\">\n                    <a href=\"#\" class=\"easyui-linkbutton m-back\" data-options=\"plain:true,outline:true,back:true\">Back</a>\n                </div>\n            </div>\n        </header>\n        <div style=\"margin:50px 0 0;text-align:center\">\n            <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" onclick=\"$.mobile.back()\">Go Back</a>\n        </div>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/simplelist/basic.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Simple List - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Simple List</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"m-list\">\r\t\t\t<li>Large</li>\r\t\t\t<li>Spotted Adult Female</li>\r\t\t\t<li>Venomless</li>\r\t\t\t<li>Rattleless</li>\r\t\t\t<li>Green Adult</li>\r\t\t\t<li>Tailless</li>\r\t\t\t<li>With tail</li>\r\t\t\t<li>Adult Female</li>\r\t\t</ul>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/simplelist/button.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Button on List - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\r    <style>\r    </style> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Button on List</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"m-list\">\r\t\t\t<li>HP Deskjet 1000 Printer\r\t\t\t\t<div class=\"m-right\">\r\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\">Add</a>\r\t\t\t\t</div>\r\t\t\t</li>\r\t\t\t<li>Epson WorkForce 845\r\t\t\t\t<div class=\"m-right\">\r\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\">Add</a>\r\t\t\t\t</div>\r\t\t\t</li>\r\t\t\t<li>Logitech Keyboard K120\r\t\t\t\t<div class=\"m-right\">\r\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\">Add</a>\r\t\t\t\t</div>\r\t\t\t</li>\r\t\t\t<li>Nikon COOLPIX L26 16.1 MP\r\t\t\t\t<div class=\"m-right\">\r\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\">Add</a>\r\t\t\t\t</div>\r\t\t\t</li>\r\t\t\t<li>SanDisk Sansa Clip Zip 4GB\r\t\t\t\t<div class=\"m-right\">\r\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\">Add</a>\r\t\t\t\t</div>\r\t\t\t</li>\r\t\t\t<li>BLUE MP3 Metal Mini Clip Player\r\t\t\t\t<div class=\"m-right\">\r\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"easyui-linkbutton\">Add</a>\r\t\t\t\t</div>\r\t\t\t</li>\r\t\t</ul>\r\t</div>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/simplelist/group.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Group List - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Group List</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"m-list\">\r\t\t\t<li class=\"m-list-group\">FL-DSH-01</li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Large</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Spotted Adult Female</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Venomless</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Rattleless</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Green Adult</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Tailless</a></li>\r\t\t\t<li class=\"m-list-group\">FL-DSH-02</li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">With tail</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Adult Female</a></li>\r\t\t</ul>\r\t</div>\r\t<div id=\"p2\" class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span id=\"p2-title\" class=\"m-title\">Detail</span>\r                <div class=\"m-left\">\r                    <a href=\"javascript:void(0)\" class=\"easyui-linkbutton m-back\" plain=\"true\" outline=\"true\" onclick=\"$.mobile.back()\">Back</a>\r                </div>\r\t\t\t</div>\r\t\t</header>\r        <div style=\"margin:50px 0 0;text-align:center\">\r            <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" style=\"width:100px;height:30px\" onclick=\"$.mobile.back()\">Go Back</a>\r        </div>\r\t</div>\r\t<script type=\"text/javascript\">\r\t\tfunction openit(target){\r\t\t\tvar text = $(target).text();\r\t\t\t$('#p2-title').html(text);\r\t\t\t$.mobile.go('#p2');\r\t\t}\r\t</script>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/simplelist/image.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>List with Image - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">List with Image</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul id=\"list\" class=\"m-list\">\r\t\t\t<li>\r\t\t\t\t<img class=\"list-image\" src=\"../images/modem.png\"/>\r\t\t\t\t<div class=\"list-header\">modem</div>\r\t\t\t\t<div class=\"list-content\">modulates an analog carrier signal to encode digital information.</div>\r\t\t\t</li>\r\t\t\t<li>\r\t\t\t\t<img class=\"list-image\" src=\"../images/scanner.png\"/>\r\t\t\t\t<div class=\"list-header\">scanner</div>\r\t\t\t\t<div class=\"list-content\">scans images, printed text, handwriting, or an object.</div>\r\t\t\t</li>\r\t\t\t<li>\r\t\t\t\t<img class=\"list-image\" src=\"../images/pda.png\"/>\r\t\t\t\t<div class=\"list-header\">pda</div>\r\t\t\t\t<div class=\"list-content\">A personal digital assistant.</div>\r\t\t\t</li>\r\t\t\t<li>\r\t\t\t\t<img class=\"list-image\" src=\"../images/tablet.png\"/>\r\t\t\t\t<div class=\"list-header\">tablet</div>\r\t\t\t\t<div class=\"list-content\">one-piece mobile computer.</div>\r\t\t\t</li>\r\t\t</ul>\r\t</div>\r\t<style scoped>\r\t\t#list .list-image{\r\t\t\twidth: 32px;\r\t\t\theight: 32px;\r\t\t\tborder: 0;\r\t\t\tmargin-right: 5px;\r\t\t\tfloat: left;\r\t\t}\r\t\t#list .list-header{\r\t\t\tfont-size: 16px;\r\t\t\tfont-weight: bold;\r\t\t}\r\t\t#list .list-content{\r\t\t\ttext-overflow: ellipsis;\r\t\t\toverflow: hidden;\r\t\t}\r\t</style>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/simplelist/link.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Link List - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span class=\"m-title\">Link List</span>\r\t\t\t</div>\r\t\t</header>\r\t\t<ul class=\"m-list\">\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Large</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Spotted Adult Female</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Venomless</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Rattleless</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Green Adult</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Tailless</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">With tail</a></li>\r\t\t\t<li><a href=\"javascript:void(0)\" onclick=\"openit(this)\">Adult Female</a></li>\r\t\t</ul>\r\t</div>\r\t<div id=\"p2\" class=\"easyui-navpanel\">\r\t\t<header>\r\t\t\t<div class=\"m-toolbar\">\r\t\t\t\t<span id=\"p2-title\" class=\"m-title\">Detail</span>\r                <div class=\"m-left\">\r                    <a href=\"javascript:void(0)\" class=\"easyui-linkbutton m-back\" plain=\"true\" outline=\"true\" onclick=\"$.mobile.back()\">Back</a>\r                </div>\r\t\t\t</div>\r\t\t</header>\r        <div style=\"margin:50px 0 0;text-align:center\">\r            <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" style=\"width:100px;height:30px\" onclick=\"$.mobile.back()\">Go Back</a>\r        </div>\r\t</div>\r\t<script type=\"text/javascript\">\r\t\tfunction openit(target){\r\t\t\tvar text = $(target).text();\r\t\t\t$('#p2-title').html(text);\r\t\t\t$.mobile.go('#p2');\r\t\t}\r\t</script>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/tabs/basic.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Basic Tabs - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-tabs\" data-options=\"fit:true,border:false,tabWidth:80,tabHeight:35\">\r\t\t<div title=\"Java\" style=\"padding:10px\">\r\t\t\t<p>Java is a general-purpose, concurrent, class-based, object-oriented computer programming language that is specifically designed to have as few implementation dependencies as possible.</p>\r\t\t\t<p>Java applications are typically compiled to bytecode (class file) that can run on any Java virtual machine (JVM) regardless of computer architecture.</p>\r\t\t</div>\r\t\t<div title=\"Fortran\" style=\"padding:10px\">\r\t\t\t<p>Fortran (previously FORTRAN) is a general-purpose, imperative programming language that is especially suited to numeric computation and scientific computing. Originally developed by IBM at their campus in south San Jose, California[1] in the 1950s for scientific and engineering applications.</p>\r\t\t</div>\r\t\t<div title=\"Perl\" style=\"padding:10px\">\r\t\t\t<p>Perl is a family of high-level, general-purpose, interpreted, dynamic programming languages. The languages in this family include Perl 5 and Perl 6.</p>\r\t\t\t<p>Though Perl is not officially an acronym, there are various backronyms in use, such as: Practical Extraction and Reporting Language. Perl was originally developed by Larry Wall in 1987 as a general-purpose Unix scripting language to make report processing easier. Since then, it has undergone many changes and revisions.</p>\r\t\t</div>\r\t</div>\r\t<style scoped>\r\t\tp{\r\t\t\tline-height:150%;\r\t\t}\r\t</style>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/tabs/nav.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Navigation Tabs - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\r</head>\r<body>\r\t<div class=\"easyui-navpanel\">\r\t    <header>\r\t    \t<div class=\"m-toolbar\">\r\t    \t\t<div class=\"m-title\">Devices</div>\r\t    \t</div>\r\t    </header>\r\t\t<div class=\"easyui-tabs\" data-options=\"tabHeight:60,fit:true,tabPosition:'bottom',border:false,pill:true,narrow:true,justified:true\">\r\t\t\t<div style=\"padding:10px\">\r\t\t\t\t<div class=\"panel-header tt-inner\">\r\t\t\t\t\t<img src='../images/modem.png'/><br>Modem\r\t\t\t\t</div>\r\t\t\t\t<p>A modem (modulator-demodulator) is a device that modulates an analog carrier signal to encode digital information, and also demodulates such a carrier signal to decode the transmitted information.</p>\r\t\t\t</div>\r\t\t\t<div style=\"padding:10px\">\r\t\t\t\t<div class=\"panel-header tt-inner\">\r\t\t\t\t\t<img src='../images/scanner.png'/><br>Scanner\r\t\t\t\t</div>\r\t\t\t\t<p>In computing, an image scanner—often abbreviated to just scanner—is a device that optically scans images, printed text, handwriting, or an object, and converts it to a digital image.</p>\r\t\t\t</div>\r\t\t\t<div style=\"padding:10px\">\r\t\t\t\t<div class=\"panel-header tt-inner\">\r\t\t\t\t\t<img src='../images/pda.png'/><br>Pda\r\t\t\t\t</div>\r\t\t\t\t<p>A personal digital assistant (PDA), also known as a palmtop computer, or personal data assistant, is a mobile device that functions as a personal information manager. PDAs are largely considered obsolete with the widespread adoption of smartphones.</p>\r\t\t\t</div>\r\t\t\t<div style=\"padding:10px\">\r\t\t\t\t<div class=\"panel-header tt-inner\">\r\t\t\t\t\t<img src='../images/tablet.png'/><br>Pda\r\t\t\t\t</div>\r\t\t\t\t<p>A tablet computer, or simply tablet, is a one-piece mobile computer. Devices typically have a touchscreen, with finger or stylus gestures replacing the conventional computer mouse.</p>\r\t\t\t</div>\r\t\t</div>\r\t</div>\r\t<style scoped>\r       .tt-inner{\r            display:inline-block;\r            line-height:12px;\r            padding-top:5px;\r        }\r\t\tp{\r\t\t\tline-height:150%;\r\t\t}\r\t</style>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/tabs/pill.html",
    "content": "<!doctype html>\r<html>\r<head>\r    <meta charset=\"UTF-8\">  \r\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r    <title>Pill Tabs - jQuery EasyUI Mobile Demo</title>  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">  \r    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">  \r    <script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>  \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script> \r    <script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script> \r</head>\r<body>\r\t<div class=\"easyui-tabs\" data-options=\"fit:true,border:false,pill:true,justified:true,tabWidth:80,tabHeight:35\">\r\t\t<div title=\"Java\" style=\"padding:10px\">\r\t\t\t<p>Java is a general-purpose, concurrent, class-based, object-oriented computer programming language that is specifically designed to have as few implementation dependencies as possible.</p>\r\t\t\t<p>Java applications are typically compiled to bytecode (class file) that can run on any Java virtual machine (JVM) regardless of computer architecture.</p>\r\t\t</div>\r\t\t<div title=\"Fortran\" style=\"padding:10px\">\r\t\t\t<p>Fortran (previously FORTRAN) is a general-purpose, imperative programming language that is especially suited to numeric computation and scientific computing. Originally developed by IBM at their campus in south San Jose, California[1] in the 1950s for scientific and engineering applications.</p>\r\t\t</div>\r\t\t<div title=\"Perl\" style=\"padding:10px\">\r\t\t\t<p>Perl is a family of high-level, general-purpose, interpreted, dynamic programming languages. The languages in this family include Perl 5 and Perl 6.</p>\r\t\t\t<p>Though Perl is not officially an acronym, there are various backronyms in use, such as: Practical Extraction and Reporting Language. Perl was originally developed by Larry Wall in 1987 as a general-purpose Unix scripting language to make report processing easier. Since then, it has undergone many changes and revisions.</p>\r\t\t</div>\r\t</div>\r\t<style scoped>\r\t\tp{\r\t\t\tline-height:150%;\r\t\t}\r\t</style>\r</body>\t\r</html>\r"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/toolbar/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\t<title>Basic Toolbar - jQuery EasyUI Mobile Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\n</head>\n<body>\n\t<div class=\"easyui-navpanel\">\n        <header>\n            <div class=\"m-toolbar\">\n                <div class=\"m-title\">Basic Toolbar</div>\n                <div class=\"m-left\">\n                    <a href=\"javascript:void(0)\" class=\"easyui-linkbutton m-back\" plain=\"true\" outline=\"true\">Back</a>\n                </div>\n                <div class=\"m-right\">\n                    <a href=\"javascript:void(0)\" class=\"easyui-linkbutton m-next\" plain=\"true\" outline=\"true\">Next</a>\n                </div>\n            </div>\n        </header>\n        <ul class=\"easyui-datalist\" data-options=\"\n                fit: true,\n                lines: true,\n                border: false,\n                textFormatter: function(value){\n                    return '<a href\\'javascript:void(0)\\' class=\\'datalist-link\\'>' + value + '</a>';\n                },\n                onClickRow: function(index,row){\n                    $('#p2-title').html(row.text);\n                    $.mobile.go('#p2');\n                }\n                \">\n            <li>Large</li>\n            <li>Spotted Adult Female</li>\n            <li>Venomless</li>\n            <li>Rattleless</li>\n            <li>Green Adult</li>\n            <li>Tailless</li>\n            <li>With tail</li>\n            <li>Adult Female</li>\n        </ul>\n\t</div>\n    <div id=\"p2\" class=\"easyui-navpanel\">\n        <header>\n            <div class=\"m-toolbar\">\n                <span id=\"p2-title\" class=\"m-title\">Detail</span>\n                <div class=\"m-left\">\n                    <a href=\"javascript:void(0)\" class=\"easyui-linkbutton m-back\" plain=\"true\" outline=\"true\" onclick=\"$.mobile.back()\">Back</a>\n                </div>\n            </div>\n        </header>\n        <div style=\"margin:50px 0 0;text-align:center\">\n            <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" style=\"width:100px;height:30px\" onclick=\"$.mobile.back()\">Go Back</a>\n        </div>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/toolbar/button.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\t<title>Toolbar Button - jQuery EasyUI Mobile Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\n</head>\n<body>\n\t<div class=\"easyui-navpanel\">\n        <header>\n            <div class=\"m-toolbar\">\n                <div class=\"m-title\">Toolbar Button</div>\n            </div>\n        </header>\n        <footer>\n            <div class=\"m-buttongroup m-buttongroup-justified\" style=\"width:100%\">\n                <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-picture',size:'large',iconAlign:'top',plain:true\">Picture</a>\n                <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-clipart',size:'large',iconAlign:'top',plain:true\">Clip Art</a>\n                <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-shapes',size:'large',iconAlign:'top',plain:true\">Shapes</a>\n                <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-large-smartart',size:'large',iconAlign:'top',plain:true\">SmartArt</a>\n            </div>\n        </footer>\n        <ul class=\"easyui-datalist\" data-options=\"\n                fit: true,\n                lines: true,\n                border: false\n                \">\n            <li>Large</li>\n            <li>Spotted Adult Female</li>\n            <li>Venomless</li>\n            <li>Rattleless</li>\n            <li>Green Adult</li>\n            <li>Tailless</li>\n            <li>With tail</li>\n            <li>Adult Female</li>\n        </ul>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/toolbar/menu.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\t<title>Menu on Toolbar - jQuery EasyUI Mobile Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n    <script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\n</head>\n<body>\n\t<div class=\"easyui-navpanel\">\n        <header>\n            <div class=\"m-toolbar\">\n                <div class=\"m-title\">Menu on Toolbar</div>\n                <div class=\"m-left\">\n                    <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-man',plain:true\"></a>\n                </div>\n                <div class=\"m-right\">\n                    <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-search',plain:true\"></a>\n                    <a href=\"javascript:void(0)\" class=\"easyui-menubutton\" data-options=\"iconCls:'icon-more',plain:true,hasDownArrow:false,menu:'#mm',menuAlign:'right'\"></a>\n                </div>\n            </div>\n        </header>\n        <div id=\"mm\" class=\"easyui-menu\" style=\"width:150px;\" data-options=\"itemHeight:30,noline:true\">\n            <div data-options=\"iconCls:'icon-undo'\">Undo</div>\n            <div data-options=\"iconCls:'icon-redo'\">Redo</div>\n            <div class=\"menu-sep\"></div>\n            <div>Cut</div>\n            <div>Copy</div>\n            <div>Paste</div>\n            <div class=\"menu-sep\"></div>\n            <div>Toolbar</div>\n            <div data-options=\"iconCls:'icon-remove'\">Delete</div>\n            <div>Select All</div>\n        </div>\n        <ul class=\"easyui-datalist\" data-options=\"\n                fit: true,\n                lines: true,\n                border: false,\n                textFormatter: function(value){\n                    return '<a href\\'javascript:void(0)\\' class=\\'datalist-link\\'>' + value + '</a>';\n                },\n                onClickRow: function(index,row){\n                    $('#p2-title').html(row.text);\n                    $.mobile.go('#p2');\n                }\n                \">\n            <li>Large</li>\n            <li>Spotted Adult Female</li>\n            <li>Venomless</li>\n            <li>Rattleless</li>\n            <li>Green Adult</li>\n            <li>Tailless</li>\n            <li>With tail</li>\n            <li>Adult Female</li>\n        </ul>\n\t</div>\n    <div id=\"p2\" class=\"easyui-navpanel\">\n        <header>\n            <div class=\"m-toolbar\">\n                <span id=\"p2-title\" class=\"m-title\">Detail</span>\n                <div class=\"m-left\">\n                    <a href=\"javascript:void(0)\" class=\"easyui-linkbutton m-back\" plain=\"true\" outline=\"true\" onclick=\"$.mobile.back()\">Back</a>\n                </div>\n            </div>\n        </header>\n        <div style=\"margin:50px 0 0;text-align:center\">\n            <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" style=\"width:100px;height:30px\" onclick=\"$.mobile.back()\">Go Back</a>\n        </div>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/tree/basic.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\t<title>Basic Tree - jQuery EasyUI Mobile Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\n</head>\n<body>\n\t<div class=\"easyui-navpanel\" style=\"padding:10px\">\n\t\t<header>\n\t\t\t<div class=\"m-toolbar\">\n\t\t\t\t<div class=\"m-title\">Basic Tree</div>\n\t\t\t</div>\n\t\t</header>\n\t\t<ul class=\"easyui-tree\" data-options=\"animate:true\">\n\t\t\t<li>\n\t\t\t\t<span>My Documents</span>\n\t\t\t\t<ul>\n\t\t\t\t\t<li data-options=\"state:'closed'\">\n\t\t\t\t\t\t<span>Photos</span>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span>Friend</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span>Wife</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span>Company</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<span>Program Files</span>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>Intel</li>\n\t\t\t\t\t\t\t<li>Java</li>\n\t\t\t\t\t\t\t<li>Microsoft Office</li>\n\t\t\t\t\t\t\t<li>Games</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>index.html</li>\n\t\t\t\t\t<li>about.html</li>\n\t\t\t\t\t<li>welcome.html</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/tree/dnd.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\t<title>Drag Drop Tree Nodes - jQuery EasyUI Mobile Demo</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/metro/easyui.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/mobile.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../../themes/icon.css\">\n\t<script type=\"text/javascript\" src=\"../../jquery.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../jquery.easyui.mobile.js\"></script>\n</head>\n<body>\n\t<div class=\"easyui-navpanel\" style=\"padding:10px\">\n\t\t<header>\n\t\t\t<div class=\"m-toolbar\">\n\t\t\t\t<div class=\"m-title\">Drag Drop Tree Nodes</div>\n\t\t\t</div>\n\t\t</header>\n\t\t<ul class=\"easyui-tree\" data-options=\"animate:true,dnd:true\">\n\t\t\t<li>\n\t\t\t\t<span>My Documents</span>\n\t\t\t\t<ul>\n\t\t\t\t\t<li data-options=\"state:'closed'\">\n\t\t\t\t\t\t<span>Photos</span>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span>Friend</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span>Wife</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span>Company</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<span>Program Files</span>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>Intel</li>\n\t\t\t\t\t\t\t<li>Java</li>\n\t\t\t\t\t\t\t<li>Microsoft Office</li>\n\t\t\t\t\t\t\t<li>Games</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>index.html</li>\n\t\t\t\t\t<li>about.html</li>\n\t\t\t\t\t<li>welcome.html</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/easyloader.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function(){\nvar _1={draggable:{js:\"jquery.draggable.js\"},droppable:{js:\"jquery.droppable.js\"},resizable:{js:\"jquery.resizable.js\"},linkbutton:{js:\"jquery.linkbutton.js\",css:\"linkbutton.css\"},progressbar:{js:\"jquery.progressbar.js\",css:\"progressbar.css\"},tooltip:{js:\"jquery.tooltip.js\",css:\"tooltip.css\"},pagination:{js:\"jquery.pagination.js\",css:\"pagination.css\",dependencies:[\"linkbutton\"]},datagrid:{js:\"jquery.datagrid.js\",css:\"datagrid.css\",dependencies:[\"panel\",\"resizable\",\"linkbutton\",\"pagination\"]},treegrid:{js:\"jquery.treegrid.js\",css:\"tree.css\",dependencies:[\"datagrid\"]},propertygrid:{js:\"jquery.propertygrid.js\",css:\"propertygrid.css\",dependencies:[\"datagrid\"]},datalist:{js:\"jquery.datalist.js\",css:\"datalist.css\",dependencies:[\"datagrid\"]},panel:{js:\"jquery.panel.js\",css:\"panel.css\"},window:{js:\"jquery.window.js\",css:\"window.css\",dependencies:[\"resizable\",\"draggable\",\"panel\"]},dialog:{js:\"jquery.dialog.js\",css:\"dialog.css\",dependencies:[\"linkbutton\",\"window\"]},messager:{js:\"jquery.messager.js\",css:\"messager.css\",dependencies:[\"linkbutton\",\"dialog\",\"progressbar\"]},layout:{js:\"jquery.layout.js\",css:\"layout.css\",dependencies:[\"resizable\",\"panel\"]},form:{js:\"jquery.form.js\"},menu:{js:\"jquery.menu.js\",css:\"menu.css\"},tabs:{js:\"jquery.tabs.js\",css:\"tabs.css\",dependencies:[\"panel\",\"linkbutton\"]},menubutton:{js:\"jquery.menubutton.js\",css:\"menubutton.css\",dependencies:[\"linkbutton\",\"menu\"]},splitbutton:{js:\"jquery.splitbutton.js\",css:\"splitbutton.css\",dependencies:[\"menubutton\"]},switchbutton:{js:\"jquery.switchbutton.js\",css:\"switchbutton.css\"},accordion:{js:\"jquery.accordion.js\",css:\"accordion.css\",dependencies:[\"panel\"]},calendar:{js:\"jquery.calendar.js\",css:\"calendar.css\"},textbox:{js:\"jquery.textbox.js\",css:\"textbox.css\",dependencies:[\"validatebox\",\"linkbutton\"]},passwordbox:{js:\"jquery.passwordbox.js\",css:\"passwordbox.css\",dependencies:[\"textbox\"]},filebox:{js:\"jquery.filebox.js\",css:\"filebox.css\",dependencies:[\"textbox\"]},radiobutton:{js:\"jquery.radiobutton.js\",css:\"radiobutton.css\"},checkbox:{js:\"jquery.checkbox.js\",css:\"checkbox.css\"},sidemenu:{js:\"jquery.sidemenu.js\",css:\"sidemenu.css\",dependencies:[\"accordion\",\"tree\",\"tooltip\"]},combo:{js:\"jquery.combo.js\",css:\"combo.css\",dependencies:[\"panel\",\"textbox\"]},combobox:{js:\"jquery.combobox.js\",css:\"combobox.css\",dependencies:[\"combo\"]},combotree:{js:\"jquery.combotree.js\",dependencies:[\"combo\",\"tree\"]},combogrid:{js:\"jquery.combogrid.js\",dependencies:[\"combo\",\"datagrid\"]},combotreegrid:{js:\"jquery.combotreegrid.js\",dependencies:[\"combo\",\"treegrid\"]},tagbox:{js:\"jquery.tagbox.js\",dependencies:[\"combobox\"]},validatebox:{js:\"jquery.validatebox.js\",css:\"validatebox.css\",dependencies:[\"tooltip\"]},numberbox:{js:\"jquery.numberbox.js\",dependencies:[\"textbox\"]},searchbox:{js:\"jquery.searchbox.js\",css:\"searchbox.css\",dependencies:[\"menubutton\",\"textbox\"]},spinner:{js:\"jquery.spinner.js\",css:\"spinner.css\",dependencies:[\"textbox\"]},numberspinner:{js:\"jquery.numberspinner.js\",dependencies:[\"spinner\",\"numberbox\"]},timespinner:{js:\"jquery.timespinner.js\",dependencies:[\"spinner\"]},timepicker:{js:\"jquery.timepicker.js\",css:\"timepicker.css\",dependencies:[\"combo\"]},tree:{js:\"jquery.tree.js\",css:\"tree.css\",dependencies:[\"draggable\",\"droppable\"]},datebox:{js:\"jquery.datebox.js\",css:\"datebox.css\",dependencies:[\"calendar\",\"combo\"]},datetimebox:{js:\"jquery.datetimebox.js\",dependencies:[\"datebox\",\"timespinner\"]},slider:{js:\"jquery.slider.js\",dependencies:[\"draggable\"]},parser:{js:\"jquery.parser.js\",css:\"flex.css\"},mobile:{js:\"jquery.mobile.js\"}};\nvar _2={\"af\":\"easyui-lang-af.js\",\"ar\":\"easyui-lang-ar.js\",\"bg\":\"easyui-lang-bg.js\",\"ca\":\"easyui-lang-ca.js\",\"cs\":\"easyui-lang-cs.js\",\"cz\":\"easyui-lang-cz.js\",\"da\":\"easyui-lang-da.js\",\"de\":\"easyui-lang-de.js\",\"el\":\"easyui-lang-el.js\",\"en\":\"easyui-lang-en.js\",\"es\":\"easyui-lang-es.js\",\"fr\":\"easyui-lang-fr.js\",\"it\":\"easyui-lang-it.js\",\"jp\":\"easyui-lang-jp.js\",\"nl\":\"easyui-lang-nl.js\",\"pl\":\"easyui-lang-pl.js\",\"pt_BR\":\"easyui-lang-pt_BR.js\",\"ru\":\"easyui-lang-ru.js\",\"sv_SE\":\"easyui-lang-sv_SE.js\",\"tr\":\"easyui-lang-tr.js\",\"zh_CN\":\"easyui-lang-zh_CN.js\",\"zh_TW\":\"easyui-lang-zh_TW.js\"};\nvar _3={};\nfunction _4(_5,_6){\nvar _7=false;\nvar _8=document.createElement(\"script\");\n_8.type=\"text/javascript\";\n_8.language=\"javascript\";\n_8.src=_5;\n_8.onload=_8.onreadystatechange=function(){\nif(!_7&&(!_8.readyState||_8.readyState==\"loaded\"||_8.readyState==\"complete\")){\n_7=true;\n_8.onload=_8.onreadystatechange=null;\nif(_6){\n_6.call(_8);\n}\n}\n};\ndocument.getElementsByTagName(\"head\")[0].appendChild(_8);\n};\nfunction _9(_a,_b){\n_4(_a,function(){\ndocument.getElementsByTagName(\"head\")[0].removeChild(this);\nif(_b){\n_b();\n}\n});\n};\nfunction _c(_d,_e){\nvar _f=document.createElement(\"link\");\n_f.rel=\"stylesheet\";\n_f.type=\"text/css\";\n_f.media=\"screen\";\n_f.href=_d;\ndocument.getElementsByTagName(\"head\")[0].appendChild(_f);\nif(_e){\n_e.call(_f);\n}\n};\nfunction _10(_11,_12){\n_3[_11]=\"loading\";\nvar _13=_1[_11];\nvar _14=\"loading\";\nvar _15=(easyloader.css&&_13[\"css\"])?\"loading\":\"loaded\";\nif(easyloader.css&&_13[\"css\"]){\nif(/^http/i.test(_13[\"css\"])){\nvar url=_13[\"css\"];\n}else{\nvar url=easyloader.base+\"themes/\"+easyloader.theme+\"/\"+_13[\"css\"];\n}\n_c(url,function(){\n_15=\"loaded\";\nif(_14==\"loaded\"&&_15==\"loaded\"){\n_16();\n}\n});\n}\nif(/^http/i.test(_13[\"js\"])){\nvar url=_13[\"js\"];\n}else{\nvar url=easyloader.base+\"plugins/\"+_13[\"js\"];\n}\n_4(url,function(){\n_14=\"loaded\";\nif(_14==\"loaded\"&&_15==\"loaded\"){\n_16();\n}\n});\nfunction _16(){\n_3[_11]=\"loaded\";\neasyloader.onProgress(_11);\nif(_12){\n_12();\n}\n};\n};\nfunction _17(_18,_19){\nvar mm=[];\nvar _1a=false;\nif(typeof _18==\"string\"){\nadd(_18);\n}else{\nfor(var i=0;i<_18.length;i++){\nadd(_18[i]);\n}\n}\nmm.unshift(\"parser\");\nfunction add(_1b){\nif(!_1[_1b]){\nreturn;\n}\nvar d=_1[_1b][\"dependencies\"];\nif(d){\nfor(var i=0;i<d.length;i++){\nadd(d[i]);\n}\n}\nmm.push(_1b);\n};\nfunction _1c(){\nif(_19){\nif(window.jQuery){\nwindow.jQuery.parser.parseVars();\n}\n_19();\n}\neasyloader.onLoad(_18);\n};\nvar _1d=0;\nfunction _1e(){\nif(mm.length){\nvar m=mm[0];\nif(!_3[m]){\n_1a=true;\n_10(m,function(){\nmm.shift();\n_1e();\n});\n}else{\nif(_3[m]==\"loaded\"){\nmm.shift();\n_1e();\n}else{\nif(_1d<easyloader.timeout){\n_1d+=10;\nsetTimeout(arguments.callee,10);\n}\n}\n}\n}else{\nif(easyloader.locale&&_1a==true&&_2[easyloader.locale]){\nvar url=easyloader.base+\"locale/\"+_2[easyloader.locale];\n_9(url,function(){\n_1c();\n});\n}else{\n_1c();\n}\n}\n};\n_1e();\n};\neasyloader={modules:_1,locales:_2,base:\".\",theme:\"default\",css:true,locale:null,timeout:2000,load:function(_1f,_20){\nif(/\\.css$/i.test(_1f)){\nif(/^http/i.test(_1f)){\n_c(_1f,_20);\n}else{\n_c(easyloader.base+_1f,_20);\n}\n}else{\nif(/\\.js$/i.test(_1f)){\nif(/^http/i.test(_1f)){\n_4(_1f,_20);\n}else{\n_4(easyloader.base+_1f,_20);\n}\n}else{\n_17(_1f,_20);\n}\n}\n},onProgress:function(_21){\n},onLoad:function(_22){\n}};\nvar _23=document.getElementsByTagName(\"script\");\nfor(var i=0;i<_23.length;i++){\nvar src=_23[i].src;\nif(!src){\ncontinue;\n}\nvar m=src.match(/easyloader\\.js(\\W|$)/i);\nif(m){\neasyloader.base=src.substring(0,m.index);\n}\n}\nwindow.using=easyloader.load;\nif(window.jQuery){\njQuery(function(){\neasyloader.load(\"parser\",function(){\njQuery.parser.parse();\n});\n});\n}\n})();\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/jquery.easyui.min.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\n$.easyui={indexOfArray:function(a,o,id){\nfor(var i=0,_1=a.length;i<_1;i++){\nif(id==undefined){\nif(a[i]==o){\nreturn i;\n}\n}else{\nif(a[i][o]==id){\nreturn i;\n}\n}\n}\nreturn -1;\n},removeArrayItem:function(a,o,id){\nif(typeof o==\"string\"){\nfor(var i=0,_2=a.length;i<_2;i++){\nif(a[i][o]==id){\na.splice(i,1);\nreturn;\n}\n}\n}else{\nvar _3=this.indexOfArray(a,o);\nif(_3!=-1){\na.splice(_3,1);\n}\n}\n},addArrayItem:function(a,o,r){\nvar _4=this.indexOfArray(a,o,r?r[o]:undefined);\nif(_4==-1){\na.push(r?r:o);\n}else{\na[_4]=r?r:o;\n}\n},getArrayItem:function(a,o,id){\nvar _5=this.indexOfArray(a,o,id);\nreturn _5==-1?null:a[_5];\n},forEach:function(_6,_7,_8){\nvar _9=[];\nfor(var i=0;i<_6.length;i++){\n_9.push(_6[i]);\n}\nwhile(_9.length){\nvar _a=_9.shift();\nif(_8(_a)==false){\nreturn;\n}\nif(_7&&_a.children){\nfor(var i=_a.children.length-1;i>=0;i--){\n_9.unshift(_a.children[i]);\n}\n}\n}\n}};\n$.parser={auto:true,emptyFn:function(){\n},onComplete:function(_b){\n},plugins:[\"draggable\",\"droppable\",\"resizable\",\"pagination\",\"tooltip\",\"linkbutton\",\"menu\",\"sidemenu\",\"menubutton\",\"splitbutton\",\"switchbutton\",\"progressbar\",\"radiobutton\",\"checkbox\",\"tree\",\"textbox\",\"passwordbox\",\"maskedbox\",\"filebox\",\"combo\",\"combobox\",\"combotree\",\"combogrid\",\"combotreegrid\",\"tagbox\",\"numberbox\",\"validatebox\",\"searchbox\",\"spinner\",\"numberspinner\",\"timespinner\",\"datetimespinner\",\"calendar\",\"datebox\",\"datetimebox\",\"timepicker\",\"slider\",\"layout\",\"panel\",\"datagrid\",\"propertygrid\",\"treegrid\",\"datalist\",\"tabs\",\"accordion\",\"window\",\"dialog\",\"form\"],parse:function(_c){\nvar aa=[];\nfor(var i=0;i<$.parser.plugins.length;i++){\nvar _d=$.parser.plugins[i];\nvar r=$(\".easyui-\"+_d,_c);\nif(r.length){\nif(r[_d]){\nr.each(function(){\n$(this)[_d]($.data(this,\"options\")||{});\n});\n}else{\naa.push({name:_d,jq:r});\n}\n}\n}\nif(aa.length&&window.easyloader){\nvar _e=[];\nfor(var i=0;i<aa.length;i++){\n_e.push(aa[i].name);\n}\neasyloader.load(_e,function(){\nfor(var i=0;i<aa.length;i++){\nvar _f=aa[i].name;\nvar jq=aa[i].jq;\njq.each(function(){\n$(this)[_f]($.data(this,\"options\")||{});\n});\n}\n$.parser.onComplete.call($.parser,_c);\n});\n}else{\n$.parser.onComplete.call($.parser,_c);\n}\n},parseValue:function(_10,_11,_12,_13){\n_13=_13||0;\nvar v=$.trim(String(_11||\"\"));\nvar _14=v.substr(v.length-1,1);\nif(_14==\"%\"){\nv=parseFloat(v.substr(0,v.length-1));\nif(_10.toLowerCase().indexOf(\"width\")>=0){\n_13+=_12[0].offsetWidth-_12[0].clientWidth;\nv=Math.floor((_12.width()-_13)*v/100);\n}else{\n_13+=_12[0].offsetHeight-_12[0].clientHeight;\nv=Math.floor((_12.height()-_13)*v/100);\n}\n}else{\nv=parseInt(v)||undefined;\n}\nreturn v;\n},parseOptions:function(_15,_16){\nvar t=$(_15);\nvar _17={};\nvar s=$.trim(t.attr(\"data-options\"));\nif(s){\nif(s.substring(0,1)!=\"{\"){\ns=\"{\"+s+\"}\";\n}\n_17=(new Function(\"return \"+s))();\n}\n$.map([\"width\",\"height\",\"left\",\"top\",\"minWidth\",\"maxWidth\",\"minHeight\",\"maxHeight\"],function(p){\nvar pv=$.trim(_15.style[p]||\"\");\nif(pv){\nif(pv.indexOf(\"%\")==-1){\npv=parseInt(pv);\nif(isNaN(pv)){\npv=undefined;\n}\n}\n_17[p]=pv;\n}\n});\nif(_16){\nvar _18={};\nfor(var i=0;i<_16.length;i++){\nvar pp=_16[i];\nif(typeof pp==\"string\"){\n_18[pp]=t.attr(pp);\n}else{\nfor(var _19 in pp){\nvar _1a=pp[_19];\nif(_1a==\"boolean\"){\n_18[_19]=t.attr(_19)?(t.attr(_19)==\"true\"):undefined;\n}else{\nif(_1a==\"number\"){\n_18[_19]=t.attr(_19)==\"0\"?0:parseFloat(t.attr(_19))||undefined;\n}\n}\n}\n}\n}\n$.extend(_17,_18);\n}\nreturn _17;\n},parseVars:function(){\nvar d=$(\"<div style=\\\"position:absolute;top:-1000px;width:100px;height:100px;padding:5px\\\"></div>\").appendTo(\"body\");\n$._boxModel=d.outerWidth()!=100;\nd.remove();\nd=$(\"<div style=\\\"position:fixed\\\"></div>\").appendTo(\"body\");\n$._positionFixed=(d.css(\"position\")==\"fixed\");\nd.remove();\n}};\n$(function(){\n$.parser.parseVars();\nif(!window.easyloader&&$.parser.auto){\n$.parser.parse();\n}\n});\n$.fn._outerWidth=function(_1b){\nif(_1b==undefined){\nif(this[0]==window){\nreturn this.width()||document.body.clientWidth;\n}\nreturn this.outerWidth()||0;\n}\nreturn this._size(\"width\",_1b);\n};\n$.fn._outerHeight=function(_1c){\nif(_1c==undefined){\nif(this[0]==window){\nreturn this.height()||document.body.clientHeight;\n}\nreturn this.outerHeight()||0;\n}\nreturn this._size(\"height\",_1c);\n};\n$.fn._scrollLeft=function(_1d){\nif(_1d==undefined){\nreturn this.scrollLeft();\n}else{\nreturn this.each(function(){\n$(this).scrollLeft(_1d);\n});\n}\n};\n$.fn._propAttr=$.fn.prop||$.fn.attr;\n$.fn._bind=$.fn.on;\n$.fn._unbind=$.fn.off;\n$.fn._size=function(_1e,_1f){\nif(typeof _1e==\"string\"){\nif(_1e==\"clear\"){\nreturn this.each(function(){\n$(this).css({width:\"\",minWidth:\"\",maxWidth:\"\",height:\"\",minHeight:\"\",maxHeight:\"\"});\n});\n}else{\nif(_1e==\"fit\"){\nreturn this.each(function(){\n_20(this,this.tagName==\"BODY\"?$(\"body\"):$(this).parent(),true);\n});\n}else{\nif(_1e==\"unfit\"){\nreturn this.each(function(){\n_20(this,$(this).parent(),false);\n});\n}else{\nif(_1f==undefined){\nreturn _21(this[0],_1e);\n}else{\nreturn this.each(function(){\n_21(this,_1e,_1f);\n});\n}\n}\n}\n}\n}else{\nreturn this.each(function(){\n_1f=_1f||$(this).parent();\n$.extend(_1e,_20(this,_1f,_1e.fit)||{});\nvar r1=_22(this,\"width\",_1f,_1e);\nvar r2=_22(this,\"height\",_1f,_1e);\nif(r1||r2){\n$(this).addClass(\"easyui-fluid\");\n}else{\n$(this).removeClass(\"easyui-fluid\");\n}\n});\n}\nfunction _20(_23,_24,fit){\nif(!_24.length){\nreturn false;\n}\nvar t=$(_23)[0];\nvar p=_24[0];\nvar _25=p.fcount||0;\nif(fit){\nif(!t.fitted){\nt.fitted=true;\np.fcount=_25+1;\n$(p).addClass(\"panel-noscroll\");\nif(p.tagName==\"BODY\"){\n$(\"html\").addClass(\"panel-fit\");\n}\n}\nreturn {width:($(p).width()||1),height:($(p).height()||1)};\n}else{\nif(t.fitted){\nt.fitted=false;\np.fcount=_25-1;\nif(p.fcount==0){\n$(p).removeClass(\"panel-noscroll\");\nif(p.tagName==\"BODY\"){\n$(\"html\").removeClass(\"panel-fit\");\n}\n}\n}\nreturn false;\n}\n};\nfunction _22(_26,_27,_28,_29){\nvar t=$(_26);\nvar p=_27;\nvar p1=p.substr(0,1).toUpperCase()+p.substr(1);\nvar min=$.parser.parseValue(\"min\"+p1,_29[\"min\"+p1],_28);\nvar max=$.parser.parseValue(\"max\"+p1,_29[\"max\"+p1],_28);\nvar val=$.parser.parseValue(p,_29[p],_28);\nvar _2a=(String(_29[p]||\"\").indexOf(\"%\")>=0?true:false);\nif(!isNaN(val)){\nvar v=Math.min(Math.max(val,min||0),max||99999);\nif(!_2a){\n_29[p]=v;\n}\nt._size(\"min\"+p1,\"\");\nt._size(\"max\"+p1,\"\");\nt._size(p,v);\n}else{\nt._size(p,\"\");\nt._size(\"min\"+p1,min);\nt._size(\"max\"+p1,max);\n}\nreturn _2a||_29.fit;\n};\nfunction _21(_2b,_2c,_2d){\nvar t=$(_2b);\nif(_2d==undefined){\n_2d=parseInt(_2b.style[_2c]);\nif(isNaN(_2d)){\nreturn undefined;\n}\nif($._boxModel){\n_2d+=_2e();\n}\nreturn _2d;\n}else{\nif(_2d===\"\"){\nt.css(_2c,\"\");\n}else{\nif($._boxModel){\n_2d-=_2e();\nif(_2d<0){\n_2d=0;\n}\n}\nt.css(_2c,_2d+\"px\");\n}\n}\nfunction _2e(){\nif(_2c.toLowerCase().indexOf(\"width\")>=0){\nreturn t.outerWidth()-t.width();\n}else{\nreturn t.outerHeight()-t.height();\n}\n};\n};\n};\n})(jQuery);\n(function($){\nvar _2f=null;\nvar _30=null;\nvar _31=false;\nfunction _32(e){\nif(e.touches.length!=1){\nreturn;\n}\nif(!_31){\n_31=true;\ndblClickTimer=setTimeout(function(){\n_31=false;\n},500);\n}else{\nclearTimeout(dblClickTimer);\n_31=false;\n_33(e,\"dblclick\");\n}\n_2f=setTimeout(function(){\n_33(e,\"contextmenu\",3);\n},1000);\n_33(e,\"mousedown\");\nif($.fn.draggable.isDragging||$.fn.resizable.isResizing){\ne.preventDefault();\n}\n};\nfunction _34(e){\nif(e.touches.length!=1){\nreturn;\n}\nif(_2f){\nclearTimeout(_2f);\n}\n_33(e,\"mousemove\");\nif($.fn.draggable.isDragging||$.fn.resizable.isResizing){\ne.preventDefault();\n}\n};\nfunction _35(e){\nif(_2f){\nclearTimeout(_2f);\n}\n_33(e,\"mouseup\");\nif($.fn.draggable.isDragging||$.fn.resizable.isResizing){\ne.preventDefault();\n}\n};\nfunction _33(e,_36,_37){\nvar _38=new $.Event(_36);\n_38.pageX=e.changedTouches[0].pageX;\n_38.pageY=e.changedTouches[0].pageY;\n_38.which=_37||1;\n$(e.target).trigger(_38);\n};\nif(document.addEventListener){\ndocument.addEventListener(\"touchstart\",_32,true);\ndocument.addEventListener(\"touchmove\",_34,true);\ndocument.addEventListener(\"touchend\",_35,true);\n}\n})(jQuery);\n(function($){\nfunction _39(e){\nvar _3a=$.data(e.data.target,\"draggable\");\nvar _3b=_3a.options;\nvar _3c=_3a.proxy;\nvar _3d=e.data;\nvar _3e=_3d.startLeft+e.pageX-_3d.startX;\nvar top=_3d.startTop+e.pageY-_3d.startY;\nif(_3c){\nif(_3c.parent()[0]==document.body){\nif(_3b.deltaX!=null&&_3b.deltaX!=undefined){\n_3e=e.pageX+_3b.deltaX;\n}else{\n_3e=e.pageX-e.data.offsetWidth;\n}\nif(_3b.deltaY!=null&&_3b.deltaY!=undefined){\ntop=e.pageY+_3b.deltaY;\n}else{\ntop=e.pageY-e.data.offsetHeight;\n}\n}else{\nif(_3b.deltaX!=null&&_3b.deltaX!=undefined){\n_3e+=e.data.offsetWidth+_3b.deltaX;\n}\nif(_3b.deltaY!=null&&_3b.deltaY!=undefined){\ntop+=e.data.offsetHeight+_3b.deltaY;\n}\n}\n}\nif(e.data.parent!=document.body){\n_3e+=$(e.data.parent).scrollLeft();\ntop+=$(e.data.parent).scrollTop();\n}\nif(_3b.axis==\"h\"){\n_3d.left=_3e;\n}else{\nif(_3b.axis==\"v\"){\n_3d.top=top;\n}else{\n_3d.left=_3e;\n_3d.top=top;\n}\n}\n};\nfunction _3f(e){\nvar _40=$.data(e.data.target,\"draggable\");\nvar _41=_40.options;\nvar _42=_40.proxy;\nif(!_42){\n_42=$(e.data.target);\n}\n_42.css({left:e.data.left,top:e.data.top});\n$(\"body\").css(\"cursor\",_41.cursor);\n};\nfunction _43(e){\nif(!$.fn.draggable.isDragging){\nreturn false;\n}\nvar _44=$.data(e.data.target,\"draggable\");\nvar _45=_44.options;\nvar _46=$(\".droppable:visible\").filter(function(){\nreturn e.data.target!=this;\n}).filter(function(){\nvar _47=$.data(this,\"droppable\").options.accept;\nif(_47){\nreturn $(_47).filter(function(){\nreturn this==e.data.target;\n}).length>0;\n}else{\nreturn true;\n}\n});\n_44.droppables=_46;\nvar _48=_44.proxy;\nif(!_48){\nif(_45.proxy){\nif(_45.proxy==\"clone\"){\n_48=$(e.data.target).clone().insertAfter(e.data.target);\n}else{\n_48=_45.proxy.call(e.data.target,e.data.target);\n}\n_44.proxy=_48;\n}else{\n_48=$(e.data.target);\n}\n}\n_48.css(\"position\",\"absolute\");\n_39(e);\n_3f(e);\n_45.onStartDrag.call(e.data.target,e);\nreturn false;\n};\nfunction _49(e){\nif(!$.fn.draggable.isDragging){\nreturn false;\n}\nvar _4a=$.data(e.data.target,\"draggable\");\n_39(e);\nif(_4a.options.onDrag.call(e.data.target,e)!=false){\n_3f(e);\n}\nvar _4b=e.data.target;\n_4a.droppables.each(function(){\nvar _4c=$(this);\nif(_4c.droppable(\"options\").disabled){\nreturn;\n}\nvar p2=_4c.offset();\nif(e.pageX>p2.left&&e.pageX<p2.left+_4c.outerWidth()&&e.pageY>p2.top&&e.pageY<p2.top+_4c.outerHeight()){\nif(!this.entered){\n$(this).trigger(\"_dragenter\",[_4b]);\nthis.entered=true;\n}\n$(this).trigger(\"_dragover\",[_4b]);\n}else{\nif(this.entered){\n$(this).trigger(\"_dragleave\",[_4b]);\nthis.entered=false;\n}\n}\n});\nreturn false;\n};\nfunction _4d(e){\nif(!$.fn.draggable.isDragging){\n_4e();\nreturn false;\n}\n_49(e);\nvar _4f=$.data(e.data.target,\"draggable\");\nvar _50=_4f.proxy;\nvar _51=_4f.options;\n_51.onEndDrag.call(e.data.target,e);\nif(_51.revert){\nif(_52()==true){\n$(e.data.target).css({position:e.data.startPosition,left:e.data.startLeft,top:e.data.startTop});\n}else{\nif(_50){\nvar _53,top;\nif(_50.parent()[0]==document.body){\n_53=e.data.startX-e.data.offsetWidth;\ntop=e.data.startY-e.data.offsetHeight;\n}else{\n_53=e.data.startLeft;\ntop=e.data.startTop;\n}\n_50.animate({left:_53,top:top},function(){\n_54();\n});\n}else{\n$(e.data.target).animate({left:e.data.startLeft,top:e.data.startTop},function(){\n$(e.data.target).css(\"position\",e.data.startPosition);\n});\n}\n}\n}else{\n$(e.data.target).css({position:\"absolute\",left:e.data.left,top:e.data.top});\n_52();\n}\n_51.onStopDrag.call(e.data.target,e);\n_4e();\nfunction _54(){\nif(_50){\n_50.remove();\n}\n_4f.proxy=null;\n};\nfunction _52(){\nvar _55=false;\n_4f.droppables.each(function(){\nvar _56=$(this);\nif(_56.droppable(\"options\").disabled){\nreturn;\n}\nvar p2=_56.offset();\nif(e.pageX>p2.left&&e.pageX<p2.left+_56.outerWidth()&&e.pageY>p2.top&&e.pageY<p2.top+_56.outerHeight()){\nif(_51.revert){\n$(e.data.target).css({position:e.data.startPosition,left:e.data.startLeft,top:e.data.startTop});\n}\n$(this).triggerHandler(\"_drop\",[e.data.target]);\n_54();\n_55=true;\nthis.entered=false;\nreturn false;\n}\n});\nif(!_55&&!_51.revert){\n_54();\n}\nreturn _55;\n};\nreturn false;\n};\nfunction _4e(){\nif($.fn.draggable.timer){\nclearTimeout($.fn.draggable.timer);\n$.fn.draggable.timer=undefined;\n}\n$(document)._unbind(\".draggable\");\n$.fn.draggable.isDragging=false;\nsetTimeout(function(){\n$(\"body\").css(\"cursor\",\"\");\n},100);\n};\n$.fn.draggable=function(_57,_58){\nif(typeof _57==\"string\"){\nreturn $.fn.draggable.methods[_57](this,_58);\n}\nreturn this.each(function(){\nvar _59;\nvar _5a=$.data(this,\"draggable\");\nif(_5a){\n_5a.handle._unbind(\".draggable\");\n_59=$.extend(_5a.options,_57);\n}else{\n_59=$.extend({},$.fn.draggable.defaults,$.fn.draggable.parseOptions(this),_57||{});\n}\nvar _5b=_59.handle?(typeof _59.handle==\"string\"?$(_59.handle,this):_59.handle):$(this);\n$.data(this,\"draggable\",{options:_59,handle:_5b});\nif(_59.disabled){\n$(this).css(\"cursor\",\"\");\nreturn;\n}\n_5b._unbind(\".draggable\")._bind(\"mousemove.draggable\",{target:this},function(e){\nif($.fn.draggable.isDragging){\nreturn;\n}\nvar _5c=$.data(e.data.target,\"draggable\").options;\nif(_5d(e)){\n$(this).css(\"cursor\",_5c.cursor);\n}else{\n$(this).css(\"cursor\",\"\");\n}\n})._bind(\"mouseleave.draggable\",{target:this},function(e){\n$(this).css(\"cursor\",\"\");\n})._bind(\"mousedown.draggable\",{target:this},function(e){\nif(_5d(e)==false){\nreturn;\n}\n$(this).css(\"cursor\",\"\");\nvar _5e=$(e.data.target).position();\nvar _5f=$(e.data.target).offset();\nvar _60={startPosition:$(e.data.target).css(\"position\"),startLeft:_5e.left,startTop:_5e.top,left:_5e.left,top:_5e.top,startX:e.pageX,startY:e.pageY,width:$(e.data.target).outerWidth(),height:$(e.data.target).outerHeight(),offsetWidth:(e.pageX-_5f.left),offsetHeight:(e.pageY-_5f.top),target:e.data.target,parent:$(e.data.target).parent()[0]};\n$.extend(e.data,_60);\nvar _61=$.data(e.data.target,\"draggable\").options;\nif(_61.onBeforeDrag.call(e.data.target,e)==false){\nreturn;\n}\n$(document)._bind(\"mousedown.draggable\",e.data,_43);\n$(document)._bind(\"mousemove.draggable\",e.data,_49);\n$(document)._bind(\"mouseup.draggable\",e.data,_4d);\n$.fn.draggable.timer=setTimeout(function(){\n$.fn.draggable.isDragging=true;\n_43(e);\n},_61.delay);\nreturn false;\n});\nfunction _5d(e){\nvar _62=$.data(e.data.target,\"draggable\");\nvar _63=_62.handle;\nvar _64=$(_63).offset();\nvar _65=$(_63).outerWidth();\nvar _66=$(_63).outerHeight();\nvar t=e.pageY-_64.top;\nvar r=_64.left+_65-e.pageX;\nvar b=_64.top+_66-e.pageY;\nvar l=e.pageX-_64.left;\nreturn Math.min(t,r,b,l)>_62.options.edge;\n};\n});\n};\n$.fn.draggable.methods={options:function(jq){\nreturn $.data(jq[0],\"draggable\").options;\n},proxy:function(jq){\nreturn $.data(jq[0],\"draggable\").proxy;\n},enable:function(jq){\nreturn jq.each(function(){\n$(this).draggable({disabled:false});\n});\n},disable:function(jq){\nreturn jq.each(function(){\n$(this).draggable({disabled:true});\n});\n}};\n$.fn.draggable.parseOptions=function(_67){\nvar t=$(_67);\nreturn $.extend({},$.parser.parseOptions(_67,[\"cursor\",\"handle\",\"axis\",{\"revert\":\"boolean\",\"deltaX\":\"number\",\"deltaY\":\"number\",\"edge\":\"number\",\"delay\":\"number\"}]),{disabled:(t.attr(\"disabled\")?true:undefined)});\n};\n$.fn.draggable.defaults={proxy:null,revert:false,cursor:\"move\",deltaX:null,deltaY:null,handle:null,disabled:false,edge:0,axis:null,delay:100,onBeforeDrag:function(e){\n},onStartDrag:function(e){\n},onDrag:function(e){\n},onEndDrag:function(e){\n},onStopDrag:function(e){\n}};\n$.fn.draggable.isDragging=false;\n})(jQuery);\n(function($){\nfunction _68(_69){\n$(_69).addClass(\"droppable\");\n$(_69)._bind(\"_dragenter\",function(e,_6a){\n$.data(_69,\"droppable\").options.onDragEnter.apply(_69,[e,_6a]);\n});\n$(_69)._bind(\"_dragleave\",function(e,_6b){\n$.data(_69,\"droppable\").options.onDragLeave.apply(_69,[e,_6b]);\n});\n$(_69)._bind(\"_dragover\",function(e,_6c){\n$.data(_69,\"droppable\").options.onDragOver.apply(_69,[e,_6c]);\n});\n$(_69)._bind(\"_drop\",function(e,_6d){\n$.data(_69,\"droppable\").options.onDrop.apply(_69,[e,_6d]);\n});\n};\n$.fn.droppable=function(_6e,_6f){\nif(typeof _6e==\"string\"){\nreturn $.fn.droppable.methods[_6e](this,_6f);\n}\n_6e=_6e||{};\nreturn this.each(function(){\nvar _70=$.data(this,\"droppable\");\nif(_70){\n$.extend(_70.options,_6e);\n}else{\n_68(this);\n$.data(this,\"droppable\",{options:$.extend({},$.fn.droppable.defaults,$.fn.droppable.parseOptions(this),_6e)});\n}\n});\n};\n$.fn.droppable.methods={options:function(jq){\nreturn $.data(jq[0],\"droppable\").options;\n},enable:function(jq){\nreturn jq.each(function(){\n$(this).droppable({disabled:false});\n});\n},disable:function(jq){\nreturn jq.each(function(){\n$(this).droppable({disabled:true});\n});\n}};\n$.fn.droppable.parseOptions=function(_71){\nvar t=$(_71);\nreturn $.extend({},$.parser.parseOptions(_71,[\"accept\"]),{disabled:(t.attr(\"disabled\")?true:undefined)});\n};\n$.fn.droppable.defaults={accept:null,disabled:false,onDragEnter:function(e,_72){\n},onDragOver:function(e,_73){\n},onDragLeave:function(e,_74){\n},onDrop:function(e,_75){\n}};\n})(jQuery);\n(function($){\nfunction _76(e){\nvar _77=e.data;\nvar _78=$.data(_77.target,\"resizable\").options;\nif(_77.dir.indexOf(\"e\")!=-1){\nvar _79=_77.startWidth+e.pageX-_77.startX;\n_79=Math.min(Math.max(_79,_78.minWidth),_78.maxWidth);\n_77.width=_79;\n}\nif(_77.dir.indexOf(\"s\")!=-1){\nvar _7a=_77.startHeight+e.pageY-_77.startY;\n_7a=Math.min(Math.max(_7a,_78.minHeight),_78.maxHeight);\n_77.height=_7a;\n}\nif(_77.dir.indexOf(\"w\")!=-1){\nvar _79=_77.startWidth-e.pageX+_77.startX;\n_79=Math.min(Math.max(_79,_78.minWidth),_78.maxWidth);\n_77.width=_79;\n_77.left=_77.startLeft+_77.startWidth-_77.width;\n}\nif(_77.dir.indexOf(\"n\")!=-1){\nvar _7a=_77.startHeight-e.pageY+_77.startY;\n_7a=Math.min(Math.max(_7a,_78.minHeight),_78.maxHeight);\n_77.height=_7a;\n_77.top=_77.startTop+_77.startHeight-_77.height;\n}\n};\nfunction _7b(e){\nvar _7c=e.data;\nvar t=$(_7c.target);\nt.css({left:_7c.left,top:_7c.top});\nif(t.outerWidth()!=_7c.width){\nt._outerWidth(_7c.width);\n}\nif(t.outerHeight()!=_7c.height){\nt._outerHeight(_7c.height);\n}\n};\nfunction _7d(e){\n$.fn.resizable.isResizing=true;\n$.data(e.data.target,\"resizable\").options.onStartResize.call(e.data.target,e);\nreturn false;\n};\nfunction _7e(e){\n_76(e);\nif($.data(e.data.target,\"resizable\").options.onResize.call(e.data.target,e)!=false){\n_7b(e);\n}\nreturn false;\n};\nfunction _7f(e){\n$.fn.resizable.isResizing=false;\n_76(e,true);\n_7b(e);\n$.data(e.data.target,\"resizable\").options.onStopResize.call(e.data.target,e);\n$(document)._unbind(\".resizable\");\n$(\"body\").css(\"cursor\",\"\");\nreturn false;\n};\nfunction _80(e){\nvar _81=$(e.data.target).resizable(\"options\");\nvar tt=$(e.data.target);\nvar dir=\"\";\nvar _82=tt.offset();\nvar _83=tt.outerWidth();\nvar _84=tt.outerHeight();\nvar _85=_81.edge;\nif(e.pageY>_82.top&&e.pageY<_82.top+_85){\ndir+=\"n\";\n}else{\nif(e.pageY<_82.top+_84&&e.pageY>_82.top+_84-_85){\ndir+=\"s\";\n}\n}\nif(e.pageX>_82.left&&e.pageX<_82.left+_85){\ndir+=\"w\";\n}else{\nif(e.pageX<_82.left+_83&&e.pageX>_82.left+_83-_85){\ndir+=\"e\";\n}\n}\nvar _86=_81.handles.split(\",\");\n_86=$.map(_86,function(h){\nreturn $.trim(h).toLowerCase();\n});\nif($.inArray(\"all\",_86)>=0||$.inArray(dir,_86)>=0){\nreturn dir;\n}\nfor(var i=0;i<dir.length;i++){\nvar _87=$.inArray(dir.substr(i,1),_86);\nif(_87>=0){\nreturn _86[_87];\n}\n}\nreturn \"\";\n};\n$.fn.resizable=function(_88,_89){\nif(typeof _88==\"string\"){\nreturn $.fn.resizable.methods[_88](this,_89);\n}\nreturn this.each(function(){\nvar _8a=null;\nvar _8b=$.data(this,\"resizable\");\nif(_8b){\n$(this)._unbind(\".resizable\");\n_8a=$.extend(_8b.options,_88||{});\n}else{\n_8a=$.extend({},$.fn.resizable.defaults,$.fn.resizable.parseOptions(this),_88||{});\n$.data(this,\"resizable\",{options:_8a});\n}\nif(_8a.disabled==true){\nreturn;\n}\n$(this)._bind(\"mousemove.resizable\",{target:this},function(e){\nif($.fn.resizable.isResizing){\nreturn;\n}\nvar dir=_80(e);\n$(e.data.target).css(\"cursor\",dir?dir+\"-resize\":\"\");\n})._bind(\"mouseleave.resizable\",{target:this},function(e){\n$(e.data.target).css(\"cursor\",\"\");\n})._bind(\"mousedown.resizable\",{target:this},function(e){\nvar dir=_80(e);\nif(dir==\"\"){\nreturn;\n}\nfunction _8c(css){\nvar val=parseInt($(e.data.target).css(css));\nif(isNaN(val)){\nreturn 0;\n}else{\nreturn val;\n}\n};\nvar _8d={target:e.data.target,dir:dir,startLeft:_8c(\"left\"),startTop:_8c(\"top\"),left:_8c(\"left\"),top:_8c(\"top\"),startX:e.pageX,startY:e.pageY,startWidth:$(e.data.target).outerWidth(),startHeight:$(e.data.target).outerHeight(),width:$(e.data.target).outerWidth(),height:$(e.data.target).outerHeight(),deltaWidth:$(e.data.target).outerWidth()-$(e.data.target).width(),deltaHeight:$(e.data.target).outerHeight()-$(e.data.target).height()};\n$(document)._bind(\"mousedown.resizable\",_8d,_7d);\n$(document)._bind(\"mousemove.resizable\",_8d,_7e);\n$(document)._bind(\"mouseup.resizable\",_8d,_7f);\n$(\"body\").css(\"cursor\",dir+\"-resize\");\n});\n});\n};\n$.fn.resizable.methods={options:function(jq){\nreturn $.data(jq[0],\"resizable\").options;\n},enable:function(jq){\nreturn jq.each(function(){\n$(this).resizable({disabled:false});\n});\n},disable:function(jq){\nreturn jq.each(function(){\n$(this).resizable({disabled:true});\n});\n}};\n$.fn.resizable.parseOptions=function(_8e){\nvar t=$(_8e);\nreturn $.extend({},$.parser.parseOptions(_8e,[\"handles\",{minWidth:\"number\",minHeight:\"number\",maxWidth:\"number\",maxHeight:\"number\",edge:\"number\"}]),{disabled:(t.attr(\"disabled\")?true:undefined)});\n};\n$.fn.resizable.defaults={disabled:false,handles:\"n, e, s, w, ne, se, sw, nw, all\",minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000,edge:5,onStartResize:function(e){\n},onResize:function(e){\n},onStopResize:function(e){\n}};\n$.fn.resizable.isResizing=false;\n})(jQuery);\n(function($){\nfunction _8f(_90,_91){\nvar _92=$.data(_90,\"linkbutton\").options;\nif(_91){\n$.extend(_92,_91);\n}\nif(_92.width||_92.height||_92.fit){\nvar btn=$(_90);\nvar _93=btn.parent();\nvar _94=btn.is(\":visible\");\nif(!_94){\nvar _95=$(\"<div style=\\\"display:none\\\"></div>\").insertBefore(_90);\nvar _96={position:btn.css(\"position\"),display:btn.css(\"display\"),left:btn.css(\"left\")};\nbtn.appendTo(\"body\");\nbtn.css({position:\"absolute\",display:\"inline-block\",left:-20000});\n}\nbtn._size(_92,_93);\nvar _97=btn.find(\".l-btn-left\");\n_97.css(\"margin-top\",0);\n_97.css(\"margin-top\",parseInt((btn.height()-_97.height())/2)+\"px\");\nif(!_94){\nbtn.insertAfter(_95);\nbtn.css(_96);\n_95.remove();\n}\n}\n};\nfunction _98(_99){\nvar _9a=$.data(_99,\"linkbutton\").options;\nvar t=$(_99).empty();\nt.addClass(\"l-btn\").removeClass(\"l-btn-plain l-btn-selected l-btn-plain-selected l-btn-outline\");\nt.removeClass(\"l-btn-small l-btn-medium l-btn-large\").addClass(\"l-btn-\"+_9a.size);\nif(_9a.plain){\nt.addClass(\"l-btn-plain\");\n}\nif(_9a.outline){\nt.addClass(\"l-btn-outline\");\n}\nif(_9a.selected){\nt.addClass(_9a.plain?\"l-btn-selected l-btn-plain-selected\":\"l-btn-selected\");\n}\nt.attr(\"group\",_9a.group||\"\");\nt.attr(\"id\",_9a.id||\"\");\nvar _9b=$(\"<span class=\\\"l-btn-left\\\"></span>\").appendTo(t);\nif(_9a.text){\n$(\"<span class=\\\"l-btn-text\\\"></span>\").html(_9a.text).appendTo(_9b);\n}else{\n$(\"<span class=\\\"l-btn-text l-btn-empty\\\">&nbsp;</span>\").appendTo(_9b);\n}\nif(_9a.iconCls){\n$(\"<span class=\\\"l-btn-icon\\\">&nbsp;</span>\").addClass(_9a.iconCls).appendTo(_9b);\n_9b.addClass(\"l-btn-icon-\"+_9a.iconAlign);\n}\nt._unbind(\".linkbutton\")._bind(\"focus.linkbutton\",function(){\nif(!_9a.disabled){\n$(this).addClass(\"l-btn-focus\");\n}\n})._bind(\"blur.linkbutton\",function(){\n$(this).removeClass(\"l-btn-focus\");\n})._bind(\"click.linkbutton\",function(){\nif(!_9a.disabled){\nif(_9a.toggle){\nif(_9a.selected){\n$(this).linkbutton(\"unselect\");\n}else{\n$(this).linkbutton(\"select\");\n}\n}\n_9a.onClick.call(this);\n}\n});\n_9c(_99,_9a.selected);\n_9d(_99,_9a.disabled);\n};\nfunction _9c(_9e,_9f){\nvar _a0=$.data(_9e,\"linkbutton\").options;\nif(_9f){\nif(_a0.group){\n$(\"a.l-btn[group=\\\"\"+_a0.group+\"\\\"]\").each(function(){\nvar o=$(this).linkbutton(\"options\");\nif(o.toggle){\n$(this).removeClass(\"l-btn-selected l-btn-plain-selected\");\no.selected=false;\n}\n});\n}\n$(_9e).addClass(_a0.plain?\"l-btn-selected l-btn-plain-selected\":\"l-btn-selected\");\n_a0.selected=true;\n}else{\nif(!_a0.group){\n$(_9e).removeClass(\"l-btn-selected l-btn-plain-selected\");\n_a0.selected=false;\n}\n}\n};\nfunction _9d(_a1,_a2){\nvar _a3=$.data(_a1,\"linkbutton\");\nvar _a4=_a3.options;\n$(_a1).removeClass(\"l-btn-disabled l-btn-plain-disabled\");\nif(_a2){\n_a4.disabled=true;\nvar _a5=$(_a1).attr(\"href\");\nif(_a5){\n_a3.href=_a5;\n$(_a1).attr(\"href\",\"javascript:;\");\n}\nif(_a1.onclick){\n_a3.onclick=_a1.onclick;\n_a1.onclick=null;\n}\n_a4.plain?$(_a1).addClass(\"l-btn-disabled l-btn-plain-disabled\"):$(_a1).addClass(\"l-btn-disabled\");\n}else{\n_a4.disabled=false;\nif(_a3.href){\n$(_a1).attr(\"href\",_a3.href);\n}\nif(_a3.onclick){\n_a1.onclick=_a3.onclick;\n}\n}\n$(_a1)._propAttr(\"disabled\",_a2);\n};\n$.fn.linkbutton=function(_a6,_a7){\nif(typeof _a6==\"string\"){\nreturn $.fn.linkbutton.methods[_a6](this,_a7);\n}\n_a6=_a6||{};\nreturn this.each(function(){\nvar _a8=$.data(this,\"linkbutton\");\nif(_a8){\n$.extend(_a8.options,_a6);\n}else{\n$.data(this,\"linkbutton\",{options:$.extend({},$.fn.linkbutton.defaults,$.fn.linkbutton.parseOptions(this),_a6)});\n$(this)._propAttr(\"disabled\",false);\n$(this)._bind(\"_resize\",function(e,_a9){\nif($(this).hasClass(\"easyui-fluid\")||_a9){\n_8f(this);\n}\nreturn false;\n});\n}\n_98(this);\n_8f(this);\n});\n};\n$.fn.linkbutton.methods={options:function(jq){\nreturn $.data(jq[0],\"linkbutton\").options;\n},resize:function(jq,_aa){\nreturn jq.each(function(){\n_8f(this,_aa);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_9d(this,false);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_9d(this,true);\n});\n},select:function(jq){\nreturn jq.each(function(){\n_9c(this,true);\n});\n},unselect:function(jq){\nreturn jq.each(function(){\n_9c(this,false);\n});\n}};\n$.fn.linkbutton.parseOptions=function(_ab){\nvar t=$(_ab);\nreturn $.extend({},$.parser.parseOptions(_ab,[\"id\",\"iconCls\",\"iconAlign\",\"group\",\"size\",\"text\",{plain:\"boolean\",toggle:\"boolean\",selected:\"boolean\",outline:\"boolean\"}]),{disabled:(t.attr(\"disabled\")?true:undefined),text:($.trim(t.html())||undefined),iconCls:(t.attr(\"icon\")||t.attr(\"iconCls\"))});\n};\n$.fn.linkbutton.defaults={id:null,disabled:false,toggle:false,selected:false,outline:false,group:null,plain:false,text:\"\",iconCls:null,iconAlign:\"left\",size:\"small\",onClick:function(){\n}};\n})(jQuery);\n(function($){\nfunction _ac(_ad){\nvar _ae=$.data(_ad,\"pagination\");\nvar _af=_ae.options;\nvar bb=_ae.bb={};\nif(_af.buttons&&!$.isArray(_af.buttons)){\n$(_af.buttons).insertAfter(_ad);\n}\nvar _b0=$(_ad).addClass(\"pagination\").html(\"<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr></tr></table>\");\nvar tr=_b0.find(\"tr\");\nvar aa=$.extend([],_af.layout);\nif(!_af.showPageList){\n_b1(aa,\"list\");\n}\nif(!_af.showPageInfo){\n_b1(aa,\"info\");\n}\nif(!_af.showRefresh){\n_b1(aa,\"refresh\");\n}\nif(aa[0]==\"sep\"){\naa.shift();\n}\nif(aa[aa.length-1]==\"sep\"){\naa.pop();\n}\nfor(var _b2=0;_b2<aa.length;_b2++){\nvar _b3=aa[_b2];\nif(_b3==\"list\"){\nvar ps=$(\"<select class=\\\"pagination-page-list\\\"></select>\");\nps._bind(\"change\",function(){\n_af.pageSize=parseInt($(this).val());\n_af.onChangePageSize.call(_ad,_af.pageSize);\n_b9(_ad,_af.pageNumber);\n});\nfor(var i=0;i<_af.pageList.length;i++){\n$(\"<option></option>\").text(_af.pageList[i]).appendTo(ps);\n}\n$(\"<td></td>\").append(ps).appendTo(tr);\n}else{\nif(_b3==\"sep\"){\n$(\"<td><div class=\\\"pagination-btn-separator\\\"></div></td>\").appendTo(tr);\n}else{\nif(_b3==\"first\"){\nbb.first=_b4(\"first\");\n}else{\nif(_b3==\"prev\"){\nbb.prev=_b4(\"prev\");\n}else{\nif(_b3==\"next\"){\nbb.next=_b4(\"next\");\n}else{\nif(_b3==\"last\"){\nbb.last=_b4(\"last\");\n}else{\nif(_b3==\"manual\"){\n$(\"<span style=\\\"padding-left:6px;\\\"></span>\").html(_af.beforePageText).appendTo(tr).wrap(\"<td></td>\");\nbb.num=$(\"<input class=\\\"pagination-num\\\" type=\\\"text\\\" value=\\\"1\\\" size=\\\"2\\\">\").appendTo(tr).wrap(\"<td></td>\");\nbb.num._unbind(\".pagination\")._bind(\"keydown.pagination\",function(e){\nif(e.keyCode==13){\nvar _b5=parseInt($(this).val())||1;\n_b9(_ad,_b5);\nreturn false;\n}\n});\nbb.after=$(\"<span style=\\\"padding-right:6px;\\\"></span>\").appendTo(tr).wrap(\"<td></td>\");\n}else{\nif(_b3==\"refresh\"){\nbb.refresh=_b4(\"refresh\");\n}else{\nif(_b3==\"links\"){\n$(\"<td class=\\\"pagination-links\\\"></td>\").appendTo(tr);\n}else{\nif(_b3==\"info\"){\nif(_b2==aa.length-1){\n$(\"<div class=\\\"pagination-info\\\"></div>\").appendTo(_b0);\n}else{\n$(\"<td><div class=\\\"pagination-info\\\"></div></td>\").appendTo(tr);\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\nif(_af.buttons){\n$(\"<td><div class=\\\"pagination-btn-separator\\\"></div></td>\").appendTo(tr);\nif($.isArray(_af.buttons)){\nfor(var i=0;i<_af.buttons.length;i++){\nvar btn=_af.buttons[i];\nif(btn==\"-\"){\n$(\"<td><div class=\\\"pagination-btn-separator\\\"></div></td>\").appendTo(tr);\n}else{\nvar td=$(\"<td></td>\").appendTo(tr);\nvar a=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(td);\na[0].onclick=eval(btn.handler||function(){\n});\na.linkbutton($.extend({},btn,{plain:true}));\n}\n}\n}else{\nvar td=$(\"<td></td>\").appendTo(tr);\n$(_af.buttons).appendTo(td).show();\n}\n}\n$(\"<div style=\\\"clear:both;\\\"></div>\").appendTo(_b0);\nfunction _b4(_b6){\nvar btn=_af.nav[_b6];\nvar a=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(tr);\na.wrap(\"<td></td>\");\na.linkbutton({iconCls:btn.iconCls,plain:true})._unbind(\".pagination\")._bind(\"click.pagination\",function(){\nbtn.handler.call(_ad);\n});\nreturn a;\n};\nfunction _b1(aa,_b7){\nvar _b8=$.inArray(_b7,aa);\nif(_b8>=0){\naa.splice(_b8,1);\n}\nreturn aa;\n};\n};\nfunction _b9(_ba,_bb){\nvar _bc=$.data(_ba,\"pagination\").options;\nif(_bc.onBeforeSelectPage.call(_ba,_bb,_bc.pageSize)==false){\n_bd(_ba);\nreturn;\n}\n_bd(_ba,{pageNumber:_bb});\n_bc.onSelectPage.call(_ba,_bc.pageNumber,_bc.pageSize);\n};\nfunction _bd(_be,_bf){\nvar _c0=$.data(_be,\"pagination\");\nvar _c1=_c0.options;\nvar bb=_c0.bb;\n$.extend(_c1,_bf||{});\nvar ps=$(_be).find(\"select.pagination-page-list\");\nif(ps.length){\nps.val(_c1.pageSize+\"\");\n_c1.pageSize=parseInt(ps.val());\n}\nvar _c2=Math.ceil(_c1.total/_c1.pageSize)||1;\nif(_c1.pageNumber<1){\n_c1.pageNumber=1;\n}\nif(_c1.pageNumber>_c2){\n_c1.pageNumber=_c2;\n}\nif(_c1.total==0){\n_c1.pageNumber=0;\n_c2=0;\n}\nif(bb.num){\nbb.num.val(_c1.pageNumber);\n}\nif(bb.after){\nbb.after.html(_c1.afterPageText.replace(/{pages}/,_c2));\n}\nvar td=$(_be).find(\"td.pagination-links\");\nif(td.length){\ntd.empty();\nvar _c3=_c1.pageNumber-Math.floor(_c1.links/2);\nif(_c3<1){\n_c3=1;\n}\nvar _c4=_c3+_c1.links-1;\nif(_c4>_c2){\n_c4=_c2;\n}\n_c3=_c4-_c1.links+1;\nif(_c3<1){\n_c3=1;\n}\nfor(var i=_c3;i<=_c4;i++){\nvar a=$(\"<a class=\\\"pagination-link\\\" href=\\\"javascript:;\\\"></a>\").appendTo(td);\na.linkbutton({plain:true,text:i});\nif(i==_c1.pageNumber){\na.linkbutton(\"select\");\n}else{\na._unbind(\".pagination\")._bind(\"click.pagination\",{pageNumber:i},function(e){\n_b9(_be,e.data.pageNumber);\n});\n}\n}\n}\nvar _c5=_c1.displayMsg;\n_c5=_c5.replace(/{from}/,_c1.total==0?0:_c1.pageSize*(_c1.pageNumber-1)+1);\n_c5=_c5.replace(/{to}/,Math.min(_c1.pageSize*(_c1.pageNumber),_c1.total));\n_c5=_c5.replace(/{total}/,_c1.total);\n$(_be).find(\"div.pagination-info\").html(_c5);\nif(bb.first){\nbb.first.linkbutton({disabled:((!_c1.total)||_c1.pageNumber==1)});\n}\nif(bb.prev){\nbb.prev.linkbutton({disabled:((!_c1.total)||_c1.pageNumber==1)});\n}\nif(bb.next){\nbb.next.linkbutton({disabled:(_c1.pageNumber==_c2)});\n}\nif(bb.last){\nbb.last.linkbutton({disabled:(_c1.pageNumber==_c2)});\n}\n_c6(_be,_c1.loading);\n};\nfunction _c6(_c7,_c8){\nvar _c9=$.data(_c7,\"pagination\");\nvar _ca=_c9.options;\n_ca.loading=_c8;\nif(_ca.showRefresh&&_c9.bb.refresh){\n_c9.bb.refresh.linkbutton({iconCls:(_ca.loading?\"pagination-loading\":\"pagination-load\")});\n}\n};\n$.fn.pagination=function(_cb,_cc){\nif(typeof _cb==\"string\"){\nreturn $.fn.pagination.methods[_cb](this,_cc);\n}\n_cb=_cb||{};\nreturn this.each(function(){\nvar _cd;\nvar _ce=$.data(this,\"pagination\");\nif(_ce){\n_cd=$.extend(_ce.options,_cb);\n}else{\n_cd=$.extend({},$.fn.pagination.defaults,$.fn.pagination.parseOptions(this),_cb);\n$.data(this,\"pagination\",{options:_cd});\n}\n_ac(this);\n_bd(this);\n});\n};\n$.fn.pagination.methods={options:function(jq){\nreturn $.data(jq[0],\"pagination\").options;\n},loading:function(jq){\nreturn jq.each(function(){\n_c6(this,true);\n});\n},loaded:function(jq){\nreturn jq.each(function(){\n_c6(this,false);\n});\n},refresh:function(jq,_cf){\nreturn jq.each(function(){\n_bd(this,_cf);\n});\n},select:function(jq,_d0){\nreturn jq.each(function(){\n_b9(this,_d0);\n});\n}};\n$.fn.pagination.parseOptions=function(_d1){\nvar t=$(_d1);\nreturn $.extend({},$.parser.parseOptions(_d1,[{total:\"number\",pageSize:\"number\",pageNumber:\"number\",links:\"number\"},{loading:\"boolean\",showPageList:\"boolean\",showPageInfo:\"boolean\",showRefresh:\"boolean\"}]),{pageList:(t.attr(\"pageList\")?eval(t.attr(\"pageList\")):undefined)});\n};\n$.fn.pagination.defaults={total:1,pageSize:10,pageNumber:1,pageList:[10,20,30,50],loading:false,buttons:null,showPageList:true,showPageInfo:true,showRefresh:true,links:10,layout:[\"list\",\"sep\",\"first\",\"prev\",\"sep\",\"manual\",\"sep\",\"next\",\"last\",\"sep\",\"refresh\",\"info\"],onBeforeSelectPage:function(_d2,_d3){\n},onSelectPage:function(_d4,_d5){\n},onBeforeRefresh:function(_d6,_d7){\n},onRefresh:function(_d8,_d9){\n},onChangePageSize:function(_da){\n},beforePageText:\"Page\",afterPageText:\"of {pages}\",displayMsg:\"Displaying {from} to {to} of {total} items\",nav:{first:{iconCls:\"pagination-first\",handler:function(){\nvar _db=$(this).pagination(\"options\");\nif(_db.pageNumber>1){\n$(this).pagination(\"select\",1);\n}\n}},prev:{iconCls:\"pagination-prev\",handler:function(){\nvar _dc=$(this).pagination(\"options\");\nif(_dc.pageNumber>1){\n$(this).pagination(\"select\",_dc.pageNumber-1);\n}\n}},next:{iconCls:\"pagination-next\",handler:function(){\nvar _dd=$(this).pagination(\"options\");\nvar _de=Math.ceil(_dd.total/_dd.pageSize);\nif(_dd.pageNumber<_de){\n$(this).pagination(\"select\",_dd.pageNumber+1);\n}\n}},last:{iconCls:\"pagination-last\",handler:function(){\nvar _df=$(this).pagination(\"options\");\nvar _e0=Math.ceil(_df.total/_df.pageSize);\nif(_df.pageNumber<_e0){\n$(this).pagination(\"select\",_e0);\n}\n}},refresh:{iconCls:\"pagination-refresh\",handler:function(){\nvar _e1=$(this).pagination(\"options\");\nif(_e1.onBeforeRefresh.call(this,_e1.pageNumber,_e1.pageSize)!=false){\n$(this).pagination(\"select\",_e1.pageNumber);\n_e1.onRefresh.call(this,_e1.pageNumber,_e1.pageSize);\n}\n}}}};\n})(jQuery);\n(function($){\nfunction _e2(_e3){\nvar _e4=$(_e3);\n_e4.addClass(\"tree\");\nreturn _e4;\n};\nfunction _e5(_e6){\nvar _e7=$.data(_e6,\"tree\").options;\n$(_e6)._unbind()._bind(\"mouseover\",function(e){\nvar tt=$(e.target);\nvar _e8=tt.closest(\"div.tree-node\");\nif(!_e8.length){\nreturn;\n}\n_e8.addClass(\"tree-node-hover\");\nif(tt.hasClass(\"tree-hit\")){\nif(tt.hasClass(\"tree-expanded\")){\ntt.addClass(\"tree-expanded-hover\");\n}else{\ntt.addClass(\"tree-collapsed-hover\");\n}\n}\ne.stopPropagation();\n})._bind(\"mouseout\",function(e){\nvar tt=$(e.target);\nvar _e9=tt.closest(\"div.tree-node\");\nif(!_e9.length){\nreturn;\n}\n_e9.removeClass(\"tree-node-hover\");\nif(tt.hasClass(\"tree-hit\")){\nif(tt.hasClass(\"tree-expanded\")){\ntt.removeClass(\"tree-expanded-hover\");\n}else{\ntt.removeClass(\"tree-collapsed-hover\");\n}\n}\ne.stopPropagation();\n})._bind(\"click\",function(e){\nvar tt=$(e.target);\nvar _ea=tt.closest(\"div.tree-node\");\nif(!_ea.length){\nreturn;\n}\nif(tt.hasClass(\"tree-hit\")){\n_148(_e6,_ea[0]);\nreturn false;\n}else{\nif(tt.hasClass(\"tree-checkbox\")){\n_10f(_e6,_ea[0]);\nreturn false;\n}else{\n_18d(_e6,_ea[0]);\n_e7.onClick.call(_e6,_ed(_e6,_ea[0]));\n}\n}\ne.stopPropagation();\n})._bind(\"dblclick\",function(e){\nvar _eb=$(e.target).closest(\"div.tree-node\");\nif(!_eb.length){\nreturn;\n}\n_18d(_e6,_eb[0]);\n_e7.onDblClick.call(_e6,_ed(_e6,_eb[0]));\ne.stopPropagation();\n})._bind(\"contextmenu\",function(e){\nvar _ec=$(e.target).closest(\"div.tree-node\");\nif(!_ec.length){\nreturn;\n}\n_e7.onContextMenu.call(_e6,e,_ed(_e6,_ec[0]));\ne.stopPropagation();\n});\n};\nfunction _ee(_ef){\nvar _f0=$.data(_ef,\"tree\").options;\n_f0.dnd=false;\nvar _f1=$(_ef).find(\"div.tree-node\");\n_f1.draggable(\"disable\");\n_f1.css(\"cursor\",\"pointer\");\n};\nfunction _f2(_f3){\nvar _f4=$.data(_f3,\"tree\");\nvar _f5=_f4.options;\nvar _f6=_f4.tree;\n_f4.disabledNodes=[];\n_f5.dnd=true;\n_f6.find(\"div.tree-node\").draggable({disabled:false,revert:true,cursor:\"pointer\",proxy:function(_f7){\nvar p=$(\"<div class=\\\"tree-node-proxy\\\"></div>\").appendTo(\"body\");\np.html(\"<span class=\\\"tree-dnd-icon tree-dnd-no\\\">&nbsp;</span>\"+$(_f7).find(\".tree-title\").html());\np.hide();\nreturn p;\n},deltaX:15,deltaY:15,onBeforeDrag:function(e){\nif(_f5.onBeforeDrag.call(_f3,_ed(_f3,this))==false){\nreturn false;\n}\nif($(e.target).hasClass(\"tree-hit\")||$(e.target).hasClass(\"tree-checkbox\")){\nreturn false;\n}\nif(e.which!=1){\nreturn false;\n}\nvar _f8=$(this).find(\"span.tree-indent\");\nif(_f8.length){\ne.data.offsetWidth-=_f8.length*_f8.width();\n}\n},onStartDrag:function(e){\n$(this).next(\"ul\").find(\"div.tree-node\").each(function(){\n$(this).droppable(\"disable\");\n_f4.disabledNodes.push(this);\n});\n$(this).draggable(\"proxy\").css({left:-10000,top:-10000});\n_f5.onStartDrag.call(_f3,_ed(_f3,this));\nvar _f9=_ed(_f3,this);\nif(_f9.id==undefined){\n_f9.id=\"easyui_tree_node_id_temp\";\n_12f(_f3,_f9);\n}\n_f4.draggingNodeId=_f9.id;\n},onDrag:function(e){\nvar x1=e.pageX,y1=e.pageY,x2=e.data.startX,y2=e.data.startY;\nvar d=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));\nif(d>3){\n$(this).draggable(\"proxy\").show();\n}\nthis.pageY=e.pageY;\n},onStopDrag:function(){\nfor(var i=0;i<_f4.disabledNodes.length;i++){\n$(_f4.disabledNodes[i]).droppable(\"enable\");\n}\n_f4.disabledNodes=[];\nvar _fa=_185(_f3,_f4.draggingNodeId);\nif(_fa&&_fa.id==\"easyui_tree_node_id_temp\"){\n_fa.id=\"\";\n_12f(_f3,_fa);\n}\n_f5.onStopDrag.call(_f3,_fa);\n}}).droppable({accept:\"div.tree-node\",onDragEnter:function(e,_fb){\nif(_f5.onDragEnter.call(_f3,this,_fc(_fb))==false){\n_fd(_fb,false);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\n$(this).droppable(\"disable\");\n_f4.disabledNodes.push(this);\n}\n},onDragOver:function(e,_fe){\nif($(this).droppable(\"options\").disabled){\nreturn;\n}\nvar _ff=_fe.pageY;\nvar top=$(this).offset().top;\nvar _100=top+$(this).outerHeight();\n_fd(_fe,true);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\nif(_ff>top+(_100-top)/2){\nif(_100-_ff<5){\n$(this).addClass(\"tree-node-bottom\");\n}else{\n$(this).addClass(\"tree-node-append\");\n}\n}else{\nif(_ff-top<5){\n$(this).addClass(\"tree-node-top\");\n}else{\n$(this).addClass(\"tree-node-append\");\n}\n}\nif(_f5.onDragOver.call(_f3,this,_fc(_fe))==false){\n_fd(_fe,false);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\n$(this).droppable(\"disable\");\n_f4.disabledNodes.push(this);\n}\n},onDragLeave:function(e,_101){\n_fd(_101,false);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\n_f5.onDragLeave.call(_f3,this,_fc(_101));\n},onDrop:function(e,_102){\nvar dest=this;\nvar _103,_104;\nif($(this).hasClass(\"tree-node-append\")){\n_103=_105;\n_104=\"append\";\n}else{\n_103=_106;\n_104=$(this).hasClass(\"tree-node-top\")?\"top\":\"bottom\";\n}\nif(_f5.onBeforeDrop.call(_f3,dest,_fc(_102),_104)==false){\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\nreturn;\n}\n_103(_102,dest,_104);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\n}});\nfunction _fc(_107,pop){\nreturn $(_107).closest(\"ul.tree\").tree(pop?\"pop\":\"getData\",_107);\n};\nfunction _fd(_108,_109){\nvar icon=$(_108).draggable(\"proxy\").find(\"span.tree-dnd-icon\");\nicon.removeClass(\"tree-dnd-yes tree-dnd-no\").addClass(_109?\"tree-dnd-yes\":\"tree-dnd-no\");\n};\nfunction _105(_10a,dest){\nif(_ed(_f3,dest).state==\"closed\"){\n_140(_f3,dest,function(){\n_10b();\n});\n}else{\n_10b();\n}\nfunction _10b(){\nvar node=_fc(_10a,true);\n$(_f3).tree(\"append\",{parent:dest,data:[node]});\n_f5.onDrop.call(_f3,dest,node,\"append\");\n};\n};\nfunction _106(_10c,dest,_10d){\nvar _10e={};\nif(_10d==\"top\"){\n_10e.before=dest;\n}else{\n_10e.after=dest;\n}\nvar node=_fc(_10c,true);\n_10e.data=node;\n$(_f3).tree(\"insert\",_10e);\n_f5.onDrop.call(_f3,dest,node,_10d);\n};\n};\nfunction _10f(_110,_111,_112,_113){\nvar _114=$.data(_110,\"tree\");\nvar opts=_114.options;\nif(!opts.checkbox){\nreturn;\n}\nvar _115=_ed(_110,_111);\nif(!_115.checkState){\nreturn;\n}\nvar ck=$(_111).find(\".tree-checkbox\");\nif(_112==undefined){\nif(ck.hasClass(\"tree-checkbox1\")){\n_112=false;\n}else{\nif(ck.hasClass(\"tree-checkbox0\")){\n_112=true;\n}else{\nif(_115._checked==undefined){\n_115._checked=$(_111).find(\".tree-checkbox\").hasClass(\"tree-checkbox1\");\n}\n_112=!_115._checked;\n}\n}\n}\n_115._checked=_112;\nif(_112){\nif(ck.hasClass(\"tree-checkbox1\")){\nreturn;\n}\n}else{\nif(ck.hasClass(\"tree-checkbox0\")){\nreturn;\n}\n}\nif(!_113){\nif(opts.onBeforeCheck.call(_110,_115,_112)==false){\nreturn;\n}\n}\nif(opts.cascadeCheck){\n_116(_110,_115,_112);\n_117(_110,_115);\n}else{\n_118(_110,_115,_112?\"1\":\"0\");\n}\nif(!_113){\nopts.onCheck.call(_110,_115,_112);\n}\n};\nfunction _116(_119,_11a,_11b){\nvar opts=$.data(_119,\"tree\").options;\nvar flag=_11b?1:0;\n_118(_119,_11a,flag);\nif(opts.deepCheck){\n$.easyui.forEach(_11a.children||[],true,function(n){\n_118(_119,n,flag);\n});\n}else{\nvar _11c=[];\nif(_11a.children&&_11a.children.length){\n_11c.push(_11a);\n}\n$.easyui.forEach(_11a.children||[],true,function(n){\nif(!n.hidden){\n_118(_119,n,flag);\nif(n.children&&n.children.length){\n_11c.push(n);\n}\n}\n});\nfor(var i=_11c.length-1;i>=0;i--){\nvar node=_11c[i];\n_118(_119,node,_11d(node));\n}\n}\n};\nfunction _118(_11e,_11f,flag){\nvar opts=$.data(_11e,\"tree\").options;\nif(!_11f.checkState||flag==undefined){\nreturn;\n}\nif(_11f.hidden&&!opts.deepCheck){\nreturn;\n}\nvar ck=$(\"#\"+_11f.domId).find(\".tree-checkbox\");\n_11f.checkState=[\"unchecked\",\"checked\",\"indeterminate\"][flag];\n_11f.checked=(_11f.checkState==\"checked\");\nck.removeClass(\"tree-checkbox0 tree-checkbox1 tree-checkbox2\");\nck.addClass(\"tree-checkbox\"+flag);\n};\nfunction _117(_120,_121){\nvar pd=_122(_120,$(\"#\"+_121.domId)[0]);\nif(pd){\n_118(_120,pd,_11d(pd));\n_117(_120,pd);\n}\n};\nfunction _11d(row){\nvar c0=0;\nvar c1=0;\nvar len=0;\n$.easyui.forEach(row.children||[],false,function(r){\nif(r.checkState){\nlen++;\nif(r.checkState==\"checked\"){\nc1++;\n}else{\nif(r.checkState==\"unchecked\"){\nc0++;\n}\n}\n}\n});\nif(len==0){\nreturn undefined;\n}\nvar flag=0;\nif(c0==len){\nflag=0;\n}else{\nif(c1==len){\nflag=1;\n}else{\nflag=2;\n}\n}\nreturn flag;\n};\nfunction _123(_124,_125){\nvar opts=$.data(_124,\"tree\").options;\nif(!opts.checkbox){\nreturn;\n}\nvar node=$(_125);\nvar ck=node.find(\".tree-checkbox\");\nvar _126=_ed(_124,_125);\nif(opts.view.hasCheckbox(_124,_126)){\nif(!ck.length){\n_126.checkState=_126.checkState||\"unchecked\";\n$(\"<span class=\\\"tree-checkbox\\\"></span>\").insertBefore(node.find(\".tree-title\"));\n}\nif(_126.checkState==\"checked\"){\n_10f(_124,_125,true,true);\n}else{\nif(_126.checkState==\"unchecked\"){\n_10f(_124,_125,false,true);\n}else{\nvar flag=_11d(_126);\nif(flag===0){\n_10f(_124,_125,false,true);\n}else{\nif(flag===1){\n_10f(_124,_125,true,true);\n}\n}\n}\n}\n}else{\nck.remove();\n_126.checkState=undefined;\n_126.checked=undefined;\n_117(_124,_126);\n}\n};\nfunction _127(_128,ul,data,_129,_12a){\nvar _12b=$.data(_128,\"tree\");\nvar opts=_12b.options;\nvar _12c=$(ul).prevAll(\"div.tree-node:first\");\ndata=opts.loadFilter.call(_128,data,_12c[0]);\nvar _12d=_12e(_128,\"domId\",_12c.attr(\"id\"));\nif(!_129){\n_12d?_12d.children=data:_12b.data=data;\n$(ul).empty();\n}else{\nif(_12d){\n_12d.children?_12d.children=_12d.children.concat(data):_12d.children=data;\n}else{\n_12b.data=_12b.data.concat(data);\n}\n}\nopts.view.render.call(opts.view,_128,ul,data);\nif(opts.dnd){\n_f2(_128);\n}\nif(_12d){\n_12f(_128,_12d);\n}\nfor(var i=0;i<_12b.tmpIds.length;i++){\n_10f(_128,$(\"#\"+_12b.tmpIds[i])[0],true,true);\n}\n_12b.tmpIds=[];\nsetTimeout(function(){\n_130(_128,_128);\n},0);\nif(!_12a){\nopts.onLoadSuccess.call(_128,_12d,data);\n}\n};\nfunction _130(_131,ul,_132){\nvar opts=$.data(_131,\"tree\").options;\nif(opts.lines){\n$(_131).addClass(\"tree-lines\");\n}else{\n$(_131).removeClass(\"tree-lines\");\nreturn;\n}\nif(!_132){\n_132=true;\n$(_131).find(\"span.tree-indent\").removeClass(\"tree-line tree-join tree-joinbottom\");\n$(_131).find(\"div.tree-node\").removeClass(\"tree-node-last tree-root-first tree-root-one\");\nvar _133=$(_131).tree(\"getRoots\");\nif(_133.length>1){\n$(_133[0].target).addClass(\"tree-root-first\");\n}else{\nif(_133.length==1){\n$(_133[0].target).addClass(\"tree-root-one\");\n}\n}\n}\n$(ul).children(\"li\").each(function(){\nvar node=$(this).children(\"div.tree-node\");\nvar ul=node.next(\"ul\");\nif(ul.length){\nif($(this).next().length){\n_134(node);\n}\n_130(_131,ul,_132);\n}else{\n_135(node);\n}\n});\nvar _136=$(ul).children(\"li:last\").children(\"div.tree-node\").addClass(\"tree-node-last\");\n_136.children(\"span.tree-join\").removeClass(\"tree-join\").addClass(\"tree-joinbottom\");\nfunction _135(node,_137){\nvar icon=node.find(\"span.tree-icon\");\nicon.prev(\"span.tree-indent\").addClass(\"tree-join\");\n};\nfunction _134(node){\nvar _138=node.find(\"span.tree-indent, span.tree-hit\").length;\nnode.next().find(\"div.tree-node\").each(function(){\n$(this).children(\"span:eq(\"+(_138-1)+\")\").addClass(\"tree-line\");\n});\n};\n};\nfunction _139(_13a,ul,_13b,_13c){\nvar opts=$.data(_13a,\"tree\").options;\n_13b=$.extend({},opts.queryParams,_13b||{});\nvar _13d=null;\nif(_13a!=ul){\nvar node=$(ul).prev();\n_13d=_ed(_13a,node[0]);\n}\nif(opts.onBeforeLoad.call(_13a,_13d,_13b)==false){\nreturn;\n}\nvar _13e=$(ul).prev().children(\"span.tree-folder\");\n_13e.addClass(\"tree-loading\");\nvar _13f=opts.loader.call(_13a,_13b,function(data){\n_13e.removeClass(\"tree-loading\");\n_127(_13a,ul,data);\nif(_13c){\n_13c();\n}\n},function(){\n_13e.removeClass(\"tree-loading\");\nopts.onLoadError.apply(_13a,arguments);\nif(_13c){\n_13c();\n}\n});\nif(_13f==false){\n_13e.removeClass(\"tree-loading\");\n}\n};\nfunction _140(_141,_142,_143){\nvar opts=$.data(_141,\"tree\").options;\nvar hit=$(_142).children(\"span.tree-hit\");\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-expanded\")){\nreturn;\n}\nvar node=_ed(_141,_142);\nif(opts.onBeforeExpand.call(_141,node)==false){\nreturn;\n}\nhit.removeClass(\"tree-collapsed tree-collapsed-hover\").addClass(\"tree-expanded\");\nhit.next().addClass(\"tree-folder-open\");\nvar ul=$(_142).next();\nif(ul.length){\nif(opts.animate){\nul.slideDown(\"normal\",function(){\nnode.state=\"open\";\nopts.onExpand.call(_141,node);\nif(_143){\n_143();\n}\n});\n}else{\nul.css(\"display\",\"block\");\nnode.state=\"open\";\nopts.onExpand.call(_141,node);\nif(_143){\n_143();\n}\n}\n}else{\nvar _144=$(\"<ul style=\\\"display:none\\\"></ul>\").insertAfter(_142);\n_139(_141,_144[0],{id:node.id},function(){\nif(_144.is(\":empty\")){\n_144.remove();\n}\nif(opts.animate){\n_144.slideDown(\"normal\",function(){\nnode.state=\"open\";\nopts.onExpand.call(_141,node);\nif(_143){\n_143();\n}\n});\n}else{\n_144.css(\"display\",\"block\");\nnode.state=\"open\";\nopts.onExpand.call(_141,node);\nif(_143){\n_143();\n}\n}\n});\n}\n};\nfunction _145(_146,_147){\nvar opts=$.data(_146,\"tree\").options;\nvar hit=$(_147).children(\"span.tree-hit\");\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-collapsed\")){\nreturn;\n}\nvar node=_ed(_146,_147);\nif(opts.onBeforeCollapse.call(_146,node)==false){\nreturn;\n}\nhit.removeClass(\"tree-expanded tree-expanded-hover\").addClass(\"tree-collapsed\");\nhit.next().removeClass(\"tree-folder-open\");\nvar ul=$(_147).next();\nif(opts.animate){\nul.slideUp(\"normal\",function(){\nnode.state=\"closed\";\nopts.onCollapse.call(_146,node);\n});\n}else{\nul.css(\"display\",\"none\");\nnode.state=\"closed\";\nopts.onCollapse.call(_146,node);\n}\n};\nfunction _148(_149,_14a){\nvar hit=$(_14a).children(\"span.tree-hit\");\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-expanded\")){\n_145(_149,_14a);\n}else{\n_140(_149,_14a);\n}\n};\nfunction _14b(_14c,_14d){\nvar _14e=_14f(_14c,_14d);\nif(_14d){\n_14e.unshift(_ed(_14c,_14d));\n}\nfor(var i=0;i<_14e.length;i++){\n_140(_14c,_14e[i].target);\n}\n};\nfunction _150(_151,_152){\nvar _153=[];\nvar p=_122(_151,_152);\nwhile(p){\n_153.unshift(p);\np=_122(_151,p.target);\n}\nfor(var i=0;i<_153.length;i++){\n_140(_151,_153[i].target);\n}\n};\nfunction _154(_155,_156){\nvar c=$(_155).parent();\nwhile(c[0].tagName!=\"BODY\"&&c.css(\"overflow-y\")!=\"auto\"){\nc=c.parent();\n}\nvar n=$(_156);\nvar ntop=n.offset().top;\nif(c[0].tagName!=\"BODY\"){\nvar ctop=c.offset().top;\nif(ntop<ctop){\nc.scrollTop(c.scrollTop()+ntop-ctop);\n}else{\nif(ntop+n.outerHeight()>ctop+c.outerHeight()-18){\nc.scrollTop(c.scrollTop()+ntop+n.outerHeight()-ctop-c.outerHeight()+18);\n}\n}\n}else{\nc.scrollTop(ntop);\n}\n};\nfunction _157(_158,_159){\nvar _15a=_14f(_158,_159);\nif(_159){\n_15a.unshift(_ed(_158,_159));\n}\nfor(var i=0;i<_15a.length;i++){\n_145(_158,_15a[i].target);\n}\n};\nfunction _15b(_15c,_15d){\nvar node=$(_15d.parent);\nvar data=_15d.data;\nif(!data){\nreturn;\n}\ndata=$.isArray(data)?data:[data];\nif(!data.length){\nreturn;\n}\nvar ul;\nif(node.length==0){\nul=$(_15c);\n}else{\nif(_15e(_15c,node[0])){\nvar _15f=node.find(\"span.tree-icon\");\n_15f.removeClass(\"tree-file\").addClass(\"tree-folder tree-folder-open\");\nvar hit=$(\"<span class=\\\"tree-hit tree-expanded\\\"></span>\").insertBefore(_15f);\nif(hit.prev().length){\nhit.prev().remove();\n}\n}\nul=node.next();\nif(!ul.length){\nul=$(\"<ul></ul>\").insertAfter(node);\n}\n}\n_127(_15c,ul[0],data,true,true);\n};\nfunction _160(_161,_162){\nvar ref=_162.before||_162.after;\nvar _163=_122(_161,ref);\nvar data=_162.data;\nif(!data){\nreturn;\n}\ndata=$.isArray(data)?data:[data];\nif(!data.length){\nreturn;\n}\n_15b(_161,{parent:(_163?_163.target:null),data:data});\nvar _164=_163?_163.children:$(_161).tree(\"getRoots\");\nfor(var i=0;i<_164.length;i++){\nif(_164[i].domId==$(ref).attr(\"id\")){\nfor(var j=data.length-1;j>=0;j--){\n_164.splice((_162.before?i:(i+1)),0,data[j]);\n}\n_164.splice(_164.length-data.length,data.length);\nbreak;\n}\n}\nvar li=$();\nfor(var i=0;i<data.length;i++){\nli=li.add($(\"#\"+data[i].domId).parent());\n}\nif(_162.before){\nli.insertBefore($(ref).parent());\n}else{\nli.insertAfter($(ref).parent());\n}\n};\nfunction _165(_166,_167){\nvar _168=del(_167);\n$(_167).parent().remove();\nif(_168){\nif(!_168.children||!_168.children.length){\nvar node=$(_168.target);\nnode.find(\".tree-icon\").removeClass(\"tree-folder\").addClass(\"tree-file\");\nnode.find(\".tree-hit\").remove();\n$(\"<span class=\\\"tree-indent\\\"></span>\").prependTo(node);\nnode.next().remove();\n}\n_12f(_166,_168);\n}\n_130(_166,_166);\nfunction del(_169){\nvar id=$(_169).attr(\"id\");\nvar _16a=_122(_166,_169);\nvar cc=_16a?_16a.children:$.data(_166,\"tree\").data;\nfor(var i=0;i<cc.length;i++){\nif(cc[i].domId==id){\ncc.splice(i,1);\nbreak;\n}\n}\nreturn _16a;\n};\n};\nfunction _12f(_16b,_16c){\nvar opts=$.data(_16b,\"tree\").options;\nvar node=$(_16c.target);\nvar data=_ed(_16b,_16c.target);\nif(data.iconCls){\nnode.find(\".tree-icon\").removeClass(data.iconCls);\n}\n$.extend(data,_16c);\nnode.find(\".tree-title\").html(opts.formatter.call(_16b,data));\nif(data.iconCls){\nnode.find(\".tree-icon\").addClass(data.iconCls);\n}\n_123(_16b,_16c.target);\n};\nfunction _16d(_16e,_16f){\nif(_16f){\nvar p=_122(_16e,_16f);\nwhile(p){\n_16f=p.target;\np=_122(_16e,_16f);\n}\nreturn _ed(_16e,_16f);\n}else{\nvar _170=_171(_16e);\nreturn _170.length?_170[0]:null;\n}\n};\nfunction _171(_172){\nvar _173=$.data(_172,\"tree\").data;\nfor(var i=0;i<_173.length;i++){\n_174(_173[i]);\n}\nreturn _173;\n};\nfunction _14f(_175,_176){\nvar _177=[];\nvar n=_ed(_175,_176);\nvar data=n?(n.children||[]):$.data(_175,\"tree\").data;\n$.easyui.forEach(data,true,function(node){\n_177.push(_174(node));\n});\nreturn _177;\n};\nfunction _122(_178,_179){\nvar p=$(_179).closest(\"ul\").prevAll(\"div.tree-node:first\");\nreturn _ed(_178,p[0]);\n};\nfunction _17a(_17b,_17c){\n_17c=_17c||\"checked\";\nif(!$.isArray(_17c)){\n_17c=[_17c];\n}\nvar _17d=[];\n$.easyui.forEach($.data(_17b,\"tree\").data,true,function(n){\nif(n.checkState&&$.easyui.indexOfArray(_17c,n.checkState)!=-1){\n_17d.push(_174(n));\n}\n});\nreturn _17d;\n};\nfunction _17e(_17f){\nvar node=$(_17f).find(\"div.tree-node-selected\");\nreturn node.length?_ed(_17f,node[0]):null;\n};\nfunction _180(_181,_182){\nvar data=_ed(_181,_182);\nif(data&&data.children){\n$.easyui.forEach(data.children,true,function(node){\n_174(node);\n});\n}\nreturn data;\n};\nfunction _ed(_183,_184){\nreturn _12e(_183,\"domId\",$(_184).attr(\"id\"));\n};\nfunction _185(_186,_187){\nif($.isFunction(_187)){\nvar fn=_187;\n}else{\nvar _187=typeof _187==\"object\"?_187:{id:_187};\nvar fn=function(node){\nfor(var p in _187){\nif(node[p]!=_187[p]){\nreturn false;\n}\n}\nreturn true;\n};\n}\nvar _188=null;\nvar data=$.data(_186,\"tree\").data;\n$.easyui.forEach(data,true,function(node){\nif(fn.call(_186,node)==true){\n_188=_174(node);\nreturn false;\n}\n});\nreturn _188;\n};\nfunction _12e(_189,_18a,_18b){\nvar _18c={};\n_18c[_18a]=_18b;\nreturn _185(_189,_18c);\n};\nfunction _174(node){\nnode.target=$(\"#\"+node.domId)[0];\nreturn node;\n};\nfunction _18d(_18e,_18f){\nvar opts=$.data(_18e,\"tree\").options;\nvar node=_ed(_18e,_18f);\nif(opts.onBeforeSelect.call(_18e,node)==false){\nreturn;\n}\n$(_18e).find(\"div.tree-node-selected\").removeClass(\"tree-node-selected\");\n$(_18f).addClass(\"tree-node-selected\");\nopts.onSelect.call(_18e,node);\n};\nfunction _15e(_190,_191){\nreturn $(_191).children(\"span.tree-hit\").length==0;\n};\nfunction _192(_193,_194){\nvar opts=$.data(_193,\"tree\").options;\nvar node=_ed(_193,_194);\nif(opts.onBeforeEdit.call(_193,node)==false){\nreturn;\n}\n$(_194).css(\"position\",\"relative\");\nvar nt=$(_194).find(\".tree-title\");\nvar _195=nt.outerWidth();\nnt.empty();\nvar _196=$(\"<input class=\\\"tree-editor\\\">\").appendTo(nt);\n_196.val(node.text).focus();\n_196.width(_195+20);\n_196._outerHeight(opts.editorHeight);\n_196._bind(\"click\",function(e){\nreturn false;\n})._bind(\"mousedown\",function(e){\ne.stopPropagation();\n})._bind(\"mousemove\",function(e){\ne.stopPropagation();\n})._bind(\"keydown\",function(e){\nif(e.keyCode==13){\n_197(_193,_194);\nreturn false;\n}else{\nif(e.keyCode==27){\n_19b(_193,_194);\nreturn false;\n}\n}\n})._bind(\"blur\",function(e){\ne.stopPropagation();\n_197(_193,_194);\n});\n};\nfunction _197(_198,_199){\nvar opts=$.data(_198,\"tree\").options;\n$(_199).css(\"position\",\"\");\nvar _19a=$(_199).find(\"input.tree-editor\");\nvar val=_19a.val();\n_19a.remove();\nvar node=_ed(_198,_199);\nnode.text=val;\n_12f(_198,node);\nopts.onAfterEdit.call(_198,node);\n};\nfunction _19b(_19c,_19d){\nvar opts=$.data(_19c,\"tree\").options;\n$(_19d).css(\"position\",\"\");\n$(_19d).find(\"input.tree-editor\").remove();\nvar node=_ed(_19c,_19d);\n_12f(_19c,node);\nopts.onCancelEdit.call(_19c,node);\n};\nfunction _19e(_19f,q){\nvar _1a0=$.data(_19f,\"tree\");\nvar opts=_1a0.options;\nvar ids={};\n$.easyui.forEach(_1a0.data,true,function(node){\nif(opts.filter.call(_19f,q,node)){\n$(\"#\"+node.domId).removeClass(\"tree-node-hidden\");\nids[node.domId]=1;\nnode.hidden=false;\n}else{\n$(\"#\"+node.domId).addClass(\"tree-node-hidden\");\nnode.hidden=true;\n}\n});\nfor(var id in ids){\n_1a1(id);\n}\nfunction _1a1(_1a2){\nvar p=$(_19f).tree(\"getParent\",$(\"#\"+_1a2)[0]);\nwhile(p){\n$(p.target).removeClass(\"tree-node-hidden\");\np.hidden=false;\np=$(_19f).tree(\"getParent\",p.target);\n}\n};\n};\n$.fn.tree=function(_1a3,_1a4){\nif(typeof _1a3==\"string\"){\nreturn $.fn.tree.methods[_1a3](this,_1a4);\n}\nvar _1a3=_1a3||{};\nreturn this.each(function(){\nvar _1a5=$.data(this,\"tree\");\nvar opts;\nif(_1a5){\nopts=$.extend(_1a5.options,_1a3);\n_1a5.options=opts;\n}else{\nopts=$.extend({},$.fn.tree.defaults,$.fn.tree.parseOptions(this),_1a3);\n$.data(this,\"tree\",{options:opts,tree:_e2(this),data:[],tmpIds:[]});\nvar data=$.fn.tree.parseData(this);\nif(data.length){\n_127(this,this,data);\n}\n}\n_e5(this);\nif(opts.data){\n_127(this,this,$.extend(true,[],opts.data));\n}\n_139(this,this);\n});\n};\n$.fn.tree.methods={options:function(jq){\nreturn $.data(jq[0],\"tree\").options;\n},loadData:function(jq,data){\nreturn jq.each(function(){\n_127(this,this,data);\n});\n},getNode:function(jq,_1a6){\nreturn _ed(jq[0],_1a6);\n},getData:function(jq,_1a7){\nreturn _180(jq[0],_1a7);\n},reload:function(jq,_1a8){\nreturn jq.each(function(){\nif(_1a8){\nvar node=$(_1a8);\nvar hit=node.children(\"span.tree-hit\");\nhit.removeClass(\"tree-expanded tree-expanded-hover\").addClass(\"tree-collapsed\");\nnode.next().remove();\n_140(this,_1a8);\n}else{\n$(this).empty();\n_139(this,this);\n}\n});\n},getRoot:function(jq,_1a9){\nreturn _16d(jq[0],_1a9);\n},getRoots:function(jq){\nreturn _171(jq[0]);\n},getParent:function(jq,_1aa){\nreturn _122(jq[0],_1aa);\n},getChildren:function(jq,_1ab){\nreturn _14f(jq[0],_1ab);\n},getChecked:function(jq,_1ac){\nreturn _17a(jq[0],_1ac);\n},getSelected:function(jq){\nreturn _17e(jq[0]);\n},isLeaf:function(jq,_1ad){\nreturn _15e(jq[0],_1ad);\n},find:function(jq,id){\nreturn _185(jq[0],id);\n},findBy:function(jq,_1ae){\nreturn _12e(jq[0],_1ae.field,_1ae.value);\n},select:function(jq,_1af){\nreturn jq.each(function(){\n_18d(this,_1af);\n});\n},check:function(jq,_1b0){\nreturn jq.each(function(){\n_10f(this,_1b0,true);\n});\n},uncheck:function(jq,_1b1){\nreturn jq.each(function(){\n_10f(this,_1b1,false);\n});\n},collapse:function(jq,_1b2){\nreturn jq.each(function(){\n_145(this,_1b2);\n});\n},expand:function(jq,_1b3){\nreturn jq.each(function(){\n_140(this,_1b3);\n});\n},collapseAll:function(jq,_1b4){\nreturn jq.each(function(){\n_157(this,_1b4);\n});\n},expandAll:function(jq,_1b5){\nreturn jq.each(function(){\n_14b(this,_1b5);\n});\n},expandTo:function(jq,_1b6){\nreturn jq.each(function(){\n_150(this,_1b6);\n});\n},scrollTo:function(jq,_1b7){\nreturn jq.each(function(){\n_154(this,_1b7);\n});\n},toggle:function(jq,_1b8){\nreturn jq.each(function(){\n_148(this,_1b8);\n});\n},append:function(jq,_1b9){\nreturn jq.each(function(){\n_15b(this,_1b9);\n});\n},insert:function(jq,_1ba){\nreturn jq.each(function(){\n_160(this,_1ba);\n});\n},remove:function(jq,_1bb){\nreturn jq.each(function(){\n_165(this,_1bb);\n});\n},pop:function(jq,_1bc){\nvar node=jq.tree(\"getData\",_1bc);\njq.tree(\"remove\",_1bc);\nreturn node;\n},update:function(jq,_1bd){\nreturn jq.each(function(){\n_12f(this,$.extend({},_1bd,{checkState:_1bd.checked?\"checked\":(_1bd.checked===false?\"unchecked\":undefined)}));\n});\n},enableDnd:function(jq){\nreturn jq.each(function(){\n_f2(this);\n});\n},disableDnd:function(jq){\nreturn jq.each(function(){\n_ee(this);\n});\n},beginEdit:function(jq,_1be){\nreturn jq.each(function(){\n_192(this,_1be);\n});\n},endEdit:function(jq,_1bf){\nreturn jq.each(function(){\n_197(this,_1bf);\n});\n},cancelEdit:function(jq,_1c0){\nreturn jq.each(function(){\n_19b(this,_1c0);\n});\n},doFilter:function(jq,q){\nreturn jq.each(function(){\n_19e(this,q);\n});\n}};\n$.fn.tree.parseOptions=function(_1c1){\nvar t=$(_1c1);\nreturn $.extend({},$.parser.parseOptions(_1c1,[\"url\",\"method\",{checkbox:\"boolean\",cascadeCheck:\"boolean\",onlyLeafCheck:\"boolean\"},{animate:\"boolean\",lines:\"boolean\",dnd:\"boolean\"}]));\n};\n$.fn.tree.parseData=function(_1c2){\nvar data=[];\n_1c3(data,$(_1c2));\nreturn data;\nfunction _1c3(aa,tree){\ntree.children(\"li\").each(function(){\nvar node=$(this);\nvar item=$.extend({},$.parser.parseOptions(this,[\"id\",\"iconCls\",\"state\"]),{checked:(node.attr(\"checked\")?true:undefined)});\nitem.text=node.children(\"span\").html();\nif(!item.text){\nitem.text=node.html();\n}\nvar _1c4=node.children(\"ul\");\nif(_1c4.length){\nitem.children=[];\n_1c3(item.children,_1c4);\n}\naa.push(item);\n});\n};\n};\nvar _1c5=1;\nvar _1c6={render:function(_1c7,ul,data){\nvar _1c8=$.data(_1c7,\"tree\");\nvar opts=_1c8.options;\nvar _1c9=$(ul).prev(\".tree-node\");\nvar _1ca=_1c9.length?$(_1c7).tree(\"getNode\",_1c9[0]):null;\nvar _1cb=_1c9.find(\"span.tree-indent, span.tree-hit\").length;\nvar _1cc=$(_1c7).attr(\"id\")||\"\";\nvar cc=_1cd.call(this,_1cb,data);\n$(ul).append(cc.join(\"\"));\nfunction _1cd(_1ce,_1cf){\nvar cc=[];\nfor(var i=0;i<_1cf.length;i++){\nvar item=_1cf[i];\nif(item.state!=\"open\"&&item.state!=\"closed\"){\nitem.state=\"open\";\n}\nitem.domId=_1cc+\"_easyui_tree_\"+_1c5++;\ncc.push(\"<li>\");\ncc.push(\"<div id=\\\"\"+item.domId+\"\\\" class=\\\"tree-node\"+(item.nodeCls?\" \"+item.nodeCls:\"\")+\"\\\">\");\nfor(var j=0;j<_1ce;j++){\ncc.push(\"<span class=\\\"tree-indent\\\"></span>\");\n}\nif(item.state==\"closed\"){\ncc.push(\"<span class=\\\"tree-hit tree-collapsed\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-folder \"+(item.iconCls?item.iconCls:\"\")+\"\\\"></span>\");\n}else{\nif(item.children&&item.children.length){\ncc.push(\"<span class=\\\"tree-hit tree-expanded\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-folder tree-folder-open \"+(item.iconCls?item.iconCls:\"\")+\"\\\"></span>\");\n}else{\ncc.push(\"<span class=\\\"tree-indent\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-file \"+(item.iconCls?item.iconCls:\"\")+\"\\\"></span>\");\n}\n}\nif(this.hasCheckbox(_1c7,item)){\nvar flag=0;\nif(_1ca&&_1ca.checkState==\"checked\"&&opts.cascadeCheck){\nflag=1;\nitem.checked=true;\n}else{\nif(item.checked){\n$.easyui.addArrayItem(_1c8.tmpIds,item.domId);\n}\n}\nitem.checkState=flag?\"checked\":\"unchecked\";\ncc.push(\"<span class=\\\"tree-checkbox tree-checkbox\"+flag+\"\\\"></span>\");\n}else{\nitem.checkState=undefined;\nitem.checked=undefined;\n}\ncc.push(\"<span class=\\\"tree-title\\\">\"+opts.formatter.call(_1c7,item)+\"</span>\");\ncc.push(\"</div>\");\nif(item.children&&item.children.length){\nvar tmp=_1cd.call(this,_1ce+1,item.children);\ncc.push(\"<ul style=\\\"display:\"+(item.state==\"closed\"?\"none\":\"block\")+\"\\\">\");\ncc=cc.concat(tmp);\ncc.push(\"</ul>\");\n}\ncc.push(\"</li>\");\n}\nreturn cc;\n};\n},hasCheckbox:function(_1d0,item){\nvar _1d1=$.data(_1d0,\"tree\");\nvar opts=_1d1.options;\nif(opts.checkbox){\nif($.isFunction(opts.checkbox)){\nif(opts.checkbox.call(_1d0,item)){\nreturn true;\n}else{\nreturn false;\n}\n}else{\nif(opts.onlyLeafCheck){\nif(item.state==\"open\"&&!(item.children&&item.children.length)){\nreturn true;\n}\n}else{\nreturn true;\n}\n}\n}\nreturn false;\n}};\n$.fn.tree.defaults={url:null,method:\"post\",animate:false,checkbox:false,cascadeCheck:true,onlyLeafCheck:false,lines:false,dnd:false,editorHeight:26,data:null,queryParams:{},formatter:function(node){\nreturn node.text;\n},filter:function(q,node){\nvar qq=[];\n$.map($.isArray(q)?q:[q],function(q){\nq=$.trim(q);\nif(q){\nqq.push(q);\n}\n});\nfor(var i=0;i<qq.length;i++){\nvar _1d2=node.text.toLowerCase().indexOf(qq[i].toLowerCase());\nif(_1d2>=0){\nreturn true;\n}\n}\nreturn !qq.length;\n},loader:function(_1d3,_1d4,_1d5){\nvar opts=$(this).tree(\"options\");\nif(!opts.url){\nreturn false;\n}\n$.ajax({type:opts.method,url:opts.url,data:_1d3,dataType:\"json\",success:function(data){\n_1d4(data);\n},error:function(){\n_1d5.apply(this,arguments);\n}});\n},loadFilter:function(data,_1d6){\nreturn data;\n},view:_1c6,onBeforeLoad:function(node,_1d7){\n},onLoadSuccess:function(node,data){\n},onLoadError:function(){\n},onClick:function(node){\n},onDblClick:function(node){\n},onBeforeExpand:function(node){\n},onExpand:function(node){\n},onBeforeCollapse:function(node){\n},onCollapse:function(node){\n},onBeforeCheck:function(node,_1d8){\n},onCheck:function(node,_1d9){\n},onBeforeSelect:function(node){\n},onSelect:function(node){\n},onContextMenu:function(e,node){\n},onBeforeDrag:function(node){\n},onStartDrag:function(node){\n},onStopDrag:function(node){\n},onDragEnter:function(_1da,_1db){\n},onDragOver:function(_1dc,_1dd){\n},onDragLeave:function(_1de,_1df){\n},onBeforeDrop:function(_1e0,_1e1,_1e2){\n},onDrop:function(_1e3,_1e4,_1e5){\n},onBeforeEdit:function(node){\n},onAfterEdit:function(node){\n},onCancelEdit:function(node){\n}};\n})(jQuery);\n(function($){\nfunction init(_1e6){\n$(_1e6).addClass(\"progressbar\");\n$(_1e6).html(\"<div class=\\\"progressbar-text\\\"></div><div class=\\\"progressbar-value\\\"><div class=\\\"progressbar-text\\\"></div></div>\");\n$(_1e6)._bind(\"_resize\",function(e,_1e7){\nif($(this).hasClass(\"easyui-fluid\")||_1e7){\n_1e8(_1e6);\n}\nreturn false;\n});\nreturn $(_1e6);\n};\nfunction _1e8(_1e9,_1ea){\nvar opts=$.data(_1e9,\"progressbar\").options;\nvar bar=$.data(_1e9,\"progressbar\").bar;\nif(_1ea){\nopts.width=_1ea;\n}\nbar._size(opts);\nbar.find(\"div.progressbar-text\").css(\"width\",bar.width());\nbar.find(\"div.progressbar-text,div.progressbar-value\").css({height:bar.height()+\"px\",lineHeight:bar.height()+\"px\"});\n};\n$.fn.progressbar=function(_1eb,_1ec){\nif(typeof _1eb==\"string\"){\nvar _1ed=$.fn.progressbar.methods[_1eb];\nif(_1ed){\nreturn _1ed(this,_1ec);\n}\n}\n_1eb=_1eb||{};\nreturn this.each(function(){\nvar _1ee=$.data(this,\"progressbar\");\nif(_1ee){\n$.extend(_1ee.options,_1eb);\n}else{\n_1ee=$.data(this,\"progressbar\",{options:$.extend({},$.fn.progressbar.defaults,$.fn.progressbar.parseOptions(this),_1eb),bar:init(this)});\n}\n$(this).progressbar(\"setValue\",_1ee.options.value);\n_1e8(this);\n});\n};\n$.fn.progressbar.methods={options:function(jq){\nreturn $.data(jq[0],\"progressbar\").options;\n},resize:function(jq,_1ef){\nreturn jq.each(function(){\n_1e8(this,_1ef);\n});\n},getValue:function(jq){\nreturn $.data(jq[0],\"progressbar\").options.value;\n},setValue:function(jq,_1f0){\nif(_1f0<0){\n_1f0=0;\n}\nif(_1f0>100){\n_1f0=100;\n}\nreturn jq.each(function(){\nvar opts=$.data(this,\"progressbar\").options;\nvar text=opts.text.replace(/{value}/,_1f0);\nvar _1f1=opts.value;\nopts.value=_1f0;\n$(this).find(\"div.progressbar-value\").width(_1f0+\"%\");\n$(this).find(\"div.progressbar-text\").html(text);\nif(_1f1!=_1f0){\nopts.onChange.call(this,_1f0,_1f1);\n}\n});\n}};\n$.fn.progressbar.parseOptions=function(_1f2){\nreturn $.extend({},$.parser.parseOptions(_1f2,[\"width\",\"height\",\"text\",{value:\"number\"}]));\n};\n$.fn.progressbar.defaults={width:\"auto\",height:22,value:0,text:\"{value}%\",onChange:function(_1f3,_1f4){\n}};\n})(jQuery);\n(function($){\nfunction init(_1f5){\n$(_1f5).addClass(\"tooltip-f\");\n};\nfunction _1f6(_1f7){\nvar opts=$.data(_1f7,\"tooltip\").options;\n$(_1f7)._unbind(\".tooltip\")._bind(opts.showEvent+\".tooltip\",function(e){\n$(_1f7).tooltip(\"show\",e);\n})._bind(opts.hideEvent+\".tooltip\",function(e){\n$(_1f7).tooltip(\"hide\",e);\n})._bind(\"mousemove.tooltip\",function(e){\nif(opts.trackMouse){\nopts.trackMouseX=e.pageX;\nopts.trackMouseY=e.pageY;\n$(_1f7).tooltip(\"reposition\");\n}\n});\n};\nfunction _1f8(_1f9){\nvar _1fa=$.data(_1f9,\"tooltip\");\nif(_1fa.showTimer){\nclearTimeout(_1fa.showTimer);\n_1fa.showTimer=null;\n}\nif(_1fa.hideTimer){\nclearTimeout(_1fa.hideTimer);\n_1fa.hideTimer=null;\n}\n};\nfunction _1fb(_1fc){\nvar _1fd=$.data(_1fc,\"tooltip\");\nif(!_1fd||!_1fd.tip){\nreturn;\n}\nvar opts=_1fd.options;\nvar tip=_1fd.tip;\nvar pos={left:-100000,top:-100000};\nif($(_1fc).is(\":visible\")){\npos=_1fe(opts.position);\nif(opts.position==\"top\"&&pos.top<0){\npos=_1fe(\"bottom\");\n}else{\nif((opts.position==\"bottom\")&&(pos.top+tip._outerHeight()>$(window)._outerHeight()+$(document).scrollTop())){\npos=_1fe(\"top\");\n}\n}\nif(pos.left<0){\nif(opts.position==\"left\"){\npos=_1fe(\"right\");\n}else{\n$(_1fc).tooltip(\"arrow\").css(\"left\",tip._outerWidth()/2+pos.left);\npos.left=0;\n}\n}else{\nif(pos.left+tip._outerWidth()>$(window)._outerWidth()+$(document)._scrollLeft()){\nif(opts.position==\"right\"){\npos=_1fe(\"left\");\n}else{\nvar left=pos.left;\npos.left=$(window)._outerWidth()+$(document)._scrollLeft()-tip._outerWidth();\n$(_1fc).tooltip(\"arrow\").css(\"left\",tip._outerWidth()/2-(pos.left-left));\n}\n}\n}\n}\ntip.css({left:pos.left,top:pos.top,zIndex:(opts.zIndex!=undefined?opts.zIndex:($.fn.window?$.fn.window.defaults.zIndex++:\"\"))});\nopts.onPosition.call(_1fc,pos.left,pos.top);\nfunction _1fe(_1ff){\nopts.position=_1ff||\"bottom\";\ntip.removeClass(\"tooltip-top tooltip-bottom tooltip-left tooltip-right\").addClass(\"tooltip-\"+opts.position);\nvar left,top;\nvar _200=$.isFunction(opts.deltaX)?opts.deltaX.call(_1fc,opts.position):opts.deltaX;\nvar _201=$.isFunction(opts.deltaY)?opts.deltaY.call(_1fc,opts.position):opts.deltaY;\nif(opts.trackMouse){\nt=$();\nleft=opts.trackMouseX+_200;\ntop=opts.trackMouseY+_201;\n}else{\nvar t=$(_1fc);\nleft=t.offset().left+_200;\ntop=t.offset().top+_201;\n}\nswitch(opts.position){\ncase \"right\":\nleft+=t._outerWidth()+12+(opts.trackMouse?12:0);\nif(opts.valign==\"middle\"){\ntop-=(tip._outerHeight()-t._outerHeight())/2;\n}\nbreak;\ncase \"left\":\nleft-=tip._outerWidth()+12+(opts.trackMouse?12:0);\nif(opts.valign==\"middle\"){\ntop-=(tip._outerHeight()-t._outerHeight())/2;\n}\nbreak;\ncase \"top\":\nleft-=(tip._outerWidth()-t._outerWidth())/2;\ntop-=tip._outerHeight()+12+(opts.trackMouse?12:0);\nbreak;\ncase \"bottom\":\nleft-=(tip._outerWidth()-t._outerWidth())/2;\ntop+=t._outerHeight()+12+(opts.trackMouse?12:0);\nbreak;\n}\nreturn {left:left,top:top};\n};\n};\nfunction _202(_203,e){\nvar _204=$.data(_203,\"tooltip\");\nvar opts=_204.options;\nvar tip=_204.tip;\nif(!tip){\ntip=$(\"<div tabindex=\\\"-1\\\" class=\\\"tooltip\\\">\"+\"<div class=\\\"tooltip-content\\\"></div>\"+\"<div class=\\\"tooltip-arrow-outer\\\"></div>\"+\"<div class=\\\"tooltip-arrow\\\"></div>\"+\"</div>\").appendTo(\"body\");\n_204.tip=tip;\n_205(_203);\n}\n_1f8(_203);\n_204.showTimer=setTimeout(function(){\n$(_203).tooltip(\"reposition\");\ntip.show();\nopts.onShow.call(_203,e);\nvar _206=tip.children(\".tooltip-arrow-outer\");\nvar _207=tip.children(\".tooltip-arrow\");\nvar bc=\"border-\"+opts.position+\"-color\";\n_206.add(_207).css({borderTopColor:\"\",borderBottomColor:\"\",borderLeftColor:\"\",borderRightColor:\"\"});\n_206.css(bc,tip.css(bc));\n_207.css(bc,tip.css(\"backgroundColor\"));\n},opts.showDelay);\n};\nfunction _208(_209,e){\nvar _20a=$.data(_209,\"tooltip\");\nif(_20a&&_20a.tip){\n_1f8(_209);\n_20a.hideTimer=setTimeout(function(){\n_20a.tip.hide();\n_20a.options.onHide.call(_209,e);\n},_20a.options.hideDelay);\n}\n};\nfunction _205(_20b,_20c){\nvar _20d=$.data(_20b,\"tooltip\");\nvar opts=_20d.options;\nif(_20c){\nopts.content=_20c;\n}\nif(!_20d.tip){\nreturn;\n}\nvar cc=typeof opts.content==\"function\"?opts.content.call(_20b):opts.content;\n_20d.tip.children(\".tooltip-content\").html(cc);\nopts.onUpdate.call(_20b,cc);\n};\nfunction _20e(_20f){\nvar _210=$.data(_20f,\"tooltip\");\nif(_210){\n_1f8(_20f);\nvar opts=_210.options;\nif(_210.tip){\n_210.tip.remove();\n}\nif(opts._title){\n$(_20f).attr(\"title\",opts._title);\n}\n$.removeData(_20f,\"tooltip\");\n$(_20f)._unbind(\".tooltip\").removeClass(\"tooltip-f\");\nopts.onDestroy.call(_20f);\n}\n};\n$.fn.tooltip=function(_211,_212){\nif(typeof _211==\"string\"){\nreturn $.fn.tooltip.methods[_211](this,_212);\n}\n_211=_211||{};\nreturn this.each(function(){\nvar _213=$.data(this,\"tooltip\");\nif(_213){\n$.extend(_213.options,_211);\n}else{\n$.data(this,\"tooltip\",{options:$.extend({},$.fn.tooltip.defaults,$.fn.tooltip.parseOptions(this),_211)});\ninit(this);\n}\n_1f6(this);\n_205(this);\n});\n};\n$.fn.tooltip.methods={options:function(jq){\nreturn $.data(jq[0],\"tooltip\").options;\n},tip:function(jq){\nreturn $.data(jq[0],\"tooltip\").tip;\n},arrow:function(jq){\nreturn jq.tooltip(\"tip\").children(\".tooltip-arrow-outer,.tooltip-arrow\");\n},show:function(jq,e){\nreturn jq.each(function(){\n_202(this,e);\n});\n},hide:function(jq,e){\nreturn jq.each(function(){\n_208(this,e);\n});\n},update:function(jq,_214){\nreturn jq.each(function(){\n_205(this,_214);\n});\n},reposition:function(jq){\nreturn jq.each(function(){\n_1fb(this);\n});\n},destroy:function(jq){\nreturn jq.each(function(){\n_20e(this);\n});\n}};\n$.fn.tooltip.parseOptions=function(_215){\nvar t=$(_215);\nvar opts=$.extend({},$.parser.parseOptions(_215,[\"position\",\"showEvent\",\"hideEvent\",\"content\",{trackMouse:\"boolean\",deltaX:\"number\",deltaY:\"number\",showDelay:\"number\",hideDelay:\"number\"}]),{_title:t.attr(\"title\")});\nt.attr(\"title\",\"\");\nif(!opts.content){\nopts.content=opts._title;\n}\nreturn opts;\n};\n$.fn.tooltip.defaults={position:\"bottom\",valign:\"middle\",content:null,trackMouse:false,deltaX:0,deltaY:0,showEvent:\"mouseenter\",hideEvent:\"mouseleave\",showDelay:200,hideDelay:100,onShow:function(e){\n},onHide:function(e){\n},onUpdate:function(_216){\n},onPosition:function(left,top){\n},onDestroy:function(){\n}};\n})(jQuery);\n(function($){\n$.fn._remove=function(){\nreturn this.each(function(){\n$(this).remove();\ntry{\nthis.outerHTML=\"\";\n}\ncatch(err){\n}\n});\n};\nfunction _217(node){\nnode._remove();\n};\nfunction _218(_219,_21a){\nvar _21b=$.data(_219,\"panel\");\nvar opts=_21b.options;\nvar _21c=_21b.panel;\nvar _21d=_21c.children(\".panel-header\");\nvar _21e=_21c.children(\".panel-body\");\nvar _21f=_21c.children(\".panel-footer\");\nvar _220=(opts.halign==\"left\"||opts.halign==\"right\");\nif(_21a){\n$.extend(opts,{width:_21a.width,height:_21a.height,minWidth:_21a.minWidth,maxWidth:_21a.maxWidth,minHeight:_21a.minHeight,maxHeight:_21a.maxHeight,left:_21a.left,top:_21a.top});\nopts.hasResized=false;\n}\nvar _221=_21c.outerWidth();\nvar _222=_21c.outerHeight();\n_21c._size(opts);\nvar _223=_21c.outerWidth();\nvar _224=_21c.outerHeight();\nif(opts.hasResized&&(_221==_223&&_222==_224)){\nreturn;\n}\nopts.hasResized=true;\nif(!_220){\n_21d._outerWidth(_21c.width());\n}\n_21e._outerWidth(_21c.width());\nif(!isNaN(parseInt(opts.height))){\nif(_220){\nif(opts.header){\nvar _225=$(opts.header)._outerWidth();\n}else{\n_21d.css(\"width\",\"\");\nvar _225=_21d._outerWidth();\n}\nvar _226=_21d.find(\".panel-title\");\n_225+=Math.min(_226._outerWidth(),_226._outerHeight());\nvar _227=_21c.height();\n_21d._outerWidth(_225)._outerHeight(_227);\n_226._outerWidth(_21d.height());\n_21e._outerWidth(_21c.width()-_225-_21f._outerWidth())._outerHeight(_227);\n_21f._outerHeight(_227);\n_21e.css({left:\"\",right:\"\"});\nif(_21d.length){\n_21e.css(opts.halign,(_21d.position()[opts.halign]+_225)+\"px\");\n}\nopts.panelCssWidth=_21c.css(\"width\");\nif(opts.collapsed){\n_21c._outerWidth(_225+_21f._outerWidth());\n}\n}else{\n_21e._outerHeight(_21c.height()-_21d._outerHeight()-_21f._outerHeight());\n}\n}else{\n_21e.css(\"height\",\"\");\nvar min=$.parser.parseValue(\"minHeight\",opts.minHeight,_21c.parent());\nvar max=$.parser.parseValue(\"maxHeight\",opts.maxHeight,_21c.parent());\nvar _228=_21d._outerHeight()+_21f._outerHeight()+_21c._outerHeight()-_21c.height();\n_21e._size(\"minHeight\",min?(min-_228):\"\");\n_21e._size(\"maxHeight\",max?(max-_228):\"\");\n}\n_21c.css({height:(_220?undefined:\"\"),minHeight:\"\",maxHeight:\"\",left:opts.left,top:opts.top});\nopts.onResize.apply(_219,[opts.width,opts.height]);\n$(_219).panel(\"doLayout\");\n};\nfunction _229(_22a,_22b){\nvar _22c=$.data(_22a,\"panel\");\nvar opts=_22c.options;\nvar _22d=_22c.panel;\nif(_22b){\nif(_22b.left!=null){\nopts.left=_22b.left;\n}\nif(_22b.top!=null){\nopts.top=_22b.top;\n}\n}\n_22d.css({left:opts.left,top:opts.top});\n_22d.find(\".tooltip-f\").each(function(){\n$(this).tooltip(\"reposition\");\n});\nopts.onMove.apply(_22a,[opts.left,opts.top]);\n};\nfunction _22e(_22f){\n$(_22f).addClass(\"panel-body\")._size(\"clear\");\nvar _230=$(\"<div class=\\\"panel\\\"></div>\").insertBefore(_22f);\n_230[0].appendChild(_22f);\n_230._bind(\"_resize\",function(e,_231){\nif($(this).hasClass(\"easyui-fluid\")||_231){\n_218(_22f,{});\n}\nreturn false;\n});\nreturn _230;\n};\nfunction _232(_233){\nvar _234=$.data(_233,\"panel\");\nvar opts=_234.options;\nvar _235=_234.panel;\n_235.css(opts.style);\n_235.addClass(opts.cls);\n_235.removeClass(\"panel-hleft panel-hright\").addClass(\"panel-h\"+opts.halign);\n_236();\n_237();\nvar _238=$(_233).panel(\"header\");\nvar body=$(_233).panel(\"body\");\nvar _239=$(_233).siblings(\".panel-footer\");\nif(opts.border){\n_238.removeClass(\"panel-header-noborder\");\nbody.removeClass(\"panel-body-noborder\");\n_239.removeClass(\"panel-footer-noborder\");\n}else{\n_238.addClass(\"panel-header-noborder\");\nbody.addClass(\"panel-body-noborder\");\n_239.addClass(\"panel-footer-noborder\");\n}\n_238.addClass(opts.headerCls);\nbody.addClass(opts.bodyCls);\n$(_233).attr(\"id\",opts.id||\"\");\nif(opts.content){\n$(_233).panel(\"clear\");\n$(_233).html(opts.content);\n$.parser.parse($(_233));\n}\nfunction _236(){\nif(opts.noheader||(!opts.title&&!opts.header)){\n_217(_235.children(\".panel-header\"));\n_235.children(\".panel-body\").addClass(\"panel-body-noheader\");\n}else{\nif(opts.header){\n$(opts.header).addClass(\"panel-header\").prependTo(_235);\n}else{\nvar _23a=_235.children(\".panel-header\");\nif(!_23a.length){\n_23a=$(\"<div class=\\\"panel-header\\\"></div>\").prependTo(_235);\n}\nif(!$.isArray(opts.tools)){\n_23a.find(\"div.panel-tool .panel-tool-a\").appendTo(opts.tools);\n}\n_23a.empty();\nvar _23b=$(\"<div class=\\\"panel-title\\\"></div>\").html(opts.title).appendTo(_23a);\nif(opts.iconCls){\n_23b.addClass(\"panel-with-icon\");\n$(\"<div class=\\\"panel-icon\\\"></div>\").addClass(opts.iconCls).appendTo(_23a);\n}\nif(opts.halign==\"left\"||opts.halign==\"right\"){\n_23b.addClass(\"panel-title-\"+opts.titleDirection);\n}\nvar tool=$(\"<div class=\\\"panel-tool\\\"></div>\").appendTo(_23a);\ntool._bind(\"click\",function(e){\ne.stopPropagation();\n});\nif(opts.tools){\nif($.isArray(opts.tools)){\n$.map(opts.tools,function(t){\n_23c(tool,t.iconCls,eval(t.handler));\n});\n}else{\n$(opts.tools).children().each(function(){\n$(this).addClass($(this).attr(\"iconCls\")).addClass(\"panel-tool-a\").appendTo(tool);\n});\n}\n}\nif(opts.collapsible){\n_23c(tool,\"panel-tool-collapse\",function(){\nif(opts.collapsed==true){\n_25d(_233,true);\n}else{\n_24e(_233,true);\n}\n});\n}\nif(opts.minimizable){\n_23c(tool,\"panel-tool-min\",function(){\n_263(_233);\n});\n}\nif(opts.maximizable){\n_23c(tool,\"panel-tool-max\",function(){\nif(opts.maximized==true){\n_266(_233);\n}else{\n_24d(_233);\n}\n});\n}\nif(opts.closable){\n_23c(tool,\"panel-tool-close\",function(){\n_24f(_233);\n});\n}\n}\n_235.children(\"div.panel-body\").removeClass(\"panel-body-noheader\");\n}\n};\nfunction _23c(c,icon,_23d){\nvar a=$(\"<a href=\\\"javascript:;\\\"></a>\").addClass(icon).appendTo(c);\na._bind(\"click\",_23d);\n};\nfunction _237(){\nif(opts.footer){\n$(opts.footer).addClass(\"panel-footer\").appendTo(_235);\n$(_233).addClass(\"panel-body-nobottom\");\n}else{\n_235.children(\".panel-footer\").remove();\n$(_233).removeClass(\"panel-body-nobottom\");\n}\n};\n};\nfunction _23e(_23f,_240){\nvar _241=$.data(_23f,\"panel\");\nvar opts=_241.options;\nif(_242){\nopts.queryParams=_240;\n}\nif(!opts.href){\nreturn;\n}\nif(!_241.isLoaded||!opts.cache){\nvar _242=$.extend({},opts.queryParams);\nif(opts.onBeforeLoad.call(_23f,_242)==false){\nreturn;\n}\n_241.isLoaded=false;\nif(opts.loadingMessage){\n$(_23f).panel(\"clear\");\n$(_23f).html($(\"<div class=\\\"panel-loading\\\"></div>\").html(opts.loadingMessage));\n}\nopts.loader.call(_23f,_242,function(data){\nvar _243=opts.extractor.call(_23f,data);\n$(_23f).panel(\"clear\");\n$(_23f).html(_243);\n$.parser.parse($(_23f));\nopts.onLoad.apply(_23f,arguments);\n_241.isLoaded=true;\n},function(){\nopts.onLoadError.apply(_23f,arguments);\n});\n}\n};\nfunction _244(_245){\nvar t=$(_245);\nt.find(\".combo-f\").each(function(){\n$(this).combo(\"destroy\");\n});\nt.find(\".m-btn\").each(function(){\n$(this).menubutton(\"destroy\");\n});\nt.find(\".s-btn\").each(function(){\n$(this).splitbutton(\"destroy\");\n});\nt.find(\".tooltip-f\").each(function(){\n$(this).tooltip(\"destroy\");\n});\nt.children(\"div\").each(function(){\n$(this)._size(\"unfit\");\n});\nt.empty();\n};\nfunction _246(_247){\n$(_247).panel(\"doLayout\",true);\n};\nfunction _248(_249,_24a){\nvar _24b=$.data(_249,\"panel\");\nvar opts=_24b.options;\nvar _24c=_24b.panel;\nif(_24a!=true){\nif(opts.onBeforeOpen.call(_249)==false){\nreturn;\n}\n}\n_24c.stop(true,true);\nif($.isFunction(opts.openAnimation)){\nopts.openAnimation.call(_249,cb);\n}else{\nswitch(opts.openAnimation){\ncase \"slide\":\n_24c.slideDown(opts.openDuration,cb);\nbreak;\ncase \"fade\":\n_24c.fadeIn(opts.openDuration,cb);\nbreak;\ncase \"show\":\n_24c.show(opts.openDuration,cb);\nbreak;\ndefault:\n_24c.show();\ncb();\n}\n}\nfunction cb(){\nopts.closed=false;\nopts.minimized=false;\nvar tool=_24c.children(\".panel-header\").find(\"a.panel-tool-restore\");\nif(tool.length){\nopts.maximized=true;\n}\nopts.onOpen.call(_249);\nif(opts.maximized==true){\nopts.maximized=false;\n_24d(_249);\n}\nif(opts.collapsed==true){\nopts.collapsed=false;\n_24e(_249);\n}\nif(!opts.collapsed){\nif(opts.href&&(!_24b.isLoaded||!opts.cache)){\n_23e(_249);\n_246(_249);\nopts.doneLayout=true;\n}\n}\nif(!opts.doneLayout){\nopts.doneLayout=true;\n_246(_249);\n}\n};\n};\nfunction _24f(_250,_251){\nvar _252=$.data(_250,\"panel\");\nvar opts=_252.options;\nvar _253=_252.panel;\nif(_251!=true){\nif(opts.onBeforeClose.call(_250)==false){\nreturn;\n}\n}\n_253.find(\".tooltip-f\").each(function(){\n$(this).tooltip(\"hide\");\n});\n_253.stop(true,true);\n_253._size(\"unfit\");\nif($.isFunction(opts.closeAnimation)){\nopts.closeAnimation.call(_250,cb);\n}else{\nswitch(opts.closeAnimation){\ncase \"slide\":\n_253.slideUp(opts.closeDuration,cb);\nbreak;\ncase \"fade\":\n_253.fadeOut(opts.closeDuration,cb);\nbreak;\ncase \"hide\":\n_253.hide(opts.closeDuration,cb);\nbreak;\ndefault:\n_253.hide();\ncb();\n}\n}\nfunction cb(){\nopts.closed=true;\nopts.onClose.call(_250);\n};\n};\nfunction _254(_255,_256){\nvar _257=$.data(_255,\"panel\");\nvar opts=_257.options;\nvar _258=_257.panel;\nif(_256!=true){\nif(opts.onBeforeDestroy.call(_255)==false){\nreturn;\n}\n}\n$(_255).panel(\"clear\").panel(\"clear\",\"footer\");\n_217(_258);\nopts.onDestroy.call(_255);\n};\nfunction _24e(_259,_25a){\nvar opts=$.data(_259,\"panel\").options;\nvar _25b=$.data(_259,\"panel\").panel;\nvar body=_25b.children(\".panel-body\");\nvar _25c=_25b.children(\".panel-header\");\nvar tool=_25c.find(\"a.panel-tool-collapse\");\nif(opts.collapsed==true){\nreturn;\n}\nbody.stop(true,true);\nif(opts.onBeforeCollapse.call(_259)==false){\nreturn;\n}\ntool.addClass(\"panel-tool-expand\");\nif(_25a==true){\nif(opts.halign==\"left\"||opts.halign==\"right\"){\n_25b.animate({width:_25c._outerWidth()+_25b.children(\".panel-footer\")._outerWidth()},function(){\ncb();\n});\n}else{\nbody.slideUp(\"normal\",function(){\ncb();\n});\n}\n}else{\nif(opts.halign==\"left\"||opts.halign==\"right\"){\n_25b._outerWidth(_25c._outerWidth()+_25b.children(\".panel-footer\")._outerWidth());\n}\ncb();\n}\nfunction cb(){\nbody.hide();\nopts.collapsed=true;\nopts.onCollapse.call(_259);\n};\n};\nfunction _25d(_25e,_25f){\nvar opts=$.data(_25e,\"panel\").options;\nvar _260=$.data(_25e,\"panel\").panel;\nvar body=_260.children(\".panel-body\");\nvar tool=_260.children(\".panel-header\").find(\"a.panel-tool-collapse\");\nif(opts.collapsed==false){\nreturn;\n}\nbody.stop(true,true);\nif(opts.onBeforeExpand.call(_25e)==false){\nreturn;\n}\ntool.removeClass(\"panel-tool-expand\");\nif(_25f==true){\nif(opts.halign==\"left\"||opts.halign==\"right\"){\nbody.show();\n_260.animate({width:opts.panelCssWidth},function(){\ncb();\n});\n}else{\nbody.slideDown(\"normal\",function(){\ncb();\n});\n}\n}else{\nif(opts.halign==\"left\"||opts.halign==\"right\"){\n_260.css(\"width\",opts.panelCssWidth);\n}\ncb();\n}\nfunction cb(){\nbody.show();\nopts.collapsed=false;\nopts.onExpand.call(_25e);\n_23e(_25e);\n_246(_25e);\n};\n};\nfunction _24d(_261){\nvar opts=$.data(_261,\"panel\").options;\nvar _262=$.data(_261,\"panel\").panel;\nvar tool=_262.children(\".panel-header\").find(\"a.panel-tool-max\");\nif(opts.maximized==true){\nreturn;\n}\ntool.addClass(\"panel-tool-restore\");\nif(!$.data(_261,\"panel\").original){\n$.data(_261,\"panel\").original={width:opts.width,height:opts.height,left:opts.left,top:opts.top,fit:opts.fit};\n}\nopts.left=0;\nopts.top=0;\nopts.fit=true;\n_218(_261);\nopts.minimized=false;\nopts.maximized=true;\nopts.onMaximize.call(_261);\n};\nfunction _263(_264){\nvar opts=$.data(_264,\"panel\").options;\nvar _265=$.data(_264,\"panel\").panel;\n_265._size(\"unfit\");\n_265.hide();\nopts.minimized=true;\nopts.maximized=false;\nopts.onMinimize.call(_264);\n};\nfunction _266(_267){\nvar opts=$.data(_267,\"panel\").options;\nvar _268=$.data(_267,\"panel\").panel;\nvar tool=_268.children(\".panel-header\").find(\"a.panel-tool-max\");\nif(opts.maximized==false){\nreturn;\n}\n_268.show();\ntool.removeClass(\"panel-tool-restore\");\n$.extend(opts,$.data(_267,\"panel\").original);\n_218(_267);\nopts.minimized=false;\nopts.maximized=false;\n$.data(_267,\"panel\").original=null;\nopts.onRestore.call(_267);\n};\nfunction _269(_26a,_26b){\n$.data(_26a,\"panel\").options.title=_26b;\n$(_26a).panel(\"header\").find(\"div.panel-title\").html(_26b);\n};\nvar _26c=null;\n$(window)._unbind(\".panel\")._bind(\"resize.panel\",function(){\nif(_26c){\nclearTimeout(_26c);\n}\n_26c=setTimeout(function(){\nvar _26d=$(\"body.layout\");\nif(_26d.length){\n_26d.layout(\"resize\");\n$(\"body\").children(\".easyui-fluid:visible\").each(function(){\n$(this).triggerHandler(\"_resize\");\n});\n}else{\n$(\"body\").panel(\"doLayout\");\n}\n_26c=null;\n},100);\n});\n$.fn.panel=function(_26e,_26f){\nif(typeof _26e==\"string\"){\nreturn $.fn.panel.methods[_26e](this,_26f);\n}\n_26e=_26e||{};\nreturn this.each(function(){\nvar _270=$.data(this,\"panel\");\nvar opts;\nif(_270){\nopts=$.extend(_270.options,_26e);\n_270.isLoaded=false;\n}else{\nopts=$.extend({},$.fn.panel.defaults,$.fn.panel.parseOptions(this),_26e);\n$(this).attr(\"title\",\"\");\n_270=$.data(this,\"panel\",{options:opts,panel:_22e(this),isLoaded:false});\n}\n_232(this);\n$(this).show();\nif(opts.doSize==true){\n_270.panel.css(\"display\",\"block\");\n_218(this);\n}\nif(opts.closed==true||opts.minimized==true){\n_270.panel.hide();\n}else{\n_248(this);\n}\n});\n};\n$.fn.panel.methods={options:function(jq){\nreturn $.data(jq[0],\"panel\").options;\n},panel:function(jq){\nreturn $.data(jq[0],\"panel\").panel;\n},header:function(jq){\nreturn $.data(jq[0],\"panel\").panel.children(\".panel-header\");\n},footer:function(jq){\nreturn jq.panel(\"panel\").children(\".panel-footer\");\n},body:function(jq){\nreturn $.data(jq[0],\"panel\").panel.children(\".panel-body\");\n},setTitle:function(jq,_271){\nreturn jq.each(function(){\n_269(this,_271);\n});\n},open:function(jq,_272){\nreturn jq.each(function(){\n_248(this,_272);\n});\n},close:function(jq,_273){\nreturn jq.each(function(){\n_24f(this,_273);\n});\n},destroy:function(jq,_274){\nreturn jq.each(function(){\n_254(this,_274);\n});\n},clear:function(jq,type){\nreturn jq.each(function(){\n_244(type==\"footer\"?$(this).panel(\"footer\"):this);\n});\n},refresh:function(jq,href){\nreturn jq.each(function(){\nvar _275=$.data(this,\"panel\");\n_275.isLoaded=false;\nif(href){\nif(typeof href==\"string\"){\n_275.options.href=href;\n}else{\n_275.options.queryParams=href;\n}\n}\n_23e(this);\n});\n},resize:function(jq,_276){\nreturn jq.each(function(){\n_218(this,_276||{});\n});\n},doLayout:function(jq,all){\nreturn jq.each(function(){\n_277(this,\"body\");\n_277($(this).siblings(\".panel-footer\")[0],\"footer\");\nfunction _277(_278,type){\nif(!_278){\nreturn;\n}\nvar _279=_278==$(\"body\")[0];\nvar s=$(_278).find(\"div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible,.easyui-fluid:visible\").filter(function(_27a,el){\nvar p=$(el).parents(\".panel-\"+type+\":first\");\nreturn _279?p.length==0:p[0]==_278;\n});\ns.each(function(){\n$(this).triggerHandler(\"_resize\",[all||false]);\n});\n};\n});\n},move:function(jq,_27b){\nreturn jq.each(function(){\n_229(this,_27b);\n});\n},maximize:function(jq){\nreturn jq.each(function(){\n_24d(this);\n});\n},minimize:function(jq){\nreturn jq.each(function(){\n_263(this);\n});\n},restore:function(jq){\nreturn jq.each(function(){\n_266(this);\n});\n},collapse:function(jq,_27c){\nreturn jq.each(function(){\n_24e(this,_27c);\n});\n},expand:function(jq,_27d){\nreturn jq.each(function(){\n_25d(this,_27d);\n});\n}};\n$.fn.panel.parseOptions=function(_27e){\nvar t=$(_27e);\nvar hh=t.children(\".panel-header,header\");\nvar ff=t.children(\".panel-footer,footer\");\nreturn $.extend({},$.parser.parseOptions(_27e,[\"id\",\"width\",\"height\",\"left\",\"top\",\"title\",\"iconCls\",\"cls\",\"headerCls\",\"bodyCls\",\"tools\",\"href\",\"method\",\"header\",\"footer\",\"halign\",\"titleDirection\",{cache:\"boolean\",fit:\"boolean\",border:\"boolean\",noheader:\"boolean\"},{collapsible:\"boolean\",minimizable:\"boolean\",maximizable:\"boolean\"},{closable:\"boolean\",collapsed:\"boolean\",minimized:\"boolean\",maximized:\"boolean\",closed:\"boolean\"},\"openAnimation\",\"closeAnimation\",{openDuration:\"number\",closeDuration:\"number\"},]),{loadingMessage:(t.attr(\"loadingMessage\")!=undefined?t.attr(\"loadingMessage\"):undefined),header:(hh.length?hh.removeClass(\"panel-header\"):undefined),footer:(ff.length?ff.removeClass(\"panel-footer\"):undefined)});\n};\n$.fn.panel.defaults={id:null,title:null,iconCls:null,width:\"auto\",height:\"auto\",left:null,top:null,cls:null,headerCls:null,bodyCls:null,style:{},href:null,cache:true,fit:false,border:true,doSize:true,noheader:false,content:null,halign:\"top\",titleDirection:\"down\",collapsible:false,minimizable:false,maximizable:false,closable:false,collapsed:false,minimized:false,maximized:false,closed:false,openAnimation:false,openDuration:400,closeAnimation:false,closeDuration:400,tools:null,footer:null,header:null,queryParams:{},method:\"get\",href:null,loadingMessage:\"Loading...\",loader:function(_27f,_280,_281){\nvar opts=$(this).panel(\"options\");\nif(!opts.href){\nreturn false;\n}\n$.ajax({type:opts.method,url:opts.href,cache:false,data:_27f,dataType:\"html\",success:function(data){\n_280(data);\n},error:function(){\n_281.apply(this,arguments);\n}});\n},extractor:function(data){\nvar _282=/<body[^>]*>((.|[\\n\\r])*)<\\/body>/im;\nvar _283=_282.exec(data);\nif(_283){\nreturn _283[1];\n}else{\nreturn data;\n}\n},onBeforeLoad:function(_284){\n},onLoad:function(){\n},onLoadError:function(){\n},onBeforeOpen:function(){\n},onOpen:function(){\n},onBeforeClose:function(){\n},onClose:function(){\n},onBeforeDestroy:function(){\n},onDestroy:function(){\n},onResize:function(_285,_286){\n},onMove:function(left,top){\n},onMaximize:function(){\n},onRestore:function(){\n},onMinimize:function(){\n},onBeforeCollapse:function(){\n},onBeforeExpand:function(){\n},onCollapse:function(){\n},onExpand:function(){\n}};\n})(jQuery);\n(function($){\nfunction _287(_288,_289){\nvar _28a=$.data(_288,\"window\");\nif(_289){\nif(_289.left!=null){\n_28a.options.left=_289.left;\n}\nif(_289.top!=null){\n_28a.options.top=_289.top;\n}\n}\n$(_288).panel(\"move\",_28a.options);\nif(_28a.shadow){\n_28a.shadow.css({left:_28a.options.left,top:_28a.options.top});\n}\n};\nfunction _28b(_28c,_28d){\nvar opts=$.data(_28c,\"window\").options;\nvar pp=$(_28c).window(\"panel\");\nvar _28e=pp._outerWidth();\nif(opts.inline){\nvar _28f=pp.parent();\nopts.left=Math.ceil((_28f.width()-_28e)/2+_28f.scrollLeft());\n}else{\nvar _290=opts.fixed?0:$(document).scrollLeft();\nopts.left=Math.ceil(($(window)._outerWidth()-_28e)/2+_290);\n}\nif(_28d){\n_287(_28c);\n}\n};\nfunction _291(_292,_293){\nvar opts=$.data(_292,\"window\").options;\nvar pp=$(_292).window(\"panel\");\nvar _294=pp._outerHeight();\nif(opts.inline){\nvar _295=pp.parent();\nopts.top=Math.ceil((_295.height()-_294)/2+_295.scrollTop());\n}else{\nvar _296=opts.fixed?0:$(document).scrollTop();\nopts.top=Math.ceil(($(window)._outerHeight()-_294)/2+_296);\n}\nif(_293){\n_287(_292);\n}\n};\nfunction _297(_298){\nvar _299=$.data(_298,\"window\");\nvar opts=_299.options;\nvar win=$(_298).panel($.extend({},_299.options,{border:false,doSize:true,closed:true,cls:\"window \"+(!opts.border?\"window-thinborder window-noborder \":(opts.border==\"thin\"?\"window-thinborder \":\"\"))+(opts.cls||\"\"),headerCls:\"window-header \"+(opts.headerCls||\"\"),bodyCls:\"window-body \"+(opts.noheader?\"window-body-noheader \":\" \")+(opts.bodyCls||\"\"),onBeforeDestroy:function(){\nif(opts.onBeforeDestroy.call(_298)==false){\nreturn false;\n}\nif(_299.shadow){\n_299.shadow.remove();\n}\nif(_299.mask){\n_299.mask.remove();\n}\n},onClose:function(){\nif(_299.shadow){\n_299.shadow.hide();\n}\nif(_299.mask){\n_299.mask.hide();\n}\nopts.onClose.call(_298);\n},onOpen:function(){\nif(_299.mask){\n_299.mask.css($.extend({display:\"block\",zIndex:$.fn.window.defaults.zIndex++},$.fn.window.getMaskSize(_298)));\n}\nif(_299.shadow){\n_299.shadow.css({display:\"block\",position:(opts.fixed?\"fixed\":\"absolute\"),zIndex:$.fn.window.defaults.zIndex++,left:opts.left,top:opts.top,width:_299.window._outerWidth(),height:_299.window._outerHeight()});\n}\n_299.window.css({position:(opts.fixed?\"fixed\":\"absolute\"),zIndex:$.fn.window.defaults.zIndex++});\nopts.onOpen.call(_298);\n},onResize:function(_29a,_29b){\nvar _29c=$(this).panel(\"options\");\n$.extend(opts,{width:_29c.width,height:_29c.height,left:_29c.left,top:_29c.top});\nif(_299.shadow){\n_299.shadow.css({left:opts.left,top:opts.top,width:_299.window._outerWidth(),height:_299.window._outerHeight()});\n}\nopts.onResize.call(_298,_29a,_29b);\n},onMinimize:function(){\nif(_299.shadow){\n_299.shadow.hide();\n}\nif(_299.mask){\n_299.mask.hide();\n}\n_299.options.onMinimize.call(_298);\n},onBeforeCollapse:function(){\nif(opts.onBeforeCollapse.call(_298)==false){\nreturn false;\n}\nif(_299.shadow){\n_299.shadow.hide();\n}\n},onExpand:function(){\nif(_299.shadow){\n_299.shadow.show();\n}\nopts.onExpand.call(_298);\n}}));\n_299.window=win.panel(\"panel\");\nif(_299.mask){\n_299.mask.remove();\n}\nif(opts.modal){\n_299.mask=$(\"<div class=\\\"window-mask\\\" style=\\\"display:none\\\"></div>\").insertAfter(_299.window);\n}\nif(_299.shadow){\n_299.shadow.remove();\n}\nif(opts.shadow){\n_299.shadow=$(\"<div class=\\\"window-shadow\\\" style=\\\"display:none\\\"></div>\").insertAfter(_299.window);\n}\nvar _29d=opts.closed;\nif(opts.left==null){\n_28b(_298);\n}\nif(opts.top==null){\n_291(_298);\n}\n_287(_298);\nif(!_29d){\nwin.window(\"open\");\n}\n};\nfunction _29e(left,top,_29f,_2a0){\nvar _2a1=this;\nvar _2a2=$.data(_2a1,\"window\");\nvar opts=_2a2.options;\nif(!opts.constrain){\nreturn {};\n}\nif($.isFunction(opts.constrain)){\nreturn opts.constrain.call(_2a1,left,top,_29f,_2a0);\n}\nvar win=$(_2a1).window(\"window\");\nvar _2a3=opts.inline?win.parent():$(window);\nvar _2a4=opts.fixed?0:_2a3.scrollTop();\nif(left<0){\nleft=0;\n}\nif(top<_2a4){\ntop=_2a4;\n}\nif(left+_29f>_2a3.width()){\nif(_29f==win.outerWidth()){\nleft=_2a3.width()-_29f;\n}else{\n_29f=_2a3.width()-left;\n}\n}\nif(top-_2a4+_2a0>_2a3.height()){\nif(_2a0==win.outerHeight()){\ntop=_2a3.height()-_2a0+_2a4;\n}else{\n_2a0=_2a3.height()-top+_2a4;\n}\n}\nreturn {left:left,top:top,width:_29f,height:_2a0};\n};\nfunction _2a5(_2a6){\nvar _2a7=$.data(_2a6,\"window\");\nvar opts=_2a7.options;\n_2a7.window.draggable({handle:\">div.panel-header>div.panel-title\",disabled:_2a7.options.draggable==false,onBeforeDrag:function(e){\nif(_2a7.mask){\n_2a7.mask.css(\"z-index\",$.fn.window.defaults.zIndex++);\n}\nif(_2a7.shadow){\n_2a7.shadow.css(\"z-index\",$.fn.window.defaults.zIndex++);\n}\n_2a7.window.css(\"z-index\",$.fn.window.defaults.zIndex++);\n},onStartDrag:function(e){\n_2a8(e);\n},onDrag:function(e){\n_2a9(e);\nreturn false;\n},onStopDrag:function(e){\n_2aa(e,\"move\");\n}});\n_2a7.window.resizable({disabled:_2a7.options.resizable==false,onStartResize:function(e){\n_2a8(e);\n},onResize:function(e){\n_2a9(e);\nreturn false;\n},onStopResize:function(e){\n_2aa(e,\"resize\");\n}});\nfunction _2a8(e){\n_2a7.window.css(\"position\",opts.fixed?\"fixed\":\"absolute\");\nif(_2a7.shadow){\n_2a7.shadow.css(\"position\",opts.fixed?\"fixed\":\"absolute\");\n}\nif(_2a7.pmask){\n_2a7.pmask.remove();\n}\n_2a7.pmask=$(\"<div class=\\\"window-proxy-mask\\\"></div>\").insertAfter(_2a7.window);\n_2a7.pmask.css({display:\"none\",position:(opts.fixed?\"fixed\":\"absolute\"),zIndex:$.fn.window.defaults.zIndex++,left:e.data.left,top:e.data.top,width:_2a7.window._outerWidth(),height:_2a7.window._outerHeight()});\nif(_2a7.proxy){\n_2a7.proxy.remove();\n}\n_2a7.proxy=$(\"<div class=\\\"window-proxy\\\"></div>\").insertAfter(_2a7.window);\n_2a7.proxy.css({display:\"none\",position:(opts.fixed?\"fixed\":\"absolute\"),zIndex:$.fn.window.defaults.zIndex++,left:e.data.left,top:e.data.top});\n_2a7.proxy._outerWidth(e.data.width)._outerHeight(e.data.height);\n_2a7.proxy.hide();\nsetTimeout(function(){\nif(_2a7.pmask){\n_2a7.pmask.show();\n}\nif(_2a7.proxy){\n_2a7.proxy.show();\n}\n},500);\n};\nfunction _2a9(e){\n$.extend(e.data,_29e.call(_2a6,e.data.left,e.data.top,e.data.width,e.data.height));\n_2a7.pmask.show();\n_2a7.proxy.css({display:\"block\",left:e.data.left,top:e.data.top});\n_2a7.proxy._outerWidth(e.data.width);\n_2a7.proxy._outerHeight(e.data.height);\n};\nfunction _2aa(e,_2ab){\n_2a7.window.css(\"position\",opts.fixed?\"fixed\":\"absolute\");\nif(_2a7.shadow){\n_2a7.shadow.css(\"position\",opts.fixed?\"fixed\":\"absolute\");\n}\n$.extend(e.data,_29e.call(_2a6,e.data.left,e.data.top,e.data.width+0.1,e.data.height+0.1));\n$(_2a6).window(_2ab,e.data);\n_2a7.pmask.remove();\n_2a7.pmask=null;\n_2a7.proxy.remove();\n_2a7.proxy=null;\n};\n};\n$(function(){\nif(!$._positionFixed){\n$(window).resize(function(){\n$(\"body>div.window-mask:visible\").css({width:\"\",height:\"\"});\nsetTimeout(function(){\n$(\"body>div.window-mask:visible\").css($.fn.window.getMaskSize());\n},50);\n});\n}\n});\n$.fn.window=function(_2ac,_2ad){\nif(typeof _2ac==\"string\"){\nvar _2ae=$.fn.window.methods[_2ac];\nif(_2ae){\nreturn _2ae(this,_2ad);\n}else{\nreturn this.panel(_2ac,_2ad);\n}\n}\n_2ac=_2ac||{};\nreturn this.each(function(){\nvar _2af=$.data(this,\"window\");\nif(_2af){\n$.extend(_2af.options,_2ac);\n}else{\n_2af=$.data(this,\"window\",{options:$.extend({},$.fn.window.defaults,$.fn.window.parseOptions(this),_2ac)});\nif(!_2af.options.inline){\ndocument.body.appendChild(this);\n}\n}\n_297(this);\n_2a5(this);\n});\n};\n$.fn.window.methods={options:function(jq){\nvar _2b0=jq.panel(\"options\");\nvar _2b1=$.data(jq[0],\"window\").options;\nreturn $.extend(_2b1,{closed:_2b0.closed,collapsed:_2b0.collapsed,minimized:_2b0.minimized,maximized:_2b0.maximized});\n},window:function(jq){\nreturn $.data(jq[0],\"window\").window;\n},move:function(jq,_2b2){\nreturn jq.each(function(){\n_287(this,_2b2);\n});\n},hcenter:function(jq){\nreturn jq.each(function(){\n_28b(this,true);\n});\n},vcenter:function(jq){\nreturn jq.each(function(){\n_291(this,true);\n});\n},center:function(jq){\nreturn jq.each(function(){\n_28b(this);\n_291(this);\n_287(this);\n});\n}};\n$.fn.window.getMaskSize=function(_2b3){\nvar _2b4=$(_2b3).data(\"window\");\nif(_2b4&&_2b4.options.inline){\nreturn {};\n}else{\nif($._positionFixed){\nreturn {position:\"fixed\"};\n}else{\nreturn {width:$(document).width(),height:$(document).height()};\n}\n}\n};\n$.fn.window.parseOptions=function(_2b5){\nreturn $.extend({},$.fn.panel.parseOptions(_2b5),$.parser.parseOptions(_2b5,[{draggable:\"boolean\",resizable:\"boolean\",shadow:\"boolean\",modal:\"boolean\",inline:\"boolean\"}]));\n};\n$.fn.window.defaults=$.extend({},$.fn.panel.defaults,{zIndex:9000,draggable:true,resizable:true,shadow:true,modal:false,border:true,inline:false,title:\"New Window\",collapsible:true,minimizable:true,maximizable:true,closable:true,closed:false,fixed:false,constrain:false});\n})(jQuery);\n(function($){\nfunction _2b6(_2b7){\nvar opts=$.data(_2b7,\"dialog\").options;\nopts.inited=false;\n$(_2b7).window($.extend({},opts,{onResize:function(w,h){\nif(opts.inited){\n_2bc(this);\nopts.onResize.call(this,w,h);\n}\n}}));\nvar win=$(_2b7).window(\"window\");\nif(opts.toolbar){\nif($.isArray(opts.toolbar)){\n$(_2b7).siblings(\"div.dialog-toolbar\").remove();\nvar _2b8=$(\"<div class=\\\"dialog-toolbar\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"><tr></tr></table></div>\").appendTo(win);\nvar tr=_2b8.find(\"tr\");\nfor(var i=0;i<opts.toolbar.length;i++){\nvar btn=opts.toolbar[i];\nif(btn==\"-\"){\n$(\"<td><div class=\\\"dialog-tool-separator\\\"></div></td>\").appendTo(tr);\n}else{\nvar td=$(\"<td></td>\").appendTo(tr);\nvar tool=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(td);\ntool[0].onclick=eval(btn.handler||function(){\n});\ntool.linkbutton($.extend({},btn,{plain:true}));\n}\n}\n}else{\n$(opts.toolbar).addClass(\"dialog-toolbar\").appendTo(win);\n$(opts.toolbar).show();\n}\n}else{\n$(_2b7).siblings(\"div.dialog-toolbar\").remove();\n}\nif(opts.buttons){\nif($.isArray(opts.buttons)){\n$(_2b7).siblings(\"div.dialog-button\").remove();\nvar _2b9=$(\"<div class=\\\"dialog-button\\\"></div>\").appendTo(win);\nfor(var i=0;i<opts.buttons.length;i++){\nvar p=opts.buttons[i];\nvar _2ba=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(_2b9);\nif(p.handler){\n_2ba[0].onclick=p.handler;\n}\n_2ba.linkbutton(p);\n}\n}else{\n$(opts.buttons).addClass(\"dialog-button\").appendTo(win);\n$(opts.buttons).show();\n}\n}else{\n$(_2b7).siblings(\"div.dialog-button\").remove();\n}\nopts.inited=true;\nvar _2bb=opts.closed;\nwin.show();\n$(_2b7).window(\"resize\",{});\nif(_2bb){\nwin.hide();\n}\n};\nfunction _2bc(_2bd,_2be){\nvar t=$(_2bd);\nvar opts=t.dialog(\"options\");\nvar _2bf=opts.noheader;\nvar tb=t.siblings(\".dialog-toolbar\");\nvar bb=t.siblings(\".dialog-button\");\ntb.insertBefore(_2bd).css({borderTopWidth:(_2bf?1:0),top:(_2bf?tb.length:0)});\nbb.insertAfter(_2bd);\ntb.add(bb)._outerWidth(t._outerWidth()).find(\".easyui-fluid:visible\").each(function(){\n$(this).triggerHandler(\"_resize\");\n});\nvar _2c0=tb._outerHeight()+bb._outerHeight();\nif(!isNaN(parseInt(opts.height))){\nt._outerHeight(t._outerHeight()-_2c0);\n}else{\nvar _2c1=t._size(\"min-height\");\nif(_2c1){\nt._size(\"min-height\",_2c1-_2c0);\n}\nvar _2c2=t._size(\"max-height\");\nif(_2c2){\nt._size(\"max-height\",_2c2-_2c0);\n}\n}\nvar _2c3=$.data(_2bd,\"window\").shadow;\nif(_2c3){\nvar cc=t.panel(\"panel\");\n_2c3.css({width:cc._outerWidth(),height:cc._outerHeight()});\n}\n};\n$.fn.dialog=function(_2c4,_2c5){\nif(typeof _2c4==\"string\"){\nvar _2c6=$.fn.dialog.methods[_2c4];\nif(_2c6){\nreturn _2c6(this,_2c5);\n}else{\nreturn this.window(_2c4,_2c5);\n}\n}\n_2c4=_2c4||{};\nreturn this.each(function(){\nvar _2c7=$.data(this,\"dialog\");\nif(_2c7){\n$.extend(_2c7.options,_2c4);\n}else{\n$.data(this,\"dialog\",{options:$.extend({},$.fn.dialog.defaults,$.fn.dialog.parseOptions(this),_2c4)});\n}\n_2b6(this);\n});\n};\n$.fn.dialog.methods={options:function(jq){\nvar _2c8=$.data(jq[0],\"dialog\").options;\nvar _2c9=jq.panel(\"options\");\n$.extend(_2c8,{width:_2c9.width,height:_2c9.height,left:_2c9.left,top:_2c9.top,closed:_2c9.closed,collapsed:_2c9.collapsed,minimized:_2c9.minimized,maximized:_2c9.maximized});\nreturn _2c8;\n},dialog:function(jq){\nreturn jq.window(\"window\");\n}};\n$.fn.dialog.parseOptions=function(_2ca){\nvar t=$(_2ca);\nreturn $.extend({},$.fn.window.parseOptions(_2ca),$.parser.parseOptions(_2ca,[\"toolbar\",\"buttons\"]),{toolbar:(t.children(\".dialog-toolbar\").length?t.children(\".dialog-toolbar\").removeClass(\"dialog-toolbar\"):undefined),buttons:(t.children(\".dialog-button\").length?t.children(\".dialog-button\").removeClass(\"dialog-button\"):undefined)});\n};\n$.fn.dialog.defaults=$.extend({},$.fn.window.defaults,{title:\"New Dialog\",collapsible:false,minimizable:false,maximizable:false,resizable:false,toolbar:null,buttons:null});\n})(jQuery);\n(function($){\nfunction _2cb(){\n$(document)._unbind(\".messager\")._bind(\"keydown.messager\",function(e){\nif(e.keyCode==27){\n$(\"body\").children(\"div.messager-window\").children(\"div.messager-body\").each(function(){\n$(this).dialog(\"close\");\n});\n}else{\nif(e.keyCode==9){\nvar win=$(\"body\").children(\"div.messager-window\");\nif(!win.length){\nreturn;\n}\nvar _2cc=win.find(\".messager-input,.messager-button .l-btn\");\nfor(var i=0;i<_2cc.length;i++){\nif($(_2cc[i]).is(\":focus\")){\n$(_2cc[i>=_2cc.length-1?0:i+1]).focus();\nreturn false;\n}\n}\n}else{\nif(e.keyCode==13){\nvar _2cd=$(e.target).closest(\"input.messager-input\");\nif(_2cd.length){\nvar dlg=_2cd.closest(\".messager-body\");\n_2ce(dlg,_2cd.val());\n}\n}\n}\n}\n});\n};\nfunction _2cf(){\n$(document)._unbind(\".messager\");\n};\nfunction _2d0(_2d1){\nvar opts=$.extend({},$.messager.defaults,{modal:false,shadow:false,draggable:false,resizable:false,closed:true,style:{left:\"\",top:\"\",right:0,zIndex:$.fn.window.defaults.zIndex++,bottom:-document.body.scrollTop-document.documentElement.scrollTop},title:\"\",width:300,height:150,minHeight:0,showType:\"slide\",showSpeed:600,content:_2d1.msg,timeout:4000},_2d1);\nvar dlg=$(\"<div class=\\\"messager-body\\\"></div>\").appendTo(\"body\");\ndlg.dialog($.extend({},opts,{noheader:(opts.title?false:true),openAnimation:(opts.showType),closeAnimation:(opts.showType==\"show\"?\"hide\":opts.showType),openDuration:opts.showSpeed,closeDuration:opts.showSpeed,onOpen:function(){\ndlg.dialog(\"dialog\").hover(function(){\nif(opts.timer){\nclearTimeout(opts.timer);\n}\n},function(){\n_2d2();\n});\n_2d2();\nfunction _2d2(){\nif(opts.timeout>0){\nopts.timer=setTimeout(function(){\nif(dlg.length&&dlg.data(\"dialog\")){\ndlg.dialog(\"close\");\n}\n},opts.timeout);\n}\n};\nif(_2d1.onOpen){\n_2d1.onOpen.call(this);\n}else{\nopts.onOpen.call(this);\n}\n},onClose:function(){\nif(opts.timer){\nclearTimeout(opts.timer);\n}\nif(_2d1.onClose){\n_2d1.onClose.call(this);\n}else{\nopts.onClose.call(this);\n}\ndlg.dialog(\"destroy\");\n}}));\ndlg.dialog(\"dialog\").css(opts.style);\ndlg.dialog(\"open\");\nreturn dlg;\n};\nfunction _2d3(_2d4){\n_2cb();\nvar dlg=$(\"<div class=\\\"messager-body\\\"></div>\").appendTo(\"body\");\ndlg.dialog($.extend({},_2d4,{noheader:(_2d4.title?false:true),onClose:function(){\n_2cf();\nif(_2d4.onClose){\n_2d4.onClose.call(this);\n}\ndlg.dialog(\"destroy\");\n}}));\nvar win=dlg.dialog(\"dialog\").addClass(\"messager-window\");\nwin.find(\".dialog-button\").addClass(\"messager-button\").find(\"a:first\").focus();\nreturn dlg;\n};\nfunction _2ce(dlg,_2d5){\nvar opts=dlg.dialog(\"options\");\ndlg.dialog(\"close\");\nopts.fn(_2d5);\n};\n$.messager={show:function(_2d6){\nreturn _2d0(_2d6);\n},alert:function(_2d7,msg,icon,fn){\nvar opts=typeof _2d7==\"object\"?_2d7:{title:_2d7,msg:msg,icon:icon,fn:fn};\nvar cls=opts.icon?\"messager-icon messager-\"+opts.icon:\"\";\nopts=$.extend({},$.messager.defaults,{content:\"<div class=\\\"\"+cls+\"\\\"></div>\"+\"<div>\"+opts.msg+\"</div>\"+\"<div style=\\\"clear:both;\\\"/>\"},opts);\nif(!opts.buttons){\nopts.buttons=[{text:opts.ok,onClick:function(){\n_2ce(dlg);\n}}];\n}\nvar dlg=_2d3(opts);\nreturn dlg;\n},confirm:function(_2d8,msg,fn){\nvar opts=typeof _2d8==\"object\"?_2d8:{title:_2d8,msg:msg,fn:fn};\nopts=$.extend({},$.messager.defaults,{content:\"<div class=\\\"messager-icon messager-question\\\"></div>\"+\"<div>\"+opts.msg+\"</div>\"+\"<div style=\\\"clear:both;\\\"/>\"},opts);\nif(!opts.buttons){\nopts.buttons=[{text:opts.ok,onClick:function(){\n_2ce(dlg,true);\n}},{text:opts.cancel,onClick:function(){\n_2ce(dlg,false);\n}}];\n}\nvar dlg=_2d3(opts);\nreturn dlg;\n},prompt:function(_2d9,msg,fn){\nvar opts=typeof _2d9==\"object\"?_2d9:{title:_2d9,msg:msg,fn:fn};\nopts=$.extend({},$.messager.defaults,{content:\"<div class=\\\"messager-icon messager-question\\\"></div>\"+\"<div>\"+opts.msg+\"</div>\"+\"<br/>\"+\"<div style=\\\"clear:both;\\\"/>\"+\"<div><input class=\\\"messager-input\\\" type=\\\"text\\\"/></div>\"},opts);\nif(!opts.buttons){\nopts.buttons=[{text:opts.ok,onClick:function(){\n_2ce(dlg,dlg.find(\".messager-input\").val());\n}},{text:opts.cancel,onClick:function(){\n_2ce(dlg);\n}}];\n}\nvar dlg=_2d3(opts);\ndlg.find(\".messager-input\").focus();\nreturn dlg;\n},progress:function(_2da){\nvar _2db={bar:function(){\nreturn $(\"body>div.messager-window\").find(\"div.messager-p-bar\");\n},close:function(){\nvar dlg=$(\"body>div.messager-window>div.messager-body:has(div.messager-progress)\");\nif(dlg.length){\ndlg.dialog(\"close\");\n}\n}};\nif(typeof _2da==\"string\"){\nvar _2dc=_2db[_2da];\nreturn _2dc();\n}\n_2da=_2da||{};\nvar opts=$.extend({},{title:\"\",minHeight:0,content:undefined,msg:\"\",text:undefined,interval:300},_2da);\nvar dlg=_2d3($.extend({},$.messager.defaults,{content:\"<div class=\\\"messager-progress\\\"><div class=\\\"messager-p-msg\\\">\"+opts.msg+\"</div><div class=\\\"messager-p-bar\\\"></div></div>\",closable:false,doSize:false},opts,{onClose:function(){\nif(this.timer){\nclearInterval(this.timer);\n}\nif(_2da.onClose){\n_2da.onClose.call(this);\n}else{\n$.messager.defaults.onClose.call(this);\n}\n}}));\nvar bar=dlg.find(\"div.messager-p-bar\");\nbar.progressbar({text:opts.text});\ndlg.dialog(\"resize\");\nif(opts.interval){\ndlg[0].timer=setInterval(function(){\nvar v=bar.progressbar(\"getValue\");\nv+=10;\nif(v>100){\nv=0;\n}\nbar.progressbar(\"setValue\",v);\n},opts.interval);\n}\nreturn dlg;\n}};\n$.messager.defaults=$.extend({},$.fn.dialog.defaults,{ok:\"Ok\",cancel:\"Cancel\",width:300,height:\"auto\",minHeight:150,modal:true,collapsible:false,minimizable:false,maximizable:false,resizable:false,fn:function(){\n}});\n})(jQuery);\n(function($){\nfunction _2dd(_2de,_2df){\nvar _2e0=$.data(_2de,\"accordion\");\nvar opts=_2e0.options;\nvar _2e1=_2e0.panels;\nvar cc=$(_2de);\nvar _2e2=(opts.halign==\"left\"||opts.halign==\"right\");\ncc.children(\".panel-last\").removeClass(\"panel-last\");\ncc.children(\".panel:last\").addClass(\"panel-last\");\nif(_2df){\n$.extend(opts,{width:_2df.width,height:_2df.height});\n}\ncc._size(opts);\nvar _2e3=0;\nvar _2e4=\"auto\";\nvar _2e5=cc.find(\">.panel>.accordion-header\");\nif(_2e5.length){\nif(_2e2){\n$(_2e5[0]).next().panel(\"resize\",{width:cc.width(),height:cc.height()});\n_2e3=$(_2e5[0])._outerWidth();\n}else{\n_2e3=$(_2e5[0]).css(\"height\",\"\")._outerHeight();\n}\n}\nif(!isNaN(parseInt(opts.height))){\nif(_2e2){\n_2e4=cc.width()-_2e3*_2e5.length;\n}else{\n_2e4=cc.height()-_2e3*_2e5.length;\n}\n}\n_2e6(true,_2e4-_2e6(false));\nfunction _2e6(_2e7,_2e8){\nvar _2e9=0;\nfor(var i=0;i<_2e1.length;i++){\nvar p=_2e1[i];\nif(_2e2){\nvar h=p.panel(\"header\")._outerWidth(_2e3);\n}else{\nvar h=p.panel(\"header\")._outerHeight(_2e3);\n}\nif(p.panel(\"options\").collapsible==_2e7){\nvar _2ea=isNaN(_2e8)?undefined:(_2e8+_2e3*h.length);\nif(_2e2){\np.panel(\"resize\",{height:cc.height(),width:(_2e7?_2ea:undefined)});\n_2e9+=p.panel(\"panel\")._outerWidth()-_2e3*h.length;\n}else{\np.panel(\"resize\",{width:cc.width(),height:(_2e7?_2ea:undefined)});\n_2e9+=p.panel(\"panel\").outerHeight()-_2e3*h.length;\n}\n}\n}\nreturn _2e9;\n};\n};\nfunction _2eb(_2ec,_2ed,_2ee,all){\nvar _2ef=$.data(_2ec,\"accordion\").panels;\nvar pp=[];\nfor(var i=0;i<_2ef.length;i++){\nvar p=_2ef[i];\nif(_2ed){\nif(p.panel(\"options\")[_2ed]==_2ee){\npp.push(p);\n}\n}else{\nif(p[0]==$(_2ee)[0]){\nreturn i;\n}\n}\n}\nif(_2ed){\nreturn all?pp:(pp.length?pp[0]:null);\n}else{\nreturn -1;\n}\n};\nfunction _2f0(_2f1){\nreturn _2eb(_2f1,\"collapsed\",false,true);\n};\nfunction _2f2(_2f3){\nvar pp=_2f0(_2f3);\nreturn pp.length?pp[0]:null;\n};\nfunction _2f4(_2f5,_2f6){\nreturn _2eb(_2f5,null,_2f6);\n};\nfunction _2f7(_2f8,_2f9){\nvar _2fa=$.data(_2f8,\"accordion\").panels;\nif(typeof _2f9==\"number\"){\nif(_2f9<0||_2f9>=_2fa.length){\nreturn null;\n}else{\nreturn _2fa[_2f9];\n}\n}\nreturn _2eb(_2f8,\"title\",_2f9);\n};\nfunction _2fb(_2fc){\nvar opts=$.data(_2fc,\"accordion\").options;\nvar cc=$(_2fc);\nif(opts.border){\ncc.removeClass(\"accordion-noborder\");\n}else{\ncc.addClass(\"accordion-noborder\");\n}\n};\nfunction init(_2fd){\nvar _2fe=$.data(_2fd,\"accordion\");\nvar cc=$(_2fd);\ncc.addClass(\"accordion\");\n_2fe.panels=[];\ncc.children(\"div\").each(function(){\nvar opts=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr(\"selected\")?true:undefined)});\nvar pp=$(this);\n_2fe.panels.push(pp);\n_300(_2fd,pp,opts);\n});\ncc._bind(\"_resize\",function(e,_2ff){\nif($(this).hasClass(\"easyui-fluid\")||_2ff){\n_2dd(_2fd);\n}\nreturn false;\n});\n};\nfunction _300(_301,pp,_302){\nvar opts=$.data(_301,\"accordion\").options;\npp.panel($.extend({},{collapsible:true,minimizable:false,maximizable:false,closable:false,doSize:false,collapsed:true,headerCls:\"accordion-header\",bodyCls:\"accordion-body\",halign:opts.halign},_302,{onBeforeExpand:function(){\nif(_302.onBeforeExpand){\nif(_302.onBeforeExpand.call(this)==false){\nreturn false;\n}\n}\nif(!opts.multiple){\nvar all=$.grep(_2f0(_301),function(p){\nreturn p.panel(\"options\").collapsible;\n});\nfor(var i=0;i<all.length;i++){\n_30a(_301,_2f4(_301,all[i]));\n}\n}\nvar _303=$(this).panel(\"header\");\n_303.addClass(\"accordion-header-selected\");\n_303.find(\".accordion-collapse\").removeClass(\"accordion-expand\");\n},onExpand:function(){\n$(_301).find(\">.panel-last>.accordion-header\").removeClass(\"accordion-header-border\");\nif(_302.onExpand){\n_302.onExpand.call(this);\n}\nopts.onSelect.call(_301,$(this).panel(\"options\").title,_2f4(_301,this));\n},onBeforeCollapse:function(){\nif(_302.onBeforeCollapse){\nif(_302.onBeforeCollapse.call(this)==false){\nreturn false;\n}\n}\n$(_301).find(\">.panel-last>.accordion-header\").addClass(\"accordion-header-border\");\nvar _304=$(this).panel(\"header\");\n_304.removeClass(\"accordion-header-selected\");\n_304.find(\".accordion-collapse\").addClass(\"accordion-expand\");\n},onCollapse:function(){\nif(isNaN(parseInt(opts.height))){\n$(_301).find(\">.panel-last>.accordion-header\").removeClass(\"accordion-header-border\");\n}\nif(_302.onCollapse){\n_302.onCollapse.call(this);\n}\nopts.onUnselect.call(_301,$(this).panel(\"options\").title,_2f4(_301,this));\n}}));\nvar _305=pp.panel(\"header\");\nvar tool=_305.children(\"div.panel-tool\");\ntool.children(\"a.panel-tool-collapse\").hide();\nvar t=$(\"<a href=\\\"javascript:;\\\"></a>\").addClass(\"accordion-collapse accordion-expand\").appendTo(tool);\nt._bind(\"click\",function(){\n_306(pp);\nreturn false;\n});\npp.panel(\"options\").collapsible?t.show():t.hide();\nif(opts.halign==\"left\"||opts.halign==\"right\"){\nt.hide();\n}\n_305._bind(\"click\",function(){\n_306(pp);\nreturn false;\n});\nfunction _306(p){\nvar _307=p.panel(\"options\");\nif(_307.collapsible){\nvar _308=_2f4(_301,p);\nif(_307.collapsed){\n_309(_301,_308);\n}else{\n_30a(_301,_308);\n}\n}\n};\n};\nfunction _309(_30b,_30c){\nvar p=_2f7(_30b,_30c);\nif(!p){\nreturn;\n}\n_30d(_30b);\nvar opts=$.data(_30b,\"accordion\").options;\np.panel(\"expand\",opts.animate);\n};\nfunction _30a(_30e,_30f){\nvar p=_2f7(_30e,_30f);\nif(!p){\nreturn;\n}\n_30d(_30e);\nvar opts=$.data(_30e,\"accordion\").options;\np.panel(\"collapse\",opts.animate);\n};\nfunction _310(_311){\nvar opts=$.data(_311,\"accordion\").options;\n$(_311).find(\">.panel-last>.accordion-header\").addClass(\"accordion-header-border\");\nvar p=_2eb(_311,\"selected\",true);\nif(p){\n_312(_2f4(_311,p));\n}else{\n_312(opts.selected);\n}\nfunction _312(_313){\nvar _314=opts.animate;\nopts.animate=false;\n_309(_311,_313);\nopts.animate=_314;\n};\n};\nfunction _30d(_315){\nvar _316=$.data(_315,\"accordion\").panels;\nfor(var i=0;i<_316.length;i++){\n_316[i].stop(true,true);\n}\n};\nfunction add(_317,_318){\nvar _319=$.data(_317,\"accordion\");\nvar opts=_319.options;\nvar _31a=_319.panels;\nif(_318.selected==undefined){\n_318.selected=true;\n}\n_30d(_317);\nvar pp=$(\"<div></div>\").appendTo(_317);\n_31a.push(pp);\n_300(_317,pp,_318);\n_2dd(_317);\nopts.onAdd.call(_317,_318.title,_31a.length-1);\nif(_318.selected){\n_309(_317,_31a.length-1);\n}\n};\nfunction _31b(_31c,_31d){\nvar _31e=$.data(_31c,\"accordion\");\nvar opts=_31e.options;\nvar _31f=_31e.panels;\n_30d(_31c);\nvar _320=_2f7(_31c,_31d);\nvar _321=_320.panel(\"options\").title;\nvar _322=_2f4(_31c,_320);\nif(!_320){\nreturn;\n}\nif(opts.onBeforeRemove.call(_31c,_321,_322)==false){\nreturn;\n}\n_31f.splice(_322,1);\n_320.panel(\"destroy\");\nif(_31f.length){\n_2dd(_31c);\nvar curr=_2f2(_31c);\nif(!curr){\n_309(_31c,0);\n}\n}\nopts.onRemove.call(_31c,_321,_322);\n};\n$.fn.accordion=function(_323,_324){\nif(typeof _323==\"string\"){\nreturn $.fn.accordion.methods[_323](this,_324);\n}\n_323=_323||{};\nreturn this.each(function(){\nvar _325=$.data(this,\"accordion\");\nif(_325){\n$.extend(_325.options,_323);\n}else{\n$.data(this,\"accordion\",{options:$.extend({},$.fn.accordion.defaults,$.fn.accordion.parseOptions(this),_323),accordion:$(this).addClass(\"accordion\"),panels:[]});\ninit(this);\n}\n_2fb(this);\n_2dd(this);\n_310(this);\n});\n};\n$.fn.accordion.methods={options:function(jq){\nreturn $.data(jq[0],\"accordion\").options;\n},panels:function(jq){\nreturn $.data(jq[0],\"accordion\").panels;\n},resize:function(jq,_326){\nreturn jq.each(function(){\n_2dd(this,_326);\n});\n},getSelections:function(jq){\nreturn _2f0(jq[0]);\n},getSelected:function(jq){\nreturn _2f2(jq[0]);\n},getPanel:function(jq,_327){\nreturn _2f7(jq[0],_327);\n},getPanelIndex:function(jq,_328){\nreturn _2f4(jq[0],_328);\n},select:function(jq,_329){\nreturn jq.each(function(){\n_309(this,_329);\n});\n},unselect:function(jq,_32a){\nreturn jq.each(function(){\n_30a(this,_32a);\n});\n},add:function(jq,_32b){\nreturn jq.each(function(){\nadd(this,_32b);\n});\n},remove:function(jq,_32c){\nreturn jq.each(function(){\n_31b(this,_32c);\n});\n}};\n$.fn.accordion.parseOptions=function(_32d){\nvar t=$(_32d);\nreturn $.extend({},$.parser.parseOptions(_32d,[\"width\",\"height\",\"halign\",{fit:\"boolean\",border:\"boolean\",animate:\"boolean\",multiple:\"boolean\",selected:\"number\"}]));\n};\n$.fn.accordion.defaults={width:\"auto\",height:\"auto\",fit:false,border:true,animate:true,multiple:false,selected:0,halign:\"top\",onSelect:function(_32e,_32f){\n},onUnselect:function(_330,_331){\n},onAdd:function(_332,_333){\n},onBeforeRemove:function(_334,_335){\n},onRemove:function(_336,_337){\n}};\n})(jQuery);\n(function($){\nfunction _338(c){\nvar w=0;\n$(c).children().each(function(){\nw+=$(this).outerWidth(true);\n});\nreturn w;\n};\nfunction _339(_33a){\nvar opts=$.data(_33a,\"tabs\").options;\nif(!opts.showHeader){\nreturn;\n}\nvar _33b=$(_33a).children(\"div.tabs-header\");\nvar tool=_33b.children(\"div.tabs-tool:not(.tabs-tool-hidden)\");\nvar _33c=_33b.children(\"div.tabs-scroller-left\");\nvar _33d=_33b.children(\"div.tabs-scroller-right\");\nvar wrap=_33b.children(\"div.tabs-wrap\");\nif(opts.tabPosition==\"left\"||opts.tabPosition==\"right\"){\nif(!tool.length){\nreturn;\n}\ntool._outerWidth(_33b.width());\nvar _33e={left:opts.tabPosition==\"left\"?\"auto\":0,right:opts.tabPosition==\"left\"?0:\"auto\",top:opts.toolPosition==\"top\"?0:\"auto\",bottom:opts.toolPosition==\"top\"?\"auto\":0};\nvar _33f={marginTop:opts.toolPosition==\"top\"?tool.outerHeight():0};\ntool.css(_33e);\nwrap.css(_33f);\nreturn;\n}\nvar _340=_33b.outerHeight();\nif(opts.plain){\n_340-=_340-_33b.height();\n}\ntool._outerHeight(_340);\nvar _341=_338(_33b.find(\"ul.tabs\"));\nvar _342=_33b.width()-tool._outerWidth();\nif(_341>_342){\n_33c.add(_33d).show()._outerHeight(_340);\nif(opts.toolPosition==\"left\"){\ntool.css({left:_33c.outerWidth(),right:\"\"});\nwrap.css({marginLeft:_33c.outerWidth()+tool._outerWidth(),marginRight:_33d._outerWidth(),width:_342-_33c.outerWidth()-_33d.outerWidth()});\n}else{\ntool.css({left:\"\",right:_33d.outerWidth()});\nwrap.css({marginLeft:_33c.outerWidth(),marginRight:_33d.outerWidth()+tool._outerWidth(),width:_342-_33c.outerWidth()-_33d.outerWidth()});\n}\n}else{\n_33c.add(_33d).hide();\nif(opts.toolPosition==\"left\"){\ntool.css({left:0,right:\"\"});\nwrap.css({marginLeft:tool._outerWidth(),marginRight:0,width:_342});\n}else{\ntool.css({left:\"\",right:0});\nwrap.css({marginLeft:0,marginRight:tool._outerWidth(),width:_342});\n}\n}\n};\nfunction _343(_344){\nvar opts=$.data(_344,\"tabs\").options;\nvar _345=$(_344).children(\"div.tabs-header\");\nif(opts.tools){\nif(typeof opts.tools==\"string\"){\n$(opts.tools).addClass(\"tabs-tool\").appendTo(_345);\n$(opts.tools).show();\n}else{\n_345.children(\"div.tabs-tool\").remove();\nvar _346=$(\"<div class=\\\"tabs-tool\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" style=\\\"height:100%\\\"><tr></tr></table></div>\").appendTo(_345);\nvar tr=_346.find(\"tr\");\nfor(var i=0;i<opts.tools.length;i++){\nvar td=$(\"<td></td>\").appendTo(tr);\nvar tool=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(td);\ntool[0].onclick=eval(opts.tools[i].handler||function(){\n});\ntool.linkbutton($.extend({},opts.tools[i],{plain:true}));\n}\n}\n}else{\n_345.children(\"div.tabs-tool\").remove();\n}\n};\nfunction _347(_348,_349){\nvar _34a=$.data(_348,\"tabs\");\nvar opts=_34a.options;\nvar cc=$(_348);\nif(!opts.doSize){\nreturn;\n}\nif(_349){\n$.extend(opts,{width:_349.width,height:_349.height});\n}\ncc._size(opts);\nvar _34b=cc.children(\"div.tabs-header\");\nvar _34c=cc.children(\"div.tabs-panels\");\nvar wrap=_34b.find(\"div.tabs-wrap\");\nvar ul=wrap.find(\".tabs\");\nul.children(\"li\").removeClass(\"tabs-first tabs-last\");\nul.children(\"li:first\").addClass(\"tabs-first\");\nul.children(\"li:last\").addClass(\"tabs-last\");\nif(opts.tabPosition==\"left\"||opts.tabPosition==\"right\"){\n_34b._outerWidth(opts.showHeader?opts.headerWidth:0);\n_34c._outerWidth(cc.width()-_34b.outerWidth());\n_34b.add(_34c)._size(\"height\",isNaN(parseInt(opts.height))?\"\":cc.height());\nwrap._outerWidth(_34b.width());\nul._outerWidth(wrap.width()).css(\"height\",\"\");\n}else{\n_34b.children(\"div.tabs-scroller-left,div.tabs-scroller-right,div.tabs-tool:not(.tabs-tool-hidden)\").css(\"display\",opts.showHeader?\"block\":\"none\");\n_34b._outerWidth(cc.width()).css(\"height\",\"\");\nif(opts.showHeader){\n_34b.css(\"background-color\",\"\");\nwrap.css(\"height\",\"\");\n}else{\n_34b.css(\"background-color\",\"transparent\");\n_34b._outerHeight(0);\nwrap._outerHeight(0);\n}\nul._outerHeight(opts.tabHeight).css(\"width\",\"\");\nul._outerHeight(ul.outerHeight()-ul.height()-1+opts.tabHeight).css(\"width\",\"\");\n_34c._size(\"height\",isNaN(parseInt(opts.height))?\"\":(cc.height()-_34b.outerHeight()));\n_34c._size(\"width\",cc.width());\n}\nif(_34a.tabs.length){\nvar d1=ul.outerWidth(true)-ul.width();\nvar li=ul.children(\"li:first\");\nvar d2=li.outerWidth(true)-li.width();\nvar _34d=_34b.width()-_34b.children(\".tabs-tool:not(.tabs-tool-hidden)\")._outerWidth();\nvar _34e=Math.floor((_34d-d1-d2*_34a.tabs.length)/_34a.tabs.length);\n$.map(_34a.tabs,function(p){\n_34f(p,(opts.justified&&$.inArray(opts.tabPosition,[\"top\",\"bottom\"])>=0)?_34e:undefined);\n});\nif(opts.justified&&$.inArray(opts.tabPosition,[\"top\",\"bottom\"])>=0){\nvar _350=_34d-d1-_338(ul);\n_34f(_34a.tabs[_34a.tabs.length-1],_34e+_350);\n}\n}\n_339(_348);\nfunction _34f(p,_351){\nvar _352=p.panel(\"options\");\nvar p_t=_352.tab.find(\"a.tabs-inner\");\nvar _351=_351?_351:(parseInt(_352.tabWidth||opts.tabWidth||undefined));\nif(_351){\np_t._outerWidth(_351);\n}else{\np_t.css(\"width\",\"\");\n}\np_t._outerHeight(opts.tabHeight);\np_t.css(\"lineHeight\",p_t.height()+\"px\");\np_t.find(\".easyui-fluid:visible\").triggerHandler(\"_resize\");\n};\n};\nfunction _353(_354){\nvar opts=$.data(_354,\"tabs\").options;\nvar tab=_355(_354);\nif(tab){\nvar _356=$(_354).children(\"div.tabs-panels\");\nvar _357=opts.width==\"auto\"?\"auto\":_356.width();\nvar _358=opts.height==\"auto\"?\"auto\":_356.height();\ntab.panel(\"resize\",{width:_357,height:_358});\n}\n};\nfunction _359(_35a){\nvar tabs=$.data(_35a,\"tabs\").tabs;\nvar cc=$(_35a).addClass(\"tabs-container\");\nvar _35b=$(\"<div class=\\\"tabs-panels\\\"></div>\").insertBefore(cc);\ncc.children(\"div\").each(function(){\n_35b[0].appendChild(this);\n});\ncc[0].appendChild(_35b[0]);\n$(\"<div class=\\\"tabs-header\\\">\"+\"<div class=\\\"tabs-scroller-left\\\"></div>\"+\"<div class=\\\"tabs-scroller-right\\\"></div>\"+\"<div class=\\\"tabs-wrap\\\">\"+\"<ul class=\\\"tabs\\\"></ul>\"+\"</div>\"+\"</div>\").prependTo(_35a);\ncc.children(\"div.tabs-panels\").children(\"div\").each(function(i){\nvar opts=$.extend({},$.parser.parseOptions(this),{disabled:($(this).attr(\"disabled\")?true:undefined),selected:($(this).attr(\"selected\")?true:undefined)});\n_368(_35a,opts,$(this));\n});\ncc.children(\"div.tabs-header\").find(\".tabs-scroller-left, .tabs-scroller-right\")._bind(\"mouseenter\",function(){\n$(this).addClass(\"tabs-scroller-over\");\n})._bind(\"mouseleave\",function(){\n$(this).removeClass(\"tabs-scroller-over\");\n});\ncc._bind(\"_resize\",function(e,_35c){\nif($(this).hasClass(\"easyui-fluid\")||_35c){\n_347(_35a);\n_353(_35a);\n}\nreturn false;\n});\n};\nfunction _35d(_35e){\nvar _35f=$.data(_35e,\"tabs\");\nvar opts=_35f.options;\n$(_35e).children(\"div.tabs-header\")._unbind()._bind(\"click\",function(e){\nif($(e.target).hasClass(\"tabs-scroller-left\")){\n$(_35e).tabs(\"scrollBy\",-opts.scrollIncrement);\n}else{\nif($(e.target).hasClass(\"tabs-scroller-right\")){\n$(_35e).tabs(\"scrollBy\",opts.scrollIncrement);\n}else{\nvar li=$(e.target).closest(\"li\");\nif(li.hasClass(\"tabs-disabled\")){\nreturn false;\n}\nvar a=$(e.target).closest(\"a.tabs-close\");\nif(a.length){\n_382(_35e,_360(li));\n}else{\nif(li.length){\nvar _361=_360(li);\nvar _362=_35f.tabs[_361].panel(\"options\");\nif(_362.collapsible){\n_362.closed?_379(_35e,_361):_399(_35e,_361);\n}else{\n_379(_35e,_361);\n}\n}\n}\nreturn false;\n}\n}\n})._bind(\"contextmenu\",function(e){\nvar li=$(e.target).closest(\"li\");\nif(li.hasClass(\"tabs-disabled\")){\nreturn;\n}\nif(li.length){\nopts.onContextMenu.call(_35e,e,li.find(\"span.tabs-title\").html(),_360(li));\n}\n});\nfunction _360(li){\nvar _363=0;\nli.parent().children(\"li\").each(function(i){\nif(li[0]==this){\n_363=i;\nreturn false;\n}\n});\nreturn _363;\n};\n};\nfunction _364(_365){\nvar opts=$.data(_365,\"tabs\").options;\nvar _366=$(_365).children(\"div.tabs-header\");\nvar _367=$(_365).children(\"div.tabs-panels\");\n_366.removeClass(\"tabs-header-top tabs-header-bottom tabs-header-left tabs-header-right\");\n_367.removeClass(\"tabs-panels-top tabs-panels-bottom tabs-panels-left tabs-panels-right\");\nif(opts.tabPosition==\"top\"){\n_366.insertBefore(_367);\n}else{\nif(opts.tabPosition==\"bottom\"){\n_366.insertAfter(_367);\n_366.addClass(\"tabs-header-bottom\");\n_367.addClass(\"tabs-panels-top\");\n}else{\nif(opts.tabPosition==\"left\"){\n_366.addClass(\"tabs-header-left\");\n_367.addClass(\"tabs-panels-right\");\n}else{\nif(opts.tabPosition==\"right\"){\n_366.addClass(\"tabs-header-right\");\n_367.addClass(\"tabs-panels-left\");\n}\n}\n}\n}\nif(opts.plain==true){\n_366.addClass(\"tabs-header-plain\");\n}else{\n_366.removeClass(\"tabs-header-plain\");\n}\n_366.removeClass(\"tabs-header-narrow\").addClass(opts.narrow?\"tabs-header-narrow\":\"\");\nvar tabs=_366.find(\".tabs\");\ntabs.removeClass(\"tabs-pill\").addClass(opts.pill?\"tabs-pill\":\"\");\ntabs.removeClass(\"tabs-narrow\").addClass(opts.narrow?\"tabs-narrow\":\"\");\ntabs.removeClass(\"tabs-justified\").addClass(opts.justified?\"tabs-justified\":\"\");\nif(opts.border==true){\n_366.removeClass(\"tabs-header-noborder\");\n_367.removeClass(\"tabs-panels-noborder\");\n}else{\n_366.addClass(\"tabs-header-noborder\");\n_367.addClass(\"tabs-panels-noborder\");\n}\nopts.doSize=true;\n};\nfunction _368(_369,_36a,pp){\n_36a=_36a||{};\nvar _36b=$.data(_369,\"tabs\");\nvar tabs=_36b.tabs;\nif(_36a.index==undefined||_36a.index>tabs.length){\n_36a.index=tabs.length;\n}\nif(_36a.index<0){\n_36a.index=0;\n}\nvar ul=$(_369).children(\"div.tabs-header\").find(\"ul.tabs\");\nvar _36c=$(_369).children(\"div.tabs-panels\");\nvar tab=$(\"<li>\"+\"<a href=\\\"javascript:;\\\" class=\\\"tabs-inner\\\">\"+\"<span class=\\\"tabs-title\\\"></span>\"+\"<span class=\\\"tabs-icon\\\"></span>\"+\"</a>\"+\"</li>\");\nif(!pp){\npp=$(\"<div></div>\");\n}\nif(_36a.index>=tabs.length){\ntab.appendTo(ul);\npp.appendTo(_36c);\ntabs.push(pp);\n}else{\ntab.insertBefore(ul.children(\"li:eq(\"+_36a.index+\")\"));\npp.insertBefore(_36c.children(\"div.panel:eq(\"+_36a.index+\")\"));\ntabs.splice(_36a.index,0,pp);\n}\npp.panel($.extend({},_36a,{tab:tab,border:false,noheader:true,closed:true,doSize:false,iconCls:(_36a.icon?_36a.icon:undefined),onLoad:function(){\nif(_36a.onLoad){\n_36a.onLoad.apply(this,arguments);\n}\n_36b.options.onLoad.call(_369,$(this));\n},onBeforeOpen:function(){\nif(_36a.onBeforeOpen){\nif(_36a.onBeforeOpen.call(this)==false){\nreturn false;\n}\n}\nvar p=$(_369).tabs(\"getSelected\");\nif(p){\nif(p[0]!=this){\n$(_369).tabs(\"unselect\",_374(_369,p));\np=$(_369).tabs(\"getSelected\");\nif(p){\nreturn false;\n}\n}else{\n_353(_369);\nreturn false;\n}\n}\nvar _36d=$(this).panel(\"options\");\n_36d.tab.addClass(\"tabs-selected\");\nvar wrap=$(_369).find(\">div.tabs-header>div.tabs-wrap\");\nvar left=_36d.tab.position().left;\nvar _36e=left+_36d.tab.outerWidth();\nif(left<0||_36e>wrap.width()){\nvar _36f=left-(wrap.width()-_36d.tab.width())/2;\n$(_369).tabs(\"scrollBy\",_36f);\n}else{\n$(_369).tabs(\"scrollBy\",0);\n}\nvar _370=$(this).panel(\"panel\");\n_370.css(\"display\",\"block\");\n_353(_369);\n_370.css(\"display\",\"none\");\n},onOpen:function(){\nif(_36a.onOpen){\n_36a.onOpen.call(this);\n}\nvar _371=$(this).panel(\"options\");\nvar _372=_374(_369,this);\n_36b.selectHis.push(_372);\n_36b.options.onSelect.call(_369,_371.title,_372);\n},onBeforeClose:function(){\nif(_36a.onBeforeClose){\nif(_36a.onBeforeClose.call(this)==false){\nreturn false;\n}\n}\n$(this).panel(\"options\").tab.removeClass(\"tabs-selected\");\n},onClose:function(){\nif(_36a.onClose){\n_36a.onClose.call(this);\n}\nvar _373=$(this).panel(\"options\");\n_36b.options.onUnselect.call(_369,_373.title,_374(_369,this));\n}}));\n$(_369).tabs(\"update\",{tab:pp,options:pp.panel(\"options\"),type:\"header\"});\n};\nfunction _375(_376,_377){\nvar _378=$.data(_376,\"tabs\");\nvar opts=_378.options;\nif(_377.selected==undefined){\n_377.selected=true;\n}\n_368(_376,_377);\nopts.onAdd.call(_376,_377.title,_377.index);\nif(_377.selected){\n_379(_376,_377.index);\n}\n};\nfunction _37a(_37b,_37c){\n_37c.type=_37c.type||\"all\";\nvar _37d=$.data(_37b,\"tabs\").selectHis;\nvar pp=_37c.tab;\nvar opts=pp.panel(\"options\");\nvar _37e=opts.title;\n$.extend(opts,_37c.options,{iconCls:(_37c.options.icon?_37c.options.icon:undefined)});\nif(_37c.type==\"all\"||_37c.type==\"body\"){\npp.panel();\n}\nif(_37c.type==\"all\"||_37c.type==\"header\"){\nvar tab=opts.tab;\nif(opts.header){\ntab.find(\".tabs-inner\").html($(opts.header));\n}else{\nvar _37f=tab.find(\"span.tabs-title\");\nvar _380=tab.find(\"span.tabs-icon\");\n_37f.html(opts.title);\n_380.attr(\"class\",\"tabs-icon\");\ntab.find(\"a.tabs-close\").remove();\nif(opts.closable){\n_37f.addClass(\"tabs-closable\");\n$(\"<a href=\\\"javascript:;\\\" class=\\\"tabs-close\\\"></a>\").appendTo(tab);\n}else{\n_37f.removeClass(\"tabs-closable\");\n}\nif(opts.iconCls){\n_37f.addClass(\"tabs-with-icon\");\n_380.addClass(opts.iconCls);\n}else{\n_37f.removeClass(\"tabs-with-icon\");\n}\nif(opts.tools){\nvar _381=tab.find(\"span.tabs-p-tool\");\nif(!_381.length){\nvar _381=$(\"<span class=\\\"tabs-p-tool\\\"></span>\").insertAfter(tab.find(\"a.tabs-inner\"));\n}\nif($.isArray(opts.tools)){\n_381.empty();\nfor(var i=0;i<opts.tools.length;i++){\nvar t=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(_381);\nt.addClass(opts.tools[i].iconCls);\nif(opts.tools[i].handler){\nt._bind(\"click\",{handler:opts.tools[i].handler},function(e){\nif($(this).parents(\"li\").hasClass(\"tabs-disabled\")){\nreturn;\n}\ne.data.handler.call(this);\n});\n}\n}\n}else{\n$(opts.tools).children().appendTo(_381);\n}\nvar pr=_381.children().length*12;\nif(opts.closable){\npr+=8;\n_381.css(\"right\",\"\");\n}else{\npr-=3;\n_381.css(\"right\",\"5px\");\n}\n_37f.css(\"padding-right\",pr+\"px\");\n}else{\ntab.find(\"span.tabs-p-tool\").remove();\n_37f.css(\"padding-right\",\"\");\n}\n}\n}\nif(opts.disabled){\nopts.tab.addClass(\"tabs-disabled\");\n}else{\nopts.tab.removeClass(\"tabs-disabled\");\n}\n_347(_37b);\n$.data(_37b,\"tabs\").options.onUpdate.call(_37b,opts.title,_374(_37b,pp));\n};\nfunction _382(_383,_384){\nvar _385=$.data(_383,\"tabs\");\nvar opts=_385.options;\nvar tabs=_385.tabs;\nvar _386=_385.selectHis;\nif(!_387(_383,_384)){\nreturn;\n}\nvar tab=_388(_383,_384);\nvar _389=tab.panel(\"options\").title;\nvar _38a=_374(_383,tab);\nif(opts.onBeforeClose.call(_383,_389,_38a)==false){\nreturn;\n}\nvar tab=_388(_383,_384,true);\ntab.panel(\"options\").tab.remove();\ntab.panel(\"destroy\");\nopts.onClose.call(_383,_389,_38a);\n_347(_383);\nvar his=[];\nfor(var i=0;i<_386.length;i++){\nvar _38b=_386[i];\nif(_38b!=_38a){\nhis.push(_38b>_38a?_38b-1:_38b);\n}\n}\n_385.selectHis=his;\nvar _38c=$(_383).tabs(\"getSelected\");\nif(!_38c&&his.length){\n_38a=_385.selectHis.pop();\n$(_383).tabs(\"select\",_38a);\n}\n};\nfunction _388(_38d,_38e,_38f){\nvar tabs=$.data(_38d,\"tabs\").tabs;\nvar tab=null;\nif(typeof _38e==\"number\"){\nif(_38e>=0&&_38e<tabs.length){\ntab=tabs[_38e];\nif(_38f){\ntabs.splice(_38e,1);\n}\n}\n}else{\nvar tmp=$(\"<span></span>\");\nfor(var i=0;i<tabs.length;i++){\nvar p=tabs[i];\ntmp.html(p.panel(\"options\").title);\nvar _390=tmp.text();\ntmp.html(_38e);\n_38e=tmp.text();\nif(_390==_38e){\ntab=p;\nif(_38f){\ntabs.splice(i,1);\n}\nbreak;\n}\n}\ntmp.remove();\n}\nreturn tab;\n};\nfunction _374(_391,tab){\nvar tabs=$.data(_391,\"tabs\").tabs;\nfor(var i=0;i<tabs.length;i++){\nif(tabs[i][0]==$(tab)[0]){\nreturn i;\n}\n}\nreturn -1;\n};\nfunction _355(_392){\nvar tabs=$.data(_392,\"tabs\").tabs;\nfor(var i=0;i<tabs.length;i++){\nvar tab=tabs[i];\nif(tab.panel(\"options\").tab.hasClass(\"tabs-selected\")){\nreturn tab;\n}\n}\nreturn null;\n};\nfunction _393(_394){\nvar _395=$.data(_394,\"tabs\");\nvar tabs=_395.tabs;\nfor(var i=0;i<tabs.length;i++){\nvar opts=tabs[i].panel(\"options\");\nif(opts.selected&&!opts.disabled){\n_379(_394,i);\nreturn;\n}\n}\n_379(_394,_395.options.selected);\n};\nfunction _379(_396,_397){\nvar p=_388(_396,_397);\nif(p&&!p.is(\":visible\")){\n_398(_396);\nif(!p.panel(\"options\").disabled){\np.panel(\"open\");\n}\n}\n};\nfunction _399(_39a,_39b){\nvar p=_388(_39a,_39b);\nif(p&&p.is(\":visible\")){\n_398(_39a);\np.panel(\"close\");\n}\n};\nfunction _398(_39c){\n$(_39c).children(\"div.tabs-panels\").each(function(){\n$(this).stop(true,true);\n});\n};\nfunction _387(_39d,_39e){\nreturn _388(_39d,_39e)!=null;\n};\nfunction _39f(_3a0,_3a1){\nvar opts=$.data(_3a0,\"tabs\").options;\nopts.showHeader=_3a1;\n$(_3a0).tabs(\"resize\");\n};\nfunction _3a2(_3a3,_3a4){\nvar tool=$(_3a3).find(\">.tabs-header>.tabs-tool\");\nif(_3a4){\ntool.removeClass(\"tabs-tool-hidden\").show();\n}else{\ntool.addClass(\"tabs-tool-hidden\").hide();\n}\n$(_3a3).tabs(\"resize\").tabs(\"scrollBy\",0);\n};\n$.fn.tabs=function(_3a5,_3a6){\nif(typeof _3a5==\"string\"){\nreturn $.fn.tabs.methods[_3a5](this,_3a6);\n}\n_3a5=_3a5||{};\nreturn this.each(function(){\nvar _3a7=$.data(this,\"tabs\");\nif(_3a7){\n$.extend(_3a7.options,_3a5);\n}else{\n$.data(this,\"tabs\",{options:$.extend({},$.fn.tabs.defaults,$.fn.tabs.parseOptions(this),_3a5),tabs:[],selectHis:[]});\n_359(this);\n}\n_343(this);\n_364(this);\n_347(this);\n_35d(this);\n_393(this);\n});\n};\n$.fn.tabs.methods={options:function(jq){\nvar cc=jq[0];\nvar opts=$.data(cc,\"tabs\").options;\nvar s=_355(cc);\nopts.selected=s?_374(cc,s):-1;\nreturn opts;\n},tabs:function(jq){\nreturn $.data(jq[0],\"tabs\").tabs;\n},resize:function(jq,_3a8){\nreturn jq.each(function(){\n_347(this,_3a8);\n_353(this);\n});\n},add:function(jq,_3a9){\nreturn jq.each(function(){\n_375(this,_3a9);\n});\n},close:function(jq,_3aa){\nreturn jq.each(function(){\n_382(this,_3aa);\n});\n},getTab:function(jq,_3ab){\nreturn _388(jq[0],_3ab);\n},getTabIndex:function(jq,tab){\nreturn _374(jq[0],tab);\n},getSelected:function(jq){\nreturn _355(jq[0]);\n},select:function(jq,_3ac){\nreturn jq.each(function(){\n_379(this,_3ac);\n});\n},unselect:function(jq,_3ad){\nreturn jq.each(function(){\n_399(this,_3ad);\n});\n},exists:function(jq,_3ae){\nreturn _387(jq[0],_3ae);\n},update:function(jq,_3af){\nreturn jq.each(function(){\n_37a(this,_3af);\n});\n},enableTab:function(jq,_3b0){\nreturn jq.each(function(){\nvar opts=$(this).tabs(\"getTab\",_3b0).panel(\"options\");\nopts.tab.removeClass(\"tabs-disabled\");\nopts.disabled=false;\n});\n},disableTab:function(jq,_3b1){\nreturn jq.each(function(){\nvar opts=$(this).tabs(\"getTab\",_3b1).panel(\"options\");\nopts.tab.addClass(\"tabs-disabled\");\nopts.disabled=true;\n});\n},showHeader:function(jq){\nreturn jq.each(function(){\n_39f(this,true);\n});\n},hideHeader:function(jq){\nreturn jq.each(function(){\n_39f(this,false);\n});\n},showTool:function(jq){\nreturn jq.each(function(){\n_3a2(this,true);\n});\n},hideTool:function(jq){\nreturn jq.each(function(){\n_3a2(this,false);\n});\n},scrollBy:function(jq,_3b2){\nreturn jq.each(function(){\nvar opts=$(this).tabs(\"options\");\nvar wrap=$(this).find(\">div.tabs-header>div.tabs-wrap\");\nvar pos=Math.min(wrap._scrollLeft()+_3b2,_3b3());\nwrap.animate({scrollLeft:pos},opts.scrollDuration);\nfunction _3b3(){\nvar w=0;\nvar ul=wrap.children(\"ul\");\nul.children(\"li\").each(function(){\nw+=$(this).outerWidth(true);\n});\nreturn w-wrap.width()+(ul.outerWidth()-ul.width());\n};\n});\n}};\n$.fn.tabs.parseOptions=function(_3b4){\nreturn $.extend({},$.parser.parseOptions(_3b4,[\"tools\",\"toolPosition\",\"tabPosition\",{fit:\"boolean\",border:\"boolean\",plain:\"boolean\"},{headerWidth:\"number\",tabWidth:\"number\",tabHeight:\"number\",selected:\"number\"},{showHeader:\"boolean\",justified:\"boolean\",narrow:\"boolean\",pill:\"boolean\"}]));\n};\n$.fn.tabs.defaults={width:\"auto\",height:\"auto\",headerWidth:150,tabWidth:\"auto\",tabHeight:32,selected:0,showHeader:true,plain:false,fit:false,border:true,justified:false,narrow:false,pill:false,tools:null,toolPosition:\"right\",tabPosition:\"top\",scrollIncrement:100,scrollDuration:400,onLoad:function(_3b5){\n},onSelect:function(_3b6,_3b7){\n},onUnselect:function(_3b8,_3b9){\n},onBeforeClose:function(_3ba,_3bb){\n},onClose:function(_3bc,_3bd){\n},onAdd:function(_3be,_3bf){\n},onUpdate:function(_3c0,_3c1){\n},onContextMenu:function(e,_3c2,_3c3){\n}};\n})(jQuery);\n(function($){\nvar _3c4=false;\nfunction _3c5(_3c6,_3c7){\nvar _3c8=$.data(_3c6,\"layout\");\nvar opts=_3c8.options;\nvar _3c9=_3c8.panels;\nvar cc=$(_3c6);\nif(_3c7){\n$.extend(opts,{width:_3c7.width,height:_3c7.height});\n}\nif(_3c6.tagName.toLowerCase()==\"body\"){\ncc._size(\"fit\");\n}else{\ncc._size(opts);\n}\nvar cpos={top:0,left:0,width:cc.width(),height:cc.height()};\n_3ca(_3cb(_3c9.expandNorth)?_3c9.expandNorth:_3c9.north,\"n\");\n_3ca(_3cb(_3c9.expandSouth)?_3c9.expandSouth:_3c9.south,\"s\");\n_3cc(_3cb(_3c9.expandEast)?_3c9.expandEast:_3c9.east,\"e\");\n_3cc(_3cb(_3c9.expandWest)?_3c9.expandWest:_3c9.west,\"w\");\n_3c9.center.panel(\"resize\",cpos);\nfunction _3ca(pp,type){\nif(!pp.length||!_3cb(pp)){\nreturn;\n}\nvar opts=pp.panel(\"options\");\npp.panel(\"resize\",{width:cc.width(),height:opts.height});\nvar _3cd=pp.panel(\"panel\").outerHeight();\npp.panel(\"move\",{left:0,top:(type==\"n\"?0:cc.height()-_3cd)});\ncpos.height-=_3cd;\nif(type==\"n\"){\ncpos.top+=_3cd;\nif(!opts.split&&opts.border){\ncpos.top--;\n}\n}\nif(!opts.split&&opts.border){\ncpos.height++;\n}\n};\nfunction _3cc(pp,type){\nif(!pp.length||!_3cb(pp)){\nreturn;\n}\nvar opts=pp.panel(\"options\");\npp.panel(\"resize\",{width:opts.width,height:cpos.height});\nvar _3ce=pp.panel(\"panel\").outerWidth();\npp.panel(\"move\",{left:(type==\"e\"?cc.width()-_3ce:0),top:cpos.top});\ncpos.width-=_3ce;\nif(type==\"w\"){\ncpos.left+=_3ce;\nif(!opts.split&&opts.border){\ncpos.left--;\n}\n}\nif(!opts.split&&opts.border){\ncpos.width++;\n}\n};\n};\nfunction init(_3cf){\nvar cc=$(_3cf);\ncc.addClass(\"layout\");\nfunction _3d0(el){\nvar _3d1=$.fn.layout.parsePanelOptions(el);\nif(\"north,south,east,west,center\".indexOf(_3d1.region)>=0){\n_3d4(_3cf,_3d1,el);\n}\n};\nvar opts=cc.layout(\"options\");\nvar _3d2=opts.onAdd;\nopts.onAdd=function(){\n};\ncc.find(\">div,>form>div\").each(function(){\n_3d0(this);\n});\nopts.onAdd=_3d2;\ncc.append(\"<div class=\\\"layout-split-proxy-h\\\"></div><div class=\\\"layout-split-proxy-v\\\"></div>\");\ncc._bind(\"_resize\",function(e,_3d3){\nif($(this).hasClass(\"easyui-fluid\")||_3d3){\n_3c5(_3cf);\n}\nreturn false;\n});\n};\nfunction _3d4(_3d5,_3d6,el){\n_3d6.region=_3d6.region||\"center\";\nvar _3d7=$.data(_3d5,\"layout\").panels;\nvar cc=$(_3d5);\nvar dir=_3d6.region;\nif(_3d7[dir].length){\nreturn;\n}\nvar pp=$(el);\nif(!pp.length){\npp=$(\"<div></div>\").appendTo(cc);\n}\nvar _3d8=$.extend({},$.fn.layout.paneldefaults,{width:(pp.length?parseInt(pp[0].style.width)||pp.outerWidth():\"auto\"),height:(pp.length?parseInt(pp[0].style.height)||pp.outerHeight():\"auto\"),doSize:false,collapsible:true,onOpen:function(){\nvar tool=$(this).panel(\"header\").children(\"div.panel-tool\");\ntool.children(\"a.panel-tool-collapse\").hide();\nvar _3d9={north:\"up\",south:\"down\",east:\"right\",west:\"left\"};\nif(!_3d9[dir]){\nreturn;\n}\nvar _3da=\"layout-button-\"+_3d9[dir];\nvar t=tool.children(\"a.\"+_3da);\nif(!t.length){\nt=$(\"<a href=\\\"javascript:;\\\"></a>\").addClass(_3da).appendTo(tool);\nt._bind(\"click\",{dir:dir},function(e){\n_3f1(_3d5,e.data.dir);\nreturn false;\n});\n}\n$(this).panel(\"options\").collapsible?t.show():t.hide();\n}},_3d6,{cls:((_3d6.cls||\"\")+\" layout-panel layout-panel-\"+dir),bodyCls:((_3d6.bodyCls||\"\")+\" layout-body\")});\npp.panel(_3d8);\n_3d7[dir]=pp;\nvar _3db={north:\"s\",south:\"n\",east:\"w\",west:\"e\"};\nvar _3dc=pp.panel(\"panel\");\nif(pp.panel(\"options\").split){\n_3dc.addClass(\"layout-split-\"+dir);\n}\n_3dc.resizable($.extend({},{handles:(_3db[dir]||\"\"),disabled:(!pp.panel(\"options\").split),onStartResize:function(e){\n_3c4=true;\nif(dir==\"north\"||dir==\"south\"){\nvar _3dd=$(\">div.layout-split-proxy-v\",_3d5);\n}else{\nvar _3dd=$(\">div.layout-split-proxy-h\",_3d5);\n}\nvar top=0,left=0,_3de=0,_3df=0;\nvar pos={display:\"block\"};\nif(dir==\"north\"){\npos.top=parseInt(_3dc.css(\"top\"))+_3dc.outerHeight()-_3dd.height();\npos.left=parseInt(_3dc.css(\"left\"));\npos.width=_3dc.outerWidth();\npos.height=_3dd.height();\n}else{\nif(dir==\"south\"){\npos.top=parseInt(_3dc.css(\"top\"));\npos.left=parseInt(_3dc.css(\"left\"));\npos.width=_3dc.outerWidth();\npos.height=_3dd.height();\n}else{\nif(dir==\"east\"){\npos.top=parseInt(_3dc.css(\"top\"))||0;\npos.left=parseInt(_3dc.css(\"left\"))||0;\npos.width=_3dd.width();\npos.height=_3dc.outerHeight();\n}else{\nif(dir==\"west\"){\npos.top=parseInt(_3dc.css(\"top\"))||0;\npos.left=_3dc.outerWidth()-_3dd.width();\npos.width=_3dd.width();\npos.height=_3dc.outerHeight();\n}\n}\n}\n}\n_3dd.css(pos);\n$(\"<div class=\\\"layout-mask\\\"></div>\").css({left:0,top:0,width:cc.width(),height:cc.height()}).appendTo(cc);\n},onResize:function(e){\nif(dir==\"north\"||dir==\"south\"){\nvar _3e0=_3e1(this);\n$(this).resizable(\"options\").maxHeight=_3e0;\nvar _3e2=$(\">div.layout-split-proxy-v\",_3d5);\nvar top=dir==\"north\"?e.data.height-_3e2.height():$(_3d5).height()-e.data.height;\n_3e2.css(\"top\",top);\n}else{\nvar _3e3=_3e1(this);\n$(this).resizable(\"options\").maxWidth=_3e3;\nvar _3e2=$(\">div.layout-split-proxy-h\",_3d5);\nvar left=dir==\"west\"?e.data.width-_3e2.width():$(_3d5).width()-e.data.width;\n_3e2.css(\"left\",left);\n}\nreturn false;\n},onStopResize:function(e){\ncc.children(\"div.layout-split-proxy-v,div.layout-split-proxy-h\").hide();\npp.panel(\"resize\",e.data);\n_3c5(_3d5);\n_3c4=false;\ncc.find(\">div.layout-mask\").remove();\n}},_3d6));\ncc.layout(\"options\").onAdd.call(_3d5,dir);\nfunction _3e1(p){\nvar _3e4=\"expand\"+dir.substring(0,1).toUpperCase()+dir.substring(1);\nvar _3e5=_3d7[\"center\"];\nvar _3e6=(dir==\"north\"||dir==\"south\")?\"minHeight\":\"minWidth\";\nvar _3e7=(dir==\"north\"||dir==\"south\")?\"maxHeight\":\"maxWidth\";\nvar _3e8=(dir==\"north\"||dir==\"south\")?\"_outerHeight\":\"_outerWidth\";\nvar _3e9=$.parser.parseValue(_3e7,_3d7[dir].panel(\"options\")[_3e7],$(_3d5));\nvar _3ea=$.parser.parseValue(_3e6,_3e5.panel(\"options\")[_3e6],$(_3d5));\nvar _3eb=_3e5.panel(\"panel\")[_3e8]()-_3ea;\nif(_3cb(_3d7[_3e4])){\n_3eb+=_3d7[_3e4][_3e8]()-1;\n}else{\n_3eb+=$(p)[_3e8]();\n}\nif(_3eb>_3e9){\n_3eb=_3e9;\n}\nreturn _3eb;\n};\n};\nfunction _3ec(_3ed,_3ee){\nvar _3ef=$.data(_3ed,\"layout\").panels;\nif(_3ef[_3ee].length){\n_3ef[_3ee].panel(\"destroy\");\n_3ef[_3ee]=$();\nvar _3f0=\"expand\"+_3ee.substring(0,1).toUpperCase()+_3ee.substring(1);\nif(_3ef[_3f0]){\n_3ef[_3f0].panel(\"destroy\");\n_3ef[_3f0]=undefined;\n}\n$(_3ed).layout(\"options\").onRemove.call(_3ed,_3ee);\n}\n};\nfunction _3f1(_3f2,_3f3,_3f4){\nif(_3f4==undefined){\n_3f4=\"normal\";\n}\nvar _3f5=$.data(_3f2,\"layout\").panels;\nvar p=_3f5[_3f3];\nvar _3f6=p.panel(\"options\");\nif(_3f6.onBeforeCollapse.call(p)==false){\nreturn;\n}\nvar _3f7=\"expand\"+_3f3.substring(0,1).toUpperCase()+_3f3.substring(1);\nif(!_3f5[_3f7]){\n_3f5[_3f7]=_3f8(_3f3);\nvar ep=_3f5[_3f7].panel(\"panel\");\nif(!_3f6.expandMode){\nep.css(\"cursor\",\"default\");\n}else{\nep._bind(\"click\",function(){\nif(_3f6.expandMode==\"dock\"){\n_405(_3f2,_3f3);\n}else{\np.panel(\"expand\",false).panel(\"open\");\nvar _3f9=_3fa();\np.panel(\"resize\",_3f9.collapse);\np.panel(\"panel\")._unbind(\".layout\")._bind(\"mouseleave.layout\",{region:_3f3},function(e){\n$(this).stop(true,true);\nif(_3c4==true){\nreturn;\n}\nif($(\"body>div.combo-p>div.combo-panel:visible\").length){\nreturn;\n}\n_3f1(_3f2,e.data.region);\n});\np.panel(\"panel\").animate(_3f9.expand,function(){\n$(_3f2).layout(\"options\").onExpand.call(_3f2,_3f3);\n});\n}\nreturn false;\n});\n}\n}\nvar _3fb=_3fa();\nif(!_3cb(_3f5[_3f7])){\n_3f5.center.panel(\"resize\",_3fb.resizeC);\n}\np.panel(\"panel\").animate(_3fb.collapse,_3f4,function(){\np.panel(\"collapse\",false).panel(\"close\");\n_3f5[_3f7].panel(\"open\").panel(\"resize\",_3fb.expandP);\n$(this)._unbind(\".layout\");\n$(_3f2).layout(\"options\").onCollapse.call(_3f2,_3f3);\n});\nfunction _3f8(dir){\nvar _3fc={\"east\":\"left\",\"west\":\"right\",\"north\":\"down\",\"south\":\"up\"};\nvar isns=(_3f6.region==\"north\"||_3f6.region==\"south\");\nvar icon=\"layout-button-\"+_3fc[dir];\nvar p=$(\"<div></div>\").appendTo(_3f2);\np.panel($.extend({},$.fn.layout.paneldefaults,{cls:(\"layout-expand layout-expand-\"+dir),title:\"&nbsp;\",titleDirection:_3f6.titleDirection,iconCls:(_3f6.hideCollapsedContent?null:_3f6.iconCls),closed:true,minWidth:0,minHeight:0,doSize:false,region:_3f6.region,collapsedSize:_3f6.collapsedSize,noheader:(!isns&&_3f6.hideExpandTool),tools:((isns&&_3f6.hideExpandTool)?null:[{iconCls:icon,handler:function(){\n_405(_3f2,_3f3);\nreturn false;\n}}]),onResize:function(){\nvar _3fd=$(this).children(\".layout-expand-title\");\nif(_3fd.length){\nvar icon=$(this).children(\".panel-icon\");\nvar _3fe=icon.length>0?(icon._outerHeight()+2):0;\n_3fd._outerWidth($(this).height()-_3fe);\nvar left=($(this).width()-Math.min(_3fd._outerWidth(),_3fd._outerHeight()))/2;\nvar top=Math.max(_3fd._outerWidth(),_3fd._outerHeight());\nif(_3fd.hasClass(\"layout-expand-title-down\")){\nleft+=Math.min(_3fd._outerWidth(),_3fd._outerHeight());\ntop=0;\n}\ntop+=_3fe;\n_3fd.css({left:(left+\"px\"),top:(top+\"px\")});\n}\n}}));\nif(!_3f6.hideCollapsedContent){\nvar _3ff=typeof _3f6.collapsedContent==\"function\"?_3f6.collapsedContent.call(p[0],_3f6.title):_3f6.collapsedContent;\nisns?p.panel(\"setTitle\",_3ff):p.html(_3ff);\n}\np.panel(\"panel\").hover(function(){\n$(this).addClass(\"layout-expand-over\");\n},function(){\n$(this).removeClass(\"layout-expand-over\");\n});\nreturn p;\n};\nfunction _3fa(){\nvar cc=$(_3f2);\nvar _400=_3f5.center.panel(\"options\");\nvar _401=_3f6.collapsedSize;\nif(_3f3==\"east\"){\nvar _402=p.panel(\"panel\")._outerWidth();\nvar _403=_400.width+_402-_401;\nif(_3f6.split||!_3f6.border){\n_403++;\n}\nreturn {resizeC:{width:_403},expand:{left:cc.width()-_402},expandP:{top:_400.top,left:cc.width()-_401,width:_401,height:_400.height},collapse:{left:cc.width(),top:_400.top,height:_400.height}};\n}else{\nif(_3f3==\"west\"){\nvar _402=p.panel(\"panel\")._outerWidth();\nvar _403=_400.width+_402-_401;\nif(_3f6.split||!_3f6.border){\n_403++;\n}\nreturn {resizeC:{width:_403,left:_401-1},expand:{left:0},expandP:{left:0,top:_400.top,width:_401,height:_400.height},collapse:{left:-_402,top:_400.top,height:_400.height}};\n}else{\nif(_3f3==\"north\"){\nvar _404=p.panel(\"panel\")._outerHeight();\nvar hh=_400.height;\nif(!_3cb(_3f5.expandNorth)){\nhh+=_404-_401+((_3f6.split||!_3f6.border)?1:0);\n}\n_3f5.east.add(_3f5.west).add(_3f5.expandEast).add(_3f5.expandWest).panel(\"resize\",{top:_401-1,height:hh});\nreturn {resizeC:{top:_401-1,height:hh},expand:{top:0},expandP:{top:0,left:0,width:cc.width(),height:_401},collapse:{top:-_404,width:cc.width()}};\n}else{\nif(_3f3==\"south\"){\nvar _404=p.panel(\"panel\")._outerHeight();\nvar hh=_400.height;\nif(!_3cb(_3f5.expandSouth)){\nhh+=_404-_401+((_3f6.split||!_3f6.border)?1:0);\n}\n_3f5.east.add(_3f5.west).add(_3f5.expandEast).add(_3f5.expandWest).panel(\"resize\",{height:hh});\nreturn {resizeC:{height:hh},expand:{top:cc.height()-_404},expandP:{top:cc.height()-_401,left:0,width:cc.width(),height:_401},collapse:{top:cc.height(),width:cc.width()}};\n}\n}\n}\n}\n};\n};\nfunction _405(_406,_407){\nvar _408=$.data(_406,\"layout\").panels;\nvar p=_408[_407];\nvar _409=p.panel(\"options\");\nif(_409.onBeforeExpand.call(p)==false){\nreturn;\n}\nvar _40a=\"expand\"+_407.substring(0,1).toUpperCase()+_407.substring(1);\nif(_408[_40a]){\n_408[_40a].panel(\"close\");\np.panel(\"panel\").stop(true,true);\np.panel(\"expand\",false).panel(\"open\");\nvar _40b=_40c();\np.panel(\"resize\",_40b.collapse);\np.panel(\"panel\").animate(_40b.expand,function(){\n_3c5(_406);\n$(_406).layout(\"options\").onExpand.call(_406,_407);\n});\n}\nfunction _40c(){\nvar cc=$(_406);\nvar _40d=_408.center.panel(\"options\");\nif(_407==\"east\"&&_408.expandEast){\nreturn {collapse:{left:cc.width(),top:_40d.top,height:_40d.height},expand:{left:cc.width()-p.panel(\"panel\")._outerWidth()}};\n}else{\nif(_407==\"west\"&&_408.expandWest){\nreturn {collapse:{left:-p.panel(\"panel\")._outerWidth(),top:_40d.top,height:_40d.height},expand:{left:0}};\n}else{\nif(_407==\"north\"&&_408.expandNorth){\nreturn {collapse:{top:-p.panel(\"panel\")._outerHeight(),width:cc.width()},expand:{top:0}};\n}else{\nif(_407==\"south\"&&_408.expandSouth){\nreturn {collapse:{top:cc.height(),width:cc.width()},expand:{top:cc.height()-p.panel(\"panel\")._outerHeight()}};\n}\n}\n}\n}\n};\n};\nfunction _3cb(pp){\nif(!pp){\nreturn false;\n}\nif(pp.length){\nreturn pp.panel(\"panel\").is(\":visible\");\n}else{\nreturn false;\n}\n};\nfunction _40e(_40f){\nvar _410=$.data(_40f,\"layout\");\nvar opts=_410.options;\nvar _411=_410.panels;\nvar _412=opts.onCollapse;\nopts.onCollapse=function(){\n};\n_413(\"east\");\n_413(\"west\");\n_413(\"north\");\n_413(\"south\");\nopts.onCollapse=_412;\nfunction _413(_414){\nvar p=_411[_414];\nif(p.length&&p.panel(\"options\").collapsed){\n_3f1(_40f,_414,0);\n}\n};\n};\nfunction _415(_416,_417,_418){\nvar p=$(_416).layout(\"panel\",_417);\np.panel(\"options\").split=_418;\nvar cls=\"layout-split-\"+_417;\nvar _419=p.panel(\"panel\").removeClass(cls);\nif(_418){\n_419.addClass(cls);\n}\n_419.resizable({disabled:(!_418)});\n_3c5(_416);\n};\n$.fn.layout=function(_41a,_41b){\nif(typeof _41a==\"string\"){\nreturn $.fn.layout.methods[_41a](this,_41b);\n}\n_41a=_41a||{};\nreturn this.each(function(){\nvar _41c=$.data(this,\"layout\");\nif(_41c){\n$.extend(_41c.options,_41a);\n}else{\nvar opts=$.extend({},$.fn.layout.defaults,$.fn.layout.parseOptions(this),_41a);\n$.data(this,\"layout\",{options:opts,panels:{center:$(),north:$(),south:$(),east:$(),west:$()}});\ninit(this);\n}\n_3c5(this);\n_40e(this);\n});\n};\n$.fn.layout.methods={options:function(jq){\nreturn $.data(jq[0],\"layout\").options;\n},resize:function(jq,_41d){\nreturn jq.each(function(){\n_3c5(this,_41d);\n});\n},panel:function(jq,_41e){\nreturn $.data(jq[0],\"layout\").panels[_41e];\n},collapse:function(jq,_41f){\nreturn jq.each(function(){\n_3f1(this,_41f);\n});\n},expand:function(jq,_420){\nreturn jq.each(function(){\n_405(this,_420);\n});\n},add:function(jq,_421){\nreturn jq.each(function(){\n_3d4(this,_421);\n_3c5(this);\nif($(this).layout(\"panel\",_421.region).panel(\"options\").collapsed){\n_3f1(this,_421.region,0);\n}\n});\n},remove:function(jq,_422){\nreturn jq.each(function(){\n_3ec(this,_422);\n_3c5(this);\n});\n},split:function(jq,_423){\nreturn jq.each(function(){\n_415(this,_423,true);\n});\n},unsplit:function(jq,_424){\nreturn jq.each(function(){\n_415(this,_424,false);\n});\n}};\n$.fn.layout.parseOptions=function(_425){\nreturn $.extend({},$.parser.parseOptions(_425,[{fit:\"boolean\"}]));\n};\n$.fn.layout.defaults={fit:false,onExpand:function(_426){\n},onCollapse:function(_427){\n},onAdd:function(_428){\n},onRemove:function(_429){\n}};\n$.fn.layout.parsePanelOptions=function(_42a){\nvar t=$(_42a);\nreturn $.extend({},$.fn.panel.parseOptions(_42a),$.parser.parseOptions(_42a,[\"region\",{split:\"boolean\",collpasedSize:\"number\",minWidth:\"number\",minHeight:\"number\",maxWidth:\"number\",maxHeight:\"number\"}]));\n};\n$.fn.layout.paneldefaults=$.extend({},$.fn.panel.defaults,{region:null,split:false,collapsedSize:32,expandMode:\"float\",hideExpandTool:false,hideCollapsedContent:true,collapsedContent:function(_42b){\nvar p=$(this);\nvar opts=p.panel(\"options\");\nif(opts.region==\"north\"||opts.region==\"south\"){\nreturn _42b;\n}\nvar cc=[];\nif(opts.iconCls){\ncc.push(\"<div class=\\\"panel-icon \"+opts.iconCls+\"\\\"></div>\");\n}\ncc.push(\"<div class=\\\"panel-title layout-expand-title\");\ncc.push(\" layout-expand-title-\"+opts.titleDirection);\ncc.push(opts.iconCls?\" layout-expand-with-icon\":\"\");\ncc.push(\"\\\">\");\ncc.push(_42b);\ncc.push(\"</div>\");\nreturn cc.join(\"\");\n},minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000});\n})(jQuery);\n(function($){\n$(function(){\n$(document)._unbind(\".menu\")._bind(\"mousedown.menu\",function(e){\nvar m=$(e.target).closest(\"div.menu,div.combo-p\");\nif(m.length){\nreturn;\n}\n$(\"body>div.menu-top:visible\").not(\".menu-inline\").menu(\"hide\");\n_42c($(\"body>div.menu:visible\").not(\".menu-inline\"));\n});\n});\nfunction init(_42d){\nvar opts=$.data(_42d,\"menu\").options;\n$(_42d).addClass(\"menu-top\");\nopts.inline?$(_42d).addClass(\"menu-inline\"):$(_42d).appendTo(\"body\");\n$(_42d)._bind(\"_resize\",function(e,_42e){\nif($(this).hasClass(\"easyui-fluid\")||_42e){\n$(_42d).menu(\"resize\",_42d);\n}\nreturn false;\n});\nvar _42f=_430($(_42d));\nfor(var i=0;i<_42f.length;i++){\n_433(_42d,_42f[i]);\n}\nfunction _430(menu){\nvar _431=[];\nmenu.addClass(\"menu\");\n_431.push(menu);\nif(!menu.hasClass(\"menu-content\")){\nmenu.children(\"div\").each(function(){\nvar _432=$(this).children(\"div\");\nif(_432.length){\n_432.appendTo(\"body\");\nthis.submenu=_432;\nvar mm=_430(_432);\n_431=_431.concat(mm);\n}\n});\n}\nreturn _431;\n};\n};\nfunction _433(_434,div){\nvar menu=$(div).addClass(\"menu\");\nif(!menu.data(\"menu\")){\nmenu.data(\"menu\",{options:$.parser.parseOptions(menu[0],[\"width\",\"height\"])});\n}\nif(!menu.hasClass(\"menu-content\")){\nmenu.children(\"div\").each(function(){\n_435(_434,this);\n});\n$(\"<div class=\\\"menu-line\\\"></div>\").prependTo(menu);\n}\n_436(_434,menu);\nif(!menu.hasClass(\"menu-inline\")){\nmenu.hide();\n}\n_437(_434,menu);\n};\nfunction _435(_438,div,_439){\nvar item=$(div);\nvar _43a=$.extend({},$.parser.parseOptions(item[0],[\"id\",\"name\",\"iconCls\",\"href\",{separator:\"boolean\"}]),{disabled:(item.attr(\"disabled\")?true:undefined),text:$.trim(item.html()),onclick:item[0].onclick},_439||{});\n_43a.onclick=_43a.onclick||_43a.handler||null;\nitem.data(\"menuitem\",{options:_43a});\nif(_43a.separator){\nitem.addClass(\"menu-sep\");\n}\nif(!item.hasClass(\"menu-sep\")){\nitem.addClass(\"menu-item\");\nitem.empty().append($(\"<div class=\\\"menu-text\\\"></div>\").html(_43a.text));\nif(_43a.iconCls){\n$(\"<div class=\\\"menu-icon\\\"></div>\").addClass(_43a.iconCls).appendTo(item);\n}\nif(_43a.id){\nitem.attr(\"id\",_43a.id);\n}\nif(_43a.onclick){\nif(typeof _43a.onclick==\"string\"){\nitem.attr(\"onclick\",_43a.onclick);\n}else{\nitem[0].onclick=eval(_43a.onclick);\n}\n}\nif(_43a.disabled){\n_43b(_438,item[0],true);\n}\nif(item[0].submenu){\n$(\"<div class=\\\"menu-rightarrow\\\"></div>\").appendTo(item);\n}\n}\n};\nfunction _436(_43c,menu){\nvar opts=$.data(_43c,\"menu\").options;\nvar _43d=menu.attr(\"style\")||\"\";\nvar _43e=menu.is(\":visible\");\nmenu.css({display:\"block\",left:-10000,height:\"auto\",overflow:\"hidden\"});\nmenu.find(\".menu-item\").each(function(){\n$(this)._outerHeight(opts.itemHeight);\n$(this).find(\".menu-text\").css({height:(opts.itemHeight-2)+\"px\",lineHeight:(opts.itemHeight-2)+\"px\"});\n});\nmenu.removeClass(\"menu-noline\").addClass(opts.noline?\"menu-noline\":\"\");\nvar _43f=menu.data(\"menu\").options;\nvar _440=_43f.width;\nvar _441=_43f.height;\nif(isNaN(parseInt(_440))){\n_440=0;\nmenu.find(\"div.menu-text\").each(function(){\nif(_440<$(this).outerWidth()){\n_440=$(this).outerWidth();\n}\n});\n_440=_440?_440+40:\"\";\n}\nvar _442=menu.outerHeight();\nif(isNaN(parseInt(_441))){\n_441=_442;\nif(menu.hasClass(\"menu-top\")&&opts.alignTo){\nvar at=$(opts.alignTo);\nvar h1=at.offset().top-$(document).scrollTop();\nvar h2=$(window)._outerHeight()+$(document).scrollTop()-at.offset().top-at._outerHeight();\n_441=Math.min(_441,Math.max(h1,h2));\n}else{\nif(_441>$(window)._outerHeight()){\n_441=$(window).height();\n}\n}\n}\nmenu.attr(\"style\",_43d);\nmenu.show();\nmenu._size($.extend({},_43f,{width:_440,height:_441,minWidth:_43f.minWidth||opts.minWidth,maxWidth:_43f.maxWidth||opts.maxWidth}));\nmenu.find(\".easyui-fluid\").triggerHandler(\"_resize\",[true]);\nmenu.css(\"overflow\",menu.outerHeight()<_442?\"auto\":\"hidden\");\nmenu.children(\"div.menu-line\")._outerHeight(_442-2);\nif(!_43e){\nmenu.hide();\n}\n};\nfunction _437(_443,menu){\nvar _444=$.data(_443,\"menu\");\nvar opts=_444.options;\nmenu._unbind(\".menu\");\nfor(var _445 in opts.events){\nmenu._bind(_445+\".menu\",{target:_443},opts.events[_445]);\n}\n};\nfunction _446(e){\nvar _447=e.data.target;\nvar _448=$.data(_447,\"menu\");\nif(_448.timer){\nclearTimeout(_448.timer);\n_448.timer=null;\n}\n};\nfunction _449(e){\nvar _44a=e.data.target;\nvar _44b=$.data(_44a,\"menu\");\nif(_44b.options.hideOnUnhover){\n_44b.timer=setTimeout(function(){\n_44c(_44a,$(_44a).hasClass(\"menu-inline\"));\n},_44b.options.duration);\n}\n};\nfunction _44d(e){\nvar _44e=e.data.target;\nvar item=$(e.target).closest(\".menu-item\");\nif(item.length){\nitem.siblings().each(function(){\nif(this.submenu){\n_42c(this.submenu);\n}\n$(this).removeClass(\"menu-active\");\n});\nitem.addClass(\"menu-active\");\nif(item.hasClass(\"menu-item-disabled\")){\nitem.addClass(\"menu-active-disabled\");\nreturn;\n}\nvar _44f=item[0].submenu;\nif(_44f){\n$(_44e).menu(\"show\",{menu:_44f,parent:item});\n}\n}\n};\nfunction _450(e){\nvar item=$(e.target).closest(\".menu-item\");\nif(item.length){\nitem.removeClass(\"menu-active menu-active-disabled\");\nvar _451=item[0].submenu;\nif(_451){\nif(e.pageX>=parseInt(_451.css(\"left\"))){\nitem.addClass(\"menu-active\");\n}else{\n_42c(_451);\n}\n}else{\nitem.removeClass(\"menu-active\");\n}\n}\n};\nfunction _452(e){\nvar _453=e.data.target;\nvar item=$(e.target).closest(\".menu-item\");\nif(item.length){\nvar opts=$(_453).data(\"menu\").options;\nvar _454=item.data(\"menuitem\").options;\nif(_454.disabled){\nreturn;\n}\nif(!item[0].submenu){\n_44c(_453,opts.inline);\nif(_454.href){\nlocation.href=_454.href;\n}\n}\nitem.trigger(\"mouseenter\");\nopts.onClick.call(_453,$(_453).menu(\"getItem\",item[0]));\n}\n};\nfunction _44c(_455,_456){\nvar _457=$.data(_455,\"menu\");\nif(_457){\nif($(_455).is(\":visible\")){\n_42c($(_455));\nif(_456){\n$(_455).show();\n}else{\n_457.options.onHide.call(_455);\n}\n}\n}\nreturn false;\n};\nfunction _458(_459,_45a){\n_45a=_45a||{};\nvar left,top;\nvar opts=$.data(_459,\"menu\").options;\nvar menu=$(_45a.menu||_459);\n$(_459).menu(\"resize\",menu[0]);\nif(menu.hasClass(\"menu-top\")){\n$.extend(opts,_45a);\nleft=opts.left;\ntop=opts.top;\nif(opts.alignTo){\nvar at=$(opts.alignTo);\nleft=at.offset().left;\ntop=at.offset().top+at._outerHeight();\nif(opts.align==\"right\"){\nleft+=at.outerWidth()-menu.outerWidth();\n}\n}\nif(left+menu.outerWidth()>$(window)._outerWidth()+$(document)._scrollLeft()){\nleft=$(window)._outerWidth()+$(document).scrollLeft()-menu.outerWidth()-5;\n}\nif(left<0){\nleft=0;\n}\ntop=_45b(top,opts.alignTo);\n}else{\nvar _45c=_45a.parent;\nleft=_45c.offset().left+_45c.outerWidth()-2;\nif(left+menu.outerWidth()+5>$(window)._outerWidth()+$(document).scrollLeft()){\nleft=_45c.offset().left-menu.outerWidth()+2;\n}\ntop=_45b(_45c.offset().top-3);\n}\nfunction _45b(top,_45d){\nif(top+menu.outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){\nif(_45d){\ntop=$(_45d).offset().top-menu._outerHeight();\n}else{\ntop=$(window)._outerHeight()+$(document).scrollTop()-menu.outerHeight();\n}\n}\nif(top<0){\ntop=0;\n}\nreturn top;\n};\nmenu.css(opts.position.call(_459,menu[0],left,top));\nmenu.show(0,function(){\nif(!menu[0].shadow){\nmenu[0].shadow=$(\"<div class=\\\"menu-shadow\\\"></div>\").insertAfter(menu);\n}\nmenu[0].shadow.css({display:(menu.hasClass(\"menu-inline\")?\"none\":\"block\"),zIndex:$.fn.menu.defaults.zIndex++,left:menu.css(\"left\"),top:menu.css(\"top\"),width:menu.outerWidth(),height:menu.outerHeight()});\nmenu.css(\"z-index\",$.fn.menu.defaults.zIndex++);\nif(menu.hasClass(\"menu-top\")){\nopts.onShow.call(_459);\n}\n});\n};\nfunction _42c(menu){\nif(menu&&menu.length){\n_45e(menu);\nmenu.find(\"div.menu-item\").each(function(){\nif(this.submenu){\n_42c(this.submenu);\n}\n$(this).removeClass(\"menu-active\");\n});\n}\nfunction _45e(m){\nm.stop(true,true);\nif(m[0].shadow){\nm[0].shadow.hide();\n}\nm.hide();\n};\n};\nfunction _45f(_460,_461){\nvar _462=null;\nvar fn=$.isFunction(_461)?_461:function(item){\nfor(var p in _461){\nif(item[p]!=_461[p]){\nreturn false;\n}\n}\nreturn true;\n};\nfunction find(menu){\nmenu.children(\"div.menu-item\").each(function(){\nvar opts=$(this).data(\"menuitem\").options;\nif(fn.call(_460,opts)==true){\n_462=$(_460).menu(\"getItem\",this);\n}else{\nif(this.submenu&&!_462){\nfind(this.submenu);\n}\n}\n});\n};\nfind($(_460));\nreturn _462;\n};\nfunction _43b(_463,_464,_465){\nvar t=$(_464);\nif(t.hasClass(\"menu-item\")){\nvar opts=t.data(\"menuitem\").options;\nopts.disabled=_465;\nif(_465){\nt.addClass(\"menu-item-disabled\");\nt[0].onclick=null;\n}else{\nt.removeClass(\"menu-item-disabled\");\nt[0].onclick=opts.onclick;\n}\n}\n};\nfunction _466(_467,_468){\nvar opts=$.data(_467,\"menu\").options;\nvar menu=$(_467);\nif(_468.parent){\nif(!_468.parent.submenu){\nvar _469=$(\"<div></div>\").appendTo(\"body\");\n_468.parent.submenu=_469;\n$(\"<div class=\\\"menu-rightarrow\\\"></div>\").appendTo(_468.parent);\n_433(_467,_469);\n}\nmenu=_468.parent.submenu;\n}\nvar div=$(\"<div></div>\").appendTo(menu);\n_435(_467,div,_468);\n};\nfunction _46a(_46b,_46c){\nfunction _46d(el){\nif(el.submenu){\nel.submenu.children(\"div.menu-item\").each(function(){\n_46d(this);\n});\nvar _46e=el.submenu[0].shadow;\nif(_46e){\n_46e.remove();\n}\nel.submenu.remove();\n}\n$(el).remove();\n};\n_46d(_46c);\n};\nfunction _46f(_470,_471,_472){\nvar menu=$(_471).parent();\nif(_472){\n$(_471).show();\n}else{\n$(_471).hide();\n}\n_436(_470,menu);\n};\nfunction _473(_474){\n$(_474).children(\"div.menu-item\").each(function(){\n_46a(_474,this);\n});\nif(_474.shadow){\n_474.shadow.remove();\n}\n$(_474).remove();\n};\n$.fn.menu=function(_475,_476){\nif(typeof _475==\"string\"){\nreturn $.fn.menu.methods[_475](this,_476);\n}\n_475=_475||{};\nreturn this.each(function(){\nvar _477=$.data(this,\"menu\");\nif(_477){\n$.extend(_477.options,_475);\n}else{\n_477=$.data(this,\"menu\",{options:$.extend({},$.fn.menu.defaults,$.fn.menu.parseOptions(this),_475)});\ninit(this);\n}\n$(this).css({left:_477.options.left,top:_477.options.top});\n});\n};\n$.fn.menu.methods={options:function(jq){\nreturn $.data(jq[0],\"menu\").options;\n},show:function(jq,pos){\nreturn jq.each(function(){\n_458(this,pos);\n});\n},hide:function(jq){\nreturn jq.each(function(){\n_44c(this);\n});\n},destroy:function(jq){\nreturn jq.each(function(){\n_473(this);\n});\n},setText:function(jq,_478){\nreturn jq.each(function(){\nvar item=$(_478.target).data(\"menuitem\").options;\nitem.text=_478.text;\n$(_478.target).children(\"div.menu-text\").html(_478.text);\n});\n},setIcon:function(jq,_479){\nreturn jq.each(function(){\nvar item=$(_479.target).data(\"menuitem\").options;\nitem.iconCls=_479.iconCls;\n$(_479.target).children(\"div.menu-icon\").remove();\nif(_479.iconCls){\n$(\"<div class=\\\"menu-icon\\\"></div>\").addClass(_479.iconCls).appendTo(_479.target);\n}\n});\n},getItem:function(jq,_47a){\nvar item=$(_47a).data(\"menuitem\").options;\nreturn $.extend({},item,{target:$(_47a)[0]});\n},findItem:function(jq,text){\nif(typeof text==\"string\"){\nreturn _45f(jq[0],function(item){\nreturn $(\"<div>\"+item.text+\"</div>\").text()==text;\n});\n}else{\nreturn _45f(jq[0],text);\n}\n},appendItem:function(jq,_47b){\nreturn jq.each(function(){\n_466(this,_47b);\n});\n},removeItem:function(jq,_47c){\nreturn jq.each(function(){\n_46a(this,_47c);\n});\n},enableItem:function(jq,_47d){\nreturn jq.each(function(){\n_43b(this,_47d,false);\n});\n},disableItem:function(jq,_47e){\nreturn jq.each(function(){\n_43b(this,_47e,true);\n});\n},showItem:function(jq,_47f){\nreturn jq.each(function(){\n_46f(this,_47f,true);\n});\n},hideItem:function(jq,_480){\nreturn jq.each(function(){\n_46f(this,_480,false);\n});\n},resize:function(jq,_481){\nreturn jq.each(function(){\n_436(this,_481?$(_481):$(this));\n});\n}};\n$.fn.menu.parseOptions=function(_482){\nreturn $.extend({},$.parser.parseOptions(_482,[{minWidth:\"number\",itemHeight:\"number\",duration:\"number\",hideOnUnhover:\"boolean\"},{fit:\"boolean\",inline:\"boolean\",noline:\"boolean\"}]));\n};\n$.fn.menu.defaults={zIndex:110000,left:0,top:0,alignTo:null,align:\"left\",minWidth:150,itemHeight:32,duration:100,hideOnUnhover:true,inline:false,fit:false,noline:false,events:{mouseenter:_446,mouseleave:_449,mouseover:_44d,mouseout:_450,click:_452},position:function(_483,left,top){\nreturn {left:left,top:top};\n},onShow:function(){\n},onHide:function(){\n},onClick:function(item){\n}};\n})(jQuery);\n(function($){\nvar _484=1;\nfunction init(_485){\n$(_485).addClass(\"sidemenu\");\n};\nfunction _486(_487,_488){\nvar opts=$(_487).sidemenu(\"options\");\nif(_488){\n$.extend(opts,{width:_488.width,height:_488.height});\n}\n$(_487)._size(opts);\n$(_487).find(\".accordion\").accordion(\"resize\");\n};\nfunction _489(_48a,_48b,data){\nvar opts=$(_48a).sidemenu(\"options\");\nvar tt=$(\"<ul class=\\\"sidemenu-tree\\\"></ul>\").appendTo(_48b);\ntt.tree({data:data,animate:opts.animate,onBeforeSelect:function(node){\nif(node.children){\nreturn false;\n}\n},onSelect:function(node){\n_48c(_48a,node.id,true);\n},onExpand:function(node){\n_499(_48a,node);\n},onCollapse:function(node){\n_499(_48a,node);\n},onClick:function(node){\nif(node.children){\nif(node.state==\"open\"){\n$(node.target).addClass(\"tree-node-nonleaf-collapsed\");\n}else{\n$(node.target).removeClass(\"tree-node-nonleaf-collapsed\");\n}\n$(this).tree(\"toggle\",node.target);\n}\n}});\ntt._unbind(\".sidemenu\")._bind(\"mouseleave.sidemenu\",function(){\n$(_48b).trigger(\"mouseleave\");\n});\n_48c(_48a,opts.selectedItemId);\n};\nfunction _48d(_48e,_48f,data){\nvar opts=$(_48e).sidemenu(\"options\");\n$(_48f).tooltip({content:$(\"<div></div>\"),position:opts.floatMenuPosition,valign:\"top\",data:data,onUpdate:function(_490){\nvar _491=$(this).tooltip(\"options\");\nvar data=_491.data;\n_490.accordion({width:opts.floatMenuWidth,multiple:false}).accordion(\"add\",{title:data.text,collapsed:false,collapsible:false});\n_489(_48e,_490.accordion(\"panels\")[0],data.children);\n},onShow:function(){\nvar t=$(this);\nvar tip=t.tooltip(\"tip\").addClass(\"sidemenu-tooltip\");\ntip.children(\".tooltip-content\").addClass(\"sidemenu\");\ntip.find(\".accordion\").accordion(\"resize\");\ntip.add(tip.find(\"ul.tree\"))._unbind(\".sidemenu\")._bind(\"mouseover.sidemenu\",function(){\nt.tooltip(\"show\");\n})._bind(\"mouseleave.sidemenu\",function(){\nt.tooltip(\"hide\");\n});\nt.tooltip(\"reposition\");\n},onPosition:function(left,top){\nvar tip=$(this).tooltip(\"tip\");\nif(!opts.collapsed){\ntip.css({left:-999999});\n}else{\nif(top+tip.outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){\ntop=$(window)._outerHeight()+$(document).scrollTop()-tip.outerHeight();\ntip.css(\"top\",top);\n}\n}\n}});\n};\nfunction _492(_493,_494){\n$(_493).find(\".sidemenu-tree\").each(function(){\n_494($(this));\n});\n$(_493).find(\".tooltip-f\").each(function(){\nvar tip=$(this).tooltip(\"tip\");\nif(tip){\ntip.find(\".sidemenu-tree\").each(function(){\n_494($(this));\n});\n$(this).tooltip(\"reposition\");\n}\n});\n};\nfunction _48c(_495,_496,_497){\nvar _498=null;\nvar opts=$(_495).sidemenu(\"options\");\n_492(_495,function(t){\nt.find(\"div.tree-node-selected\").removeClass(\"tree-node-selected\");\nvar node=t.tree(\"find\",_496);\nif(node){\n$(node.target).addClass(\"tree-node-selected\");\nopts.selectedItemId=node.id;\nt.trigger(\"mouseleave.sidemenu\");\n_498=node;\n}\n});\nif(_497&&_498){\nopts.onSelect.call(_495,_498);\n}\n};\nfunction _499(_49a,item){\n_492(_49a,function(t){\nvar node=t.tree(\"find\",item.id);\nif(node){\nvar _49b=t.tree(\"options\");\nvar _49c=_49b.animate;\n_49b.animate=false;\nt.tree(item.state==\"open\"?\"expand\":\"collapse\",node.target);\n_49b.animate=_49c;\n}\n});\n};\nfunction _49d(_49e){\nvar opts=$(_49e).sidemenu(\"options\");\n$(_49e).empty();\nif(opts.data){\n$.easyui.forEach(opts.data,true,function(node){\nif(!node.id){\nnode.id=\"_easyui_sidemenu_\"+(_484++);\n}\nif(!node.iconCls){\nnode.iconCls=\"sidemenu-default-icon\";\n}\nif(node.children){\nnode.nodeCls=\"tree-node-nonleaf\";\nif(!node.state){\nnode.state=\"closed\";\n}\nif(node.state==\"open\"){\nnode.nodeCls=\"tree-node-nonleaf\";\n}else{\nnode.nodeCls=\"tree-node-nonleaf tree-node-nonleaf-collapsed\";\n}\n}\n});\nvar acc=$(\"<div></div>\").appendTo(_49e);\nacc.accordion({fit:opts.height==\"auto\"?false:true,border:opts.border,multiple:opts.multiple});\nvar data=opts.data;\nfor(var i=0;i<data.length;i++){\nacc.accordion(\"add\",{title:data[i].text,selected:data[i].state==\"open\",iconCls:data[i].iconCls,onBeforeExpand:function(){\nreturn !opts.collapsed;\n}});\nvar ap=acc.accordion(\"panels\")[i];\n_489(_49e,ap,data[i].children);\n_48d(_49e,ap.panel(\"header\"),data[i]);\n}\n}\n};\nfunction _49f(_4a0,_4a1){\nvar opts=$(_4a0).sidemenu(\"options\");\nopts.collapsed=_4a1;\nvar acc=$(_4a0).find(\".accordion\");\nvar _4a2=acc.accordion(\"panels\");\nacc.accordion(\"options\").animate=false;\nif(opts.collapsed){\n$(_4a0).addClass(\"sidemenu-collapsed\");\nfor(var i=0;i<_4a2.length;i++){\nvar _4a3=_4a2[i];\nif(_4a3.panel(\"options\").collapsed){\nopts.data[i].state=\"closed\";\n}else{\nopts.data[i].state=\"open\";\nacc.accordion(\"unselect\",i);\n}\nvar _4a4=_4a3.panel(\"header\");\n_4a4.find(\".panel-title\").html(\"\");\n_4a4.find(\".panel-tool\").hide();\n}\n}else{\n$(_4a0).removeClass(\"sidemenu-collapsed\");\nfor(var i=0;i<_4a2.length;i++){\nvar _4a3=_4a2[i];\nif(opts.data[i].state==\"open\"){\nacc.accordion(\"select\",i);\n}\nvar _4a4=_4a3.panel(\"header\");\n_4a4.find(\".panel-title\").html(_4a3.panel(\"options\").title);\n_4a4.find(\".panel-tool\").show();\n}\n}\nacc.accordion(\"options\").animate=opts.animate;\n};\nfunction _4a5(_4a6){\n$(_4a6).find(\".tooltip-f\").each(function(){\n$(this).tooltip(\"destroy\");\n});\n$(_4a6).remove();\n};\n$.fn.sidemenu=function(_4a7,_4a8){\nif(typeof _4a7==\"string\"){\nvar _4a9=$.fn.sidemenu.methods[_4a7];\nreturn _4a9(this,_4a8);\n}\n_4a7=_4a7||{};\nreturn this.each(function(){\nvar _4aa=$.data(this,\"sidemenu\");\nif(_4aa){\n$.extend(_4aa.options,_4a7);\n}else{\n_4aa=$.data(this,\"sidemenu\",{options:$.extend({},$.fn.sidemenu.defaults,$.fn.sidemenu.parseOptions(this),_4a7)});\ninit(this);\n}\n_486(this);\n_49d(this);\n_49f(this,_4aa.options.collapsed);\n});\n};\n$.fn.sidemenu.methods={options:function(jq){\nreturn jq.data(\"sidemenu\").options;\n},resize:function(jq,_4ab){\nreturn jq.each(function(){\n_486(this,_4ab);\n});\n},collapse:function(jq){\nreturn jq.each(function(){\n_49f(this,true);\n});\n},expand:function(jq){\nreturn jq.each(function(){\n_49f(this,false);\n});\n},destroy:function(jq){\nreturn jq.each(function(){\n_4a5(this);\n});\n}};\n$.fn.sidemenu.parseOptions=function(_4ac){\nvar t=$(_4ac);\nreturn $.extend({},$.parser.parseOptions(_4ac,[\"width\",\"height\"]));\n};\n$.fn.sidemenu.defaults={width:200,height:\"auto\",border:true,animate:true,multiple:true,collapsed:false,data:null,floatMenuWidth:200,floatMenuPosition:\"right\",onSelect:function(item){\n}};\n})(jQuery);\n(function($){\nfunction init(_4ad){\nvar opts=$.data(_4ad,\"menubutton\").options;\nvar btn=$(_4ad);\nbtn.linkbutton(opts);\nif(opts.hasDownArrow){\nbtn.removeClass(opts.cls.btn1+\" \"+opts.cls.btn2).addClass(\"m-btn\");\nbtn.removeClass(\"m-btn-small m-btn-medium m-btn-large\").addClass(\"m-btn-\"+opts.size);\nvar _4ae=btn.find(\".l-btn-left\");\n$(\"<span></span>\").addClass(opts.cls.arrow).appendTo(_4ae);\n$(\"<span></span>\").addClass(\"m-btn-line\").appendTo(_4ae);\n}\n$(_4ad).menubutton(\"resize\");\nif(opts.menu){\n$(opts.menu).menu({duration:opts.duration});\nvar _4af=$(opts.menu).menu(\"options\");\nvar _4b0=_4af.onShow;\nvar _4b1=_4af.onHide;\n$.extend(_4af,{onShow:function(){\nvar _4b2=$(this).menu(\"options\");\nvar btn=$(_4b2.alignTo);\nvar opts=btn.menubutton(\"options\");\nbtn.addClass((opts.plain==true)?opts.cls.btn2:opts.cls.btn1);\n_4b0.call(this);\n},onHide:function(){\nvar _4b3=$(this).menu(\"options\");\nvar btn=$(_4b3.alignTo);\nvar opts=btn.menubutton(\"options\");\nbtn.removeClass((opts.plain==true)?opts.cls.btn2:opts.cls.btn1);\n_4b1.call(this);\n}});\n}\n};\nfunction _4b4(_4b5){\nvar opts=$.data(_4b5,\"menubutton\").options;\nvar btn=$(_4b5);\nvar t=btn.find(\".\"+opts.cls.trigger);\nif(!t.length){\nt=btn;\n}\nt._unbind(\".menubutton\");\nvar _4b6=null;\nt._bind(opts.showEvent+\".menubutton\",function(){\nif(!_4b7()){\n_4b6=setTimeout(function(){\n_4b8(_4b5);\n},opts.duration);\nreturn false;\n}\n})._bind(opts.hideEvent+\".menubutton\",function(){\nif(_4b6){\nclearTimeout(_4b6);\n}\n$(opts.menu).triggerHandler(\"mouseleave\");\n});\nfunction _4b7(){\nreturn $(_4b5).linkbutton(\"options\").disabled;\n};\n};\nfunction _4b8(_4b9){\nvar opts=$(_4b9).menubutton(\"options\");\nif(opts.disabled||!opts.menu){\nreturn;\n}\n$(\"body>div.menu-top\").menu(\"hide\");\nvar btn=$(_4b9);\nvar mm=$(opts.menu);\nif(mm.length){\nmm.menu(\"options\").alignTo=btn;\nmm.menu(\"show\",{alignTo:btn,align:opts.menuAlign});\n}\nbtn.blur();\n};\n$.fn.menubutton=function(_4ba,_4bb){\nif(typeof _4ba==\"string\"){\nvar _4bc=$.fn.menubutton.methods[_4ba];\nif(_4bc){\nreturn _4bc(this,_4bb);\n}else{\nreturn this.linkbutton(_4ba,_4bb);\n}\n}\n_4ba=_4ba||{};\nreturn this.each(function(){\nvar _4bd=$.data(this,\"menubutton\");\nif(_4bd){\n$.extend(_4bd.options,_4ba);\n}else{\n$.data(this,\"menubutton\",{options:$.extend({},$.fn.menubutton.defaults,$.fn.menubutton.parseOptions(this),_4ba)});\n$(this)._propAttr(\"disabled\",false);\n}\ninit(this);\n_4b4(this);\n});\n};\n$.fn.menubutton.methods={options:function(jq){\nvar _4be=jq.linkbutton(\"options\");\nreturn $.extend($.data(jq[0],\"menubutton\").options,{toggle:_4be.toggle,selected:_4be.selected,disabled:_4be.disabled});\n},destroy:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).menubutton(\"options\");\nif(opts.menu){\n$(opts.menu).menu(\"destroy\");\n}\n$(this).remove();\n});\n}};\n$.fn.menubutton.parseOptions=function(_4bf){\nvar t=$(_4bf);\nreturn $.extend({},$.fn.linkbutton.parseOptions(_4bf),$.parser.parseOptions(_4bf,[\"menu\",{plain:\"boolean\",hasDownArrow:\"boolean\",duration:\"number\"}]));\n};\n$.fn.menubutton.defaults=$.extend({},$.fn.linkbutton.defaults,{plain:true,hasDownArrow:true,menu:null,menuAlign:\"left\",duration:100,showEvent:\"mouseenter\",hideEvent:\"mouseleave\",cls:{btn1:\"m-btn-active\",btn2:\"m-btn-plain-active\",arrow:\"m-btn-downarrow\",trigger:\"m-btn\"}});\n})(jQuery);\n(function($){\nfunction init(_4c0){\nvar opts=$.data(_4c0,\"splitbutton\").options;\n$(_4c0).menubutton(opts);\n$(_4c0).addClass(\"s-btn\");\n};\n$.fn.splitbutton=function(_4c1,_4c2){\nif(typeof _4c1==\"string\"){\nvar _4c3=$.fn.splitbutton.methods[_4c1];\nif(_4c3){\nreturn _4c3(this,_4c2);\n}else{\nreturn this.menubutton(_4c1,_4c2);\n}\n}\n_4c1=_4c1||{};\nreturn this.each(function(){\nvar _4c4=$.data(this,\"splitbutton\");\nif(_4c4){\n$.extend(_4c4.options,_4c1);\n}else{\n$.data(this,\"splitbutton\",{options:$.extend({},$.fn.splitbutton.defaults,$.fn.splitbutton.parseOptions(this),_4c1)});\n$(this)._propAttr(\"disabled\",false);\n}\ninit(this);\n});\n};\n$.fn.splitbutton.methods={options:function(jq){\nvar _4c5=jq.menubutton(\"options\");\nvar _4c6=$.data(jq[0],\"splitbutton\").options;\n$.extend(_4c6,{disabled:_4c5.disabled,toggle:_4c5.toggle,selected:_4c5.selected});\nreturn _4c6;\n}};\n$.fn.splitbutton.parseOptions=function(_4c7){\nvar t=$(_4c7);\nreturn $.extend({},$.fn.linkbutton.parseOptions(_4c7),$.parser.parseOptions(_4c7,[\"menu\",{plain:\"boolean\",duration:\"number\"}]));\n};\n$.fn.splitbutton.defaults=$.extend({},$.fn.linkbutton.defaults,{plain:true,menu:null,duration:100,cls:{btn1:\"m-btn-active s-btn-active\",btn2:\"m-btn-plain-active s-btn-plain-active\",arrow:\"m-btn-downarrow\",trigger:\"m-btn-line\"}});\n})(jQuery);\n(function($){\nvar _4c8=1;\nfunction init(_4c9){\nvar _4ca=$(\"<span class=\\\"switchbutton\\\">\"+\"<span class=\\\"switchbutton-inner\\\">\"+\"<span class=\\\"switchbutton-on\\\"></span>\"+\"<span class=\\\"switchbutton-handle\\\"></span>\"+\"<span class=\\\"switchbutton-off\\\"></span>\"+\"<input class=\\\"switchbutton-value\\\" type=\\\"checkbox\\\" tabindex=\\\"-1\\\">\"+\"</span>\"+\"</span>\").insertAfter(_4c9);\nvar t=$(_4c9);\nt.addClass(\"switchbutton-f\").hide();\nvar name=t.attr(\"name\");\nif(name){\nt.removeAttr(\"name\").attr(\"switchbuttonName\",name);\n_4ca.find(\".switchbutton-value\").attr(\"name\",name);\n}\n_4ca._bind(\"_resize\",function(e,_4cb){\nif($(this).hasClass(\"easyui-fluid\")||_4cb){\n_4cc(_4c9);\n}\nreturn false;\n});\nreturn _4ca;\n};\nfunction _4cc(_4cd,_4ce){\nvar _4cf=$.data(_4cd,\"switchbutton\");\nvar opts=_4cf.options;\nvar _4d0=_4cf.switchbutton;\nif(_4ce){\n$.extend(opts,_4ce);\n}\nvar _4d1=_4d0.is(\":visible\");\nif(!_4d1){\n_4d0.appendTo(\"body\");\n}\n_4d0._size(opts);\nif(opts.label&&opts.labelPosition){\nif(opts.labelPosition==\"top\"){\n_4cf.label._size({width:opts.labelWidth},_4d0);\n}else{\n_4cf.label._size({width:opts.labelWidth,height:_4d0.outerHeight()},_4d0);\n_4cf.label.css(\"lineHeight\",_4d0.outerHeight()+\"px\");\n}\n}\nvar w=_4d0.width();\nvar h=_4d0.height();\nvar w=_4d0.outerWidth();\nvar h=_4d0.outerHeight();\nvar _4d2=parseInt(opts.handleWidth)||_4d0.height();\nvar _4d3=w*2-_4d2;\n_4d0.find(\".switchbutton-inner\").css({width:_4d3+\"px\",height:h+\"px\",lineHeight:h+\"px\"});\n_4d0.find(\".switchbutton-handle\")._outerWidth(_4d2)._outerHeight(h).css({marginLeft:-_4d2/2+\"px\"});\n_4d0.find(\".switchbutton-on\").css({width:(w-_4d2/2)+\"px\",textIndent:(opts.reversed?\"\":\"-\")+_4d2/2+\"px\"});\n_4d0.find(\".switchbutton-off\").css({width:(w-_4d2/2)+\"px\",textIndent:(opts.reversed?\"-\":\"\")+_4d2/2+\"px\"});\nopts.marginWidth=w-_4d2;\n_4d4(_4cd,opts.checked,false);\nif(!_4d1){\n_4d0.insertAfter(_4cd);\n}\n};\nfunction _4d5(_4d6){\nvar _4d7=$.data(_4d6,\"switchbutton\");\nvar opts=_4d7.options;\nvar _4d8=_4d7.switchbutton;\nvar _4d9=_4d8.find(\".switchbutton-inner\");\nvar on=_4d9.find(\".switchbutton-on\").html(opts.onText);\nvar off=_4d9.find(\".switchbutton-off\").html(opts.offText);\nvar _4da=_4d9.find(\".switchbutton-handle\").html(opts.handleText);\nif(opts.reversed){\noff.prependTo(_4d9);\non.insertAfter(_4da);\n}else{\non.prependTo(_4d9);\noff.insertAfter(_4da);\n}\nvar _4db=\"_easyui_switchbutton_\"+(++_4c8);\nvar _4dc=_4d8.find(\".switchbutton-value\")._propAttr(\"checked\",opts.checked).attr(\"id\",_4db);\n_4dc._unbind(\".switchbutton\")._bind(\"change.switchbutton\",function(e){\nreturn false;\n});\n_4d8.removeClass(\"switchbutton-reversed\").addClass(opts.reversed?\"switchbutton-reversed\":\"\");\nif(opts.label){\nif(typeof opts.label==\"object\"){\n_4d7.label=$(opts.label);\n_4d7.label.attr(\"for\",_4db);\n}else{\n$(_4d7.label).remove();\n_4d7.label=$(\"<label class=\\\"textbox-label\\\"></label>\").html(opts.label);\n_4d7.label.css(\"textAlign\",opts.labelAlign).attr(\"for\",_4db);\nif(opts.labelPosition==\"after\"){\n_4d7.label.insertAfter(_4d8);\n}else{\n_4d7.label.insertBefore(_4d6);\n}\n_4d7.label.removeClass(\"textbox-label-left textbox-label-right textbox-label-top\");\n_4d7.label.addClass(\"textbox-label-\"+opts.labelPosition);\n}\n}else{\n$(_4d7.label).remove();\n}\n_4d4(_4d6,opts.checked);\n_4dd(_4d6,opts.readonly);\n_4de(_4d6,opts.disabled);\n$(_4d6).switchbutton(\"setValue\",opts.value);\n};\nfunction _4d4(_4df,_4e0,_4e1){\nvar _4e2=$.data(_4df,\"switchbutton\");\nvar opts=_4e2.options;\nvar _4e3=_4e2.switchbutton.find(\".switchbutton-inner\");\nvar _4e4=_4e3.find(\".switchbutton-on\");\nvar _4e5=opts.reversed?(_4e0?opts.marginWidth:0):(_4e0?0:opts.marginWidth);\nvar dir=_4e4.css(\"float\").toLowerCase();\nvar css={};\ncss[\"margin-\"+dir]=-_4e5+\"px\";\n_4e1?_4e3.animate(css,200):_4e3.css(css);\nvar _4e6=_4e3.find(\".switchbutton-value\");\n$(_4df).add(_4e6)._propAttr(\"checked\",_4e0);\nif(opts.checked!=_4e0){\nopts.checked=_4e0;\nopts.onChange.call(_4df,opts.checked);\n$(_4df).closest(\"form\").trigger(\"_change\",[_4df]);\n}\n};\nfunction _4de(_4e7,_4e8){\nvar _4e9=$.data(_4e7,\"switchbutton\");\nvar opts=_4e9.options;\nvar _4ea=_4e9.switchbutton;\nvar _4eb=_4ea.find(\".switchbutton-value\");\nif(_4e8){\nopts.disabled=true;\n$(_4e7).add(_4eb)._propAttr(\"disabled\",true);\n_4ea.addClass(\"switchbutton-disabled\");\n_4ea.removeAttr(\"tabindex\");\n}else{\nopts.disabled=false;\n$(_4e7).add(_4eb)._propAttr(\"disabled\",false);\n_4ea.removeClass(\"switchbutton-disabled\");\n_4ea.attr(\"tabindex\",$(_4e7).attr(\"tabindex\")||\"\");\n}\n};\nfunction _4dd(_4ec,mode){\nvar _4ed=$.data(_4ec,\"switchbutton\");\nvar opts=_4ed.options;\nopts.readonly=mode==undefined?true:mode;\n_4ed.switchbutton.removeClass(\"switchbutton-readonly\").addClass(opts.readonly?\"switchbutton-readonly\":\"\");\n};\nfunction _4ee(_4ef){\nvar _4f0=$.data(_4ef,\"switchbutton\");\nvar opts=_4f0.options;\n_4f0.switchbutton._unbind(\".switchbutton\")._bind(\"click.switchbutton\",function(){\nif(!opts.disabled&&!opts.readonly){\n_4d4(_4ef,opts.checked?false:true,true);\n}\n})._bind(\"keydown.switchbutton\",function(e){\nif(e.which==13||e.which==32){\nif(!opts.disabled&&!opts.readonly){\n_4d4(_4ef,opts.checked?false:true,true);\nreturn false;\n}\n}\n});\n};\n$.fn.switchbutton=function(_4f1,_4f2){\nif(typeof _4f1==\"string\"){\nreturn $.fn.switchbutton.methods[_4f1](this,_4f2);\n}\n_4f1=_4f1||{};\nreturn this.each(function(){\nvar _4f3=$.data(this,\"switchbutton\");\nif(_4f3){\n$.extend(_4f3.options,_4f1);\n}else{\n_4f3=$.data(this,\"switchbutton\",{options:$.extend({},$.fn.switchbutton.defaults,$.fn.switchbutton.parseOptions(this),_4f1),switchbutton:init(this)});\n}\n_4f3.options.originalChecked=_4f3.options.checked;\n_4d5(this);\n_4cc(this);\n_4ee(this);\n});\n};\n$.fn.switchbutton.methods={options:function(jq){\nvar _4f4=jq.data(\"switchbutton\");\nreturn $.extend(_4f4.options,{value:_4f4.switchbutton.find(\".switchbutton-value\").val()});\n},resize:function(jq,_4f5){\nreturn jq.each(function(){\n_4cc(this,_4f5);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_4de(this,false);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_4de(this,true);\n});\n},readonly:function(jq,mode){\nreturn jq.each(function(){\n_4dd(this,mode);\n});\n},check:function(jq){\nreturn jq.each(function(){\n_4d4(this,true);\n});\n},uncheck:function(jq){\nreturn jq.each(function(){\n_4d4(this,false);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_4d4(this,false);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).switchbutton(\"options\");\n_4d4(this,opts.originalChecked);\n});\n},setValue:function(jq,_4f6){\nreturn jq.each(function(){\n$(this).val(_4f6);\n$.data(this,\"switchbutton\").switchbutton.find(\".switchbutton-value\").val(_4f6);\n});\n}};\n$.fn.switchbutton.parseOptions=function(_4f7){\nvar t=$(_4f7);\nreturn $.extend({},$.parser.parseOptions(_4f7,[\"onText\",\"offText\",\"handleText\",{handleWidth:\"number\",reversed:\"boolean\"},\"label\",\"labelPosition\",\"labelAlign\",{labelWidth:\"number\"}]),{value:(t.val()||undefined),checked:(t.attr(\"checked\")?true:undefined),disabled:(t.attr(\"disabled\")?true:undefined),readonly:(t.attr(\"readonly\")?true:undefined)});\n};\n$.fn.switchbutton.defaults={handleWidth:\"auto\",width:60,height:30,checked:false,disabled:false,readonly:false,reversed:false,onText:\"ON\",offText:\"OFF\",handleText:\"\",value:\"on\",label:null,labelWidth:\"auto\",labelPosition:\"before\",labelAlign:\"left\",onChange:function(_4f8){\n}};\n})(jQuery);\n(function($){\nvar _4f9=1;\nfunction init(_4fa){\nvar _4fb=$(\"<span class=\\\"radiobutton inputbox\\\">\"+\"<span class=\\\"radiobutton-inner\\\" style=\\\"display:none\\\"></span>\"+\"<input type=\\\"radio\\\" class=\\\"radiobutton-value\\\">\"+\"</span>\").insertAfter(_4fa);\nvar t=$(_4fa);\nt.addClass(\"radiobutton-f\").hide();\nvar name=t.attr(\"name\");\nif(name){\nt.removeAttr(\"name\").attr(\"radiobuttonName\",name);\n_4fb.find(\".radiobutton-value\").attr(\"name\",name);\n}\nreturn _4fb;\n};\nfunction _4fc(_4fd){\nvar _4fe=$.data(_4fd,\"radiobutton\");\nvar opts=_4fe.options;\nvar _4ff=_4fe.radiobutton;\nvar _500=\"_easyui_radiobutton_\"+(++_4f9);\nvar _501=_4ff.find(\".radiobutton-value\").attr(\"id\",_500);\n_501._unbind(\".radiobutton\")._bind(\"change.radiobutton\",function(e){\nreturn false;\n});\nif(opts.label){\nif(typeof opts.label==\"object\"){\n_4fe.label=$(opts.label);\n_4fe.label.attr(\"for\",_500);\n}else{\n$(_4fe.label).remove();\n_4fe.label=$(\"<label class=\\\"textbox-label\\\"></label>\").html(opts.label);\n_4fe.label.css(\"textAlign\",opts.labelAlign).attr(\"for\",_500);\nif(opts.labelPosition==\"after\"){\n_4fe.label.insertAfter(_4ff);\n}else{\n_4fe.label.insertBefore(_4fd);\n}\n_4fe.label.removeClass(\"textbox-label-left textbox-label-right textbox-label-top\");\n_4fe.label.addClass(\"textbox-label-\"+opts.labelPosition);\n}\n}else{\n$(_4fe.label).remove();\n}\n$(_4fd).radiobutton(\"setValue\",opts.value);\n_502(_4fd,opts.checked);\n_503(_4fd,opts.readonly);\n_504(_4fd,opts.disabled);\n};\nfunction _505(_506){\nvar _507=$.data(_506,\"radiobutton\");\nvar opts=_507.options;\nvar _508=_507.radiobutton;\n_508._unbind(\".radiobutton\")._bind(\"click.radiobutton\",function(){\nif(!opts.disabled&&!opts.readonly){\n_502(_506,true);\n}\n});\n};\nfunction _509(_50a){\nvar _50b=$.data(_50a,\"radiobutton\");\nvar opts=_50b.options;\nvar _50c=_50b.radiobutton;\n_50c._size(opts,_50c.parent());\nif(opts.label&&opts.labelPosition){\nif(opts.labelPosition==\"top\"){\n_50b.label._size({width:opts.labelWidth},_50c);\n}else{\n_50b.label._size({width:opts.labelWidth,height:_50c.outerHeight()},_50c);\n_50b.label.css(\"lineHeight\",_50c.outerHeight()+\"px\");\n}\n}\n};\nfunction _502(_50d,_50e){\nif(_50e){\nvar f=$(_50d).closest(\"form\");\nvar name=$(_50d).attr(\"radiobuttonName\");\nf.find(\".radiobutton-f[radiobuttonName=\\\"\"+name+\"\\\"]\").each(function(){\nif(this!=_50d){\n_50f(this,false);\n}\n});\n_50f(_50d,true);\n}else{\n_50f(_50d,false);\n}\nfunction _50f(b,c){\nvar _510=$(b).data(\"radiobutton\");\nvar opts=_510.options;\nvar _511=_510.radiobutton;\n_511.find(\".radiobutton-inner\").css(\"display\",c?\"\":\"none\");\n_511.find(\".radiobutton-value\")._propAttr(\"checked\",c);\nif(c){\n_511.addClass(\"radiobutton-checked\");\n$(_510.label).addClass(\"textbox-label-checked\");\n}else{\n_511.removeClass(\"radiobutton-checked\");\n$(_510.label).removeClass(\"textbox-label-checked\");\n}\nif(opts.checked!=c){\nopts.checked=c;\nopts.onChange.call($(b)[0],c);\n$(b).closest(\"form\").trigger(\"_change\",[$(b)[0]]);\n}\n};\n};\nfunction _504(_512,_513){\nvar _514=$.data(_512,\"radiobutton\");\nvar opts=_514.options;\nvar _515=_514.radiobutton;\nvar rv=_515.find(\".radiobutton-value\");\nopts.disabled=_513;\nif(_513){\n$(_512).add(rv)._propAttr(\"disabled\",true);\n_515.addClass(\"radiobutton-disabled\");\n$(_514.label).addClass(\"textbox-label-disabled\");\n}else{\n$(_512).add(rv)._propAttr(\"disabled\",false);\n_515.removeClass(\"radiobutton-disabled\");\n$(_514.label).removeClass(\"textbox-label-disabled\");\n}\n};\nfunction _503(_516,mode){\nvar _517=$.data(_516,\"radiobutton\");\nvar opts=_517.options;\nopts.readonly=mode==undefined?true:mode;\nif(opts.readonly){\n_517.radiobutton.addClass(\"radiobutton-readonly\");\n$(_517.label).addClass(\"textbox-label-readonly\");\n}else{\n_517.radiobutton.removeClass(\"radiobutton-readonly\");\n$(_517.label).removeClass(\"textbox-label-readonly\");\n}\n};\n$.fn.radiobutton=function(_518,_519){\nif(typeof _518==\"string\"){\nreturn $.fn.radiobutton.methods[_518](this,_519);\n}\n_518=_518||{};\nreturn this.each(function(){\nvar _51a=$.data(this,\"radiobutton\");\nif(_51a){\n$.extend(_51a.options,_518);\n}else{\n_51a=$.data(this,\"radiobutton\",{options:$.extend({},$.fn.radiobutton.defaults,$.fn.radiobutton.parseOptions(this),_518),radiobutton:init(this)});\n}\n_51a.options.originalChecked=_51a.options.checked;\n_4fc(this);\n_505(this);\n_509(this);\n});\n};\n$.fn.radiobutton.methods={options:function(jq){\nvar _51b=jq.data(\"radiobutton\");\nreturn $.extend(_51b.options,{value:_51b.radiobutton.find(\".radiobutton-value\").val()});\n},setValue:function(jq,_51c){\nreturn jq.each(function(){\n$(this).val(_51c);\n$.data(this,\"radiobutton\").radiobutton.find(\".radiobutton-value\").val(_51c);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_504(this,false);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_504(this,true);\n});\n},readonly:function(jq,mode){\nreturn jq.each(function(){\n_503(this,mode);\n});\n},check:function(jq){\nreturn jq.each(function(){\n_502(this,true);\n});\n},uncheck:function(jq){\nreturn jq.each(function(){\n_502(this,false);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_502(this,false);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).radiobutton(\"options\");\n_502(this,opts.originalChecked);\n});\n}};\n$.fn.radiobutton.parseOptions=function(_51d){\nvar t=$(_51d);\nreturn $.extend({},$.parser.parseOptions(_51d,[\"label\",\"labelPosition\",\"labelAlign\",{labelWidth:\"number\"}]),{value:(t.val()||undefined),checked:(t.attr(\"checked\")?true:undefined),disabled:(t.attr(\"disabled\")?true:undefined),readonly:(t.attr(\"readonly\")?true:undefined)});\n};\n$.fn.radiobutton.defaults={width:20,height:20,value:null,disabled:false,readonly:false,checked:false,label:null,labelWidth:\"auto\",labelPosition:\"before\",labelAlign:\"left\",onChange:function(_51e){\n}};\n})(jQuery);\n(function($){\nvar _51f=1;\nfunction init(_520){\nvar _521=$(\"<span class=\\\"checkbox inputbox\\\">\"+\"<span class=\\\"checkbox-inner\\\">\"+\"<svg xml:space=\\\"preserve\\\" focusable=\\\"false\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4.1,12.7 9,17.6 20.3,6.3\\\" fill=\\\"none\\\" stroke=\\\"white\\\"></path></svg>\"+\"</span>\"+\"<input type=\\\"checkbox\\\" class=\\\"checkbox-value\\\">\"+\"</span>\").insertAfter(_520);\nvar t=$(_520);\nt.addClass(\"checkbox-f\").hide();\nvar name=t.attr(\"name\");\nif(name){\nt.removeAttr(\"name\").attr(\"checkboxName\",name);\n_521.find(\".checkbox-value\").attr(\"name\",name);\n}\nreturn _521;\n};\nfunction _522(_523){\nvar _524=$.data(_523,\"checkbox\");\nvar opts=_524.options;\nvar _525=_524.checkbox;\nvar _526=\"_easyui_checkbox_\"+(++_51f);\nvar _527=_525.find(\".checkbox-value\").attr(\"id\",_526);\n_527._unbind(\".checkbox\")._bind(\"change.checkbox\",function(e){\nreturn false;\n});\nif(opts.label){\nif(typeof opts.label==\"object\"){\n_524.label=$(opts.label);\n_524.label.attr(\"for\",_526);\n}else{\n$(_524.label).remove();\n_524.label=$(\"<label class=\\\"textbox-label\\\"></label>\").html(opts.label);\n_524.label.css(\"textAlign\",opts.labelAlign).attr(\"for\",_526);\nif(opts.labelPosition==\"after\"){\n_524.label.insertAfter(_525);\n}else{\n_524.label.insertBefore(_523);\n}\n_524.label.removeClass(\"textbox-label-left textbox-label-right textbox-label-top\");\n_524.label.addClass(\"textbox-label-\"+opts.labelPosition);\n}\n}else{\n$(_524.label).remove();\n}\n$(_523).checkbox(\"setValue\",opts.value);\n_528(_523,opts.checked);\n_529(_523,opts.readonly);\n_52a(_523,opts.disabled);\n};\nfunction _52b(_52c){\nvar _52d=$.data(_52c,\"checkbox\");\nvar opts=_52d.options;\nvar _52e=_52d.checkbox;\n_52e._unbind(\".checkbox\")._bind(\"click.checkbox\",function(){\nif(!opts.disabled&&!opts.readonly){\n_528(_52c,!opts.checked);\n}\n});\n};\nfunction _52f(_530){\nvar _531=$.data(_530,\"checkbox\");\nvar opts=_531.options;\nvar _532=_531.checkbox;\n_532._size(opts,_532.parent());\nif(opts.label&&opts.labelPosition){\nif(opts.labelPosition==\"top\"){\n_531.label._size({width:opts.labelWidth},_532);\n}else{\n_531.label._size({width:opts.labelWidth,height:_532.outerHeight()},_532);\n_531.label.css(\"lineHeight\",_532.outerHeight()+\"px\");\n}\n}\n};\nfunction _528(_533,_534){\nvar _535=$.data(_533,\"checkbox\");\nvar opts=_535.options;\nvar _536=_535.checkbox;\n_536.find(\".checkbox-value\")._propAttr(\"checked\",_534);\nvar _537=_536.find(\".checkbox-inner\").css(\"display\",_534?\"\":\"none\");\nif(_534){\n_536.addClass(\"checkbox-checked\");\n$(_535.label).addClass(\"textbox-label-checked\");\n}else{\n_536.removeClass(\"checkbox-checked\");\n$(_535.label).removeClass(\"textbox-label-checked\");\n}\nif(opts.checked!=_534){\nopts.checked=_534;\nopts.onChange.call(_533,_534);\n$(_533).closest(\"form\").trigger(\"_change\",[_533]);\n}\n};\nfunction _529(_538,mode){\nvar _539=$.data(_538,\"checkbox\");\nvar opts=_539.options;\nopts.readonly=mode==undefined?true:mode;\nif(opts.readonly){\n_539.checkbox.addClass(\"checkbox-readonly\");\n$(_539.label).addClass(\"textbox-label-readonly\");\n}else{\n_539.checkbox.removeClass(\"checkbox-readonly\");\n$(_539.label).removeClass(\"textbox-label-readonly\");\n}\n};\nfunction _52a(_53a,_53b){\nvar _53c=$.data(_53a,\"checkbox\");\nvar opts=_53c.options;\nvar _53d=_53c.checkbox;\nvar rv=_53d.find(\".checkbox-value\");\nopts.disabled=_53b;\nif(_53b){\n$(_53a).add(rv)._propAttr(\"disabled\",true);\n_53d.addClass(\"checkbox-disabled\");\n$(_53c.label).addClass(\"textbox-label-disabled\");\n}else{\n$(_53a).add(rv)._propAttr(\"disabled\",false);\n_53d.removeClass(\"checkbox-disabled\");\n$(_53c.label).removeClass(\"textbox-label-disabled\");\n}\n};\n$.fn.checkbox=function(_53e,_53f){\nif(typeof _53e==\"string\"){\nreturn $.fn.checkbox.methods[_53e](this,_53f);\n}\n_53e=_53e||{};\nreturn this.each(function(){\nvar _540=$.data(this,\"checkbox\");\nif(_540){\n$.extend(_540.options,_53e);\n}else{\n_540=$.data(this,\"checkbox\",{options:$.extend({},$.fn.checkbox.defaults,$.fn.checkbox.parseOptions(this),_53e),checkbox:init(this)});\n}\n_540.options.originalChecked=_540.options.checked;\n_522(this);\n_52b(this);\n_52f(this);\n});\n};\n$.fn.checkbox.methods={options:function(jq){\nvar _541=jq.data(\"checkbox\");\nreturn $.extend(_541.options,{value:_541.checkbox.find(\".checkbox-value\").val()});\n},setValue:function(jq,_542){\nreturn jq.each(function(){\n$(this).val(_542);\n$.data(this,\"checkbox\").checkbox.find(\".checkbox-value\").val(_542);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_52a(this,false);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_52a(this,true);\n});\n},readonly:function(jq,mode){\nreturn jq.each(function(){\n_529(this,mode);\n});\n},check:function(jq){\nreturn jq.each(function(){\n_528(this,true);\n});\n},uncheck:function(jq){\nreturn jq.each(function(){\n_528(this,false);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_528(this,false);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).checkbox(\"options\");\n_528(this,opts.originalChecked);\n});\n}};\n$.fn.checkbox.parseOptions=function(_543){\nvar t=$(_543);\nreturn $.extend({},$.parser.parseOptions(_543,[\"label\",\"labelPosition\",\"labelAlign\",{labelWidth:\"number\"}]),{value:(t.val()||undefined),checked:(t.attr(\"checked\")?true:undefined),disabled:(t.attr(\"disabled\")?true:undefined),readonly:(t.attr(\"readonly\")?true:undefined)});\n};\n$.fn.checkbox.defaults={width:20,height:20,value:null,disabled:false,readonly:false,checked:false,label:null,labelWidth:\"auto\",labelPosition:\"before\",labelAlign:\"left\",onChange:function(_544){\n}};\n})(jQuery);\n(function($){\nfunction init(_545){\n$(_545).addClass(\"validatebox-text\");\n};\nfunction _546(_547){\nvar _548=$.data(_547,\"validatebox\");\n_548.validating=false;\nif(_548.vtimer){\nclearTimeout(_548.vtimer);\n}\nif(_548.ftimer){\nclearTimeout(_548.ftimer);\n}\n$(_547).tooltip(\"destroy\");\n$(_547)._unbind();\n$(_547).remove();\n};\nfunction _549(_54a){\nvar opts=$.data(_54a,\"validatebox\").options;\n$(_54a)._unbind(\".validatebox\");\nif(opts.novalidate||opts.disabled){\nreturn;\n}\nfor(var _54b in opts.events){\n$(_54a)._bind(_54b+\".validatebox\",{target:_54a},opts.events[_54b]);\n}\n};\nfunction _54c(e){\nvar _54d=e.data.target;\nvar _54e=$.data(_54d,\"validatebox\");\nvar opts=_54e.options;\nif($(_54d).attr(\"readonly\")){\nreturn;\n}\n_54e.validating=true;\n_54e.value=opts.val(_54d);\n(function(){\nif(!$(_54d).is(\":visible\")){\n_54e.validating=false;\n}\nif(_54e.validating){\nvar _54f=opts.val(_54d);\nif(_54e.value!=_54f){\n_54e.value=_54f;\nif(_54e.vtimer){\nclearTimeout(_54e.vtimer);\n}\n_54e.vtimer=setTimeout(function(){\n$(_54d).validatebox(\"validate\");\n},opts.delay);\n}else{\nif(_54e.message){\nopts.err(_54d,_54e.message);\n}\n}\n_54e.ftimer=setTimeout(arguments.callee,opts.interval);\n}\n})();\n};\nfunction _550(e){\nvar _551=e.data.target;\nvar _552=$.data(_551,\"validatebox\");\nvar opts=_552.options;\n_552.validating=false;\nif(_552.vtimer){\nclearTimeout(_552.vtimer);\n_552.vtimer=undefined;\n}\nif(_552.ftimer){\nclearTimeout(_552.ftimer);\n_552.ftimer=undefined;\n}\nif(opts.validateOnBlur){\nsetTimeout(function(){\n$(_551).validatebox(\"validate\");\n},0);\n}\nopts.err(_551,_552.message,\"hide\");\n};\nfunction _553(e){\nvar _554=e.data.target;\nvar _555=$.data(_554,\"validatebox\");\n_555.options.err(_554,_555.message,\"show\");\n};\nfunction _556(e){\nvar _557=e.data.target;\nvar _558=$.data(_557,\"validatebox\");\nif(!_558.validating){\n_558.options.err(_557,_558.message,\"hide\");\n}\n};\nfunction _559(_55a,_55b,_55c){\nvar _55d=$.data(_55a,\"validatebox\");\nvar opts=_55d.options;\nvar t=$(_55a);\nif(_55c==\"hide\"||!_55b){\nt.tooltip(\"hide\");\n}else{\nif((t.is(\":focus\")&&_55d.validating)||_55c==\"show\"){\nt.tooltip($.extend({},opts.tipOptions,{content:_55b,position:opts.tipPosition,deltaX:opts.deltaX,deltaY:opts.deltaY})).tooltip(\"show\");\n}\n}\n};\nfunction _55e(_55f){\nvar _560=$.data(_55f,\"validatebox\");\nvar opts=_560.options;\nvar box=$(_55f);\nopts.onBeforeValidate.call(_55f);\nvar _561=_562();\n_561?box.removeClass(\"validatebox-invalid\"):box.addClass(\"validatebox-invalid\");\nopts.err(_55f,_560.message);\nopts.onValidate.call(_55f,_561);\nreturn _561;\nfunction _563(msg){\n_560.message=msg;\n};\nfunction _564(_565,_566){\nvar _567=opts.val(_55f);\nvar _568=/([a-zA-Z_]+)(.*)/.exec(_565);\nvar rule=opts.rules[_568[1]];\nif(rule&&_567){\nvar _569=_566||opts.validParams||eval(_568[2]);\nif(!rule[\"validator\"].call(_55f,_567,_569)){\nvar _56a=rule[\"message\"];\nif(_569){\nfor(var i=0;i<_569.length;i++){\n_56a=_56a.replace(new RegExp(\"\\\\{\"+i+\"\\\\}\",\"g\"),_569[i]);\n}\n}\n_563(opts.invalidMessage||_56a);\nreturn false;\n}\n}\nreturn true;\n};\nfunction _562(){\n_563(\"\");\nif(!opts._validateOnCreate){\nsetTimeout(function(){\nopts._validateOnCreate=true;\n},0);\nreturn true;\n}\nif(opts.novalidate||opts.disabled){\nreturn true;\n}\nif(opts.required){\nif(opts.val(_55f)==\"\"){\n_563(opts.missingMessage);\nreturn false;\n}\n}\nif(opts.validType){\nif($.isArray(opts.validType)){\nfor(var i=0;i<opts.validType.length;i++){\nif(!_564(opts.validType[i])){\nreturn false;\n}\n}\n}else{\nif(typeof opts.validType==\"string\"){\nif(!_564(opts.validType)){\nreturn false;\n}\n}else{\nfor(var _56b in opts.validType){\nvar _56c=opts.validType[_56b];\nif(!_564(_56b,_56c)){\nreturn false;\n}\n}\n}\n}\n}\nreturn true;\n};\n};\nfunction _56d(_56e,_56f){\nvar opts=$.data(_56e,\"validatebox\").options;\nif(_56f!=undefined){\nopts.disabled=_56f;\n}\nif(opts.disabled){\n$(_56e).addClass(\"validatebox-disabled\")._propAttr(\"disabled\",true);\n}else{\n$(_56e).removeClass(\"validatebox-disabled\")._propAttr(\"disabled\",false);\n}\n};\nfunction _570(_571,mode){\nvar opts=$.data(_571,\"validatebox\").options;\nopts.readonly=mode==undefined?true:mode;\nif(opts.readonly||!opts.editable){\n$(_571).triggerHandler(\"blur.validatebox\");\n$(_571).addClass(\"validatebox-readonly\")._propAttr(\"readonly\",true);\n}else{\n$(_571).removeClass(\"validatebox-readonly\")._propAttr(\"readonly\",false);\n}\n};\n$.fn.validatebox=function(_572,_573){\nif(typeof _572==\"string\"){\nreturn $.fn.validatebox.methods[_572](this,_573);\n}\n_572=_572||{};\nreturn this.each(function(){\nvar _574=$.data(this,\"validatebox\");\nif(_574){\n$.extend(_574.options,_572);\n}else{\ninit(this);\n_574=$.data(this,\"validatebox\",{options:$.extend({},$.fn.validatebox.defaults,$.fn.validatebox.parseOptions(this),_572)});\n}\n_574.options._validateOnCreate=_574.options.validateOnCreate;\n_56d(this,_574.options.disabled);\n_570(this,_574.options.readonly);\n_549(this);\n_55e(this);\n});\n};\n$.fn.validatebox.methods={options:function(jq){\nreturn $.data(jq[0],\"validatebox\").options;\n},destroy:function(jq){\nreturn jq.each(function(){\n_546(this);\n});\n},validate:function(jq){\nreturn jq.each(function(){\n_55e(this);\n});\n},isValid:function(jq){\nreturn _55e(jq[0]);\n},enableValidation:function(jq){\nreturn jq.each(function(){\n$(this).validatebox(\"options\").novalidate=false;\n_549(this);\n_55e(this);\n});\n},disableValidation:function(jq){\nreturn jq.each(function(){\n$(this).validatebox(\"options\").novalidate=true;\n_549(this);\n_55e(this);\n});\n},resetValidation:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).validatebox(\"options\");\nopts._validateOnCreate=opts.validateOnCreate;\n_55e(this);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_56d(this,false);\n_549(this);\n_55e(this);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_56d(this,true);\n_549(this);\n_55e(this);\n});\n},readonly:function(jq,mode){\nreturn jq.each(function(){\n_570(this,mode);\n_549(this);\n_55e(this);\n});\n}};\n$.fn.validatebox.parseOptions=function(_575){\nvar t=$(_575);\nreturn $.extend({},$.parser.parseOptions(_575,[\"validType\",\"missingMessage\",\"invalidMessage\",\"tipPosition\",{delay:\"number\",interval:\"number\",deltaX:\"number\"},{editable:\"boolean\",validateOnCreate:\"boolean\",validateOnBlur:\"boolean\"}]),{required:(t.attr(\"required\")?true:undefined),disabled:(t.attr(\"disabled\")?true:undefined),readonly:(t.attr(\"readonly\")?true:undefined),novalidate:(t.attr(\"novalidate\")!=undefined?true:undefined)});\n};\n$.fn.validatebox.defaults={required:false,validType:null,validParams:null,delay:200,interval:200,missingMessage:\"This field is required.\",invalidMessage:null,tipPosition:\"right\",deltaX:0,deltaY:0,novalidate:false,editable:true,disabled:false,readonly:false,validateOnCreate:true,validateOnBlur:false,events:{focus:_54c,blur:_550,mouseenter:_553,mouseleave:_556,click:function(e){\nvar t=$(e.data.target);\nif(t.attr(\"type\")==\"checkbox\"||t.attr(\"type\")==\"radio\"){\nt.focus().validatebox(\"validate\");\n}\n}},val:function(_576){\nreturn $(_576).val();\n},err:function(_577,_578,_579){\n_559(_577,_578,_579);\n},tipOptions:{showEvent:\"none\",hideEvent:\"none\",showDelay:0,hideDelay:0,zIndex:\"\",onShow:function(){\n$(this).tooltip(\"tip\").css({color:\"#000\",borderColor:\"#CC9933\",backgroundColor:\"#FFFFCC\"});\n},onHide:function(){\n$(this).tooltip(\"destroy\");\n}},rules:{email:{validator:function(_57a){\nreturn /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?$/i.test(_57a);\n},message:\"Please enter a valid email address.\"},url:{validator:function(_57b){\nreturn /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(_57b);\n},message:\"Please enter a valid URL.\"},length:{validator:function(_57c,_57d){\nvar len=$.trim(_57c).length;\nreturn len>=_57d[0]&&len<=_57d[1];\n},message:\"Please enter a value between {0} and {1}.\"},remote:{validator:function(_57e,_57f){\nvar data={};\ndata[_57f[1]]=_57e;\nvar _580=$.ajax({url:_57f[0],dataType:\"json\",data:data,async:false,cache:false,type:\"post\"}).responseText;\nreturn _580==\"true\";\n},message:\"Please fix this field.\"}},onBeforeValidate:function(){\n},onValidate:function(_581){\n}};\n})(jQuery);\n(function($){\nvar _582=0;\nfunction init(_583){\n$(_583).addClass(\"textbox-f\").hide();\nvar span=$(\"<span class=\\\"textbox\\\">\"+\"<input class=\\\"textbox-text\\\" autocomplete=\\\"off\\\">\"+\"<input type=\\\"hidden\\\" class=\\\"textbox-value\\\">\"+\"</span>\").insertAfter(_583);\nvar name=$(_583).attr(\"name\");\nif(name){\nspan.find(\"input.textbox-value\").attr(\"name\",name);\n$(_583).removeAttr(\"name\").attr(\"textboxName\",name);\n}\nreturn span;\n};\nfunction _584(_585){\nvar _586=$.data(_585,\"textbox\");\nvar opts=_586.options;\nvar tb=_586.textbox;\nvar _587=\"_easyui_textbox_input\"+(++_582);\ntb.addClass(opts.cls);\ntb.find(\".textbox-text\").remove();\nif(opts.multiline){\n$(\"<textarea id=\\\"\"+_587+\"\\\" class=\\\"textbox-text\\\" autocomplete=\\\"off\\\"></textarea>\").prependTo(tb);\n}else{\n$(\"<input id=\\\"\"+_587+\"\\\" type=\\\"\"+opts.type+\"\\\" class=\\\"textbox-text\\\" autocomplete=\\\"off\\\">\").prependTo(tb);\n}\n$(\"#\"+_587).attr(\"tabindex\",$(_585).attr(\"tabindex\")||\"\").css(\"text-align\",_585.style.textAlign||\"\");\ntb.find(\".textbox-addon\").remove();\nvar bb=opts.icons?$.extend(true,[],opts.icons):[];\nif(opts.iconCls){\nbb.push({iconCls:opts.iconCls,disabled:true});\n}\nif(bb.length){\nvar bc=$(\"<span class=\\\"textbox-addon\\\"></span>\").prependTo(tb);\nbc.addClass(\"textbox-addon-\"+opts.iconAlign);\nfor(var i=0;i<bb.length;i++){\nbc.append(\"<a href=\\\"javascript:;\\\" class=\\\"textbox-icon \"+bb[i].iconCls+\"\\\" icon-index=\\\"\"+i+\"\\\" tabindex=\\\"-1\\\"></a>\");\n}\n}\ntb.find(\".textbox-button\").remove();\nif(opts.buttonText||opts.buttonIcon){\nvar btn=$(\"<a href=\\\"javascript:;\\\" class=\\\"textbox-button\\\"></a>\").prependTo(tb);\nbtn.addClass(\"textbox-button-\"+opts.buttonAlign).linkbutton({text:opts.buttonText,iconCls:opts.buttonIcon,onClick:function(){\nvar t=$(this).parent().prev();\nt.textbox(\"options\").onClickButton.call(t[0]);\n}});\n}\nif(opts.label){\nif(typeof opts.label==\"object\"){\n_586.label=$(opts.label);\n_586.label.attr(\"for\",_587);\n}else{\n$(_586.label).remove();\n_586.label=$(\"<label class=\\\"textbox-label\\\"></label>\").html(opts.label);\n_586.label.css(\"textAlign\",opts.labelAlign).attr(\"for\",_587);\nif(opts.labelPosition==\"after\"){\n_586.label.insertAfter(tb);\n}else{\n_586.label.insertBefore(_585);\n}\n_586.label.removeClass(\"textbox-label-left textbox-label-right textbox-label-top\");\n_586.label.addClass(\"textbox-label-\"+opts.labelPosition);\n}\n}else{\n$(_586.label).remove();\n}\n_588(_585);\n_589(_585,opts.disabled);\n_58a(_585,opts.readonly);\n};\nfunction _58b(_58c){\nvar _58d=$.data(_58c,\"textbox\");\nvar tb=_58d.textbox;\ntb.find(\".textbox-text\").validatebox(\"destroy\");\ntb.remove();\n$(_58d.label).remove();\n$(_58c).remove();\n};\nfunction _58e(_58f,_590){\nvar _591=$.data(_58f,\"textbox\");\nvar opts=_591.options;\nvar tb=_591.textbox;\nvar _592=tb.parent();\nif(_590){\nif(typeof _590==\"object\"){\n$.extend(opts,_590);\n}else{\nopts.width=_590;\n}\n}\nif(isNaN(parseInt(opts.width))){\nvar c=$(_58f).clone();\nc.css(\"visibility\",\"hidden\");\nc.insertAfter(_58f);\nopts.width=c.outerWidth();\nc.remove();\n}\nvar _593=tb.is(\":visible\");\nif(!_593){\ntb.appendTo(\"body\");\n}\nvar _594=tb.find(\".textbox-text\");\nvar btn=tb.find(\".textbox-button\");\nvar _595=tb.find(\".textbox-addon\");\nvar _596=_595.find(\".textbox-icon\");\nif(opts.height==\"auto\"){\n_594.css({margin:\"\",paddingTop:\"\",paddingBottom:\"\",height:\"\",lineHeight:\"\"});\n}\ntb._size(opts,_592);\nif(opts.label&&opts.labelPosition){\nif(opts.labelPosition==\"top\"){\n_591.label._size({width:opts.labelWidth==\"auto\"?tb.outerWidth():opts.labelWidth},tb);\nif(opts.height!=\"auto\"){\ntb._size(\"height\",tb.outerHeight()-_591.label.outerHeight());\n}\n}else{\n_591.label._size({width:opts.labelWidth,height:tb.outerHeight()},tb);\nif(!opts.multiline){\n_591.label.css(\"lineHeight\",_591.label.height()+\"px\");\n}\ntb._size(\"width\",tb.outerWidth()-_591.label.outerWidth());\n}\n}\nif(opts.buttonAlign==\"left\"||opts.buttonAlign==\"right\"){\nbtn.linkbutton(\"resize\",{height:tb.height()});\n}else{\nbtn.linkbutton(\"resize\",{width:\"100%\"});\n}\nvar _597=tb.width()-_596.length*opts.iconWidth-_598(\"left\")-_598(\"right\");\nvar _599=opts.height==\"auto\"?_594.outerHeight():(tb.height()-_598(\"top\")-_598(\"bottom\"));\n_595.css(opts.iconAlign,_598(opts.iconAlign)+\"px\");\n_595.css(\"top\",_598(\"top\")+\"px\");\n_596.css({width:opts.iconWidth+\"px\",height:_599+\"px\"});\n_594.css({paddingLeft:(_58f.style.paddingLeft||\"\"),paddingRight:(_58f.style.paddingRight||\"\"),marginLeft:_59a(\"left\"),marginRight:_59a(\"right\"),marginTop:_598(\"top\"),marginBottom:_598(\"bottom\")});\nif(opts.multiline){\n_594.css({paddingTop:(_58f.style.paddingTop||\"\"),paddingBottom:(_58f.style.paddingBottom||\"\")});\n_594._outerHeight(_599);\n}else{\n_594.css({paddingTop:0,paddingBottom:0,height:_599+\"px\",lineHeight:_599+\"px\"});\n}\n_594._outerWidth(_597);\nopts.onResizing.call(_58f,opts.width,opts.height);\nif(!_593){\ntb.insertAfter(_58f);\n}\nopts.onResize.call(_58f,opts.width,opts.height);\nfunction _59a(_59b){\nreturn (opts.iconAlign==_59b?_595._outerWidth():0)+_598(_59b);\n};\nfunction _598(_59c){\nvar w=0;\nbtn.filter(\".textbox-button-\"+_59c).each(function(){\nif(_59c==\"left\"||_59c==\"right\"){\nw+=$(this).outerWidth();\n}else{\nw+=$(this).outerHeight();\n}\n});\nreturn w;\n};\n};\nfunction _588(_59d){\nvar opts=$(_59d).textbox(\"options\");\nvar _59e=$(_59d).textbox(\"textbox\");\n_59e.validatebox($.extend({},opts,{deltaX:function(_59f){\nreturn $(_59d).textbox(\"getTipX\",_59f);\n},deltaY:function(_5a0){\nreturn $(_59d).textbox(\"getTipY\",_5a0);\n},onBeforeValidate:function(){\nopts.onBeforeValidate.call(_59d);\nvar box=$(this);\nif(!box.is(\":focus\")){\nif(box.val()!==opts.value){\nopts.oldInputValue=box.val();\nbox.val(opts.value);\n}\n}\n},onValidate:function(_5a1){\nvar box=$(this);\nif(opts.oldInputValue!=undefined){\nbox.val(opts.oldInputValue);\nopts.oldInputValue=undefined;\n}\nvar tb=box.parent();\nif(_5a1){\ntb.removeClass(\"textbox-invalid\");\n}else{\ntb.addClass(\"textbox-invalid\");\n}\nopts.onValidate.call(_59d,_5a1);\n}}));\n};\nfunction _5a2(_5a3){\nvar _5a4=$.data(_5a3,\"textbox\");\nvar opts=_5a4.options;\nvar tb=_5a4.textbox;\nvar _5a5=tb.find(\".textbox-text\");\n_5a5.attr(\"placeholder\",opts.prompt);\n_5a5._unbind(\".textbox\");\n$(_5a4.label)._unbind(\".textbox\");\nif(!opts.disabled&&!opts.readonly){\nif(_5a4.label){\n$(_5a4.label)._bind(\"click.textbox\",function(e){\nif(!opts.hasFocusMe){\n_5a5.focus();\n$(_5a3).textbox(\"setSelectionRange\",{start:0,end:_5a5.val().length});\n}\n});\n}\n_5a5._bind(\"blur.textbox\",function(e){\nif(!tb.hasClass(\"textbox-focused\")){\nreturn;\n}\nopts.value=$(this).val();\nif(opts.value==\"\"){\n$(this).val(opts.prompt).addClass(\"textbox-prompt\");\n}else{\n$(this).removeClass(\"textbox-prompt\");\n}\ntb.removeClass(\"textbox-focused\");\ntb.closest(\".form-field\").removeClass(\"form-field-focused\");\n})._bind(\"focus.textbox\",function(e){\nopts.hasFocusMe=true;\nif(tb.hasClass(\"textbox-focused\")){\nreturn;\n}\nif($(this).val()!=opts.value){\n$(this).val(opts.value);\n}\n$(this).removeClass(\"textbox-prompt\");\ntb.addClass(\"textbox-focused\");\ntb.closest(\".form-field\").addClass(\"form-field-focused\");\n});\nfor(var _5a6 in opts.inputEvents){\n_5a5._bind(_5a6+\".textbox\",{target:_5a3},opts.inputEvents[_5a6]);\n}\n}\nvar _5a7=tb.find(\".textbox-addon\");\n_5a7._unbind()._bind(\"click\",{target:_5a3},function(e){\nvar icon=$(e.target).closest(\"a.textbox-icon:not(.textbox-icon-disabled)\");\nif(icon.length){\nvar _5a8=parseInt(icon.attr(\"icon-index\"));\nvar conf=opts.icons[_5a8];\nif(conf&&conf.handler){\nconf.handler.call(icon[0],e);\n}\nopts.onClickIcon.call(_5a3,_5a8);\n}\n});\n_5a7.find(\".textbox-icon\").each(function(_5a9){\nvar conf=opts.icons[_5a9];\nvar icon=$(this);\nif(!conf||conf.disabled||opts.disabled||opts.readonly){\nicon.addClass(\"textbox-icon-disabled\");\n}else{\nicon.removeClass(\"textbox-icon-disabled\");\n}\n});\nvar btn=tb.find(\".textbox-button\");\nbtn.linkbutton((opts.disabled||opts.readonly)?\"disable\":\"enable\");\ntb._unbind(\".textbox\")._bind(\"_resize.textbox\",function(e,_5aa){\nif($(this).hasClass(\"easyui-fluid\")||_5aa){\n_58e(_5a3);\n}\nreturn false;\n});\n};\nfunction _589(_5ab,_5ac){\nvar _5ad=$.data(_5ab,\"textbox\");\nvar opts=_5ad.options;\nvar tb=_5ad.textbox;\nvar _5ae=tb.find(\".textbox-text\");\nvar ss=$(_5ab).add(tb.find(\".textbox-value\"));\nopts.disabled=_5ac;\nif(opts.disabled){\n_5ae.blur();\n_5ae.validatebox(\"disable\");\ntb.addClass(\"textbox-disabled\");\nss._propAttr(\"disabled\",true);\n$(_5ad.label).addClass(\"textbox-label-disabled\");\n}else{\n_5ae.validatebox(\"enable\");\ntb.removeClass(\"textbox-disabled\");\nss._propAttr(\"disabled\",false);\n$(_5ad.label).removeClass(\"textbox-label-disabled\");\n}\n};\nfunction _58a(_5af,mode){\nvar _5b0=$.data(_5af,\"textbox\");\nvar opts=_5b0.options;\nvar tb=_5b0.textbox;\nvar _5b1=tb.find(\".textbox-text\");\nopts.readonly=mode==undefined?true:mode;\nif(opts.readonly){\n_5b1.triggerHandler(\"blur.textbox\");\n}\n_5b1.validatebox(\"readonly\",opts.readonly);\nif(opts.readonly){\ntb.addClass(\"textbox-readonly\");\n$(_5b0.label).addClass(\"textbox-label-readonly\");\n}else{\ntb.removeClass(\"textbox-readonly\");\n$(_5b0.label).removeClass(\"textbox-label-readonly\");\n}\n};\n$.fn.textbox=function(_5b2,_5b3){\nif(typeof _5b2==\"string\"){\nvar _5b4=$.fn.textbox.methods[_5b2];\nif(_5b4){\nreturn _5b4(this,_5b3);\n}else{\nreturn this.each(function(){\nvar _5b5=$(this).textbox(\"textbox\");\n_5b5.validatebox(_5b2,_5b3);\n});\n}\n}\n_5b2=_5b2||{};\nreturn this.each(function(){\nvar _5b6=$.data(this,\"textbox\");\nif(_5b6){\n$.extend(_5b6.options,_5b2);\nif(_5b2.value!=undefined){\n_5b6.options.originalValue=_5b2.value;\n}\n}else{\n_5b6=$.data(this,\"textbox\",{options:$.extend({},$.fn.textbox.defaults,$.fn.textbox.parseOptions(this),_5b2),textbox:init(this)});\n_5b6.options.originalValue=_5b6.options.value;\n}\n_584(this);\n_5a2(this);\nif(_5b6.options.doSize){\n_58e(this);\n}\nvar _5b7=_5b6.options.value;\n_5b6.options.value=\"\";\n$(this).textbox(\"initValue\",_5b7);\n});\n};\n$.fn.textbox.methods={options:function(jq){\nreturn $.data(jq[0],\"textbox\").options;\n},cloneFrom:function(jq,from){\nreturn jq.each(function(){\nvar t=$(this);\nif(t.data(\"textbox\")){\nreturn;\n}\nif(!$(from).data(\"textbox\")){\n$(from).textbox();\n}\nvar opts=$.extend(true,{},$(from).textbox(\"options\"));\nvar name=t.attr(\"name\")||\"\";\nt.addClass(\"textbox-f\").hide();\nt.removeAttr(\"name\").attr(\"textboxName\",name);\nvar span=$(from).next().clone().insertAfter(t);\nvar _5b8=\"_easyui_textbox_input\"+(++_582);\nspan.find(\".textbox-value\").attr(\"name\",name);\nspan.find(\".textbox-text\").attr(\"id\",_5b8);\nvar _5b9=$($(from).textbox(\"label\")).clone();\nif(_5b9.length){\n_5b9.attr(\"for\",_5b8);\nif(opts.labelPosition==\"after\"){\n_5b9.insertAfter(t.next());\n}else{\n_5b9.insertBefore(t);\n}\n}\n$.data(this,\"textbox\",{options:opts,textbox:span,label:(_5b9.length?_5b9:undefined)});\nvar _5ba=$(from).textbox(\"button\");\nif(_5ba.length){\nt.textbox(\"button\").linkbutton($.extend(true,{},_5ba.linkbutton(\"options\")));\n}\n_5a2(this);\n_588(this);\n});\n},textbox:function(jq){\nreturn $.data(jq[0],\"textbox\").textbox.find(\".textbox-text\");\n},button:function(jq){\nreturn $.data(jq[0],\"textbox\").textbox.find(\".textbox-button\");\n},label:function(jq){\nreturn $.data(jq[0],\"textbox\").label;\n},destroy:function(jq){\nreturn jq.each(function(){\n_58b(this);\n});\n},resize:function(jq,_5bb){\nreturn jq.each(function(){\n_58e(this,_5bb);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_589(this,true);\n_5a2(this);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_589(this,false);\n_5a2(this);\n});\n},readonly:function(jq,mode){\nreturn jq.each(function(){\n_58a(this,mode);\n_5a2(this);\n});\n},isValid:function(jq){\nreturn jq.textbox(\"textbox\").validatebox(\"isValid\");\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"setValue\",\"\");\n});\n},setText:function(jq,_5bc){\nreturn jq.each(function(){\nvar opts=$(this).textbox(\"options\");\nvar _5bd=$(this).textbox(\"textbox\");\n_5bc=_5bc==undefined?\"\":String(_5bc);\nif($(this).textbox(\"getText\")!=_5bc){\n_5bd.val(_5bc);\n}\nopts.value=_5bc;\nif(!_5bd.is(\":focus\")){\nif(_5bc){\n_5bd.removeClass(\"textbox-prompt\");\n}else{\n_5bd.val(opts.prompt).addClass(\"textbox-prompt\");\n}\n}\nif(opts.value){\n$(this).closest(\".form-field\").removeClass(\"form-field-empty\");\n}else{\n$(this).closest(\".form-field\").addClass(\"form-field-empty\");\n}\n$(this).textbox(\"validate\");\n});\n},initValue:function(jq,_5be){\nreturn jq.each(function(){\nvar _5bf=$.data(this,\"textbox\");\n$(this).textbox(\"setText\",_5be);\n_5bf.textbox.find(\".textbox-value\").val(_5be);\n$(this).val(_5be);\n});\n},setValue:function(jq,_5c0){\nreturn jq.each(function(){\nvar opts=$.data(this,\"textbox\").options;\nvar _5c1=$(this).textbox(\"getValue\");\n$(this).textbox(\"initValue\",_5c0);\nif(_5c1!=_5c0){\nopts.onChange.call(this,_5c0,_5c1);\n$(this).closest(\"form\").trigger(\"_change\",[this]);\n}\n});\n},getText:function(jq){\nvar _5c2=jq.textbox(\"textbox\");\nif(_5c2.is(\":focus\")){\nreturn _5c2.val();\n}else{\nreturn jq.textbox(\"options\").value;\n}\n},getValue:function(jq){\nreturn jq.data(\"textbox\").textbox.find(\".textbox-value\").val();\n},reset:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).textbox(\"options\");\n$(this).textbox(\"textbox\").val(opts.originalValue);\n$(this).textbox(\"setValue\",opts.originalValue);\n});\n},getIcon:function(jq,_5c3){\nreturn jq.data(\"textbox\").textbox.find(\".textbox-icon:eq(\"+_5c3+\")\");\n},getTipX:function(jq,_5c4){\nvar _5c5=jq.data(\"textbox\");\nvar opts=_5c5.options;\nvar tb=_5c5.textbox;\nvar _5c6=tb.find(\".textbox-text\");\nvar _5c4=_5c4||opts.tipPosition;\nvar p1=tb.offset();\nvar p2=_5c6.offset();\nvar w1=tb.outerWidth();\nvar w2=_5c6.outerWidth();\nif(_5c4==\"right\"){\nreturn w1-w2-p2.left+p1.left;\n}else{\nif(_5c4==\"left\"){\nreturn p1.left-p2.left;\n}else{\nreturn (w1-w2-p2.left+p1.left)/2-(p2.left-p1.left)/2;\n}\n}\n},getTipY:function(jq,_5c7){\nvar _5c8=jq.data(\"textbox\");\nvar opts=_5c8.options;\nvar tb=_5c8.textbox;\nvar _5c9=tb.find(\".textbox-text\");\nvar _5c7=_5c7||opts.tipPosition;\nvar p1=tb.offset();\nvar p2=_5c9.offset();\nvar h1=tb.outerHeight();\nvar h2=_5c9.outerHeight();\nif(_5c7==\"left\"||_5c7==\"right\"){\nreturn (h1-h2-p2.top+p1.top)/2-(p2.top-p1.top)/2;\n}else{\nif(_5c7==\"bottom\"){\nreturn (h1-h2-p2.top+p1.top);\n}else{\nreturn (p1.top-p2.top);\n}\n}\n},getSelectionStart:function(jq){\nreturn jq.textbox(\"getSelectionRange\").start;\n},getSelectionRange:function(jq){\nvar _5ca=jq.textbox(\"textbox\")[0];\nvar _5cb=0;\nvar end=0;\nif(typeof _5ca.selectionStart==\"number\"){\n_5cb=_5ca.selectionStart;\nend=_5ca.selectionEnd;\n}else{\nif(_5ca.createTextRange){\nvar s=document.selection.createRange();\nvar _5cc=_5ca.createTextRange();\n_5cc.setEndPoint(\"EndToStart\",s);\n_5cb=_5cc.text.length;\nend=_5cb+s.text.length;\n}\n}\nreturn {start:_5cb,end:end};\n},setSelectionRange:function(jq,_5cd){\nreturn jq.each(function(){\nvar _5ce=$(this).textbox(\"textbox\")[0];\nvar _5cf=_5cd.start;\nvar end=_5cd.end;\nif(_5ce.setSelectionRange){\n_5ce.setSelectionRange(_5cf,end);\n}else{\nif(_5ce.createTextRange){\nvar _5d0=_5ce.createTextRange();\n_5d0.collapse();\n_5d0.moveEnd(\"character\",end);\n_5d0.moveStart(\"character\",_5cf);\n_5d0.select();\n}\n}\n});\n}};\n$.fn.textbox.parseOptions=function(_5d1){\nvar t=$(_5d1);\nreturn $.extend({},$.fn.validatebox.parseOptions(_5d1),$.parser.parseOptions(_5d1,[\"prompt\",\"iconCls\",\"iconAlign\",\"buttonText\",\"buttonIcon\",\"buttonAlign\",\"label\",\"labelPosition\",\"labelAlign\",{multiline:\"boolean\",iconWidth:\"number\",labelWidth:\"number\"}]),{value:(t.val()||undefined),type:(t.attr(\"type\")?t.attr(\"type\"):undefined)});\n};\n$.fn.textbox.defaults=$.extend({},$.fn.validatebox.defaults,{doSize:true,width:\"auto\",height:\"auto\",cls:null,prompt:\"\",value:\"\",type:\"text\",multiline:false,icons:[],iconCls:null,iconAlign:\"right\",iconWidth:26,buttonText:\"\",buttonIcon:null,buttonAlign:\"right\",label:null,labelWidth:\"auto\",labelPosition:\"before\",labelAlign:\"left\",inputEvents:{blur:function(e){\nvar t=$(e.data.target);\nvar opts=t.textbox(\"options\");\nif(t.textbox(\"getValue\")!=opts.value){\nt.textbox(\"setValue\",opts.value);\n}\n},keydown:function(e){\nif(e.keyCode==13){\nvar t=$(e.data.target);\nt.textbox(\"setValue\",t.textbox(\"getText\"));\n}\n}},onChange:function(_5d2,_5d3){\n},onResizing:function(_5d4,_5d5){\n},onResize:function(_5d6,_5d7){\n},onClickButton:function(){\n},onClickIcon:function(_5d8){\n}});\n})(jQuery);\n(function($){\nfunction _5d9(_5da){\nvar _5db=$.data(_5da,\"passwordbox\");\nvar opts=_5db.options;\nvar _5dc=$.extend(true,[],opts.icons);\nif(opts.showEye){\n_5dc.push({iconCls:\"passwordbox-open\",handler:function(e){\nopts.revealed=!opts.revealed;\n_5dd(_5da);\n}});\n}\n$(_5da).addClass(\"passwordbox-f\").textbox($.extend({},opts,{icons:_5dc}));\n_5dd(_5da);\n};\nfunction _5de(_5df,_5e0,all){\nvar _5e1=$(_5df).data(\"passwordbox\");\nvar t=$(_5df);\nvar opts=t.passwordbox(\"options\");\nif(opts.revealed){\nt.textbox(\"setValue\",_5e0);\nreturn;\n}\n_5e1.converting=true;\nvar _5e2=unescape(opts.passwordChar);\nvar cc=_5e0.split(\"\");\nvar vv=t.passwordbox(\"getValue\").split(\"\");\nfor(var i=0;i<cc.length;i++){\nvar c=cc[i];\nif(c!=vv[i]){\nif(c!=_5e2){\nvv.splice(i,0,c);\n}\n}\n}\nvar pos=t.passwordbox(\"getSelectionStart\");\nif(cc.length<vv.length){\nvv.splice(pos,vv.length-cc.length,\"\");\n}\nfor(var i=0;i<cc.length;i++){\nif(all||i!=pos-1){\ncc[i]=_5e2;\n}\n}\nt.textbox(\"setValue\",vv.join(\"\"));\nt.textbox(\"setText\",cc.join(\"\"));\nt.textbox(\"setSelectionRange\",{start:pos,end:pos});\nsetTimeout(function(){\n_5e1.converting=false;\n},0);\n};\nfunction _5dd(_5e3,_5e4){\nvar t=$(_5e3);\nvar opts=t.passwordbox(\"options\");\nvar icon=t.next().find(\".passwordbox-open\");\nvar _5e5=unescape(opts.passwordChar);\n_5e4=_5e4==undefined?t.textbox(\"getValue\"):_5e4;\nt.textbox(\"setValue\",_5e4);\nt.textbox(\"setText\",opts.revealed?_5e4:_5e4.replace(/./ig,_5e5));\nopts.revealed?icon.addClass(\"passwordbox-close\"):icon.removeClass(\"passwordbox-close\");\n};\nfunction _5e6(e){\nvar _5e7=e.data.target;\nvar t=$(e.data.target);\nvar _5e8=t.data(\"passwordbox\");\nvar opts=t.data(\"passwordbox\").options;\n_5e8.checking=true;\n_5e8.value=t.passwordbox(\"getText\");\n(function(){\nif(_5e8.checking){\nvar _5e9=t.passwordbox(\"getText\");\nif(_5e8.value!=_5e9){\n_5e8.value=_5e9;\nif(_5e8.lastTimer){\nclearTimeout(_5e8.lastTimer);\n_5e8.lastTimer=undefined;\n}\n_5de(_5e7,_5e9);\n_5e8.lastTimer=setTimeout(function(){\n_5de(_5e7,t.passwordbox(\"getText\"),true);\n_5e8.lastTimer=undefined;\n},opts.lastDelay);\n}\nsetTimeout(arguments.callee,opts.checkInterval);\n}\n})();\n};\nfunction _5ea(e){\nvar _5eb=e.data.target;\nvar _5ec=$(_5eb).data(\"passwordbox\");\n_5ec.checking=false;\nif(_5ec.lastTimer){\nclearTimeout(_5ec.lastTimer);\n_5ec.lastTimer=undefined;\n}\n_5dd(_5eb);\n};\n$.fn.passwordbox=function(_5ed,_5ee){\nif(typeof _5ed==\"string\"){\nvar _5ef=$.fn.passwordbox.methods[_5ed];\nif(_5ef){\nreturn _5ef(this,_5ee);\n}else{\nreturn this.textbox(_5ed,_5ee);\n}\n}\n_5ed=_5ed||{};\nreturn this.each(function(){\nvar _5f0=$.data(this,\"passwordbox\");\nif(_5f0){\n$.extend(_5f0.options,_5ed);\n}else{\n_5f0=$.data(this,\"passwordbox\",{options:$.extend({},$.fn.passwordbox.defaults,$.fn.passwordbox.parseOptions(this),_5ed)});\n}\n_5d9(this);\n});\n};\n$.fn.passwordbox.methods={options:function(jq){\nreturn $.data(jq[0],\"passwordbox\").options;\n},setValue:function(jq,_5f1){\nreturn jq.each(function(){\n_5dd(this,_5f1);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_5dd(this,\"\");\n});\n},reset:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"reset\");\n_5dd(this);\n});\n},showPassword:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).passwordbox(\"options\");\nopts.revealed=true;\n_5dd(this);\n});\n},hidePassword:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).passwordbox(\"options\");\nopts.revealed=false;\n_5dd(this);\n});\n}};\n$.fn.passwordbox.parseOptions=function(_5f2){\nreturn $.extend({},$.fn.textbox.parseOptions(_5f2),$.parser.parseOptions(_5f2,[\"passwordChar\",{checkInterval:\"number\",lastDelay:\"number\",revealed:\"boolean\",showEye:\"boolean\"}]));\n};\n$.fn.passwordbox.defaults=$.extend({},$.fn.textbox.defaults,{passwordChar:\"%u25CF\",checkInterval:200,lastDelay:500,revealed:false,showEye:true,inputEvents:{focus:_5e6,blur:_5ea,keydown:function(e){\nvar _5f3=$(e.data.target).data(\"passwordbox\");\nreturn !_5f3.converting;\n}},val:function(_5f4){\nreturn $(_5f4).parent().prev().passwordbox(\"getValue\");\n}});\n})(jQuery);\n(function($){\nfunction _5f5(_5f6){\nvar _5f7=$(_5f6).data(\"maskedbox\");\nvar opts=_5f7.options;\n$(_5f6).textbox(opts);\n$(_5f6).maskedbox(\"initValue\",opts.value);\n};\nfunction _5f8(_5f9,_5fa){\nvar opts=$(_5f9).maskedbox(\"options\");\nvar tt=(_5fa||$(_5f9).maskedbox(\"getText\")||\"\").split(\"\");\nvar vv=[];\nfor(var i=0;i<opts.mask.length;i++){\nif(opts.masks[opts.mask[i]]){\nvar t=tt[i];\nvv.push(t!=opts.promptChar?t:\" \");\n}\n}\nreturn vv.join(\"\");\n};\nfunction _5fb(_5fc,_5fd){\nvar opts=$(_5fc).maskedbox(\"options\");\nvar cc=_5fd.split(\"\");\nvar tt=[];\nfor(var i=0;i<opts.mask.length;i++){\nvar m=opts.mask[i];\nvar r=opts.masks[m];\nif(r){\nvar c=cc.shift();\nif(c!=undefined){\nvar d=new RegExp(r,\"i\");\nif(d.test(c)){\ntt.push(c);\ncontinue;\n}\n}\ntt.push(opts.promptChar);\n}else{\ntt.push(m);\n}\n}\nreturn tt.join(\"\");\n};\nfunction _5fe(_5ff,c){\nvar opts=$(_5ff).maskedbox(\"options\");\nvar _600=$(_5ff).maskedbox(\"getSelectionRange\");\nvar _601=_602(_5ff,_600.start);\nvar end=_602(_5ff,_600.end);\nif(_601!=-1){\nvar r=new RegExp(opts.masks[opts.mask[_601]],\"i\");\nif(r.test(c)){\nvar vv=_5f8(_5ff).split(\"\");\nvar _603=_601-_604(_5ff,_601);\nvar _605=end-_604(_5ff,end);\nvv.splice(_603,_605-_603,c);\n$(_5ff).maskedbox(\"setValue\",_5fb(_5ff,vv.join(\"\")));\n_601=_602(_5ff,++_601);\n$(_5ff).maskedbox(\"setSelectionRange\",{start:_601,end:_601});\n}\n}\n};\nfunction _606(_607,_608){\nvar opts=$(_607).maskedbox(\"options\");\nvar vv=_5f8(_607).split(\"\");\nvar _609=$(_607).maskedbox(\"getSelectionRange\");\nif(_609.start==_609.end){\nif(_608){\nvar _60a=_60b(_607,_609.start);\n}else{\nvar _60a=_602(_607,_609.start);\n}\nvar _60c=_60a-_604(_607,_60a);\nif(_60c>=0){\nvv.splice(_60c,1);\n}\n}else{\nvar _60a=_602(_607,_609.start);\nvar end=_60b(_607,_609.end);\nvar _60c=_60a-_604(_607,_60a);\nvar _60d=end-_604(_607,end);\nvv.splice(_60c,_60d-_60c+1);\n}\n$(_607).maskedbox(\"setValue\",_5fb(_607,vv.join(\"\")));\n$(_607).maskedbox(\"setSelectionRange\",{start:_60a,end:_60a});\n};\nfunction _604(_60e,pos){\nvar opts=$(_60e).maskedbox(\"options\");\nvar _60f=0;\nif(pos>=opts.mask.length){\npos--;\n}\nfor(var i=pos;i>=0;i--){\nif(opts.masks[opts.mask[i]]==undefined){\n_60f++;\n}\n}\nreturn _60f;\n};\nfunction _602(_610,pos){\nvar opts=$(_610).maskedbox(\"options\");\nvar m=opts.mask[pos];\nvar r=opts.masks[m];\nwhile(pos<opts.mask.length&&!r){\npos++;\nm=opts.mask[pos];\nr=opts.masks[m];\n}\nreturn pos;\n};\nfunction _60b(_611,pos){\nvar opts=$(_611).maskedbox(\"options\");\nvar m=opts.mask[--pos];\nvar r=opts.masks[m];\nwhile(pos>=0&&!r){\npos--;\nm=opts.mask[pos];\nr=opts.masks[m];\n}\nreturn pos<0?0:pos;\n};\nfunction _612(e){\nif(e.metaKey||e.ctrlKey){\nreturn;\n}\nvar _613=e.data.target;\nvar opts=$(_613).maskedbox(\"options\");\nvar _614=[9,13,35,36,37,39];\nif($.inArray(e.keyCode,_614)!=-1){\nreturn true;\n}\nif(e.keyCode>=96&&e.keyCode<=105){\ne.keyCode-=48;\n}\nvar c=String.fromCharCode(e.keyCode);\nif(e.keyCode>=65&&e.keyCode<=90&&!e.shiftKey){\nc=c.toLowerCase();\n}else{\nif(e.keyCode==189){\nc=\"-\";\n}else{\nif(e.keyCode==187){\nc=\"+\";\n}else{\nif(e.keyCode==190){\nc=\".\";\n}\n}\n}\n}\nif(e.keyCode==8){\n_606(_613,true);\n}else{\nif(e.keyCode==46){\n_606(_613,false);\n}else{\n_5fe(_613,c);\n}\n}\nreturn false;\n};\n$.extend($.fn.textbox.methods,{inputMask:function(jq,_615){\nreturn jq.each(function(){\nvar _616=this;\nvar opts=$.extend({},$.fn.maskedbox.defaults,_615);\n$.data(_616,\"maskedbox\",{options:opts});\nvar _617=$(_616).textbox(\"textbox\");\n_617._unbind(\".maskedbox\");\nfor(var _618 in opts.inputEvents){\n_617._bind(_618+\".maskedbox\",{target:_616},opts.inputEvents[_618]);\n}\n});\n}});\n$.fn.maskedbox=function(_619,_61a){\nif(typeof _619==\"string\"){\nvar _61b=$.fn.maskedbox.methods[_619];\nif(_61b){\nreturn _61b(this,_61a);\n}else{\nreturn this.textbox(_619,_61a);\n}\n}\n_619=_619||{};\nreturn this.each(function(){\nvar _61c=$.data(this,\"maskedbox\");\nif(_61c){\n$.extend(_61c.options,_619);\n}else{\n$.data(this,\"maskedbox\",{options:$.extend({},$.fn.maskedbox.defaults,$.fn.maskedbox.parseOptions(this),_619)});\n}\n_5f5(this);\n});\n};\n$.fn.maskedbox.methods={options:function(jq){\nvar opts=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"maskedbox\").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly});\n},initValue:function(jq,_61d){\nreturn jq.each(function(){\n_61d=_5fb(this,_5f8(this,_61d));\n$(this).textbox(\"initValue\",_61d);\n});\n},setValue:function(jq,_61e){\nreturn jq.each(function(){\n_61e=_5fb(this,_5f8(this,_61e));\n$(this).textbox(\"setValue\",_61e);\n});\n}};\n$.fn.maskedbox.parseOptions=function(_61f){\nvar t=$(_61f);\nreturn $.extend({},$.fn.textbox.parseOptions(_61f),$.parser.parseOptions(_61f,[\"mask\",\"promptChar\"]),{});\n};\n$.fn.maskedbox.defaults=$.extend({},$.fn.textbox.defaults,{mask:\"\",promptChar:\"_\",masks:{\"9\":\"[0-9]\",\"a\":\"[a-zA-Z]\",\"*\":\"[0-9a-zA-Z]\"},inputEvents:{keydown:_612}});\n})(jQuery);\n(function($){\nvar _620=0;\nfunction _621(_622){\nvar _623=$.data(_622,\"filebox\");\nvar opts=_623.options;\nopts.fileboxId=\"filebox_file_id_\"+(++_620);\n$(_622).addClass(\"filebox-f\").textbox(opts);\n$(_622).textbox(\"textbox\").attr(\"readonly\",\"readonly\");\n_623.filebox=$(_622).next().addClass(\"filebox\");\nvar file=_624(_622);\nvar btn=$(_622).filebox(\"button\");\nif(btn.length){\n$(\"<label class=\\\"filebox-label\\\" for=\\\"\"+opts.fileboxId+\"\\\"></label>\").appendTo(btn);\nif(btn.linkbutton(\"options\").disabled){\nfile._propAttr(\"disabled\",true);\n}else{\nfile._propAttr(\"disabled\",false);\n}\n}\n};\nfunction _624(_625){\nvar _626=$.data(_625,\"filebox\");\nvar opts=_626.options;\n_626.filebox.find(\".textbox-value\").remove();\nopts.oldValue=\"\";\nvar file=$(\"<input type=\\\"file\\\" class=\\\"textbox-value\\\">\").appendTo(_626.filebox);\nfile.attr(\"id\",opts.fileboxId).attr(\"name\",$(_625).attr(\"textboxName\")||\"\");\nfile.attr(\"accept\",opts.accept);\nfile.attr(\"capture\",opts.capture);\nif(opts.multiple){\nfile.attr(\"multiple\",\"multiple\");\n}\nfile.change(function(){\nvar _627=this.value;\nif(this.files){\n_627=$.map(this.files,function(file){\nreturn file.name;\n}).join(opts.separator);\n}\n$(_625).filebox(\"setText\",_627);\nopts.onChange.call(_625,_627,opts.oldValue);\nopts.oldValue=_627;\n});\nreturn file;\n};\n$.fn.filebox=function(_628,_629){\nif(typeof _628==\"string\"){\nvar _62a=$.fn.filebox.methods[_628];\nif(_62a){\nreturn _62a(this,_629);\n}else{\nreturn this.textbox(_628,_629);\n}\n}\n_628=_628||{};\nreturn this.each(function(){\nvar _62b=$.data(this,\"filebox\");\nif(_62b){\n$.extend(_62b.options,_628);\n}else{\n$.data(this,\"filebox\",{options:$.extend({},$.fn.filebox.defaults,$.fn.filebox.parseOptions(this),_628)});\n}\n_621(this);\n});\n};\n$.fn.filebox.methods={options:function(jq){\nvar opts=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"filebox\").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"clear\");\n_624(this);\n});\n},reset:function(jq){\nreturn jq.each(function(){\n$(this).filebox(\"clear\");\n});\n},setValue:function(jq){\nreturn jq;\n},setValues:function(jq){\nreturn jq;\n},files:function(jq){\nreturn jq.next().find(\".textbox-value\")[0].files;\n}};\n$.fn.filebox.parseOptions=function(_62c){\nvar t=$(_62c);\nreturn $.extend({},$.fn.textbox.parseOptions(_62c),$.parser.parseOptions(_62c,[\"accept\",\"capture\",\"separator\"]),{multiple:(t.attr(\"multiple\")?true:undefined)});\n};\n$.fn.filebox.defaults=$.extend({},$.fn.textbox.defaults,{buttonIcon:null,buttonText:\"Choose File\",buttonAlign:\"right\",inputEvents:{},accept:\"\",capture:\"\",separator:\",\",multiple:false});\n})(jQuery);\n(function($){\nfunction _62d(_62e){\nvar _62f=$.data(_62e,\"searchbox\");\nvar opts=_62f.options;\nvar _630=$.extend(true,[],opts.icons);\n_630.push({iconCls:\"searchbox-button\",handler:function(e){\nvar t=$(e.data.target);\nvar opts=t.searchbox(\"options\");\nopts.searcher.call(e.data.target,t.searchbox(\"getValue\"),t.searchbox(\"getName\"));\n}});\n_631();\nvar _632=_633();\n$(_62e).addClass(\"searchbox-f\").textbox($.extend({},opts,{icons:_630,buttonText:(_632?_632.text:\"\")}));\n$(_62e).attr(\"searchboxName\",$(_62e).attr(\"textboxName\"));\n_62f.searchbox=$(_62e).next();\n_62f.searchbox.addClass(\"searchbox\");\n_634(_632);\nfunction _631(){\nif(opts.menu){\n_62f.menu=$(opts.menu).menu();\nvar _635=_62f.menu.menu(\"options\");\nvar _636=_635.onClick;\n_635.onClick=function(item){\n_634(item);\n_636.call(this,item);\n};\n}else{\nif(_62f.menu){\n_62f.menu.menu(\"destroy\");\n}\n_62f.menu=null;\n}\n};\nfunction _633(){\nif(_62f.menu){\nvar item=_62f.menu.children(\"div.menu-item:first\");\n_62f.menu.children(\"div.menu-item\").each(function(){\nvar _637=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr(\"selected\")?true:undefined)});\nif(_637.selected){\nitem=$(this);\nreturn false;\n}\n});\nreturn _62f.menu.menu(\"getItem\",item[0]);\n}else{\nreturn null;\n}\n};\nfunction _634(item){\nif(!item){\nreturn;\n}\n$(_62e).textbox(\"button\").menubutton({text:item.text,iconCls:(item.iconCls||null),menu:_62f.menu,menuAlign:opts.buttonAlign,plain:false});\n_62f.searchbox.find(\"input.textbox-value\").attr(\"name\",item.name||item.text);\n$(_62e).searchbox(\"resize\");\n};\n};\n$.fn.searchbox=function(_638,_639){\nif(typeof _638==\"string\"){\nvar _63a=$.fn.searchbox.methods[_638];\nif(_63a){\nreturn _63a(this,_639);\n}else{\nreturn this.textbox(_638,_639);\n}\n}\n_638=_638||{};\nreturn this.each(function(){\nvar _63b=$.data(this,\"searchbox\");\nif(_63b){\n$.extend(_63b.options,_638);\n}else{\n$.data(this,\"searchbox\",{options:$.extend({},$.fn.searchbox.defaults,$.fn.searchbox.parseOptions(this),_638)});\n}\n_62d(this);\n});\n};\n$.fn.searchbox.methods={options:function(jq){\nvar opts=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"searchbox\").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly});\n},menu:function(jq){\nreturn $.data(jq[0],\"searchbox\").menu;\n},getName:function(jq){\nreturn $.data(jq[0],\"searchbox\").searchbox.find(\"input.textbox-value\").attr(\"name\");\n},selectName:function(jq,name){\nreturn jq.each(function(){\nvar menu=$.data(this,\"searchbox\").menu;\nif(menu){\nmenu.children(\"div.menu-item\").each(function(){\nvar item=menu.menu(\"getItem\",this);\nif(item.name==name){\n$(this).trigger(\"click\");\nreturn false;\n}\n});\n}\n});\n},destroy:function(jq){\nreturn jq.each(function(){\nvar menu=$(this).searchbox(\"menu\");\nif(menu){\nmenu.menu(\"destroy\");\n}\n$(this).textbox(\"destroy\");\n});\n}};\n$.fn.searchbox.parseOptions=function(_63c){\nvar t=$(_63c);\nreturn $.extend({},$.fn.textbox.parseOptions(_63c),$.parser.parseOptions(_63c,[\"menu\"]),{searcher:(t.attr(\"searcher\")?eval(t.attr(\"searcher\")):undefined)});\n};\n$.fn.searchbox.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:$.extend({},$.fn.textbox.defaults.inputEvents,{keydown:function(e){\nif(e.keyCode==13){\ne.preventDefault();\nvar t=$(e.data.target);\nvar opts=t.searchbox(\"options\");\nt.searchbox(\"setValue\",$(this).val());\nopts.searcher.call(e.data.target,t.searchbox(\"getValue\"),t.searchbox(\"getName\"));\nreturn false;\n}\n}}),buttonAlign:\"left\",menu:null,searcher:function(_63d,name){\n}});\n})(jQuery);\n(function($){\nfunction _63e(_63f,_640){\nvar opts=$.data(_63f,\"form\").options;\n$.extend(opts,_640||{});\nvar _641=$.extend({},opts.queryParams);\nif(opts.onSubmit.call(_63f,_641)==false){\nreturn;\n}\nvar _642=$(_63f).find(\".textbox-text:focus\");\n_642.triggerHandler(\"blur\");\n_642.focus();\nvar _643=null;\nif(opts.dirty){\nvar ff=[];\n$.map(opts.dirtyFields,function(f){\nif($(f).hasClass(\"textbox-f\")){\n$(f).next().find(\".textbox-value\").each(function(){\nff.push(this);\n});\n}else{\nff.push(f);\n}\n});\n_643=$(_63f).find(\"input[name]:enabled,textarea[name]:enabled,select[name]:enabled\").filter(function(){\nreturn $.inArray(this,ff)==-1;\n});\n_643._propAttr(\"disabled\",true);\n}\nif(opts.ajax){\nif(opts.iframe){\n_644(_63f,_641);\n}else{\nif(window.FormData!==undefined){\n_645(_63f,_641);\n}else{\n_644(_63f,_641);\n}\n}\n}else{\n$(_63f).submit();\n}\nif(opts.dirty){\n_643._propAttr(\"disabled\",false);\n}\n};\nfunction _644(_646,_647){\nvar opts=$.data(_646,\"form\").options;\nvar _648=\"easyui_frame_\"+(new Date().getTime());\nvar _649=$(\"<iframe id=\"+_648+\" name=\"+_648+\"></iframe>\").appendTo(\"body\");\n_649.attr(\"src\",window.ActiveXObject?\"javascript:false\":\"about:blank\");\n_649.css({position:\"absolute\",top:-1000,left:-1000});\n_649.bind(\"load\",cb);\n_64a(_647);\nfunction _64a(_64b){\nvar form=$(_646);\nif(opts.url){\nform.attr(\"action\",opts.url);\n}\nvar t=form.attr(\"target\"),a=form.attr(\"action\");\nform.attr(\"target\",_648);\nvar _64c=$();\ntry{\nfor(var n in _64b){\nvar _64d=$(\"<input type=\\\"hidden\\\" name=\\\"\"+n+\"\\\">\").val(_64b[n]).appendTo(form);\n_64c=_64c.add(_64d);\n}\n_64e();\nform[0].submit();\n}\nfinally{\nform.attr(\"action\",a);\nt?form.attr(\"target\",t):form.removeAttr(\"target\");\n_64c.remove();\n}\n};\nfunction _64e(){\nvar f=$(\"#\"+_648);\nif(!f.length){\nreturn;\n}\ntry{\nvar s=f.contents()[0].readyState;\nif(s&&s.toLowerCase()==\"uninitialized\"){\nsetTimeout(_64e,100);\n}\n}\ncatch(e){\ncb();\n}\n};\nvar _64f=10;\nfunction cb(){\nvar f=$(\"#\"+_648);\nif(!f.length){\nreturn;\n}\nf.unbind();\nvar data=\"\";\ntry{\nvar body=f.contents().find(\"body\");\ndata=body.html();\nif(data==\"\"){\nif(--_64f){\nsetTimeout(cb,100);\nreturn;\n}\n}\nvar ta=body.find(\">textarea\");\nif(ta.length){\ndata=ta.val();\n}else{\nvar pre=body.find(\">pre\");\nif(pre.length){\ndata=pre.html();\n}\n}\n}\ncatch(e){\n}\nopts.success.call(_646,data);\nsetTimeout(function(){\nf.unbind();\nf.remove();\n},100);\n};\n};\nfunction _645(_650,_651){\nvar opts=$.data(_650,\"form\").options;\nvar _652=new FormData($(_650)[0]);\nfor(var name in _651){\n_652.append(name,_651[name]);\n}\n$.ajax({url:opts.url,type:\"post\",xhr:function(){\nvar xhr=$.ajaxSettings.xhr();\nif(xhr.upload){\nxhr.upload.addEventListener(\"progress\",function(e){\nif(e.lengthComputable){\nvar _653=e.total;\nvar _654=e.loaded||e.position;\nvar _655=Math.ceil(_654*100/_653);\nopts.onProgress.call(_650,_655);\n}\n},false);\n}\nreturn xhr;\n},data:_652,dataType:\"html\",cache:false,contentType:false,processData:false,complete:function(res){\nopts.success.call(_650,res.responseText);\n}});\n};\nfunction load(_656,data){\nvar opts=$.data(_656,\"form\").options;\nif(typeof data==\"string\"){\nvar _657={};\nif(opts.onBeforeLoad.call(_656,_657)==false){\nreturn;\n}\n$.ajax({url:data,data:_657,dataType:\"json\",success:function(data){\n_658(data);\n},error:function(){\nopts.onLoadError.apply(_656,arguments);\n}});\n}else{\n_658(data);\n}\nfunction _658(data){\nvar form=$(_656);\nfor(var name in data){\nvar val=data[name];\nif(!_659(name,val)){\nif(!_65a(name,val)){\nform.find(\"input[name=\\\"\"+name+\"\\\"]\").val(val);\nform.find(\"textarea[name=\\\"\"+name+\"\\\"]\").val(val);\nform.find(\"select[name=\\\"\"+name+\"\\\"]\").val(val);\n}\n}\n}\nopts.onLoadSuccess.call(_656,data);\nform.form(\"validate\");\n};\nfunction _659(name,val){\nvar _65b=[\"switchbutton\",\"radiobutton\",\"checkbox\"];\nfor(var i=0;i<_65b.length;i++){\nvar _65c=_65b[i];\nvar cc=$(_656).find(\"[\"+_65c+\"Name=\\\"\"+name+\"\\\"]\");\nif(cc.length){\ncc[_65c](\"uncheck\");\ncc.each(function(){\nif(_65d($(this)[_65c](\"options\").value,val)){\n$(this)[_65c](\"check\");\n}\n});\nreturn true;\n}\n}\nvar cc=$(_656).find(\"input[name=\\\"\"+name+\"\\\"][type=radio], input[name=\\\"\"+name+\"\\\"][type=checkbox]\");\nif(cc.length){\ncc._propAttr(\"checked\",false);\ncc.each(function(){\nif(_65d($(this).val(),val)){\n$(this)._propAttr(\"checked\",true);\n}\n});\nreturn true;\n}\nreturn false;\n};\nfunction _65d(v,val){\nif(v==String(val)||$.inArray(v,$.isArray(val)?val:[val])>=0){\nreturn true;\n}else{\nreturn false;\n}\n};\nfunction _65a(name,val){\nvar _65e=$(_656).find(\"[textboxName=\\\"\"+name+\"\\\"],[sliderName=\\\"\"+name+\"\\\"]\");\nif(_65e.length){\nfor(var i=0;i<opts.fieldTypes.length;i++){\nvar type=opts.fieldTypes[i];\nvar _65f=_65e.data(type);\nif(_65f){\nif(_65f.options.multiple||_65f.options.range){\n_65e[type](\"setValues\",val);\n}else{\n_65e[type](\"setValue\",val);\n}\nreturn true;\n}\n}\n}\nreturn false;\n};\n};\nfunction _660(_661){\n$(\"input,select,textarea\",_661).each(function(){\nif($(this).hasClass(\"textbox-value\")){\nreturn;\n}\nvar t=this.type,tag=this.tagName.toLowerCase();\nif(t==\"text\"||t==\"hidden\"||t==\"password\"||tag==\"textarea\"){\nthis.value=\"\";\n}else{\nif(t==\"file\"){\nvar file=$(this);\nif(!file.hasClass(\"textbox-value\")){\nvar _662=file.clone().val(\"\");\n_662.insertAfter(file);\nif(file.data(\"validatebox\")){\nfile.validatebox(\"destroy\");\n_662.validatebox();\n}else{\nfile.remove();\n}\n}\n}else{\nif(t==\"checkbox\"||t==\"radio\"){\nthis.checked=false;\n}else{\nif(tag==\"select\"){\nthis.selectedIndex=-1;\n}\n}\n}\n}\n});\nvar tmp=$();\nvar form=$(_661);\nvar opts=$.data(_661,\"form\").options;\nfor(var i=0;i<opts.fieldTypes.length;i++){\nvar type=opts.fieldTypes[i];\nvar _663=form.find(\".\"+type+\"-f\").not(tmp);\nif(_663.length&&_663[type]){\n_663[type](\"clear\");\ntmp=tmp.add(_663);\n}\n}\nform.form(\"validate\");\n};\nfunction _664(_665){\n_665.reset();\nvar form=$(_665);\nvar opts=$.data(_665,\"form\").options;\nfor(var i=opts.fieldTypes.length-1;i>=0;i--){\nvar type=opts.fieldTypes[i];\nvar _666=form.find(\".\"+type+\"-f\");\nif(_666.length&&_666[type]){\n_666[type](\"reset\");\n}\n}\nform.form(\"validate\");\n};\nfunction _667(_668){\nvar _669=$.data(_668,\"form\").options;\n$(_668).unbind(\".form\");\nif(_669.ajax){\n$(_668).bind(\"submit.form\",function(){\nsetTimeout(function(){\n_63e(_668,_669);\n},0);\nreturn false;\n});\n}\n$(_668).bind(\"_change.form\",function(e,t){\nif($.inArray(t,_669.dirtyFields)==-1){\n_669.dirtyFields.push(t);\n}\n_669.onChange.call(this,t);\n}).bind(\"change.form\",function(e){\nvar t=e.target;\nif(!$(t).hasClass(\"textbox-text\")){\nif($.inArray(t,_669.dirtyFields)==-1){\n_669.dirtyFields.push(t);\n}\n_669.onChange.call(this,t);\n}\n});\n_66a(_668,_669.novalidate);\n};\nfunction _66b(_66c,_66d){\n_66d=_66d||{};\nvar _66e=$.data(_66c,\"form\");\nif(_66e){\n$.extend(_66e.options,_66d);\n}else{\n$.data(_66c,\"form\",{options:$.extend({},$.fn.form.defaults,$.fn.form.parseOptions(_66c),_66d)});\n}\n};\nfunction _66f(_670){\nif($.fn.validatebox){\nvar t=$(_670);\nt.find(\".validatebox-text:not(:disabled)\").validatebox(\"validate\");\nvar _671=t.find(\".validatebox-invalid\");\n_671.filter(\":not(:disabled):first\").focus();\nreturn _671.length==0;\n}\nreturn true;\n};\nfunction _66a(_672,_673){\nvar opts=$.data(_672,\"form\").options;\nopts.novalidate=_673;\n$(_672).find(\".validatebox-text:not(:disabled)\").validatebox(_673?\"disableValidation\":\"enableValidation\");\n};\n$.fn.form=function(_674,_675){\nif(typeof _674==\"string\"){\nthis.each(function(){\n_66b(this);\n});\nreturn $.fn.form.methods[_674](this,_675);\n}\nreturn this.each(function(){\n_66b(this,_674);\n_667(this);\n});\n};\n$.fn.form.methods={options:function(jq){\nreturn $.data(jq[0],\"form\").options;\n},submit:function(jq,_676){\nreturn jq.each(function(){\n_63e(this,_676);\n});\n},load:function(jq,data){\nreturn jq.each(function(){\nload(this,data);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_660(this);\n});\n},reset:function(jq){\nreturn jq.each(function(){\n_664(this);\n});\n},validate:function(jq){\nreturn _66f(jq[0]);\n},disableValidation:function(jq){\nreturn jq.each(function(){\n_66a(this,true);\n});\n},enableValidation:function(jq){\nreturn jq.each(function(){\n_66a(this,false);\n});\n},resetValidation:function(jq){\nreturn jq.each(function(){\n$(this).find(\".validatebox-text:not(:disabled)\").validatebox(\"resetValidation\");\n});\n},resetDirty:function(jq){\nreturn jq.each(function(){\n$(this).form(\"options\").dirtyFields=[];\n});\n}};\n$.fn.form.parseOptions=function(_677){\nvar t=$(_677);\nreturn $.extend({},$.parser.parseOptions(_677,[{ajax:\"boolean\",dirty:\"boolean\"}]),{url:(t.attr(\"action\")?t.attr(\"action\"):undefined)});\n};\n$.fn.form.defaults={fieldTypes:[\"tagbox\",\"combobox\",\"combotree\",\"combogrid\",\"combotreegrid\",\"datetimebox\",\"datebox\",\"timepicker\",\"combo\",\"datetimespinner\",\"timespinner\",\"numberspinner\",\"spinner\",\"slider\",\"searchbox\",\"numberbox\",\"passwordbox\",\"filebox\",\"textbox\",\"switchbutton\",\"radiobutton\",\"checkbox\"],novalidate:false,ajax:true,iframe:true,dirty:false,dirtyFields:[],url:null,queryParams:{},onSubmit:function(_678){\nreturn $(this).form(\"validate\");\n},onProgress:function(_679){\n},success:function(data){\n},onBeforeLoad:function(_67a){\n},onLoadSuccess:function(data){\n},onLoadError:function(){\n},onChange:function(_67b){\n}};\n})(jQuery);\n(function($){\nfunction _67c(_67d){\nvar _67e=$.data(_67d,\"numberbox\");\nvar opts=_67e.options;\n$(_67d).addClass(\"numberbox-f\").textbox(opts);\n$(_67d).textbox(\"textbox\").css({imeMode:\"disabled\"});\n$(_67d).attr(\"numberboxName\",$(_67d).attr(\"textboxName\"));\n_67e.numberbox=$(_67d).next();\n_67e.numberbox.addClass(\"numberbox\");\nvar _67f=opts.parser.call(_67d,opts.value);\nvar _680=opts.formatter.call(_67d,_67f);\n$(_67d).numberbox(\"initValue\",_67f).numberbox(\"setText\",_680);\n};\nfunction _681(_682,_683){\nvar _684=$.data(_682,\"numberbox\");\nvar opts=_684.options;\nopts.value=parseFloat(_683);\nvar _683=opts.parser.call(_682,_683);\nvar text=opts.formatter.call(_682,_683);\nopts.value=_683;\n$(_682).textbox(\"setText\",text).textbox(\"setValue\",_683);\ntext=opts.formatter.call(_682,$(_682).textbox(\"getValue\"));\n$(_682).textbox(\"setText\",text);\n};\n$.fn.numberbox=function(_685,_686){\nif(typeof _685==\"string\"){\nvar _687=$.fn.numberbox.methods[_685];\nif(_687){\nreturn _687(this,_686);\n}else{\nreturn this.textbox(_685,_686);\n}\n}\n_685=_685||{};\nreturn this.each(function(){\nvar _688=$.data(this,\"numberbox\");\nif(_688){\n$.extend(_688.options,_685);\n}else{\n_688=$.data(this,\"numberbox\",{options:$.extend({},$.fn.numberbox.defaults,$.fn.numberbox.parseOptions(this),_685)});\n}\n_67c(this);\n});\n};\n$.fn.numberbox.methods={options:function(jq){\nvar opts=jq.data(\"textbox\")?jq.textbox(\"options\"):{};\nreturn $.extend($.data(jq[0],\"numberbox\").options,{width:opts.width,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly});\n},cloneFrom:function(jq,from){\nreturn jq.each(function(){\n$(this).textbox(\"cloneFrom\",from);\n$.data(this,\"numberbox\",{options:$.extend(true,{},$(from).numberbox(\"options\"))});\n$(this).addClass(\"numberbox-f\");\n});\n},fix:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).numberbox(\"options\");\nopts.value=null;\nvar _689=opts.parser.call(this,$(this).numberbox(\"getText\"));\n$(this).numberbox(\"setValue\",_689);\n});\n},setValue:function(jq,_68a){\nreturn jq.each(function(){\n_681(this,_68a);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"clear\");\n$(this).numberbox(\"options\").value=\"\";\n});\n},reset:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"reset\");\n$(this).numberbox(\"setValue\",$(this).numberbox(\"getValue\"));\n});\n}};\n$.fn.numberbox.parseOptions=function(_68b){\nvar t=$(_68b);\nreturn $.extend({},$.fn.textbox.parseOptions(_68b),$.parser.parseOptions(_68b,[\"decimalSeparator\",\"groupSeparator\",\"suffix\",{min:\"number\",max:\"number\",precision:\"number\"}]),{prefix:(t.attr(\"prefix\")?t.attr(\"prefix\"):undefined)});\n};\n$.fn.numberbox.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{keypress:function(e){\nvar _68c=e.data.target;\nvar opts=$(_68c).numberbox(\"options\");\nreturn opts.filter.call(_68c,e);\n},blur:function(e){\n$(e.data.target).numberbox(\"fix\");\n},keydown:function(e){\nif(e.keyCode==13){\n$(e.data.target).numberbox(\"fix\");\n}\n}},min:null,max:null,precision:0,decimalSeparator:\".\",groupSeparator:\"\",prefix:\"\",suffix:\"\",filter:function(e){\nvar opts=$(this).numberbox(\"options\");\nvar s=$(this).numberbox(\"getText\");\nif(e.metaKey||e.ctrlKey){\nreturn true;\n}\nif($.inArray(String(e.which),[\"46\",\"8\",\"13\",\"0\"])>=0){\nreturn true;\n}\nvar tmp=$(\"<span></span>\");\ntmp.html(String.fromCharCode(e.which));\nvar c=tmp.text();\ntmp.remove();\nif(!c){\nreturn true;\n}\nif(c==\"-\"&&opts.min!=null&&opts.min>=0){\nreturn false;\n}\nif(c==\"-\"||c==opts.decimalSeparator){\nreturn (s.indexOf(c)==-1)?true:false;\n}else{\nif(c==opts.groupSeparator){\nreturn true;\n}else{\nif(\"0123456789\".indexOf(c)>=0){\nreturn true;\n}else{\nreturn false;\n}\n}\n}\n},formatter:function(_68d){\nif(!_68d){\nreturn _68d;\n}\n_68d=_68d+\"\";\nvar opts=$(this).numberbox(\"options\");\nvar s1=_68d,s2=\"\";\nvar dpos=_68d.indexOf(\".\");\nif(dpos>=0){\ns1=_68d.substring(0,dpos);\ns2=_68d.substring(dpos+1,_68d.length);\n}\nif(opts.groupSeparator){\nvar p=/(\\d+)(\\d{3})/;\nwhile(p.test(s1)){\ns1=s1.replace(p,\"$1\"+opts.groupSeparator+\"$2\");\n}\n}\nif(s2){\nreturn opts.prefix+s1+opts.decimalSeparator+s2+opts.suffix;\n}else{\nreturn opts.prefix+s1+opts.suffix;\n}\n},parser:function(s){\ns=s+\"\";\nvar opts=$(this).numberbox(\"options\");\nif(opts.prefix){\ns=$.trim(s.replace(new RegExp(\"\\\\\"+$.trim(opts.prefix),\"g\"),\"\"));\n}\nif(opts.suffix){\ns=$.trim(s.replace(new RegExp(\"\\\\\"+$.trim(opts.suffix),\"g\"),\"\"));\n}\nif(parseFloat(s)!=opts.value){\nif(opts.groupSeparator){\ns=$.trim(s.replace(new RegExp(\"\\\\\"+opts.groupSeparator,\"g\"),\"\"));\n}\nif(opts.decimalSeparator){\ns=$.trim(s.replace(new RegExp(\"\\\\\"+opts.decimalSeparator,\"g\"),\".\"));\n}\ns=s.replace(/\\s/g,\"\");\n}\nvar val=parseFloat(s).toFixed(opts.precision);\nif(isNaN(val)){\nval=\"\";\n}else{\nif(typeof (opts.min)==\"number\"&&val<opts.min){\nval=opts.min.toFixed(opts.precision);\n}else{\nif(typeof (opts.max)==\"number\"&&val>opts.max){\nval=opts.max.toFixed(opts.precision);\n}\n}\n}\nreturn val;\n}});\n})(jQuery);\n(function($){\nfunction _68e(_68f,_690){\nvar opts=$.data(_68f,\"calendar\").options;\nvar t=$(_68f);\nif(_690){\n$.extend(opts,{width:_690.width,height:_690.height});\n}\nt._size(opts,t.parent());\nt.find(\".calendar-body\")._outerHeight(t.height()-t.find(\".calendar-header\")._outerHeight());\nif(t.find(\".calendar-menu\").is(\":visible\")){\n_691(_68f);\n}\n};\nfunction init(_692){\n$(_692).addClass(\"calendar\").html(\"<div class=\\\"calendar-header\\\">\"+\"<div class=\\\"calendar-nav calendar-prevmonth\\\"></div>\"+\"<div class=\\\"calendar-nav calendar-nextmonth\\\"></div>\"+\"<div class=\\\"calendar-nav calendar-prevyear\\\"></div>\"+\"<div class=\\\"calendar-nav calendar-nextyear\\\"></div>\"+\"<div class=\\\"calendar-title\\\">\"+\"<span class=\\\"calendar-text\\\"></span>\"+\"</div>\"+\"</div>\"+\"<div class=\\\"calendar-body\\\">\"+\"<div class=\\\"calendar-menu\\\">\"+\"<div class=\\\"calendar-menu-year-inner\\\">\"+\"<span class=\\\"calendar-nav calendar-menu-prev\\\"></span>\"+\"<span><input class=\\\"calendar-menu-year\\\" type=\\\"text\\\"></input></span>\"+\"<span class=\\\"calendar-nav calendar-menu-next\\\"></span>\"+\"</div>\"+\"<div class=\\\"calendar-menu-month-inner\\\">\"+\"</div>\"+\"</div>\"+\"</div>\");\n$(_692)._bind(\"_resize\",function(e,_693){\nif($(this).hasClass(\"easyui-fluid\")||_693){\n_68e(_692);\n}\nreturn false;\n});\n};\nfunction _694(_695){\nvar opts=$.data(_695,\"calendar\").options;\nvar menu=$(_695).find(\".calendar-menu\");\nmenu.find(\".calendar-menu-year\")._unbind(\".calendar\")._bind(\"keypress.calendar\",function(e){\nif(e.keyCode==13){\n_696(true);\n}\n});\n$(_695)._unbind(\".calendar\")._bind(\"mouseover.calendar\",function(e){\nvar t=_697(e.target);\nif(t.hasClass(\"calendar-nav\")||t.hasClass(\"calendar-text\")||(t.hasClass(\"calendar-day\")&&!t.hasClass(\"calendar-disabled\"))){\nt.addClass(\"calendar-nav-hover\");\n}\n})._bind(\"mouseout.calendar\",function(e){\nvar t=_697(e.target);\nif(t.hasClass(\"calendar-nav\")||t.hasClass(\"calendar-text\")||(t.hasClass(\"calendar-day\")&&!t.hasClass(\"calendar-disabled\"))){\nt.removeClass(\"calendar-nav-hover\");\n}\n})._bind(\"click.calendar\",function(e){\nvar t=_697(e.target);\nif(t.hasClass(\"calendar-menu-next\")||t.hasClass(\"calendar-nextyear\")){\n_698(1);\n}else{\nif(t.hasClass(\"calendar-menu-prev\")||t.hasClass(\"calendar-prevyear\")){\n_698(-1);\n}else{\nif(t.hasClass(\"calendar-menu-month\")){\nmenu.find(\".calendar-selected\").removeClass(\"calendar-selected\");\nt.addClass(\"calendar-selected\");\n_696(true);\n}else{\nif(t.hasClass(\"calendar-prevmonth\")){\n_699(-1);\n}else{\nif(t.hasClass(\"calendar-nextmonth\")){\n_699(1);\n}else{\nif(t.hasClass(\"calendar-text\")){\nif(menu.is(\":visible\")){\nmenu.hide();\n}else{\n_691(_695);\n}\n}else{\nif(t.hasClass(\"calendar-day\")){\nif(t.hasClass(\"calendar-disabled\")){\nreturn;\n}\nvar _69a=opts.current;\nt.closest(\"div.calendar-body\").find(\".calendar-selected\").removeClass(\"calendar-selected\");\nt.addClass(\"calendar-selected\");\nvar _69b=t.attr(\"abbr\").split(\",\");\nvar y=parseInt(_69b[0]);\nvar m=parseInt(_69b[1]);\nvar d=parseInt(_69b[2]);\nopts.current=new opts.Date(y,m-1,d);\nopts.onSelect.call(_695,opts.current);\nif(!_69a||_69a.getTime()!=opts.current.getTime()){\nopts.onChange.call(_695,opts.current,_69a);\n}\nif(opts.year!=y||opts.month!=m){\nopts.year=y;\nopts.month=m;\nshow(_695);\n}\n}\n}\n}\n}\n}\n}\n}\n});\nfunction _697(t){\nvar day=$(t).closest(\".calendar-day\");\nif(day.length){\nreturn day;\n}else{\nreturn $(t);\n}\n};\nfunction _696(_69c){\nvar menu=$(_695).find(\".calendar-menu\");\nvar year=menu.find(\".calendar-menu-year\").val();\nvar _69d=menu.find(\".calendar-selected\").attr(\"abbr\");\nif(!isNaN(year)){\nopts.year=parseInt(year);\nopts.month=parseInt(_69d);\nshow(_695);\n}\nif(_69c){\nmenu.hide();\n}\n};\nfunction _698(_69e){\nopts.year+=_69e;\nshow(_695);\nmenu.find(\".calendar-menu-year\").val(opts.year);\n};\nfunction _699(_69f){\nopts.month+=_69f;\nif(opts.month>12){\nopts.year++;\nopts.month=1;\n}else{\nif(opts.month<1){\nopts.year--;\nopts.month=12;\n}\n}\nshow(_695);\nmenu.find(\"td.calendar-selected\").removeClass(\"calendar-selected\");\nmenu.find(\"td:eq(\"+(opts.month-1)+\")\").addClass(\"calendar-selected\");\n};\n};\nfunction _691(_6a0){\nvar opts=$.data(_6a0,\"calendar\").options;\n$(_6a0).find(\".calendar-menu\").show();\nif($(_6a0).find(\".calendar-menu-month-inner\").is(\":empty\")){\n$(_6a0).find(\".calendar-menu-month-inner\").empty();\nvar t=$(\"<table class=\\\"calendar-mtable\\\"></table>\").appendTo($(_6a0).find(\".calendar-menu-month-inner\"));\nvar idx=0;\nfor(var i=0;i<3;i++){\nvar tr=$(\"<tr></tr>\").appendTo(t);\nfor(var j=0;j<4;j++){\n$(\"<td class=\\\"calendar-nav calendar-menu-month\\\"></td>\").html(opts.months[idx++]).attr(\"abbr\",idx).appendTo(tr);\n}\n}\n}\nvar body=$(_6a0).find(\".calendar-body\");\nvar sele=$(_6a0).find(\".calendar-menu\");\nvar _6a1=sele.find(\".calendar-menu-year-inner\");\nvar _6a2=sele.find(\".calendar-menu-month-inner\");\n_6a1.find(\"input\").val(opts.year).focus();\n_6a2.find(\"td.calendar-selected\").removeClass(\"calendar-selected\");\n_6a2.find(\"td:eq(\"+(opts.month-1)+\")\").addClass(\"calendar-selected\");\nsele._outerWidth(body._outerWidth());\nsele._outerHeight(body._outerHeight());\n_6a2._outerHeight(sele.height()-_6a1._outerHeight());\n};\nfunction _6a3(_6a4,year,_6a5){\nvar opts=$.data(_6a4,\"calendar\").options;\nvar _6a6=[];\nvar _6a7=new opts.Date(year,_6a5,0).getDate();\nfor(var i=1;i<=_6a7;i++){\n_6a6.push([year,_6a5,i]);\n}\nvar _6a8=[],week=[];\nvar _6a9=-1;\nwhile(_6a6.length>0){\nvar date=_6a6.shift();\nweek.push(date);\nvar day=new opts.Date(date[0],date[1]-1,date[2]).getDay();\nif(_6a9==day){\nday=0;\n}else{\nif(day==(opts.firstDay==0?7:opts.firstDay)-1){\n_6a8.push(week);\nweek=[];\n}\n}\n_6a9=day;\n}\nif(week.length){\n_6a8.push(week);\n}\nvar _6aa=_6a8[0];\nif(_6aa.length<7){\nwhile(_6aa.length<7){\nvar _6ab=_6aa[0];\nvar date=new opts.Date(_6ab[0],_6ab[1]-1,_6ab[2]-1);\n_6aa.unshift([date.getFullYear(),date.getMonth()+1,date.getDate()]);\n}\n}else{\nvar _6ab=_6aa[0];\nvar week=[];\nfor(var i=1;i<=7;i++){\nvar date=new opts.Date(_6ab[0],_6ab[1]-1,_6ab[2]-i);\nweek.unshift([date.getFullYear(),date.getMonth()+1,date.getDate()]);\n}\n_6a8.unshift(week);\n}\nvar _6ac=_6a8[_6a8.length-1];\nwhile(_6ac.length<7){\nvar _6ad=_6ac[_6ac.length-1];\nvar date=new opts.Date(_6ad[0],_6ad[1]-1,_6ad[2]+1);\n_6ac.push([date.getFullYear(),date.getMonth()+1,date.getDate()]);\n}\nif(_6a8.length<6){\nvar _6ad=_6ac[_6ac.length-1];\nvar week=[];\nfor(var i=1;i<=7;i++){\nvar date=new opts.Date(_6ad[0],_6ad[1]-1,_6ad[2]+i);\nweek.push([date.getFullYear(),date.getMonth()+1,date.getDate()]);\n}\n_6a8.push(week);\n}\nreturn _6a8;\n};\nfunction show(_6ae){\nvar opts=$.data(_6ae,\"calendar\").options;\nif(opts.current&&!opts.validator.call(_6ae,opts.current)){\nopts.current=null;\n}\nvar now=new opts.Date();\nvar _6af=now.getFullYear()+\",\"+(now.getMonth()+1)+\",\"+now.getDate();\nvar _6b0=opts.current?(opts.current.getFullYear()+\",\"+(opts.current.getMonth()+1)+\",\"+opts.current.getDate()):\"\";\nvar _6b1=6-opts.firstDay;\nvar _6b2=_6b1+1;\nif(_6b1>=7){\n_6b1-=7;\n}\nif(_6b2>=7){\n_6b2-=7;\n}\n$(_6ae).find(\".calendar-title span\").html(opts.months[opts.month-1]+\" \"+opts.year);\nvar body=$(_6ae).find(\"div.calendar-body\");\nbody.children(\"table\").remove();\nvar data=[\"<table class=\\\"calendar-dtable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\">\"];\ndata.push(\"<thead><tr>\");\nif(opts.showWeek){\ndata.push(\"<th class=\\\"calendar-week\\\">\"+opts.weekNumberHeader+\"</th>\");\n}\nfor(var i=opts.firstDay;i<opts.weeks.length;i++){\ndata.push(\"<th>\"+opts.weeks[i]+\"</th>\");\n}\nfor(var i=0;i<opts.firstDay;i++){\ndata.push(\"<th>\"+opts.weeks[i]+\"</th>\");\n}\ndata.push(\"</tr></thead>\");\ndata.push(\"<tbody>\");\nvar _6b3=_6a3(_6ae,opts.year,opts.month);\nfor(var i=0;i<_6b3.length;i++){\nvar week=_6b3[i];\nvar cls=\"\";\nif(i==0){\ncls=\"calendar-first\";\n}else{\nif(i==_6b3.length-1){\ncls=\"calendar-last\";\n}\n}\ndata.push(\"<tr class=\\\"\"+cls+\"\\\">\");\nif(opts.showWeek){\nvar _6b4=opts.getWeekNumber(new opts.Date(week[0][0],parseInt(week[0][1])-1,week[0][2]));\ndata.push(\"<td class=\\\"calendar-week\\\">\"+_6b4+\"</td>\");\n}\nfor(var j=0;j<week.length;j++){\nvar day=week[j];\nvar s=day[0]+\",\"+day[1]+\",\"+day[2];\nvar _6b5=new opts.Date(day[0],parseInt(day[1])-1,day[2]);\nvar d=opts.formatter.call(_6ae,_6b5);\nvar css=opts.styler.call(_6ae,_6b5);\nvar _6b6=\"\";\nvar _6b7=\"\";\nif(typeof css==\"string\"){\n_6b7=css;\n}else{\nif(css){\n_6b6=css[\"class\"]||\"\";\n_6b7=css[\"style\"]||\"\";\n}\n}\nvar cls=\"calendar-day\";\nif(!(opts.year==day[0]&&opts.month==day[1])){\ncls+=\" calendar-other-month\";\n}\nif(s==_6af){\ncls+=\" calendar-today\";\n}\nif(s==_6b0){\ncls+=\" calendar-selected\";\n}\nif(j==_6b1){\ncls+=\" calendar-saturday\";\n}else{\nif(j==_6b2){\ncls+=\" calendar-sunday\";\n}\n}\nif(j==0){\ncls+=\" calendar-first\";\n}else{\nif(j==week.length-1){\ncls+=\" calendar-last\";\n}\n}\ncls+=\" \"+_6b6;\nif(!opts.validator.call(_6ae,_6b5)){\ncls+=\" calendar-disabled\";\n}\ndata.push(\"<td class=\\\"\"+cls+\"\\\" abbr=\\\"\"+s+\"\\\" style=\\\"\"+_6b7+\"\\\">\"+d+\"</td>\");\n}\ndata.push(\"</tr>\");\n}\ndata.push(\"</tbody>\");\ndata.push(\"</table>\");\nbody.append(data.join(\"\"));\nbody.children(\"table.calendar-dtable\").prependTo(body);\nopts.onNavigate.call(_6ae,opts.year,opts.month);\n};\n$.fn.calendar=function(_6b8,_6b9){\nif(typeof _6b8==\"string\"){\nreturn $.fn.calendar.methods[_6b8](this,_6b9);\n}\n_6b8=_6b8||{};\nreturn this.each(function(){\nvar _6ba=$.data(this,\"calendar\");\nif(_6ba){\n$.extend(_6ba.options,_6b8);\n}else{\n_6ba=$.data(this,\"calendar\",{options:$.extend({},$.fn.calendar.defaults,$.fn.calendar.parseOptions(this),_6b8)});\ninit(this);\n}\nif(_6ba.options.border==false){\n$(this).addClass(\"calendar-noborder\");\n}\n_68e(this);\n_694(this);\nshow(this);\n$(this).find(\"div.calendar-menu\").hide();\n});\n};\n$.fn.calendar.methods={options:function(jq){\nreturn $.data(jq[0],\"calendar\").options;\n},resize:function(jq,_6bb){\nreturn jq.each(function(){\n_68e(this,_6bb);\n});\n},moveTo:function(jq,date){\nreturn jq.each(function(){\nvar opts=$(this).calendar(\"options\");\nif(!date){\nvar now=new opts.Date();\n$(this).calendar({year:now.getFullYear(),month:now.getMonth()+1,current:date});\nreturn;\n}\nif(opts.validator.call(this,date)){\nvar _6bc=opts.current;\n$(this).calendar({year:date.getFullYear(),month:date.getMonth()+1,current:date});\nif(!_6bc||_6bc.getTime()!=date.getTime()){\nopts.onChange.call(this,opts.current,_6bc);\n}\n}\n});\n}};\n$.fn.calendar.parseOptions=function(_6bd){\nvar t=$(_6bd);\nreturn $.extend({},$.parser.parseOptions(_6bd,[\"weekNumberHeader\",{firstDay:\"number\",fit:\"boolean\",border:\"boolean\",showWeek:\"boolean\"}]));\n};\n$.fn.calendar.defaults={Date:Date,width:180,height:180,fit:false,border:true,showWeek:false,firstDay:0,weeks:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],months:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],year:new Date().getFullYear(),month:new Date().getMonth()+1,current:(function(){\nvar d=new Date();\nreturn new Date(d.getFullYear(),d.getMonth(),d.getDate());\n})(),weekNumberHeader:\"\",getWeekNumber:function(date){\nvar _6be=new Date(date.getTime());\n_6be.setDate(_6be.getDate()+4-(_6be.getDay()||7));\nvar time=_6be.getTime();\n_6be.setMonth(0);\n_6be.setDate(1);\nreturn Math.floor(Math.round((time-_6be)/86400000)/7)+1;\n},formatter:function(date){\nreturn date.getDate();\n},styler:function(date){\nreturn \"\";\n},validator:function(date){\nreturn true;\n},onSelect:function(date){\n},onChange:function(_6bf,_6c0){\n},onNavigate:function(year,_6c1){\n}};\n})(jQuery);\n(function($){\nfunction _6c2(_6c3){\nvar _6c4=$.data(_6c3,\"spinner\");\nvar opts=_6c4.options;\nvar _6c5=$.extend(true,[],opts.icons);\nif(opts.spinAlign==\"left\"||opts.spinAlign==\"right\"){\nopts.spinArrow=true;\nopts.iconAlign=opts.spinAlign;\nvar _6c6={iconCls:\"spinner-button-updown\",handler:function(e){\nvar spin=$(e.target).closest(\".spinner-arrow-up,.spinner-arrow-down\");\n_6d0(e.data.target,spin.hasClass(\"spinner-arrow-down\"));\n}};\nif(opts.spinAlign==\"left\"){\n_6c5.unshift(_6c6);\n}else{\n_6c5.push(_6c6);\n}\n}else{\nopts.spinArrow=false;\nif(opts.spinAlign==\"vertical\"){\nif(opts.buttonAlign!=\"top\"){\nopts.buttonAlign=\"bottom\";\n}\nopts.clsLeft=\"textbox-button-bottom\";\nopts.clsRight=\"textbox-button-top\";\n}else{\nopts.clsLeft=\"textbox-button-left\";\nopts.clsRight=\"textbox-button-right\";\n}\n}\n$(_6c3).addClass(\"spinner-f\").textbox($.extend({},opts,{icons:_6c5,doSize:false,onResize:function(_6c7,_6c8){\nif(!opts.spinArrow){\nvar span=$(this).next();\nvar btn=span.find(\".textbox-button:not(.spinner-button)\");\nif(btn.length){\nvar _6c9=btn.outerWidth();\nvar _6ca=btn.outerHeight();\nvar _6cb=span.find(\".spinner-button.\"+opts.clsLeft);\nvar _6cc=span.find(\".spinner-button.\"+opts.clsRight);\nif(opts.buttonAlign==\"right\"){\n_6cc.css(\"marginRight\",_6c9+\"px\");\n}else{\nif(opts.buttonAlign==\"left\"){\n_6cb.css(\"marginLeft\",_6c9+\"px\");\n}else{\nif(opts.buttonAlign==\"top\"){\n_6cc.css(\"marginTop\",_6ca+\"px\");\n}else{\n_6cb.css(\"marginBottom\",_6ca+\"px\");\n}\n}\n}\n}\n}\nopts.onResize.call(this,_6c7,_6c8);\n}}));\n$(_6c3).attr(\"spinnerName\",$(_6c3).attr(\"textboxName\"));\n_6c4.spinner=$(_6c3).next();\n_6c4.spinner.addClass(\"spinner\");\nif(opts.spinArrow){\nvar _6cd=_6c4.spinner.find(\".spinner-button-updown\");\n_6cd.append(\"<span class=\\\"spinner-arrow spinner-button-top\\\">\"+\"<span class=\\\"spinner-arrow-up\\\"></span>\"+\"</span>\"+\"<span class=\\\"spinner-arrow spinner-button-bottom\\\">\"+\"<span class=\\\"spinner-arrow-down\\\"></span>\"+\"</span>\");\n}else{\nvar _6ce=$(\"<a href=\\\"javascript:;\\\" class=\\\"textbox-button spinner-button\\\"></a>\").addClass(opts.clsLeft).appendTo(_6c4.spinner);\nvar _6cf=$(\"<a href=\\\"javascript:;\\\" class=\\\"textbox-button spinner-button\\\"></a>\").addClass(opts.clsRight).appendTo(_6c4.spinner);\n_6ce.linkbutton({iconCls:opts.reversed?\"spinner-button-up\":\"spinner-button-down\",onClick:function(){\n_6d0(_6c3,!opts.reversed);\n}});\n_6cf.linkbutton({iconCls:opts.reversed?\"spinner-button-down\":\"spinner-button-up\",onClick:function(){\n_6d0(_6c3,opts.reversed);\n}});\nif(opts.disabled){\n$(_6c3).spinner(\"disable\");\n}\nif(opts.readonly){\n$(_6c3).spinner(\"readonly\");\n}\n}\n$(_6c3).spinner(\"resize\");\n};\nfunction _6d0(_6d1,down){\nvar opts=$(_6d1).spinner(\"options\");\nopts.spin.call(_6d1,down);\nopts[down?\"onSpinDown\":\"onSpinUp\"].call(_6d1);\n$(_6d1).spinner(\"validate\");\n};\n$.fn.spinner=function(_6d2,_6d3){\nif(typeof _6d2==\"string\"){\nvar _6d4=$.fn.spinner.methods[_6d2];\nif(_6d4){\nreturn _6d4(this,_6d3);\n}else{\nreturn this.textbox(_6d2,_6d3);\n}\n}\n_6d2=_6d2||{};\nreturn this.each(function(){\nvar _6d5=$.data(this,\"spinner\");\nif(_6d5){\n$.extend(_6d5.options,_6d2);\n}else{\n_6d5=$.data(this,\"spinner\",{options:$.extend({},$.fn.spinner.defaults,$.fn.spinner.parseOptions(this),_6d2)});\n}\n_6c2(this);\n});\n};\n$.fn.spinner.methods={options:function(jq){\nvar opts=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"spinner\").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly});\n}};\n$.fn.spinner.parseOptions=function(_6d6){\nreturn $.extend({},$.fn.textbox.parseOptions(_6d6),$.parser.parseOptions(_6d6,[\"min\",\"max\",\"spinAlign\",{increment:\"number\",reversed:\"boolean\"}]));\n};\n$.fn.spinner.defaults=$.extend({},$.fn.textbox.defaults,{min:null,max:null,increment:1,spinAlign:\"right\",reversed:false,spin:function(down){\n},onSpinUp:function(){\n},onSpinDown:function(){\n}});\n})(jQuery);\n(function($){\nfunction _6d7(_6d8){\n$(_6d8).addClass(\"numberspinner-f\");\nvar opts=$.data(_6d8,\"numberspinner\").options;\n$(_6d8).numberbox($.extend({},opts,{doSize:false})).spinner(opts);\n$(_6d8).numberbox(\"setValue\",opts.value);\n};\nfunction _6d9(_6da,down){\nvar opts=$.data(_6da,\"numberspinner\").options;\nvar v=parseFloat($(_6da).numberbox(\"getValue\")||opts.value)||0;\nif(down){\nv-=opts.increment;\n}else{\nv+=opts.increment;\n}\n$(_6da).numberbox(\"setValue\",v);\n};\n$.fn.numberspinner=function(_6db,_6dc){\nif(typeof _6db==\"string\"){\nvar _6dd=$.fn.numberspinner.methods[_6db];\nif(_6dd){\nreturn _6dd(this,_6dc);\n}else{\nreturn this.numberbox(_6db,_6dc);\n}\n}\n_6db=_6db||{};\nreturn this.each(function(){\nvar _6de=$.data(this,\"numberspinner\");\nif(_6de){\n$.extend(_6de.options,_6db);\n}else{\n$.data(this,\"numberspinner\",{options:$.extend({},$.fn.numberspinner.defaults,$.fn.numberspinner.parseOptions(this),_6db)});\n}\n_6d7(this);\n});\n};\n$.fn.numberspinner.methods={options:function(jq){\nvar opts=jq.numberbox(\"options\");\nreturn $.extend($.data(jq[0],\"numberspinner\").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly});\n}};\n$.fn.numberspinner.parseOptions=function(_6df){\nreturn $.extend({},$.fn.spinner.parseOptions(_6df),$.fn.numberbox.parseOptions(_6df),{});\n};\n$.fn.numberspinner.defaults=$.extend({},$.fn.spinner.defaults,$.fn.numberbox.defaults,{spin:function(down){\n_6d9(this,down);\n}});\n})(jQuery);\n(function($){\nfunction _6e0(_6e1){\nvar opts=$.data(_6e1,\"timespinner\").options;\n$(_6e1).addClass(\"timespinner-f\").spinner(opts);\nvar _6e2=opts.formatter.call(_6e1,opts.parser.call(_6e1,opts.value));\n$(_6e1).timespinner(\"initValue\",_6e2);\n};\nfunction _6e3(e){\nvar _6e4=e.data.target;\nvar opts=$.data(_6e4,\"timespinner\").options;\nvar _6e5=$(_6e4).timespinner(\"getSelectionStart\");\nfor(var i=0;i<opts.selections.length;i++){\nvar _6e6=opts.selections[i];\nif(_6e5>=_6e6[0]&&_6e5<=_6e6[1]){\n_6e7(_6e4,i);\nreturn;\n}\n}\n};\nfunction _6e7(_6e8,_6e9){\nvar opts=$.data(_6e8,\"timespinner\").options;\nif(_6e9!=undefined){\nopts.highlight=_6e9;\n}\nvar _6ea=opts.selections[opts.highlight];\nif(_6ea){\nvar tb=$(_6e8).timespinner(\"textbox\");\n$(_6e8).timespinner(\"setSelectionRange\",{start:_6ea[0],end:_6ea[1]});\ntb.focus();\n}\n};\nfunction _6eb(_6ec,_6ed){\nvar opts=$.data(_6ec,\"timespinner\").options;\nvar _6ed=opts.parser.call(_6ec,_6ed);\nvar text=opts.formatter.call(_6ec,_6ed);\n$(_6ec).spinner(\"setValue\",text);\n};\nfunction _6ee(_6ef,down){\nvar opts=$.data(_6ef,\"timespinner\").options;\nvar s=$(_6ef).timespinner(\"getValue\");\nvar _6f0=opts.selections[opts.highlight];\nvar s1=s.substring(0,_6f0[0]);\nvar s2=s.substring(_6f0[0],_6f0[1]);\nvar s3=s.substring(_6f0[1]);\nif(s2==opts.ampm[0]){\ns2=opts.ampm[1];\n}else{\nif(s2==opts.ampm[1]){\ns2=opts.ampm[0];\n}else{\ns2=parseInt(s2,10)||0;\nif(opts.selections.length-4==opts.highlight&&opts.hour12){\nif(s2==12){\ns2=0;\n}else{\nif(s2==11&&!down){\nvar tmp=s3.replace(opts.ampm[0],opts.ampm[1]);\nif(s3!=tmp){\ns3=tmp;\n}else{\ns3=s3.replace(opts.ampm[1],opts.ampm[0]);\n}\n}\n}\n}\ns2=s2+opts.increment*(down?-1:1);\n}\n}\nvar v=s1+s2+s3;\n$(_6ef).timespinner(\"setValue\",v);\n_6e7(_6ef);\n};\n$.fn.timespinner=function(_6f1,_6f2){\nif(typeof _6f1==\"string\"){\nvar _6f3=$.fn.timespinner.methods[_6f1];\nif(_6f3){\nreturn _6f3(this,_6f2);\n}else{\nreturn this.spinner(_6f1,_6f2);\n}\n}\n_6f1=_6f1||{};\nreturn this.each(function(){\nvar _6f4=$.data(this,\"timespinner\");\nif(_6f4){\n$.extend(_6f4.options,_6f1);\n}else{\n$.data(this,\"timespinner\",{options:$.extend({},$.fn.timespinner.defaults,$.fn.timespinner.parseOptions(this),_6f1)});\n}\n_6e0(this);\n});\n};\n$.fn.timespinner.methods={options:function(jq){\nvar opts=jq.data(\"spinner\")?jq.spinner(\"options\"):{};\nreturn $.extend($.data(jq[0],\"timespinner\").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly});\n},setValue:function(jq,_6f5){\nreturn jq.each(function(){\n_6eb(this,_6f5);\n});\n},getHours:function(jq){\nvar opts=$.data(jq[0],\"timespinner\").options;\nvar date=opts.parser.call(jq[0],jq.timespinner(\"getValue\"));\nreturn date?date.getHours():null;\n},getMinutes:function(jq){\nvar opts=$.data(jq[0],\"timespinner\").options;\nvar date=opts.parser.call(jq[0],jq.timespinner(\"getValue\"));\nreturn date?date.getMinutes():null;\n},getSeconds:function(jq){\nvar opts=$.data(jq[0],\"timespinner\").options;\nvar date=opts.parser.call(jq[0],jq.timespinner(\"getValue\"));\nreturn date?date.getSeconds():null;\n}};\n$.fn.timespinner.parseOptions=function(_6f6){\nreturn $.extend({},$.fn.spinner.parseOptions(_6f6),$.parser.parseOptions(_6f6,[\"separator\",{hour12:\"boolean\",showSeconds:\"boolean\",highlight:\"number\"}]));\n};\n$.fn.timespinner.defaults=$.extend({},$.fn.spinner.defaults,{inputEvents:$.extend({},$.fn.spinner.defaults.inputEvents,{click:function(e){\n_6e3.call(this,e);\n},blur:function(e){\nvar t=$(e.data.target);\nt.timespinner(\"setValue\",t.timespinner(\"getText\"));\n},keydown:function(e){\nif(e.keyCode==13){\nvar t=$(e.data.target);\nt.timespinner(\"setValue\",t.timespinner(\"getText\"));\n}\n}}),formatter:function(date){\nif(!date){\nreturn \"\";\n}\nvar opts=$(this).timespinner(\"options\");\nvar hour=date.getHours();\nvar _6f7=date.getMinutes();\nvar _6f8=date.getSeconds();\nvar ampm=\"\";\nif(opts.hour12){\nampm=hour>=12?opts.ampm[1]:opts.ampm[0];\nhour=hour%12;\nif(hour==0){\nhour=12;\n}\n}\nvar tt=[_6f9(hour),_6f9(_6f7)];\nif(opts.showSeconds){\ntt.push(_6f9(_6f8));\n}\nvar s=tt.join(opts.separator)+\" \"+ampm;\nreturn $.trim(s);\nfunction _6f9(_6fa){\nreturn (_6fa<10?\"0\":\"\")+_6fa;\n};\n},parser:function(s){\nvar opts=$(this).timespinner(\"options\");\nvar date=_6fb(s);\nif(date){\nvar min=_6fb(opts.min);\nvar max=_6fb(opts.max);\nif(min&&min>date){\ndate=min;\n}\nif(max&&max<date){\ndate=max;\n}\n}\nreturn date;\nfunction _6fb(s){\nif(!s){\nreturn null;\n}\nvar ss=s.split(\" \");\nvar tt=ss[0].split(opts.separator);\nvar hour=parseInt(tt[0],10)||0;\nvar _6fc=parseInt(tt[1],10)||0;\nvar _6fd=parseInt(tt[2],10)||0;\nif(opts.hour12){\nvar ampm=ss[1];\nif(ampm==opts.ampm[1]&&hour<12){\nhour+=12;\n}else{\nif(ampm==opts.ampm[0]&&hour==12){\nhour-=12;\n}\n}\n}\nreturn new Date(1900,0,0,hour,_6fc,_6fd);\n};\n},selections:[[0,2],[3,5],[6,8],[9,11]],separator:\":\",showSeconds:false,highlight:0,hour12:false,ampm:[\"AM\",\"PM\"],spin:function(down){\n_6ee(this,down);\n}});\n})(jQuery);\n(function($){\nfunction _6fe(_6ff){\nvar opts=$.data(_6ff,\"datetimespinner\").options;\n$(_6ff).addClass(\"datetimespinner-f\").timespinner(opts);\n};\n$.fn.datetimespinner=function(_700,_701){\nif(typeof _700==\"string\"){\nvar _702=$.fn.datetimespinner.methods[_700];\nif(_702){\nreturn _702(this,_701);\n}else{\nreturn this.timespinner(_700,_701);\n}\n}\n_700=_700||{};\nreturn this.each(function(){\nvar _703=$.data(this,\"datetimespinner\");\nif(_703){\n$.extend(_703.options,_700);\n}else{\n$.data(this,\"datetimespinner\",{options:$.extend({},$.fn.datetimespinner.defaults,$.fn.datetimespinner.parseOptions(this),_700)});\n}\n_6fe(this);\n});\n};\n$.fn.datetimespinner.methods={options:function(jq){\nvar opts=jq.timespinner(\"options\");\nreturn $.extend($.data(jq[0],\"datetimespinner\").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly});\n}};\n$.fn.datetimespinner.parseOptions=function(_704){\nreturn $.extend({},$.fn.timespinner.parseOptions(_704),$.parser.parseOptions(_704,[]));\n};\n$.fn.datetimespinner.defaults=$.extend({},$.fn.timespinner.defaults,{formatter:function(date){\nif(!date){\nreturn \"\";\n}\nreturn $.fn.datebox.defaults.formatter.call(this,date)+\" \"+$.fn.timespinner.defaults.formatter.call(this,date);\n},parser:function(s){\ns=$.trim(s);\nif(!s){\nreturn null;\n}\nvar dt=s.split(\" \");\nvar _705=$.fn.datebox.defaults.parser.call(this,dt[0]);\nif(dt.length<2){\nreturn _705;\n}\nvar _706=$.fn.timespinner.defaults.parser.call(this,dt[1]+(dt[2]?\" \"+dt[2]:\"\"));\nreturn new Date(_705.getFullYear(),_705.getMonth(),_705.getDate(),_706.getHours(),_706.getMinutes(),_706.getSeconds());\n},selections:[[0,2],[3,5],[6,10],[11,13],[14,16],[17,19],[20,22]]});\n})(jQuery);\n(function($){\nvar _707=0;\nfunction _708(a,o){\nreturn $.easyui.indexOfArray(a,o);\n};\nfunction _709(a,o,id){\n$.easyui.removeArrayItem(a,o,id);\n};\nfunction _70a(a,o,r){\n$.easyui.addArrayItem(a,o,r);\n};\nfunction _70b(_70c,aa){\nreturn $.data(_70c,\"treegrid\")?aa.slice(1):aa;\n};\nfunction _70d(_70e){\nvar _70f=$.data(_70e,\"datagrid\");\nvar opts=_70f.options;\nvar _710=_70f.panel;\nvar dc=_70f.dc;\nvar ss=null;\nif(opts.sharedStyleSheet){\nss=typeof opts.sharedStyleSheet==\"boolean\"?\"head\":opts.sharedStyleSheet;\n}else{\nss=_710.closest(\"div.datagrid-view\");\nif(!ss.length){\nss=dc.view;\n}\n}\nvar cc=$(ss);\nvar _711=$.data(cc[0],\"ss\");\nif(!_711){\n_711=$.data(cc[0],\"ss\",{cache:{},dirty:[]});\n}\nreturn {add:function(_712){\nvar ss=[\"<style type=\\\"text/css\\\" easyui=\\\"true\\\">\"];\nfor(var i=0;i<_712.length;i++){\n_711.cache[_712[i][0]]={width:_712[i][1]};\n}\nvar _713=0;\nfor(var s in _711.cache){\nvar item=_711.cache[s];\nitem.index=_713++;\nss.push(s+\"{width:\"+item.width+\"}\");\n}\nss.push(\"</style>\");\n$(ss.join(\"\\n\")).appendTo(cc);\ncc.children(\"style[easyui]:not(:last)\").remove();\n},getRule:function(_714){\nvar _715=cc.children(\"style[easyui]:last\")[0];\nvar _716=_715.styleSheet?_715.styleSheet:(_715.sheet||document.styleSheets[document.styleSheets.length-1]);\nvar _717=_716.cssRules||_716.rules;\nreturn _717[_714];\n},set:function(_718,_719){\nvar item=_711.cache[_718];\nif(item){\nitem.width=_719;\nvar rule=this.getRule(item.index);\nif(rule){\nrule.style[\"width\"]=_719;\n}\n}\n},remove:function(_71a){\nvar tmp=[];\nfor(var s in _711.cache){\nif(s.indexOf(_71a)==-1){\ntmp.push([s,_711.cache[s].width]);\n}\n}\n_711.cache={};\nthis.add(tmp);\n},dirty:function(_71b){\nif(_71b){\n_711.dirty.push(_71b);\n}\n},clean:function(){\nfor(var i=0;i<_711.dirty.length;i++){\nthis.remove(_711.dirty[i]);\n}\n_711.dirty=[];\n}};\n};\nfunction _71c(_71d,_71e){\nvar _71f=$.data(_71d,\"datagrid\");\nvar opts=_71f.options;\nvar _720=_71f.panel;\nif(_71e){\n$.extend(opts,_71e);\n}\nif(opts.fit==true){\nvar p=_720.panel(\"panel\").parent();\nopts.width=p.width();\nopts.height=p.height();\n}\n_720.panel(\"resize\",opts);\n};\nfunction _721(_722){\nvar _723=$.data(_722,\"datagrid\");\nvar opts=_723.options;\nvar dc=_723.dc;\nvar wrap=_723.panel;\nif(!wrap.is(\":visible\")){\nreturn;\n}\nvar _724=wrap.width();\nvar _725=wrap.height();\nvar view=dc.view;\nvar _726=dc.view1;\nvar _727=dc.view2;\nvar _728=_726.children(\"div.datagrid-header\");\nvar _729=_727.children(\"div.datagrid-header\");\nvar _72a=_728.find(\"table\");\nvar _72b=_729.find(\"table\");\nview.width(_724);\nvar _72c=_728.children(\"div.datagrid-header-inner\").show();\n_726.width(_72c.find(\"table\").width());\nif(!opts.showHeader){\n_72c.hide();\n}\n_727.width(_724-_726._outerWidth());\n_726.children()._outerWidth(_726.width());\n_727.children()._outerWidth(_727.width());\nvar all=_728.add(_729).add(_72a).add(_72b);\nall.css(\"height\",\"\");\nvar hh=Math.max(_72a.height(),_72b.height());\nall._outerHeight(hh);\nview.children(\".datagrid-empty\").css(\"top\",hh+\"px\");\ndc.body1.add(dc.body2).children(\"table.datagrid-btable-frozen\").css({position:\"absolute\",top:dc.header2._outerHeight()});\nvar _72d=dc.body2.children(\"table.datagrid-btable-frozen\")._outerHeight();\nvar _72e=_72d+_729._outerHeight()+_727.children(\".datagrid-footer\")._outerHeight();\nwrap.children(\":not(.datagrid-view,.datagrid-mask,.datagrid-mask-msg)\").each(function(){\n_72e+=$(this)._outerHeight();\n});\nvar _72f=wrap.outerHeight()-wrap.height();\nvar _730=wrap._size(\"minHeight\")||\"\";\nvar _731=wrap._size(\"maxHeight\")||\"\";\n_726.add(_727).children(\"div.datagrid-body\").css({marginTop:_72d,height:(isNaN(parseInt(opts.height))?\"\":(_725-_72e)),minHeight:(_730?_730-_72f-_72e:\"\"),maxHeight:(_731?_731-_72f-_72e:\"\")});\nview.height(_727.height());\n};\nfunction _732(_733,_734,_735){\nvar rows=$.data(_733,\"datagrid\").data.rows;\nvar opts=$.data(_733,\"datagrid\").options;\nvar dc=$.data(_733,\"datagrid\").dc;\nvar tmp=$(\"<tr class=\\\"datagrid-row\\\" style=\\\"position:absolute;left:-999999px\\\"></tr>\").appendTo(\"body\");\nvar _736=tmp.outerHeight();\ntmp.remove();\nif(!dc.body1.is(\":empty\")&&(!opts.nowrap||opts.autoRowHeight||_735)){\nif(_734!=undefined){\nvar tr1=opts.finder.getTr(_733,_734,\"body\",1);\nvar tr2=opts.finder.getTr(_733,_734,\"body\",2);\n_737(tr1,tr2);\n}else{\nvar tr1=opts.finder.getTr(_733,0,\"allbody\",1);\nvar tr2=opts.finder.getTr(_733,0,\"allbody\",2);\n_737(tr1,tr2);\nif(opts.showFooter){\nvar tr1=opts.finder.getTr(_733,0,\"allfooter\",1);\nvar tr2=opts.finder.getTr(_733,0,\"allfooter\",2);\n_737(tr1,tr2);\n}\n}\n}\n_721(_733);\nif(opts.height==\"auto\"){\nvar _738=dc.body1.parent();\nvar _739=dc.body2;\nvar _73a=_73b(_739);\nvar _73c=_73a.height;\nif(_73a.width>_739.width()){\n_73c+=18;\n}\n_73c-=parseInt(_739.css(\"marginTop\"))||0;\n_738.height(_73c);\n_739.height(_73c);\ndc.view.height(dc.view2.height());\n}\ndc.body2.triggerHandler(\"scroll\");\nfunction _737(trs1,trs2){\nfor(var i=0;i<trs2.length;i++){\nvar tr1=$(trs1[i]);\nvar tr2=$(trs2[i]);\ntr1.css(\"height\",\"\");\ntr2.css(\"height\",\"\");\nvar _73d=Math.max(tr1.outerHeight(),tr2.outerHeight());\nif(_73d!=_736){\n_73d=Math.max(_73d,_736)+1;\ntr1.css(\"height\",_73d);\ntr2.css(\"height\",_73d);\n}\n}\n};\nfunction _73b(cc){\nvar _73e=0;\nvar _73f=0;\n$(cc).children().each(function(){\nvar c=$(this);\nif(c.is(\":visible\")){\n_73f+=c._outerHeight();\nif(_73e<c._outerWidth()){\n_73e=c._outerWidth();\n}\n}\n});\nreturn {width:_73e,height:_73f};\n};\n};\nfunction _740(_741,_742){\nvar _743=$.data(_741,\"datagrid\");\nvar opts=_743.options;\nvar dc=_743.dc;\nif(!dc.body2.children(\"table.datagrid-btable-frozen\").length){\ndc.body1.add(dc.body2).prepend(\"<table class=\\\"datagrid-btable datagrid-btable-frozen\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"></table>\");\n}\n_744(true);\n_744(false);\n_721(_741);\nfunction _744(_745){\nvar _746=_745?1:2;\nvar tr=opts.finder.getTr(_741,_742,\"body\",_746);\n(_745?dc.body1:dc.body2).children(\"table.datagrid-btable-frozen\").append(tr);\n};\n};\nfunction _747(_748,_749){\nfunction _74a(){\nvar _74b=[];\nvar _74c=[];\n$(_748).children(\"thead\").each(function(){\nvar opt=$.parser.parseOptions(this,[{frozen:\"boolean\"}]);\n$(this).find(\"tr\").each(function(){\nvar cols=[];\n$(this).find(\"th\").each(function(){\nvar th=$(this);\nvar col=$.extend({},$.parser.parseOptions(this,[\"id\",\"field\",\"align\",\"halign\",\"order\",\"width\",{sortable:\"boolean\",checkbox:\"boolean\",resizable:\"boolean\",fixed:\"boolean\"},{rowspan:\"number\",colspan:\"number\"}]),{title:(th.html()||undefined),hidden:(th.attr(\"hidden\")?true:undefined),formatter:(th.attr(\"formatter\")?eval(th.attr(\"formatter\")):undefined),styler:(th.attr(\"styler\")?eval(th.attr(\"styler\")):undefined),sorter:(th.attr(\"sorter\")?eval(th.attr(\"sorter\")):undefined)});\nif(col.width&&String(col.width).indexOf(\"%\")==-1){\ncol.width=parseInt(col.width);\n}\nif(th.attr(\"editor\")){\nvar s=$.trim(th.attr(\"editor\"));\nif(s.substr(0,1)==\"{\"){\ncol.editor=eval(\"(\"+s+\")\");\n}else{\ncol.editor=s;\n}\n}\ncols.push(col);\n});\nopt.frozen?_74b.push(cols):_74c.push(cols);\n});\n});\nreturn [_74b,_74c];\n};\nvar _74d=$(\"<div class=\\\"datagrid-wrap\\\">\"+\"<div class=\\\"datagrid-view\\\">\"+\"<div class=\\\"datagrid-view1\\\">\"+\"<div class=\\\"datagrid-header\\\">\"+\"<div class=\\\"datagrid-header-inner\\\"></div>\"+\"</div>\"+\"<div class=\\\"datagrid-body\\\">\"+\"<div class=\\\"datagrid-body-inner\\\"></div>\"+\"</div>\"+\"<div class=\\\"datagrid-footer\\\">\"+\"<div class=\\\"datagrid-footer-inner\\\"></div>\"+\"</div>\"+\"</div>\"+\"<div class=\\\"datagrid-view2\\\">\"+\"<div class=\\\"datagrid-header\\\">\"+\"<div class=\\\"datagrid-header-inner\\\"></div>\"+\"</div>\"+\"<div class=\\\"datagrid-body\\\"></div>\"+\"<div class=\\\"datagrid-footer\\\">\"+\"<div class=\\\"datagrid-footer-inner\\\"></div>\"+\"</div>\"+\"</div>\"+\"</div>\"+\"</div>\").insertAfter(_748);\n_74d.panel({doSize:false,cls:\"datagrid\"});\n$(_748).addClass(\"datagrid-f\").hide().appendTo(_74d.children(\"div.datagrid-view\"));\nvar cc=_74a();\nvar view=_74d.children(\"div.datagrid-view\");\nvar _74e=view.children(\"div.datagrid-view1\");\nvar _74f=view.children(\"div.datagrid-view2\");\nreturn {panel:_74d,frozenColumns:cc[0],columns:cc[1],dc:{view:view,view1:_74e,view2:_74f,header1:_74e.children(\"div.datagrid-header\").children(\"div.datagrid-header-inner\"),header2:_74f.children(\"div.datagrid-header\").children(\"div.datagrid-header-inner\"),body1:_74e.children(\"div.datagrid-body\").children(\"div.datagrid-body-inner\"),body2:_74f.children(\"div.datagrid-body\"),footer1:_74e.children(\"div.datagrid-footer\").children(\"div.datagrid-footer-inner\"),footer2:_74f.children(\"div.datagrid-footer\").children(\"div.datagrid-footer-inner\")}};\n};\nfunction _750(_751){\nvar _752=$.data(_751,\"datagrid\");\nvar opts=_752.options;\nvar dc=_752.dc;\nvar _753=_752.panel;\n_752.ss=$(_751).datagrid(\"createStyleSheet\");\n_753.panel($.extend({},opts,{id:null,doSize:false,onResize:function(_754,_755){\nif($.data(_751,\"datagrid\")){\n_721(_751);\n$(_751).datagrid(\"fitColumns\");\nopts.onResize.call(_753,_754,_755);\n}\n},onExpand:function(){\nif($.data(_751,\"datagrid\")){\n$(_751).datagrid(\"fixRowHeight\").datagrid(\"fitColumns\");\nopts.onExpand.call(_753);\n}\n}}));\nvar _756=$(_751).attr(\"id\")||\"\";\nif(_756){\n_756+=\"_\";\n}\n_752.rowIdPrefix=_756+\"datagrid-row-r\"+(++_707);\n_752.cellClassPrefix=_756+\"datagrid-cell-c\"+_707;\n_757(dc.header1,opts.frozenColumns,true);\n_757(dc.header2,opts.columns,false);\n_758();\ndc.header1.add(dc.header2).css(\"display\",opts.showHeader?\"block\":\"none\");\ndc.footer1.add(dc.footer2).css(\"display\",opts.showFooter?\"block\":\"none\");\nif(opts.toolbar){\nif($.isArray(opts.toolbar)){\n$(\"div.datagrid-toolbar\",_753).remove();\nvar tb=$(\"<div class=\\\"datagrid-toolbar\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"><tr></tr></table></div>\").prependTo(_753);\nvar tr=tb.find(\"tr\");\nfor(var i=0;i<opts.toolbar.length;i++){\nvar btn=opts.toolbar[i];\nif(btn==\"-\"){\n$(\"<td><div class=\\\"datagrid-btn-separator\\\"></div></td>\").appendTo(tr);\n}else{\nvar td=$(\"<td></td>\").appendTo(tr);\nvar tool=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(td);\ntool[0].onclick=eval(btn.handler||function(){\n});\ntool.linkbutton($.extend({},btn,{plain:true}));\n}\n}\n}else{\n$(opts.toolbar).addClass(\"datagrid-toolbar\").prependTo(_753);\n$(opts.toolbar).show();\n}\n}else{\n$(\"div.datagrid-toolbar\",_753).remove();\n}\n$(\"div.datagrid-pager\",_753).remove();\nif(opts.pagination){\nvar _759=$(\"<div class=\\\"datagrid-pager\\\"></div>\");\nif(opts.pagePosition==\"bottom\"){\n_759.appendTo(_753);\n}else{\nif(opts.pagePosition==\"top\"){\n_759.addClass(\"datagrid-pager-top\").prependTo(_753);\n}else{\nvar ptop=$(\"<div class=\\\"datagrid-pager datagrid-pager-top\\\"></div>\").prependTo(_753);\n_759.appendTo(_753);\n_759=_759.add(ptop);\n}\n}\n_759.pagination({total:0,pageNumber:opts.pageNumber,pageSize:opts.pageSize,pageList:opts.pageList,onSelectPage:function(_75a,_75b){\nopts.pageNumber=_75a||1;\nopts.pageSize=_75b;\n_759.pagination(\"refresh\",{pageNumber:_75a,pageSize:_75b});\n_7a3(_751);\n}});\nopts.pageSize=_759.pagination(\"options\").pageSize;\n}\nfunction _757(_75c,_75d,_75e){\nif(!_75d){\nreturn;\n}\n$(_75c).show();\n$(_75c).empty();\nvar tmp=$(\"<div class=\\\"datagrid-cell\\\" style=\\\"position:absolute;left:-99999px\\\"></div>\").appendTo(\"body\");\ntmp._outerWidth(99);\nvar _75f=100-parseInt(tmp[0].style.width);\ntmp.remove();\nvar _760=[];\nvar _761=[];\nvar _762=[];\nif(opts.sortName){\n_760=opts.sortName.split(\",\");\n_761=opts.sortOrder.split(\",\");\n}\nvar t=$(\"<table class=\\\"datagrid-htable\\\" border=\\\"0\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"><tbody></tbody></table>\").appendTo(_75c);\nfor(var i=0;i<_75d.length;i++){\nvar tr=$(\"<tr class=\\\"datagrid-header-row\\\"></tr>\").appendTo($(\"tbody\",t));\nvar cols=_75d[i];\nfor(var j=0;j<cols.length;j++){\nvar col=cols[j];\nvar attr=\"\";\nif(col.rowspan){\nattr+=\"rowspan=\\\"\"+col.rowspan+\"\\\" \";\n}\nif(col.colspan){\nattr+=\"colspan=\\\"\"+col.colspan+\"\\\" \";\nif(!col.id){\ncol.id=[\"datagrid-td-group\"+_707,i,j].join(\"-\");\n}\n}\nif(col.id){\nattr+=\"id=\\\"\"+col.id+\"\\\"\";\n}\nvar td=$(\"<td \"+attr+\"></td>\").appendTo(tr);\nif(col.checkbox){\ntd.attr(\"field\",col.field);\n$(\"<div class=\\\"datagrid-header-check\\\"></div>\").html(\"<input type=\\\"checkbox\\\"/>\").appendTo(td);\n}else{\nif(col.field){\ntd.attr(\"field\",col.field);\ntd.append(\"<div class=\\\"datagrid-cell\\\"><span></span><span class=\\\"datagrid-sort-icon\\\"></span></div>\");\ntd.find(\"span:first\").html(col.title);\nvar cell=td.find(\"div.datagrid-cell\");\nvar pos=_708(_760,col.field);\nif(pos>=0){\ncell.addClass(\"datagrid-sort-\"+_761[pos]);\n}\nif(col.sortable){\ncell.addClass(\"datagrid-sort\");\n}\nif(col.resizable==false){\ncell.attr(\"resizable\",\"false\");\n}\nif(col.width){\nvar _763=$.parser.parseValue(\"width\",col.width,dc.view,opts.scrollbarSize+(opts.rownumbers?opts.rownumberWidth:0));\ncol.deltaWidth=_75f;\ncol.boxWidth=_763-_75f;\n}else{\ncol.auto=true;\n}\ncell.css(\"text-align\",(col.halign||col.align||\"\"));\ncol.cellClass=_752.cellClassPrefix+\"-\"+col.field.replace(/[\\.|\\s]/g,\"-\");\ncell.addClass(col.cellClass);\n}else{\n$(\"<div class=\\\"datagrid-cell-group\\\"></div>\").html(col.title).appendTo(td);\n}\n}\nif(col.hidden){\ntd.hide();\n_762.push(col.field);\n}\n}\n}\nif(_75e&&opts.rownumbers){\nvar td=$(\"<td rowspan=\\\"\"+opts.frozenColumns.length+\"\\\"><div class=\\\"datagrid-header-rownumber\\\"></div></td>\");\nif($(\"tr\",t).length==0){\ntd.wrap(\"<tr class=\\\"datagrid-header-row\\\"></tr>\").parent().appendTo($(\"tbody\",t));\n}else{\ntd.prependTo($(\"tr:first\",t));\n}\n}\nfor(var i=0;i<_762.length;i++){\n_7a5(_751,_762[i],-1);\n}\n};\nfunction _758(){\nvar _764=[[\".datagrid-header-rownumber\",(opts.rownumberWidth-1)+\"px\"],[\".datagrid-cell-rownumber\",(opts.rownumberWidth-1)+\"px\"]];\nvar _765=_766(_751,true).concat(_766(_751));\nfor(var i=0;i<_765.length;i++){\nvar col=_767(_751,_765[i]);\nif(col&&!col.checkbox){\n_764.push([\".\"+col.cellClass,col.boxWidth?col.boxWidth+\"px\":\"auto\"]);\n}\n}\n_752.ss.add(_764);\n_752.ss.dirty(_752.cellSelectorPrefix);\n_752.cellSelectorPrefix=\".\"+_752.cellClassPrefix;\n};\n};\nfunction _768(_769){\nvar _76a=$.data(_769,\"datagrid\");\nvar _76b=_76a.panel;\nvar opts=_76a.options;\nvar dc=_76a.dc;\nvar _76c=dc.header1.add(dc.header2);\n_76c._unbind(\".datagrid\");\nfor(var _76d in opts.headerEvents){\n_76c._bind(_76d+\".datagrid\",opts.headerEvents[_76d]);\n}\nvar _76e=_76c.find(\"div.datagrid-cell\");\nvar _76f=opts.resizeHandle==\"right\"?\"e\":(opts.resizeHandle==\"left\"?\"w\":\"e,w\");\n_76e.each(function(){\n$(this).resizable({handles:_76f,edge:opts.resizeEdge,disabled:($(this).attr(\"resizable\")?$(this).attr(\"resizable\")==\"false\":false),minWidth:25,onStartResize:function(e){\n_76a.resizing=true;\n_76c.css(\"cursor\",$(\"body\").css(\"cursor\"));\nif(!_76a.proxy){\n_76a.proxy=$(\"<div class=\\\"datagrid-resize-proxy\\\"></div>\").appendTo(dc.view);\n}\nif(e.data.dir==\"e\"){\ne.data.deltaEdge=$(this)._outerWidth()-(e.pageX-$(this).offset().left);\n}else{\ne.data.deltaEdge=$(this).offset().left-e.pageX-1;\n}\n_76a.proxy.css({left:e.pageX-$(_76b).offset().left-1+e.data.deltaEdge,display:\"none\"});\nsetTimeout(function(){\nif(_76a.proxy){\n_76a.proxy.show();\n}\n},500);\n},onResize:function(e){\n_76a.proxy.css({left:e.pageX-$(_76b).offset().left-1+e.data.deltaEdge,display:\"block\"});\nreturn false;\n},onStopResize:function(e){\n_76c.css(\"cursor\",\"\");\n$(this).css(\"height\",\"\");\nvar _770=$(this).parent().attr(\"field\");\nvar col=_767(_769,_770);\ncol.width=$(this)._outerWidth()+1;\ncol.boxWidth=col.width-col.deltaWidth;\ncol.auto=undefined;\n$(this).css(\"width\",\"\");\n$(_769).datagrid(\"fixColumnSize\",_770);\n_76a.proxy.remove();\n_76a.proxy=null;\nif($(this).parents(\"div:first.datagrid-header\").parent().hasClass(\"datagrid-view1\")){\n_721(_769);\n}\n$(_769).datagrid(\"fitColumns\");\nopts.onResizeColumn.call(_769,_770,col.width);\nsetTimeout(function(){\n_76a.resizing=false;\n},0);\n}});\n});\nvar bb=dc.body1.add(dc.body2);\nbb._unbind();\nfor(var _76d in opts.rowEvents){\nbb._bind(_76d,opts.rowEvents[_76d]);\n}\ndc.body1._bind(\"mousewheel DOMMouseScroll MozMousePixelScroll\",function(e){\ne.preventDefault();\nvar e1=e.originalEvent||window.event;\nvar _771=e1.wheelDelta||e1.detail*(-1);\nif(\"deltaY\" in e1){\n_771=e1.deltaY*-1;\n}\nvar dg=$(e.target).closest(\"div.datagrid-view\").children(\".datagrid-f\");\nvar dc=dg.data(\"datagrid\").dc;\ndc.body2.scrollTop(dc.body2.scrollTop()-_771);\n});\ndc.body2._bind(\"scroll\",function(){\nvar b1=dc.view1.children(\"div.datagrid-body\");\nvar stv=$(this).scrollTop();\n$(this).scrollTop(stv);\nb1.scrollTop(stv);\nvar c1=dc.body1.children(\":first\");\nvar c2=dc.body2.children(\":first\");\nif(c1.length&&c2.length){\nvar top1=c1.offset().top;\nvar top2=c2.offset().top;\nif(top1!=top2){\nb1.scrollTop(b1.scrollTop()+top1-top2);\n}\n}\ndc.view2.children(\"div.datagrid-header,div.datagrid-footer\")._scrollLeft($(this)._scrollLeft());\ndc.body2.children(\"table.datagrid-btable-frozen\").css(\"left\",-$(this)._scrollLeft());\n});\n};\nfunction _772(_773){\nreturn function(e){\nvar td=$(e.target).closest(\"td[field]\");\nif(td.length){\nvar _774=_775(td);\nif(!$(_774).data(\"datagrid\").resizing&&_773){\ntd.addClass(\"datagrid-header-over\");\n}else{\ntd.removeClass(\"datagrid-header-over\");\n}\n}\n};\n};\nfunction _776(e){\nvar _777=_775(e.target);\nvar opts=$(_777).datagrid(\"options\");\nvar ck=$(e.target).closest(\"input[type=checkbox]\");\nif(ck.length){\nif(opts.singleSelect&&opts.selectOnCheck){\nreturn false;\n}\nif(ck.is(\":checked\")){\n_778(_777);\n}else{\n_779(_777);\n}\ne.stopPropagation();\n}else{\nvar cell=$(e.target).closest(\".datagrid-cell\");\nif(cell.length){\nvar p1=cell.offset().left+5;\nvar p2=cell.offset().left+cell._outerWidth()-5;\nif(e.pageX<p2&&e.pageX>p1){\n_77a(_777,cell.parent().attr(\"field\"));\n}\n}\n}\n};\nfunction _77b(e){\nvar _77c=_775(e.target);\nvar opts=$(_77c).datagrid(\"options\");\nvar cell=$(e.target).closest(\".datagrid-cell\");\nif(cell.length){\nvar p1=cell.offset().left+5;\nvar p2=cell.offset().left+cell._outerWidth()-5;\nvar cond=opts.resizeHandle==\"right\"?(e.pageX>p2):(opts.resizeHandle==\"left\"?(e.pageX<p1):(e.pageX<p1||e.pageX>p2));\nif(cond){\nvar _77d=cell.parent().attr(\"field\");\nvar col=_767(_77c,_77d);\nif(col.resizable==false){\nreturn;\n}\n$(_77c).datagrid(\"autoSizeColumn\",_77d);\ncol.auto=false;\n}\n}\n};\nfunction _77e(e){\nvar _77f=_775(e.target);\nvar opts=$(_77f).datagrid(\"options\");\nvar td=$(e.target).closest(\"td[field]\");\nopts.onHeaderContextMenu.call(_77f,e,td.attr(\"field\"));\n};\nfunction _780(_781){\nreturn function(e){\nvar tr=_782(e.target);\nif(!tr){\nreturn;\n}\nvar _783=_775(tr);\nif($.data(_783,\"datagrid\").resizing){\nreturn;\n}\nvar _784=_785(tr);\nif(_781){\n_786(_783,_784);\n}else{\nvar opts=$.data(_783,\"datagrid\").options;\nopts.finder.getTr(_783,_784).removeClass(\"datagrid-row-over\");\n}\n};\n};\nfunction _787(e){\nvar tr=_782(e.target);\nif(!tr){\nreturn;\n}\nvar _788=_775(tr);\nvar opts=$.data(_788,\"datagrid\").options;\nvar _789=_785(tr);\nvar tt=$(e.target);\nif(tt.parent().hasClass(\"datagrid-cell-check\")){\nif(opts.singleSelect&&opts.selectOnCheck){\ntt._propAttr(\"checked\",!tt.is(\":checked\"));\n_78a(_788,_789);\n}else{\nif(tt.is(\":checked\")){\ntt._propAttr(\"checked\",false);\n_78a(_788,_789);\n}else{\ntt._propAttr(\"checked\",true);\n_78b(_788,_789);\n}\n}\n}else{\nvar row=opts.finder.getRow(_788,_789);\nvar td=tt.closest(\"td[field]\",tr);\nif(td.length){\nvar _78c=td.attr(\"field\");\nopts.onClickCell.call(_788,_789,_78c,row[_78c]);\n}\nif(opts.singleSelect==true){\n_78d(_788,_789);\n}else{\nif(opts.ctrlSelect){\nif(e.metaKey||e.ctrlKey){\nif(tr.hasClass(\"datagrid-row-selected\")){\n_78e(_788,_789);\n}else{\n_78d(_788,_789);\n}\n}else{\nif(e.shiftKey){\n$(_788).datagrid(\"clearSelections\");\nvar _78f=Math.min(opts.lastSelectedIndex||0,_789);\nvar _790=Math.max(opts.lastSelectedIndex||0,_789);\nfor(var i=_78f;i<=_790;i++){\n_78d(_788,i);\n}\n}else{\n$(_788).datagrid(\"clearSelections\");\n_78d(_788,_789);\nopts.lastSelectedIndex=_789;\n}\n}\n}else{\nif(tr.hasClass(\"datagrid-row-selected\")){\n_78e(_788,_789);\n}else{\n_78d(_788,_789);\n}\n}\n}\nopts.onClickRow.apply(_788,_70b(_788,[_789,row]));\n}\n};\nfunction _791(e){\nvar tr=_782(e.target);\nif(!tr){\nreturn;\n}\nvar _792=_775(tr);\nvar opts=$.data(_792,\"datagrid\").options;\nvar _793=_785(tr);\nvar row=opts.finder.getRow(_792,_793);\nvar td=$(e.target).closest(\"td[field]\",tr);\nif(td.length){\nvar _794=td.attr(\"field\");\nopts.onDblClickCell.call(_792,_793,_794,row[_794]);\n}\nopts.onDblClickRow.apply(_792,_70b(_792,[_793,row]));\n};\nfunction _795(e){\nvar tr=_782(e.target);\nif(tr){\nvar _796=_775(tr);\nvar opts=$.data(_796,\"datagrid\").options;\nvar _797=_785(tr);\nvar row=opts.finder.getRow(_796,_797);\nopts.onRowContextMenu.call(_796,e,_797,row);\n}else{\nvar body=_782(e.target,\".datagrid-body\");\nif(body){\nvar _796=_775(body);\nvar opts=$.data(_796,\"datagrid\").options;\nopts.onRowContextMenu.call(_796,e,-1,null);\n}\n}\n};\nfunction _775(t){\nreturn $(t).closest(\"div.datagrid-view\").children(\".datagrid-f\")[0];\n};\nfunction _782(t,_798){\nvar tr=$(t).closest(_798||\"tr.datagrid-row\");\nif(tr.length&&tr.parent().length){\nreturn tr;\n}else{\nreturn undefined;\n}\n};\nfunction _785(tr){\nif(tr.attr(\"datagrid-row-index\")){\nreturn parseInt(tr.attr(\"datagrid-row-index\"));\n}else{\nreturn tr.attr(\"node-id\");\n}\n};\nfunction _77a(_799,_79a){\nvar _79b=$.data(_799,\"datagrid\");\nvar opts=_79b.options;\n_79a=_79a||{};\nvar _79c={sortName:opts.sortName,sortOrder:opts.sortOrder};\nif(typeof _79a==\"object\"){\n$.extend(_79c,_79a);\n}\nvar _79d=[];\nvar _79e=[];\nif(_79c.sortName){\n_79d=_79c.sortName.split(\",\");\n_79e=_79c.sortOrder.split(\",\");\n}\nif(typeof _79a==\"string\"){\nvar _79f=_79a;\nvar col=_767(_799,_79f);\nif(!col.sortable||_79b.resizing){\nreturn;\n}\nvar _7a0=col.order||\"asc\";\nvar pos=_708(_79d,_79f);\nif(pos>=0){\nvar _7a1=_79e[pos]==\"asc\"?\"desc\":\"asc\";\nif(opts.multiSort&&_7a1==_7a0){\n_79d.splice(pos,1);\n_79e.splice(pos,1);\n}else{\n_79e[pos]=_7a1;\n}\n}else{\nif(opts.multiSort){\n_79d.push(_79f);\n_79e.push(_7a0);\n}else{\n_79d=[_79f];\n_79e=[_7a0];\n}\n}\n_79c.sortName=_79d.join(\",\");\n_79c.sortOrder=_79e.join(\",\");\n}\nif(opts.onBeforeSortColumn.call(_799,_79c.sortName,_79c.sortOrder)==false){\nreturn;\n}\n$.extend(opts,_79c);\nvar dc=_79b.dc;\nvar _7a2=dc.header1.add(dc.header2);\n_7a2.find(\"div.datagrid-cell\").removeClass(\"datagrid-sort-asc datagrid-sort-desc\");\nfor(var i=0;i<_79d.length;i++){\nvar col=_767(_799,_79d[i]);\n_7a2.find(\"div.\"+col.cellClass).addClass(\"datagrid-sort-\"+_79e[i]);\n}\nif(opts.remoteSort){\n_7a3(_799);\n}else{\n_7a4(_799,$(_799).datagrid(\"getData\"));\n}\nopts.onSortColumn.call(_799,opts.sortName,opts.sortOrder);\n};\nfunction _7a5(_7a6,_7a7,_7a8){\n_7a9(true);\n_7a9(false);\nfunction _7a9(_7aa){\nvar aa=_7ab(_7a6,_7aa);\nif(aa.length){\nvar _7ac=aa[aa.length-1];\nvar _7ad=_708(_7ac,_7a7);\nif(_7ad>=0){\nfor(var _7ae=0;_7ae<aa.length-1;_7ae++){\nvar td=$(\"#\"+aa[_7ae][_7ad]);\nvar _7af=parseInt(td.attr(\"colspan\")||1)+(_7a8||0);\ntd.attr(\"colspan\",_7af);\nif(_7af){\ntd.show();\n}else{\ntd.hide();\n}\n}\n}\n}\n};\n};\nfunction _7b0(_7b1){\nvar _7b2=$.data(_7b1,\"datagrid\");\nvar opts=_7b2.options;\nvar dc=_7b2.dc;\nvar _7b3=dc.view2.children(\"div.datagrid-header\");\nvar _7b4=_7b3.children(\"div.datagrid-header-inner\");\ndc.body2.css(\"overflow-x\",\"\");\n_7b5();\n_7b6();\n_7b7();\n_7b5(true);\n_7b4.show();\nif(_7b3.width()>=_7b3.find(\"table\").width()){\ndc.body2.css(\"overflow-x\",\"hidden\");\n}\nif(!opts.showHeader){\n_7b4.hide();\n}\nfunction _7b7(){\nif(!opts.fitColumns){\nreturn;\n}\nif(!_7b2.leftWidth){\n_7b2.leftWidth=0;\n}\nvar _7b8=0;\nvar cc=[];\nvar _7b9=_766(_7b1,false);\nfor(var i=0;i<_7b9.length;i++){\nvar col=_767(_7b1,_7b9[i]);\nif(_7ba(col)){\n_7b8+=col.width;\ncc.push({field:col.field,col:col,addingWidth:0});\n}\n}\nif(!_7b8){\nreturn;\n}\ncc[cc.length-1].addingWidth-=_7b2.leftWidth;\n_7b4.show();\nvar _7bb=_7b3.width()-_7b3.find(\"table\").width()-opts.scrollbarSize+_7b2.leftWidth;\nvar rate=_7bb/_7b8;\nif(!opts.showHeader){\n_7b4.hide();\n}\nfor(var i=0;i<cc.length;i++){\nvar c=cc[i];\nvar _7bc=parseInt(c.col.width*rate);\nc.addingWidth+=_7bc;\n_7bb-=_7bc;\n}\ncc[cc.length-1].addingWidth+=_7bb;\nfor(var i=0;i<cc.length;i++){\nvar c=cc[i];\nif(c.col.boxWidth+c.addingWidth>0){\nc.col.boxWidth+=c.addingWidth;\nc.col.width+=c.addingWidth;\n}\n}\n_7b2.leftWidth=_7bb;\n$(_7b1).datagrid(\"fixColumnSize\");\n};\nfunction _7b6(){\nvar _7bd=false;\nvar _7be=_766(_7b1,true).concat(_766(_7b1,false));\n$.map(_7be,function(_7bf){\nvar col=_767(_7b1,_7bf);\nif(String(col.width||\"\").indexOf(\"%\")>=0){\nvar _7c0=$.parser.parseValue(\"width\",col.width,dc.view,opts.scrollbarSize+(opts.rownumbers?opts.rownumberWidth:0))-col.deltaWidth;\nif(_7c0>0){\ncol.boxWidth=_7c0;\n_7bd=true;\n}\n}\n});\nif(_7bd){\n$(_7b1).datagrid(\"fixColumnSize\");\n}\n};\nfunction _7b5(fit){\nvar _7c1=dc.header1.add(dc.header2).find(\".datagrid-cell-group\");\nif(_7c1.length){\n_7c1.each(function(){\n$(this)._outerWidth(fit?$(this).parent().width():10);\n});\nif(fit){\n_721(_7b1);\n}\n}\n};\nfunction _7ba(col){\nif(String(col.width||\"\").indexOf(\"%\")>=0){\nreturn false;\n}\nif(!col.hidden&&!col.checkbox&&!col.auto&&!col.fixed){\nreturn true;\n}\n};\n};\nfunction _7c2(_7c3,_7c4){\nvar _7c5=$.data(_7c3,\"datagrid\");\nvar opts=_7c5.options;\nvar dc=_7c5.dc;\nvar tmp=$(\"<div class=\\\"datagrid-cell\\\" style=\\\"position:absolute;left:-9999px\\\"></div>\").appendTo(\"body\");\nif(_7c4){\n_71c(_7c4);\n$(_7c3).datagrid(\"fitColumns\");\n}else{\nvar _7c6=false;\nvar _7c7=_766(_7c3,true).concat(_766(_7c3,false));\nfor(var i=0;i<_7c7.length;i++){\nvar _7c4=_7c7[i];\nvar col=_767(_7c3,_7c4);\nif(col.auto){\n_71c(_7c4);\n_7c6=true;\n}\n}\nif(_7c6){\n$(_7c3).datagrid(\"fitColumns\");\n}\n}\ntmp.remove();\nfunction _71c(_7c8){\nvar _7c9=dc.view.find(\"div.datagrid-header td[field=\\\"\"+_7c8+\"\\\"] div.datagrid-cell\");\n_7c9.css(\"width\",\"\");\nvar col=$(_7c3).datagrid(\"getColumnOption\",_7c8);\ncol.width=undefined;\ncol.boxWidth=undefined;\ncol.auto=true;\n$(_7c3).datagrid(\"fixColumnSize\",_7c8);\nvar _7ca=Math.max(_7cb(\"header\"),_7cb(\"allbody\"),_7cb(\"allfooter\"))+1;\n_7c9._outerWidth(_7ca-1);\ncol.width=_7ca;\ncol.boxWidth=parseInt(_7c9[0].style.width);\ncol.deltaWidth=_7ca-col.boxWidth;\n_7c9.css(\"width\",\"\");\n$(_7c3).datagrid(\"fixColumnSize\",_7c8);\nopts.onResizeColumn.call(_7c3,_7c8,col.width);\nfunction _7cb(type){\nvar _7cc=0;\nif(type==\"header\"){\n_7cc=_7cd(_7c9);\n}else{\nopts.finder.getTr(_7c3,0,type).find(\"td[field=\\\"\"+_7c8+\"\\\"] div.datagrid-cell\").each(function(){\nvar w=_7cd($(this));\nif(_7cc<w){\n_7cc=w;\n}\n});\n}\nreturn _7cc;\nfunction _7cd(cell){\nreturn cell.is(\":visible\")?cell._outerWidth():tmp.html(cell.html())._outerWidth();\n};\n};\n};\n};\nfunction _7ce(_7cf,_7d0){\nvar _7d1=$.data(_7cf,\"datagrid\");\nvar opts=_7d1.options;\nvar dc=_7d1.dc;\nvar _7d2=dc.view.find(\"table.datagrid-btable,table.datagrid-ftable\");\n_7d2.css(\"table-layout\",\"fixed\");\nif(_7d0){\nfix(_7d0);\n}else{\nvar ff=_766(_7cf,true).concat(_766(_7cf,false));\nfor(var i=0;i<ff.length;i++){\nfix(ff[i]);\n}\n}\n_7d2.css(\"table-layout\",\"\");\n_7d3(_7cf);\n_732(_7cf);\n_7d4(_7cf);\nfunction fix(_7d5){\nvar col=_767(_7cf,_7d5);\nif(col.cellClass){\n_7d1.ss.set(\".\"+col.cellClass,col.boxWidth?col.boxWidth+\"px\":\"auto\");\n}\n};\n};\nfunction _7d3(_7d6,tds){\nvar dc=$.data(_7d6,\"datagrid\").dc;\ntds=tds||dc.view.find(\"td.datagrid-td-merged\");\ntds.each(function(){\nvar td=$(this);\nvar _7d7=td.attr(\"colspan\")||1;\nif(_7d7>1){\nvar col=_767(_7d6,td.attr(\"field\"));\nvar _7d8=col.boxWidth+col.deltaWidth-1;\nfor(var i=1;i<_7d7;i++){\ntd=td.next();\ncol=_767(_7d6,td.attr(\"field\"));\n_7d8+=col.boxWidth+col.deltaWidth;\n}\n$(this).children(\"div.datagrid-cell\")._outerWidth(_7d8);\n}\n});\n};\nfunction _7d4(_7d9){\nvar dc=$.data(_7d9,\"datagrid\").dc;\ndc.view.find(\"div.datagrid-editable\").each(function(){\nvar cell=$(this);\nvar _7da=cell.parent().attr(\"field\");\nvar col=$(_7d9).datagrid(\"getColumnOption\",_7da);\ncell._outerWidth(col.boxWidth+col.deltaWidth-1);\nvar ed=$.data(this,\"datagrid.editor\");\nif(ed.actions.resize){\ned.actions.resize(ed.target,cell.width());\n}\n});\n};\nfunction _767(_7db,_7dc){\nfunction find(_7dd){\nif(_7dd){\nfor(var i=0;i<_7dd.length;i++){\nvar cc=_7dd[i];\nfor(var j=0;j<cc.length;j++){\nvar c=cc[j];\nif(c.field==_7dc){\nreturn c;\n}\n}\n}\n}\nreturn null;\n};\nvar opts=$.data(_7db,\"datagrid\").options;\nvar col=find(opts.columns);\nif(!col){\ncol=find(opts.frozenColumns);\n}\nreturn col;\n};\nfunction _7ab(_7de,_7df){\nvar opts=$.data(_7de,\"datagrid\").options;\nvar _7e0=_7df?opts.frozenColumns:opts.columns;\nvar aa=[];\nvar _7e1=_7e2();\nfor(var i=0;i<_7e0.length;i++){\naa[i]=new Array(_7e1);\n}\nfor(var _7e3=0;_7e3<_7e0.length;_7e3++){\n$.map(_7e0[_7e3],function(col){\nvar _7e4=_7e5(aa[_7e3]);\nif(_7e4>=0){\nvar _7e6=col.field||col.id||\"\";\nfor(var c=0;c<(col.colspan||1);c++){\nfor(var r=0;r<(col.rowspan||1);r++){\naa[_7e3+r][_7e4]=_7e6;\n}\n_7e4++;\n}\n}\n});\n}\nreturn aa;\nfunction _7e2(){\nvar _7e7=0;\n$.map(_7e0[0]||[],function(col){\n_7e7+=col.colspan||1;\n});\nreturn _7e7;\n};\nfunction _7e5(a){\nfor(var i=0;i<a.length;i++){\nif(a[i]==undefined){\nreturn i;\n}\n}\nreturn -1;\n};\n};\nfunction _766(_7e8,_7e9){\nvar aa=_7ab(_7e8,_7e9);\nreturn aa.length?aa[aa.length-1]:aa;\n};\nfunction _7a4(_7ea,data){\nvar _7eb=$.data(_7ea,\"datagrid\");\nvar opts=_7eb.options;\nvar dc=_7eb.dc;\ndata=opts.loadFilter.call(_7ea,data);\nif($.isArray(data)){\ndata={total:data.length,rows:data};\n}\ndata.total=parseInt(data.total);\n_7eb.data=data;\nif(data.footer){\n_7eb.footer=data.footer;\n}\nif(!opts.remoteSort&&opts.sortName){\nvar _7ec=opts.sortName.split(\",\");\nvar _7ed=opts.sortOrder.split(\",\");\ndata.rows.sort(function(r1,r2){\nvar r=0;\nfor(var i=0;i<_7ec.length;i++){\nvar sn=_7ec[i];\nvar so=_7ed[i];\nvar col=_767(_7ea,sn);\nvar _7ee=col.sorter||function(a,b){\nreturn a==b?0:(a>b?1:-1);\n};\nr=_7ee(r1[sn],r2[sn],r1,r2)*(so==\"asc\"?1:-1);\nif(r!=0){\nreturn r;\n}\n}\nreturn r;\n});\n}\nif(opts.view.onBeforeRender){\nopts.view.onBeforeRender.call(opts.view,_7ea,data.rows);\n}\nopts.view.render.call(opts.view,_7ea,dc.body2,false);\nopts.view.render.call(opts.view,_7ea,dc.body1,true);\nif(opts.showFooter){\nopts.view.renderFooter.call(opts.view,_7ea,dc.footer2,false);\nopts.view.renderFooter.call(opts.view,_7ea,dc.footer1,true);\n}\nif(opts.view.onAfterRender){\nopts.view.onAfterRender.call(opts.view,_7ea);\n}\n_7eb.ss.clean();\nvar _7ef=$(_7ea).datagrid(\"getPager\");\nif(_7ef.length){\nvar _7f0=_7ef.pagination(\"options\");\nif(_7f0.total!=data.total){\n_7ef.pagination(\"refresh\",{pageNumber:opts.pageNumber,total:data.total});\nif(opts.pageNumber!=_7f0.pageNumber&&_7f0.pageNumber>0){\nopts.pageNumber=_7f0.pageNumber;\n_7a3(_7ea);\n}\n}\n}\n_732(_7ea);\ndc.body2.triggerHandler(\"scroll\");\n$(_7ea).datagrid(\"setSelectionState\");\n$(_7ea).datagrid(\"autoSizeColumn\");\nopts.onLoadSuccess.call(_7ea,data);\n};\nfunction _7f1(_7f2){\nvar _7f3=$.data(_7f2,\"datagrid\");\nvar opts=_7f3.options;\nvar dc=_7f3.dc;\ndc.header1.add(dc.header2).find(\"input[type=checkbox]\")._propAttr(\"checked\",false);\nif(opts.idField){\nvar _7f4=$.data(_7f2,\"treegrid\")?true:false;\nvar _7f5=opts.onSelect;\nvar _7f6=opts.onCheck;\nopts.onSelect=opts.onCheck=function(){\n};\nvar rows=opts.finder.getRows(_7f2);\nfor(var i=0;i<rows.length;i++){\nvar row=rows[i];\nvar _7f7=_7f4?row[opts.idField]:$(_7f2).datagrid(\"getRowIndex\",row[opts.idField]);\nif(_7f8(_7f3.selectedRows,row)){\n_78d(_7f2,_7f7,true,true);\n}\nif(_7f8(_7f3.checkedRows,row)){\n_78a(_7f2,_7f7,true);\n}\n}\nopts.onSelect=_7f5;\nopts.onCheck=_7f6;\n}\nfunction _7f8(a,r){\nfor(var i=0;i<a.length;i++){\nif(a[i][opts.idField]==r[opts.idField]){\na[i]=r;\nreturn true;\n}\n}\nreturn false;\n};\n};\nfunction _7f9(_7fa,row){\nvar _7fb=$.data(_7fa,\"datagrid\");\nvar opts=_7fb.options;\nvar rows=_7fb.data.rows;\nif(typeof row==\"object\"){\nreturn _708(rows,row);\n}else{\nfor(var i=0;i<rows.length;i++){\nif(rows[i][opts.idField]==row){\nreturn i;\n}\n}\nreturn -1;\n}\n};\nfunction _7fc(_7fd){\nvar _7fe=$.data(_7fd,\"datagrid\");\nvar opts=_7fe.options;\nvar data=_7fe.data;\nif(opts.idField){\nreturn _7fe.selectedRows;\n}else{\nvar rows=[];\nopts.finder.getTr(_7fd,\"\",\"selected\",2).each(function(){\nrows.push(opts.finder.getRow(_7fd,$(this)));\n});\nreturn rows;\n}\n};\nfunction _7ff(_800){\nvar _801=$.data(_800,\"datagrid\");\nvar opts=_801.options;\nif(opts.idField){\nreturn _801.checkedRows;\n}else{\nvar rows=[];\nopts.finder.getTr(_800,\"\",\"checked\",2).each(function(){\nrows.push(opts.finder.getRow(_800,$(this)));\n});\nreturn rows;\n}\n};\nfunction _802(_803,_804){\nvar _805=$.data(_803,\"datagrid\");\nvar dc=_805.dc;\nvar opts=_805.options;\nvar tr=opts.finder.getTr(_803,_804);\nif(tr.length){\nif(tr.closest(\"table\").hasClass(\"datagrid-btable-frozen\")){\nreturn;\n}\nvar _806=dc.view2.children(\"div.datagrid-header\")._outerHeight();\nvar _807=dc.body2;\nvar _808=opts.scrollbarSize;\nif(_807[0].offsetHeight&&_807[0].clientHeight&&_807[0].offsetHeight<=_807[0].clientHeight){\n_808=0;\n}\nvar _809=_807.outerHeight(true)-_807.outerHeight();\nvar top=tr.offset().top-dc.view2.offset().top-_806-_809;\nif(top<0){\n_807.scrollTop(_807.scrollTop()+top);\n}else{\nif(top+tr._outerHeight()>_807.height()-_808){\n_807.scrollTop(_807.scrollTop()+top+tr._outerHeight()-_807.height()+_808);\n}\n}\n}\n};\nfunction _786(_80a,_80b){\nvar _80c=$.data(_80a,\"datagrid\");\nvar opts=_80c.options;\nopts.finder.getTr(_80a,_80c.highlightIndex).removeClass(\"datagrid-row-over\");\nopts.finder.getTr(_80a,_80b).addClass(\"datagrid-row-over\");\n_80c.highlightIndex=_80b;\n};\nfunction _78d(_80d,_80e,_80f,_810){\nvar _811=$.data(_80d,\"datagrid\");\nvar opts=_811.options;\nvar row=opts.finder.getRow(_80d,_80e);\nif(!row){\nreturn;\n}\nif(opts.onBeforeSelect.apply(_80d,_70b(_80d,[_80e,row]))==false){\nreturn;\n}\nif(opts.singleSelect){\n_812(_80d,true);\n_811.selectedRows=[];\n}\nif(!_80f&&opts.checkOnSelect){\n_78a(_80d,_80e,true);\n}\nif(opts.idField){\n_70a(_811.selectedRows,opts.idField,row);\n}\nopts.finder.getTr(_80d,_80e).addClass(\"datagrid-row-selected\");\nopts.onSelect.apply(_80d,_70b(_80d,[_80e,row]));\nif(!_810&&opts.scrollOnSelect){\n_802(_80d,_80e);\n}\n};\nfunction _78e(_813,_814,_815){\nvar _816=$.data(_813,\"datagrid\");\nvar dc=_816.dc;\nvar opts=_816.options;\nvar row=opts.finder.getRow(_813,_814);\nif(!row){\nreturn;\n}\nif(opts.onBeforeUnselect.apply(_813,_70b(_813,[_814,row]))==false){\nreturn;\n}\nif(!_815&&opts.checkOnSelect){\n_78b(_813,_814,true);\n}\nopts.finder.getTr(_813,_814).removeClass(\"datagrid-row-selected\");\nif(opts.idField){\n_709(_816.selectedRows,opts.idField,row[opts.idField]);\n}\nopts.onUnselect.apply(_813,_70b(_813,[_814,row]));\n};\nfunction _817(_818,_819){\nvar _81a=$.data(_818,\"datagrid\");\nvar opts=_81a.options;\nvar rows=opts.finder.getRows(_818);\nvar _81b=$.data(_818,\"datagrid\").selectedRows;\nif(!_819&&opts.checkOnSelect){\n_778(_818,true);\n}\nopts.finder.getTr(_818,\"\",\"allbody\").addClass(\"datagrid-row-selected\");\nif(opts.idField){\nfor(var _81c=0;_81c<rows.length;_81c++){\n_70a(_81b,opts.idField,rows[_81c]);\n}\n}\nopts.onSelectAll.call(_818,rows);\n};\nfunction _812(_81d,_81e){\nvar _81f=$.data(_81d,\"datagrid\");\nvar opts=_81f.options;\nvar rows=opts.finder.getRows(_81d);\nvar _820=$.data(_81d,\"datagrid\").selectedRows;\nif(!_81e&&opts.checkOnSelect){\n_779(_81d,true);\n}\nopts.finder.getTr(_81d,\"\",\"selected\").removeClass(\"datagrid-row-selected\");\nif(opts.idField){\nfor(var _821=0;_821<rows.length;_821++){\n_709(_820,opts.idField,rows[_821][opts.idField]);\n}\n}\nopts.onUnselectAll.call(_81d,rows);\n};\nfunction _78a(_822,_823,_824){\nvar _825=$.data(_822,\"datagrid\");\nvar opts=_825.options;\nvar row=opts.finder.getRow(_822,_823);\nif(!row){\nreturn;\n}\nif(opts.onBeforeCheck.apply(_822,_70b(_822,[_823,row]))==false){\nreturn;\n}\nif(opts.singleSelect&&opts.selectOnCheck){\n_779(_822,true);\n_825.checkedRows=[];\n}\nif(!_824&&opts.selectOnCheck){\n_78d(_822,_823,true);\n}\nvar tr=opts.finder.getTr(_822,_823).addClass(\"datagrid-row-checked\");\ntr.find(\"div.datagrid-cell-check input[type=checkbox]\")._propAttr(\"checked\",true);\ntr=opts.finder.getTr(_822,\"\",\"checked\",2);\nif(tr.length==opts.finder.getRows(_822).length){\nvar dc=_825.dc;\ndc.header1.add(dc.header2).find(\"input[type=checkbox]\")._propAttr(\"checked\",true);\n}\nif(opts.idField){\n_70a(_825.checkedRows,opts.idField,row);\n}\nopts.onCheck.apply(_822,_70b(_822,[_823,row]));\n};\nfunction _78b(_826,_827,_828){\nvar _829=$.data(_826,\"datagrid\");\nvar opts=_829.options;\nvar row=opts.finder.getRow(_826,_827);\nif(!row){\nreturn;\n}\nif(opts.onBeforeUncheck.apply(_826,_70b(_826,[_827,row]))==false){\nreturn;\n}\nif(!_828&&opts.selectOnCheck){\n_78e(_826,_827,true);\n}\nvar tr=opts.finder.getTr(_826,_827).removeClass(\"datagrid-row-checked\");\ntr.find(\"div.datagrid-cell-check input[type=checkbox]\")._propAttr(\"checked\",false);\nvar dc=_829.dc;\nvar _82a=dc.header1.add(dc.header2);\n_82a.find(\"input[type=checkbox]\")._propAttr(\"checked\",false);\nif(opts.idField){\n_709(_829.checkedRows,opts.idField,row[opts.idField]);\n}\nopts.onUncheck.apply(_826,_70b(_826,[_827,row]));\n};\nfunction _778(_82b,_82c){\nvar _82d=$.data(_82b,\"datagrid\");\nvar opts=_82d.options;\nvar rows=opts.finder.getRows(_82b);\nif(!_82c&&opts.selectOnCheck){\n_817(_82b,true);\n}\nvar dc=_82d.dc;\nvar hck=dc.header1.add(dc.header2).find(\"input[type=checkbox]\");\nvar bck=opts.finder.getTr(_82b,\"\",\"allbody\").addClass(\"datagrid-row-checked\").find(\"div.datagrid-cell-check input[type=checkbox]\");\nhck.add(bck)._propAttr(\"checked\",true);\nif(opts.idField){\nfor(var i=0;i<rows.length;i++){\n_70a(_82d.checkedRows,opts.idField,rows[i]);\n}\n}\nopts.onCheckAll.call(_82b,rows);\n};\nfunction _779(_82e,_82f){\nvar _830=$.data(_82e,\"datagrid\");\nvar opts=_830.options;\nvar rows=opts.finder.getRows(_82e);\nif(!_82f&&opts.selectOnCheck){\n_812(_82e,true);\n}\nvar dc=_830.dc;\nvar hck=dc.header1.add(dc.header2).find(\"input[type=checkbox]\");\nvar bck=opts.finder.getTr(_82e,\"\",\"checked\").removeClass(\"datagrid-row-checked\").find(\"div.datagrid-cell-check input[type=checkbox]\");\nhck.add(bck)._propAttr(\"checked\",false);\nif(opts.idField){\nfor(var i=0;i<rows.length;i++){\n_709(_830.checkedRows,opts.idField,rows[i][opts.idField]);\n}\n}\nopts.onUncheckAll.call(_82e,rows);\n};\nfunction _831(_832,_833){\nvar opts=$.data(_832,\"datagrid\").options;\nvar tr=opts.finder.getTr(_832,_833);\nvar row=opts.finder.getRow(_832,_833);\nif(tr.hasClass(\"datagrid-row-editing\")){\nreturn;\n}\nif(opts.onBeforeEdit.apply(_832,_70b(_832,[_833,row]))==false){\nreturn;\n}\ntr.addClass(\"datagrid-row-editing\");\n_834(_832,_833);\n_7d4(_832);\ntr.find(\"div.datagrid-editable\").each(function(){\nvar _835=$(this).parent().attr(\"field\");\nvar ed=$.data(this,\"datagrid.editor\");\ned.actions.setValue(ed.target,row[_835]);\n});\n_836(_832,_833);\nopts.onBeginEdit.apply(_832,_70b(_832,[_833,row]));\n};\nfunction _837(_838,_839,_83a){\nvar _83b=$.data(_838,\"datagrid\");\nvar opts=_83b.options;\nvar _83c=_83b.updatedRows;\nvar _83d=_83b.insertedRows;\nvar tr=opts.finder.getTr(_838,_839);\nvar row=opts.finder.getRow(_838,_839);\nif(!tr.hasClass(\"datagrid-row-editing\")){\nreturn;\n}\nif(!_83a){\nif(!_836(_838,_839)){\nreturn;\n}\nvar _83e=false;\nvar _83f={};\ntr.find(\"div.datagrid-editable\").each(function(){\nvar _840=$(this).parent().attr(\"field\");\nvar ed=$.data(this,\"datagrid.editor\");\nvar t=$(ed.target);\nvar _841=t.data(\"textbox\")?t.textbox(\"textbox\"):t;\nif(_841.is(\":focus\")){\n_841.triggerHandler(\"blur\");\n}\nvar _842=ed.actions.getValue(ed.target);\nif(row[_840]!==_842){\nrow[_840]=_842;\n_83e=true;\n_83f[_840]=_842;\n}\n});\nif(_83e){\nif(_708(_83d,row)==-1){\nif(_708(_83c,row)==-1){\n_83c.push(row);\n}\n}\n}\nopts.onEndEdit.apply(_838,_70b(_838,[_839,row,_83f]));\n}\ntr.removeClass(\"datagrid-row-editing\");\n_843(_838,_839);\n$(_838).datagrid(\"refreshRow\",_839);\nif(!_83a){\nopts.onAfterEdit.apply(_838,_70b(_838,[_839,row,_83f]));\n}else{\nopts.onCancelEdit.apply(_838,_70b(_838,[_839,row]));\n}\n};\nfunction _844(_845,_846){\nvar opts=$.data(_845,\"datagrid\").options;\nvar tr=opts.finder.getTr(_845,_846);\nvar _847=[];\ntr.children(\"td\").each(function(){\nvar cell=$(this).find(\"div.datagrid-editable\");\nif(cell.length){\nvar ed=$.data(cell[0],\"datagrid.editor\");\n_847.push(ed);\n}\n});\nreturn _847;\n};\nfunction _848(_849,_84a){\nvar _84b=_844(_849,_84a.index!=undefined?_84a.index:_84a.id);\nfor(var i=0;i<_84b.length;i++){\nif(_84b[i].field==_84a.field){\nreturn _84b[i];\n}\n}\nreturn null;\n};\nfunction _834(_84c,_84d){\nvar opts=$.data(_84c,\"datagrid\").options;\nvar tr=opts.finder.getTr(_84c,_84d);\ntr.children(\"td\").each(function(){\nvar cell=$(this).find(\"div.datagrid-cell\");\nvar _84e=$(this).attr(\"field\");\nvar col=_767(_84c,_84e);\nif(col&&col.editor){\nvar _84f,_850;\nif(typeof col.editor==\"string\"){\n_84f=col.editor;\n}else{\n_84f=col.editor.type;\n_850=col.editor.options;\n}\nvar _851=opts.editors[_84f];\nif(_851){\nvar _852=cell.html();\nvar _853=cell._outerWidth();\ncell.addClass(\"datagrid-editable\");\ncell._outerWidth(_853);\ncell.html(\"<table border=\\\"0\\\" cellspacing=\\\"0\\\" cellpadding=\\\"1\\\"><tr><td></td></tr></table>\");\ncell.children(\"table\")._bind(\"click dblclick contextmenu\",function(e){\ne.stopPropagation();\n});\n$.data(cell[0],\"datagrid.editor\",{actions:_851,target:_851.init(cell.find(\"td\"),$.extend({height:opts.editorHeight},_850)),field:_84e,type:_84f,oldHtml:_852});\n}\n}\n});\n_732(_84c,_84d,true);\n};\nfunction _843(_854,_855){\nvar opts=$.data(_854,\"datagrid\").options;\nvar tr=opts.finder.getTr(_854,_855);\ntr.children(\"td\").each(function(){\nvar cell=$(this).find(\"div.datagrid-editable\");\nif(cell.length){\nvar ed=$.data(cell[0],\"datagrid.editor\");\nif(ed.actions.destroy){\ned.actions.destroy(ed.target);\n}\ncell.html(ed.oldHtml);\n$.removeData(cell[0],\"datagrid.editor\");\ncell.removeClass(\"datagrid-editable\");\ncell.css(\"width\",\"\");\n}\n});\n};\nfunction _836(_856,_857){\nvar tr=$.data(_856,\"datagrid\").options.finder.getTr(_856,_857);\nif(!tr.hasClass(\"datagrid-row-editing\")){\nreturn true;\n}\nvar vbox=tr.find(\".validatebox-text\");\nvbox.validatebox(\"validate\");\nvbox.trigger(\"mouseleave\");\nvar _858=tr.find(\".validatebox-invalid\");\nreturn _858.length==0;\n};\nfunction _859(_85a,_85b){\nvar _85c=$.data(_85a,\"datagrid\").insertedRows;\nvar _85d=$.data(_85a,\"datagrid\").deletedRows;\nvar _85e=$.data(_85a,\"datagrid\").updatedRows;\nif(!_85b){\nvar rows=[];\nrows=rows.concat(_85c);\nrows=rows.concat(_85d);\nrows=rows.concat(_85e);\nreturn rows;\n}else{\nif(_85b==\"inserted\"){\nreturn _85c;\n}else{\nif(_85b==\"deleted\"){\nreturn _85d;\n}else{\nif(_85b==\"updated\"){\nreturn _85e;\n}\n}\n}\n}\nreturn [];\n};\nfunction _85f(_860,_861){\nvar _862=$.data(_860,\"datagrid\");\nvar opts=_862.options;\nvar data=_862.data;\nvar _863=_862.insertedRows;\nvar _864=_862.deletedRows;\n$(_860).datagrid(\"cancelEdit\",_861);\nvar row=opts.finder.getRow(_860,_861);\nif(_708(_863,row)>=0){\n_709(_863,row);\n}else{\n_864.push(row);\n}\n_709(_862.selectedRows,opts.idField,row[opts.idField]);\n_709(_862.checkedRows,opts.idField,row[opts.idField]);\nopts.view.deleteRow.call(opts.view,_860,_861);\nif(opts.height==\"auto\"){\n_732(_860);\n}\n$(_860).datagrid(\"getPager\").pagination(\"refresh\",{total:data.total});\n};\nfunction _865(_866,_867){\nvar data=$.data(_866,\"datagrid\").data;\nvar view=$.data(_866,\"datagrid\").options.view;\nvar _868=$.data(_866,\"datagrid\").insertedRows;\nview.insertRow.call(view,_866,_867.index,_867.row);\n_868.push(_867.row);\n$(_866).datagrid(\"getPager\").pagination(\"refresh\",{total:data.total});\n};\nfunction _869(_86a,row){\nvar data=$.data(_86a,\"datagrid\").data;\nvar view=$.data(_86a,\"datagrid\").options.view;\nvar _86b=$.data(_86a,\"datagrid\").insertedRows;\nview.insertRow.call(view,_86a,null,row);\n_86b.push(row);\n$(_86a).datagrid(\"getPager\").pagination(\"refresh\",{total:data.total});\n};\nfunction _86c(_86d,_86e){\nvar _86f=$.data(_86d,\"datagrid\");\nvar opts=_86f.options;\nvar row=opts.finder.getRow(_86d,_86e.index);\nvar _870=false;\n_86e.row=_86e.row||{};\nfor(var _871 in _86e.row){\nif(row[_871]!==_86e.row[_871]){\n_870=true;\nbreak;\n}\n}\nif(_870){\nif(_708(_86f.insertedRows,row)==-1){\nif(_708(_86f.updatedRows,row)==-1){\n_86f.updatedRows.push(row);\n}\n}\nopts.view.updateRow.call(opts.view,_86d,_86e.index,_86e.row);\n}\n};\nfunction _872(_873){\nvar _874=$.data(_873,\"datagrid\");\nvar data=_874.data;\nvar rows=data.rows;\nvar _875=[];\nfor(var i=0;i<rows.length;i++){\n_875.push($.extend({},rows[i]));\n}\n_874.originalRows=_875;\n_874.updatedRows=[];\n_874.insertedRows=[];\n_874.deletedRows=[];\n};\nfunction _876(_877){\nvar data=$.data(_877,\"datagrid\").data;\nvar ok=true;\nfor(var i=0,len=data.rows.length;i<len;i++){\nif(_836(_877,i)){\n$(_877).datagrid(\"endEdit\",i);\n}else{\nok=false;\n}\n}\nif(ok){\n_872(_877);\n}\n};\nfunction _878(_879){\nvar _87a=$.data(_879,\"datagrid\");\nvar opts=_87a.options;\nvar _87b=_87a.originalRows;\nvar _87c=_87a.insertedRows;\nvar _87d=_87a.deletedRows;\nvar _87e=_87a.selectedRows;\nvar _87f=_87a.checkedRows;\nvar data=_87a.data;\nfunction _880(a){\nvar ids=[];\nfor(var i=0;i<a.length;i++){\nids.push(a[i][opts.idField]);\n}\nreturn ids;\n};\nfunction _881(ids,_882){\nfor(var i=0;i<ids.length;i++){\nvar _883=_7f9(_879,ids[i]);\nif(_883>=0){\n(_882==\"s\"?_78d:_78a)(_879,_883,true);\n}\n}\n};\nfor(var i=0;i<data.rows.length;i++){\n$(_879).datagrid(\"cancelEdit\",i);\n}\nvar _884=_880(_87e);\nvar _885=_880(_87f);\n_87e.splice(0,_87e.length);\n_87f.splice(0,_87f.length);\ndata.total+=_87d.length-_87c.length;\ndata.rows=_87b;\n_7a4(_879,data);\n_881(_884,\"s\");\n_881(_885,\"c\");\n_872(_879);\n};\nfunction _7a3(_886,_887,cb){\nvar opts=$.data(_886,\"datagrid\").options;\nif(_887){\nopts.queryParams=_887;\n}\nvar _888=$.extend({},opts.queryParams);\nif(opts.pagination){\n$.extend(_888,{page:opts.pageNumber||1,rows:opts.pageSize});\n}\nif(opts.sortName&&opts.remoteSort){\n$.extend(_888,{sort:opts.sortName,order:opts.sortOrder});\n}\nif(opts.onBeforeLoad.call(_886,_888)==false){\nopts.view.setEmptyMsg(_886);\nreturn;\n}\n$(_886).datagrid(\"loading\");\nvar _889=opts.loader.call(_886,_888,function(data){\n$(_886).datagrid(\"loaded\");\n$(_886).datagrid(\"loadData\",data);\nif(cb){\ncb();\n}\n},function(){\n$(_886).datagrid(\"loaded\");\nopts.onLoadError.apply(_886,arguments);\n});\nif(_889==false){\n$(_886).datagrid(\"loaded\");\nopts.view.setEmptyMsg(_886);\n}\n};\nfunction _88a(_88b,_88c){\nvar opts=$.data(_88b,\"datagrid\").options;\n_88c.type=_88c.type||\"body\";\n_88c.rowspan=_88c.rowspan||1;\n_88c.colspan=_88c.colspan||1;\nif(_88c.rowspan==1&&_88c.colspan==1){\nreturn;\n}\nvar tr=opts.finder.getTr(_88b,(_88c.index!=undefined?_88c.index:_88c.id),_88c.type);\nif(!tr.length){\nreturn;\n}\nvar td=tr.find(\"td[field=\\\"\"+_88c.field+\"\\\"]\");\ntd.attr(\"rowspan\",_88c.rowspan).attr(\"colspan\",_88c.colspan);\ntd.addClass(\"datagrid-td-merged\");\n_88d(td.next(),_88c.colspan-1);\nfor(var i=1;i<_88c.rowspan;i++){\ntr=tr.next();\nif(!tr.length){\nbreak;\n}\n_88d(tr.find(\"td[field=\\\"\"+_88c.field+\"\\\"]\"),_88c.colspan);\n}\n_7d3(_88b,td);\nfunction _88d(td,_88e){\nfor(var i=0;i<_88e;i++){\ntd.hide();\ntd=td.next();\n}\n};\n};\n$.fn.datagrid=function(_88f,_890){\nif(typeof _88f==\"string\"){\nreturn $.fn.datagrid.methods[_88f](this,_890);\n}\n_88f=_88f||{};\nreturn this.each(function(){\nvar _891=$.data(this,\"datagrid\");\nvar opts;\nif(_891){\nopts=$.extend(_891.options,_88f);\n_891.options=opts;\n}else{\nopts=$.extend({},$.extend({},$.fn.datagrid.defaults,{queryParams:{}}),$.fn.datagrid.parseOptions(this),_88f);\n$(this).css(\"width\",\"\").css(\"height\",\"\");\nvar _892=_747(this,opts.rownumbers);\nif(!opts.columns){\nopts.columns=_892.columns;\n}\nif(!opts.frozenColumns){\nopts.frozenColumns=_892.frozenColumns;\n}\nopts.columns=$.extend(true,[],opts.columns);\nopts.frozenColumns=$.extend(true,[],opts.frozenColumns);\nopts.view=$.extend({},opts.view);\n$.data(this,\"datagrid\",{options:opts,panel:_892.panel,dc:_892.dc,ss:null,selectedRows:[],checkedRows:[],data:{total:0,rows:[]},originalRows:[],updatedRows:[],insertedRows:[],deletedRows:[]});\n}\n_750(this);\n_768(this);\n_71c(this);\nif(opts.data){\n$(this).datagrid(\"loadData\",opts.data);\n}else{\nvar data=$.fn.datagrid.parseData(this);\nif(data.total>0){\n$(this).datagrid(\"loadData\",data);\n}else{\n$(this).datagrid(\"autoSizeColumn\");\n}\n}\n_7a3(this);\n});\n};\nfunction _893(_894){\nvar _895={};\n$.map(_894,function(name){\n_895[name]=_896(name);\n});\nreturn _895;\nfunction _896(name){\nfunction isA(_897){\nreturn $.data($(_897)[0],name)!=undefined;\n};\nreturn {init:function(_898,_899){\nvar _89a=$(\"<input type=\\\"text\\\" class=\\\"datagrid-editable-input\\\">\").appendTo(_898);\nif(_89a[name]&&name!=\"text\"){\nreturn _89a[name](_899);\n}else{\nreturn _89a;\n}\n},destroy:function(_89b){\nif(isA(_89b,name)){\n$(_89b)[name](\"destroy\");\n}\n},getValue:function(_89c){\nif(isA(_89c,name)){\nvar opts=$(_89c)[name](\"options\");\nif(opts.multiple){\nreturn $(_89c)[name](\"getValues\").join(opts.separator);\n}else{\nreturn $(_89c)[name](\"getValue\");\n}\n}else{\nreturn $(_89c).val();\n}\n},setValue:function(_89d,_89e){\nif(isA(_89d,name)){\nvar opts=$(_89d)[name](\"options\");\nif(opts.multiple){\nif(_89e){\n$(_89d)[name](\"setValues\",_89e.split(opts.separator));\n}else{\n$(_89d)[name](\"clear\");\n}\n}else{\n$(_89d)[name](\"setValue\",_89e);\n}\n}else{\n$(_89d).val(_89e);\n}\n},resize:function(_89f,_8a0){\nif(isA(_89f,name)){\n$(_89f)[name](\"resize\",_8a0);\n}else{\n$(_89f)._size({width:_8a0,height:$.fn.datagrid.defaults.editorHeight});\n}\n}};\n};\n};\nvar _8a1=$.extend({},_893([\"text\",\"textbox\",\"passwordbox\",\"filebox\",\"numberbox\",\"numberspinner\",\"combobox\",\"combotree\",\"combogrid\",\"combotreegrid\",\"datebox\",\"datetimebox\",\"timespinner\",\"datetimespinner\"]),{textarea:{init:function(_8a2,_8a3){\nvar _8a4=$(\"<textarea class=\\\"datagrid-editable-input\\\"></textarea>\").appendTo(_8a2);\n_8a4.css(\"vertical-align\",\"middle\")._outerHeight(_8a3.height);\nreturn _8a4;\n},getValue:function(_8a5){\nreturn $(_8a5).val();\n},setValue:function(_8a6,_8a7){\n$(_8a6).val(_8a7);\n},resize:function(_8a8,_8a9){\n$(_8a8)._outerWidth(_8a9);\n}},checkbox:{init:function(_8aa,_8ab){\nvar _8ac=$(\"<input type=\\\"checkbox\\\">\").appendTo(_8aa);\n_8ac.val(_8ab.on);\n_8ac.attr(\"offval\",_8ab.off);\nreturn _8ac;\n},getValue:function(_8ad){\nif($(_8ad).is(\":checked\")){\nreturn $(_8ad).val();\n}else{\nreturn $(_8ad).attr(\"offval\");\n}\n},setValue:function(_8ae,_8af){\nvar _8b0=false;\nif($(_8ae).val()==_8af){\n_8b0=true;\n}\n$(_8ae)._propAttr(\"checked\",_8b0);\n}},validatebox:{init:function(_8b1,_8b2){\nvar _8b3=$(\"<input type=\\\"text\\\" class=\\\"datagrid-editable-input\\\">\").appendTo(_8b1);\n_8b3.validatebox(_8b2);\nreturn _8b3;\n},destroy:function(_8b4){\n$(_8b4).validatebox(\"destroy\");\n},getValue:function(_8b5){\nreturn $(_8b5).val();\n},setValue:function(_8b6,_8b7){\n$(_8b6).val(_8b7);\n},resize:function(_8b8,_8b9){\n$(_8b8)._outerWidth(_8b9)._outerHeight($.fn.datagrid.defaults.editorHeight);\n}}});\n$.fn.datagrid.methods={options:function(jq){\nvar _8ba=$.data(jq[0],\"datagrid\").options;\nvar _8bb=$.data(jq[0],\"datagrid\").panel.panel(\"options\");\nvar opts=$.extend(_8ba,{width:_8bb.width,height:_8bb.height,closed:_8bb.closed,collapsed:_8bb.collapsed,minimized:_8bb.minimized,maximized:_8bb.maximized});\nreturn opts;\n},setSelectionState:function(jq){\nreturn jq.each(function(){\n_7f1(this);\n});\n},createStyleSheet:function(jq){\nreturn _70d(jq[0]);\n},getPanel:function(jq){\nreturn $.data(jq[0],\"datagrid\").panel;\n},getPager:function(jq){\nreturn $.data(jq[0],\"datagrid\").panel.children(\"div.datagrid-pager\");\n},getColumnFields:function(jq,_8bc){\nreturn _766(jq[0],_8bc);\n},getColumnOption:function(jq,_8bd){\nreturn _767(jq[0],_8bd);\n},resize:function(jq,_8be){\nreturn jq.each(function(){\n_71c(this,_8be);\n});\n},load:function(jq,_8bf){\nreturn jq.each(function(){\nvar opts=$(this).datagrid(\"options\");\nif(typeof _8bf==\"string\"){\nopts.url=_8bf;\n_8bf=null;\n}\nopts.pageNumber=1;\nvar _8c0=$(this).datagrid(\"getPager\");\n_8c0.pagination(\"refresh\",{pageNumber:1});\n_7a3(this,_8bf);\n});\n},reload:function(jq,_8c1){\nreturn jq.each(function(){\nvar opts=$(this).datagrid(\"options\");\nif(typeof _8c1==\"string\"){\nopts.url=_8c1;\n_8c1=null;\n}\n_7a3(this,_8c1);\n});\n},reloadFooter:function(jq,_8c2){\nreturn jq.each(function(){\nvar opts=$.data(this,\"datagrid\").options;\nvar dc=$.data(this,\"datagrid\").dc;\nif(_8c2){\n$.data(this,\"datagrid\").footer=_8c2;\n}\nif(opts.showFooter){\nopts.view.renderFooter.call(opts.view,this,dc.footer2,false);\nopts.view.renderFooter.call(opts.view,this,dc.footer1,true);\nif(opts.view.onAfterRender){\nopts.view.onAfterRender.call(opts.view,this);\n}\n$(this).datagrid(\"fixRowHeight\");\n}\n});\n},loading:function(jq){\nreturn jq.each(function(){\nvar opts=$.data(this,\"datagrid\").options;\n$(this).datagrid(\"getPager\").pagination(\"loading\");\nif(opts.loadMsg){\nvar _8c3=$(this).datagrid(\"getPanel\");\nif(!_8c3.children(\"div.datagrid-mask\").length){\n$(\"<div class=\\\"datagrid-mask\\\" style=\\\"display:block\\\"></div>\").appendTo(_8c3);\nvar msg=$(\"<div class=\\\"datagrid-mask-msg\\\" style=\\\"display:block;left:50%\\\"></div>\").html(opts.loadMsg).appendTo(_8c3);\nmsg._outerHeight(40);\nmsg.css({marginLeft:(-msg.outerWidth()/2),lineHeight:(msg.height()+\"px\")});\n}\n}\n});\n},loaded:function(jq){\nreturn jq.each(function(){\n$(this).datagrid(\"getPager\").pagination(\"loaded\");\nvar _8c4=$(this).datagrid(\"getPanel\");\n_8c4.children(\"div.datagrid-mask-msg\").remove();\n_8c4.children(\"div.datagrid-mask\").remove();\n});\n},fitColumns:function(jq){\nreturn jq.each(function(){\n_7b0(this);\n});\n},fixColumnSize:function(jq,_8c5){\nreturn jq.each(function(){\n_7ce(this,_8c5);\n});\n},fixRowHeight:function(jq,_8c6){\nreturn jq.each(function(){\n_732(this,_8c6);\n});\n},freezeRow:function(jq,_8c7){\nreturn jq.each(function(){\n_740(this,_8c7);\n});\n},autoSizeColumn:function(jq,_8c8){\nreturn jq.each(function(){\n_7c2(this,_8c8);\n});\n},loadData:function(jq,data){\nreturn jq.each(function(){\n_7a4(this,data);\n_872(this);\n});\n},getData:function(jq){\nreturn $.data(jq[0],\"datagrid\").data;\n},getRows:function(jq){\nreturn $.data(jq[0],\"datagrid\").data.rows;\n},getFooterRows:function(jq){\nreturn $.data(jq[0],\"datagrid\").footer;\n},getRowIndex:function(jq,id){\nreturn _7f9(jq[0],id);\n},getChecked:function(jq){\nreturn _7ff(jq[0]);\n},getSelected:function(jq){\nvar rows=_7fc(jq[0]);\nreturn rows.length>0?rows[0]:null;\n},getSelections:function(jq){\nreturn _7fc(jq[0]);\n},clearSelections:function(jq){\nreturn jq.each(function(){\nvar _8c9=$.data(this,\"datagrid\");\nvar _8ca=_8c9.selectedRows;\nvar _8cb=_8c9.checkedRows;\n_8ca.splice(0,_8ca.length);\n_812(this);\nif(_8c9.options.checkOnSelect){\n_8cb.splice(0,_8cb.length);\n}\n});\n},clearChecked:function(jq){\nreturn jq.each(function(){\nvar _8cc=$.data(this,\"datagrid\");\nvar _8cd=_8cc.selectedRows;\nvar _8ce=_8cc.checkedRows;\n_8ce.splice(0,_8ce.length);\n_779(this);\nif(_8cc.options.selectOnCheck){\n_8cd.splice(0,_8cd.length);\n}\n});\n},scrollTo:function(jq,_8cf){\nreturn jq.each(function(){\n_802(this,_8cf);\n});\n},highlightRow:function(jq,_8d0){\nreturn jq.each(function(){\n_786(this,_8d0);\n_802(this,_8d0);\n});\n},selectAll:function(jq){\nreturn jq.each(function(){\n_817(this);\n});\n},unselectAll:function(jq){\nreturn jq.each(function(){\n_812(this);\n});\n},selectRow:function(jq,_8d1){\nreturn jq.each(function(){\n_78d(this,_8d1);\n});\n},selectRecord:function(jq,id){\nreturn jq.each(function(){\nvar opts=$.data(this,\"datagrid\").options;\nif(opts.idField){\nvar _8d2=_7f9(this,id);\nif(_8d2>=0){\n$(this).datagrid(\"selectRow\",_8d2);\n}\n}\n});\n},unselectRow:function(jq,_8d3){\nreturn jq.each(function(){\n_78e(this,_8d3);\n});\n},checkRow:function(jq,_8d4){\nreturn jq.each(function(){\n_78a(this,_8d4);\n});\n},uncheckRow:function(jq,_8d5){\nreturn jq.each(function(){\n_78b(this,_8d5);\n});\n},checkAll:function(jq){\nreturn jq.each(function(){\n_778(this);\n});\n},uncheckAll:function(jq){\nreturn jq.each(function(){\n_779(this);\n});\n},beginEdit:function(jq,_8d6){\nreturn jq.each(function(){\n_831(this,_8d6);\n});\n},endEdit:function(jq,_8d7){\nreturn jq.each(function(){\n_837(this,_8d7,false);\n});\n},cancelEdit:function(jq,_8d8){\nreturn jq.each(function(){\n_837(this,_8d8,true);\n});\n},getEditors:function(jq,_8d9){\nreturn _844(jq[0],_8d9);\n},getEditor:function(jq,_8da){\nreturn _848(jq[0],_8da);\n},refreshRow:function(jq,_8db){\nreturn jq.each(function(){\nvar opts=$.data(this,\"datagrid\").options;\nopts.view.refreshRow.call(opts.view,this,_8db);\n});\n},validateRow:function(jq,_8dc){\nreturn _836(jq[0],_8dc);\n},updateRow:function(jq,_8dd){\nreturn jq.each(function(){\n_86c(this,_8dd);\n});\n},appendRow:function(jq,row){\nreturn jq.each(function(){\n_869(this,row);\n});\n},insertRow:function(jq,_8de){\nreturn jq.each(function(){\n_865(this,_8de);\n});\n},deleteRow:function(jq,_8df){\nreturn jq.each(function(){\n_85f(this,_8df);\n});\n},getChanges:function(jq,_8e0){\nreturn _859(jq[0],_8e0);\n},acceptChanges:function(jq){\nreturn jq.each(function(){\n_876(this);\n});\n},rejectChanges:function(jq){\nreturn jq.each(function(){\n_878(this);\n});\n},mergeCells:function(jq,_8e1){\nreturn jq.each(function(){\n_88a(this,_8e1);\n});\n},showColumn:function(jq,_8e2){\nreturn jq.each(function(){\nvar col=$(this).datagrid(\"getColumnOption\",_8e2);\nif(col.hidden){\ncol.hidden=false;\n$(this).datagrid(\"getPanel\").find(\"td[field=\\\"\"+_8e2+\"\\\"]\").show();\n_7a5(this,_8e2,1);\n$(this).datagrid(\"fitColumns\");\n}\n});\n},hideColumn:function(jq,_8e3){\nreturn jq.each(function(){\nvar col=$(this).datagrid(\"getColumnOption\",_8e3);\nif(!col.hidden){\ncol.hidden=true;\n$(this).datagrid(\"getPanel\").find(\"td[field=\\\"\"+_8e3+\"\\\"]\").hide();\n_7a5(this,_8e3,-1);\n$(this).datagrid(\"fitColumns\");\n}\n});\n},sort:function(jq,_8e4){\nreturn jq.each(function(){\n_77a(this,_8e4);\n});\n},gotoPage:function(jq,_8e5){\nreturn jq.each(function(){\nvar _8e6=this;\nvar page,cb;\nif(typeof _8e5==\"object\"){\npage=_8e5.page;\ncb=_8e5.callback;\n}else{\npage=_8e5;\n}\n$(_8e6).datagrid(\"options\").pageNumber=page;\n$(_8e6).datagrid(\"getPager\").pagination(\"refresh\",{pageNumber:page});\n_7a3(_8e6,null,function(){\nif(cb){\ncb.call(_8e6,page);\n}\n});\n});\n}};\n$.fn.datagrid.parseOptions=function(_8e7){\nvar t=$(_8e7);\nreturn $.extend({},$.fn.panel.parseOptions(_8e7),$.parser.parseOptions(_8e7,[\"url\",\"toolbar\",\"idField\",\"sortName\",\"sortOrder\",\"pagePosition\",\"resizeHandle\",{sharedStyleSheet:\"boolean\",fitColumns:\"boolean\",autoRowHeight:\"boolean\",striped:\"boolean\",nowrap:\"boolean\"},{rownumbers:\"boolean\",singleSelect:\"boolean\",ctrlSelect:\"boolean\",checkOnSelect:\"boolean\",selectOnCheck:\"boolean\"},{pagination:\"boolean\",pageSize:\"number\",pageNumber:\"number\"},{multiSort:\"boolean\",remoteSort:\"boolean\",showHeader:\"boolean\",showFooter:\"boolean\"},{scrollbarSize:\"number\",scrollOnSelect:\"boolean\"}]),{pageList:(t.attr(\"pageList\")?eval(t.attr(\"pageList\")):undefined),loadMsg:(t.attr(\"loadMsg\")!=undefined?t.attr(\"loadMsg\"):undefined),rowStyler:(t.attr(\"rowStyler\")?eval(t.attr(\"rowStyler\")):undefined)});\n};\n$.fn.datagrid.parseData=function(_8e8){\nvar t=$(_8e8);\nvar data={total:0,rows:[]};\nvar _8e9=t.datagrid(\"getColumnFields\",true).concat(t.datagrid(\"getColumnFields\",false));\nt.find(\"tbody tr\").each(function(){\ndata.total++;\nvar row={};\n$.extend(row,$.parser.parseOptions(this,[\"iconCls\",\"state\"]));\nfor(var i=0;i<_8e9.length;i++){\nrow[_8e9[i]]=$(this).find(\"td:eq(\"+i+\")\").html();\n}\ndata.rows.push(row);\n});\nreturn data;\n};\nvar _8ea={render:function(_8eb,_8ec,_8ed){\nvar rows=$(_8eb).datagrid(\"getRows\");\n$(_8ec).empty().html(this.renderTable(_8eb,0,rows,_8ed));\n},renderFooter:function(_8ee,_8ef,_8f0){\nvar opts=$.data(_8ee,\"datagrid\").options;\nvar rows=$.data(_8ee,\"datagrid\").footer||[];\nvar _8f1=$(_8ee).datagrid(\"getColumnFields\",_8f0);\nvar _8f2=[\"<table class=\\\"datagrid-ftable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"];\nfor(var i=0;i<rows.length;i++){\n_8f2.push(\"<tr class=\\\"datagrid-row\\\" datagrid-row-index=\\\"\"+i+\"\\\">\");\n_8f2.push(this.renderRow.call(this,_8ee,_8f1,_8f0,i,rows[i]));\n_8f2.push(\"</tr>\");\n}\n_8f2.push(\"</tbody></table>\");\n$(_8ef).html(_8f2.join(\"\"));\n},renderTable:function(_8f3,_8f4,rows,_8f5){\nvar _8f6=$.data(_8f3,\"datagrid\");\nvar opts=_8f6.options;\nif(_8f5){\nif(!(opts.rownumbers||(opts.frozenColumns&&opts.frozenColumns.length))){\nreturn \"\";\n}\n}\nvar _8f7=$(_8f3).datagrid(\"getColumnFields\",_8f5);\nvar _8f8=[\"<table class=\\\"datagrid-btable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"];\nfor(var i=0;i<rows.length;i++){\nvar row=rows[i];\nvar css=opts.rowStyler?opts.rowStyler.call(_8f3,_8f4,row):\"\";\nvar cs=this.getStyleValue(css);\nvar cls=\"class=\\\"datagrid-row \"+(_8f4%2&&opts.striped?\"datagrid-row-alt \":\" \")+cs.c+\"\\\"\";\nvar _8f9=cs.s?\"style=\\\"\"+cs.s+\"\\\"\":\"\";\nvar _8fa=_8f6.rowIdPrefix+\"-\"+(_8f5?1:2)+\"-\"+_8f4;\n_8f8.push(\"<tr id=\\\"\"+_8fa+\"\\\" datagrid-row-index=\\\"\"+_8f4+\"\\\" \"+cls+\" \"+_8f9+\">\");\n_8f8.push(this.renderRow.call(this,_8f3,_8f7,_8f5,_8f4,row));\n_8f8.push(\"</tr>\");\n_8f4++;\n}\n_8f8.push(\"</tbody></table>\");\nreturn _8f8.join(\"\");\n},renderRow:function(_8fb,_8fc,_8fd,_8fe,_8ff){\nvar opts=$.data(_8fb,\"datagrid\").options;\nvar cc=[];\nif(_8fd&&opts.rownumbers){\nvar _900=_8fe+1;\nif(opts.pagination){\n_900+=(opts.pageNumber-1)*opts.pageSize;\n}\ncc.push(\"<td class=\\\"datagrid-td-rownumber\\\"><div class=\\\"datagrid-cell-rownumber\\\">\"+_900+\"</div></td>\");\n}\nfor(var i=0;i<_8fc.length;i++){\nvar _901=_8fc[i];\nvar col=$(_8fb).datagrid(\"getColumnOption\",_901);\nif(col){\nvar _902=_8ff[_901];\nvar css=col.styler?(col.styler.call(_8fb,_902,_8ff,_8fe)||\"\"):\"\";\nvar cs=this.getStyleValue(css);\nvar cls=cs.c?\"class=\\\"\"+cs.c+\"\\\"\":\"\";\nvar _903=col.hidden?\"style=\\\"display:none;\"+cs.s+\"\\\"\":(cs.s?\"style=\\\"\"+cs.s+\"\\\"\":\"\");\ncc.push(\"<td field=\\\"\"+_901+\"\\\" \"+cls+\" \"+_903+\">\");\nvar _903=\"\";\nif(!col.checkbox){\nif(col.align){\n_903+=\"text-align:\"+col.align+\";\";\n}\nif(!opts.nowrap){\n_903+=\"white-space:normal;height:auto;\";\n}else{\nif(opts.autoRowHeight){\n_903+=\"height:auto;\";\n}\n}\n}\ncc.push(\"<div style=\\\"\"+_903+\"\\\" \");\ncc.push(col.checkbox?\"class=\\\"datagrid-cell-check\\\"\":\"class=\\\"datagrid-cell \"+col.cellClass+\"\\\"\");\ncc.push(\">\");\nif(col.checkbox){\ncc.push(\"<input type=\\\"checkbox\\\" \"+(_8ff.checked?\"checked=\\\"checked\\\"\":\"\"));\ncc.push(\" name=\\\"\"+_901+\"\\\" value=\\\"\"+(_902!=undefined?_902:\"\")+\"\\\">\");\n}else{\nif(col.formatter){\ncc.push(col.formatter(_902,_8ff,_8fe));\n}else{\ncc.push(_902);\n}\n}\ncc.push(\"</div>\");\ncc.push(\"</td>\");\n}\n}\nreturn cc.join(\"\");\n},getStyleValue:function(css){\nvar _904=\"\";\nvar _905=\"\";\nif(typeof css==\"string\"){\n_905=css;\n}else{\nif(css){\n_904=css[\"class\"]||\"\";\n_905=css[\"style\"]||\"\";\n}\n}\nreturn {c:_904,s:_905};\n},refreshRow:function(_906,_907){\nthis.updateRow.call(this,_906,_907,{});\n},updateRow:function(_908,_909,row){\nvar opts=$.data(_908,\"datagrid\").options;\nvar _90a=opts.finder.getRow(_908,_909);\n$.extend(_90a,row);\nvar cs=_90b.call(this,_909);\nvar _90c=cs.s;\nvar cls=\"datagrid-row \"+(_909%2&&opts.striped?\"datagrid-row-alt \":\" \")+cs.c;\nfunction _90b(_90d){\nvar css=opts.rowStyler?opts.rowStyler.call(_908,_90d,_90a):\"\";\nreturn this.getStyleValue(css);\n};\nfunction _90e(_90f){\nvar tr=opts.finder.getTr(_908,_909,\"body\",(_90f?1:2));\nif(!tr.length){\nreturn;\n}\nvar _910=$(_908).datagrid(\"getColumnFields\",_90f);\nvar _911=tr.find(\"div.datagrid-cell-check input[type=checkbox]\").is(\":checked\");\ntr.html(this.renderRow.call(this,_908,_910,_90f,_909,_90a));\nvar _912=(tr.hasClass(\"datagrid-row-checked\")?\" datagrid-row-checked\":\"\")+(tr.hasClass(\"datagrid-row-selected\")?\" datagrid-row-selected\":\"\");\ntr.attr(\"style\",_90c).attr(\"class\",cls+_912);\nif(_911){\ntr.find(\"div.datagrid-cell-check input[type=checkbox]\")._propAttr(\"checked\",true);\n}\n};\n_90e.call(this,true);\n_90e.call(this,false);\n$(_908).datagrid(\"fixRowHeight\",_909);\n},insertRow:function(_913,_914,row){\nvar _915=$.data(_913,\"datagrid\");\nvar opts=_915.options;\nvar dc=_915.dc;\nvar data=_915.data;\nif(_914==undefined||_914==null){\n_914=data.rows.length;\n}\nif(_914>data.rows.length){\n_914=data.rows.length;\n}\nfunction _916(_917){\nvar _918=_917?1:2;\nfor(var i=data.rows.length-1;i>=_914;i--){\nvar tr=opts.finder.getTr(_913,i,\"body\",_918);\ntr.attr(\"datagrid-row-index\",i+1);\ntr.attr(\"id\",_915.rowIdPrefix+\"-\"+_918+\"-\"+(i+1));\nif(_917&&opts.rownumbers){\nvar _919=i+2;\nif(opts.pagination){\n_919+=(opts.pageNumber-1)*opts.pageSize;\n}\ntr.find(\"div.datagrid-cell-rownumber\").html(_919);\n}\nif(opts.striped){\ntr.removeClass(\"datagrid-row-alt\").addClass((i+1)%2?\"datagrid-row-alt\":\"\");\n}\n}\n};\nfunction _91a(_91b){\nvar _91c=_91b?1:2;\nvar _91d=$(_913).datagrid(\"getColumnFields\",_91b);\nvar _91e=_915.rowIdPrefix+\"-\"+_91c+\"-\"+_914;\nvar tr=\"<tr id=\\\"\"+_91e+\"\\\" class=\\\"datagrid-row\\\" datagrid-row-index=\\\"\"+_914+\"\\\"></tr>\";\nif(_914>=data.rows.length){\nif(data.rows.length){\nopts.finder.getTr(_913,\"\",\"last\",_91c).after(tr);\n}else{\nvar cc=_91b?dc.body1:dc.body2;\ncc.html(\"<table class=\\\"datagrid-btable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"+tr+\"</tbody></table>\");\n}\n}else{\nopts.finder.getTr(_913,_914+1,\"body\",_91c).before(tr);\n}\n};\n_916.call(this,true);\n_916.call(this,false);\n_91a.call(this,true);\n_91a.call(this,false);\ndata.total+=1;\ndata.rows.splice(_914,0,row);\nthis.setEmptyMsg(_913);\nthis.refreshRow.call(this,_913,_914);\n},deleteRow:function(_91f,_920){\nvar _921=$.data(_91f,\"datagrid\");\nvar opts=_921.options;\nvar data=_921.data;\nfunction _922(_923){\nvar _924=_923?1:2;\nfor(var i=_920+1;i<data.rows.length;i++){\nvar tr=opts.finder.getTr(_91f,i,\"body\",_924);\ntr.attr(\"datagrid-row-index\",i-1);\ntr.attr(\"id\",_921.rowIdPrefix+\"-\"+_924+\"-\"+(i-1));\nif(_923&&opts.rownumbers){\nvar _925=i;\nif(opts.pagination){\n_925+=(opts.pageNumber-1)*opts.pageSize;\n}\ntr.find(\"div.datagrid-cell-rownumber\").html(_925);\n}\nif(opts.striped){\ntr.removeClass(\"datagrid-row-alt\").addClass((i-1)%2?\"datagrid-row-alt\":\"\");\n}\n}\n};\nopts.finder.getTr(_91f,_920).remove();\n_922.call(this,true);\n_922.call(this,false);\ndata.total-=1;\ndata.rows.splice(_920,1);\nthis.setEmptyMsg(_91f);\n},onBeforeRender:function(_926,rows){\n},onAfterRender:function(_927){\nvar _928=$.data(_927,\"datagrid\");\nvar opts=_928.options;\nif(opts.showFooter){\nvar _929=$(_927).datagrid(\"getPanel\").find(\"div.datagrid-footer\");\n_929.find(\"div.datagrid-cell-rownumber,div.datagrid-cell-check\").css(\"visibility\",\"hidden\");\n}\nthis.setEmptyMsg(_927);\n},setEmptyMsg:function(_92a){\nvar _92b=$.data(_92a,\"datagrid\");\nvar opts=_92b.options;\nvar _92c=opts.finder.getRows(_92a).length==0;\nif(_92c){\nthis.renderEmptyRow(_92a);\n}\nif(opts.emptyMsg){\n_92b.dc.view.children(\".datagrid-empty\").remove();\nif(_92c){\nvar h=_92b.dc.header2.parent().outerHeight();\nvar d=$(\"<div class=\\\"datagrid-empty\\\"></div>\").appendTo(_92b.dc.view);\nd.html(opts.emptyMsg).css(\"top\",h+\"px\");\n}\n}\n},renderEmptyRow:function(_92d){\nvar opts=$(_92d).datagrid(\"options\");\nvar cols=$.map($(_92d).datagrid(\"getColumnFields\"),function(_92e){\nreturn $(_92d).datagrid(\"getColumnOption\",_92e);\n});\n$.map(cols,function(col){\ncol.formatter1=col.formatter;\ncol.styler1=col.styler;\ncol.formatter=col.styler=undefined;\n});\nvar _92f=opts.rowStyler;\nopts.rowStyler=function(){\n};\nvar _930=$.data(_92d,\"datagrid\").dc.body2;\n_930.html(this.renderTable(_92d,0,[{}],false));\n_930.find(\"tbody *\").css({height:1,borderColor:\"transparent\",background:\"transparent\"});\nvar tr=_930.find(\".datagrid-row\");\ntr.removeClass(\"datagrid-row\").removeAttr(\"datagrid-row-index\");\ntr.find(\".datagrid-cell,.datagrid-cell-check\").empty();\n$.map(cols,function(col){\ncol.formatter=col.formatter1;\ncol.styler=col.styler1;\ncol.formatter1=col.styler1=undefined;\n});\nopts.rowStyler=_92f;\n}};\n$.fn.datagrid.defaults=$.extend({},$.fn.panel.defaults,{sharedStyleSheet:false,frozenColumns:undefined,columns:undefined,fitColumns:false,resizeHandle:\"right\",resizeEdge:5,autoRowHeight:true,toolbar:null,striped:false,method:\"post\",nowrap:true,idField:null,url:null,data:null,loadMsg:\"Processing, please wait ...\",emptyMsg:\"\",rownumbers:false,singleSelect:false,ctrlSelect:false,selectOnCheck:true,checkOnSelect:true,pagination:false,pagePosition:\"bottom\",pageNumber:1,pageSize:10,pageList:[10,20,30,40,50],queryParams:{},sortName:null,sortOrder:\"asc\",multiSort:false,remoteSort:true,showHeader:true,showFooter:false,scrollOnSelect:true,scrollbarSize:18,rownumberWidth:30,editorHeight:31,headerEvents:{mouseover:_772(true),mouseout:_772(false),click:_776,dblclick:_77b,contextmenu:_77e},rowEvents:{mouseover:_780(true),mouseout:_780(false),click:_787,dblclick:_791,contextmenu:_795},rowStyler:function(_931,_932){\n},loader:function(_933,_934,_935){\nvar opts=$(this).datagrid(\"options\");\nif(!opts.url){\nreturn false;\n}\n$.ajax({type:opts.method,url:opts.url,data:_933,dataType:\"json\",success:function(data){\n_934(data);\n},error:function(){\n_935.apply(this,arguments);\n}});\n},loadFilter:function(data){\nreturn data;\n},editors:_8a1,finder:{getTr:function(_936,_937,type,_938){\ntype=type||\"body\";\n_938=_938||0;\nvar _939=$.data(_936,\"datagrid\");\nvar dc=_939.dc;\nvar opts=_939.options;\nif(_938==0){\nvar tr1=opts.finder.getTr(_936,_937,type,1);\nvar tr2=opts.finder.getTr(_936,_937,type,2);\nreturn tr1.add(tr2);\n}else{\nif(type==\"body\"){\nvar tr=$(\"#\"+_939.rowIdPrefix+\"-\"+_938+\"-\"+_937);\nif(!tr.length){\ntr=(_938==1?dc.body1:dc.body2).find(\">table>tbody>tr[datagrid-row-index=\"+_937+\"]\");\n}\nreturn tr;\n}else{\nif(type==\"footer\"){\nreturn (_938==1?dc.footer1:dc.footer2).find(\">table>tbody>tr[datagrid-row-index=\"+_937+\"]\");\n}else{\nif(type==\"selected\"){\nreturn (_938==1?dc.body1:dc.body2).find(\">table>tbody>tr.datagrid-row-selected\");\n}else{\nif(type==\"highlight\"){\nreturn (_938==1?dc.body1:dc.body2).find(\">table>tbody>tr.datagrid-row-over\");\n}else{\nif(type==\"checked\"){\nreturn (_938==1?dc.body1:dc.body2).find(\">table>tbody>tr.datagrid-row-checked\");\n}else{\nif(type==\"editing\"){\nreturn (_938==1?dc.body1:dc.body2).find(\">table>tbody>tr.datagrid-row-editing\");\n}else{\nif(type==\"last\"){\nreturn (_938==1?dc.body1:dc.body2).find(\">table>tbody>tr[datagrid-row-index]:last\");\n}else{\nif(type==\"allbody\"){\nreturn (_938==1?dc.body1:dc.body2).find(\">table>tbody>tr[datagrid-row-index]\");\n}else{\nif(type==\"allfooter\"){\nreturn (_938==1?dc.footer1:dc.footer2).find(\">table>tbody>tr[datagrid-row-index]\");\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n},getRow:function(_93a,p){\nvar _93b=(typeof p==\"object\")?p.attr(\"datagrid-row-index\"):p;\nreturn $.data(_93a,\"datagrid\").data.rows[parseInt(_93b)];\n},getRows:function(_93c){\nreturn $(_93c).datagrid(\"getRows\");\n}},view:_8ea,onBeforeLoad:function(_93d){\n},onLoadSuccess:function(){\n},onLoadError:function(){\n},onClickRow:function(_93e,_93f){\n},onDblClickRow:function(_940,_941){\n},onClickCell:function(_942,_943,_944){\n},onDblClickCell:function(_945,_946,_947){\n},onBeforeSortColumn:function(sort,_948){\n},onSortColumn:function(sort,_949){\n},onResizeColumn:function(_94a,_94b){\n},onBeforeSelect:function(_94c,_94d){\n},onSelect:function(_94e,_94f){\n},onBeforeUnselect:function(_950,_951){\n},onUnselect:function(_952,_953){\n},onSelectAll:function(rows){\n},onUnselectAll:function(rows){\n},onBeforeCheck:function(_954,_955){\n},onCheck:function(_956,_957){\n},onBeforeUncheck:function(_958,_959){\n},onUncheck:function(_95a,_95b){\n},onCheckAll:function(rows){\n},onUncheckAll:function(rows){\n},onBeforeEdit:function(_95c,_95d){\n},onBeginEdit:function(_95e,_95f){\n},onEndEdit:function(_960,_961,_962){\n},onAfterEdit:function(_963,_964,_965){\n},onCancelEdit:function(_966,_967){\n},onHeaderContextMenu:function(e,_968){\n},onRowContextMenu:function(e,_969,_96a){\n}});\n})(jQuery);\n(function($){\nvar _96b;\n$(document)._unbind(\".propertygrid\")._bind(\"mousedown.propertygrid\",function(e){\nvar p=$(e.target).closest(\"div.datagrid-view,div.combo-panel\");\nif(p.length){\nreturn;\n}\n_96c(_96b);\n_96b=undefined;\n});\nfunction _96d(_96e){\nvar _96f=$.data(_96e,\"propertygrid\");\nvar opts=$.data(_96e,\"propertygrid\").options;\n$(_96e).datagrid($.extend({},opts,{cls:\"propertygrid\",view:(opts.showGroup?opts.groupView:opts.view),onBeforeEdit:function(_970,row){\nif(opts.onBeforeEdit.call(_96e,_970,row)==false){\nreturn false;\n}\nvar dg=$(this);\nvar row=dg.datagrid(\"getRows\")[_970];\nvar col=dg.datagrid(\"getColumnOption\",\"value\");\ncol.editor=row.editor;\n},onClickCell:function(_971,_972,_973){\nif(_96b!=this){\n_96c(_96b);\n_96b=this;\n}\nif(opts.editIndex!=_971){\n_96c(_96b);\n$(this).datagrid(\"beginEdit\",_971);\nvar ed=$(this).datagrid(\"getEditor\",{index:_971,field:_972});\nif(!ed){\ned=$(this).datagrid(\"getEditor\",{index:_971,field:\"value\"});\n}\nif(ed){\nvar t=$(ed.target);\nvar _974=t.data(\"textbox\")?t.textbox(\"textbox\"):t;\n_974.focus();\nopts.editIndex=_971;\n}\n}\nopts.onClickCell.call(_96e,_971,_972,_973);\n},loadFilter:function(data){\n_96c(this);\nreturn opts.loadFilter.call(this,data);\n}}));\n};\nfunction _96c(_975){\nvar t=$(_975);\nif(!t.length){\nreturn;\n}\nvar opts=$.data(_975,\"propertygrid\").options;\nopts.finder.getTr(_975,null,\"editing\").each(function(){\nvar _976=parseInt($(this).attr(\"datagrid-row-index\"));\nif(t.datagrid(\"validateRow\",_976)){\nt.datagrid(\"endEdit\",_976);\n}else{\nt.datagrid(\"cancelEdit\",_976);\n}\n});\nopts.editIndex=undefined;\n};\n$.fn.propertygrid=function(_977,_978){\nif(typeof _977==\"string\"){\nvar _979=$.fn.propertygrid.methods[_977];\nif(_979){\nreturn _979(this,_978);\n}else{\nreturn this.datagrid(_977,_978);\n}\n}\n_977=_977||{};\nreturn this.each(function(){\nvar _97a=$.data(this,\"propertygrid\");\nif(_97a){\n$.extend(_97a.options,_977);\n}else{\nvar opts=$.extend({},$.fn.propertygrid.defaults,$.fn.propertygrid.parseOptions(this),_977);\nopts.frozenColumns=$.extend(true,[],opts.frozenColumns);\nopts.columns=$.extend(true,[],opts.columns);\n$.data(this,\"propertygrid\",{options:opts});\n}\n_96d(this);\n});\n};\n$.fn.propertygrid.methods={options:function(jq){\nreturn $.data(jq[0],\"propertygrid\").options;\n}};\n$.fn.propertygrid.parseOptions=function(_97b){\nreturn $.extend({},$.fn.datagrid.parseOptions(_97b),$.parser.parseOptions(_97b,[{showGroup:\"boolean\"}]));\n};\nvar _97c=$.extend({},$.fn.datagrid.defaults.view,{render:function(_97d,_97e,_97f){\nvar _980=[];\nvar _981=this.groups;\nfor(var i=0;i<_981.length;i++){\n_980.push(this.renderGroup.call(this,_97d,i,_981[i],_97f));\n}\n$(_97e).html(_980.join(\"\"));\n},renderGroup:function(_982,_983,_984,_985){\nvar _986=$.data(_982,\"datagrid\");\nvar opts=_986.options;\nvar _987=$(_982).datagrid(\"getColumnFields\",_985);\nvar _988=opts.frozenColumns&&opts.frozenColumns.length;\nif(_985){\nif(!(opts.rownumbers||_988)){\nreturn \"\";\n}\n}\nvar _989=[];\nvar css=opts.groupStyler.call(_982,_984.value,_984.rows);\nvar cs=_98a(css,\"datagrid-group\");\n_989.push(\"<div group-index=\"+_983+\" \"+cs+\">\");\nif((_985&&(opts.rownumbers||opts.frozenColumns.length))||(!_985&&!(opts.rownumbers||opts.frozenColumns.length))){\n_989.push(\"<span class=\\\"datagrid-group-expander\\\">\");\n_989.push(\"<span class=\\\"datagrid-row-expander datagrid-row-collapse\\\">&nbsp;</span>\");\n_989.push(\"</span>\");\n}\nif((_985&&_988)||(!_985)){\n_989.push(\"<span class=\\\"datagrid-group-title\\\">\");\n_989.push(opts.groupFormatter.call(_982,_984.value,_984.rows));\n_989.push(\"</span>\");\n}\n_989.push(\"</div>\");\n_989.push(\"<table class=\\\"datagrid-btable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\");\nvar _98b=_984.startIndex;\nfor(var j=0;j<_984.rows.length;j++){\nvar css=opts.rowStyler?opts.rowStyler.call(_982,_98b,_984.rows[j]):\"\";\nvar _98c=\"\";\nvar _98d=\"\";\nif(typeof css==\"string\"){\n_98d=css;\n}else{\nif(css){\n_98c=css[\"class\"]||\"\";\n_98d=css[\"style\"]||\"\";\n}\n}\nvar cls=\"class=\\\"datagrid-row \"+(_98b%2&&opts.striped?\"datagrid-row-alt \":\" \")+_98c+\"\\\"\";\nvar _98e=_98d?\"style=\\\"\"+_98d+\"\\\"\":\"\";\nvar _98f=_986.rowIdPrefix+\"-\"+(_985?1:2)+\"-\"+_98b;\n_989.push(\"<tr id=\\\"\"+_98f+\"\\\" datagrid-row-index=\\\"\"+_98b+\"\\\" \"+cls+\" \"+_98e+\">\");\n_989.push(this.renderRow.call(this,_982,_987,_985,_98b,_984.rows[j]));\n_989.push(\"</tr>\");\n_98b++;\n}\n_989.push(\"</tbody></table>\");\nreturn _989.join(\"\");\nfunction _98a(css,cls){\nvar _990=\"\";\nvar _991=\"\";\nif(typeof css==\"string\"){\n_991=css;\n}else{\nif(css){\n_990=css[\"class\"]||\"\";\n_991=css[\"style\"]||\"\";\n}\n}\nreturn \"class=\\\"\"+cls+(_990?\" \"+_990:\"\")+\"\\\" \"+\"style=\\\"\"+_991+\"\\\"\";\n};\n},bindEvents:function(_992){\nvar _993=$.data(_992,\"datagrid\");\nvar dc=_993.dc;\nvar body=dc.body1.add(dc.body2);\nvar _994=($.data(body[0],\"events\")||$._data(body[0],\"events\")).click[0].handler;\nbody._unbind(\"click\")._bind(\"click\",function(e){\nvar tt=$(e.target);\nvar _995=tt.closest(\"span.datagrid-row-expander\");\nif(_995.length){\nvar _996=_995.closest(\"div.datagrid-group\").attr(\"group-index\");\nif(_995.hasClass(\"datagrid-row-collapse\")){\n$(_992).datagrid(\"collapseGroup\",_996);\n}else{\n$(_992).datagrid(\"expandGroup\",_996);\n}\n}else{\n_994(e);\n}\ne.stopPropagation();\n});\n},onBeforeRender:function(_997,rows){\nvar _998=$.data(_997,\"datagrid\");\nvar opts=_998.options;\n_999();\nvar _99a=[];\nfor(var i=0;i<rows.length;i++){\nvar row=rows[i];\nvar _99b=_99c(row[opts.groupField]);\nif(!_99b){\n_99b={value:row[opts.groupField],rows:[row]};\n_99a.push(_99b);\n}else{\n_99b.rows.push(row);\n}\n}\nvar _99d=0;\nvar _99e=[];\nfor(var i=0;i<_99a.length;i++){\nvar _99b=_99a[i];\n_99b.startIndex=_99d;\n_99d+=_99b.rows.length;\n_99e=_99e.concat(_99b.rows);\n}\n_998.data.rows=_99e;\nthis.groups=_99a;\nvar that=this;\nsetTimeout(function(){\nthat.bindEvents(_997);\n},0);\nfunction _99c(_99f){\nfor(var i=0;i<_99a.length;i++){\nvar _9a0=_99a[i];\nif(_9a0.value==_99f){\nreturn _9a0;\n}\n}\nreturn null;\n};\nfunction _999(){\nif(!$(\"#datagrid-group-style\").length){\n$(\"head\").append(\"<style id=\\\"datagrid-group-style\\\">\"+\".datagrid-group{height:\"+opts.groupHeight+\"px;overflow:hidden;font-weight:bold;border-bottom:1px solid #ccc;white-space:nowrap;word-break:normal;}\"+\".datagrid-group-title,.datagrid-group-expander{display:inline-block;vertical-align:bottom;height:100%;line-height:\"+opts.groupHeight+\"px;padding:0 4px;}\"+\".datagrid-group-title{position:relative;}\"+\".datagrid-group-expander{width:\"+opts.expanderWidth+\"px;text-align:center;padding:0}\"+\".datagrid-row-expander{margin:\"+Math.floor((opts.groupHeight-16)/2)+\"px 0;display:inline-block;width:16px;height:16px;cursor:pointer}\"+\"</style>\");\n}\n};\n},onAfterRender:function(_9a1){\n$.fn.datagrid.defaults.view.onAfterRender.call(this,_9a1);\nvar view=this;\nvar _9a2=$.data(_9a1,\"datagrid\");\nvar opts=_9a2.options;\nif(!_9a2.onResizeColumn){\n_9a2.onResizeColumn=opts.onResizeColumn;\n}\nif(!_9a2.onResize){\n_9a2.onResize=opts.onResize;\n}\nopts.onResizeColumn=function(_9a3,_9a4){\nview.resizeGroup(_9a1);\n_9a2.onResizeColumn.call(_9a1,_9a3,_9a4);\n};\nopts.onResize=function(_9a5,_9a6){\nview.resizeGroup(_9a1);\n_9a2.onResize.call($(_9a1).datagrid(\"getPanel\")[0],_9a5,_9a6);\n};\nview.resizeGroup(_9a1);\n}});\n$.extend($.fn.datagrid.methods,{groups:function(jq){\nreturn jq.datagrid(\"options\").view.groups;\n},expandGroup:function(jq,_9a7){\nreturn jq.each(function(){\nvar opts=$(this).datagrid(\"options\");\nvar view=$.data(this,\"datagrid\").dc.view;\nvar _9a8=view.find(_9a7!=undefined?\"div.datagrid-group[group-index=\\\"\"+_9a7+\"\\\"]\":\"div.datagrid-group\");\nvar _9a9=_9a8.find(\"span.datagrid-row-expander\");\nif(_9a9.hasClass(\"datagrid-row-expand\")){\n_9a9.removeClass(\"datagrid-row-expand\").addClass(\"datagrid-row-collapse\");\n_9a8.next(\"table\").show();\n}\n$(this).datagrid(\"fixRowHeight\");\nif(opts.onExpandGroup){\nopts.onExpandGroup.call(this,_9a7);\n}\n});\n},collapseGroup:function(jq,_9aa){\nreturn jq.each(function(){\nvar opts=$(this).datagrid(\"options\");\nvar view=$.data(this,\"datagrid\").dc.view;\nvar _9ab=view.find(_9aa!=undefined?\"div.datagrid-group[group-index=\\\"\"+_9aa+\"\\\"]\":\"div.datagrid-group\");\nvar _9ac=_9ab.find(\"span.datagrid-row-expander\");\nif(_9ac.hasClass(\"datagrid-row-collapse\")){\n_9ac.removeClass(\"datagrid-row-collapse\").addClass(\"datagrid-row-expand\");\n_9ab.next(\"table\").hide();\n}\n$(this).datagrid(\"fixRowHeight\");\nif(opts.onCollapseGroup){\nopts.onCollapseGroup.call(this,_9aa);\n}\n});\n},scrollToGroup:function(jq,_9ad){\nreturn jq.each(function(){\nvar _9ae=$.data(this,\"datagrid\");\nvar dc=_9ae.dc;\nvar grow=dc.body2.children(\"div.datagrid-group[group-index=\\\"\"+_9ad+\"\\\"]\");\nif(grow.length){\nvar _9af=grow.outerHeight();\nvar _9b0=dc.view2.children(\"div.datagrid-header\")._outerHeight();\nvar _9b1=dc.body2.outerHeight(true)-dc.body2.outerHeight();\nvar top=grow.position().top-_9b0-_9b1;\nif(top<0){\ndc.body2.scrollTop(dc.body2.scrollTop()+top);\n}else{\nif(top+_9af>dc.body2.height()-18){\ndc.body2.scrollTop(dc.body2.scrollTop()+top+_9af-dc.body2.height()+18);\n}\n}\n}\n});\n}});\n$.extend(_97c,{refreshGroupTitle:function(_9b2,_9b3){\nvar _9b4=$.data(_9b2,\"datagrid\");\nvar opts=_9b4.options;\nvar dc=_9b4.dc;\nvar _9b5=this.groups[_9b3];\nvar span=dc.body1.add(dc.body2).children(\"div.datagrid-group[group-index=\"+_9b3+\"]\").find(\"span.datagrid-group-title\");\nspan.html(opts.groupFormatter.call(_9b2,_9b5.value,_9b5.rows));\n},resizeGroup:function(_9b6,_9b7){\nvar _9b8=$.data(_9b6,\"datagrid\");\nvar dc=_9b8.dc;\nvar ht=dc.header2.find(\"table\");\nvar fr=ht.find(\"tr.datagrid-filter-row\").hide();\nvar ww=dc.body2.children(\"table.datagrid-btable:first\").width();\nif(_9b7==undefined){\nvar _9b9=dc.body2.children(\"div.datagrid-group\");\n}else{\nvar _9b9=dc.body2.children(\"div.datagrid-group[group-index=\"+_9b7+\"]\");\n}\n_9b9._outerWidth(ww);\nvar opts=_9b8.options;\nif(opts.frozenColumns&&opts.frozenColumns.length){\nvar _9ba=dc.view1.width()-opts.expanderWidth;\nvar _9bb=dc.view1.css(\"direction\").toLowerCase()==\"rtl\";\n_9b9.find(\".datagrid-group-title\").css(_9bb?\"right\":\"left\",-_9ba+\"px\");\n}\nif(fr.length){\nif(opts.showFilterBar){\nfr.show();\n}\n}\n},insertRow:function(_9bc,_9bd,row){\nvar _9be=$.data(_9bc,\"datagrid\");\nvar opts=_9be.options;\nvar dc=_9be.dc;\nvar _9bf=null;\nvar _9c0;\nif(!_9be.data.rows.length){\n$(_9bc).datagrid(\"loadData\",[row]);\nreturn;\n}\nfor(var i=0;i<this.groups.length;i++){\nif(this.groups[i].value==row[opts.groupField]){\n_9bf=this.groups[i];\n_9c0=i;\nbreak;\n}\n}\nif(_9bf){\nif(_9bd==undefined||_9bd==null){\n_9bd=_9be.data.rows.length;\n}\nif(_9bd<_9bf.startIndex){\n_9bd=_9bf.startIndex;\n}else{\nif(_9bd>_9bf.startIndex+_9bf.rows.length){\n_9bd=_9bf.startIndex+_9bf.rows.length;\n}\n}\n$.fn.datagrid.defaults.view.insertRow.call(this,_9bc,_9bd,row);\nif(_9bd>=_9bf.startIndex+_9bf.rows.length){\n_9c1(_9bd,true);\n_9c1(_9bd,false);\n}\n_9bf.rows.splice(_9bd-_9bf.startIndex,0,row);\n}else{\n_9bf={value:row[opts.groupField],rows:[row],startIndex:_9be.data.rows.length};\n_9c0=this.groups.length;\ndc.body1.append(this.renderGroup.call(this,_9bc,_9c0,_9bf,true));\ndc.body2.append(this.renderGroup.call(this,_9bc,_9c0,_9bf,false));\nthis.groups.push(_9bf);\n_9be.data.rows.push(row);\n}\nthis.setGroupIndex(_9bc);\nthis.refreshGroupTitle(_9bc,_9c0);\nthis.resizeGroup(_9bc);\nfunction _9c1(_9c2,_9c3){\nvar _9c4=_9c3?1:2;\nvar _9c5=opts.finder.getTr(_9bc,_9c2-1,\"body\",_9c4);\nvar tr=opts.finder.getTr(_9bc,_9c2,\"body\",_9c4);\ntr.insertAfter(_9c5);\n};\n},updateRow:function(_9c6,_9c7,row){\nvar opts=$.data(_9c6,\"datagrid\").options;\n$.fn.datagrid.defaults.view.updateRow.call(this,_9c6,_9c7,row);\nvar tb=opts.finder.getTr(_9c6,_9c7,\"body\",2).closest(\"table.datagrid-btable\");\nvar _9c8=parseInt(tb.prev().attr(\"group-index\"));\nthis.refreshGroupTitle(_9c6,_9c8);\n},deleteRow:function(_9c9,_9ca){\nvar _9cb=$.data(_9c9,\"datagrid\");\nvar opts=_9cb.options;\nvar dc=_9cb.dc;\nvar body=dc.body1.add(dc.body2);\nvar tb=opts.finder.getTr(_9c9,_9ca,\"body\",2).closest(\"table.datagrid-btable\");\nvar _9cc=parseInt(tb.prev().attr(\"group-index\"));\n$.fn.datagrid.defaults.view.deleteRow.call(this,_9c9,_9ca);\nvar _9cd=this.groups[_9cc];\nif(_9cd.rows.length>1){\n_9cd.rows.splice(_9ca-_9cd.startIndex,1);\nthis.refreshGroupTitle(_9c9,_9cc);\n}else{\nbody.children(\"div.datagrid-group[group-index=\"+_9cc+\"]\").remove();\nfor(var i=_9cc+1;i<this.groups.length;i++){\nbody.children(\"div.datagrid-group[group-index=\"+i+\"]\").attr(\"group-index\",i-1);\n}\nthis.groups.splice(_9cc,1);\n}\nthis.setGroupIndex(_9c9);\n},setGroupIndex:function(_9ce){\nvar _9cf=0;\nfor(var i=0;i<this.groups.length;i++){\nvar _9d0=this.groups[i];\n_9d0.startIndex=_9cf;\n_9cf+=_9d0.rows.length;\n}\n}});\n$.fn.propertygrid.defaults=$.extend({},$.fn.datagrid.defaults,{groupHeight:28,expanderWidth:20,singleSelect:true,remoteSort:false,fitColumns:true,loadMsg:\"\",frozenColumns:[[{field:\"f\",width:20,resizable:false}]],columns:[[{field:\"name\",title:\"Name\",width:100,sortable:true},{field:\"value\",title:\"Value\",width:100,resizable:false}]],showGroup:false,groupView:_97c,groupField:\"group\",groupStyler:function(_9d1,rows){\nreturn \"\";\n},groupFormatter:function(_9d2,rows){\nreturn _9d2;\n}});\n})(jQuery);\n(function($){\nfunction _9d3(_9d4){\nvar _9d5=$.data(_9d4,\"treegrid\");\nvar opts=_9d5.options;\n$(_9d4).datagrid($.extend({},opts,{url:null,data:null,loader:function(){\nreturn false;\n},onBeforeLoad:function(){\nreturn false;\n},onLoadSuccess:function(){\n},onResizeColumn:function(_9d6,_9d7){\n_9e4(_9d4);\nopts.onResizeColumn.call(_9d4,_9d6,_9d7);\n},onBeforeSortColumn:function(sort,_9d8){\nif(opts.onBeforeSortColumn.call(_9d4,sort,_9d8)==false){\nreturn false;\n}\n},onSortColumn:function(sort,_9d9){\nopts.sortName=sort;\nopts.sortOrder=_9d9;\nif(opts.remoteSort){\n_9e3(_9d4);\n}else{\nvar data=$(_9d4).treegrid(\"getData\");\n_a12(_9d4,null,data);\n}\nopts.onSortColumn.call(_9d4,sort,_9d9);\n},onClickCell:function(_9da,_9db){\nopts.onClickCell.call(_9d4,_9db,find(_9d4,_9da));\n},onDblClickCell:function(_9dc,_9dd){\nopts.onDblClickCell.call(_9d4,_9dd,find(_9d4,_9dc));\n},onRowContextMenu:function(e,_9de){\nopts.onContextMenu.call(_9d4,e,find(_9d4,_9de));\n}}));\nvar _9df=$.data(_9d4,\"datagrid\").options;\nopts.columns=_9df.columns;\nopts.frozenColumns=_9df.frozenColumns;\n_9d5.dc=$.data(_9d4,\"datagrid\").dc;\nif(opts.pagination){\nvar _9e0=$(_9d4).datagrid(\"getPager\");\n_9e0.pagination({total:0,pageNumber:opts.pageNumber,pageSize:opts.pageSize,pageList:opts.pageList,onSelectPage:function(_9e1,_9e2){\nopts.pageNumber=_9e1||1;\nopts.pageSize=_9e2;\n_9e0.pagination(\"refresh\",{pageNumber:_9e1,pageSize:_9e2});\n_9e3(_9d4);\n}});\nopts.pageSize=_9e0.pagination(\"options\").pageSize;\n}\n};\nfunction _9e4(_9e5,_9e6){\nvar opts=$.data(_9e5,\"datagrid\").options;\nvar dc=$.data(_9e5,\"datagrid\").dc;\nif(!dc.body1.is(\":empty\")&&(!opts.nowrap||opts.autoRowHeight)){\nif(_9e6!=undefined){\nvar _9e7=_9e8(_9e5,_9e6);\nfor(var i=0;i<_9e7.length;i++){\n_9e9(_9e7[i][opts.idField]);\n}\n}\n}\n$(_9e5).datagrid(\"fixRowHeight\",_9e6);\nfunction _9e9(_9ea){\nvar tr1=opts.finder.getTr(_9e5,_9ea,\"body\",1);\nvar tr2=opts.finder.getTr(_9e5,_9ea,\"body\",2);\ntr1.css(\"height\",\"\");\ntr2.css(\"height\",\"\");\nvar _9eb=Math.max(tr1.height(),tr2.height());\ntr1.css(\"height\",_9eb);\ntr2.css(\"height\",_9eb);\n};\n};\nfunction _9ec(_9ed){\nvar dc=$.data(_9ed,\"datagrid\").dc;\nvar opts=$.data(_9ed,\"treegrid\").options;\nif(!opts.rownumbers){\nreturn;\n}\ndc.body1.find(\"div.datagrid-cell-rownumber\").each(function(i){\n$(this).html(i+1);\n});\n};\nfunction _9ee(_9ef){\nreturn function(e){\n$.fn.datagrid.defaults.rowEvents[_9ef?\"mouseover\":\"mouseout\"](e);\nvar tt=$(e.target);\nvar fn=_9ef?\"addClass\":\"removeClass\";\nif(tt.hasClass(\"tree-hit\")){\ntt.hasClass(\"tree-expanded\")?tt[fn](\"tree-expanded-hover\"):tt[fn](\"tree-collapsed-hover\");\n}\n};\n};\nfunction _9f0(e){\nvar tt=$(e.target);\nvar tr=tt.closest(\"tr.datagrid-row\");\nif(!tr.length||!tr.parent().length){\nreturn;\n}\nvar _9f1=tr.attr(\"node-id\");\nvar _9f2=_9f3(tr);\nif(tt.hasClass(\"tree-hit\")){\n_9f4(_9f2,_9f1);\n}else{\nif(tt.hasClass(\"tree-checkbox\")){\n_9f5(_9f2,_9f1);\n}else{\nvar opts=$(_9f2).datagrid(\"options\");\nif(!tt.parent().hasClass(\"datagrid-cell-check\")&&!opts.singleSelect&&e.shiftKey){\nvar rows=$(_9f2).treegrid(\"getChildren\");\nvar idx1=$.easyui.indexOfArray(rows,opts.idField,opts.lastSelectedIndex);\nvar idx2=$.easyui.indexOfArray(rows,opts.idField,_9f1);\nvar from=Math.min(Math.max(idx1,0),idx2);\nvar to=Math.max(idx1,idx2);\nvar row=rows[idx2];\nvar td=tt.closest(\"td[field]\",tr);\nif(td.length){\nvar _9f6=td.attr(\"field\");\nopts.onClickCell.call(_9f2,_9f1,_9f6,row[_9f6]);\n}\n$(_9f2).treegrid(\"clearSelections\");\nfor(var i=from;i<=to;i++){\n$(_9f2).treegrid(\"selectRow\",rows[i][opts.idField]);\n}\nopts.onClickRow.call(_9f2,row);\n}else{\n$.fn.datagrid.defaults.rowEvents.click(e);\n}\n}\n}\n};\nfunction _9f3(t){\nreturn $(t).closest(\"div.datagrid-view\").children(\".datagrid-f\")[0];\n};\nfunction _9f5(_9f7,_9f8,_9f9,_9fa){\nvar _9fb=$.data(_9f7,\"treegrid\");\nvar _9fc=_9fb.checkedRows;\nvar opts=_9fb.options;\nif(!opts.checkbox){\nreturn;\n}\nvar row=find(_9f7,_9f8);\nif(!row.checkState){\nreturn;\n}\nvar tr=opts.finder.getTr(_9f7,_9f8);\nvar ck=tr.find(\".tree-checkbox\");\nif(_9f9==undefined){\nif(ck.hasClass(\"tree-checkbox1\")){\n_9f9=false;\n}else{\nif(ck.hasClass(\"tree-checkbox0\")){\n_9f9=true;\n}else{\nif(row._checked==undefined){\nrow._checked=ck.hasClass(\"tree-checkbox1\");\n}\n_9f9=!row._checked;\n}\n}\n}\nrow._checked=_9f9;\nif(_9f9){\nif(ck.hasClass(\"tree-checkbox1\")){\nreturn;\n}\n}else{\nif(ck.hasClass(\"tree-checkbox0\")){\nreturn;\n}\n}\nif(!_9fa){\nif(opts.onBeforeCheckNode.call(_9f7,row,_9f9)==false){\nreturn;\n}\n}\nif(opts.cascadeCheck){\n_9fd(_9f7,row,_9f9);\n_9fe(_9f7,row);\n}else{\n_9ff(_9f7,row,_9f9?\"1\":\"0\");\n}\nif(!_9fa){\nopts.onCheckNode.call(_9f7,row,_9f9);\n}\n};\nfunction _9ff(_a00,row,flag){\nvar _a01=$.data(_a00,\"treegrid\");\nvar _a02=_a01.checkedRows;\nvar opts=_a01.options;\nif(!row.checkState||flag==undefined){\nreturn;\n}\nvar tr=opts.finder.getTr(_a00,row[opts.idField]);\nvar ck=tr.find(\".tree-checkbox\");\nif(!ck.length){\nreturn;\n}\nrow.checkState=[\"unchecked\",\"checked\",\"indeterminate\"][flag];\nrow.checked=(row.checkState==\"checked\");\nck.removeClass(\"tree-checkbox0 tree-checkbox1 tree-checkbox2\");\nck.addClass(\"tree-checkbox\"+flag);\nif(flag==0){\n$.easyui.removeArrayItem(_a02,opts.idField,row[opts.idField]);\n}else{\n$.easyui.addArrayItem(_a02,opts.idField,row);\n}\n};\nfunction _9fd(_a03,row,_a04){\nvar flag=_a04?1:0;\n_9ff(_a03,row,flag);\n$.easyui.forEach(row.children||[],true,function(r){\n_9ff(_a03,r,flag);\n});\n};\nfunction _9fe(_a05,row){\nvar opts=$.data(_a05,\"treegrid\").options;\nvar prow=_a06(_a05,row[opts.idField]);\nif(prow){\n_9ff(_a05,prow,_a07(prow));\n_9fe(_a05,prow);\n}\n};\nfunction _a07(row){\nvar len=0;\nvar c0=0;\nvar c1=0;\n$.easyui.forEach(row.children||[],false,function(r){\nif(r.checkState){\nlen++;\nif(r.checkState==\"checked\"){\nc1++;\n}else{\nif(r.checkState==\"unchecked\"){\nc0++;\n}\n}\n}\n});\nif(len==0){\nreturn undefined;\n}\nvar flag=0;\nif(c0==len){\nflag=0;\n}else{\nif(c1==len){\nflag=1;\n}else{\nflag=2;\n}\n}\nreturn flag;\n};\nfunction _a08(_a09,_a0a){\nvar opts=$.data(_a09,\"treegrid\").options;\nif(!opts.checkbox){\nreturn;\n}\nvar row=find(_a09,_a0a);\nvar tr=opts.finder.getTr(_a09,_a0a);\nvar ck=tr.find(\".tree-checkbox\");\nif(opts.view.hasCheckbox(_a09,row)){\nif(!ck.length){\nrow.checkState=row.checkState||\"unchecked\";\n$(\"<span class=\\\"tree-checkbox\\\"></span>\").insertBefore(tr.find(\".tree-title\"));\n}\nif(row.checkState==\"checked\"){\n_9f5(_a09,_a0a,true,true);\n}else{\nif(row.checkState==\"unchecked\"){\n_9f5(_a09,_a0a,false,true);\n}else{\nvar flag=_a07(row);\nif(flag===0){\n_9f5(_a09,_a0a,false,true);\n}else{\nif(flag===1){\n_9f5(_a09,_a0a,true,true);\n}\n}\n}\n}\n}else{\nck.remove();\nrow.checkState=undefined;\nrow.checked=undefined;\n_9fe(_a09,row);\n}\n};\nfunction _a0b(_a0c,_a0d){\nvar opts=$.data(_a0c,\"treegrid\").options;\nvar tr1=opts.finder.getTr(_a0c,_a0d,\"body\",1);\nvar tr2=opts.finder.getTr(_a0c,_a0d,\"body\",2);\nvar _a0e=$(_a0c).datagrid(\"getColumnFields\",true).length+(opts.rownumbers?1:0);\nvar _a0f=$(_a0c).datagrid(\"getColumnFields\",false).length;\n_a10(tr1,_a0e);\n_a10(tr2,_a0f);\nfunction _a10(tr,_a11){\n$(\"<tr class=\\\"treegrid-tr-tree\\\">\"+\"<td style=\\\"border:0px\\\" colspan=\\\"\"+_a11+\"\\\">\"+\"<div></div>\"+\"</td>\"+\"</tr>\").insertAfter(tr);\n};\n};\nfunction _a12(_a13,_a14,data,_a15,_a16){\nvar _a17=$.data(_a13,\"treegrid\");\nvar opts=_a17.options;\nvar dc=_a17.dc;\ndata=opts.loadFilter.call(_a13,data,_a14);\nvar node=find(_a13,_a14);\nif(node){\nvar _a18=opts.finder.getTr(_a13,_a14,\"body\",1);\nvar _a19=opts.finder.getTr(_a13,_a14,\"body\",2);\nvar cc1=_a18.next(\"tr.treegrid-tr-tree\").children(\"td\").children(\"div\");\nvar cc2=_a19.next(\"tr.treegrid-tr-tree\").children(\"td\").children(\"div\");\nif(!_a15){\nnode.children=[];\n}\n}else{\nvar cc1=dc.body1;\nvar cc2=dc.body2;\nif(!_a15){\n_a17.data=[];\n}\n}\nif(!_a15){\ncc1.empty();\ncc2.empty();\n}\nif(opts.view.onBeforeRender){\nopts.view.onBeforeRender.call(opts.view,_a13,_a14,data);\n}\nopts.view.render.call(opts.view,_a13,cc1,true);\nopts.view.render.call(opts.view,_a13,cc2,false);\nif(opts.showFooter){\nopts.view.renderFooter.call(opts.view,_a13,dc.footer1,true);\nopts.view.renderFooter.call(opts.view,_a13,dc.footer2,false);\n}\nif(opts.view.onAfterRender){\nopts.view.onAfterRender.call(opts.view,_a13);\n}\nif(!_a14&&opts.pagination){\nvar _a1a=$.data(_a13,\"treegrid\").total;\nvar _a1b=$(_a13).datagrid(\"getPager\");\nvar _a1c=_a1b.pagination(\"options\");\nif(_a1c.total!=data.total){\n_a1b.pagination(\"refresh\",{pageNumber:opts.pageNumber,total:data.total});\nif(opts.pageNumber!=_a1c.pageNumber&&_a1c.pageNumber>0){\nopts.pageNumber=_a1c.pageNumber;\n_9e3(_a13);\n}\n}\n}\n_9e4(_a13);\n_9ec(_a13);\n$(_a13).treegrid(\"showLines\");\n$(_a13).treegrid(\"setSelectionState\");\n$(_a13).treegrid(\"autoSizeColumn\");\nif(!_a16){\nopts.onLoadSuccess.call(_a13,node,data);\n}\n};\nfunction _9e3(_a1d,_a1e,_a1f,_a20,_a21){\nvar opts=$.data(_a1d,\"treegrid\").options;\nvar body=$(_a1d).datagrid(\"getPanel\").find(\"div.datagrid-body\");\nif(_a1e==undefined&&opts.queryParams){\nopts.queryParams.id=undefined;\n}\nif(_a1f){\nopts.queryParams=_a1f;\n}\nvar _a22=$.extend({},opts.queryParams);\nif(opts.pagination){\n$.extend(_a22,{page:opts.pageNumber,rows:opts.pageSize});\n}\nif(opts.sortName){\n$.extend(_a22,{sort:opts.sortName,order:opts.sortOrder});\n}\nvar row=find(_a1d,_a1e);\nif(opts.onBeforeLoad.call(_a1d,row,_a22)==false){\nreturn;\n}\nvar _a23=body.find(\"tr[node-id=\\\"\"+_a1e+\"\\\"] span.tree-folder\");\n_a23.addClass(\"tree-loading\");\n$(_a1d).treegrid(\"loading\");\nvar _a24=opts.loader.call(_a1d,_a22,function(data){\n_a23.removeClass(\"tree-loading\");\n$(_a1d).treegrid(\"loaded\");\n_a12(_a1d,_a1e,data,_a20);\nif(_a21){\n_a21();\n}\n},function(){\n_a23.removeClass(\"tree-loading\");\n$(_a1d).treegrid(\"loaded\");\nopts.onLoadError.apply(_a1d,arguments);\nif(_a21){\n_a21();\n}\n});\nif(_a24==false){\n_a23.removeClass(\"tree-loading\");\n$(_a1d).treegrid(\"loaded\");\n}\n};\nfunction _a25(_a26){\nvar _a27=_a28(_a26);\nreturn _a27.length?_a27[0]:null;\n};\nfunction _a28(_a29){\nreturn $.data(_a29,\"treegrid\").data;\n};\nfunction _a06(_a2a,_a2b){\nvar row=find(_a2a,_a2b);\nif(row._parentId){\nreturn find(_a2a,row._parentId);\n}else{\nreturn null;\n}\n};\nfunction _9e8(_a2c,_a2d){\nvar data=$.data(_a2c,\"treegrid\").data;\nif(_a2d){\nvar _a2e=find(_a2c,_a2d);\ndata=_a2e?(_a2e.children||[]):[];\n}\nvar _a2f=[];\n$.easyui.forEach(data,true,function(node){\n_a2f.push(node);\n});\nreturn _a2f;\n};\nfunction _a30(_a31,_a32){\nvar opts=$.data(_a31,\"treegrid\").options;\nvar tr=opts.finder.getTr(_a31,_a32);\nvar node=tr.children(\"td[field=\\\"\"+opts.treeField+\"\\\"]\");\nreturn node.find(\"span.tree-indent,span.tree-hit\").length;\n};\nfunction find(_a33,_a34){\nvar _a35=$.data(_a33,\"treegrid\");\nvar opts=_a35.options;\nvar _a36=null;\n$.easyui.forEach(_a35.data,true,function(node){\nif(node[opts.idField]==_a34){\n_a36=node;\nreturn false;\n}\n});\nreturn _a36;\n};\nfunction _a37(_a38,_a39){\nvar opts=$.data(_a38,\"treegrid\").options;\nvar row=find(_a38,_a39);\nvar tr=opts.finder.getTr(_a38,_a39);\nvar hit=tr.find(\"span.tree-hit\");\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-collapsed\")){\nreturn;\n}\nif(opts.onBeforeCollapse.call(_a38,row)==false){\nreturn;\n}\nhit.removeClass(\"tree-expanded tree-expanded-hover\").addClass(\"tree-collapsed\");\nhit.next().removeClass(\"tree-folder-open\");\nrow.state=\"closed\";\ntr=tr.next(\"tr.treegrid-tr-tree\");\nvar cc=tr.children(\"td\").children(\"div\");\nif(opts.animate){\ncc.slideUp(\"normal\",function(){\n$(_a38).treegrid(\"autoSizeColumn\");\n_9e4(_a38,_a39);\nopts.onCollapse.call(_a38,row);\n});\n}else{\ncc.hide();\n$(_a38).treegrid(\"autoSizeColumn\");\n_9e4(_a38,_a39);\nopts.onCollapse.call(_a38,row);\n}\n};\nfunction _a3a(_a3b,_a3c){\nvar opts=$.data(_a3b,\"treegrid\").options;\nvar tr=opts.finder.getTr(_a3b,_a3c);\nvar hit=tr.find(\"span.tree-hit\");\nvar row=find(_a3b,_a3c);\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-expanded\")){\nreturn;\n}\nif(opts.onBeforeExpand.call(_a3b,row)==false){\nreturn;\n}\nhit.removeClass(\"tree-collapsed tree-collapsed-hover\").addClass(\"tree-expanded\");\nhit.next().addClass(\"tree-folder-open\");\nvar _a3d=tr.next(\"tr.treegrid-tr-tree\");\nif(_a3d.length){\nvar cc=_a3d.children(\"td\").children(\"div\");\n_a3e(cc);\n}else{\n_a0b(_a3b,row[opts.idField]);\nvar _a3d=tr.next(\"tr.treegrid-tr-tree\");\nvar cc=_a3d.children(\"td\").children(\"div\");\ncc.hide();\nvar _a3f=$.extend({},opts.queryParams||{});\n_a3f.id=row[opts.idField];\n_9e3(_a3b,row[opts.idField],_a3f,true,function(){\nif(cc.is(\":empty\")){\n_a3d.remove();\n}else{\n_a3e(cc);\n}\n});\n}\nfunction _a3e(cc){\nrow.state=\"open\";\nif(opts.animate){\ncc.slideDown(\"normal\",function(){\n$(_a3b).treegrid(\"autoSizeColumn\");\n_9e4(_a3b,_a3c);\nopts.onExpand.call(_a3b,row);\n});\n}else{\ncc.show();\n$(_a3b).treegrid(\"autoSizeColumn\");\n_9e4(_a3b,_a3c);\nopts.onExpand.call(_a3b,row);\n}\n};\n};\nfunction _9f4(_a40,_a41){\nvar opts=$.data(_a40,\"treegrid\").options;\nvar tr=opts.finder.getTr(_a40,_a41);\nvar hit=tr.find(\"span.tree-hit\");\nif(hit.hasClass(\"tree-expanded\")){\n_a37(_a40,_a41);\n}else{\n_a3a(_a40,_a41);\n}\n};\nfunction _a42(_a43,_a44){\nvar opts=$.data(_a43,\"treegrid\").options;\nvar _a45=_9e8(_a43,_a44);\nif(_a44){\n_a45.unshift(find(_a43,_a44));\n}\nfor(var i=0;i<_a45.length;i++){\n_a37(_a43,_a45[i][opts.idField]);\n}\n};\nfunction _a46(_a47,_a48){\nvar opts=$.data(_a47,\"treegrid\").options;\nvar _a49=_9e8(_a47,_a48);\nif(_a48){\n_a49.unshift(find(_a47,_a48));\n}\nfor(var i=0;i<_a49.length;i++){\n_a3a(_a47,_a49[i][opts.idField]);\n}\n};\nfunction _a4a(_a4b,_a4c){\nvar opts=$.data(_a4b,\"treegrid\").options;\nvar ids=[];\nvar p=_a06(_a4b,_a4c);\nwhile(p){\nvar id=p[opts.idField];\nids.unshift(id);\np=_a06(_a4b,id);\n}\nfor(var i=0;i<ids.length;i++){\n_a3a(_a4b,ids[i]);\n}\n};\nfunction _a4d(_a4e,_a4f){\nvar _a50=$.data(_a4e,\"treegrid\");\nvar opts=_a50.options;\nif(_a4f.parent){\nvar tr=opts.finder.getTr(_a4e,_a4f.parent);\nif(tr.next(\"tr.treegrid-tr-tree\").length==0){\n_a0b(_a4e,_a4f.parent);\n}\nvar cell=tr.children(\"td[field=\\\"\"+opts.treeField+\"\\\"]\").children(\"div.datagrid-cell\");\nvar _a51=cell.children(\"span.tree-icon\");\nif(_a51.hasClass(\"tree-file\")){\n_a51.removeClass(\"tree-file\").addClass(\"tree-folder tree-folder-open\");\nvar hit=$(\"<span class=\\\"tree-hit tree-expanded\\\"></span>\").insertBefore(_a51);\nif(hit.prev().length){\nhit.prev().remove();\n}\n}\n}\n_a12(_a4e,_a4f.parent,_a4f.data,_a50.data.length>0,true);\n};\nfunction _a52(_a53,_a54){\nvar ref=_a54.before||_a54.after;\nvar opts=$.data(_a53,\"treegrid\").options;\nvar _a55=_a06(_a53,ref);\n_a4d(_a53,{parent:(_a55?_a55[opts.idField]:null),data:[_a54.data]});\nvar _a56=_a55?_a55.children:$(_a53).treegrid(\"getRoots\");\nfor(var i=0;i<_a56.length;i++){\nif(_a56[i][opts.idField]==ref){\nvar _a57=_a56[_a56.length-1];\n_a56.splice(_a54.before?i:(i+1),0,_a57);\n_a56.splice(_a56.length-1,1);\nbreak;\n}\n}\n_a58(true);\n_a58(false);\n_9ec(_a53);\n$(_a53).treegrid(\"showLines\");\nfunction _a58(_a59){\nvar _a5a=_a59?1:2;\nvar tr=opts.finder.getTr(_a53,_a54.data[opts.idField],\"body\",_a5a);\nvar _a5b=tr.closest(\"table.datagrid-btable\");\ntr=tr.parent().children();\nvar dest=opts.finder.getTr(_a53,ref,\"body\",_a5a);\nif(_a54.before){\ntr.insertBefore(dest);\n}else{\nvar sub=dest.next(\"tr.treegrid-tr-tree\");\ntr.insertAfter(sub.length?sub:dest);\n}\n_a5b.remove();\n};\n};\nfunction _a5c(_a5d,_a5e){\nvar _a5f=$.data(_a5d,\"treegrid\");\nvar opts=_a5f.options;\nvar prow=_a06(_a5d,_a5e);\n$(_a5d).datagrid(\"deleteRow\",_a5e);\n$.easyui.removeArrayItem(_a5f.checkedRows,opts.idField,_a5e);\n_9ec(_a5d);\nif(prow){\n_a08(_a5d,prow[opts.idField]);\n}\n_a5f.total-=1;\n$(_a5d).datagrid(\"getPager\").pagination(\"refresh\",{total:_a5f.total});\n$(_a5d).treegrid(\"showLines\");\n};\nfunction _a60(_a61){\nvar t=$(_a61);\nvar opts=t.treegrid(\"options\");\nif(opts.lines){\nt.treegrid(\"getPanel\").addClass(\"tree-lines\");\n}else{\nt.treegrid(\"getPanel\").removeClass(\"tree-lines\");\nreturn;\n}\nt.treegrid(\"getPanel\").find(\"span.tree-indent\").removeClass(\"tree-line tree-join tree-joinbottom\");\nt.treegrid(\"getPanel\").find(\"div.datagrid-cell\").removeClass(\"tree-node-last tree-root-first tree-root-one\");\nvar _a62=t.treegrid(\"getRoots\");\nif(_a62.length>1){\n_a63(_a62[0]).addClass(\"tree-root-first\");\n}else{\nif(_a62.length==1){\n_a63(_a62[0]).addClass(\"tree-root-one\");\n}\n}\n_a64(_a62);\n_a65(_a62);\nfunction _a64(_a66){\n$.map(_a66,function(node){\nif(node.children&&node.children.length){\n_a64(node.children);\n}else{\nvar cell=_a63(node);\ncell.find(\".tree-icon\").prev().addClass(\"tree-join\");\n}\n});\nif(_a66.length){\nvar cell=_a63(_a66[_a66.length-1]);\ncell.addClass(\"tree-node-last\");\ncell.find(\".tree-join\").removeClass(\"tree-join\").addClass(\"tree-joinbottom\");\n}\n};\nfunction _a65(_a67){\n$.map(_a67,function(node){\nif(node.children&&node.children.length){\n_a65(node.children);\n}\n});\nfor(var i=0;i<_a67.length-1;i++){\nvar node=_a67[i];\nvar _a68=t.treegrid(\"getLevel\",node[opts.idField]);\nvar tr=opts.finder.getTr(_a61,node[opts.idField]);\nvar cc=tr.next().find(\"tr.datagrid-row td[field=\\\"\"+opts.treeField+\"\\\"] div.datagrid-cell\");\ncc.find(\"span:eq(\"+(_a68-1)+\")\").addClass(\"tree-line\");\n}\n};\nfunction _a63(node){\nvar tr=opts.finder.getTr(_a61,node[opts.idField]);\nvar cell=tr.find(\"td[field=\\\"\"+opts.treeField+\"\\\"] div.datagrid-cell\");\nreturn cell;\n};\n};\n$.fn.treegrid=function(_a69,_a6a){\nif(typeof _a69==\"string\"){\nvar _a6b=$.fn.treegrid.methods[_a69];\nif(_a6b){\nreturn _a6b(this,_a6a);\n}else{\nreturn this.datagrid(_a69,_a6a);\n}\n}\n_a69=_a69||{};\nreturn this.each(function(){\nvar _a6c=$.data(this,\"treegrid\");\nif(_a6c){\n$.extend(_a6c.options,_a69);\n}else{\n_a6c=$.data(this,\"treegrid\",{options:$.extend({},$.fn.treegrid.defaults,$.fn.treegrid.parseOptions(this),_a69),data:[],checkedRows:[],tmpIds:[]});\n}\n_9d3(this);\nif(_a6c.options.data){\n$(this).treegrid(\"loadData\",_a6c.options.data);\n}\n_9e3(this);\n});\n};\n$.fn.treegrid.methods={options:function(jq){\nreturn $.data(jq[0],\"treegrid\").options;\n},resize:function(jq,_a6d){\nreturn jq.each(function(){\n$(this).datagrid(\"resize\",_a6d);\n});\n},fixRowHeight:function(jq,_a6e){\nreturn jq.each(function(){\n_9e4(this,_a6e);\n});\n},loadData:function(jq,data){\nreturn jq.each(function(){\n_a12(this,data.parent,data);\n});\n},load:function(jq,_a6f){\nreturn jq.each(function(){\n$(this).treegrid(\"options\").pageNumber=1;\n$(this).treegrid(\"getPager\").pagination({pageNumber:1});\n$(this).treegrid(\"reload\",_a6f);\n});\n},reload:function(jq,id){\nreturn jq.each(function(){\nvar opts=$(this).treegrid(\"options\");\nvar _a70={};\nif(typeof id==\"object\"){\n_a70=id;\n}else{\n_a70=$.extend({},opts.queryParams);\n_a70.id=id;\n}\nif(_a70.id){\nvar node=$(this).treegrid(\"find\",_a70.id);\nif(node.children){\nnode.children.splice(0,node.children.length);\n}\nopts.queryParams=_a70;\nvar tr=opts.finder.getTr(this,_a70.id);\ntr.next(\"tr.treegrid-tr-tree\").remove();\ntr.find(\"span.tree-hit\").removeClass(\"tree-expanded tree-expanded-hover\").addClass(\"tree-collapsed\");\n_a3a(this,_a70.id);\n}else{\n_9e3(this,null,_a70);\n}\n});\n},reloadFooter:function(jq,_a71){\nreturn jq.each(function(){\nvar opts=$.data(this,\"treegrid\").options;\nvar dc=$.data(this,\"datagrid\").dc;\nif(_a71){\n$.data(this,\"treegrid\").footer=_a71;\n}\nif(opts.showFooter){\nopts.view.renderFooter.call(opts.view,this,dc.footer1,true);\nopts.view.renderFooter.call(opts.view,this,dc.footer2,false);\nif(opts.view.onAfterRender){\nopts.view.onAfterRender.call(opts.view,this);\n}\n$(this).treegrid(\"fixRowHeight\");\n}\n});\n},getData:function(jq){\nreturn $.data(jq[0],\"treegrid\").data;\n},getFooterRows:function(jq){\nreturn $.data(jq[0],\"treegrid\").footer;\n},getRoot:function(jq){\nreturn _a25(jq[0]);\n},getRoots:function(jq){\nreturn _a28(jq[0]);\n},getParent:function(jq,id){\nreturn _a06(jq[0],id);\n},getChildren:function(jq,id){\nreturn _9e8(jq[0],id);\n},getLevel:function(jq,id){\nreturn _a30(jq[0],id);\n},find:function(jq,id){\nreturn find(jq[0],id);\n},isLeaf:function(jq,id){\nvar opts=$.data(jq[0],\"treegrid\").options;\nvar tr=opts.finder.getTr(jq[0],id);\nvar hit=tr.find(\"span.tree-hit\");\nreturn hit.length==0;\n},select:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"selectRow\",id);\n});\n},unselect:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"unselectRow\",id);\n});\n},collapse:function(jq,id){\nreturn jq.each(function(){\n_a37(this,id);\n});\n},expand:function(jq,id){\nreturn jq.each(function(){\n_a3a(this,id);\n});\n},toggle:function(jq,id){\nreturn jq.each(function(){\n_9f4(this,id);\n});\n},collapseAll:function(jq,id){\nreturn jq.each(function(){\n_a42(this,id);\n});\n},expandAll:function(jq,id){\nreturn jq.each(function(){\n_a46(this,id);\n});\n},expandTo:function(jq,id){\nreturn jq.each(function(){\n_a4a(this,id);\n});\n},append:function(jq,_a72){\nreturn jq.each(function(){\n_a4d(this,_a72);\n});\n},insert:function(jq,_a73){\nreturn jq.each(function(){\n_a52(this,_a73);\n});\n},remove:function(jq,id){\nreturn jq.each(function(){\n_a5c(this,id);\n});\n},pop:function(jq,id){\nvar row=jq.treegrid(\"find\",id);\njq.treegrid(\"remove\",id);\nreturn row;\n},refresh:function(jq,id){\nreturn jq.each(function(){\nvar opts=$.data(this,\"treegrid\").options;\nopts.view.refreshRow.call(opts.view,this,id);\n});\n},update:function(jq,_a74){\nreturn jq.each(function(){\nvar opts=$.data(this,\"treegrid\").options;\nvar row=_a74.row;\nopts.view.updateRow.call(opts.view,this,_a74.id,row);\nif(row.checked!=undefined){\nrow=find(this,_a74.id);\n$.extend(row,{checkState:row.checked?\"checked\":(row.checked===false?\"unchecked\":undefined)});\n_a08(this,_a74.id);\n}\n});\n},beginEdit:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"beginEdit\",id);\n$(this).treegrid(\"fixRowHeight\",id);\n});\n},endEdit:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"endEdit\",id);\n});\n},cancelEdit:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"cancelEdit\",id);\n});\n},showLines:function(jq){\nreturn jq.each(function(){\n_a60(this);\n});\n},setSelectionState:function(jq){\nreturn jq.each(function(){\n$(this).datagrid(\"setSelectionState\");\nvar _a75=$(this).data(\"treegrid\");\nfor(var i=0;i<_a75.tmpIds.length;i++){\n_9f5(this,_a75.tmpIds[i],true,true);\n}\n_a75.tmpIds=[];\n});\n},getCheckedNodes:function(jq,_a76){\n_a76=_a76||\"checked\";\nvar rows=[];\n$.easyui.forEach(jq.data(\"treegrid\").checkedRows,false,function(row){\nif(row.checkState==_a76){\nrows.push(row);\n}\n});\nreturn rows;\n},checkNode:function(jq,id){\nreturn jq.each(function(){\n_9f5(this,id,true);\n});\n},uncheckNode:function(jq,id){\nreturn jq.each(function(){\n_9f5(this,id,false);\n});\n},clearChecked:function(jq){\nreturn jq.each(function(){\nvar _a77=this;\nvar opts=$(_a77).treegrid(\"options\");\n$(_a77).datagrid(\"clearChecked\");\n$.map($(_a77).treegrid(\"getCheckedNodes\"),function(row){\n_9f5(_a77,row[opts.idField],false,true);\n});\n});\n}};\n$.fn.treegrid.parseOptions=function(_a78){\nreturn $.extend({},$.fn.datagrid.parseOptions(_a78),$.parser.parseOptions(_a78,[\"treeField\",{checkbox:\"boolean\",cascadeCheck:\"boolean\",onlyLeafCheck:\"boolean\"},{animate:\"boolean\"}]));\n};\nvar _a79=$.extend({},$.fn.datagrid.defaults.view,{render:function(_a7a,_a7b,_a7c){\nvar opts=$.data(_a7a,\"treegrid\").options;\nvar _a7d=$(_a7a).datagrid(\"getColumnFields\",_a7c);\nvar _a7e=$.data(_a7a,\"datagrid\").rowIdPrefix;\nif(_a7c){\nif(!(opts.rownumbers||(opts.frozenColumns&&opts.frozenColumns.length))){\nreturn;\n}\n}\nvar view=this;\nif(this.treeNodes&&this.treeNodes.length){\nvar _a7f=_a80.call(this,_a7c,this.treeLevel,this.treeNodes);\n$(_a7b).append(_a7f.join(\"\"));\n}\nfunction _a80(_a81,_a82,_a83){\nvar _a84=$(_a7a).treegrid(\"getParent\",_a83[0][opts.idField]);\nvar _a85=(_a84?_a84.children.length:$(_a7a).treegrid(\"getRoots\").length)-_a83.length;\nvar _a86=[\"<table class=\\\"datagrid-btable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"];\nfor(var i=0;i<_a83.length;i++){\nvar row=_a83[i];\nif(row.state!=\"open\"&&row.state!=\"closed\"){\nrow.state=\"open\";\n}\nvar css=opts.rowStyler?opts.rowStyler.call(_a7a,row):\"\";\nvar cs=this.getStyleValue(css);\nvar cls=\"class=\\\"datagrid-row \"+(_a85++%2&&opts.striped?\"datagrid-row-alt \":\" \")+cs.c+\"\\\"\";\nvar _a87=cs.s?\"style=\\\"\"+cs.s+\"\\\"\":\"\";\nvar _a88=_a7e+\"-\"+(_a81?1:2)+\"-\"+row[opts.idField];\n_a86.push(\"<tr id=\\\"\"+_a88+\"\\\" node-id=\\\"\"+row[opts.idField]+\"\\\" \"+cls+\" \"+_a87+\">\");\n_a86=_a86.concat(view.renderRow.call(view,_a7a,_a7d,_a81,_a82,row));\n_a86.push(\"</tr>\");\nif(row.children&&row.children.length){\nvar tt=_a80.call(this,_a81,_a82+1,row.children);\nvar v=row.state==\"closed\"?\"none\":\"block\";\n_a86.push(\"<tr class=\\\"treegrid-tr-tree\\\"><td style=\\\"border:0px\\\" colspan=\"+(_a7d.length+(opts.rownumbers?1:0))+\"><div style=\\\"display:\"+v+\"\\\">\");\n_a86=_a86.concat(tt);\n_a86.push(\"</div></td></tr>\");\n}\n}\n_a86.push(\"</tbody></table>\");\nreturn _a86;\n};\n},renderFooter:function(_a89,_a8a,_a8b){\nvar opts=$.data(_a89,\"treegrid\").options;\nvar rows=$.data(_a89,\"treegrid\").footer||[];\nvar _a8c=$(_a89).datagrid(\"getColumnFields\",_a8b);\nvar _a8d=[\"<table class=\\\"datagrid-ftable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"];\nfor(var i=0;i<rows.length;i++){\nvar row=rows[i];\nrow[opts.idField]=row[opts.idField]||(\"foot-row-id\"+i);\n_a8d.push(\"<tr class=\\\"datagrid-row\\\" node-id=\\\"\"+row[opts.idField]+\"\\\">\");\n_a8d.push(this.renderRow.call(this,_a89,_a8c,_a8b,0,row));\n_a8d.push(\"</tr>\");\n}\n_a8d.push(\"</tbody></table>\");\n$(_a8a).html(_a8d.join(\"\"));\n},renderRow:function(_a8e,_a8f,_a90,_a91,row){\nvar _a92=$.data(_a8e,\"treegrid\");\nvar opts=_a92.options;\nvar cc=[];\nif(_a90&&opts.rownumbers){\ncc.push(\"<td class=\\\"datagrid-td-rownumber\\\"><div class=\\\"datagrid-cell-rownumber\\\">0</div></td>\");\n}\nfor(var i=0;i<_a8f.length;i++){\nvar _a93=_a8f[i];\nvar col=$(_a8e).datagrid(\"getColumnOption\",_a93);\nif(col){\nvar css=col.styler?(col.styler(row[_a93],row)||\"\"):\"\";\nvar cs=this.getStyleValue(css);\nvar cls=cs.c?\"class=\\\"\"+cs.c+\"\\\"\":\"\";\nvar _a94=col.hidden?\"style=\\\"display:none;\"+cs.s+\"\\\"\":(cs.s?\"style=\\\"\"+cs.s+\"\\\"\":\"\");\ncc.push(\"<td field=\\\"\"+_a93+\"\\\" \"+cls+\" \"+_a94+\">\");\nvar _a94=\"\";\nif(!col.checkbox){\nif(col.align){\n_a94+=\"text-align:\"+col.align+\";\";\n}\nif(!opts.nowrap){\n_a94+=\"white-space:normal;height:auto;\";\n}else{\nif(opts.autoRowHeight){\n_a94+=\"height:auto;\";\n}\n}\n}\ncc.push(\"<div style=\\\"\"+_a94+\"\\\" \");\nif(col.checkbox){\ncc.push(\"class=\\\"datagrid-cell-check \");\n}else{\ncc.push(\"class=\\\"datagrid-cell \"+col.cellClass);\n}\nif(_a93==opts.treeField){\ncc.push(\" tree-node\");\n}\ncc.push(\"\\\">\");\nif(col.checkbox){\nif(row.checked){\ncc.push(\"<input type=\\\"checkbox\\\" checked=\\\"checked\\\"\");\n}else{\ncc.push(\"<input type=\\\"checkbox\\\"\");\n}\ncc.push(\" name=\\\"\"+_a93+\"\\\" value=\\\"\"+(row[_a93]!=undefined?row[_a93]:\"\")+\"\\\">\");\n}else{\nvar val=null;\nif(col.formatter){\nval=col.formatter(row[_a93],row);\n}else{\nval=row[_a93];\n}\nif(_a93==opts.treeField){\nfor(var j=0;j<_a91;j++){\ncc.push(\"<span class=\\\"tree-indent\\\"></span>\");\n}\nif(row.state==\"closed\"){\ncc.push(\"<span class=\\\"tree-hit tree-collapsed\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-folder \"+(row.iconCls?row.iconCls:\"\")+\"\\\"></span>\");\n}else{\nif(row.children&&row.children.length){\ncc.push(\"<span class=\\\"tree-hit tree-expanded\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-folder tree-folder-open \"+(row.iconCls?row.iconCls:\"\")+\"\\\"></span>\");\n}else{\ncc.push(\"<span class=\\\"tree-indent\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-file \"+(row.iconCls?row.iconCls:\"\")+\"\\\"></span>\");\n}\n}\nif(this.hasCheckbox(_a8e,row)){\nvar flag=0;\nvar crow=$.easyui.getArrayItem(_a92.checkedRows,opts.idField,row[opts.idField]);\nif(crow){\nflag=crow.checkState==\"checked\"?1:2;\nrow.checkState=crow.checkState;\nrow.checked=crow.checked;\n$.easyui.addArrayItem(_a92.checkedRows,opts.idField,row);\n}else{\nvar prow=$.easyui.getArrayItem(_a92.checkedRows,opts.idField,row._parentId);\nif(prow&&prow.checkState==\"checked\"&&opts.cascadeCheck){\nflag=1;\nrow.checked=true;\n$.easyui.addArrayItem(_a92.checkedRows,opts.idField,row);\n}else{\nif(row.checked){\n$.easyui.addArrayItem(_a92.tmpIds,row[opts.idField]);\n}\n}\nrow.checkState=flag?\"checked\":\"unchecked\";\n}\ncc.push(\"<span class=\\\"tree-checkbox tree-checkbox\"+flag+\"\\\"></span>\");\n}else{\nrow.checkState=undefined;\nrow.checked=undefined;\n}\ncc.push(\"<span class=\\\"tree-title\\\">\"+val+\"</span>\");\n}else{\ncc.push(val);\n}\n}\ncc.push(\"</div>\");\ncc.push(\"</td>\");\n}\n}\nreturn cc.join(\"\");\n},hasCheckbox:function(_a95,row){\nvar opts=$.data(_a95,\"treegrid\").options;\nif(opts.checkbox){\nif($.isFunction(opts.checkbox)){\nif(opts.checkbox.call(_a95,row)){\nreturn true;\n}else{\nreturn false;\n}\n}else{\nif(opts.onlyLeafCheck){\nif(row.state==\"open\"&&!(row.children&&row.children.length)){\nreturn true;\n}\n}else{\nreturn true;\n}\n}\n}\nreturn false;\n},refreshRow:function(_a96,id){\nthis.updateRow.call(this,_a96,id,{});\n},updateRow:function(_a97,id,row){\nvar opts=$.data(_a97,\"treegrid\").options;\nvar _a98=$(_a97).treegrid(\"find\",id);\n$.extend(_a98,row);\nvar _a99=$(_a97).treegrid(\"getLevel\",id)-1;\nvar _a9a=opts.rowStyler?opts.rowStyler.call(_a97,_a98):\"\";\nvar _a9b=$.data(_a97,\"datagrid\").rowIdPrefix;\nvar _a9c=_a98[opts.idField];\nfunction _a9d(_a9e){\nvar _a9f=$(_a97).treegrid(\"getColumnFields\",_a9e);\nvar tr=opts.finder.getTr(_a97,id,\"body\",(_a9e?1:2));\nvar _aa0=tr.find(\"div.datagrid-cell-rownumber\").html();\nvar _aa1=tr.find(\"div.datagrid-cell-check input[type=checkbox]\").is(\":checked\");\ntr.html(this.renderRow(_a97,_a9f,_a9e,_a99,_a98));\ntr.attr(\"style\",_a9a||\"\");\ntr.find(\"div.datagrid-cell-rownumber\").html(_aa0);\nif(_aa1){\ntr.find(\"div.datagrid-cell-check input[type=checkbox]\")._propAttr(\"checked\",true);\n}\nif(_a9c!=id){\ntr.attr(\"id\",_a9b+\"-\"+(_a9e?1:2)+\"-\"+_a9c);\ntr.attr(\"node-id\",_a9c);\n}\n};\n_a9d.call(this,true);\n_a9d.call(this,false);\n$(_a97).treegrid(\"fixRowHeight\",id);\n},deleteRow:function(_aa2,id){\nvar opts=$.data(_aa2,\"treegrid\").options;\nvar tr=opts.finder.getTr(_aa2,id);\ntr.next(\"tr.treegrid-tr-tree\").remove();\ntr.remove();\nvar _aa3=del(id);\nif(_aa3){\nif(_aa3.children.length==0){\ntr=opts.finder.getTr(_aa2,_aa3[opts.idField]);\ntr.next(\"tr.treegrid-tr-tree\").remove();\nvar cell=tr.children(\"td[field=\\\"\"+opts.treeField+\"\\\"]\").children(\"div.datagrid-cell\");\ncell.find(\".tree-icon\").removeClass(\"tree-folder\").addClass(\"tree-file\");\ncell.find(\".tree-hit\").remove();\n$(\"<span class=\\\"tree-indent\\\"></span>\").prependTo(cell);\n}\n}\nthis.setEmptyMsg(_aa2);\nfunction del(id){\nvar cc;\nvar _aa4=$(_aa2).treegrid(\"getParent\",id);\nif(_aa4){\ncc=_aa4.children;\n}else{\ncc=$(_aa2).treegrid(\"getData\");\n}\nfor(var i=0;i<cc.length;i++){\nif(cc[i][opts.idField]==id){\ncc.splice(i,1);\nbreak;\n}\n}\nreturn _aa4;\n};\n},onBeforeRender:function(_aa5,_aa6,data){\nif($.isArray(_aa6)){\ndata={total:_aa6.length,rows:_aa6};\n_aa6=null;\n}\nif(!data){\nreturn false;\n}\nvar _aa7=$.data(_aa5,\"treegrid\");\nvar opts=_aa7.options;\nif(data.length==undefined){\nif(data.footer){\n_aa7.footer=data.footer;\n}\nif(data.total){\n_aa7.total=data.total;\n}\ndata=this.transfer(_aa5,_aa6,data.rows);\n}else{\nfunction _aa8(_aa9,_aaa){\nfor(var i=0;i<_aa9.length;i++){\nvar row=_aa9[i];\nrow._parentId=_aaa;\nif(row.children&&row.children.length){\n_aa8(row.children,row[opts.idField]);\n}\n}\n};\n_aa8(data,_aa6);\n}\nthis.sort(_aa5,data);\nthis.treeNodes=data;\nthis.treeLevel=$(_aa5).treegrid(\"getLevel\",_aa6);\nvar node=find(_aa5,_aa6);\nif(node){\nif(node.children){\nnode.children=node.children.concat(data);\n}else{\nnode.children=data;\n}\n}else{\n_aa7.data=_aa7.data.concat(data);\n}\n},sort:function(_aab,data){\nvar opts=$.data(_aab,\"treegrid\").options;\nif(!opts.remoteSort&&opts.sortName){\nvar _aac=opts.sortName.split(\",\");\nvar _aad=opts.sortOrder.split(\",\");\n_aae(data);\n}\nfunction _aae(rows){\nrows.sort(function(r1,r2){\nvar r=0;\nfor(var i=0;i<_aac.length;i++){\nvar sn=_aac[i];\nvar so=_aad[i];\nvar col=$(_aab).treegrid(\"getColumnOption\",sn);\nvar _aaf=col.sorter||function(a,b){\nreturn a==b?0:(a>b?1:-1);\n};\nr=_aaf(r1[sn],r2[sn])*(so==\"asc\"?1:-1);\nif(r!=0){\nreturn r;\n}\n}\nreturn r;\n});\nfor(var i=0;i<rows.length;i++){\nvar _ab0=rows[i].children;\nif(_ab0&&_ab0.length){\n_aae(_ab0);\n}\n}\n};\n},transfer:function(_ab1,_ab2,data){\nvar opts=$.data(_ab1,\"treegrid\").options;\nvar rows=$.extend([],data);\nvar _ab3=_ab4(_ab2,rows);\nvar toDo=$.extend([],_ab3);\nwhile(toDo.length){\nvar node=toDo.shift();\nvar _ab5=_ab4(node[opts.idField],rows);\nif(_ab5.length){\nif(node.children){\nnode.children=node.children.concat(_ab5);\n}else{\nnode.children=_ab5;\n}\ntoDo=toDo.concat(_ab5);\n}\n}\nreturn _ab3;\nfunction _ab4(_ab6,rows){\nvar rr=[];\nfor(var i=0;i<rows.length;i++){\nvar row=rows[i];\nif(row._parentId==_ab6){\nrr.push(row);\nrows.splice(i,1);\ni--;\n}\n}\nreturn rr;\n};\n}});\n$.fn.treegrid.defaults=$.extend({},$.fn.datagrid.defaults,{treeField:null,checkbox:false,cascadeCheck:true,onlyLeafCheck:false,lines:false,animate:false,singleSelect:true,view:_a79,rowEvents:$.extend({},$.fn.datagrid.defaults.rowEvents,{mouseover:_9ee(true),mouseout:_9ee(false),click:_9f0}),loader:function(_ab7,_ab8,_ab9){\nvar opts=$(this).treegrid(\"options\");\nif(!opts.url){\nreturn false;\n}\n$.ajax({type:opts.method,url:opts.url,data:_ab7,dataType:\"json\",success:function(data){\n_ab8(data);\n},error:function(){\n_ab9.apply(this,arguments);\n}});\n},loadFilter:function(data,_aba){\nreturn data;\n},finder:{getTr:function(_abb,id,type,_abc){\ntype=type||\"body\";\n_abc=_abc||0;\nvar dc=$.data(_abb,\"datagrid\").dc;\nif(_abc==0){\nvar opts=$.data(_abb,\"treegrid\").options;\nvar tr1=opts.finder.getTr(_abb,id,type,1);\nvar tr2=opts.finder.getTr(_abb,id,type,2);\nreturn tr1.add(tr2);\n}else{\nif(type==\"body\"){\nvar tr=$(\"#\"+$.data(_abb,\"datagrid\").rowIdPrefix+\"-\"+_abc+\"-\"+id);\nif(!tr.length){\ntr=(_abc==1?dc.body1:dc.body2).find(\"tr[node-id=\\\"\"+id+\"\\\"]\");\n}\nreturn tr;\n}else{\nif(type==\"footer\"){\nreturn (_abc==1?dc.footer1:dc.footer2).find(\"tr[node-id=\\\"\"+id+\"\\\"]\");\n}else{\nif(type==\"selected\"){\nreturn (_abc==1?dc.body1:dc.body2).find(\"tr.datagrid-row-selected\");\n}else{\nif(type==\"highlight\"){\nreturn (_abc==1?dc.body1:dc.body2).find(\"tr.datagrid-row-over\");\n}else{\nif(type==\"checked\"){\nreturn (_abc==1?dc.body1:dc.body2).find(\"tr.datagrid-row-checked\");\n}else{\nif(type==\"last\"){\nreturn (_abc==1?dc.body1:dc.body2).find(\"tr:last[node-id]\");\n}else{\nif(type==\"allbody\"){\nreturn (_abc==1?dc.body1:dc.body2).find(\"tr[node-id]\");\n}else{\nif(type==\"allfooter\"){\nreturn (_abc==1?dc.footer1:dc.footer2).find(\"tr[node-id]\");\n}\n}\n}\n}\n}\n}\n}\n}\n}\n},getRow:function(_abd,p){\nvar id=(typeof p==\"object\")?p.attr(\"node-id\"):p;\nreturn $(_abd).treegrid(\"find\",id);\n},getRows:function(_abe){\nreturn $(_abe).treegrid(\"getChildren\");\n}},onBeforeLoad:function(row,_abf){\n},onLoadSuccess:function(row,data){\n},onLoadError:function(){\n},onBeforeCollapse:function(row){\n},onCollapse:function(row){\n},onBeforeExpand:function(row){\n},onExpand:function(row){\n},onClickRow:function(row){\n},onDblClickRow:function(row){\n},onClickCell:function(_ac0,row){\n},onDblClickCell:function(_ac1,row){\n},onContextMenu:function(e,row){\n},onBeforeEdit:function(row){\n},onAfterEdit:function(row,_ac2){\n},onCancelEdit:function(row){\n},onBeforeCheckNode:function(row,_ac3){\n},onCheckNode:function(row,_ac4){\n}});\n})(jQuery);\n(function($){\nfunction _ac5(_ac6){\nvar opts=$.data(_ac6,\"datalist\").options;\n$(_ac6).datagrid($.extend({},opts,{cls:\"datalist\"+(opts.lines?\" datalist-lines\":\"\"),frozenColumns:(opts.frozenColumns&&opts.frozenColumns.length)?opts.frozenColumns:(opts.checkbox?[[{field:\"_ck\",checkbox:true}]]:undefined),columns:(opts.columns&&opts.columns.length)?opts.columns:[[{field:opts.textField,width:\"100%\",formatter:function(_ac7,row,_ac8){\nreturn opts.textFormatter?opts.textFormatter(_ac7,row,_ac8):_ac7;\n}}]]}));\n};\nvar _ac9=$.extend({},$.fn.datagrid.defaults.view,{render:function(_aca,_acb,_acc){\nvar _acd=$.data(_aca,\"datagrid\");\nvar opts=_acd.options;\nif(opts.groupField){\nvar g=this.groupRows(_aca,_acd.data.rows);\nthis.groups=g.groups;\n_acd.data.rows=g.rows;\nvar _ace=[];\nfor(var i=0;i<g.groups.length;i++){\n_ace.push(this.renderGroup.call(this,_aca,i,g.groups[i],_acc));\n}\n$(_acb).html(_ace.join(\"\"));\n}else{\n$(_acb).html(this.renderTable(_aca,0,_acd.data.rows,_acc));\n}\n},renderGroup:function(_acf,_ad0,_ad1,_ad2){\nvar _ad3=$.data(_acf,\"datagrid\");\nvar opts=_ad3.options;\nvar _ad4=$(_acf).datagrid(\"getColumnFields\",_ad2);\nvar _ad5=[];\n_ad5.push(\"<div class=\\\"datagrid-group\\\" group-index=\"+_ad0+\">\");\nif(!_ad2){\n_ad5.push(\"<span class=\\\"datagrid-group-title\\\">\");\n_ad5.push(opts.groupFormatter.call(_acf,_ad1.value,_ad1.rows));\n_ad5.push(\"</span>\");\n}\n_ad5.push(\"</div>\");\n_ad5.push(this.renderTable(_acf,_ad1.startIndex,_ad1.rows,_ad2));\nreturn _ad5.join(\"\");\n},groupRows:function(_ad6,rows){\nvar _ad7=$.data(_ad6,\"datagrid\");\nvar opts=_ad7.options;\nvar _ad8=[];\nfor(var i=0;i<rows.length;i++){\nvar row=rows[i];\nvar _ad9=_ada(row[opts.groupField]);\nif(!_ad9){\n_ad9={value:row[opts.groupField],rows:[row]};\n_ad8.push(_ad9);\n}else{\n_ad9.rows.push(row);\n}\n}\nvar _adb=0;\nvar rows=[];\nfor(var i=0;i<_ad8.length;i++){\nvar _ad9=_ad8[i];\n_ad9.startIndex=_adb;\n_adb+=_ad9.rows.length;\nrows=rows.concat(_ad9.rows);\n}\nreturn {groups:_ad8,rows:rows};\nfunction _ada(_adc){\nfor(var i=0;i<_ad8.length;i++){\nvar _add=_ad8[i];\nif(_add.value==_adc){\nreturn _add;\n}\n}\nreturn null;\n};\n}});\n$.fn.datalist=function(_ade,_adf){\nif(typeof _ade==\"string\"){\nvar _ae0=$.fn.datalist.methods[_ade];\nif(_ae0){\nreturn _ae0(this,_adf);\n}else{\nreturn this.datagrid(_ade,_adf);\n}\n}\n_ade=_ade||{};\nreturn this.each(function(){\nvar _ae1=$.data(this,\"datalist\");\nif(_ae1){\n$.extend(_ae1.options,_ade);\n}else{\nvar opts=$.extend({},$.fn.datalist.defaults,$.fn.datalist.parseOptions(this),_ade);\nopts.columns=$.extend(true,[],opts.columns);\n_ae1=$.data(this,\"datalist\",{options:opts});\n}\n_ac5(this);\nif(!_ae1.options.data){\nvar data=$.fn.datalist.parseData(this);\nif(data.total){\n$(this).datalist(\"loadData\",data);\n}\n}\n});\n};\n$.fn.datalist.methods={options:function(jq){\nreturn $.data(jq[0],\"datalist\").options;\n}};\n$.fn.datalist.parseOptions=function(_ae2){\nreturn $.extend({},$.fn.datagrid.parseOptions(_ae2),$.parser.parseOptions(_ae2,[\"valueField\",\"textField\",\"groupField\",{checkbox:\"boolean\",lines:\"boolean\"}]));\n};\n$.fn.datalist.parseData=function(_ae3){\nvar opts=$.data(_ae3,\"datalist\").options;\nvar data={total:0,rows:[]};\n$(_ae3).children().each(function(){\nvar _ae4=$.parser.parseOptions(this,[\"value\",\"group\"]);\nvar row={};\nvar html=$(this).html();\nrow[opts.valueField]=_ae4.value!=undefined?_ae4.value:html;\nrow[opts.textField]=html;\nif(opts.groupField){\nrow[opts.groupField]=_ae4.group;\n}\ndata.total++;\ndata.rows.push(row);\n});\nreturn data;\n};\n$.fn.datalist.defaults=$.extend({},$.fn.datagrid.defaults,{fitColumns:true,singleSelect:true,showHeader:false,checkbox:false,lines:false,valueField:\"value\",textField:\"text\",groupField:\"\",view:_ac9,textFormatter:function(_ae5,row){\nreturn _ae5;\n},groupFormatter:function(_ae6,rows){\nreturn _ae6;\n}});\n})(jQuery);\n(function($){\n$(function(){\n$(document)._unbind(\".combo\")._bind(\"mousedown.combo mousewheel.combo\",function(e){\nvar p=$(e.target).closest(\"span.combo,div.combo-p,div.menu\");\nif(p.length){\n_ae7(p);\nreturn;\n}\n$(\"body>div.combo-p>div.combo-panel:visible\").panel(\"close\");\n});\n});\nfunction _ae8(_ae9){\nvar _aea=$.data(_ae9,\"combo\");\nvar opts=_aea.options;\nif(!_aea.panel){\n_aea.panel=$(\"<div class=\\\"combo-panel\\\"></div>\").appendTo(\"html>body\");\n_aea.panel.panel({minWidth:opts.panelMinWidth,maxWidth:opts.panelMaxWidth,minHeight:opts.panelMinHeight,maxHeight:opts.panelMaxHeight,doSize:false,closed:true,cls:\"combo-p\",style:{position:\"absolute\",zIndex:10},onOpen:function(){\nvar _aeb=$(this).panel(\"options\").comboTarget;\nvar _aec=$.data(_aeb,\"combo\");\nif(_aec){\n_aec.options.onShowPanel.call(_aeb);\n}\n},onBeforeClose:function(){\n_ae7($(this).parent());\n},onClose:function(){\nvar _aed=$(this).panel(\"options\").comboTarget;\nvar _aee=$(_aed).data(\"combo\");\nif(_aee){\n_aee.options.onHidePanel.call(_aed);\n}\n}});\n}\nvar _aef=$.extend(true,[],opts.icons);\nif(opts.hasDownArrow){\n_aef.push({iconCls:\"combo-arrow\",handler:function(e){\n_af4(e.data.target);\n}});\n}\n$(_ae9).addClass(\"combo-f\").textbox($.extend({},opts,{icons:_aef,onChange:function(){\n}}));\n$(_ae9).attr(\"comboName\",$(_ae9).attr(\"textboxName\"));\n_aea.combo=$(_ae9).next();\n_aea.combo.addClass(\"combo\");\n_aea.panel._unbind(\".combo\");\nfor(var _af0 in opts.panelEvents){\n_aea.panel._bind(_af0+\".combo\",{target:_ae9},opts.panelEvents[_af0]);\n}\n};\nfunction _af1(_af2){\nvar _af3=$.data(_af2,\"combo\");\nvar opts=_af3.options;\nvar p=_af3.panel;\nif(p.is(\":visible\")){\np.panel(\"close\");\n}\nif(!opts.cloned){\np.panel(\"destroy\");\n}\n$(_af2).textbox(\"destroy\");\n};\nfunction _af4(_af5){\nvar _af6=$.data(_af5,\"combo\").panel;\nif(_af6.is(\":visible\")){\nvar _af7=_af6.combo(\"combo\");\n_af8(_af7);\nif(_af7!=_af5){\n$(_af5).combo(\"showPanel\");\n}\n}else{\nvar p=$(_af5).closest(\"div.combo-p\").children(\".combo-panel\");\n$(\"div.combo-panel:visible\").not(_af6).not(p).panel(\"close\");\n$(_af5).combo(\"showPanel\");\n}\n$(_af5).combo(\"textbox\").focus();\n};\nfunction _ae7(_af9){\n$(_af9).find(\".combo-f\").each(function(){\nvar p=$(this).combo(\"panel\");\nif(p.is(\":visible\")){\np.panel(\"close\");\n}\n});\n};\nfunction _afa(e){\nvar _afb=e.data.target;\nvar _afc=$.data(_afb,\"combo\");\nvar opts=_afc.options;\nif(!opts.editable){\n_af4(_afb);\n}else{\nvar p=$(_afb).closest(\"div.combo-p\").children(\".combo-panel\");\n$(\"div.combo-panel:visible\").not(p).each(function(){\nvar _afd=$(this).combo(\"combo\");\nif(_afd!=_afb){\n_af8(_afd);\n}\n});\n}\n};\nfunction _afe(e){\nvar _aff=e.data.target;\nvar t=$(_aff);\nvar _b00=t.data(\"combo\");\nvar opts=t.combo(\"options\");\n_b00.panel.panel(\"options\").comboTarget=_aff;\nswitch(e.keyCode){\ncase 38:\nopts.keyHandler.up.call(_aff,e);\nbreak;\ncase 40:\nopts.keyHandler.down.call(_aff,e);\nbreak;\ncase 37:\nopts.keyHandler.left.call(_aff,e);\nbreak;\ncase 39:\nopts.keyHandler.right.call(_aff,e);\nbreak;\ncase 13:\ne.preventDefault();\nopts.keyHandler.enter.call(_aff,e);\nreturn false;\ncase 9:\ncase 27:\n_af8(_aff);\nbreak;\ndefault:\nif(opts.editable){\nif(_b00.timer){\nclearTimeout(_b00.timer);\n}\n_b00.timer=setTimeout(function(){\nvar q=t.combo(\"getText\");\nif(_b00.previousText!=q){\n_b00.previousText=q;\nt.combo(\"showPanel\");\nopts.keyHandler.query.call(_aff,q,e);\nt.combo(\"validate\");\n}\n},opts.delay);\n}\n}\n};\nfunction _b01(e){\nvar _b02=e.data.target;\nvar _b03=$(_b02).data(\"combo\");\nif(_b03.timer){\nclearTimeout(_b03.timer);\n}\n};\nfunction _b04(_b05){\nvar _b06=$.data(_b05,\"combo\");\nvar _b07=_b06.combo;\nvar _b08=_b06.panel;\nvar opts=$(_b05).combo(\"options\");\nvar _b09=_b08.panel(\"options\");\n_b09.comboTarget=_b05;\nif(_b09.closed){\n_b08.panel(\"panel\").show().css({zIndex:($.fn.menu?$.fn.menu.defaults.zIndex++:($.fn.window?$.fn.window.defaults.zIndex++:99)),left:-999999});\n_b08.panel(\"resize\",{width:(opts.panelWidth?opts.panelWidth:_b07._outerWidth()),height:opts.panelHeight});\n_b08.panel(\"panel\").hide();\n_b08.panel(\"open\");\n}\n(function(){\nif(_b09.comboTarget==_b05&&_b08.is(\":visible\")){\n_b08.panel(\"move\",{left:_b0a(),top:_b0b()});\nsetTimeout(arguments.callee,200);\n}\n})();\nfunction _b0a(){\nvar left=_b07.offset().left;\nif(opts.panelAlign==\"right\"){\nleft+=_b07._outerWidth()-_b08._outerWidth();\n}\nif(left+_b08._outerWidth()>$(window)._outerWidth()+$(document).scrollLeft()){\nleft=$(window)._outerWidth()+$(document).scrollLeft()-_b08._outerWidth();\n}\nif(left<0){\nleft=0;\n}\nreturn left;\n};\nfunction _b0b(){\nif(opts.panelValign==\"top\"){\nvar top=_b07.offset().top-_b08._outerHeight();\n}else{\nif(opts.panelValign==\"bottom\"){\nvar top=_b07.offset().top+_b07._outerHeight();\n}else{\nvar top=_b07.offset().top+_b07._outerHeight();\nif(top+_b08._outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){\ntop=_b07.offset().top-_b08._outerHeight();\n}\nif(top<$(document).scrollTop()){\ntop=_b07.offset().top+_b07._outerHeight();\n}\n}\n}\nreturn top;\n};\n};\nfunction _af8(_b0c){\nvar _b0d=$.data(_b0c,\"combo\").panel;\n_b0d.panel(\"close\");\n};\nfunction _b0e(_b0f,text){\nvar _b10=$.data(_b0f,\"combo\");\nvar _b11=$(_b0f).textbox(\"getText\");\nif(_b11!=text){\n$(_b0f).textbox(\"setText\",text);\n}\n_b10.previousText=text;\n};\nfunction _b12(_b13){\nvar _b14=$.data(_b13,\"combo\");\nvar opts=_b14.options;\nvar _b15=$(_b13).next();\nvar _b16=[];\n_b15.find(\".textbox-value\").each(function(){\n_b16.push($(this).val());\n});\nif(opts.multivalue){\nreturn _b16;\n}else{\nreturn _b16.length?_b16[0].split(opts.separator):_b16;\n}\n};\nfunction _b17(_b18,_b19){\nvar _b1a=$.data(_b18,\"combo\");\nvar _b1b=_b1a.combo;\nvar opts=$(_b18).combo(\"options\");\nif(!$.isArray(_b19)){\n_b19=_b19.split(opts.separator);\n}\nvar _b1c=_b12(_b18);\n_b1b.find(\".textbox-value\").remove();\nif(_b19.length){\nif(opts.multivalue){\nfor(var i=0;i<_b19.length;i++){\n_b1d(_b19[i]);\n}\n}else{\n_b1d(_b19.join(opts.separator));\n}\n}\nfunction _b1d(_b1e){\nvar name=$(_b18).attr(\"textboxName\")||\"\";\nvar _b1f=$(\"<input type=\\\"hidden\\\" class=\\\"textbox-value\\\">\").appendTo(_b1b);\n_b1f.attr(\"name\",name);\nif(opts.disabled){\n_b1f.attr(\"disabled\",\"disabled\");\n}\n_b1f.val(_b1e);\n};\nvar _b20=(function(){\nif(opts.onChange==$.parser.emptyFn){\nreturn false;\n}\nif(_b1c.length!=_b19.length){\nreturn true;\n}\nfor(var i=0;i<_b19.length;i++){\nif(_b19[i]!=_b1c[i]){\nreturn true;\n}\n}\nreturn false;\n})();\nif(_b20){\n$(_b18).val(_b19.join(opts.separator));\nif(opts.multiple){\nopts.onChange.call(_b18,_b19,_b1c);\n}else{\nopts.onChange.call(_b18,_b19[0],_b1c[0]);\n}\n$(_b18).closest(\"form\").trigger(\"_change\",[_b18]);\n}\n};\nfunction _b21(_b22){\nvar _b23=_b12(_b22);\nreturn _b23[0];\n};\nfunction _b24(_b25,_b26){\n_b17(_b25,[_b26]);\n};\nfunction _b27(_b28){\nvar opts=$.data(_b28,\"combo\").options;\nvar _b29=opts.onChange;\nopts.onChange=$.parser.emptyFn;\nif(opts.multiple){\n_b17(_b28,opts.value?opts.value:[]);\n}else{\n_b24(_b28,opts.value);\n}\nopts.onChange=_b29;\n};\n$.fn.combo=function(_b2a,_b2b){\nif(typeof _b2a==\"string\"){\nvar _b2c=$.fn.combo.methods[_b2a];\nif(_b2c){\nreturn _b2c(this,_b2b);\n}else{\nreturn this.textbox(_b2a,_b2b);\n}\n}\n_b2a=_b2a||{};\nreturn this.each(function(){\nvar _b2d=$.data(this,\"combo\");\nif(_b2d){\n$.extend(_b2d.options,_b2a);\nif(_b2a.value!=undefined){\n_b2d.options.originalValue=_b2a.value;\n}\n}else{\n_b2d=$.data(this,\"combo\",{options:$.extend({},$.fn.combo.defaults,$.fn.combo.parseOptions(this),_b2a),previousText:\"\"});\nif(_b2d.options.multiple&&_b2d.options.value==\"\"){\n_b2d.options.originalValue=[];\n}else{\n_b2d.options.originalValue=_b2d.options.value;\n}\n}\n_ae8(this);\n_b27(this);\n});\n};\n$.fn.combo.methods={options:function(jq){\nvar opts=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"combo\").options,{width:opts.width,height:opts.height,disabled:opts.disabled,readonly:opts.readonly});\n},cloneFrom:function(jq,from){\nreturn jq.each(function(){\n$(this).textbox(\"cloneFrom\",from);\n$.data(this,\"combo\",{options:$.extend(true,{cloned:true},$(from).combo(\"options\")),combo:$(this).next(),panel:$(from).combo(\"panel\")});\n$(this).addClass(\"combo-f\").attr(\"comboName\",$(this).attr(\"textboxName\"));\n});\n},combo:function(jq){\nreturn jq.closest(\".combo-panel\").panel(\"options\").comboTarget;\n},panel:function(jq){\nreturn $.data(jq[0],\"combo\").panel;\n},destroy:function(jq){\nreturn jq.each(function(){\n_af1(this);\n});\n},showPanel:function(jq){\nreturn jq.each(function(){\n_b04(this);\n});\n},hidePanel:function(jq){\nreturn jq.each(function(){\n_af8(this);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"setText\",\"\");\nvar opts=$.data(this,\"combo\").options;\nif(opts.multiple){\n$(this).combo(\"setValues\",[]);\n}else{\n$(this).combo(\"setValue\",\"\");\n}\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar opts=$.data(this,\"combo\").options;\nif(opts.multiple){\n$(this).combo(\"setValues\",opts.originalValue);\n}else{\n$(this).combo(\"setValue\",opts.originalValue);\n}\n});\n},setText:function(jq,text){\nreturn jq.each(function(){\n_b0e(this,text);\n});\n},getValues:function(jq){\nreturn _b12(jq[0]);\n},setValues:function(jq,_b2e){\nreturn jq.each(function(){\n_b17(this,_b2e);\n});\n},getValue:function(jq){\nreturn _b21(jq[0]);\n},setValue:function(jq,_b2f){\nreturn jq.each(function(){\n_b24(this,_b2f);\n});\n}};\n$.fn.combo.parseOptions=function(_b30){\nvar t=$(_b30);\nreturn $.extend({},$.fn.textbox.parseOptions(_b30),$.parser.parseOptions(_b30,[\"separator\",\"panelAlign\",{panelWidth:\"number\",hasDownArrow:\"boolean\",delay:\"number\",reversed:\"boolean\",multivalue:\"boolean\",selectOnNavigation:\"boolean\"},{panelMinWidth:\"number\",panelMaxWidth:\"number\",panelMinHeight:\"number\",panelMaxHeight:\"number\"}]),{panelHeight:(t.attr(\"panelHeight\")==\"auto\"?\"auto\":parseInt(t.attr(\"panelHeight\"))||undefined),multiple:(t.attr(\"multiple\")?true:undefined)});\n};\n$.fn.combo.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{click:_afa,keydown:_afe,paste:_afe,drop:_afe,blur:_b01},panelEvents:{mousedown:function(e){\ne.preventDefault();\ne.stopPropagation();\n}},panelWidth:null,panelHeight:300,panelMinWidth:null,panelMaxWidth:null,panelMinHeight:null,panelMaxHeight:null,panelAlign:\"left\",panelValign:\"auto\",reversed:false,multiple:false,multivalue:true,selectOnNavigation:true,separator:\",\",hasDownArrow:true,delay:200,keyHandler:{up:function(e){\n},down:function(e){\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n},query:function(q,e){\n}},onShowPanel:function(){\n},onHidePanel:function(){\n},onChange:function(_b31,_b32){\n}});\n})(jQuery);\n(function($){\nfunction _b33(_b34,_b35){\nvar _b36=$.data(_b34,\"combobox\");\nreturn $.easyui.indexOfArray(_b36.data,_b36.options.valueField,_b35);\n};\nfunction _b37(_b38,_b39){\nvar opts=$.data(_b38,\"combobox\").options;\nvar _b3a=$(_b38).combo(\"panel\");\nvar item=opts.finder.getEl(_b38,_b39);\nif(item.length){\nif(item.position().top<=0){\nvar h=_b3a.scrollTop()+item.position().top;\n_b3a.scrollTop(h);\n}else{\nif(item.position().top+item.outerHeight()>_b3a.height()){\nvar h=_b3a.scrollTop()+item.position().top+item.outerHeight()-_b3a.height();\n_b3a.scrollTop(h);\n}\n}\n}\n_b3a.triggerHandler(\"scroll\");\n};\nfunction nav(_b3b,dir){\nvar opts=$.data(_b3b,\"combobox\").options;\nvar _b3c=$(_b3b).combobox(\"panel\");\nvar item=_b3c.children(\"div.combobox-item-hover\");\nif(!item.length){\nitem=_b3c.children(\"div.combobox-item-selected\");\n}\nitem.removeClass(\"combobox-item-hover\");\nvar _b3d=\"div.combobox-item:visible:not(.combobox-item-disabled):first\";\nvar _b3e=\"div.combobox-item:visible:not(.combobox-item-disabled):last\";\nif(!item.length){\nitem=_b3c.children(dir==\"next\"?_b3d:_b3e);\n}else{\nif(dir==\"next\"){\nitem=item.nextAll(_b3d);\nif(!item.length){\nitem=_b3c.children(_b3d);\n}\n}else{\nitem=item.prevAll(_b3d);\nif(!item.length){\nitem=_b3c.children(_b3e);\n}\n}\n}\nif(item.length){\nitem.addClass(\"combobox-item-hover\");\nvar row=opts.finder.getRow(_b3b,item);\nif(row){\n$(_b3b).combobox(\"scrollTo\",row[opts.valueField]);\nif(opts.selectOnNavigation){\n_b3f(_b3b,row[opts.valueField]);\n}\n}\n}\n};\nfunction _b3f(_b40,_b41,_b42){\nvar opts=$.data(_b40,\"combobox\").options;\nvar _b43=$(_b40).combo(\"getValues\");\nif($.inArray(_b41+\"\",_b43)==-1){\nif(opts.multiple){\n_b43.push(_b41);\n}else{\n_b43=[_b41];\n}\n_b44(_b40,_b43,_b42);\n}\n};\nfunction _b45(_b46,_b47){\nvar opts=$.data(_b46,\"combobox\").options;\nvar _b48=$(_b46).combo(\"getValues\");\nvar _b49=$.inArray(_b47+\"\",_b48);\nif(_b49>=0){\n_b48.splice(_b49,1);\n_b44(_b46,_b48);\n}\n};\nfunction _b44(_b4a,_b4b,_b4c){\nvar opts=$.data(_b4a,\"combobox\").options;\nvar _b4d=$(_b4a).combo(\"panel\");\nif(!$.isArray(_b4b)){\n_b4b=_b4b.split(opts.separator);\n}\nif(!opts.multiple){\n_b4b=_b4b.length?[_b4b[0]]:[\"\"];\n}\nvar _b4e=$(_b4a).combo(\"getValues\");\nif(_b4d.is(\":visible\")){\n_b4d.find(\".combobox-item-selected\").each(function(){\nvar row=opts.finder.getRow(_b4a,$(this));\nif(row){\nif($.easyui.indexOfArray(_b4e,row[opts.valueField])==-1){\n$(this).removeClass(\"combobox-item-selected\");\n}\n}\n});\n}\n$.map(_b4e,function(v){\nif($.easyui.indexOfArray(_b4b,v)==-1){\nvar el=opts.finder.getEl(_b4a,v);\nif(el.hasClass(\"combobox-item-selected\")){\nel.removeClass(\"combobox-item-selected\");\nopts.onUnselect.call(_b4a,opts.finder.getRow(_b4a,v));\n}\n}\n});\nvar _b4f=null;\nvar vv=[],ss=[];\nfor(var i=0;i<_b4b.length;i++){\nvar v=_b4b[i];\nvar s=v;\nvar row=opts.finder.getRow(_b4a,v);\nif(row){\ns=row[opts.textField];\n_b4f=row;\nvar el=opts.finder.getEl(_b4a,v);\nif(!el.hasClass(\"combobox-item-selected\")){\nel.addClass(\"combobox-item-selected\");\nopts.onSelect.call(_b4a,row);\n}\n}else{\ns=_b50(v,opts.mappingRows)||v;\n}\nvv.push(v);\nss.push(s);\n}\nif(!_b4c){\n$(_b4a).combo(\"setText\",ss.join(opts.separator));\n}\nif(opts.showItemIcon){\nvar tb=$(_b4a).combobox(\"textbox\");\ntb.removeClass(\"textbox-bgicon \"+opts.textboxIconCls);\nif(_b4f&&_b4f.iconCls){\ntb.addClass(\"textbox-bgicon \"+_b4f.iconCls);\nopts.textboxIconCls=_b4f.iconCls;\n}\n}\n$(_b4a).combo(\"setValues\",vv);\n_b4d.triggerHandler(\"scroll\");\nfunction _b50(_b51,a){\nvar item=$.easyui.getArrayItem(a,opts.valueField,_b51);\nreturn item?item[opts.textField]:undefined;\n};\n};\nfunction _b52(_b53,data,_b54){\nvar _b55=$.data(_b53,\"combobox\");\nvar opts=_b55.options;\n_b55.data=opts.loadFilter.call(_b53,data);\nopts.view.render.call(opts.view,_b53,$(_b53).combo(\"panel\"),_b55.data);\nvar vv=$(_b53).combobox(\"getValues\");\n$.easyui.forEach(_b55.data,false,function(row){\nif(row[\"selected\"]){\n$.easyui.addArrayItem(vv,row[opts.valueField]+\"\");\n}\n});\nif(opts.multiple){\n_b44(_b53,vv,_b54);\n}else{\n_b44(_b53,vv.length?[vv[vv.length-1]]:[],_b54);\n}\nopts.onLoadSuccess.call(_b53,data);\n};\nfunction _b56(_b57,url,_b58,_b59){\nvar opts=$.data(_b57,\"combobox\").options;\nif(url){\nopts.url=url;\n}\n_b58=$.extend({},opts.queryParams,_b58||{});\nif(opts.onBeforeLoad.call(_b57,_b58)==false){\nreturn;\n}\nopts.loader.call(_b57,_b58,function(data){\n_b52(_b57,data,_b59);\n},function(){\nopts.onLoadError.apply(this,arguments);\n});\n};\nfunction _b5a(_b5b,q){\nvar _b5c=$.data(_b5b,\"combobox\");\nvar opts=_b5c.options;\nvar _b5d=$();\nvar qq=opts.multiple?q.split(opts.separator):[q];\nif(opts.mode==\"remote\"){\n_b5e(qq);\n_b56(_b5b,null,{q:q},true);\n}else{\nvar _b5f=$(_b5b).combo(\"panel\");\n_b5f.find(\".combobox-item-hover\").removeClass(\"combobox-item-hover\");\n_b5f.find(\".combobox-item,.combobox-group\").hide();\nvar data=_b5c.data;\nvar vv=[];\n$.map(qq,function(q){\nq=$.trim(q);\nvar _b60=q;\nvar _b61=undefined;\n_b5d=$();\nfor(var i=0;i<data.length;i++){\nvar row=data[i];\nif(opts.filter.call(_b5b,q,row)){\nvar v=row[opts.valueField];\nvar s=row[opts.textField];\nvar g=row[opts.groupField];\nvar item=opts.finder.getEl(_b5b,v).show();\nif(s.toLowerCase()==q.toLowerCase()){\n_b60=v;\nif(opts.reversed){\n_b5d=item;\n}else{\n_b3f(_b5b,v,true);\n}\n}\nif(opts.groupField&&_b61!=g){\nopts.finder.getGroupEl(_b5b,g).show();\n_b61=g;\n}\n}\n}\nvv.push(_b60);\n});\n_b5e(vv);\n}\nfunction _b5e(vv){\nif(opts.reversed){\n_b5d.addClass(\"combobox-item-hover\");\n}else{\n_b44(_b5b,opts.multiple?(q?vv:[]):vv,true);\n}\n};\n};\nfunction _b62(_b63){\nvar t=$(_b63);\nvar opts=t.combobox(\"options\");\nvar _b64=t.combobox(\"panel\");\nvar item=_b64.children(\"div.combobox-item-hover\");\nif(item.length){\nitem.removeClass(\"combobox-item-hover\");\nvar row=opts.finder.getRow(_b63,item);\nvar _b65=row[opts.valueField];\nif(opts.multiple){\nif(item.hasClass(\"combobox-item-selected\")){\nt.combobox(\"unselect\",_b65);\n}else{\nt.combobox(\"select\",_b65);\n}\n}else{\nt.combobox(\"select\",_b65);\n}\n}\nvar vv=[];\n$.map(t.combobox(\"getValues\"),function(v){\nif(_b33(_b63,v)>=0){\nvv.push(v);\n}\n});\nt.combobox(\"setValues\",vv);\nif(!opts.multiple){\nt.combobox(\"hidePanel\");\n}\n};\nfunction _b66(_b67){\nvar _b68=$.data(_b67,\"combobox\");\nvar opts=_b68.options;\n$(_b67).addClass(\"combobox-f\");\n$(_b67).combo($.extend({},opts,{onShowPanel:function(){\n$(this).combo(\"panel\").find(\"div.combobox-item:hidden,div.combobox-group:hidden\").show();\n_b44(this,$(this).combobox(\"getValues\"),true);\n$(this).combobox(\"scrollTo\",$(this).combobox(\"getValue\"));\nopts.onShowPanel.call(this);\n}}));\n};\nfunction _b69(e){\n$(this).children(\"div.combobox-item-hover\").removeClass(\"combobox-item-hover\");\nvar item=$(e.target).closest(\"div.combobox-item\");\nif(!item.hasClass(\"combobox-item-disabled\")){\nitem.addClass(\"combobox-item-hover\");\n}\ne.stopPropagation();\n};\nfunction _b6a(e){\n$(e.target).closest(\"div.combobox-item\").removeClass(\"combobox-item-hover\");\ne.stopPropagation();\n};\nfunction _b6b(e){\nvar _b6c=$(this).panel(\"options\").comboTarget;\nif(!_b6c){\nreturn;\n}\nvar opts=$(_b6c).combobox(\"options\");\nvar item=$(e.target).closest(\"div.combobox-item\");\nif(!item.length||item.hasClass(\"combobox-item-disabled\")){\nreturn;\n}\nvar row=opts.finder.getRow(_b6c,item);\nif(!row){\nreturn;\n}\nif(opts.blurTimer){\nclearTimeout(opts.blurTimer);\nopts.blurTimer=null;\n}\nopts.onClick.call(_b6c,row);\nvar _b6d=row[opts.valueField];\nif(opts.multiple){\nif(item.hasClass(\"combobox-item-selected\")){\n_b45(_b6c,_b6d);\n}else{\n_b3f(_b6c,_b6d);\n}\n}else{\n$(_b6c).combobox(\"setValue\",_b6d).combobox(\"hidePanel\");\n}\ne.stopPropagation();\n};\nfunction _b6e(e){\nvar _b6f=$(this).panel(\"options\").comboTarget;\nif(!_b6f){\nreturn;\n}\nvar opts=$(_b6f).combobox(\"options\");\nif(opts.groupPosition==\"sticky\"){\nvar _b70=$(this).children(\".combobox-stick\");\nif(!_b70.length){\n_b70=$(\"<div class=\\\"combobox-stick\\\"></div>\").appendTo(this);\n}\n_b70.hide();\nvar _b71=$(_b6f).data(\"combobox\");\n$(this).children(\".combobox-group:visible\").each(function(){\nvar g=$(this);\nvar _b72=opts.finder.getGroup(_b6f,g);\nvar _b73=_b71.data[_b72.startIndex+_b72.count-1];\nvar last=opts.finder.getEl(_b6f,_b73[opts.valueField]);\nif(g.position().top<0&&last.position().top>0){\n_b70.show().html(g.html());\nreturn false;\n}\n});\n}\n};\n$.fn.combobox=function(_b74,_b75){\nif(typeof _b74==\"string\"){\nvar _b76=$.fn.combobox.methods[_b74];\nif(_b76){\nreturn _b76(this,_b75);\n}else{\nreturn this.combo(_b74,_b75);\n}\n}\n_b74=_b74||{};\nreturn this.each(function(){\nvar _b77=$.data(this,\"combobox\");\nif(_b77){\n$.extend(_b77.options,_b74);\n}else{\n_b77=$.data(this,\"combobox\",{options:$.extend({},$.fn.combobox.defaults,$.fn.combobox.parseOptions(this),_b74),data:[]});\n}\n_b66(this);\nif(_b77.options.data){\n_b52(this,_b77.options.data);\n}else{\nvar data=$.fn.combobox.parseData(this);\nif(data.length){\n_b52(this,data);\n}\n}\n_b56(this);\n});\n};\n$.fn.combobox.methods={options:function(jq){\nvar _b78=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"combobox\").options,{width:_b78.width,height:_b78.height,originalValue:_b78.originalValue,disabled:_b78.disabled,readonly:_b78.readonly});\n},cloneFrom:function(jq,from){\nreturn jq.each(function(){\n$(this).combo(\"cloneFrom\",from);\n$.data(this,\"combobox\",$(from).data(\"combobox\"));\n$(this).addClass(\"combobox-f\").attr(\"comboboxName\",$(this).attr(\"textboxName\"));\n});\n},getData:function(jq){\nreturn $.data(jq[0],\"combobox\").data;\n},setValues:function(jq,_b79){\nreturn jq.each(function(){\nvar opts=$(this).combobox(\"options\");\nif($.isArray(_b79)){\n_b79=$.map(_b79,function(_b7a){\nif(_b7a&&typeof _b7a==\"object\"){\n$.easyui.addArrayItem(opts.mappingRows,opts.valueField,_b7a);\nreturn _b7a[opts.valueField];\n}else{\nreturn _b7a;\n}\n});\n}\n_b44(this,_b79);\n});\n},setValue:function(jq,_b7b){\nreturn jq.each(function(){\n$(this).combobox(\"setValues\",$.isArray(_b7b)?_b7b:[_b7b]);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_b44(this,[]);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).combobox(\"options\");\nif(opts.multiple){\n$(this).combobox(\"setValues\",opts.originalValue);\n}else{\n$(this).combobox(\"setValue\",opts.originalValue);\n}\n});\n},loadData:function(jq,data){\nreturn jq.each(function(){\n_b52(this,data);\n});\n},reload:function(jq,url){\nreturn jq.each(function(){\nif(typeof url==\"string\"){\n_b56(this,url);\n}else{\nif(url){\nvar opts=$(this).combobox(\"options\");\nopts.queryParams=url;\n}\n_b56(this);\n}\n});\n},select:function(jq,_b7c){\nreturn jq.each(function(){\n_b3f(this,_b7c);\n});\n},unselect:function(jq,_b7d){\nreturn jq.each(function(){\n_b45(this,_b7d);\n});\n},scrollTo:function(jq,_b7e){\nreturn jq.each(function(){\n_b37(this,_b7e);\n});\n}};\n$.fn.combobox.parseOptions=function(_b7f){\nvar t=$(_b7f);\nreturn $.extend({},$.fn.combo.parseOptions(_b7f),$.parser.parseOptions(_b7f,[\"valueField\",\"textField\",\"groupField\",\"groupPosition\",\"mode\",\"method\",\"url\",{showItemIcon:\"boolean\",limitToList:\"boolean\"}]));\n};\n$.fn.combobox.parseData=function(_b80){\nvar data=[];\nvar opts=$(_b80).combobox(\"options\");\n$(_b80).children().each(function(){\nif(this.tagName.toLowerCase()==\"optgroup\"){\nvar _b81=$(this).attr(\"label\");\n$(this).children().each(function(){\n_b82(this,_b81);\n});\n}else{\n_b82(this);\n}\n});\nreturn data;\nfunction _b82(el,_b83){\nvar t=$(el);\nvar row={};\nrow[opts.valueField]=t.attr(\"value\")!=undefined?t.attr(\"value\"):t.text();\nrow[opts.textField]=t.text();\nrow[\"iconCls\"]=$.parser.parseOptions(el,[\"iconCls\"]).iconCls;\nrow[\"selected\"]=t.is(\":selected\");\nrow[\"disabled\"]=t.is(\":disabled\");\nif(_b83){\nopts.groupField=opts.groupField||\"group\";\nrow[opts.groupField]=_b83;\n}\ndata.push(row);\n};\n};\nvar _b84=0;\nvar _b85={render:function(_b86,_b87,data){\nvar _b88=$.data(_b86,\"combobox\");\nvar opts=_b88.options;\nvar _b89=$(_b86).attr(\"id\")||\"\";\n_b84++;\n_b88.itemIdPrefix=_b89+\"_easyui_combobox_i\"+_b84;\n_b88.groupIdPrefix=_b89+\"_easyui_combobox_g\"+_b84;\n_b88.groups=[];\nvar dd=[];\nvar _b8a=undefined;\nfor(var i=0;i<data.length;i++){\nvar row=data[i];\nvar v=row[opts.valueField]+\"\";\nvar s=row[opts.textField];\nvar g=row[opts.groupField];\nif(g){\nif(_b8a!=g){\n_b8a=g;\n_b88.groups.push({value:g,startIndex:i,count:1});\ndd.push(\"<div id=\\\"\"+(_b88.groupIdPrefix+\"_\"+(_b88.groups.length-1))+\"\\\" class=\\\"combobox-group\\\">\");\ndd.push(opts.groupFormatter?opts.groupFormatter.call(_b86,g):g);\ndd.push(\"</div>\");\n}else{\n_b88.groups[_b88.groups.length-1].count++;\n}\n}else{\n_b8a=undefined;\n}\nvar cls=\"combobox-item\"+(row.disabled?\" combobox-item-disabled\":\"\")+(g?\" combobox-gitem\":\"\");\ndd.push(\"<div id=\\\"\"+(_b88.itemIdPrefix+\"_\"+i)+\"\\\" class=\\\"\"+cls+\"\\\">\");\nif(opts.showItemIcon&&row.iconCls){\ndd.push(\"<span class=\\\"combobox-icon \"+row.iconCls+\"\\\"></span>\");\n}\ndd.push(opts.formatter?opts.formatter.call(_b86,row):s);\ndd.push(\"</div>\");\n}\n$(_b87).html(dd.join(\"\"));\n}};\n$.fn.combobox.defaults=$.extend({},$.fn.combo.defaults,{valueField:\"value\",textField:\"text\",groupPosition:\"static\",groupField:null,groupFormatter:function(_b8b){\nreturn _b8b;\n},mode:\"local\",method:\"post\",url:null,data:null,queryParams:{},showItemIcon:false,limitToList:false,unselectedValues:[],mappingRows:[],view:_b85,keyHandler:{up:function(e){\nnav(this,\"prev\");\ne.preventDefault();\n},down:function(e){\nnav(this,\"next\");\ne.preventDefault();\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_b62(this);\n},query:function(q,e){\n_b5a(this,q);\n}},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){\n$.fn.combo.defaults.inputEvents.blur(e);\nvar _b8c=e.data.target;\nvar opts=$(_b8c).combobox(\"options\");\nif(opts.reversed||opts.limitToList){\nif(opts.blurTimer){\nclearTimeout(opts.blurTimer);\n}\nopts.blurTimer=setTimeout(function(){\nvar _b8d=$(_b8c).parent().length;\nif(_b8d){\nif(opts.reversed){\n$(_b8c).combobox(\"setValues\",$(_b8c).combobox(\"getValues\"));\n}else{\nif(opts.limitToList){\nvar vv=[];\n$.map($(_b8c).combobox(\"getValues\"),function(v){\nvar _b8e=$.easyui.indexOfArray($(_b8c).combobox(\"getData\"),opts.valueField,v);\nif(_b8e>=0){\nvv.push(v);\n}\n});\n$(_b8c).combobox(\"setValues\",vv);\n}\n}\nopts.blurTimer=null;\n}\n},50);\n}\n}}),panelEvents:{mouseover:_b69,mouseout:_b6a,mousedown:function(e){\ne.preventDefault();\ne.stopPropagation();\n},click:_b6b,scroll:_b6e},filter:function(q,row){\nvar opts=$(this).combobox(\"options\");\nreturn row[opts.textField].toLowerCase().indexOf(q.toLowerCase())>=0;\n},formatter:function(row){\nvar opts=$(this).combobox(\"options\");\nreturn row[opts.textField];\n},loader:function(_b8f,_b90,_b91){\nvar opts=$(this).combobox(\"options\");\nif(!opts.url){\nreturn false;\n}\n$.ajax({type:opts.method,url:opts.url,data:_b8f,dataType:\"json\",success:function(data){\n_b90(data);\n},error:function(){\n_b91.apply(this,arguments);\n}});\n},loadFilter:function(data){\nreturn data;\n},finder:{getEl:function(_b92,_b93){\nvar _b94=_b33(_b92,_b93);\nvar id=$.data(_b92,\"combobox\").itemIdPrefix+\"_\"+_b94;\nreturn $(\"#\"+id);\n},getGroupEl:function(_b95,_b96){\nvar _b97=$.data(_b95,\"combobox\");\nvar _b98=$.easyui.indexOfArray(_b97.groups,\"value\",_b96);\nvar id=_b97.groupIdPrefix+\"_\"+_b98;\nreturn $(\"#\"+id);\n},getGroup:function(_b99,p){\nvar _b9a=$.data(_b99,\"combobox\");\nvar _b9b=p.attr(\"id\").substr(_b9a.groupIdPrefix.length+1);\nreturn _b9a.groups[parseInt(_b9b)];\n},getRow:function(_b9c,p){\nvar _b9d=$.data(_b9c,\"combobox\");\nvar _b9e=(p instanceof $)?p.attr(\"id\").substr(_b9d.itemIdPrefix.length+1):_b33(_b9c,p);\nreturn _b9d.data[parseInt(_b9e)];\n}},onBeforeLoad:function(_b9f){\n},onLoadSuccess:function(data){\n},onLoadError:function(){\n},onSelect:function(_ba0){\n},onUnselect:function(_ba1){\n},onClick:function(_ba2){\n}});\n})(jQuery);\n(function($){\nfunction _ba3(_ba4){\nvar _ba5=$.data(_ba4,\"combotree\");\nvar opts=_ba5.options;\nvar tree=_ba5.tree;\n$(_ba4).addClass(\"combotree-f\");\n$(_ba4).combo($.extend({},opts,{onShowPanel:function(){\nif(opts.editable){\ntree.tree(\"doFilter\",\"\");\n}\nopts.onShowPanel.call(this);\n}}));\nvar _ba6=$(_ba4).combo(\"panel\");\nif(!tree){\ntree=$(\"<ul></ul>\").appendTo(_ba6);\n_ba5.tree=tree;\n}\ntree.tree($.extend({},opts,{checkbox:opts.multiple,onLoadSuccess:function(node,data){\nvar _ba7=$(_ba4).combotree(\"getValues\");\nif(opts.multiple){\n$.map(tree.tree(\"getChecked\"),function(node){\n$.easyui.addArrayItem(_ba7,node.id);\n});\n}\n_bac(_ba4,_ba7,_ba5.remainText);\nopts.onLoadSuccess.call(this,node,data);\n},onClick:function(node){\nif(opts.multiple){\n$(this).tree(node.checked?\"uncheck\":\"check\",node.target);\n}else{\n$(_ba4).combo(\"hidePanel\");\n}\n_ba5.remainText=false;\n_ba9(_ba4);\nopts.onClick.call(this,node);\n},onCheck:function(node,_ba8){\n_ba5.remainText=false;\n_ba9(_ba4);\nopts.onCheck.call(this,node,_ba8);\n}}));\n};\nfunction _ba9(_baa){\nvar _bab=$.data(_baa,\"combotree\");\nvar opts=_bab.options;\nvar tree=_bab.tree;\nvar vv=[];\nif(opts.multiple){\nvv=$.map(tree.tree(\"getChecked\"),function(node){\nreturn node.id;\n});\n}else{\nvar node=tree.tree(\"getSelected\");\nif(node){\nvv.push(node.id);\n}\n}\nvv=vv.concat(opts.unselectedValues);\n_bac(_baa,vv,_bab.remainText);\n};\nfunction _bac(_bad,_bae,_baf){\nvar _bb0=$.data(_bad,\"combotree\");\nvar opts=_bb0.options;\nvar tree=_bb0.tree;\nvar _bb1=tree.tree(\"options\");\nvar _bb2=_bb1.onBeforeCheck;\nvar _bb3=_bb1.onCheck;\nvar _bb4=_bb1.onBeforeSelect;\nvar _bb5=_bb1.onSelect;\n_bb1.onBeforeCheck=_bb1.onCheck=_bb1.onBeforeSelect=_bb1.onSelect=function(){\n};\nif(!$.isArray(_bae)){\n_bae=_bae.split(opts.separator);\n}\nif(!opts.multiple){\n_bae=_bae.length?[_bae[0]]:[\"\"];\n}\nvar vv=$.map(_bae,function(_bb6){\nreturn String(_bb6);\n});\ntree.find(\"div.tree-node-selected\").removeClass(\"tree-node-selected\");\n$.map(tree.tree(\"getChecked\"),function(node){\nif($.inArray(String(node.id),vv)==-1){\ntree.tree(\"uncheck\",node.target);\n}\n});\nvar ss=[];\nopts.unselectedValues=[];\n$.map(vv,function(v){\nvar node=tree.tree(\"find\",v);\nif(node){\ntree.tree(\"check\",node.target).tree(\"select\",node.target);\nss.push(_bb7(node));\n}else{\nss.push(_bb8(v,opts.mappingRows)||v);\nopts.unselectedValues.push(v);\n}\n});\nif(opts.multiple){\n$.map(tree.tree(\"getChecked\"),function(node){\nvar id=String(node.id);\nif($.inArray(id,vv)==-1){\nvv.push(id);\nss.push(_bb7(node));\n}\n});\n}\n_bb1.onBeforeCheck=_bb2;\n_bb1.onCheck=_bb3;\n_bb1.onBeforeSelect=_bb4;\n_bb1.onSelect=_bb5;\nif(!_baf){\nvar s=ss.join(opts.separator);\nif($(_bad).combo(\"getText\")!=s){\n$(_bad).combo(\"setText\",s);\n}\n}\n$(_bad).combo(\"setValues\",vv);\nfunction _bb8(_bb9,a){\nvar item=$.easyui.getArrayItem(a,\"id\",_bb9);\nreturn item?_bb7(item):undefined;\n};\nfunction _bb7(node){\nreturn node[opts.textField||\"\"]||node.text;\n};\n};\nfunction _bba(_bbb,q){\nvar _bbc=$.data(_bbb,\"combotree\");\nvar opts=_bbc.options;\nvar tree=_bbc.tree;\n_bbc.remainText=true;\ntree.tree(\"doFilter\",opts.multiple?q.split(opts.separator):q);\n};\nfunction _bbd(_bbe){\nvar _bbf=$.data(_bbe,\"combotree\");\n_bbf.remainText=false;\n$(_bbe).combotree(\"setValues\",$(_bbe).combotree(\"getValues\"));\n$(_bbe).combotree(\"hidePanel\");\n};\n$.fn.combotree=function(_bc0,_bc1){\nif(typeof _bc0==\"string\"){\nvar _bc2=$.fn.combotree.methods[_bc0];\nif(_bc2){\nreturn _bc2(this,_bc1);\n}else{\nreturn this.combo(_bc0,_bc1);\n}\n}\n_bc0=_bc0||{};\nreturn this.each(function(){\nvar _bc3=$.data(this,\"combotree\");\nif(_bc3){\n$.extend(_bc3.options,_bc0);\n}else{\n$.data(this,\"combotree\",{options:$.extend({},$.fn.combotree.defaults,$.fn.combotree.parseOptions(this),_bc0)});\n}\n_ba3(this);\n});\n};\n$.fn.combotree.methods={options:function(jq){\nvar _bc4=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"combotree\").options,{width:_bc4.width,height:_bc4.height,originalValue:_bc4.originalValue,disabled:_bc4.disabled,readonly:_bc4.readonly});\n},clone:function(jq,_bc5){\nvar t=jq.combo(\"clone\",_bc5);\nt.data(\"combotree\",{options:$.extend(true,{},jq.combotree(\"options\")),tree:jq.combotree(\"tree\")});\nreturn t;\n},tree:function(jq){\nreturn $.data(jq[0],\"combotree\").tree;\n},loadData:function(jq,data){\nreturn jq.each(function(){\nvar opts=$.data(this,\"combotree\").options;\nopts.data=data;\nvar tree=$.data(this,\"combotree\").tree;\ntree.tree(\"loadData\",data);\n});\n},reload:function(jq,url){\nreturn jq.each(function(){\nvar opts=$.data(this,\"combotree\").options;\nvar tree=$.data(this,\"combotree\").tree;\nif(url){\nopts.url=url;\n}\ntree.tree({url:opts.url});\n});\n},setValues:function(jq,_bc6){\nreturn jq.each(function(){\nvar opts=$(this).combotree(\"options\");\nif($.isArray(_bc6)){\n_bc6=$.map(_bc6,function(_bc7){\nif(_bc7&&typeof _bc7==\"object\"){\n$.easyui.addArrayItem(opts.mappingRows,\"id\",_bc7);\nreturn _bc7.id;\n}else{\nreturn _bc7;\n}\n});\n}\n_bac(this,_bc6);\n});\n},setValue:function(jq,_bc8){\nreturn jq.each(function(){\n$(this).combotree(\"setValues\",$.isArray(_bc8)?_bc8:[_bc8]);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).combotree(\"setValues\",[]);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).combotree(\"options\");\nif(opts.multiple){\n$(this).combotree(\"setValues\",opts.originalValue);\n}else{\n$(this).combotree(\"setValue\",opts.originalValue);\n}\n});\n}};\n$.fn.combotree.parseOptions=function(_bc9){\nreturn $.extend({},$.fn.combo.parseOptions(_bc9),$.fn.tree.parseOptions(_bc9));\n};\n$.fn.combotree.defaults=$.extend({},$.fn.combo.defaults,$.fn.tree.defaults,{editable:false,textField:null,unselectedValues:[],mappingRows:[],keyHandler:{up:function(e){\n},down:function(e){\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_bbd(this);\n},query:function(q,e){\n_bba(this,q);\n}}});\n})(jQuery);\n(function($){\nfunction _bca(_bcb){\nvar _bcc=$.data(_bcb,\"combogrid\");\nvar opts=_bcc.options;\nvar grid=_bcc.grid;\n$(_bcb).addClass(\"combogrid-f\").combo($.extend({},opts,{onShowPanel:function(){\n_be3(this,$(this).combogrid(\"getValues\"),true);\nvar p=$(this).combogrid(\"panel\");\nvar _bcd=p.outerHeight()-p.height();\nvar _bce=p._size(\"minHeight\");\nvar _bcf=p._size(\"maxHeight\");\nvar dg=$(this).combogrid(\"grid\");\ndg.datagrid(\"resize\",{width:\"100%\",height:(isNaN(parseInt(opts.panelHeight))?\"auto\":\"100%\"),minHeight:(_bce?_bce-_bcd:\"\"),maxHeight:(_bcf?_bcf-_bcd:\"\")});\nvar row=dg.datagrid(\"getSelected\");\nif(row){\ndg.datagrid(\"scrollTo\",dg.datagrid(\"getRowIndex\",row));\n}\nopts.onShowPanel.call(this);\n}}));\nvar _bd0=$(_bcb).combo(\"panel\");\nif(!grid){\ngrid=$(\"<table></table>\").appendTo(_bd0);\n_bcc.grid=grid;\n}\ngrid.datagrid($.extend({},opts,{border:false,singleSelect:(!opts.multiple),onLoadSuccess:_bd1,onClickRow:_bd2,onSelect:_bd3(\"onSelect\"),onUnselect:_bd3(\"onUnselect\"),onSelectAll:_bd3(\"onSelectAll\"),onUnselectAll:_bd3(\"onUnselectAll\")}));\nfunction _bd4(dg){\nreturn $(dg).closest(\".combo-panel\").panel(\"options\").comboTarget||_bcb;\n};\nfunction _bd1(data){\nvar _bd5=_bd4(this);\nvar _bd6=$(_bd5).data(\"combogrid\");\nvar opts=_bd6.options;\nvar _bd7=$(_bd5).combo(\"getValues\");\n_be3(_bd5,_bd7,_bd6.remainText);\nopts.onLoadSuccess.call(this,data);\n};\nfunction _bd2(_bd8,row){\nvar _bd9=_bd4(this);\nvar _bda=$(_bd9).data(\"combogrid\");\nvar opts=_bda.options;\n_bda.remainText=false;\n_bdb.call(this);\nif(!opts.multiple){\n$(_bd9).combo(\"hidePanel\");\n}\nopts.onClickRow.call(this,_bd8,row);\n};\nfunction _bd3(_bdc){\nreturn function(_bdd,row){\nvar _bde=_bd4(this);\nvar opts=$(_bde).combogrid(\"options\");\nif(_bdc==\"onUnselectAll\"){\nif(opts.multiple){\n_bdb.call(this);\n}\n}else{\n_bdb.call(this);\n}\nopts[_bdc].call(this,_bdd,row);\n};\n};\nfunction _bdb(){\nvar dg=$(this);\nvar _bdf=_bd4(dg);\nvar _be0=$(_bdf).data(\"combogrid\");\nvar opts=_be0.options;\nvar vv=$.map(dg.datagrid(\"getSelections\"),function(row){\nreturn row[opts.idField];\n});\nvv=vv.concat(opts.unselectedValues);\nvar _be1=dg.data(\"datagrid\").dc.body2;\nvar _be2=_be1.scrollTop();\n_be3(_bdf,vv,_be0.remainText);\n_be1.scrollTop(_be2);\n};\n};\nfunction nav(_be4,dir){\nvar _be5=$.data(_be4,\"combogrid\");\nvar opts=_be5.options;\nvar grid=_be5.grid;\nvar _be6=grid.datagrid(\"getRows\").length;\nif(!_be6){\nreturn;\n}\nvar tr=opts.finder.getTr(grid[0],null,\"highlight\");\nif(!tr.length){\ntr=opts.finder.getTr(grid[0],null,\"selected\");\n}\nvar _be7;\nif(!tr.length){\n_be7=(dir==\"next\"?0:_be6-1);\n}else{\nvar _be7=parseInt(tr.attr(\"datagrid-row-index\"));\n_be7+=(dir==\"next\"?1:-1);\nif(_be7<0){\n_be7=_be6-1;\n}\nif(_be7>=_be6){\n_be7=0;\n}\n}\ngrid.datagrid(\"highlightRow\",_be7);\nif(opts.selectOnNavigation){\n_be5.remainText=false;\ngrid.datagrid(\"selectRow\",_be7);\n}\n};\nfunction _be3(_be8,_be9,_bea){\nvar _beb=$.data(_be8,\"combogrid\");\nvar opts=_beb.options;\nvar grid=_beb.grid;\nvar _bec=$(_be8).combo(\"getValues\");\nvar _bed=$(_be8).combo(\"options\");\nvar _bee=_bed.onChange;\n_bed.onChange=function(){\n};\nvar _bef=grid.datagrid(\"options\");\nvar _bf0=_bef.onSelect;\nvar _bf1=_bef.onUnselectAll;\n_bef.onSelect=_bef.onUnselectAll=function(){\n};\nif(!$.isArray(_be9)){\n_be9=_be9.split(opts.separator);\n}\nif(!opts.multiple){\n_be9=_be9.length?[_be9[0]]:[\"\"];\n}\nvar vv=$.map(_be9,function(_bf2){\nreturn String(_bf2);\n});\nvv=$.grep(vv,function(v,_bf3){\nreturn _bf3===$.inArray(v,vv);\n});\nvar _bf4=$.grep(grid.datagrid(\"getSelections\"),function(row,_bf5){\nreturn $.inArray(String(row[opts.idField]),vv)>=0;\n});\ngrid.datagrid(\"clearSelections\");\ngrid.data(\"datagrid\").selectedRows=_bf4;\nvar ss=[];\nopts.unselectedValues=[];\n$.map(vv,function(v){\nvar _bf6=grid.datagrid(\"getRowIndex\",v);\nif(_bf6>=0){\ngrid.datagrid(\"selectRow\",_bf6);\n}else{\nopts.unselectedValues.push(v);\n}\nss.push(_bf7(v,grid.datagrid(\"getRows\"))||_bf7(v,_bf4)||_bf7(v,opts.mappingRows)||v);\n});\n$(_be8).combo(\"setValues\",_bec);\n_bed.onChange=_bee;\n_bef.onSelect=_bf0;\n_bef.onUnselectAll=_bf1;\nif(!_bea){\nvar s=ss.join(opts.separator);\nif($(_be8).combo(\"getText\")!=s){\n$(_be8).combo(\"setText\",s);\n}\n}\n$(_be8).combo(\"setValues\",_be9);\nfunction _bf7(_bf8,a){\nvar item=$.easyui.getArrayItem(a,opts.idField,_bf8);\nreturn item?item[opts.textField]:undefined;\n};\n};\nfunction _bf9(_bfa,q){\nvar _bfb=$.data(_bfa,\"combogrid\");\nvar opts=_bfb.options;\nvar grid=_bfb.grid;\n_bfb.remainText=true;\nvar qq=opts.multiple?q.split(opts.separator):[q];\nqq=$.grep(qq,function(q){\nreturn $.trim(q)!=\"\";\n});\nif(opts.mode==\"remote\"){\n_bfc(qq);\ngrid.datagrid(\"load\",$.extend({},opts.queryParams,{q:q}));\n}else{\ngrid.datagrid(\"highlightRow\",-1);\nvar rows=grid.datagrid(\"getRows\");\nvar vv=[];\n$.map(qq,function(q){\nq=$.trim(q);\nvar _bfd=q;\n_bfe(opts.mappingRows,q);\n_bfe(grid.datagrid(\"getSelections\"),q);\nvar _bff=_bfe(rows,q);\nif(_bff>=0){\nif(opts.reversed){\ngrid.datagrid(\"highlightRow\",_bff);\n}\n}else{\n$.map(rows,function(row,i){\nif(opts.filter.call(_bfa,q,row)){\ngrid.datagrid(\"highlightRow\",i);\n}\n});\n}\n});\n_bfc(vv);\n}\nfunction _bfe(rows,q){\nfor(var i=0;i<rows.length;i++){\nvar row=rows[i];\nif((row[opts.textField]||\"\").toLowerCase()==q.toLowerCase()){\nvv.push(row[opts.idField]);\nreturn i;\n}\n}\nreturn -1;\n};\nfunction _bfc(vv){\nif(!opts.reversed){\n_be3(_bfa,vv,true);\n}\n};\n};\nfunction _c00(_c01){\nvar _c02=$.data(_c01,\"combogrid\");\nvar opts=_c02.options;\nvar grid=_c02.grid;\nvar tr=opts.finder.getTr(grid[0],null,\"highlight\");\n_c02.remainText=false;\nif(tr.length){\nvar _c03=parseInt(tr.attr(\"datagrid-row-index\"));\nif(opts.multiple){\nif(tr.hasClass(\"datagrid-row-selected\")){\ngrid.datagrid(\"unselectRow\",_c03);\n}else{\ngrid.datagrid(\"selectRow\",_c03);\n}\n}else{\ngrid.datagrid(\"selectRow\",_c03);\n}\n}\nvar vv=[];\n$.map(grid.datagrid(\"getSelections\"),function(row){\nvv.push(row[opts.idField]);\n});\n$.map(opts.unselectedValues,function(v){\nif($.easyui.indexOfArray(opts.mappingRows,opts.idField,v)>=0){\n$.easyui.addArrayItem(vv,v);\n}\n});\n$(_c01).combogrid(\"setValues\",vv);\nif(!opts.multiple){\n$(_c01).combogrid(\"hidePanel\");\n}\n};\n$.fn.combogrid=function(_c04,_c05){\nif(typeof _c04==\"string\"){\nvar _c06=$.fn.combogrid.methods[_c04];\nif(_c06){\nreturn _c06(this,_c05);\n}else{\nreturn this.combo(_c04,_c05);\n}\n}\n_c04=_c04||{};\nreturn this.each(function(){\nvar _c07=$.data(this,\"combogrid\");\nif(_c07){\n$.extend(_c07.options,_c04);\n}else{\n_c07=$.data(this,\"combogrid\",{options:$.extend({},$.fn.combogrid.defaults,$.fn.combogrid.parseOptions(this),_c04)});\n}\n_bca(this);\n});\n};\n$.fn.combogrid.methods={options:function(jq){\nvar _c08=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"combogrid\").options,{width:_c08.width,height:_c08.height,originalValue:_c08.originalValue,disabled:_c08.disabled,readonly:_c08.readonly});\n},cloneFrom:function(jq,from){\nreturn jq.each(function(){\n$(this).combo(\"cloneFrom\",from);\n$.data(this,\"combogrid\",{options:$.extend(true,{cloned:true},$(from).combogrid(\"options\")),combo:$(this).next(),panel:$(from).combo(\"panel\"),grid:$(from).combogrid(\"grid\")});\n});\n},grid:function(jq){\nreturn $.data(jq[0],\"combogrid\").grid;\n},setValues:function(jq,_c09){\nreturn jq.each(function(){\nvar opts=$(this).combogrid(\"options\");\nif($.isArray(_c09)){\n_c09=$.map(_c09,function(_c0a){\nif(_c0a&&typeof _c0a==\"object\"){\n$.easyui.addArrayItem(opts.mappingRows,opts.idField,_c0a);\nreturn _c0a[opts.idField];\n}else{\nreturn _c0a;\n}\n});\n}\n_be3(this,_c09);\n});\n},setValue:function(jq,_c0b){\nreturn jq.each(function(){\n$(this).combogrid(\"setValues\",$.isArray(_c0b)?_c0b:[_c0b]);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).combogrid(\"setValues\",[]);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).combogrid(\"options\");\nif(opts.multiple){\n$(this).combogrid(\"setValues\",opts.originalValue);\n}else{\n$(this).combogrid(\"setValue\",opts.originalValue);\n}\n});\n}};\n$.fn.combogrid.parseOptions=function(_c0c){\nvar t=$(_c0c);\nreturn $.extend({},$.fn.combo.parseOptions(_c0c),$.fn.datagrid.parseOptions(_c0c),$.parser.parseOptions(_c0c,[\"idField\",\"textField\",\"mode\"]));\n};\n$.fn.combogrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.datagrid.defaults,{loadMsg:null,idField:null,textField:null,unselectedValues:[],mappingRows:[],mode:\"local\",keyHandler:{up:function(e){\nnav(this,\"prev\");\ne.preventDefault();\n},down:function(e){\nnav(this,\"next\");\ne.preventDefault();\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_c00(this);\n},query:function(q,e){\n_bf9(this,q);\n}},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){\n$.fn.combo.defaults.inputEvents.blur(e);\nvar _c0d=e.data.target;\nvar opts=$(_c0d).combogrid(\"options\");\nif(opts.reversed){\n$(_c0d).combogrid(\"setValues\",$(_c0d).combogrid(\"getValues\"));\n}\n}}),panelEvents:{mousedown:function(e){\n}},filter:function(q,row){\nvar opts=$(this).combogrid(\"options\");\nreturn (row[opts.textField]||\"\").toLowerCase().indexOf(q.toLowerCase())>=0;\n}});\n})(jQuery);\n(function($){\nfunction _c0e(_c0f){\nvar _c10=$.data(_c0f,\"combotreegrid\");\nvar opts=_c10.options;\n$(_c0f).addClass(\"combotreegrid-f\").combo($.extend({},opts,{onShowPanel:function(){\nvar p=$(this).combotreegrid(\"panel\");\nvar _c11=p.outerHeight()-p.height();\nvar _c12=p._size(\"minHeight\");\nvar _c13=p._size(\"maxHeight\");\nvar dg=$(this).combotreegrid(\"grid\");\ndg.treegrid(\"resize\",{width:\"100%\",height:(isNaN(parseInt(opts.panelHeight))?\"auto\":\"100%\"),minHeight:(_c12?_c12-_c11:\"\"),maxHeight:(_c13?_c13-_c11:\"\")});\nvar row=dg.treegrid(\"getSelected\");\nif(row){\ndg.treegrid(\"scrollTo\",row[opts.idField]);\n}\nopts.onShowPanel.call(this);\n}}));\nif(!_c10.grid){\nvar _c14=$(_c0f).combo(\"panel\");\n_c10.grid=$(\"<table></table>\").appendTo(_c14);\n}\n_c10.grid.treegrid($.extend({},opts,{border:false,checkbox:opts.multiple,onLoadSuccess:function(row,data){\nvar _c15=$(_c0f).combotreegrid(\"getValues\");\nif(opts.multiple){\n$.map($(this).treegrid(\"getCheckedNodes\"),function(row){\n$.easyui.addArrayItem(_c15,row[opts.idField]);\n});\n}\n_c1a(_c0f,_c15);\nopts.onLoadSuccess.call(this,row,data);\n_c10.remainText=false;\n},onClickRow:function(row){\nif(opts.multiple){\n$(this).treegrid(row.checked?\"uncheckNode\":\"checkNode\",row[opts.idField]);\n$(this).treegrid(\"unselect\",row[opts.idField]);\n}else{\n$(_c0f).combo(\"hidePanel\");\n}\n_c17(_c0f);\nopts.onClickRow.call(this,row);\n},onCheckNode:function(row,_c16){\n_c17(_c0f);\nopts.onCheckNode.call(this,row,_c16);\n}}));\n};\nfunction _c17(_c18){\nvar _c19=$.data(_c18,\"combotreegrid\");\nvar opts=_c19.options;\nvar grid=_c19.grid;\nvar vv=[];\nif(opts.multiple){\nvv=$.map(grid.treegrid(\"getCheckedNodes\"),function(row){\nreturn row[opts.idField];\n});\n}else{\nvar row=grid.treegrid(\"getSelected\");\nif(row){\nvv.push(row[opts.idField]);\n}\n}\nvv=vv.concat(opts.unselectedValues);\n_c1a(_c18,vv);\n};\nfunction _c1a(_c1b,_c1c){\nvar _c1d=$.data(_c1b,\"combotreegrid\");\nvar opts=_c1d.options;\nvar grid=_c1d.grid;\nvar _c1e=grid.datagrid(\"options\");\nvar _c1f=_c1e.onBeforeCheck;\nvar _c20=_c1e.onCheck;\nvar _c21=_c1e.onBeforeSelect;\nvar _c22=_c1e.onSelect;\n_c1e.onBeforeCheck=_c1e.onCheck=_c1e.onBeforeSelect=_c1e.onSelect=function(){\n};\nif(!$.isArray(_c1c)){\n_c1c=_c1c.split(opts.separator);\n}\nif(!opts.multiple){\n_c1c=_c1c.length?[_c1c[0]]:[\"\"];\n}\nvar vv=$.map(_c1c,function(_c23){\nreturn String(_c23);\n});\nvv=$.grep(vv,function(v,_c24){\nreturn _c24===$.inArray(v,vv);\n});\nvar _c25=grid.treegrid(\"getSelected\");\nif(_c25){\ngrid.treegrid(\"unselect\",_c25[opts.idField]);\n}\n$.map(grid.treegrid(\"getCheckedNodes\"),function(row){\nif($.inArray(String(row[opts.idField]),vv)==-1){\ngrid.treegrid(\"uncheckNode\",row[opts.idField]);\n}\n});\nvar ss=[];\nopts.unselectedValues=[];\n$.map(vv,function(v){\nvar row=grid.treegrid(\"find\",v);\nif(row){\nif(opts.multiple){\ngrid.treegrid(\"checkNode\",v);\n}else{\ngrid.treegrid(\"select\",v);\n}\nss.push(_c26(row));\n}else{\nss.push(_c27(v,opts.mappingRows)||v);\nopts.unselectedValues.push(v);\n}\n});\nif(opts.multiple){\n$.map(grid.treegrid(\"getCheckedNodes\"),function(row){\nvar id=String(row[opts.idField]);\nif($.inArray(id,vv)==-1){\nvv.push(id);\nss.push(_c26(row));\n}\n});\n}\n_c1e.onBeforeCheck=_c1f;\n_c1e.onCheck=_c20;\n_c1e.onBeforeSelect=_c21;\n_c1e.onSelect=_c22;\nif(!_c1d.remainText){\nvar s=ss.join(opts.separator);\nif($(_c1b).combo(\"getText\")!=s){\n$(_c1b).combo(\"setText\",s);\n}\n}\n$(_c1b).combo(\"setValues\",vv);\nfunction _c27(_c28,a){\nvar item=$.easyui.getArrayItem(a,opts.idField,_c28);\nreturn item?_c26(item):undefined;\n};\nfunction _c26(row){\nreturn row[opts.textField||\"\"]||row[opts.treeField];\n};\n};\nfunction _c29(_c2a,q){\nvar _c2b=$.data(_c2a,\"combotreegrid\");\nvar opts=_c2b.options;\nvar grid=_c2b.grid;\n_c2b.remainText=true;\nvar qq=opts.multiple?q.split(opts.separator):[q];\nqq=$.grep(qq,function(q){\nreturn $.trim(q)!=\"\";\n});\ngrid.treegrid(\"clearSelections\").treegrid(\"clearChecked\").treegrid(\"highlightRow\",-1);\nif(opts.mode==\"remote\"){\n_c2c(qq);\ngrid.treegrid(\"load\",$.extend({},opts.queryParams,{q:q}));\n}else{\nif(q){\nvar data=grid.treegrid(\"getData\");\nvar vv=[];\n$.map(qq,function(q){\nq=$.trim(q);\nif(q){\nvar v=undefined;\n$.easyui.forEach(data,true,function(row){\nif(q.toLowerCase()==String(row[opts.treeField]).toLowerCase()){\nv=row[opts.idField];\nreturn false;\n}else{\nif(opts.filter.call(_c2a,q,row)){\ngrid.treegrid(\"expandTo\",row[opts.idField]);\ngrid.treegrid(\"highlightRow\",row[opts.idField]);\nreturn false;\n}\n}\n});\nif(v==undefined){\n$.easyui.forEach(opts.mappingRows,false,function(row){\nif(q.toLowerCase()==String(row[opts.treeField])){\nv=row[opts.idField];\nreturn false;\n}\n});\n}\nif(v!=undefined){\nvv.push(v);\n}else{\nvv.push(q);\n}\n}\n});\n_c2c(vv);\n_c2b.remainText=false;\n}\n}\nfunction _c2c(vv){\nif(!opts.reversed){\n$(_c2a).combotreegrid(\"setValues\",vv);\n}\n};\n};\nfunction _c2d(_c2e){\nvar _c2f=$.data(_c2e,\"combotreegrid\");\nvar opts=_c2f.options;\nvar grid=_c2f.grid;\nvar tr=opts.finder.getTr(grid[0],null,\"highlight\");\n_c2f.remainText=false;\nif(tr.length){\nvar id=tr.attr(\"node-id\");\nif(opts.multiple){\nif(tr.hasClass(\"datagrid-row-selected\")){\ngrid.treegrid(\"uncheckNode\",id);\n}else{\ngrid.treegrid(\"checkNode\",id);\n}\n}else{\ngrid.treegrid(\"selectRow\",id);\n}\n}\nvar vv=[];\nif(opts.multiple){\n$.map(grid.treegrid(\"getCheckedNodes\"),function(row){\nvv.push(row[opts.idField]);\n});\n}else{\nvar row=grid.treegrid(\"getSelected\");\nif(row){\nvv.push(row[opts.idField]);\n}\n}\n$.map(opts.unselectedValues,function(v){\nif($.easyui.indexOfArray(opts.mappingRows,opts.idField,v)>=0){\n$.easyui.addArrayItem(vv,v);\n}\n});\n$(_c2e).combotreegrid(\"setValues\",vv);\nif(!opts.multiple){\n$(_c2e).combotreegrid(\"hidePanel\");\n}\n};\n$.fn.combotreegrid=function(_c30,_c31){\nif(typeof _c30==\"string\"){\nvar _c32=$.fn.combotreegrid.methods[_c30];\nif(_c32){\nreturn _c32(this,_c31);\n}else{\nreturn this.combo(_c30,_c31);\n}\n}\n_c30=_c30||{};\nreturn this.each(function(){\nvar _c33=$.data(this,\"combotreegrid\");\nif(_c33){\n$.extend(_c33.options,_c30);\n}else{\n_c33=$.data(this,\"combotreegrid\",{options:$.extend({},$.fn.combotreegrid.defaults,$.fn.combotreegrid.parseOptions(this),_c30)});\n}\n_c0e(this);\n});\n};\n$.fn.combotreegrid.methods={options:function(jq){\nvar _c34=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"combotreegrid\").options,{width:_c34.width,height:_c34.height,originalValue:_c34.originalValue,disabled:_c34.disabled,readonly:_c34.readonly});\n},grid:function(jq){\nreturn $.data(jq[0],\"combotreegrid\").grid;\n},setValues:function(jq,_c35){\nreturn jq.each(function(){\nvar opts=$(this).combotreegrid(\"options\");\nif($.isArray(_c35)){\n_c35=$.map(_c35,function(_c36){\nif(_c36&&typeof _c36==\"object\"){\n$.easyui.addArrayItem(opts.mappingRows,opts.idField,_c36);\nreturn _c36[opts.idField];\n}else{\nreturn _c36;\n}\n});\n}\n_c1a(this,_c35);\n});\n},setValue:function(jq,_c37){\nreturn jq.each(function(){\n$(this).combotreegrid(\"setValues\",$.isArray(_c37)?_c37:[_c37]);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).combotreegrid(\"setValues\",[]);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).combotreegrid(\"options\");\nif(opts.multiple){\n$(this).combotreegrid(\"setValues\",opts.originalValue);\n}else{\n$(this).combotreegrid(\"setValue\",opts.originalValue);\n}\n});\n}};\n$.fn.combotreegrid.parseOptions=function(_c38){\nvar t=$(_c38);\nreturn $.extend({},$.fn.combo.parseOptions(_c38),$.fn.treegrid.parseOptions(_c38),$.parser.parseOptions(_c38,[\"mode\",{limitToGrid:\"boolean\"}]));\n};\n$.fn.combotreegrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.treegrid.defaults,{editable:false,singleSelect:true,limitToGrid:false,unselectedValues:[],mappingRows:[],mode:\"local\",textField:null,keyHandler:{up:function(e){\n},down:function(e){\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_c2d(this);\n},query:function(q,e){\n_c29(this,q);\n}},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){\n$.fn.combo.defaults.inputEvents.blur(e);\nvar _c39=e.data.target;\nvar opts=$(_c39).combotreegrid(\"options\");\nif(opts.limitToGrid){\n_c2d(_c39);\n}\n}}),filter:function(q,row){\nvar opts=$(this).combotreegrid(\"options\");\nreturn (row[opts.treeField]||\"\").toLowerCase().indexOf(q.toLowerCase())>=0;\n}});\n})(jQuery);\n(function($){\nfunction _c3a(_c3b){\nvar _c3c=$.data(_c3b,\"tagbox\");\nvar opts=_c3c.options;\n$(_c3b).addClass(\"tagbox-f\").combobox($.extend({},opts,{cls:\"tagbox\",reversed:true,onChange:function(_c3d,_c3e){\n_c3f();\n$(this).combobox(\"hidePanel\");\nopts.onChange.call(_c3b,_c3d,_c3e);\n},onResizing:function(_c40,_c41){\nvar _c42=$(this).combobox(\"textbox\");\nvar tb=$(this).data(\"textbox\").textbox;\nvar _c43=tb.outerWidth();\ntb.css({height:\"\",paddingLeft:_c42.css(\"marginLeft\"),paddingRight:_c42.css(\"marginRight\")});\n_c42.css(\"margin\",0);\ntb._outerWidth(_c43);\n_c56(_c3b);\n_c48(this);\nopts.onResizing.call(_c3b,_c40,_c41);\n},onLoadSuccess:function(data){\n_c3f();\nopts.onLoadSuccess.call(_c3b,data);\n}}));\n_c3f();\n_c56(_c3b);\nfunction _c3f(){\n$(_c3b).next().find(\".tagbox-label\").remove();\nvar _c44=$(_c3b).tagbox(\"textbox\");\nvar ss=[];\n$.map($(_c3b).tagbox(\"getValues\"),function(_c45,_c46){\nvar row=opts.finder.getRow(_c3b,_c45);\nvar text=opts.tagFormatter.call(_c3b,_c45,row);\nvar cs={};\nvar css=opts.tagStyler.call(_c3b,_c45,row)||\"\";\nif(typeof css==\"string\"){\ncs={s:css};\n}else{\ncs={c:css[\"class\"]||\"\",s:css[\"style\"]||\"\"};\n}\nvar _c47=$(\"<span class=\\\"tagbox-label\\\"></span>\").insertBefore(_c44).html(text);\n_c47.attr(\"tagbox-index\",_c46);\n_c47.attr(\"style\",cs.s).addClass(cs.c);\n$(\"<a href=\\\"javascript:;\\\" class=\\\"tagbox-remove\\\"></a>\").appendTo(_c47);\n});\n_c48(_c3b);\n$(_c3b).combobox(\"setText\",\"\");\n};\n};\nfunction _c48(_c49,_c4a){\nvar span=$(_c49).next();\nvar _c4b=_c4a?$(_c4a):span.find(\".tagbox-label\");\nif(_c4b.length){\nvar _c4c=$(_c49).tagbox(\"textbox\");\nvar _c4d=$(_c4b[0]);\nvar _c4e=_c4d.outerHeight(true)-_c4d.outerHeight();\nvar _c4f=_c4c.outerHeight()-_c4e*2;\n_c4b.css({height:_c4f+\"px\",lineHeight:_c4f+\"px\"});\nvar _c50=span.find(\".textbox-addon\").css(\"height\",\"100%\");\n_c50.find(\".textbox-icon\").css(\"height\",\"100%\");\nspan.find(\".textbox-button\").linkbutton(\"resize\",{height:\"100%\"});\n}\n};\nfunction _c51(_c52){\nvar span=$(_c52).next();\nspan._unbind(\".tagbox\")._bind(\"click.tagbox\",function(e){\nvar opts=$(_c52).tagbox(\"options\");\nif(opts.disabled||opts.readonly){\nreturn;\n}\nif($(e.target).hasClass(\"tagbox-remove\")){\nvar _c53=parseInt($(e.target).parent().attr(\"tagbox-index\"));\nvar _c54=$(_c52).tagbox(\"getValues\");\nif(opts.onBeforeRemoveTag.call(_c52,_c54[_c53])==false){\nreturn;\n}\nopts.onRemoveTag.call(_c52,_c54[_c53]);\n_c54.splice(_c53,1);\n$(_c52).tagbox(\"setValues\",_c54);\n}else{\nvar _c55=$(e.target).closest(\".tagbox-label\");\nif(_c55.length){\nvar _c53=parseInt(_c55.attr(\"tagbox-index\"));\nvar _c54=$(_c52).tagbox(\"getValues\");\nopts.onClickTag.call(_c52,_c54[_c53]);\n}\n}\n$(this).find(\".textbox-text\").focus();\n})._bind(\"keyup.tagbox\",function(e){\n_c56(_c52);\n})._bind(\"mouseover.tagbox\",function(e){\nif($(e.target).closest(\".textbox-button,.textbox-addon,.tagbox-label\").length){\n$(this).triggerHandler(\"mouseleave\");\n}else{\n$(this).find(\".textbox-text\").triggerHandler(\"mouseenter\");\n}\n})._bind(\"mouseleave.tagbox\",function(e){\n$(this).find(\".textbox-text\").triggerHandler(\"mouseleave\");\n});\n};\nfunction _c56(_c57){\nvar opts=$(_c57).tagbox(\"options\");\nvar _c58=$(_c57).tagbox(\"textbox\");\nvar span=$(_c57).next();\nvar tmp=$(\"<span></span>\").appendTo(\"body\");\ntmp.attr(\"style\",_c58.attr(\"style\"));\ntmp.css({position:\"absolute\",top:-9999,left:-9999,width:\"auto\",fontFamily:_c58.css(\"fontFamily\"),fontSize:_c58.css(\"fontSize\"),fontWeight:_c58.css(\"fontWeight\"),whiteSpace:\"nowrap\"});\nvar _c59=_c5a(_c58.val());\nvar _c5b=_c5a(opts.prompt||\"\");\ntmp.remove();\nvar _c5c=Math.min(Math.max(_c59,_c5b)+20,span.width());\n_c58._outerWidth(_c5c);\nspan.find(\".textbox-button\").linkbutton(\"resize\",{height:\"100%\"});\nfunction _c5a(val){\nvar s=val.replace(/&/g,\"&amp;\").replace(/\\s/g,\" \").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\");\ntmp.html(s);\nreturn tmp.outerWidth();\n};\n};\nfunction _c5d(_c5e){\nvar t=$(_c5e);\nvar opts=t.tagbox(\"options\");\nif(opts.limitToList){\nvar _c5f=t.tagbox(\"panel\");\nvar item=_c5f.children(\"div.combobox-item-hover\");\nif(item.length){\nitem.removeClass(\"combobox-item-hover\");\nvar row=opts.finder.getRow(_c5e,item);\nvar _c60=row[opts.valueField];\n$(_c5e).tagbox(item.hasClass(\"combobox-item-selected\")?\"unselect\":\"select\",_c60);\n}\n$(_c5e).tagbox(\"hidePanel\");\n}else{\nvar v=$.trim($(_c5e).tagbox(\"getText\"));\nif(v!==\"\"){\nvar _c61=$(_c5e).tagbox(\"getValues\");\n_c61.push(v);\n$(_c5e).tagbox(\"setValues\",_c61);\n}\n}\n};\nfunction _c62(_c63,_c64){\n$(_c63).combobox(\"setText\",\"\");\n_c56(_c63);\n$(_c63).combobox(\"setValues\",_c64);\n$(_c63).combobox(\"setText\",\"\");\n$(_c63).tagbox(\"validate\");\n};\n$.fn.tagbox=function(_c65,_c66){\nif(typeof _c65==\"string\"){\nvar _c67=$.fn.tagbox.methods[_c65];\nif(_c67){\nreturn _c67(this,_c66);\n}else{\nreturn this.combobox(_c65,_c66);\n}\n}\n_c65=_c65||{};\nreturn this.each(function(){\nvar _c68=$.data(this,\"tagbox\");\nif(_c68){\n$.extend(_c68.options,_c65);\n}else{\n$.data(this,\"tagbox\",{options:$.extend({},$.fn.tagbox.defaults,$.fn.tagbox.parseOptions(this),_c65)});\n}\n_c3a(this);\n_c51(this);\n});\n};\n$.fn.tagbox.methods={options:function(jq){\nvar _c69=jq.combobox(\"options\");\nreturn $.extend($.data(jq[0],\"tagbox\").options,{width:_c69.width,height:_c69.height,originalValue:_c69.originalValue,disabled:_c69.disabled,readonly:_c69.readonly});\n},setValues:function(jq,_c6a){\nreturn jq.each(function(){\n_c62(this,_c6a);\n});\n},reset:function(jq){\nreturn jq.each(function(){\n$(this).combobox(\"reset\").combobox(\"setText\",\"\");\n});\n}};\n$.fn.tagbox.parseOptions=function(_c6b){\nreturn $.extend({},$.fn.combobox.parseOptions(_c6b),$.parser.parseOptions(_c6b,[]));\n};\n$.fn.tagbox.defaults=$.extend({},$.fn.combobox.defaults,{hasDownArrow:false,multiple:true,reversed:true,selectOnNavigation:false,tipOptions:$.extend({},$.fn.textbox.defaults.tipOptions,{showDelay:200}),val:function(_c6c){\nvar vv=$(_c6c).parent().prev().tagbox(\"getValues\");\nif($(_c6c).is(\":focus\")){\nvv.push($(_c6c).val());\n}\nreturn vv.join(\",\");\n},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){\nvar _c6d=e.data.target;\nvar opts=$(_c6d).tagbox(\"options\");\nif(opts.limitToList){\n_c5d(_c6d);\n}\n}}),keyHandler:$.extend({},$.fn.combobox.defaults.keyHandler,{enter:function(e){\n_c5d(this);\n},query:function(q,e){\nvar opts=$(this).tagbox(\"options\");\nif(opts.limitToList){\n$.fn.combobox.defaults.keyHandler.query.call(this,q,e);\n}else{\n$(this).combobox(\"hidePanel\");\n}\n}}),tagFormatter:function(_c6e,row){\nvar opts=$(this).tagbox(\"options\");\nreturn row?row[opts.textField]:_c6e;\n},tagStyler:function(_c6f,row){\nreturn \"\";\n},onClickTag:function(_c70){\n},onBeforeRemoveTag:function(_c71){\n},onRemoveTag:function(_c72){\n}});\n})(jQuery);\n(function($){\nfunction _c73(_c74){\nvar _c75=$.data(_c74,\"datebox\");\nvar opts=_c75.options;\n$(_c74).addClass(\"datebox-f\").combo($.extend({},opts,{onShowPanel:function(){\n_c76(this);\n_c77(this);\n_c78(this);\n_c86(this,$(this).datebox(\"getText\"),true);\nopts.onShowPanel.call(this);\n}}));\nif(!_c75.calendar){\nvar _c79=$(_c74).combo(\"panel\").css(\"overflow\",\"hidden\");\n_c79.panel(\"options\").onBeforeDestroy=function(){\nvar c=$(this).find(\".calendar-shared\");\nif(c.length){\nc.insertBefore(c[0].pholder);\n}\n};\nvar cc=$(\"<div class=\\\"datebox-calendar-inner\\\"></div>\").prependTo(_c79);\nif(opts.sharedCalendar){\nvar c=$(opts.sharedCalendar);\nif(!c[0].pholder){\nc[0].pholder=$(\"<div class=\\\"calendar-pholder\\\" style=\\\"display:none\\\"></div>\").insertAfter(c);\n}\nc.addClass(\"calendar-shared\").appendTo(cc);\nif(!c.hasClass(\"calendar\")){\nc.calendar();\n}\n_c75.calendar=c;\n}else{\n_c75.calendar=$(\"<div></div>\").appendTo(cc).calendar();\n}\n$.extend(_c75.calendar.calendar(\"options\"),{fit:true,border:false,onSelect:function(date){\nvar _c7a=this.target;\nvar opts=$(_c7a).datebox(\"options\");\nopts.onSelect.call(_c7a,date);\n_c86(_c7a,opts.formatter.call(_c7a,date));\n$(_c7a).combo(\"hidePanel\");\n}});\n}\n$(_c74).combo(\"textbox\").parent().addClass(\"datebox\");\n$(_c74).datebox(\"initValue\",opts.value);\nfunction _c76(_c7b){\nvar opts=$(_c7b).datebox(\"options\");\nvar _c7c=$(_c7b).combo(\"panel\");\n_c7c._unbind(\".datebox\")._bind(\"click.datebox\",function(e){\nif($(e.target).hasClass(\"datebox-button-a\")){\nvar _c7d=parseInt($(e.target).attr(\"datebox-button-index\"));\nopts.buttons[_c7d].handler.call(e.target,_c7b);\n}\n});\n};\nfunction _c77(_c7e){\nvar _c7f=$(_c7e).combo(\"panel\");\nif(_c7f.children(\"div.datebox-button\").length){\nreturn;\n}\nvar _c80=$(\"<div class=\\\"datebox-button\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" style=\\\"width:100%\\\"><tr></tr></table></div>\").appendTo(_c7f);\nvar tr=_c80.find(\"tr\");\nfor(var i=0;i<opts.buttons.length;i++){\nvar td=$(\"<td></td>\").appendTo(tr);\nvar btn=opts.buttons[i];\nvar t=$(\"<a class=\\\"datebox-button-a\\\" href=\\\"javascript:;\\\"></a>\").html($.isFunction(btn.text)?btn.text(_c7e):btn.text).appendTo(td);\nt.attr(\"datebox-button-index\",i);\n}\ntr.find(\"td\").css(\"width\",(100/opts.buttons.length)+\"%\");\n};\nfunction _c78(_c81){\nvar _c82=$(_c81).combo(\"panel\");\nvar cc=_c82.children(\"div.datebox-calendar-inner\");\n_c82.children()._outerWidth(_c82.width());\n_c75.calendar.appendTo(cc);\n_c75.calendar[0].target=_c81;\nif(opts.panelHeight!=\"auto\"){\nvar _c83=_c82.height();\n_c82.children().not(cc).each(function(){\n_c83-=$(this).outerHeight();\n});\ncc._outerHeight(_c83);\n}\n_c75.calendar.calendar(\"resize\");\n};\n};\nfunction _c84(_c85,q){\n_c86(_c85,q,true);\n};\nfunction _c87(_c88){\nvar _c89=$.data(_c88,\"datebox\");\nvar opts=_c89.options;\nvar _c8a=_c89.calendar.calendar(\"options\").current;\nif(_c8a){\n_c86(_c88,opts.formatter.call(_c88,_c8a));\n$(_c88).combo(\"hidePanel\");\n}\n};\nfunction _c86(_c8b,_c8c,_c8d){\nvar _c8e=$.data(_c8b,\"datebox\");\nvar opts=_c8e.options;\nvar _c8f=_c8e.calendar;\n_c8f.calendar(\"moveTo\",opts.parser.call(_c8b,_c8c));\nif(_c8d){\n$(_c8b).combo(\"setValue\",_c8c);\n}else{\nif(_c8c){\n_c8c=opts.formatter.call(_c8b,_c8f.calendar(\"options\").current);\n}\n$(_c8b).combo(\"setText\",_c8c).combo(\"setValue\",_c8c);\n}\n};\n$.fn.datebox=function(_c90,_c91){\nif(typeof _c90==\"string\"){\nvar _c92=$.fn.datebox.methods[_c90];\nif(_c92){\nreturn _c92(this,_c91);\n}else{\nreturn this.combo(_c90,_c91);\n}\n}\n_c90=_c90||{};\nreturn this.each(function(){\nvar _c93=$.data(this,\"datebox\");\nif(_c93){\n$.extend(_c93.options,_c90);\n}else{\n$.data(this,\"datebox\",{options:$.extend({},$.fn.datebox.defaults,$.fn.datebox.parseOptions(this),_c90)});\n}\n_c73(this);\n});\n};\n$.fn.datebox.methods={options:function(jq){\nvar _c94=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"datebox\").options,{width:_c94.width,height:_c94.height,originalValue:_c94.originalValue,disabled:_c94.disabled,readonly:_c94.readonly});\n},cloneFrom:function(jq,from){\nreturn jq.each(function(){\n$(this).combo(\"cloneFrom\",from);\n$.data(this,\"datebox\",{options:$.extend(true,{},$(from).datebox(\"options\")),calendar:$(from).datebox(\"calendar\")});\n$(this).addClass(\"datebox-f\");\n});\n},calendar:function(jq){\nreturn $.data(jq[0],\"datebox\").calendar;\n},initValue:function(jq,_c95){\nreturn jq.each(function(){\nvar opts=$(this).datebox(\"options\");\nvar _c96=opts.value;\nif(_c96){\nvar date=opts.parser.call(this,_c96);\n_c96=opts.formatter.call(this,date);\n$(this).datebox(\"calendar\").calendar(\"moveTo\",date);\n}\n$(this).combo(\"initValue\",_c96).combo(\"setText\",_c96);\n});\n},setValue:function(jq,_c97){\nreturn jq.each(function(){\n_c86(this,_c97);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).datebox(\"options\");\n$(this).datebox(\"setValue\",opts.originalValue);\n});\n},setDate:function(jq,date){\nreturn jq.each(function(){\nvar opts=$(this).datebox(\"options\");\n$(this).datebox(\"calendar\").calendar(\"moveTo\",date);\n_c86(this,date?opts.formatter.call(this,date):\"\");\n});\n},getDate:function(jq){\nif(jq.datebox(\"getValue\")){\nreturn jq.datebox(\"calendar\").calendar(\"options\").current;\n}else{\nreturn null;\n}\n}};\n$.fn.datebox.parseOptions=function(_c98){\nreturn $.extend({},$.fn.combo.parseOptions(_c98),$.parser.parseOptions(_c98,[\"sharedCalendar\"]));\n};\n$.fn.datebox.defaults=$.extend({},$.fn.combo.defaults,{panelWidth:250,panelHeight:\"auto\",sharedCalendar:null,keyHandler:{up:function(e){\n},down:function(e){\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_c87(this);\n},query:function(q,e){\n_c84(this,q);\n}},currentText:\"Today\",closeText:\"Close\",okText:\"Ok\",buttons:[{text:function(_c99){\nreturn $(_c99).datebox(\"options\").currentText;\n},handler:function(_c9a){\nvar opts=$(_c9a).datebox(\"options\");\nvar now=new Date();\nvar _c9b=new Date(now.getFullYear(),now.getMonth(),now.getDate());\n$(_c9a).datebox(\"calendar\").calendar({year:_c9b.getFullYear(),month:_c9b.getMonth()+1,current:_c9b});\nopts.onSelect.call(_c9a,_c9b);\n_c87(_c9a);\n}},{text:function(_c9c){\nreturn $(_c9c).datebox(\"options\").closeText;\n},handler:function(_c9d){\n$(this).closest(\"div.combo-panel\").panel(\"close\");\n}}],formatter:function(date){\nvar y=date.getFullYear();\nvar m=date.getMonth()+1;\nvar d=date.getDate();\nreturn (m<10?(\"0\"+m):m)+\"/\"+(d<10?(\"0\"+d):d)+\"/\"+y;\n},parser:function(s){\nvar _c9e=$(this).datebox(\"calendar\").calendar(\"options\");\nif(!s){\nreturn new _c9e.Date();\n}\nvar ss=s.split(\"/\");\nvar m=parseInt(ss[0],10);\nvar d=parseInt(ss[1],10);\nvar y=parseInt(ss[2],10);\nif(!isNaN(y)&&!isNaN(m)&&!isNaN(d)){\nreturn new _c9e.Date(y,m-1,d);\n}else{\nreturn new _c9e.Date();\n}\n},onSelect:function(date){\n}});\n})(jQuery);\n(function($){\nfunction _c9f(_ca0){\nvar _ca1=$.data(_ca0,\"datetimebox\");\nvar opts=_ca1.options;\n$(_ca0).datebox($.extend({},opts,{onShowPanel:function(){\nvar _ca2=$(this).datetimebox(\"getValue\");\n_ca8(this,_ca2,true);\nopts.onShowPanel.call(this);\n},formatter:$.fn.datebox.defaults.formatter,parser:$.fn.datebox.defaults.parser}));\n$(_ca0).removeClass(\"datebox-f\").addClass(\"datetimebox-f\");\n$(_ca0).datebox(\"calendar\").calendar({onSelect:function(date){\nopts.onSelect.call(this.target,date);\n}});\nif(!_ca1.spinner){\nvar _ca3=$(_ca0).datebox(\"panel\");\nvar p=$(\"<div style=\\\"padding:2px\\\"><input></div>\").insertAfter(_ca3.children(\"div.datebox-calendar-inner\"));\n_ca1.spinner=p.children(\"input\");\n}\n_ca1.spinner.timespinner({width:opts.spinnerWidth,showSeconds:opts.showSeconds,separator:opts.timeSeparator,hour12:opts.hour12});\n$(_ca0).datetimebox(\"initValue\",opts.value);\n};\nfunction _ca4(_ca5){\nvar c=$(_ca5).datetimebox(\"calendar\");\nvar t=$(_ca5).datetimebox(\"spinner\");\nvar date=c.calendar(\"options\").current;\nreturn new Date(date.getFullYear(),date.getMonth(),date.getDate(),t.timespinner(\"getHours\"),t.timespinner(\"getMinutes\"),t.timespinner(\"getSeconds\"));\n};\nfunction _ca6(_ca7,q){\n_ca8(_ca7,q,true);\n};\nfunction _ca9(_caa){\nvar opts=$.data(_caa,\"datetimebox\").options;\nvar date=_ca4(_caa);\n_ca8(_caa,opts.formatter.call(_caa,date));\n$(_caa).combo(\"hidePanel\");\n};\nfunction _ca8(_cab,_cac,_cad){\nvar opts=$.data(_cab,\"datetimebox\").options;\n$(_cab).combo(\"setValue\",_cac);\nif(!_cad){\nif(_cac){\nvar date=opts.parser.call(_cab,_cac);\n$(_cab).combo(\"setText\",opts.formatter.call(_cab,date));\n$(_cab).combo(\"setValue\",opts.formatter.call(_cab,date));\n}else{\n$(_cab).combo(\"setText\",_cac);\n}\n}\nvar date=opts.parser.call(_cab,_cac);\n$(_cab).datetimebox(\"calendar\").calendar(\"moveTo\",date);\n$(_cab).datetimebox(\"spinner\").timespinner(\"setValue\",_cae(date));\nfunction _cae(date){\nfunction _caf(_cb0){\nreturn (_cb0<10?\"0\":\"\")+_cb0;\n};\nvar tt=[_caf(date.getHours()),_caf(date.getMinutes())];\nif(opts.showSeconds){\ntt.push(_caf(date.getSeconds()));\n}\nreturn tt.join($(_cab).datetimebox(\"spinner\").timespinner(\"options\").separator);\n};\n};\n$.fn.datetimebox=function(_cb1,_cb2){\nif(typeof _cb1==\"string\"){\nvar _cb3=$.fn.datetimebox.methods[_cb1];\nif(_cb3){\nreturn _cb3(this,_cb2);\n}else{\nreturn this.datebox(_cb1,_cb2);\n}\n}\n_cb1=_cb1||{};\nreturn this.each(function(){\nvar _cb4=$.data(this,\"datetimebox\");\nif(_cb4){\n$.extend(_cb4.options,_cb1);\n}else{\n$.data(this,\"datetimebox\",{options:$.extend({},$.fn.datetimebox.defaults,$.fn.datetimebox.parseOptions(this),_cb1)});\n}\n_c9f(this);\n});\n};\n$.fn.datetimebox.methods={options:function(jq){\nvar _cb5=jq.datebox(\"options\");\nreturn $.extend($.data(jq[0],\"datetimebox\").options,{originalValue:_cb5.originalValue,disabled:_cb5.disabled,readonly:_cb5.readonly});\n},cloneFrom:function(jq,from){\nreturn jq.each(function(){\n$(this).datebox(\"cloneFrom\",from);\n$.data(this,\"datetimebox\",{options:$.extend(true,{},$(from).datetimebox(\"options\")),spinner:$(from).datetimebox(\"spinner\")});\n$(this).removeClass(\"datebox-f\").addClass(\"datetimebox-f\");\n});\n},spinner:function(jq){\nreturn $.data(jq[0],\"datetimebox\").spinner;\n},initValue:function(jq,_cb6){\nreturn jq.each(function(){\nvar opts=$(this).datetimebox(\"options\");\nvar _cb7=opts.value;\nif(_cb7){\nvar date=opts.parser.call(this,_cb7);\n_cb7=opts.formatter.call(this,date);\n$(this).datetimebox(\"calendar\").calendar(\"moveTo\",date);\n}\n$(this).combo(\"initValue\",_cb7).combo(\"setText\",_cb7);\n});\n},setValue:function(jq,_cb8){\nreturn jq.each(function(){\n_ca8(this,_cb8);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).datetimebox(\"options\");\n$(this).datetimebox(\"setValue\",opts.originalValue);\n});\n},setDate:function(jq,date){\nreturn jq.each(function(){\nvar opts=$(this).datetimebox(\"options\");\n$(this).datetimebox(\"calendar\").calendar(\"moveTo\",date);\n_ca8(this,date?opts.formatter.call(this,date):\"\");\n});\n},getDate:function(jq){\nif(jq.datetimebox(\"getValue\")){\nreturn jq.datetimebox(\"calendar\").calendar(\"options\").current;\n}else{\nreturn null;\n}\n}};\n$.fn.datetimebox.parseOptions=function(_cb9){\nvar t=$(_cb9);\nreturn $.extend({},$.fn.datebox.parseOptions(_cb9),$.parser.parseOptions(_cb9,[\"timeSeparator\",\"spinnerWidth\",{showSeconds:\"boolean\"}]));\n};\n$.fn.datetimebox.defaults=$.extend({},$.fn.datebox.defaults,{spinnerWidth:\"100%\",showSeconds:true,timeSeparator:\":\",hour12:false,panelEvents:{mousedown:function(e){\n}},keyHandler:{up:function(e){\n},down:function(e){\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_ca9(this);\n},query:function(q,e){\n_ca6(this,q);\n}},buttons:[{text:function(_cba){\nreturn $(_cba).datetimebox(\"options\").currentText;\n},handler:function(_cbb){\nvar opts=$(_cbb).datetimebox(\"options\");\n_ca8(_cbb,opts.formatter.call(_cbb,new Date()));\n$(_cbb).datetimebox(\"hidePanel\");\n}},{text:function(_cbc){\nreturn $(_cbc).datetimebox(\"options\").okText;\n},handler:function(_cbd){\n_ca9(_cbd);\n}},{text:function(_cbe){\nreturn $(_cbe).datetimebox(\"options\").closeText;\n},handler:function(_cbf){\n$(_cbf).datetimebox(\"hidePanel\");\n}}],formatter:function(date){\nif(!date){\nreturn \"\";\n}\nreturn $.fn.datebox.defaults.formatter.call(this,date)+\" \"+$.fn.timespinner.defaults.formatter.call($(this).datetimebox(\"spinner\")[0],date);\n},parser:function(s){\ns=$.trim(s);\nif(!s){\nreturn new Date();\n}\nvar dt=s.split(\" \");\nvar _cc0=$.fn.datebox.defaults.parser.call(this,dt[0]);\nif(dt.length<2){\nreturn _cc0;\n}\nvar _cc1=$.fn.timespinner.defaults.parser.call($(this).datetimebox(\"spinner\")[0],dt[1]+(dt[2]?\" \"+dt[2]:\"\"));\nreturn new Date(_cc0.getFullYear(),_cc0.getMonth(),_cc0.getDate(),_cc1.getHours(),_cc1.getMinutes(),_cc1.getSeconds());\n}});\n})(jQuery);\n(function($){\nfunction _cc2(_cc3){\nvar _cc4=$.data(_cc3,\"timepicker\");\nvar opts=_cc4.options;\n$(_cc3).addClass(\"timepicker-f\").combo($.extend({},opts,{onShowPanel:function(){\n_cc5(this);\n_cc6(_cc3);\n_cd0(_cc3,$(_cc3).timepicker(\"getValue\"));\n}}));\n$(_cc3).timepicker(\"initValue\",opts.value);\nfunction _cc5(_cc7){\nvar opts=$(_cc7).timepicker(\"options\");\nvar _cc8=$(_cc7).combo(\"panel\");\n_cc8._unbind(\".timepicker\")._bind(\"click.timepicker\",function(e){\nif($(e.target).hasClass(\"datebox-button-a\")){\nvar _cc9=parseInt($(e.target).attr(\"datebox-button-index\"));\nopts.buttons[_cc9].handler.call(e.target,_cc7);\n}\n});\n};\nfunction _cc6(_cca){\nvar _ccb=$(_cca).combo(\"panel\");\nif(_ccb.children(\"div.datebox-button\").length){\nreturn;\n}\nvar _ccc=$(\"<div class=\\\"datebox-button\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" style=\\\"width:100%\\\"><tr></tr></table></div>\").appendTo(_ccb);\nvar tr=_ccc.find(\"tr\");\nfor(var i=0;i<opts.buttons.length;i++){\nvar td=$(\"<td></td>\").appendTo(tr);\nvar btn=opts.buttons[i];\nvar t=$(\"<a class=\\\"datebox-button-a\\\" href=\\\"javascript:;\\\"></a>\").html($.isFunction(btn.text)?btn.text(_cca):btn.text).appendTo(td);\nt.attr(\"datebox-button-index\",i);\n}\ntr.find(\"td\").css(\"width\",(100/opts.buttons.length)+\"%\");\n};\n};\nfunction _ccd(_cce,_ccf){\nvar opts=$(_cce).data(\"timepicker\").options;\n_cd0(_cce,_ccf);\nopts.value=_cd1(_cce);\n$(_cce).combo(\"setValue\",opts.value).combo(\"setText\",opts.value);\n};\nfunction _cd0(_cd2,_cd3){\nvar opts=$(_cd2).data(\"timepicker\").options;\nif(_cd3){\nvar _cd4=_cd3.split(\" \");\nvar hm=_cd4[0].split(\":\");\nopts.selectingHour=parseInt(hm[0],10);\nopts.selectingMinute=parseInt(hm[1],10);\nopts.selectingAmpm=_cd4[1];\n}else{\nopts.selectingHour=12;\nopts.selectingMinute=0;\nopts.selectingAmpm=opts.ampm[0];\n}\n_cd5(_cd2);\n};\nfunction _cd1(_cd6){\nvar opts=$(_cd6).data(\"timepicker\").options;\nvar h=opts.selectingHour;\nvar m=opts.selectingMinute;\nvar ampm=opts.selectingAmpm;\nif(!ampm){\nampm=opts.ampm[0];\n}\nreturn (h<10?\"0\"+h:h)+\":\"+(m<10?\"0\"+m:m)+\" \"+ampm;\n};\nfunction _cd5(_cd7){\nvar opts=$(_cd7).data(\"timepicker\").options;\nvar _cd8=$(_cd7).combo(\"panel\");\nvar _cd9=_cd8.children(\".timepicker-panel\");\nif(!_cd9.length){\nvar _cd9=$(\"<div class=\\\"timepicker-panel f-column\\\"></div>\").prependTo(_cd8);\n}\n_cd9.empty();\nif(opts.panelHeight!=\"auto\"){\nvar _cda=_cd8.height()-_cd8.find(\".datebox-button\").outerHeight();\n_cd9._outerHeight(_cda);\n}\n_cdb(_cd7);\n_cdc(_cd7);\n_cd9.off(\".timepicker\");\n_cd9.on(\"click.timepicker\",\".title-hour\",function(e){\nopts.selectingType=\"hour\";\n_cd5(_cd7);\n}).on(\"click.timepicker\",\".title-minute\",function(e){\nopts.selectingType=\"minute\";\n_cd5(_cd7);\n}).on(\"click.timepicker\",\".title-am\",function(e){\nopts.selectingAmpm=opts.ampm[0];\n_cd5(_cd7);\n}).on(\"click.timepicker\",\".title-pm\",function(e){\nopts.selectingAmpm=opts.ampm[1];\n_cd5(_cd7);\n}).on(\"click.timepicker\",\".item\",function(e){\nvar _cdd=parseInt($(this).text(),10);\nif(opts.selectingType==\"hour\"){\nopts.selectingHour=_cdd;\n}else{\nopts.selectingMinute=_cdd;\n}\n_cd5(_cd7);\n});\n};\nfunction _cdb(_cde){\nvar opts=$(_cde).data(\"timepicker\").options;\nvar _cdf=$(_cde).combo(\"panel\");\nvar _ce0=_cdf.find(\".timepicker-panel\");\nvar hour=opts.selectingHour;\nvar _ce1=opts.selectingMinute;\n$(\"<div class=\\\"panel-header f-noshrink f-row f-content-center\\\">\"+\"<div class=\\\"title title-hour\\\">\"+(hour<10?\"0\"+hour:hour)+\"</div>\"+\"<div class=\\\"sep\\\">:</div>\"+\"<div class=\\\"title title-minute\\\">\"+(_ce1<10?\"0\"+_ce1:_ce1)+\"</div>\"+\"<div class=\\\"ampm f-column\\\">\"+\"<div class=\\\"title title-am\\\">\"+opts.ampm[0]+\"</div>\"+\"<div class=\\\"title title-pm\\\">\"+opts.ampm[1]+\"</div>\"+\"</div>\"+\"</div>\").appendTo(_ce0);\nvar _ce2=_ce0.find(\".panel-header\");\nif(opts.selectingType==\"hour\"){\n_ce2.find(\".title-hour\").addClass(\"title-selected\");\n}else{\n_ce2.find(\".title-minute\").addClass(\"title-selected\");\n}\nif(opts.selectingAmpm==opts.ampm[0]){\n_ce2.find(\".title-am\").addClass(\"title-selected\");\n}\nif(opts.selectingAmpm==opts.ampm[1]){\n_ce2.find(\".title-pm\").addClass(\"title-selected\");\n}\n};\nfunction _cdc(_ce3){\nvar opts=$(_ce3).data(\"timepicker\").options;\nvar _ce4=$(_ce3).combo(\"panel\");\nvar _ce5=_ce4.find(\".timepicker-panel\");\nvar _ce6=$(\"<div class=\\\"clock-wrap f-full f-column f-content-center\\\">\"+\"</div>\").appendTo(_ce5);\nvar _ce7=_ce6.outerWidth();\nvar _ce8=_ce6.outerHeight();\nvar size=Math.min(_ce7,_ce8)-20;\nvar _ce9=size/2;\n_ce7=size;\n_ce8=size;\nvar _cea=opts.selectingType==\"hour\"?opts.selectingHour:opts.selectingMinute;\nvar _ceb=_cea/(opts.selectingType==\"hour\"?12:60)*360;\n_ceb=parseFloat(_ceb).toFixed(4);\nvar _cec={transform:\"rotate(\"+_ceb+\"deg)\"};\nvar _ced={width:_ce7+\"px\",height:_ce8+\"px\",marginLeft:-_ce7/2+\"px\",marginTop:-_ce8/2+\"px\"};\nvar _cee=[];\n_cee.push(\"<div class=\\\"clock\\\">\");\n_cee.push(\"<div class=\\\"center\\\"></div>\");\n_cee.push(\"<div class=\\\"hand\\\">\");\n_cee.push(\"<div class=\\\"drag\\\"></div>\");\n_cee.push(\"</div>\");\nvar data=_cef();\nfor(var i=0;i<data.length;i++){\nvar _cf0=data[i];\nvar cls=\"item f-column f-content-center\";\nif(_cf0==_cea){\ncls+=\" item-selected\";\n}\nvar _ceb=_cf0/(opts.selectingType==\"hour\"?12:60)*360*Math.PI/180;\nvar x=(_ce9-20)*Math.sin(_ceb);\nvar y=-(_ce9-20)*Math.cos(_ceb);\n_ceb=parseFloat(_ceb).toFixed(4);\nx=parseFloat(x).toFixed(4);\ny=parseFloat(y).toFixed(4);\nvar _cf1={transform:\"translate(\"+x+\"px,\"+y+\"px)\"};\nvar _cf1=\"transform:translate(\"+x+\"px,\"+y+\"px)\";\n_cee.push(\"<div class=\\\"\"+cls+\"\\\" style=\\\"\"+_cf1+\"\\\">\"+_cf0+\"</div>\");\n}\n_cee.push(\"</div>\");\n_ce6.html(_cee.join(\"\"));\n_ce6.find(\".clock\").css(_ced);\n_ce6.find(\".hand\").css(_cec);\nfunction _cef(){\nvar data=[];\nif(opts.selectingType==\"hour\"){\nfor(var i=0;i<12;i++){\ndata.push(String(i));\n}\ndata[0]=\"12\";\n}else{\nfor(var i=0;i<60;i+=5){\ndata.push(i<10?\"0\"+i:String(i));\n}\ndata[0]=\"00\";\n}\nreturn data;\n};\n};\n$.fn.timepicker=function(_cf2,_cf3){\nif(typeof _cf2==\"string\"){\nvar _cf4=$.fn.timepicker.methods[_cf2];\nif(_cf4){\nreturn _cf4(this,_cf3);\n}else{\nreturn this.combo(_cf2,_cf3);\n}\n}\n_cf2=_cf2||{};\nreturn this.each(function(){\nvar _cf5=$.data(this,\"timepicker\");\nif(_cf5){\n$.extend(_cf5.options,_cf2);\n}else{\n$.data(this,\"timepicker\",{options:$.extend({},$.fn.timepicker.defaults,$.fn.timepicker.parseOptions(this),_cf2)});\n}\n_cc2(this);\n});\n};\n$.fn.timepicker.methods={options:function(jq){\nvar _cf6=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"timepicker\").options,{width:_cf6.width,height:_cf6.height,originalValue:_cf6.originalValue,disabled:_cf6.disabled,readonly:_cf6.readonly});\n},initValue:function(jq,_cf7){\nreturn jq.each(function(){\nvar opts=$(this).timepicker(\"options\");\nopts.value=_cf7;\n_cd0(this,_cf7);\nif(_cf7){\nopts.value=_cd1(this);\n$(this).combo(\"initValue\",opts.value).combo(\"setText\",opts.value);\n}\n});\n},setValue:function(jq,_cf8){\nreturn jq.each(function(){\n_ccd(this,_cf8);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).timepicker(\"options\");\n$(this).timepicker(\"setValue\",opts.originalValue);\n});\n}};\n$.fn.timepicker.parseOptions=function(_cf9){\nreturn $.extend({},$.fn.combo.parseOptions(_cf9),$.parser.parseOptions(_cf9,[]));\n};\n$.fn.timepicker.defaults=$.extend({},$.fn.combo.defaults,{closeText:\"Close\",okText:\"Ok\",buttons:[{text:function(_cfa){\nreturn $(_cfa).timepicker(\"options\").okText;\n},handler:function(_cfb){\n$(_cfb).timepicker(\"setValue\",_cd1(_cfb));\n$(this).closest(\"div.combo-panel\").panel(\"close\");\n}},{text:function(_cfc){\nreturn $(_cfc).timepicker(\"options\").closeText;\n},handler:function(_cfd){\n$(this).closest(\"div.combo-panel\").panel(\"close\");\n}}],editable:false,ampm:[\"am\",\"pm\"],value:\"\",selectingHour:12,selectingMinute:0,selectingType:\"hour\"});\n})(jQuery);\n(function($){\nfunction init(_cfe){\nvar _cff=$(\"<div class=\\\"slider\\\">\"+\"<div class=\\\"slider-inner\\\">\"+\"<a href=\\\"javascript:;\\\" class=\\\"slider-handle\\\"></a>\"+\"<span class=\\\"slider-tip\\\"></span>\"+\"</div>\"+\"<div class=\\\"slider-rule\\\"></div>\"+\"<div class=\\\"slider-rulelabel\\\"></div>\"+\"<div style=\\\"clear:both\\\"></div>\"+\"<input type=\\\"hidden\\\" class=\\\"slider-value\\\">\"+\"</div>\").insertAfter(_cfe);\nvar t=$(_cfe);\nt.addClass(\"slider-f\").hide();\nvar name=t.attr(\"name\");\nif(name){\n_cff.find(\"input.slider-value\").attr(\"name\",name);\nt.removeAttr(\"name\").attr(\"sliderName\",name);\n}\n_cff._bind(\"_resize\",function(e,_d00){\nif($(this).hasClass(\"easyui-fluid\")||_d00){\n_d01(_cfe);\n}\nreturn false;\n});\nreturn _cff;\n};\nfunction _d01(_d02,_d03){\nvar _d04=$.data(_d02,\"slider\");\nvar opts=_d04.options;\nvar _d05=_d04.slider;\nif(_d03){\nif(_d03.width){\nopts.width=_d03.width;\n}\nif(_d03.height){\nopts.height=_d03.height;\n}\n}\n_d05._size(opts);\nif(opts.mode==\"h\"){\n_d05.css(\"height\",\"\");\n_d05.children(\"div\").css(\"height\",\"\");\n}else{\n_d05.css(\"width\",\"\");\n_d05.children(\"div\").css(\"width\",\"\");\n_d05.children(\"div.slider-rule,div.slider-rulelabel,div.slider-inner\")._outerHeight(_d05._outerHeight());\n}\n_d06(_d02);\n};\nfunction _d07(_d08){\nvar _d09=$.data(_d08,\"slider\");\nvar opts=_d09.options;\nvar _d0a=_d09.slider;\nvar aa=opts.mode==\"h\"?opts.rule:opts.rule.slice(0).reverse();\nif(opts.reversed){\naa=aa.slice(0).reverse();\n}\n_d0b(aa);\nfunction _d0b(aa){\nvar rule=_d0a.find(\"div.slider-rule\");\nvar _d0c=_d0a.find(\"div.slider-rulelabel\");\nrule.empty();\n_d0c.empty();\nfor(var i=0;i<aa.length;i++){\nvar _d0d=i*100/(aa.length-1)+\"%\";\nvar span=$(\"<span></span>\").appendTo(rule);\nspan.css((opts.mode==\"h\"?\"left\":\"top\"),_d0d);\nif(aa[i]!=\"|\"){\nspan=$(\"<span></span>\").appendTo(_d0c);\nspan.html(aa[i]);\nif(opts.mode==\"h\"){\nspan.css({left:_d0d,marginLeft:-Math.round(span.outerWidth()/2)});\n}else{\nspan.css({top:_d0d,marginTop:-Math.round(span.outerHeight()/2)});\n}\n}\n}\n};\n};\nfunction _d0e(_d0f){\nvar _d10=$.data(_d0f,\"slider\");\nvar opts=_d10.options;\nvar _d11=_d10.slider;\n_d11.removeClass(\"slider-h slider-v slider-disabled\");\n_d11.addClass(opts.mode==\"h\"?\"slider-h\":\"slider-v\");\n_d11.addClass(opts.disabled?\"slider-disabled\":\"\");\nvar _d12=_d11.find(\".slider-inner\");\n_d12.html(\"<a href=\\\"javascript:;\\\" class=\\\"slider-handle\\\"></a>\"+\"<span class=\\\"slider-tip\\\"></span>\");\nif(opts.range){\n_d12.append(\"<a href=\\\"javascript:;\\\" class=\\\"slider-handle\\\"></a>\"+\"<span class=\\\"slider-tip\\\"></span>\");\n}\n_d11.find(\"a.slider-handle\").draggable({axis:opts.mode,cursor:\"pointer\",disabled:opts.disabled,onDrag:function(e){\nvar left=e.data.left;\nvar _d13=_d11.width();\nif(opts.mode!=\"h\"){\nleft=e.data.top;\n_d13=_d11.height();\n}\nif(left<0||left>_d13){\nreturn false;\n}else{\n_d14(left,this);\nreturn false;\n}\n},onStartDrag:function(){\n_d10.isDragging=true;\nopts.onSlideStart.call(_d0f,opts.value);\n},onStopDrag:function(e){\n_d14(opts.mode==\"h\"?e.data.left:e.data.top,this);\nopts.onSlideEnd.call(_d0f,opts.value);\nopts.onComplete.call(_d0f,opts.value);\n_d10.isDragging=false;\n}});\n_d11.find(\"div.slider-inner\")._unbind(\".slider\")._bind(\"mousedown.slider\",function(e){\nif(_d10.isDragging||opts.disabled){\nreturn;\n}\nvar pos=$(this).offset();\n_d14(opts.mode==\"h\"?(e.pageX-pos.left):(e.pageY-pos.top));\nopts.onComplete.call(_d0f,opts.value);\n});\nfunction _d15(_d16){\nvar dd=String(opts.step).split(\".\");\nvar dlen=dd.length>1?dd[1].length:0;\nreturn parseFloat(_d16.toFixed(dlen));\n};\nfunction _d14(pos,_d17){\nvar _d18=_d19(_d0f,pos);\nvar s=Math.abs(_d18%opts.step);\nif(s<opts.step/2){\n_d18-=s;\n}else{\n_d18=_d18-s+opts.step;\n}\n_d18=_d15(_d18);\nif(opts.range){\nvar v1=opts.value[0];\nvar v2=opts.value[1];\nvar m=parseFloat((v1+v2)/2);\nif(_d17){\nvar _d1a=$(_d17).nextAll(\".slider-handle\").length>0;\nif(_d18<=v2&&_d1a){\nv1=_d18;\n}else{\nif(_d18>=v1&&(!_d1a)){\nv2=_d18;\n}\n}\n}else{\nif(_d18<v1){\nv1=_d18;\n}else{\nif(_d18>v2){\nv2=_d18;\n}else{\n_d18<m?v1=_d18:v2=_d18;\n}\n}\n}\n$(_d0f).slider(\"setValues\",[v1,v2]);\n}else{\n$(_d0f).slider(\"setValue\",_d18);\n}\n};\n};\nfunction _d1b(_d1c,_d1d){\nvar _d1e=$.data(_d1c,\"slider\");\nvar opts=_d1e.options;\nvar _d1f=_d1e.slider;\nvar _d20=$.isArray(opts.value)?opts.value:[opts.value];\nvar _d21=[];\nif(!$.isArray(_d1d)){\n_d1d=$.map(String(_d1d).split(opts.separator),function(v){\nreturn parseFloat(v);\n});\n}\n_d1f.find(\".slider-value\").remove();\nvar name=$(_d1c).attr(\"sliderName\")||\"\";\nfor(var i=0;i<_d1d.length;i++){\nvar _d22=_d1d[i];\nif(_d22<opts.min){\n_d22=opts.min;\n}\nif(_d22>opts.max){\n_d22=opts.max;\n}\nvar _d23=$(\"<input type=\\\"hidden\\\" class=\\\"slider-value\\\">\").appendTo(_d1f);\n_d23.attr(\"name\",name);\n_d23.val(_d22);\n_d21.push(_d22);\nvar _d24=_d1f.find(\".slider-handle:eq(\"+i+\")\");\nvar tip=_d24.next();\nvar pos=_d25(_d1c,_d22);\nif(opts.showTip){\ntip.show();\ntip.html(opts.tipFormatter.call(_d1c,_d22));\n}else{\ntip.hide();\n}\nif(opts.mode==\"h\"){\nvar _d26=\"left:\"+pos+\"px;\";\n_d24.attr(\"style\",_d26);\ntip.attr(\"style\",_d26+\"margin-left:\"+(-Math.round(tip.outerWidth()/2))+\"px\");\n}else{\nvar _d26=\"top:\"+pos+\"px;\";\n_d24.attr(\"style\",_d26);\ntip.attr(\"style\",_d26+\"margin-left:\"+(-Math.round(tip.outerWidth()))+\"px\");\n}\n}\nopts.value=opts.range?_d21:_d21[0];\n$(_d1c).val(opts.range?_d21.join(opts.separator):_d21[0]);\nif(_d20.join(\",\")!=_d21.join(\",\")){\nopts.onChange.call(_d1c,opts.value,(opts.range?_d20:_d20[0]));\n}\n};\nfunction _d06(_d27){\nvar opts=$.data(_d27,\"slider\").options;\nvar fn=opts.onChange;\nopts.onChange=function(){\n};\n_d1b(_d27,opts.value);\nopts.onChange=fn;\n};\nfunction _d25(_d28,_d29){\nvar _d2a=$.data(_d28,\"slider\");\nvar opts=_d2a.options;\nvar _d2b=_d2a.slider;\nvar size=opts.mode==\"h\"?_d2b.width():_d2b.height();\nvar pos=opts.converter.toPosition.call(_d28,_d29,size);\nif(opts.mode==\"v\"){\npos=_d2b.height()-pos;\n}\nif(opts.reversed){\npos=size-pos;\n}\nreturn pos;\n};\nfunction _d19(_d2c,pos){\nvar _d2d=$.data(_d2c,\"slider\");\nvar opts=_d2d.options;\nvar _d2e=_d2d.slider;\nvar size=opts.mode==\"h\"?_d2e.width():_d2e.height();\nvar pos=opts.mode==\"h\"?(opts.reversed?(size-pos):pos):(opts.reversed?pos:(size-pos));\nvar _d2f=opts.converter.toValue.call(_d2c,pos,size);\nreturn _d2f;\n};\n$.fn.slider=function(_d30,_d31){\nif(typeof _d30==\"string\"){\nreturn $.fn.slider.methods[_d30](this,_d31);\n}\n_d30=_d30||{};\nreturn this.each(function(){\nvar _d32=$.data(this,\"slider\");\nif(_d32){\n$.extend(_d32.options,_d30);\n}else{\n_d32=$.data(this,\"slider\",{options:$.extend({},$.fn.slider.defaults,$.fn.slider.parseOptions(this),_d30),slider:init(this)});\n$(this)._propAttr(\"disabled\",false);\n}\nvar opts=_d32.options;\nopts.min=parseFloat(opts.min);\nopts.max=parseFloat(opts.max);\nif(opts.range){\nif(!$.isArray(opts.value)){\nopts.value=$.map(String(opts.value).split(opts.separator),function(v){\nreturn parseFloat(v);\n});\n}\nif(opts.value.length<2){\nopts.value.push(opts.max);\n}\n}else{\nopts.value=parseFloat(opts.value);\n}\nopts.step=parseFloat(opts.step);\nopts.originalValue=opts.value;\n_d0e(this);\n_d07(this);\n_d01(this);\n});\n};\n$.fn.slider.methods={options:function(jq){\nreturn $.data(jq[0],\"slider\").options;\n},destroy:function(jq){\nreturn jq.each(function(){\n$.data(this,\"slider\").slider.remove();\n$(this).remove();\n});\n},resize:function(jq,_d33){\nreturn jq.each(function(){\n_d01(this,_d33);\n});\n},getValue:function(jq){\nreturn jq.slider(\"options\").value;\n},getValues:function(jq){\nreturn jq.slider(\"options\").value;\n},setValue:function(jq,_d34){\nreturn jq.each(function(){\n_d1b(this,[_d34]);\n});\n},setValues:function(jq,_d35){\nreturn jq.each(function(){\n_d1b(this,_d35);\n});\n},clear:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).slider(\"options\");\n_d1b(this,opts.range?[opts.min,opts.max]:[opts.min]);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar opts=$(this).slider(\"options\");\n$(this).slider(opts.range?\"setValues\":\"setValue\",opts.originalValue);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n$.data(this,\"slider\").options.disabled=false;\n_d0e(this);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n$.data(this,\"slider\").options.disabled=true;\n_d0e(this);\n});\n}};\n$.fn.slider.parseOptions=function(_d36){\nvar t=$(_d36);\nreturn $.extend({},$.parser.parseOptions(_d36,[\"width\",\"height\",\"mode\",{reversed:\"boolean\",showTip:\"boolean\",range:\"boolean\",min:\"number\",max:\"number\",step:\"number\"}]),{value:(t.val()||undefined),disabled:(t.attr(\"disabled\")?true:undefined),rule:(t.attr(\"rule\")?eval(t.attr(\"rule\")):undefined)});\n};\n$.fn.slider.defaults={width:\"auto\",height:\"auto\",mode:\"h\",reversed:false,showTip:false,disabled:false,range:false,value:0,separator:\",\",min:0,max:100,step:1,rule:[],tipFormatter:function(_d37){\nreturn _d37;\n},converter:{toPosition:function(_d38,size){\nvar opts=$(this).slider(\"options\");\nvar p=(_d38-opts.min)/(opts.max-opts.min)*size;\nreturn p;\n},toValue:function(pos,size){\nvar opts=$(this).slider(\"options\");\nvar v=opts.min+(opts.max-opts.min)*(pos/size);\nreturn v;\n}},onChange:function(_d39,_d3a){\n},onSlideStart:function(_d3b){\n},onSlideEnd:function(_d3c){\n},onComplete:function(_d3d){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/jquery.easyui.mobile.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\n$.fn.navpanel=function(_1,_2){\nif(typeof _1==\"string\"){\nvar _3=$.fn.navpanel.methods[_1];\nreturn _3?_3(this,_2):this.panel(_1,_2);\n}else{\n_1=_1||{};\nreturn this.each(function(){\nvar _4=$.data(this,\"navpanel\");\nif(_4){\n$.extend(_4.options,_1);\n}else{\n_4=$.data(this,\"navpanel\",{options:$.extend({},$.fn.navpanel.defaults,$.fn.navpanel.parseOptions(this),_1)});\n}\n$(this).panel(_4.options);\n});\n}\n};\n$.fn.navpanel.methods={options:function(jq){\nreturn $.data(jq[0],\"navpanel\").options;\n}};\n$.fn.navpanel.parseOptions=function(_5){\nreturn $.extend({},$.fn.panel.parseOptions(_5),$.parser.parseOptions(_5,[]));\n};\n$.fn.navpanel.defaults=$.extend({},$.fn.panel.defaults,{fit:true,border:false,cls:\"navpanel\"});\n$.parser.plugins.push(\"navpanel\");\n})(jQuery);\n(function($){\n$(function(){\n$.mobile.init();\n});\n$.mobile={defaults:{animation:\"slide\",direction:\"left\",reverseDirections:{up:\"down\",down:\"up\",left:\"right\",right:\"left\"}},panels:[],init:function(_6){\n$.mobile.panels=[];\nvar _7=$(_6||\"body\").children(\".navpanel:visible\");\nif(_7.length){\n_7.not(\":first\").children(\".panel-body\").navpanel(\"close\");\nvar p=_7.eq(0).children(\".panel-body\");\n$.mobile.panels.push({panel:p,animation:$.mobile.defaults.animation,direction:$.mobile.defaults.direction});\n}\n$(document)._unbind(\".mobile\")._bind(\"click.mobile\",function(e){\nvar a=$(e.target).closest(\"a\");\nif(a.length){\nvar _8=$.parser.parseOptions(a[0],[\"animation\",\"direction\",{back:\"boolean\"}]);\nif(_8.back){\n$.mobile.back();\ne.preventDefault();\n}else{\nvar _9=$.trim(a.attr(\"href\"));\nif(/^#/.test(_9)){\nvar to=$(_9);\nif(to.length&&to.hasClass(\"panel-body\")){\n$.mobile.go(to,_8.animation,_8.direction);\ne.preventDefault();\n}\n}\n}\n}\n});\n$(window)._unbind(\".mobile\")._bind(\"hashchange.mobile\",function(){\nvar _a=$.mobile.panels.length;\nif(_a>1){\nvar _b=location.hash;\nvar p=$.mobile.panels[_a-2];\nif(!_b||_b==\"#&\"+p.panel.attr(\"id\")){\n$.mobile._back();\n}\n}\n});\n},nav:function(_c,to,_d,_e){\nif(window.WebKitAnimationEvent){\n_d=_d!=undefined?_d:$.mobile.defaults.animation;\n_e=_e!=undefined?_e:$.mobile.defaults.direction;\nvar _f=\"m-\"+_d+(_e?\"-\"+_e:\"\");\nvar p1=$(_c).panel(\"open\").panel(\"resize\").panel(\"panel\");\nvar p2=$(to).panel(\"open\").panel(\"resize\").panel(\"panel\");\np1.add(p2)._bind(\"webkitAnimationEnd\",function(){\n$(this)._unbind(\"webkitAnimationEnd\");\nvar p=$(this).children(\".panel-body\");\nif($(this).hasClass(\"m-in\")){\np.panel(\"open\").panel(\"resize\");\n}else{\np.panel(\"close\");\n}\n$(this).removeClass(_f+\" m-in m-out\");\n});\np2.addClass(_f+\" m-in\");\np1.addClass(_f+\" m-out\");\n}else{\n$(to).panel(\"open\").panel(\"resize\");\n$(_c).panel(\"close\");\n}\n},_go:function(_10,_11,_12){\n_11=_11!=undefined?_11:$.mobile.defaults.animation;\n_12=_12!=undefined?_12:$.mobile.defaults.direction;\nvar _13=$.mobile.panels[$.mobile.panels.length-1].panel;\nvar to=$(_10);\nif(_13[0]!=to[0]){\n$.mobile.nav(_13,to,_11,_12);\n$.mobile.panels.push({panel:to,animation:_11,direction:_12});\n}\n},_back:function(){\nif($.mobile.panels.length<2){\nreturn;\n}\nvar p1=$.mobile.panels.pop();\nvar p2=$.mobile.panels[$.mobile.panels.length-1];\nvar _14=p1.animation;\nvar _15=$.mobile.defaults.reverseDirections[p1.direction]||\"\";\n$.mobile.nav(p1.panel,p2.panel,_14,_15);\n},go:function(_16,_17,_18){\n_17=_17!=undefined?_17:$.mobile.defaults.animation;\n_18=_18!=undefined?_18:$.mobile.defaults.direction;\nlocation.hash=\"#&\"+$(_16).attr(\"id\");\n$.mobile._go(_16,_17,_18);\n},back:function(){\nhistory.go(-1);\n}};\n$.map([\"validatebox\",\"textbox\",\"passwordbox\",\"filebox\",\"searchbox\",\"combo\",\"combobox\",\"combogrid\",\"combotree\",\"combotreegrid\",\"datebox\",\"datetimebox\",\"numberbox\",\"spinner\",\"numberspinner\",\"timespinner\",\"datetimespinner\"],function(_19){\nif($.fn[_19]){\n$.extend($.fn[_19].defaults,{iconWidth:28,tipPosition:\"bottom\"});\n}\n});\n$.map([\"spinner\",\"numberspinner\",\"timespinner\",\"datetimespinner\"],function(_1a){\nif($.fn[_1a]){\n$.extend($.fn[_1a].defaults,{iconWidth:56,spinAlign:\"horizontal\"});\n}\n});\nif($.fn.menu){\n$.extend($.fn.menu.defaults,{itemHeight:30,noline:true});\n}\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/jquery.min.js",
    "content": "/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(e,t){\"use strict\";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return\"function\"==typeof t&&\"number\"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement(\"script\");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?l[c.call(e)]||\"object\":typeof e}var b=\"3.3.1\",w=function(e,t){return new w.fn.init(e,t)},T=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;w.fn=w.prototype={jquery:\"3.3.1\",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:\"jQuery\"+(\"3.3.1\"+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==c.call(e))&&(!(t=i(e))||\"function\"==typeof(n=f.call(t,\"constructor\")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(T,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,\"string\"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),\"function\"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){l[\"[object \"+t+\"]\"]=t.toLowerCase()});function C(e){var t=!!e&&\"length\"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b=\"sizzle\"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",R=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",I=\"\\\\[\"+M+\"*(\"+R+\")(?:\"+M+\"*([*^$|!~]?=)\"+M+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+R+\"))|)\"+M+\"*\\\\]\",W=\":(\"+R+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+I+\")*)|.*)\\\\)|)\",$=new RegExp(M+\"+\",\"g\"),B=new RegExp(\"^\"+M+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+M+\"+$\",\"g\"),F=new RegExp(\"^\"+M+\"*,\"+M+\"*\"),_=new RegExp(\"^\"+M+\"*([>+~]|\"+M+\")\"+M+\"*\"),z=new RegExp(\"=\"+M+\"*([^\\\\]'\\\"]*?)\"+M+\"*\\\\]\",\"g\"),X=new RegExp(W),U=new RegExp(\"^\"+R+\"$\"),V={ID:new RegExp(\"^#(\"+R+\")\"),CLASS:new RegExp(\"^\\\\.(\"+R+\")\"),TAG:new RegExp(\"^(\"+R+\"|[*])\"),ATTR:new RegExp(\"^\"+I),PSEUDO:new RegExp(\"^\"+W),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+M+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+M+\"*(?:([+-]|)\"+M+\"*(\\\\d+)|))\"+M+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+P+\")$\",\"i\"),needsContext:new RegExp(\"^\"+M+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+M+\"*((?:-\\\\d)?\\\\d*)\"+M+\"*\\\\)|)(?=[^-]|$)\",\"i\")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\\d$/i,Q=/^[^{]+\\{\\s*\\[native \\w/,J=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,K=/[+~]/,Z=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+M+\"?|(\"+M+\")|.)\",\"ig\"),ee=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ne=function(e,t){return t?\"\\0\"===e?\"\\ufffd\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&(\"form\"in e||\"label\"in e)},{dir:\"parentNode\",next:\"legend\"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],\"string\"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+\" \"]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if(\"object\"!==t.nodeName.toLowerCase()){(c=t.getAttribute(\"id\"))?c=c.replace(te,ne):t.setAttribute(\"id\",c=b),s=(h=a(e)).length;while(s--)h[s]=\"#\"+c+\" \"+ve(h[s]);v=h.join(\",\"),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute(\"id\")}}}return u(e.replace(B,\"$1\"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+\" \")>r.cacheLength&&delete t[e.shift()],t[n+\" \"]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split(\"|\"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return\"input\"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function de(e){return function(t){return\"form\"in t?t.parentNode&&!1===t.disabled?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:\"label\"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener(\"unload\",re,!1):i.attachEvent&&i.attachEvent(\"onunload\",re)),n.attributes=ue(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute(\"id\")===t}},r.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}},r.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML=\"<a id='\"+b+\"'></a><select id='\"+b+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&y.push(\"[*^$]=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||y.push(\"\\\\[\"+M+\"*(?:value|\"+P+\")\"),e.querySelectorAll(\"[id~=\"+b+\"-]\").length||y.push(\"~=\"),e.querySelectorAll(\":checked\").length||y.push(\":checked\"),e.querySelectorAll(\"a#\"+b+\"+*\").length||y.push(\".#.+[+~]\")}),ue(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=d.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&y.push(\"name\"+M+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&y.push(\":enabled\",\":disabled\"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&y.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),y.push(\",.*:\")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,\"*\"),m.call(e,\"[s!='']:x\"),v.push(\"!=\",W)}),y=y.length&&new RegExp(y.join(\"|\")),v=v.length&&new RegExp(v.join(\"|\")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,\"='$1']\"),n.matchesSelector&&g&&!S[t+\" \"]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+\"\").replace(te,ne)},oe.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n=\"\",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||\"\").replace(Z,ee),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+\" \"];return t||(t=new RegExp(\"(^|\"+M+\")\"+e+\"(\"+M+\"|$)\"))&&E(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?\"!=\"===t:!t||(i+=\"\",\"=\"===t?i===n:\"!=\"===t?i!==n:\"^=\"===t?n&&0===i.indexOf(n):\"*=\"===t?n&&i.indexOf(n)>-1:\"$=\"===t?n&&i.slice(-n.length)===n:\"~=\"===t?(\" \"+i.replace($,\" \")+\" \").indexOf(n)>-1:\"|=\"===t&&(i===n||i.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?\"nextSibling\":\"previousSibling\",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error(\"unsupported pseudo: \"+e);return i[b]?i(t):i.length>1?(n=[e,e,\"\",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,\"$1\"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||\"\")||oe.error(\"unsupported lang: \"+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return(n=n.toLowerCase())===e||0===n.indexOf(e+\"-\")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+\" \"];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B,\" \")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&\"parentNode\"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||\"*\",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[\" \"],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:\" \"===e[u-2].type?\"*\":\"\"})).replace(B,\"$1\"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m=\"0\",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG(\"*\",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+\" \"];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p=\"function\"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&\"ID\"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split(\"\").sort(D).join(\"\")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement(\"fieldset\"))}),ue(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||le(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||le(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute(\"disabled\")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[\":\"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):\"string\"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\"string\"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,\"string\"==typeof e){if(!(i=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,\"parentNode\")},parentsUntil:function(e,t,n){return k(e,\"parentNode\",n)},next:function(e){return P(e,\"nextSibling\")},prev:function(e){return P(e,\"previousSibling\")},nextAll:function(e){return k(e,\"nextSibling\")},prevAll:function(e){return k(e,\"previousSibling\")},nextUntil:function(e,t,n){return k(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return k(e,\"previousSibling\",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,\"iframe\")?e.contentDocument:(N(e,\"template\")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\\x20\\t\\r\\n\\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e=\"string\"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:\"\")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&\"string\"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[[\"notify\",\"progress\",w.Callbacks(\"memory\"),w.Callbacks(\"memory\"),2],[\"resolve\",\"done\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),1,\"rejected\"]],r=\"pending\",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},\"catch\":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+\"With\"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError(\"Thenable self-resolution\");l=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+\"With\"](this===o?void 0:this,arguments),this},o[t[0]+\"With\"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),\"pending\"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)[\"catch\"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener(\"DOMContentLoaded\",_),e.removeEventListener(\"load\",_),w.ready()}\"complete\"===r.readyState||\"loading\"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener(\"DOMContentLoaded\",_),e.addEventListener(\"load\",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,\"ms-\").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,ee=/[A-Z]/g;function te(e){return\"true\"===e||\"false\"!==e&&(\"null\"===e?null:e===+e+\"\"?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(ee,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,\"hasDataAttrs\"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf(\"data-\")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks(\"once memory\").add(function(){J.remove(e,[t+\"queue\",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";while(a--)(n=J.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ie=new RegExp(\"^(?:([+-])=|)(\"+re+\")([a-z%]*)$\",\"i\"),oe=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ae=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&w.contains(e.ownerDocument,e)&&\"none\"===w.css(e,\"display\")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,\"\")},u=s(),l=n&&n[3]||(w.cssNumber[t]?\"\":\"px\"),c=(w.cssNumber[t]||\"px\"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,\"display\"),t.parentNode.removeChild(t),\"none\"===i&&(i=\"block\"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?(\"none\"===n&&(i[o]=J.get(r,\"display\")||null,i[o]||(r.style.display=\"\")),\"\"===r.style.display&&ae(r)&&(i[o]=ce(r))):\"none\"!==n&&(i[o]=\"none\",J.set(r,\"display\",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,he=/^$|^module$|\\/(?:java|ecma)script/i,ge={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],\"globalEval\",!t||J.get(t[n],\"globalEval\"))}var me=/<|&#?\\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if(\"object\"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(de.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),\"script\"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||\"\")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement(\"div\")),t=r.createElement(\"input\");t.setAttribute(\"type\",\"radio\"),t.setAttribute(\"checked\",\"checked\"),t.setAttribute(\"name\",\"t\"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML=\"<textarea>x</textarea>\",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){\"string\"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return\"undefined\"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||\"\").match(M)||[\"\"]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||\"\").match(M)||[\"\"]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||\"\").split(\".\").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,\"handle events\")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,\"events\")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+\" \"]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&N(this,\"input\"))return this.click(),!1},_default:function(e){return N(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,Ae=/<script|<style|<link/i,je=/checked\\s*(?:[^=]|=\\s*.checked.)/i,qe=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function Le(e,t){return N(e,\"table\")&&N(11!==t.nodeType?t:t.firstChild,\"tr\")?w(e).children(\"tbody\")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Oe(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&pe.test(e.type)?t.checked=e.checked:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&\"string\"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,\"script\"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,\"script\"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||\"\")&&!J.access(l,\"globalEval\")&&w.contains(c,l)&&(l.src&&\"module\"!==(l.type||\"\").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,\"\"),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,\"script\")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,\"script\")).length>0&&ve(a,!u&&ye(e,\"script\")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp(\"^(\"+re+\")(?!px)[a-z%]+$\",\"i\"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join(\"|\"),\"i\");!function(){function t(){if(c){l.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",c.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i=\"1%\"!==t.top,u=12===n(t.marginLeft),c.style.right=\"60%\",s=36===n(t.right),o=36===n(t.width),c.style.position=\"absolute\",a=36===c.offsetWidth||\"absolute\",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement(\"div\"),c=r.createElement(\"div\");c.style&&(c.style.backgroundClip=\"content-box\",c.cloneNode(!0).style.backgroundClip=\"\",h.clearCloneStyle=\"content-box\"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ve={letterSpacing:\"0\",fontWeight:\"400\"},Ge=[\"Webkit\",\"Moz\",\"ms\"],Ye=r.createElement(\"div\").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function Ze(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?(\"content\"===n&&(u-=w.css(e,\"padding\"+oe[a],!0,i)),\"margin\"!==n&&(u-=w.css(e,\"border\"+oe[a]+\"Width\",!0,i))):(u+=w.css(e,\"padding\"+oe[a],!0,i),\"padding\"!==n?u+=w.css(e,\"border\"+oe[a]+\"Width\",!0,i):s+=w.css(e,\"border\"+oe[a]+\"Width\",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o=\"border-box\"===w.css(e,\"boxSizing\",!1,r),a=o;if(We.test(i)){if(!n)return i;i=\"auto\"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),(\"auto\"===i||!parseFloat(i)&&\"inline\"===w.css(e,\"display\",!1,r))&&(i=e[\"offset\"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?\"border\":\"content\"),a,r,i)+\"px\"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];\"string\"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o=\"number\"),null!=n&&n===n&&(\"number\"===o&&(n+=i&&i[3]||(w.cssNumber[s]?\"\":\"px\")),h.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),\"normal\"===i&&t in Ve&&(i=Ve[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each([\"height\",\"width\"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a=\"border-box\"===w.css(e,\"boxSizing\",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,\"border\",!1,o)-.5)),s&&(i=ie.exec(n))&&\"px\"!==(i[3]||\"px\")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,\"marginLeft\"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),w.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},\"margin\"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?\"\":\"px\")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=oe[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f=\"width\"in t||\"height\"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,\"fxshow\");n.queue||(null==(a=w._queueHooks(e,\"fx\")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,\"fx\").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,\"display\")),\"none\"===(c=w.css(e,\"display\"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,\"display\"),fe([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===w.css(e,\"float\")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l=\"none\"===c?\"\":c)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?\"hidden\"in y&&(g=y.hidden):y=J.access(e,\"fxshow\",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,\"fxshow\");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&\"expand\"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=[\"*\"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&\"object\"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,\"finish\"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,i=null!=e&&e+\"queueHooks\",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||\"fx\"),this.each(function(){var t,n=J.get(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut(\"show\"),slideUp:ut(\"hide\"),slideToggle:ut(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||\"fx\",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement(\"input\"),t=r.createElement(\"select\").appendChild(r.createElement(\"option\"));e.type=\"checkbox\",h.checkOn=\"\"!==e.value,h.optSelected=t.selected,(e=r.createElement(\"input\")).value=\"t\",e.type=\"radio\",h.radioValue=\"t\"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&\"radio\"===t&&N(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,\"tabindex\");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(\" \")}function mt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function xt(e){return Array.isArray(e)?e:\"string\"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=t[a++])r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=t[a++])while(r.indexOf(\" \"+o+\" \")>-1)r=r.replace(\" \"+o+\" \",\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(e,t){var n=typeof e,r=\"string\"===n||Array.isArray(e);return\"boolean\"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&\"boolean\"!==n||((t=mt(this))&&J.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||!1===e?\"\":J.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&(\" \"+vt(mt(n))+\" \").indexOf(t)>-1)return!0;return!1}});var bt=/\\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i=\"\":\"number\"==typeof i?i+=\"\":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?\"\":e+\"\"})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&\"set\"in t&&void 0!==t.set(this,i,\"value\")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&\"get\"in t&&void 0!==(n=t.get(i,\"value\"))?n:\"string\"==typeof(n=i.value)?n.replace(bt,\"\"):null==n?\"\":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,\"value\");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,\"optgroup\"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each([\"radio\",\"checkbox\"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),h.focusin=\"onfocusin\"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,\"type\")?t.type:t,x=f.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(\".\")>-1&&(m=(x=m.split(\".\")).shift(),x.sort()),c=m.indexOf(\":\")<0&&\"on\"+m,t=t[w.expando]?t:new w.Event(m,\"object\"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+x.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,\"events\")||{})[t.type]&&J.get(s,\"handle\"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\\?/;w.parseXML=function(t){var n;if(!t||\"string\"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,\"text/xml\")}catch(e){n=void 0}return n&&!n.getElementsByTagName(\"parsererror\").length||w.error(\"Invalid XML: \"+t),n};var St=/\\[\\]$/,Dt=/\\r?\\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+\"[\"+(\"object\"==typeof i&&null!=i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==x(t))r(e,t);else for(i in t)jt(e+\"[\"+i+\"]\",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join(\"&\")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,\"elements\");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(\":disabled\")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,\"\\r\\n\")}}):{name:t.name,value:n.replace(Dt,\"\\r\\n\")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\\/\\//,It={},Wt={},$t=\"*/\".concat(\"*\"),Bt=r.createElement(\"a\");Bt.href=Ct.href;function Ft(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return\"string\"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i[\"*\"]&&a(\"*\")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s=i.split(\" \"))[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:\"GET\",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":$t,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){\"object\"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks(\"once memory\"),x=h.statusCode||{},b={},T={},C=\"canceled\",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+\"\").replace(Rt,Ct.protocol+\"//\"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||\"*\").toLowerCase().match(M)||[\"\"],null==h.crossDomain){l=r.createElement(\"a\");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+\"//\"+Bt.host!=l.protocol+\"//\"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,\"\"),h.hasContent?h.data&&h.processData&&0===(h.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(h.data=h.data.replace(qt,\"+\")):(d=h.url.slice(o.length),h.data&&(h.processData||\"string\"==typeof h.data)&&(o+=(kt.test(o)?\"&\":\"?\")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,\"$1\"),d=(kt.test(o)?\"&\":\"?\")+\"_=\"+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader(\"If-Modified-Since\",w.lastModified[o]),w.etag[o]&&E.setRequestHeader(\"If-None-Match\",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader(\"Content-Type\",h.contentType),E.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+$t+\"; q=0.01\":\"\"):h.accepts[\"*\"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C=\"abort\",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger(\"ajaxSend\",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort(\"timeout\")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,\"No Transport\");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||\"\",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader(\"Last-Modified\"))&&(w.lastModified[o]=T),(T=E.getResponseHeader(\"etag\"))&&(w.etag[o]=T)),204===t||\"HEAD\"===h.type?C=\"nocontent\":304===t?C=\"notmodified\":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C=\"error\",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+\"\",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?\"ajaxSuccess\":\"ajaxError\",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger(\"ajaxComplete\",[E,h]),--w.active||w.event.trigger(\"ajaxStop\")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,\"json\")},getScript:function(e,t){return w.get(e,void 0,t,\"script\")}}),w.each([\"get\",\"post\"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,\"throws\":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&\"withCredentials\"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,\"abort\"===e?s.abort():\"error\"===e?\"number\"!=typeof s.status?o(0,\"error\"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,\"text\"!==(s.responseType||\"text\")||\"string\"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n(\"error\"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n(\"abort\");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),w.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(\"<script>\").prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&o(\"error\"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\\?(?=&|$)|\\?\\?/;w.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Yt.pop()||w.expando+\"_\"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter(\"json jsonp\",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Qt.test(t.data)&&\"data\");if(s||\"jsonp\"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,\"$1\"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+i),t.converters[\"script json\"]=function(){return a||w.error(i+\" was not called\"),a[0]},t.dataTypes[0]=\"json\",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),\"script\"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument(\"\").body;return e.innerHTML=\"<form></form><form></form>\",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if(\"string\"!=typeof e)return[];\"boolean\"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),a.length>0&&w.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?w(\"<div>\").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,\"position\"),f=w(e),p={};\"static\"===c&&(e.style.position=\"relative\"),s=f.offset(),o=w.css(e,\"top\"),u=w.css(e,\"left\"),(l=(\"absolute\"===c||\"fixed\"===c)&&(o+u).indexOf(\"auto\")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),\"using\"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===w.css(r,\"position\"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&\"static\"===w.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,\"borderTopWidth\",!0),i.left+=w.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-w.css(r,\"marginTop\",!0),left:t.left-i.left-w.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===w.css(e,\"position\"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=\"pageYOffset\"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each([\"top\",\"left\"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+\"px\":n})}),w.each({Height:\"height\",Width:\"width\"},function(e,t){w.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||\"boolean\"!=typeof i),s=n||(!0===i||!0===o?\"margin\":\"border\");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body[\"scroll\"+e],o[\"scroll\"+e],t.body[\"offset\"+e],o[\"offset\"+e],o[\"client\"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),w.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/license_freeware.txt",
    "content": "This license agreement refers to EasyUI for jQuery software - Freeware License.\n\nEasyUI Team grants to you a limited, non-transferable and non-exclusive right to use, royalty-free, copy and redistribute the software.\n\nThe licensee has the right to use the software for a non-profit projects/sites. There are no limitations on the number of non-profit projects/sites you can use the software in, you can use it on any number of non-profit projects/sites you need. There is no time limit, you can use the software for any period of time you need. There is no restriction while you are developing your solution. There are no royalties of any kind involved.\n\nThe governmental entities are not allowed to use this freeware license.\n\nThe licensee is allowed to copy and redistribute the software but you may not:\na) Distribute the modified software or part(s) of it as a standalone application.\nb) Sublicense, rent, lease or lend any portion of the software as a standalone application.\nc) Modify or remove any copyright notices from any of the software files.\n\nEasyUI Team retains all ownership rights to the software.\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-af.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Bladsy';\n\t$.fn.pagination.defaults.afterPageText = 'Van {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Wys (from) tot (to) van (total) items';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Verwerking, wag asseblief ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ok';\n\t$.messager.defaults.cancel = 'Die styl';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Die veld is verpligtend.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = \"Gee 'n geldige e-pos adres.\";\n\t$.fn.validatebox.defaults.rules.url.message = \"Gee 'n geldige URL nie.\";\n\t$.fn.validatebox.defaults.rules.length.message = \"Voer 'n waarde tussen {0} en {1}.\";\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Vandag';\n\t$.fn.datebox.defaults.closeText = 'Sluit';\n\t$.fn.datebox.defaults.okText = 'Ok';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-am.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Էջ';\n\t$.fn.pagination.defaults.afterPageText = 'ից {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Դիտել {from}-ից {to}-ը {total} գրառումից';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Մշակվում է, խնդրում ենք սպասել ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Այո';\n\t$.messager.defaults.cancel = 'Փակել';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Այս դաշտը պարտադիր է.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Խնդրում ենք մուտքագրել գործող e-mail հասցե.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Խնդրում ենք մուտքագրել գործող URL.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Խնդրում ենք մուտքագրել արժեք {0}  {1}.';\n\t$.fn.validatebox.defaults.rules.remote.message = 'Խնդրում ենք ուղղել այս դաշտը.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.firstDay = 1;\n\t$.fn.calendar.defaults.weeks  = ['Կ.','Ե.','Ե.','Չ.','Հ.','Ու.','Շ.'];\n\t$.fn.calendar.defaults.months = ['Հունվար', 'Փետրվար', 'Մարտ', 'Ապրիլ', 'Մայիս', 'Հունիս', 'Հուլիս', 'Օգոստոս', 'Սեպտեմբեր', 'Հոկտեմբեր', 'Նոյեմբեր', 'Դեկտեմբեր'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Այսօր';\n\t$.fn.datebox.defaults.closeText = 'Փակել';\n\t$.fn.datebox.defaults.okText = 'Այո';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-ar.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'صفحة';\n\t$.fn.pagination.defaults.afterPageText = 'من {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'عرض {from} إلى {to} من {total} عنصر';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'معالجة, الرجاء الإنتظار ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'موافق';\n\t$.messager.defaults.cancel = 'إلغاء';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'هذا الحقل مطلوب.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'الرجاء إدخال بريد إلكتروني صحيح.';\n\t$.fn.validatebox.defaults.rules.url.message = 'الرجاء إدخال رابط صحيح.';\n\t$.fn.validatebox.defaults.rules.length.message = 'الرجاء إدخال قيمة بين {0} و {1}.';\n\t$.fn.validatebox.defaults.rules.remote.message = 'الرجاء التأكد من الحقل.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'اليوم';\n\t$.fn.datebox.defaults.closeText = 'إغلاق';\n\t$.fn.datebox.defaults.okText = 'موافق';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-bg.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Страница';\n\t$.fn.pagination.defaults.afterPageText = 'от {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Показани {from} за {to} от {total} продукти';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Обработка, моля изчакайте ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Добре';\n\t$.messager.defaults.cancel = 'Задрасквам';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Това поле е задължително.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Моля, въведете валиден имейл адрес.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Моля въведете валиден URL.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Моля, въведете стойност между {0} и {1}.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Днес';\n\t$.fn.datebox.defaults.closeText = 'Близо';\n\t$.fn.datebox.defaults.okText = 'Добре';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-ca.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Pàgina';\n\t$.fn.pagination.defaults.afterPageText = 'de {pages}';\n\t$.fn.pagination.defaults.displayMsg = \"Veient {from} a {to} de {total} d'articles\";\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Elaboració, si us plau esperi ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ok';\n\t$.messager.defaults.cancel = 'Cancel';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Aquest camp és obligatori.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Introduïu una adreça de correu electrònic vàlida.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Si us plau, introduïu un URL vàlida.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Si us plau, introduïu un valor entre {0} i {1}.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Avui';\n\t$.fn.datebox.defaults.closeText = 'Tancar';\n\t$.fn.datebox.defaults.okText = 'Ok';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-cs.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Strana';\n\t$.fn.pagination.defaults.afterPageText = 'z {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Zobrazuji {from} do {to} z {total} položky';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Zpracování, čekejte prosím ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ok';\n\t$.messager.defaults.cancel = 'Zrušit';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Toto pole je vyžadováno.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Zadejte prosím platnou e-mailovou adresu.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Zadejte prosím platnou adresu URL.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Prosím, zadejte hodnotu mezi {0} a {1}.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Dnes';\n\t$.fn.datebox.defaults.closeText = 'Zavřít';\n\t$.fn.datebox.defaults.okText = 'Ok';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-cz.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Strana';\n\t$.fn.pagination.defaults.afterPageText = 'z {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Zobrazuji záznam {from} až {to} z {total}.';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Pracuji, čekejte prosím…';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ok';\n\t$.messager.defaults.cancel = 'Zrušit';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Toto pole je vyžadováno.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Zadejte, prosím, platnou e-mailovou adresu.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Zadejte, prosím, platnou adresu URL.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Zadejte, prosím, hodnotu mezi {0} a {1}.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['N','P','Ú','S','Č','P','S']; //neděle pondělí úterý středa čtvrtek pátek sobota\n\t$.fn.calendar.defaults.months = ['led', 'únr', 'bře', 'dub', 'kvě', 'čvn', 'čvc', 'srp', 'zář', 'říj', 'lis', 'pro']; //leden únor březen duben květen červen červenec srpen září říjen listopad prosinec\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Dnes';\n\t$.fn.datebox.defaults.closeText = 'Zavřít';\n\t$.fn.datebox.defaults.okText = 'Ok';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-da.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Page';\n\t$.fn.pagination.defaults.afterPageText = 'af {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Viser {from} til {to} af {total} poster';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Behandling, vent venligst ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ok';\n\t$.messager.defaults.cancel = 'Annuller';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Dette felt er påkrævet.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Angiv en gyldig e-mail-adresse.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Angiv en gyldig webadresse.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Angiv en værdi mellem {0} og {1}.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'I dag';\n\t$.fn.datebox.defaults.closeText = 'Luk';\n\t$.fn.datebox.defaults.okText = 'Ok';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-de.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Seite';\n\t$.fn.pagination.defaults.afterPageText = 'von {pages}';\n\t$.fn.pagination.defaults.displayMsg = '{from} bis {to} von {total} Datensätzen';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Verarbeitung läuft, bitte warten ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'OK';\n\t$.messager.defaults.cancel = 'Abbruch';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Dieses Feld wird benötigt.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Bitte geben Sie eine gültige E-Mail-Adresse ein.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Bitte geben Sie eine gültige URL ein.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Bitte geben Sie einen Wert zwischen {0} und {1} ein.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.firstDay = 1;\n\t$.fn.calendar.defaults.weeks  = ['S','M','D','M','D','F','S'];\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Heute';\n\t$.fn.datebox.defaults.closeText = 'Schließen';\n\t$.fn.datebox.defaults.okText = 'OK';\n\t$.fn.datebox.defaults.formatter = function(date){\n\t\tvar y = date.getFullYear();\n\t\tvar m = date.getMonth()+1;\n\t\tvar d = date.getDate();\n\t\treturn (d<10?('0'+d):d)+'.'+(m<10?('0'+m):m)+'.'+y;\n\t};\n\t$.fn.datebox.defaults.parser = function(s){\n\t\tif (!s) return new Date();\n\t\tvar ss = s.split('.');\n\t\tvar m = parseInt(ss[1],10);\n\t\tvar d = parseInt(ss[0],10);\n\t\tvar y = parseInt(ss[2],10);\n\t\tif (!isNaN(y) && !isNaN(m) && !isNaN(d)){\n\t\t\treturn new Date(y,m-1,d);\n\t\t} else {\n\t\t\treturn new Date();\n\t\t}\n\t};\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-el.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Σελίδα';\n\t$.fn.pagination.defaults.afterPageText = 'από {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Εμφάνιση {from} εώς {to} από {total} αντικείμενα';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Γίνεται Επεξεργασία, Παρακαλώ Περιμένετε ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Εντάξει';\n\t$.messager.defaults.cancel = 'Άκυρο';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Το πεδίο είναι υποχρεωτικό.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Παρακαλώ εισάγετε σωστή Ηλ.Διεύθυνση.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Παρακαλώ εισάγετε σωστό σύνδεσμο.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Παρακαλώ εισάγετε τιμή μεταξύ {0} και {1}.';\n\t$.fn.validatebox.defaults.rules.remote.message = 'Παρακαλώ διορθώστε αυτό το πεδίο.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'];\n\t$.fn.calendar.defaults.months = ['Ιαν', 'Φεβ', 'Μαρ', 'Απρ', 'Μαϊ', 'Ιου', 'Ιου', 'Αυγ', 'Σεπ', 'Οκτ', 'Νοε', 'Δεκ'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Σήμερα';\n\t$.fn.datebox.defaults.closeText = 'Κλείσιμο';\n\t$.fn.datebox.defaults.okText = 'Εντάξει';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-en.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Page';\n\t$.fn.pagination.defaults.afterPageText = 'of {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Displaying {from} to {to} of {total} items';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Processing, please wait ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ok';\n\t$.messager.defaults.cancel = 'Cancel';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'This field is required.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Please enter a valid email address.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Please enter a valid URL.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Please enter a value between {0} and {1}.';\n\t$.fn.validatebox.defaults.rules.remote.message = 'Please fix this field.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Today';\n\t$.fn.datebox.defaults.closeText = 'Close';\n\t$.fn.datebox.defaults.okText = 'Ok';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-es.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'P&aacute;gina';\n\t$.fn.pagination.defaults.afterPageText = 'de {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Mostrando {from} a {to} de {total} elementos';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Procesando, por favor espere ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Aceptar';\n\t$.messager.defaults.cancel = 'Cancelar';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Este campo es obligatorio.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Por favor ingrese una direcci&oacute;n de correo v&aacute;lida.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Por favor ingrese una URL v&aacute;lida.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Por favor ingrese un valor entre {0} y {1}.';\n\t$.fn.validatebox.defaults.rules.remote.message = 'Por favor corrija este campo.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['Do','Lu','Ma','Mi','Ju','Vi','S&aacute;'];\n\t$.fn.calendar.defaults.months = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Hoy';\n\t$.fn.datebox.defaults.closeText = 'Cerrar';\n\t$.fn.datebox.defaults.okText = 'Aceptar';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-fa.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'صفحه';\n\t$.fn.pagination.defaults.afterPageText = 'از {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'نمایش {from} تا {to} از {total} مورد';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'درحال پردازش، لطفا صبر کنید...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'قبول';\n\t$.messager.defaults.cancel = 'انصراف';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'این فیلد اجباری می باشد.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'لطفا آدرس ایمیل را صحیح وارد کنید.';\n\t$.fn.validatebox.defaults.rules.url.message = 'لطفا آدرس سایت را صحیح وارد کنید.';\n\t$.fn.validatebox.defaults.rules.length.message = 'لطفا مقداری بین {0} و {1} وارد کنید.';\n\t$.fn.validatebox.defaults.rules.remote.message = 'لطفا مقدار این فیلد را تصحیح کنید.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'امروز';\n\t$.fn.datebox.defaults.closeText = 'بستن';\n\t$.fn.datebox.defaults.okText = 'قبول';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-fr.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Page';\n\t$.fn.pagination.defaults.afterPageText = 'de {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Affichage de {from} et {to} au {total} des articles';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = \"Traitement, s'il vous plaît patienter ...\";\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ok';\n\t$.messager.defaults.cancel = 'Annuler';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Ce champ est obligatoire.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = \"S'il vous plaît entrer une adresse email valide.\";\n\t$.fn.validatebox.defaults.rules.url.message = \"S'il vous plaît entrer une URL valide.\";\n\t$.fn.validatebox.defaults.rules.length.message = \"S'il vous plaît entrez une valeur comprise entre {0} et {1}.\";\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\n\t$.fn.calendar.defaults.months = [\"Jan\", \"Fév\", \"Mar\", \"Avr\", \"Mai\", \"Juin\", \"Juil\", \"Aôu\", \"Sep\", \"Oct\", \"Nov\", \"Déc\"];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = \"Aujourd'hui\";\n\t$.fn.datebox.defaults.closeText = 'Fermer';\n\t$.fn.datebox.defaults.okText = 'Ok';\n\t$.fn.datebox.defaults.formatter = function(date){\n\t\tvar y = date.getFullYear();\n\t\tvar m = date.getMonth()+1;\n\t\tvar d = date.getDate();\n\t\treturn (d<10?('0'+d):d)+'/'+(m<10?('0'+m):m)+'/'+y;\n\t};\n\t$.fn.datebox.defaults.parser = function(s){\n\t\tif (!s) return new Date();\n\t\tvar ss = s.split('/');\n\t\tvar d = parseInt(ss[0],10);\n\t\tvar m = parseInt(ss[1],10);\n\t\tvar y = parseInt(ss[2],10);\n\t\tif (!isNaN(y) && !isNaN(m) && !isNaN(d)){\n\t\t\treturn new Date(y,m-1,d);\n\t\t} else {\n\t\t\treturn new Date();\n\t\t}\n\t};\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-it.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Pagina';\n\t$.fn.pagination.defaults.afterPageText = 'di {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Visualizzazione {from} a {to} di {total} elementi';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'In lavorazione, attendere ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ok';\n\t$.messager.defaults.cancel = 'Annulla';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Questo campo è richiesto.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Inserisci un indirizzo email valido.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Inserisci un URL valido.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Inserisci un valore tra {0} e {1}.';\n\t$.fn.validatebox.defaults.rules.remote.message = 'Correggere questo campo.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.firstDay = 1;\n\t$.fn.calendar.defaults.weeks = ['D','L','M','M','G','V','S'];\n\t$.fn.calendar.defaults.months = ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Oggi';\n\t$.fn.datebox.defaults.closeText = 'Chiudi';\n\t$.fn.datebox.defaults.okText = 'Ok';\n\t$.fn.datebox.defaults.formatter = function(date){\n\t\tvar y = date.getFullYear();\n\t\tvar m = date.getMonth()+1;\n\t\tvar d = date.getDate();\n\t\treturn (d<10?('0'+d):d)+'/'+(m<10?('0'+m):m)+'/'+y;\n\t};\n\t$.fn.datebox.defaults.parser = function(s){\n\t\tif (!s) return new Date();\n\t\tvar ss = s.split('/');\n\t\tvar d = parseInt(ss[0],10);\n\t\tvar m = parseInt(ss[1],10);\n\t\tvar y = parseInt(ss[2],10);\n\t\tif (!isNaN(y) && !isNaN(m) && !isNaN(d)){\n\t\t\treturn new Date(y,m-1,d);\n\t\t} else {\n\t\t\treturn new Date();\n\t\t}\n\t};\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-jp.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'ページ';\n\t$.fn.pagination.defaults.afterPageText = '{pages} 中';\n\t$.fn.pagination.defaults.displayMsg = '全 {total} アイテム中 {from} から {to} を表示中';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = '処理中です。少々お待ちください...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'OK';\n\t$.messager.defaults.cancel = 'キャンセル';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = '入力は必須です。';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = '正しいメールアドレスを入力してください。';\n\t$.fn.validatebox.defaults.rules.url.message = '正しいURLを入力してください。';\n\t$.fn.validatebox.defaults.rules.length.message = '{0} から {1} の範囲の正しい値を入力してください。';\n\t$.fn.validatebox.defaults.rules.remote.message = 'このフィールドを修正してください。';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['日','月','火','水','木','金','土'];\n\t$.fn.calendar.defaults.months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = '今日';\n\t$.fn.datebox.defaults.closeText = '閉じる';\n\t$.fn.datebox.defaults.okText = 'OK';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-ko.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = '페이지';\n\t$.fn.pagination.defaults.afterPageText = '{pages} 중';\n\t$.fn.pagination.defaults.displayMsg = '전체 {total} 항목 중 {from}부터 {to}번째';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = '처리 중입니다. 잠시만 기다려 주세요...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = '확인';\n\t$.messager.defaults.cancel = '취소';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = '필수 항목입니다.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = '올바른 메일 주소를 입력해 주세요.';\n\t$.fn.validatebox.defaults.rules.url.message = '올바른 URL를 입력해 주세요.';\n\t$.fn.validatebox.defaults.rules.length.message = '{0}에서 {1} 사이의 값을 입력해 주세요.';\n\t$.fn.validatebox.defaults.rules.remote.message = '이 필드를 수정해 주세요.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['일','월','화','수','목','금','토'];\n\t$.fn.calendar.defaults.months = ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = '오늘';\n\t$.fn.datebox.defaults.closeText = '닫기';\n\t$.fn.datebox.defaults.okText = '확인';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-nl.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Pagina';\n\t$.fn.pagination.defaults.afterPageText = 'van {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Tonen van {from} tot {to} van de {total} items';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Verwerking, even geduld ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ok';\n\t$.messager.defaults.cancel = 'Annuleren';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Dit veld is verplicht.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Geef een geldig e-mailadres.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Vul een geldige URL.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Voer een waarde tussen {0} en {1}.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Vandaag';\n\t$.fn.datebox.defaults.closeText = 'Dicht';\n\t$.fn.datebox.defaults.okText = 'Ok';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-pl.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Strona';\n\t$.fn.pagination.defaults.afterPageText = 'z {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Wyświetlono elementy od {from} do {to} z {total}';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Przetwarzanie, proszę czekać ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ok';\n\t$.messager.defaults.cancel = 'Cancel';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'To pole jest wymagane.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Wprowadź poprawny adres email.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Wprowadź poprawny adres URL.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Wprowadź wartość z zakresu od {0} do {1}.';\n\t$.fn.validatebox.defaults.rules.remote.message = 'Proszę poprawić to pole.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['N','P','W','Ś','C','P','S'];\n\t$.fn.calendar.defaults.months = ['Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze', 'Lip', 'Sie', 'Wrz', 'Paź', 'Lis', 'Gru'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Dzisiaj';\n\t$.fn.datebox.defaults.closeText = 'Zamknij';\n\t$.fn.datebox.defaults.okText = 'Ok';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-pt_BR.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Página';\n\t$.fn.pagination.defaults.afterPageText = 'de {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Mostrando {from} a {to} de {total} itens';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Processando, aguarde ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ok';\n\t$.messager.defaults.cancel = 'Cancelar';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Esse campo é requerido.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Insira um endereço de email válido.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Insira uma URL válida.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Insira uma valor entre {0} e {1}.';\n\t$.fn.validatebox.defaults.rules.remote.message = 'Corrija esse campo.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['D','S','T','Q','Q','S','S'];\n\t$.fn.calendar.defaults.months = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Hoje';\n\t$.fn.datebox.defaults.closeText = 'Fechar';\n\t$.fn.datebox.defaults.okText = 'Ok';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-ru.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Страница';\n\t$.fn.pagination.defaults.afterPageText = 'из {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Просмотр {from} до {to} из {total} записей';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Обрабатывается, пожалуйста ждите ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ок';\n\t$.messager.defaults.cancel = 'Закрыть';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Это поле необходимо.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Пожалуйста введите корректный e-mail адрес.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Пожалуйста введите корректный URL.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Пожалуйста введите зачение между {0} и {1}.';\n\t$.fn.validatebox.defaults.rules.remote.message = 'Пожалуйста исправте это поле.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.firstDay = 1;\n\t$.fn.calendar.defaults.weeks  = ['В','П','В','С','Ч','П','С'];\n\t$.fn.calendar.defaults.months = ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Сегодня';\n\t$.fn.datebox.defaults.closeText = 'Закрыть';\n\t$.fn.datebox.defaults.okText = 'Ок';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-sv_SE.js",
    "content": "if ($.fn.pagination) {\n    $.fn.pagination.defaults.beforePageText = 'Sida';\n    $.fn.pagination.defaults.afterPageText = 'av {pages}';\n    $.fn.pagination.defaults.displayMsg = 'Visar {from} till {to} av {total} poster';\n}\nif ($.fn.datagrid) {\n    $.fn.datagrid.defaults.loadMsg = 'Bearbetar, vänligen vänta ...';\n}\nif ($.fn.treegrid && $.fn.datagrid) {\n    $.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager) {\n    $.messager.defaults.ok = 'Ok';\n    $.messager.defaults.cancel = 'Avbryt';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n        'combo','combobox','combogrid','combotree',\n        'datebox','datetimebox','numberbox',\n        'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n    if ($.fn[plugin]){\n        $.fn[plugin].defaults.missingMessage = 'Detta fält är obligatoriskt.';\n    }\n});\nif ($.fn.validatebox) {\n    $.fn.validatebox.defaults.rules.email.message = 'Vänligen ange en korrekt e-post adress.';\n    $.fn.validatebox.defaults.rules.url.message = 'Vänligen ange en korrekt URL.';\n    $.fn.validatebox.defaults.rules.length.message = 'Vänligen ange ett nummer mellan {0} och {1}.';\n    $.fn.validatebox.defaults.rules.remote.message = 'Vänligen åtgärda detta fält.';\n}\nif ($.fn.calendar) {\n    $.fn.calendar.defaults.weeks = ['Sön', 'Mån', 'Tis', 'Ons', 'Tors', 'Fre', 'Lör'];\n    $.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'];\n}\nif ($.fn.datebox) {\n    $.fn.datebox.defaults.currentText = 'I dag';\n    $.fn.datebox.defaults.closeText = 'Stäng';\n    $.fn.datebox.defaults.okText = 'Ok';\n}\nif ($.fn.datetimebox && $.fn.datebox) {\n    $.extend($.fn.datetimebox.defaults, {\n        currentText: $.fn.datebox.defaults.currentText,\n        closeText: $.fn.datebox.defaults.closeText,\n        okText: $.fn.datebox.defaults.okText\n    });\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-tr.js",
    "content": "if ($.fn.pagination){\n    $.fn.pagination.defaults.beforePageText = 'Sayfa';\n    $.fn.pagination.defaults.afterPageText = ' / {pages}';\n    $.fn.pagination.defaults.displayMsg = '{from} ile {to} arası gösteriliyor, toplam {total} kayıt';\n}\nif ($.fn.datagrid){\n    $.fn.panel.defaults.loadingMessage = \"Yükleniyor...\";\n}\n\nif ($.fn.datagrid){\n    $.fn.datagrid.defaults.loadingMessage = \"Yükleniyor...\";\n    $.fn.datagrid.defaults.loadMsg = 'İşleminiz Yapılıyor, lütfen bekleyin ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n    $.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n    $.messager.defaults.ok = 'Tamam';\n    $.messager.defaults.cancel = 'İptal';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n        'combo','combobox','combogrid','combotree',\n        'datebox','datetimebox','numberbox',\n        'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n    if ($.fn[plugin]){\n        $.fn[plugin].defaults.missingMessage = 'Bu alan zorunludur.';\n    }\n});\nif ($.fn.validatebox){\n    $.fn.validatebox.defaults.rules.email.message = 'Lütfen geçerli bir email adresi giriniz.';\n    $.fn.validatebox.defaults.rules.url.message = 'Lütfen geçerli bir URL giriniz.';\n    $.fn.validatebox.defaults.rules.length.message = 'Lütfen {0} ile {1} arasında bir değer giriniz.';\n    $.fn.validatebox.defaults.rules.remote.message = 'Lütfen bu alanı düzeltiniz.';\n}\nif ($.fn.calendar){\n    $.fn.calendar.defaults.weeks = ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'];\n    $.fn.calendar.defaults.months = ['Oca', 'Şub', 'Mar', 'Nis', 'May', 'Haz', 'Tem', 'Ağu', 'Eyl', 'Eki', 'Kas', 'Ara'];\n}\nif ($.fn.datebox){\n    $.fn.datebox.defaults.currentText = 'Bugün';\n    $.fn.datebox.defaults.closeText = 'Kapat';\n    $.fn.datebox.defaults.okText = 'Tamam';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n    $.extend($.fn.datetimebox.defaults,{\n        currentText: $.fn.datebox.defaults.currentText,\n        closeText: $.fn.datebox.defaults.closeText,\n        okText: $.fn.datebox.defaults.okText\n    });\n    \n    $.fn.datebox.defaults.formatter=function(date){\n        var y=date.getFullYear();\n        var m=date.getMonth()+1;\n        var d=date.getDate();\n        if(m<10){m=\"0\"+m;}\n        if(d<10){d=\"0\"+d;}\n        return d+\".\"+m+\".\"+y;\n    };\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-ua.js",
    "content": "﻿if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Сторінка';\n\t$.fn.pagination.defaults.afterPageText = 'з {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Перегляд {from} до {to} з {total} записів';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'Обробляється, зачекайте будь даска ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ок';\n\t$.messager.defaults.cancel = 'Закрити';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Це поле необхідно.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Будь ласка, введіть коректну e-mail адресу.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Будь ласка, введіть коректний URL.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Будь ласка введіть значення між {0} і {1}.';\n\t$.fn.validatebox.defaults.rules.remote.message = 'Будь ласка виправте це поле.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.firstDay = 1;\n\t$.fn.calendar.defaults.weeks  = ['В','П','В','С','Ч','П','С'];\n\t$.fn.calendar.defaults.months = ['Січ', 'Лют', 'Бер', 'Квіт', 'Трав', 'Черв', 'Лип', 'Серп', 'Вер', 'Жовт', 'Лист', 'Груд'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Сьогодні';\n\t$.fn.datebox.defaults.closeText = 'Закрити';\n\t$.fn.datebox.defaults.okText = 'Ок';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-zh_CN.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = '第';\n\t$.fn.pagination.defaults.afterPageText = '共{pages}页';\n\t$.fn.pagination.defaults.displayMsg = '显示{from}到{to},共{total}记录';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = '正在处理，请稍待。。。';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = '确定';\n\t$.messager.defaults.cancel = '取消';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = '该输入项为必输项';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = '请输入有效的电子邮件地址';\n\t$.fn.validatebox.defaults.rules.url.message = '请输入有效的URL地址';\n\t$.fn.validatebox.defaults.rules.length.message = '输入内容长度必须介于{0}和{1}之间';\n\t$.fn.validatebox.defaults.rules.remote.message = '请修正该字段';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['日','一','二','三','四','五','六'];\n\t$.fn.calendar.defaults.months = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = '今天';\n\t$.fn.datebox.defaults.closeText = '关闭';\n\t$.fn.datebox.defaults.okText = '确定';\n\t$.fn.datebox.defaults.formatter = function(date){\n\t\tvar y = date.getFullYear();\n\t\tvar m = date.getMonth()+1;\n\t\tvar d = date.getDate();\n\t\treturn y+'-'+(m<10?('0'+m):m)+'-'+(d<10?('0'+d):d);\n\t};\n\t$.fn.datebox.defaults.parser = function(s){\n\t\tif (!s) return new Date();\n\t\tvar ss = s.split('-');\n\t\tvar y = parseInt(ss[0],10);\n\t\tvar m = parseInt(ss[1],10);\n\t\tvar d = parseInt(ss[2],10);\n\t\tif (!isNaN(y) && !isNaN(m) && !isNaN(d)){\n\t\t\treturn new Date(y,m-1,d);\n\t\t} else {\n\t\t\treturn new Date();\n\t\t}\n\t};\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\nif ($.fn.datetimespinner){\n\t$.fn.datetimespinner.defaults.selections = [[0,4],[5,7],[8,10],[11,13],[14,16],[17,19]]\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-zh_TW.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = '第';\n\t$.fn.pagination.defaults.afterPageText = '共{pages}頁';\n\t$.fn.pagination.defaults.displayMsg = '顯示{from}到{to},共{total}記錄';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = '正在處理，請稍待。。。';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = '確定';\n\t$.messager.defaults.cancel = '取消';\n}\n$.map(['validatebox','textbox','passwordbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = '該輸入項為必輸項';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = '請輸入有效的電子郵件地址';\n\t$.fn.validatebox.defaults.rules.url.message = '請輸入有效的URL地址';\n\t$.fn.validatebox.defaults.rules.length.message = '輸入內容長度必須介於{0}和{1}之間';\n\t$.fn.validatebox.defaults.rules.remote.message = '請修正此欄位';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['日','一','二','三','四','五','六'];\n\t$.fn.calendar.defaults.months = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = '今天';\n\t$.fn.datebox.defaults.closeText = '關閉';\n\t$.fn.datebox.defaults.okText = '確定';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\nif ($.fn.datetimespinner){\n\t$.fn.datetimespinner.defaults.selections = [[0,4],[5,7],[8,10],[11,13],[14,16],[17,19]]\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.accordion.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2,_3){\nvar _4=$.data(_2,\"accordion\");\nvar _5=_4.options;\nvar _6=_4.panels;\nvar cc=$(_2);\nvar _7=(_5.halign==\"left\"||_5.halign==\"right\");\ncc.children(\".panel-last\").removeClass(\"panel-last\");\ncc.children(\".panel:last\").addClass(\"panel-last\");\nif(_3){\n$.extend(_5,{width:_3.width,height:_3.height});\n}\ncc._size(_5);\nvar _8=0;\nvar _9=\"auto\";\nvar _a=cc.find(\">.panel>.accordion-header\");\nif(_a.length){\nif(_7){\n$(_a[0]).next().panel(\"resize\",{width:cc.width(),height:cc.height()});\n_8=$(_a[0])._outerWidth();\n}else{\n_8=$(_a[0]).css(\"height\",\"\")._outerHeight();\n}\n}\nif(!isNaN(parseInt(_5.height))){\nif(_7){\n_9=cc.width()-_8*_a.length;\n}else{\n_9=cc.height()-_8*_a.length;\n}\n}\n_b(true,_9-_b(false));\nfunction _b(_c,_d){\nvar _e=0;\nfor(var i=0;i<_6.length;i++){\nvar p=_6[i];\nif(_7){\nvar h=p.panel(\"header\")._outerWidth(_8);\n}else{\nvar h=p.panel(\"header\")._outerHeight(_8);\n}\nif(p.panel(\"options\").collapsible==_c){\nvar _f=isNaN(_d)?undefined:(_d+_8*h.length);\nif(_7){\np.panel(\"resize\",{height:cc.height(),width:(_c?_f:undefined)});\n_e+=p.panel(\"panel\")._outerWidth()-_8*h.length;\n}else{\np.panel(\"resize\",{width:cc.width(),height:(_c?_f:undefined)});\n_e+=p.panel(\"panel\").outerHeight()-_8*h.length;\n}\n}\n}\nreturn _e;\n};\n};\nfunction _10(_11,_12,_13,all){\nvar _14=$.data(_11,\"accordion\").panels;\nvar pp=[];\nfor(var i=0;i<_14.length;i++){\nvar p=_14[i];\nif(_12){\nif(p.panel(\"options\")[_12]==_13){\npp.push(p);\n}\n}else{\nif(p[0]==$(_13)[0]){\nreturn i;\n}\n}\n}\nif(_12){\nreturn all?pp:(pp.length?pp[0]:null);\n}else{\nreturn -1;\n}\n};\nfunction _15(_16){\nreturn _10(_16,\"collapsed\",false,true);\n};\nfunction _17(_18){\nvar pp=_15(_18);\nreturn pp.length?pp[0]:null;\n};\nfunction _19(_1a,_1b){\nreturn _10(_1a,null,_1b);\n};\nfunction _1c(_1d,_1e){\nvar _1f=$.data(_1d,\"accordion\").panels;\nif(typeof _1e==\"number\"){\nif(_1e<0||_1e>=_1f.length){\nreturn null;\n}else{\nreturn _1f[_1e];\n}\n}\nreturn _10(_1d,\"title\",_1e);\n};\nfunction _20(_21){\nvar _22=$.data(_21,\"accordion\").options;\nvar cc=$(_21);\nif(_22.border){\ncc.removeClass(\"accordion-noborder\");\n}else{\ncc.addClass(\"accordion-noborder\");\n}\n};\nfunction _23(_24){\nvar _25=$.data(_24,\"accordion\");\nvar cc=$(_24);\ncc.addClass(\"accordion\");\n_25.panels=[];\ncc.children(\"div\").each(function(){\nvar _26=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr(\"selected\")?true:undefined)});\nvar pp=$(this);\n_25.panels.push(pp);\n_28(_24,pp,_26);\n});\ncc._bind(\"_resize\",function(e,_27){\nif($(this).hasClass(\"easyui-fluid\")||_27){\n_1(_24);\n}\nreturn false;\n});\n};\nfunction _28(_29,pp,_2a){\nvar _2b=$.data(_29,\"accordion\").options;\npp.panel($.extend({},{collapsible:true,minimizable:false,maximizable:false,closable:false,doSize:false,collapsed:true,headerCls:\"accordion-header\",bodyCls:\"accordion-body\",halign:_2b.halign},_2a,{onBeforeExpand:function(){\nif(_2a.onBeforeExpand){\nif(_2a.onBeforeExpand.call(this)==false){\nreturn false;\n}\n}\nif(!_2b.multiple){\nvar all=$.grep(_15(_29),function(p){\nreturn p.panel(\"options\").collapsible;\n});\nfor(var i=0;i<all.length;i++){\n_34(_29,_19(_29,all[i]));\n}\n}\nvar _2c=$(this).panel(\"header\");\n_2c.addClass(\"accordion-header-selected\");\n_2c.find(\".accordion-collapse\").removeClass(\"accordion-expand\");\n},onExpand:function(){\n$(_29).find(\">.panel-last>.accordion-header\").removeClass(\"accordion-header-border\");\nif(_2a.onExpand){\n_2a.onExpand.call(this);\n}\n_2b.onSelect.call(_29,$(this).panel(\"options\").title,_19(_29,this));\n},onBeforeCollapse:function(){\nif(_2a.onBeforeCollapse){\nif(_2a.onBeforeCollapse.call(this)==false){\nreturn false;\n}\n}\n$(_29).find(\">.panel-last>.accordion-header\").addClass(\"accordion-header-border\");\nvar _2d=$(this).panel(\"header\");\n_2d.removeClass(\"accordion-header-selected\");\n_2d.find(\".accordion-collapse\").addClass(\"accordion-expand\");\n},onCollapse:function(){\nif(isNaN(parseInt(_2b.height))){\n$(_29).find(\">.panel-last>.accordion-header\").removeClass(\"accordion-header-border\");\n}\nif(_2a.onCollapse){\n_2a.onCollapse.call(this);\n}\n_2b.onUnselect.call(_29,$(this).panel(\"options\").title,_19(_29,this));\n}}));\nvar _2e=pp.panel(\"header\");\nvar _2f=_2e.children(\"div.panel-tool\");\n_2f.children(\"a.panel-tool-collapse\").hide();\nvar t=$(\"<a href=\\\"javascript:;\\\"></a>\").addClass(\"accordion-collapse accordion-expand\").appendTo(_2f);\nt._bind(\"click\",function(){\n_30(pp);\nreturn false;\n});\npp.panel(\"options\").collapsible?t.show():t.hide();\nif(_2b.halign==\"left\"||_2b.halign==\"right\"){\nt.hide();\n}\n_2e._bind(\"click\",function(){\n_30(pp);\nreturn false;\n});\nfunction _30(p){\nvar _31=p.panel(\"options\");\nif(_31.collapsible){\nvar _32=_19(_29,p);\nif(_31.collapsed){\n_33(_29,_32);\n}else{\n_34(_29,_32);\n}\n}\n};\n};\nfunction _33(_35,_36){\nvar p=_1c(_35,_36);\nif(!p){\nreturn;\n}\n_37(_35);\nvar _38=$.data(_35,\"accordion\").options;\np.panel(\"expand\",_38.animate);\n};\nfunction _34(_39,_3a){\nvar p=_1c(_39,_3a);\nif(!p){\nreturn;\n}\n_37(_39);\nvar _3b=$.data(_39,\"accordion\").options;\np.panel(\"collapse\",_3b.animate);\n};\nfunction _3c(_3d){\nvar _3e=$.data(_3d,\"accordion\").options;\n$(_3d).find(\">.panel-last>.accordion-header\").addClass(\"accordion-header-border\");\nvar p=_10(_3d,\"selected\",true);\nif(p){\n_3f(_19(_3d,p));\n}else{\n_3f(_3e.selected);\n}\nfunction _3f(_40){\nvar _41=_3e.animate;\n_3e.animate=false;\n_33(_3d,_40);\n_3e.animate=_41;\n};\n};\nfunction _37(_42){\nvar _43=$.data(_42,\"accordion\").panels;\nfor(var i=0;i<_43.length;i++){\n_43[i].stop(true,true);\n}\n};\nfunction add(_44,_45){\nvar _46=$.data(_44,\"accordion\");\nvar _47=_46.options;\nvar _48=_46.panels;\nif(_45.selected==undefined){\n_45.selected=true;\n}\n_37(_44);\nvar pp=$(\"<div></div>\").appendTo(_44);\n_48.push(pp);\n_28(_44,pp,_45);\n_1(_44);\n_47.onAdd.call(_44,_45.title,_48.length-1);\nif(_45.selected){\n_33(_44,_48.length-1);\n}\n};\nfunction _49(_4a,_4b){\nvar _4c=$.data(_4a,\"accordion\");\nvar _4d=_4c.options;\nvar _4e=_4c.panels;\n_37(_4a);\nvar _4f=_1c(_4a,_4b);\nvar _50=_4f.panel(\"options\").title;\nvar _51=_19(_4a,_4f);\nif(!_4f){\nreturn;\n}\nif(_4d.onBeforeRemove.call(_4a,_50,_51)==false){\nreturn;\n}\n_4e.splice(_51,1);\n_4f.panel(\"destroy\");\nif(_4e.length){\n_1(_4a);\nvar _52=_17(_4a);\nif(!_52){\n_33(_4a,0);\n}\n}\n_4d.onRemove.call(_4a,_50,_51);\n};\n$.fn.accordion=function(_53,_54){\nif(typeof _53==\"string\"){\nreturn $.fn.accordion.methods[_53](this,_54);\n}\n_53=_53||{};\nreturn this.each(function(){\nvar _55=$.data(this,\"accordion\");\nif(_55){\n$.extend(_55.options,_53);\n}else{\n$.data(this,\"accordion\",{options:$.extend({},$.fn.accordion.defaults,$.fn.accordion.parseOptions(this),_53),accordion:$(this).addClass(\"accordion\"),panels:[]});\n_23(this);\n}\n_20(this);\n_1(this);\n_3c(this);\n});\n};\n$.fn.accordion.methods={options:function(jq){\nreturn $.data(jq[0],\"accordion\").options;\n},panels:function(jq){\nreturn $.data(jq[0],\"accordion\").panels;\n},resize:function(jq,_56){\nreturn jq.each(function(){\n_1(this,_56);\n});\n},getSelections:function(jq){\nreturn _15(jq[0]);\n},getSelected:function(jq){\nreturn _17(jq[0]);\n},getPanel:function(jq,_57){\nreturn _1c(jq[0],_57);\n},getPanelIndex:function(jq,_58){\nreturn _19(jq[0],_58);\n},select:function(jq,_59){\nreturn jq.each(function(){\n_33(this,_59);\n});\n},unselect:function(jq,_5a){\nreturn jq.each(function(){\n_34(this,_5a);\n});\n},add:function(jq,_5b){\nreturn jq.each(function(){\nadd(this,_5b);\n});\n},remove:function(jq,_5c){\nreturn jq.each(function(){\n_49(this,_5c);\n});\n}};\n$.fn.accordion.parseOptions=function(_5d){\nvar t=$(_5d);\nreturn $.extend({},$.parser.parseOptions(_5d,[\"width\",\"height\",\"halign\",{fit:\"boolean\",border:\"boolean\",animate:\"boolean\",multiple:\"boolean\",selected:\"number\"}]));\n};\n$.fn.accordion.defaults={width:\"auto\",height:\"auto\",fit:false,border:true,animate:true,multiple:false,selected:0,halign:\"top\",onSelect:function(_5e,_5f){\n},onUnselect:function(_60,_61){\n},onAdd:function(_62,_63){\n},onBeforeRemove:function(_64,_65){\n},onRemove:function(_66,_67){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.calendar",
    "content": "/**\n * EasyUI for jQuery 1.7.6\n * \n * Copyright (c) 2009-2019 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.calendar.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2,_3){\nvar _4=$.data(_2,\"calendar\").options;\nvar t=$(_2);\nif(_3){\n$.extend(_4,{width:_3.width,height:_3.height});\n}\nt._size(_4,t.parent());\nt.find(\".calendar-body\")._outerHeight(t.height()-t.find(\".calendar-header\")._outerHeight());\nif(t.find(\".calendar-menu\").is(\":visible\")){\n_5(_2);\n}\n};\nfunction _6(_7){\n$(_7).addClass(\"calendar\").html(\"<div class=\\\"calendar-header\\\">\"+\"<div class=\\\"calendar-nav calendar-prevmonth\\\"></div>\"+\"<div class=\\\"calendar-nav calendar-nextmonth\\\"></div>\"+\"<div class=\\\"calendar-nav calendar-prevyear\\\"></div>\"+\"<div class=\\\"calendar-nav calendar-nextyear\\\"></div>\"+\"<div class=\\\"calendar-title\\\">\"+\"<span class=\\\"calendar-text\\\"></span>\"+\"</div>\"+\"</div>\"+\"<div class=\\\"calendar-body\\\">\"+\"<div class=\\\"calendar-menu\\\">\"+\"<div class=\\\"calendar-menu-year-inner\\\">\"+\"<span class=\\\"calendar-nav calendar-menu-prev\\\"></span>\"+\"<span><input class=\\\"calendar-menu-year\\\" type=\\\"text\\\"></input></span>\"+\"<span class=\\\"calendar-nav calendar-menu-next\\\"></span>\"+\"</div>\"+\"<div class=\\\"calendar-menu-month-inner\\\">\"+\"</div>\"+\"</div>\"+\"</div>\");\n$(_7)._bind(\"_resize\",function(e,_8){\nif($(this).hasClass(\"easyui-fluid\")||_8){\n_1(_7);\n}\nreturn false;\n});\n};\nfunction _9(_a){\nvar _b=$.data(_a,\"calendar\").options;\nvar _c=$(_a).find(\".calendar-menu\");\n_c.find(\".calendar-menu-year\")._unbind(\".calendar\")._bind(\"keypress.calendar\",function(e){\nif(e.keyCode==13){\n_d(true);\n}\n});\n$(_a)._unbind(\".calendar\")._bind(\"mouseover.calendar\",function(e){\nvar t=_e(e.target);\nif(t.hasClass(\"calendar-nav\")||t.hasClass(\"calendar-text\")||(t.hasClass(\"calendar-day\")&&!t.hasClass(\"calendar-disabled\"))){\nt.addClass(\"calendar-nav-hover\");\n}\n})._bind(\"mouseout.calendar\",function(e){\nvar t=_e(e.target);\nif(t.hasClass(\"calendar-nav\")||t.hasClass(\"calendar-text\")||(t.hasClass(\"calendar-day\")&&!t.hasClass(\"calendar-disabled\"))){\nt.removeClass(\"calendar-nav-hover\");\n}\n})._bind(\"click.calendar\",function(e){\nvar t=_e(e.target);\nif(t.hasClass(\"calendar-menu-next\")||t.hasClass(\"calendar-nextyear\")){\n_f(1);\n}else{\nif(t.hasClass(\"calendar-menu-prev\")||t.hasClass(\"calendar-prevyear\")){\n_f(-1);\n}else{\nif(t.hasClass(\"calendar-menu-month\")){\n_c.find(\".calendar-selected\").removeClass(\"calendar-selected\");\nt.addClass(\"calendar-selected\");\n_d(true);\n}else{\nif(t.hasClass(\"calendar-prevmonth\")){\n_10(-1);\n}else{\nif(t.hasClass(\"calendar-nextmonth\")){\n_10(1);\n}else{\nif(t.hasClass(\"calendar-text\")){\nif(_c.is(\":visible\")){\n_c.hide();\n}else{\n_5(_a);\n}\n}else{\nif(t.hasClass(\"calendar-day\")){\nif(t.hasClass(\"calendar-disabled\")){\nreturn;\n}\nvar _11=_b.current;\nt.closest(\"div.calendar-body\").find(\".calendar-selected\").removeClass(\"calendar-selected\");\nt.addClass(\"calendar-selected\");\nvar _12=t.attr(\"abbr\").split(\",\");\nvar y=parseInt(_12[0]);\nvar m=parseInt(_12[1]);\nvar d=parseInt(_12[2]);\n_b.current=new _b.Date(y,m-1,d);\n_b.onSelect.call(_a,_b.current);\nif(!_11||_11.getTime()!=_b.current.getTime()){\n_b.onChange.call(_a,_b.current,_11);\n}\nif(_b.year!=y||_b.month!=m){\n_b.year=y;\n_b.month=m;\n_19(_a);\n}\n}\n}\n}\n}\n}\n}\n}\n});\nfunction _e(t){\nvar day=$(t).closest(\".calendar-day\");\nif(day.length){\nreturn day;\n}else{\nreturn $(t);\n}\n};\nfunction _d(_13){\nvar _14=$(_a).find(\".calendar-menu\");\nvar _15=_14.find(\".calendar-menu-year\").val();\nvar _16=_14.find(\".calendar-selected\").attr(\"abbr\");\nif(!isNaN(_15)){\n_b.year=parseInt(_15);\n_b.month=parseInt(_16);\n_19(_a);\n}\nif(_13){\n_14.hide();\n}\n};\nfunction _f(_17){\n_b.year+=_17;\n_19(_a);\n_c.find(\".calendar-menu-year\").val(_b.year);\n};\nfunction _10(_18){\n_b.month+=_18;\nif(_b.month>12){\n_b.year++;\n_b.month=1;\n}else{\nif(_b.month<1){\n_b.year--;\n_b.month=12;\n}\n}\n_19(_a);\n_c.find(\"td.calendar-selected\").removeClass(\"calendar-selected\");\n_c.find(\"td:eq(\"+(_b.month-1)+\")\").addClass(\"calendar-selected\");\n};\n};\nfunction _5(_1a){\nvar _1b=$.data(_1a,\"calendar\").options;\n$(_1a).find(\".calendar-menu\").show();\nif($(_1a).find(\".calendar-menu-month-inner\").is(\":empty\")){\n$(_1a).find(\".calendar-menu-month-inner\").empty();\nvar t=$(\"<table class=\\\"calendar-mtable\\\"></table>\").appendTo($(_1a).find(\".calendar-menu-month-inner\"));\nvar idx=0;\nfor(var i=0;i<3;i++){\nvar tr=$(\"<tr></tr>\").appendTo(t);\nfor(var j=0;j<4;j++){\n$(\"<td class=\\\"calendar-nav calendar-menu-month\\\"></td>\").html(_1b.months[idx++]).attr(\"abbr\",idx).appendTo(tr);\n}\n}\n}\nvar _1c=$(_1a).find(\".calendar-body\");\nvar _1d=$(_1a).find(\".calendar-menu\");\nvar _1e=_1d.find(\".calendar-menu-year-inner\");\nvar _1f=_1d.find(\".calendar-menu-month-inner\");\n_1e.find(\"input\").val(_1b.year).focus();\n_1f.find(\"td.calendar-selected\").removeClass(\"calendar-selected\");\n_1f.find(\"td:eq(\"+(_1b.month-1)+\")\").addClass(\"calendar-selected\");\n_1d._outerWidth(_1c._outerWidth());\n_1d._outerHeight(_1c._outerHeight());\n_1f._outerHeight(_1d.height()-_1e._outerHeight());\n};\nfunction _20(_21,_22,_23){\nvar _24=$.data(_21,\"calendar\").options;\nvar _25=[];\nvar _26=new _24.Date(_22,_23,0).getDate();\nfor(var i=1;i<=_26;i++){\n_25.push([_22,_23,i]);\n}\nvar _27=[],_28=[];\nvar _29=-1;\nwhile(_25.length>0){\nvar _2a=_25.shift();\n_28.push(_2a);\nvar day=new _24.Date(_2a[0],_2a[1]-1,_2a[2]).getDay();\nif(_29==day){\nday=0;\n}else{\nif(day==(_24.firstDay==0?7:_24.firstDay)-1){\n_27.push(_28);\n_28=[];\n}\n}\n_29=day;\n}\nif(_28.length){\n_27.push(_28);\n}\nvar _2b=_27[0];\nif(_2b.length<7){\nwhile(_2b.length<7){\nvar _2c=_2b[0];\nvar _2a=new _24.Date(_2c[0],_2c[1]-1,_2c[2]-1);\n_2b.unshift([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);\n}\n}else{\nvar _2c=_2b[0];\nvar _28=[];\nfor(var i=1;i<=7;i++){\nvar _2a=new _24.Date(_2c[0],_2c[1]-1,_2c[2]-i);\n_28.unshift([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);\n}\n_27.unshift(_28);\n}\nvar _2d=_27[_27.length-1];\nwhile(_2d.length<7){\nvar _2e=_2d[_2d.length-1];\nvar _2a=new _24.Date(_2e[0],_2e[1]-1,_2e[2]+1);\n_2d.push([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);\n}\nif(_27.length<6){\nvar _2e=_2d[_2d.length-1];\nvar _28=[];\nfor(var i=1;i<=7;i++){\nvar _2a=new _24.Date(_2e[0],_2e[1]-1,_2e[2]+i);\n_28.push([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);\n}\n_27.push(_28);\n}\nreturn _27;\n};\nfunction _19(_2f){\nvar _30=$.data(_2f,\"calendar\").options;\nif(_30.current&&!_30.validator.call(_2f,_30.current)){\n_30.current=null;\n}\nvar now=new _30.Date();\nvar _31=now.getFullYear()+\",\"+(now.getMonth()+1)+\",\"+now.getDate();\nvar _32=_30.current?(_30.current.getFullYear()+\",\"+(_30.current.getMonth()+1)+\",\"+_30.current.getDate()):\"\";\nvar _33=6-_30.firstDay;\nvar _34=_33+1;\nif(_33>=7){\n_33-=7;\n}\nif(_34>=7){\n_34-=7;\n}\n$(_2f).find(\".calendar-title span\").html(_30.months[_30.month-1]+\" \"+_30.year);\nvar _35=$(_2f).find(\"div.calendar-body\");\n_35.children(\"table\").remove();\nvar _36=[\"<table class=\\\"calendar-dtable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\">\"];\n_36.push(\"<thead><tr>\");\nif(_30.showWeek){\n_36.push(\"<th class=\\\"calendar-week\\\">\"+_30.weekNumberHeader+\"</th>\");\n}\nfor(var i=_30.firstDay;i<_30.weeks.length;i++){\n_36.push(\"<th>\"+_30.weeks[i]+\"</th>\");\n}\nfor(var i=0;i<_30.firstDay;i++){\n_36.push(\"<th>\"+_30.weeks[i]+\"</th>\");\n}\n_36.push(\"</tr></thead>\");\n_36.push(\"<tbody>\");\nvar _37=_20(_2f,_30.year,_30.month);\nfor(var i=0;i<_37.length;i++){\nvar _38=_37[i];\nvar cls=\"\";\nif(i==0){\ncls=\"calendar-first\";\n}else{\nif(i==_37.length-1){\ncls=\"calendar-last\";\n}\n}\n_36.push(\"<tr class=\\\"\"+cls+\"\\\">\");\nif(_30.showWeek){\nvar _39=_30.getWeekNumber(new _30.Date(_38[0][0],parseInt(_38[0][1])-1,_38[0][2]));\n_36.push(\"<td class=\\\"calendar-week\\\">\"+_39+\"</td>\");\n}\nfor(var j=0;j<_38.length;j++){\nvar day=_38[j];\nvar s=day[0]+\",\"+day[1]+\",\"+day[2];\nvar _3a=new _30.Date(day[0],parseInt(day[1])-1,day[2]);\nvar d=_30.formatter.call(_2f,_3a);\nvar css=_30.styler.call(_2f,_3a);\nvar _3b=\"\";\nvar _3c=\"\";\nif(typeof css==\"string\"){\n_3c=css;\n}else{\nif(css){\n_3b=css[\"class\"]||\"\";\n_3c=css[\"style\"]||\"\";\n}\n}\nvar cls=\"calendar-day\";\nif(!(_30.year==day[0]&&_30.month==day[1])){\ncls+=\" calendar-other-month\";\n}\nif(s==_31){\ncls+=\" calendar-today\";\n}\nif(s==_32){\ncls+=\" calendar-selected\";\n}\nif(j==_33){\ncls+=\" calendar-saturday\";\n}else{\nif(j==_34){\ncls+=\" calendar-sunday\";\n}\n}\nif(j==0){\ncls+=\" calendar-first\";\n}else{\nif(j==_38.length-1){\ncls+=\" calendar-last\";\n}\n}\ncls+=\" \"+_3b;\nif(!_30.validator.call(_2f,_3a)){\ncls+=\" calendar-disabled\";\n}\n_36.push(\"<td class=\\\"\"+cls+\"\\\" abbr=\\\"\"+s+\"\\\" style=\\\"\"+_3c+\"\\\">\"+d+\"</td>\");\n}\n_36.push(\"</tr>\");\n}\n_36.push(\"</tbody>\");\n_36.push(\"</table>\");\n_35.append(_36.join(\"\"));\n_35.children(\"table.calendar-dtable\").prependTo(_35);\n_30.onNavigate.call(_2f,_30.year,_30.month);\n};\n$.fn.calendar=function(_3d,_3e){\nif(typeof _3d==\"string\"){\nreturn $.fn.calendar.methods[_3d](this,_3e);\n}\n_3d=_3d||{};\nreturn this.each(function(){\nvar _3f=$.data(this,\"calendar\");\nif(_3f){\n$.extend(_3f.options,_3d);\n}else{\n_3f=$.data(this,\"calendar\",{options:$.extend({},$.fn.calendar.defaults,$.fn.calendar.parseOptions(this),_3d)});\n_6(this);\n}\nif(_3f.options.border==false){\n$(this).addClass(\"calendar-noborder\");\n}\n_1(this);\n_9(this);\n_19(this);\n$(this).find(\"div.calendar-menu\").hide();\n});\n};\n$.fn.calendar.methods={options:function(jq){\nreturn $.data(jq[0],\"calendar\").options;\n},resize:function(jq,_40){\nreturn jq.each(function(){\n_1(this,_40);\n});\n},moveTo:function(jq,_41){\nreturn jq.each(function(){\nvar _42=$(this).calendar(\"options\");\nif(!_41){\nvar now=new _42.Date();\n$(this).calendar({year:now.getFullYear(),month:now.getMonth()+1,current:_41});\nreturn;\n}\nif(_42.validator.call(this,_41)){\nvar _43=_42.current;\n$(this).calendar({year:_41.getFullYear(),month:_41.getMonth()+1,current:_41});\nif(!_43||_43.getTime()!=_41.getTime()){\n_42.onChange.call(this,_42.current,_43);\n}\n}\n});\n}};\n$.fn.calendar.parseOptions=function(_44){\nvar t=$(_44);\nreturn $.extend({},$.parser.parseOptions(_44,[\"weekNumberHeader\",{firstDay:\"number\",fit:\"boolean\",border:\"boolean\",showWeek:\"boolean\"}]));\n};\n$.fn.calendar.defaults={Date:Date,width:180,height:180,fit:false,border:true,showWeek:false,firstDay:0,weeks:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],months:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],year:new Date().getFullYear(),month:new Date().getMonth()+1,current:(function(){\nvar d=new Date();\nreturn new Date(d.getFullYear(),d.getMonth(),d.getDate());\n})(),weekNumberHeader:\"\",getWeekNumber:function(_45){\nvar _46=new Date(_45.getTime());\n_46.setDate(_46.getDate()+4-(_46.getDay()||7));\nvar _47=_46.getTime();\n_46.setMonth(0);\n_46.setDate(1);\nreturn Math.floor(Math.round((_47-_46)/86400000)/7)+1;\n},formatter:function(_48){\nreturn _48.getDate();\n},styler:function(_49){\nreturn \"\";\n},validator:function(_4a){\nreturn true;\n},onSelect:function(_4b){\n},onChange:function(_4c,_4d){\n},onNavigate:function(_4e,_4f){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.checkbox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nvar _1=1;\nfunction _2(_3){\nvar _4=$(\"<span class=\\\"checkbox inputbox\\\">\"+\"<span class=\\\"checkbox-inner\\\">\"+\"<svg xml:space=\\\"preserve\\\" focusable=\\\"false\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4.1,12.7 9,17.6 20.3,6.3\\\" fill=\\\"none\\\" stroke=\\\"white\\\"></path></svg>\"+\"</span>\"+\"<input type=\\\"checkbox\\\" class=\\\"checkbox-value\\\">\"+\"</span>\").insertAfter(_3);\nvar t=$(_3);\nt.addClass(\"checkbox-f\").hide();\nvar _5=t.attr(\"name\");\nif(_5){\nt.removeAttr(\"name\").attr(\"checkboxName\",_5);\n_4.find(\".checkbox-value\").attr(\"name\",_5);\n}\nreturn _4;\n};\nfunction _6(_7){\nvar _8=$.data(_7,\"checkbox\");\nvar _9=_8.options;\nvar _a=_8.checkbox;\nvar _b=\"_easyui_checkbox_\"+(++_1);\nvar _c=_a.find(\".checkbox-value\").attr(\"id\",_b);\n_c._unbind(\".checkbox\")._bind(\"change.checkbox\",function(e){\nreturn false;\n});\nif(_9.label){\nif(typeof _9.label==\"object\"){\n_8.label=$(_9.label);\n_8.label.attr(\"for\",_b);\n}else{\n$(_8.label).remove();\n_8.label=$(\"<label class=\\\"textbox-label\\\"></label>\").html(_9.label);\n_8.label.css(\"textAlign\",_9.labelAlign).attr(\"for\",_b);\nif(_9.labelPosition==\"after\"){\n_8.label.insertAfter(_a);\n}else{\n_8.label.insertBefore(_7);\n}\n_8.label.removeClass(\"textbox-label-left textbox-label-right textbox-label-top\");\n_8.label.addClass(\"textbox-label-\"+_9.labelPosition);\n}\n}else{\n$(_8.label).remove();\n}\n$(_7).checkbox(\"setValue\",_9.value);\n_d(_7,_9.checked);\n_e(_7,_9.readonly);\n_f(_7,_9.disabled);\n};\nfunction _10(_11){\nvar _12=$.data(_11,\"checkbox\");\nvar _13=_12.options;\nvar _14=_12.checkbox;\n_14._unbind(\".checkbox\")._bind(\"click.checkbox\",function(){\nif(!_13.disabled&&!_13.readonly){\n_d(_11,!_13.checked);\n}\n});\n};\nfunction _15(_16){\nvar _17=$.data(_16,\"checkbox\");\nvar _18=_17.options;\nvar _19=_17.checkbox;\n_19._size(_18,_19.parent());\nif(_18.label&&_18.labelPosition){\nif(_18.labelPosition==\"top\"){\n_17.label._size({width:_18.labelWidth},_19);\n}else{\n_17.label._size({width:_18.labelWidth,height:_19.outerHeight()},_19);\n_17.label.css(\"lineHeight\",_19.outerHeight()+\"px\");\n}\n}\n};\nfunction _d(_1a,_1b){\nvar _1c=$.data(_1a,\"checkbox\");\nvar _1d=_1c.options;\nvar _1e=_1c.checkbox;\n_1e.find(\".checkbox-value\")._propAttr(\"checked\",_1b);\nvar _1f=_1e.find(\".checkbox-inner\").css(\"display\",_1b?\"\":\"none\");\nif(_1b){\n_1e.addClass(\"checkbox-checked\");\n$(_1c.label).addClass(\"textbox-label-checked\");\n}else{\n_1e.removeClass(\"checkbox-checked\");\n$(_1c.label).removeClass(\"textbox-label-checked\");\n}\nif(_1d.checked!=_1b){\n_1d.checked=_1b;\n_1d.onChange.call(_1a,_1b);\n$(_1a).closest(\"form\").trigger(\"_change\",[_1a]);\n}\n};\nfunction _e(_20,_21){\nvar _22=$.data(_20,\"checkbox\");\nvar _23=_22.options;\n_23.readonly=_21==undefined?true:_21;\nif(_23.readonly){\n_22.checkbox.addClass(\"checkbox-readonly\");\n$(_22.label).addClass(\"textbox-label-readonly\");\n}else{\n_22.checkbox.removeClass(\"checkbox-readonly\");\n$(_22.label).removeClass(\"textbox-label-readonly\");\n}\n};\nfunction _f(_24,_25){\nvar _26=$.data(_24,\"checkbox\");\nvar _27=_26.options;\nvar _28=_26.checkbox;\nvar rv=_28.find(\".checkbox-value\");\n_27.disabled=_25;\nif(_25){\n$(_24).add(rv)._propAttr(\"disabled\",true);\n_28.addClass(\"checkbox-disabled\");\n$(_26.label).addClass(\"textbox-label-disabled\");\n}else{\n$(_24).add(rv)._propAttr(\"disabled\",false);\n_28.removeClass(\"checkbox-disabled\");\n$(_26.label).removeClass(\"textbox-label-disabled\");\n}\n};\n$.fn.checkbox=function(_29,_2a){\nif(typeof _29==\"string\"){\nreturn $.fn.checkbox.methods[_29](this,_2a);\n}\n_29=_29||{};\nreturn this.each(function(){\nvar _2b=$.data(this,\"checkbox\");\nif(_2b){\n$.extend(_2b.options,_29);\n}else{\n_2b=$.data(this,\"checkbox\",{options:$.extend({},$.fn.checkbox.defaults,$.fn.checkbox.parseOptions(this),_29),checkbox:_2(this)});\n}\n_2b.options.originalChecked=_2b.options.checked;\n_6(this);\n_10(this);\n_15(this);\n});\n};\n$.fn.checkbox.methods={options:function(jq){\nvar _2c=jq.data(\"checkbox\");\nreturn $.extend(_2c.options,{value:_2c.checkbox.find(\".checkbox-value\").val()});\n},setValue:function(jq,_2d){\nreturn jq.each(function(){\n$(this).val(_2d);\n$.data(this,\"checkbox\").checkbox.find(\".checkbox-value\").val(_2d);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_f(this,false);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_f(this,true);\n});\n},readonly:function(jq,_2e){\nreturn jq.each(function(){\n_e(this,_2e);\n});\n},check:function(jq){\nreturn jq.each(function(){\n_d(this,true);\n});\n},uncheck:function(jq){\nreturn jq.each(function(){\n_d(this,false);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_d(this,false);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _2f=$(this).checkbox(\"options\");\n_d(this,_2f.originalChecked);\n});\n}};\n$.fn.checkbox.parseOptions=function(_30){\nvar t=$(_30);\nreturn $.extend({},$.parser.parseOptions(_30,[\"label\",\"labelPosition\",\"labelAlign\",{labelWidth:\"number\"}]),{value:(t.val()||undefined),checked:(t.attr(\"checked\")?true:undefined),disabled:(t.attr(\"disabled\")?true:undefined),readonly:(t.attr(\"readonly\")?true:undefined)});\n};\n$.fn.checkbox.defaults={width:20,height:20,value:null,disabled:false,readonly:false,checked:false,label:null,labelWidth:\"auto\",labelPosition:\"before\",labelAlign:\"left\",onChange:function(_31){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.combo.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\n$(function(){\n$(document)._unbind(\".combo\")._bind(\"mousedown.combo mousewheel.combo\",function(e){\nvar p=$(e.target).closest(\"span.combo,div.combo-p,div.menu\");\nif(p.length){\n_1(p);\nreturn;\n}\n$(\"body>div.combo-p>div.combo-panel:visible\").panel(\"close\");\n});\n});\nfunction _2(_3){\nvar _4=$.data(_3,\"combo\");\nvar _5=_4.options;\nif(!_4.panel){\n_4.panel=$(\"<div class=\\\"combo-panel\\\"></div>\").appendTo(\"html>body\");\n_4.panel.panel({minWidth:_5.panelMinWidth,maxWidth:_5.panelMaxWidth,minHeight:_5.panelMinHeight,maxHeight:_5.panelMaxHeight,doSize:false,closed:true,cls:\"combo-p\",style:{position:\"absolute\",zIndex:10},onOpen:function(){\nvar _6=$(this).panel(\"options\").comboTarget;\nvar _7=$.data(_6,\"combo\");\nif(_7){\n_7.options.onShowPanel.call(_6);\n}\n},onBeforeClose:function(){\n_1($(this).parent());\n},onClose:function(){\nvar _8=$(this).panel(\"options\").comboTarget;\nvar _9=$(_8).data(\"combo\");\nif(_9){\n_9.options.onHidePanel.call(_8);\n}\n}});\n}\nvar _a=$.extend(true,[],_5.icons);\nif(_5.hasDownArrow){\n_a.push({iconCls:\"combo-arrow\",handler:function(e){\n_10(e.data.target);\n}});\n}\n$(_3).addClass(\"combo-f\").textbox($.extend({},_5,{icons:_a,onChange:function(){\n}}));\n$(_3).attr(\"comboName\",$(_3).attr(\"textboxName\"));\n_4.combo=$(_3).next();\n_4.combo.addClass(\"combo\");\n_4.panel._unbind(\".combo\");\nfor(var _b in _5.panelEvents){\n_4.panel._bind(_b+\".combo\",{target:_3},_5.panelEvents[_b]);\n}\n};\nfunction _c(_d){\nvar _e=$.data(_d,\"combo\");\nvar _f=_e.options;\nvar p=_e.panel;\nif(p.is(\":visible\")){\np.panel(\"close\");\n}\nif(!_f.cloned){\np.panel(\"destroy\");\n}\n$(_d).textbox(\"destroy\");\n};\nfunction _10(_11){\nvar _12=$.data(_11,\"combo\").panel;\nif(_12.is(\":visible\")){\nvar _13=_12.combo(\"combo\");\n_14(_13);\nif(_13!=_11){\n$(_11).combo(\"showPanel\");\n}\n}else{\nvar p=$(_11).closest(\"div.combo-p\").children(\".combo-panel\");\n$(\"div.combo-panel:visible\").not(_12).not(p).panel(\"close\");\n$(_11).combo(\"showPanel\");\n}\n$(_11).combo(\"textbox\").focus();\n};\nfunction _1(_15){\n$(_15).find(\".combo-f\").each(function(){\nvar p=$(this).combo(\"panel\");\nif(p.is(\":visible\")){\np.panel(\"close\");\n}\n});\n};\nfunction _16(e){\nvar _17=e.data.target;\nvar _18=$.data(_17,\"combo\");\nvar _19=_18.options;\nif(!_19.editable){\n_10(_17);\n}else{\nvar p=$(_17).closest(\"div.combo-p\").children(\".combo-panel\");\n$(\"div.combo-panel:visible\").not(p).each(function(){\nvar _1a=$(this).combo(\"combo\");\nif(_1a!=_17){\n_14(_1a);\n}\n});\n}\n};\nfunction _1b(e){\nvar _1c=e.data.target;\nvar t=$(_1c);\nvar _1d=t.data(\"combo\");\nvar _1e=t.combo(\"options\");\n_1d.panel.panel(\"options\").comboTarget=_1c;\nswitch(e.keyCode){\ncase 38:\n_1e.keyHandler.up.call(_1c,e);\nbreak;\ncase 40:\n_1e.keyHandler.down.call(_1c,e);\nbreak;\ncase 37:\n_1e.keyHandler.left.call(_1c,e);\nbreak;\ncase 39:\n_1e.keyHandler.right.call(_1c,e);\nbreak;\ncase 13:\ne.preventDefault();\n_1e.keyHandler.enter.call(_1c,e);\nreturn false;\ncase 9:\ncase 27:\n_14(_1c);\nbreak;\ndefault:\nif(_1e.editable){\nif(_1d.timer){\nclearTimeout(_1d.timer);\n}\n_1d.timer=setTimeout(function(){\nvar q=t.combo(\"getText\");\nif(_1d.previousText!=q){\n_1d.previousText=q;\nt.combo(\"showPanel\");\n_1e.keyHandler.query.call(_1c,q,e);\nt.combo(\"validate\");\n}\n},_1e.delay);\n}\n}\n};\nfunction _1f(e){\nvar _20=e.data.target;\nvar _21=$(_20).data(\"combo\");\nif(_21.timer){\nclearTimeout(_21.timer);\n}\n};\nfunction _22(_23){\nvar _24=$.data(_23,\"combo\");\nvar _25=_24.combo;\nvar _26=_24.panel;\nvar _27=$(_23).combo(\"options\");\nvar _28=_26.panel(\"options\");\n_28.comboTarget=_23;\nif(_28.closed){\n_26.panel(\"panel\").show().css({zIndex:($.fn.menu?$.fn.menu.defaults.zIndex++:($.fn.window?$.fn.window.defaults.zIndex++:99)),left:-999999});\n_26.panel(\"resize\",{width:(_27.panelWidth?_27.panelWidth:_25._outerWidth()),height:_27.panelHeight});\n_26.panel(\"panel\").hide();\n_26.panel(\"open\");\n}\n(function(){\nif(_28.comboTarget==_23&&_26.is(\":visible\")){\n_26.panel(\"move\",{left:_29(),top:_2a()});\nsetTimeout(arguments.callee,200);\n}\n})();\nfunction _29(){\nvar _2b=_25.offset().left;\nif(_27.panelAlign==\"right\"){\n_2b+=_25._outerWidth()-_26._outerWidth();\n}\nif(_2b+_26._outerWidth()>$(window)._outerWidth()+$(document).scrollLeft()){\n_2b=$(window)._outerWidth()+$(document).scrollLeft()-_26._outerWidth();\n}\nif(_2b<0){\n_2b=0;\n}\nreturn _2b;\n};\nfunction _2a(){\nif(_27.panelValign==\"top\"){\nvar top=_25.offset().top-_26._outerHeight();\n}else{\nif(_27.panelValign==\"bottom\"){\nvar top=_25.offset().top+_25._outerHeight();\n}else{\nvar top=_25.offset().top+_25._outerHeight();\nif(top+_26._outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){\ntop=_25.offset().top-_26._outerHeight();\n}\nif(top<$(document).scrollTop()){\ntop=_25.offset().top+_25._outerHeight();\n}\n}\n}\nreturn top;\n};\n};\nfunction _14(_2c){\nvar _2d=$.data(_2c,\"combo\").panel;\n_2d.panel(\"close\");\n};\nfunction _2e(_2f,_30){\nvar _31=$.data(_2f,\"combo\");\nvar _32=$(_2f).textbox(\"getText\");\nif(_32!=_30){\n$(_2f).textbox(\"setText\",_30);\n}\n_31.previousText=_30;\n};\nfunction _33(_34){\nvar _35=$.data(_34,\"combo\");\nvar _36=_35.options;\nvar _37=$(_34).next();\nvar _38=[];\n_37.find(\".textbox-value\").each(function(){\n_38.push($(this).val());\n});\nif(_36.multivalue){\nreturn _38;\n}else{\nreturn _38.length?_38[0].split(_36.separator):_38;\n}\n};\nfunction _39(_3a,_3b){\nvar _3c=$.data(_3a,\"combo\");\nvar _3d=_3c.combo;\nvar _3e=$(_3a).combo(\"options\");\nif(!$.isArray(_3b)){\n_3b=_3b.split(_3e.separator);\n}\nvar _3f=_33(_3a);\n_3d.find(\".textbox-value\").remove();\nif(_3b.length){\nif(_3e.multivalue){\nfor(var i=0;i<_3b.length;i++){\n_40(_3b[i]);\n}\n}else{\n_40(_3b.join(_3e.separator));\n}\n}\nfunction _40(_41){\nvar _42=$(_3a).attr(\"textboxName\")||\"\";\nvar _43=$(\"<input type=\\\"hidden\\\" class=\\\"textbox-value\\\">\").appendTo(_3d);\n_43.attr(\"name\",_42);\nif(_3e.disabled){\n_43.attr(\"disabled\",\"disabled\");\n}\n_43.val(_41);\n};\nvar _44=(function(){\nif(_3e.onChange==$.parser.emptyFn){\nreturn false;\n}\nif(_3f.length!=_3b.length){\nreturn true;\n}\nfor(var i=0;i<_3b.length;i++){\nif(_3b[i]!=_3f[i]){\nreturn true;\n}\n}\nreturn false;\n})();\nif(_44){\n$(_3a).val(_3b.join(_3e.separator));\nif(_3e.multiple){\n_3e.onChange.call(_3a,_3b,_3f);\n}else{\n_3e.onChange.call(_3a,_3b[0],_3f[0]);\n}\n$(_3a).closest(\"form\").trigger(\"_change\",[_3a]);\n}\n};\nfunction _45(_46){\nvar _47=_33(_46);\nreturn _47[0];\n};\nfunction _48(_49,_4a){\n_39(_49,[_4a]);\n};\nfunction _4b(_4c){\nvar _4d=$.data(_4c,\"combo\").options;\nvar _4e=_4d.onChange;\n_4d.onChange=$.parser.emptyFn;\nif(_4d.multiple){\n_39(_4c,_4d.value?_4d.value:[]);\n}else{\n_48(_4c,_4d.value);\n}\n_4d.onChange=_4e;\n};\n$.fn.combo=function(_4f,_50){\nif(typeof _4f==\"string\"){\nvar _51=$.fn.combo.methods[_4f];\nif(_51){\nreturn _51(this,_50);\n}else{\nreturn this.textbox(_4f,_50);\n}\n}\n_4f=_4f||{};\nreturn this.each(function(){\nvar _52=$.data(this,\"combo\");\nif(_52){\n$.extend(_52.options,_4f);\nif(_4f.value!=undefined){\n_52.options.originalValue=_4f.value;\n}\n}else{\n_52=$.data(this,\"combo\",{options:$.extend({},$.fn.combo.defaults,$.fn.combo.parseOptions(this),_4f),previousText:\"\"});\nif(_52.options.multiple&&_52.options.value==\"\"){\n_52.options.originalValue=[];\n}else{\n_52.options.originalValue=_52.options.value;\n}\n}\n_2(this);\n_4b(this);\n});\n};\n$.fn.combo.methods={options:function(jq){\nvar _53=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"combo\").options,{width:_53.width,height:_53.height,disabled:_53.disabled,readonly:_53.readonly});\n},cloneFrom:function(jq,_54){\nreturn jq.each(function(){\n$(this).textbox(\"cloneFrom\",_54);\n$.data(this,\"combo\",{options:$.extend(true,{cloned:true},$(_54).combo(\"options\")),combo:$(this).next(),panel:$(_54).combo(\"panel\")});\n$(this).addClass(\"combo-f\").attr(\"comboName\",$(this).attr(\"textboxName\"));\n});\n},combo:function(jq){\nreturn jq.closest(\".combo-panel\").panel(\"options\").comboTarget;\n},panel:function(jq){\nreturn $.data(jq[0],\"combo\").panel;\n},destroy:function(jq){\nreturn jq.each(function(){\n_c(this);\n});\n},showPanel:function(jq){\nreturn jq.each(function(){\n_22(this);\n});\n},hidePanel:function(jq){\nreturn jq.each(function(){\n_14(this);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"setText\",\"\");\nvar _55=$.data(this,\"combo\").options;\nif(_55.multiple){\n$(this).combo(\"setValues\",[]);\n}else{\n$(this).combo(\"setValue\",\"\");\n}\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _56=$.data(this,\"combo\").options;\nif(_56.multiple){\n$(this).combo(\"setValues\",_56.originalValue);\n}else{\n$(this).combo(\"setValue\",_56.originalValue);\n}\n});\n},setText:function(jq,_57){\nreturn jq.each(function(){\n_2e(this,_57);\n});\n},getValues:function(jq){\nreturn _33(jq[0]);\n},setValues:function(jq,_58){\nreturn jq.each(function(){\n_39(this,_58);\n});\n},getValue:function(jq){\nreturn _45(jq[0]);\n},setValue:function(jq,_59){\nreturn jq.each(function(){\n_48(this,_59);\n});\n}};\n$.fn.combo.parseOptions=function(_5a){\nvar t=$(_5a);\nreturn $.extend({},$.fn.textbox.parseOptions(_5a),$.parser.parseOptions(_5a,[\"separator\",\"panelAlign\",{panelWidth:\"number\",hasDownArrow:\"boolean\",delay:\"number\",reversed:\"boolean\",multivalue:\"boolean\",selectOnNavigation:\"boolean\"},{panelMinWidth:\"number\",panelMaxWidth:\"number\",panelMinHeight:\"number\",panelMaxHeight:\"number\"}]),{panelHeight:(t.attr(\"panelHeight\")==\"auto\"?\"auto\":parseInt(t.attr(\"panelHeight\"))||undefined),multiple:(t.attr(\"multiple\")?true:undefined)});\n};\n$.fn.combo.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{click:_16,keydown:_1b,paste:_1b,drop:_1b,blur:_1f},panelEvents:{mousedown:function(e){\ne.preventDefault();\ne.stopPropagation();\n}},panelWidth:null,panelHeight:300,panelMinWidth:null,panelMaxWidth:null,panelMinHeight:null,panelMaxHeight:null,panelAlign:\"left\",panelValign:\"auto\",reversed:false,multiple:false,multivalue:true,selectOnNavigation:true,separator:\",\",hasDownArrow:true,delay:200,keyHandler:{up:function(e){\n},down:function(e){\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n},query:function(q,e){\n}},onShowPanel:function(){\n},onHidePanel:function(){\n},onChange:function(_5b,_5c){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.combobox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2,_3){\nvar _4=$.data(_2,\"combobox\");\nreturn $.easyui.indexOfArray(_4.data,_4.options.valueField,_3);\n};\nfunction _5(_6,_7){\nvar _8=$.data(_6,\"combobox\").options;\nvar _9=$(_6).combo(\"panel\");\nvar _a=_8.finder.getEl(_6,_7);\nif(_a.length){\nif(_a.position().top<=0){\nvar h=_9.scrollTop()+_a.position().top;\n_9.scrollTop(h);\n}else{\nif(_a.position().top+_a.outerHeight()>_9.height()){\nvar h=_9.scrollTop()+_a.position().top+_a.outerHeight()-_9.height();\n_9.scrollTop(h);\n}\n}\n}\n_9.triggerHandler(\"scroll\");\n};\nfunction _b(_c,_d){\nvar _e=$.data(_c,\"combobox\").options;\nvar _f=$(_c).combobox(\"panel\");\nvar _10=_f.children(\"div.combobox-item-hover\");\nif(!_10.length){\n_10=_f.children(\"div.combobox-item-selected\");\n}\n_10.removeClass(\"combobox-item-hover\");\nvar _11=\"div.combobox-item:visible:not(.combobox-item-disabled):first\";\nvar _12=\"div.combobox-item:visible:not(.combobox-item-disabled):last\";\nif(!_10.length){\n_10=_f.children(_d==\"next\"?_11:_12);\n}else{\nif(_d==\"next\"){\n_10=_10.nextAll(_11);\nif(!_10.length){\n_10=_f.children(_11);\n}\n}else{\n_10=_10.prevAll(_11);\nif(!_10.length){\n_10=_f.children(_12);\n}\n}\n}\nif(_10.length){\n_10.addClass(\"combobox-item-hover\");\nvar row=_e.finder.getRow(_c,_10);\nif(row){\n$(_c).combobox(\"scrollTo\",row[_e.valueField]);\nif(_e.selectOnNavigation){\n_13(_c,row[_e.valueField]);\n}\n}\n}\n};\nfunction _13(_14,_15,_16){\nvar _17=$.data(_14,\"combobox\").options;\nvar _18=$(_14).combo(\"getValues\");\nif($.inArray(_15+\"\",_18)==-1){\nif(_17.multiple){\n_18.push(_15);\n}else{\n_18=[_15];\n}\n_19(_14,_18,_16);\n}\n};\nfunction _1a(_1b,_1c){\nvar _1d=$.data(_1b,\"combobox\").options;\nvar _1e=$(_1b).combo(\"getValues\");\nvar _1f=$.inArray(_1c+\"\",_1e);\nif(_1f>=0){\n_1e.splice(_1f,1);\n_19(_1b,_1e);\n}\n};\nfunction _19(_20,_21,_22){\nvar _23=$.data(_20,\"combobox\").options;\nvar _24=$(_20).combo(\"panel\");\nif(!$.isArray(_21)){\n_21=_21.split(_23.separator);\n}\nif(!_23.multiple){\n_21=_21.length?[_21[0]]:[\"\"];\n}\nvar _25=$(_20).combo(\"getValues\");\nif(_24.is(\":visible\")){\n_24.find(\".combobox-item-selected\").each(function(){\nvar row=_23.finder.getRow(_20,$(this));\nif(row){\nif($.easyui.indexOfArray(_25,row[_23.valueField])==-1){\n$(this).removeClass(\"combobox-item-selected\");\n}\n}\n});\n}\n$.map(_25,function(v){\nif($.easyui.indexOfArray(_21,v)==-1){\nvar el=_23.finder.getEl(_20,v);\nif(el.hasClass(\"combobox-item-selected\")){\nel.removeClass(\"combobox-item-selected\");\n_23.onUnselect.call(_20,_23.finder.getRow(_20,v));\n}\n}\n});\nvar _26=null;\nvar vv=[],ss=[];\nfor(var i=0;i<_21.length;i++){\nvar v=_21[i];\nvar s=v;\nvar row=_23.finder.getRow(_20,v);\nif(row){\ns=row[_23.textField];\n_26=row;\nvar el=_23.finder.getEl(_20,v);\nif(!el.hasClass(\"combobox-item-selected\")){\nel.addClass(\"combobox-item-selected\");\n_23.onSelect.call(_20,row);\n}\n}else{\ns=_27(v,_23.mappingRows)||v;\n}\nvv.push(v);\nss.push(s);\n}\nif(!_22){\n$(_20).combo(\"setText\",ss.join(_23.separator));\n}\nif(_23.showItemIcon){\nvar tb=$(_20).combobox(\"textbox\");\ntb.removeClass(\"textbox-bgicon \"+_23.textboxIconCls);\nif(_26&&_26.iconCls){\ntb.addClass(\"textbox-bgicon \"+_26.iconCls);\n_23.textboxIconCls=_26.iconCls;\n}\n}\n$(_20).combo(\"setValues\",vv);\n_24.triggerHandler(\"scroll\");\nfunction _27(_28,a){\nvar _29=$.easyui.getArrayItem(a,_23.valueField,_28);\nreturn _29?_29[_23.textField]:undefined;\n};\n};\nfunction _2a(_2b,_2c,_2d){\nvar _2e=$.data(_2b,\"combobox\");\nvar _2f=_2e.options;\n_2e.data=_2f.loadFilter.call(_2b,_2c);\n_2f.view.render.call(_2f.view,_2b,$(_2b).combo(\"panel\"),_2e.data);\nvar vv=$(_2b).combobox(\"getValues\");\n$.easyui.forEach(_2e.data,false,function(row){\nif(row[\"selected\"]){\n$.easyui.addArrayItem(vv,row[_2f.valueField]+\"\");\n}\n});\nif(_2f.multiple){\n_19(_2b,vv,_2d);\n}else{\n_19(_2b,vv.length?[vv[vv.length-1]]:[],_2d);\n}\n_2f.onLoadSuccess.call(_2b,_2c);\n};\nfunction _30(_31,url,_32,_33){\nvar _34=$.data(_31,\"combobox\").options;\nif(url){\n_34.url=url;\n}\n_32=$.extend({},_34.queryParams,_32||{});\nif(_34.onBeforeLoad.call(_31,_32)==false){\nreturn;\n}\n_34.loader.call(_31,_32,function(_35){\n_2a(_31,_35,_33);\n},function(){\n_34.onLoadError.apply(this,arguments);\n});\n};\nfunction _36(_37,q){\nvar _38=$.data(_37,\"combobox\");\nvar _39=_38.options;\nvar _3a=$();\nvar qq=_39.multiple?q.split(_39.separator):[q];\nif(_39.mode==\"remote\"){\n_3b(qq);\n_30(_37,null,{q:q},true);\n}else{\nvar _3c=$(_37).combo(\"panel\");\n_3c.find(\".combobox-item-hover\").removeClass(\"combobox-item-hover\");\n_3c.find(\".combobox-item,.combobox-group\").hide();\nvar _3d=_38.data;\nvar vv=[];\n$.map(qq,function(q){\nq=$.trim(q);\nvar _3e=q;\nvar _3f=undefined;\n_3a=$();\nfor(var i=0;i<_3d.length;i++){\nvar row=_3d[i];\nif(_39.filter.call(_37,q,row)){\nvar v=row[_39.valueField];\nvar s=row[_39.textField];\nvar g=row[_39.groupField];\nvar _40=_39.finder.getEl(_37,v).show();\nif(s.toLowerCase()==q.toLowerCase()){\n_3e=v;\nif(_39.reversed){\n_3a=_40;\n}else{\n_13(_37,v,true);\n}\n}\nif(_39.groupField&&_3f!=g){\n_39.finder.getGroupEl(_37,g).show();\n_3f=g;\n}\n}\n}\nvv.push(_3e);\n});\n_3b(vv);\n}\nfunction _3b(vv){\nif(_39.reversed){\n_3a.addClass(\"combobox-item-hover\");\n}else{\n_19(_37,_39.multiple?(q?vv:[]):vv,true);\n}\n};\n};\nfunction _41(_42){\nvar t=$(_42);\nvar _43=t.combobox(\"options\");\nvar _44=t.combobox(\"panel\");\nvar _45=_44.children(\"div.combobox-item-hover\");\nif(_45.length){\n_45.removeClass(\"combobox-item-hover\");\nvar row=_43.finder.getRow(_42,_45);\nvar _46=row[_43.valueField];\nif(_43.multiple){\nif(_45.hasClass(\"combobox-item-selected\")){\nt.combobox(\"unselect\",_46);\n}else{\nt.combobox(\"select\",_46);\n}\n}else{\nt.combobox(\"select\",_46);\n}\n}\nvar vv=[];\n$.map(t.combobox(\"getValues\"),function(v){\nif(_1(_42,v)>=0){\nvv.push(v);\n}\n});\nt.combobox(\"setValues\",vv);\nif(!_43.multiple){\nt.combobox(\"hidePanel\");\n}\n};\nfunction _47(_48){\nvar _49=$.data(_48,\"combobox\");\nvar _4a=_49.options;\n$(_48).addClass(\"combobox-f\");\n$(_48).combo($.extend({},_4a,{onShowPanel:function(){\n$(this).combo(\"panel\").find(\"div.combobox-item:hidden,div.combobox-group:hidden\").show();\n_19(this,$(this).combobox(\"getValues\"),true);\n$(this).combobox(\"scrollTo\",$(this).combobox(\"getValue\"));\n_4a.onShowPanel.call(this);\n}}));\n};\nfunction _4b(e){\n$(this).children(\"div.combobox-item-hover\").removeClass(\"combobox-item-hover\");\nvar _4c=$(e.target).closest(\"div.combobox-item\");\nif(!_4c.hasClass(\"combobox-item-disabled\")){\n_4c.addClass(\"combobox-item-hover\");\n}\ne.stopPropagation();\n};\nfunction _4d(e){\n$(e.target).closest(\"div.combobox-item\").removeClass(\"combobox-item-hover\");\ne.stopPropagation();\n};\nfunction _4e(e){\nvar _4f=$(this).panel(\"options\").comboTarget;\nif(!_4f){\nreturn;\n}\nvar _50=$(_4f).combobox(\"options\");\nvar _51=$(e.target).closest(\"div.combobox-item\");\nif(!_51.length||_51.hasClass(\"combobox-item-disabled\")){\nreturn;\n}\nvar row=_50.finder.getRow(_4f,_51);\nif(!row){\nreturn;\n}\nif(_50.blurTimer){\nclearTimeout(_50.blurTimer);\n_50.blurTimer=null;\n}\n_50.onClick.call(_4f,row);\nvar _52=row[_50.valueField];\nif(_50.multiple){\nif(_51.hasClass(\"combobox-item-selected\")){\n_1a(_4f,_52);\n}else{\n_13(_4f,_52);\n}\n}else{\n$(_4f).combobox(\"setValue\",_52).combobox(\"hidePanel\");\n}\ne.stopPropagation();\n};\nfunction _53(e){\nvar _54=$(this).panel(\"options\").comboTarget;\nif(!_54){\nreturn;\n}\nvar _55=$(_54).combobox(\"options\");\nif(_55.groupPosition==\"sticky\"){\nvar _56=$(this).children(\".combobox-stick\");\nif(!_56.length){\n_56=$(\"<div class=\\\"combobox-stick\\\"></div>\").appendTo(this);\n}\n_56.hide();\nvar _57=$(_54).data(\"combobox\");\n$(this).children(\".combobox-group:visible\").each(function(){\nvar g=$(this);\nvar _58=_55.finder.getGroup(_54,g);\nvar _59=_57.data[_58.startIndex+_58.count-1];\nvar _5a=_55.finder.getEl(_54,_59[_55.valueField]);\nif(g.position().top<0&&_5a.position().top>0){\n_56.show().html(g.html());\nreturn false;\n}\n});\n}\n};\n$.fn.combobox=function(_5b,_5c){\nif(typeof _5b==\"string\"){\nvar _5d=$.fn.combobox.methods[_5b];\nif(_5d){\nreturn _5d(this,_5c);\n}else{\nreturn this.combo(_5b,_5c);\n}\n}\n_5b=_5b||{};\nreturn this.each(function(){\nvar _5e=$.data(this,\"combobox\");\nif(_5e){\n$.extend(_5e.options,_5b);\n}else{\n_5e=$.data(this,\"combobox\",{options:$.extend({},$.fn.combobox.defaults,$.fn.combobox.parseOptions(this),_5b),data:[]});\n}\n_47(this);\nif(_5e.options.data){\n_2a(this,_5e.options.data);\n}else{\nvar _5f=$.fn.combobox.parseData(this);\nif(_5f.length){\n_2a(this,_5f);\n}\n}\n_30(this);\n});\n};\n$.fn.combobox.methods={options:function(jq){\nvar _60=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"combobox\").options,{width:_60.width,height:_60.height,originalValue:_60.originalValue,disabled:_60.disabled,readonly:_60.readonly});\n},cloneFrom:function(jq,_61){\nreturn jq.each(function(){\n$(this).combo(\"cloneFrom\",_61);\n$.data(this,\"combobox\",$(_61).data(\"combobox\"));\n$(this).addClass(\"combobox-f\").attr(\"comboboxName\",$(this).attr(\"textboxName\"));\n});\n},getData:function(jq){\nreturn $.data(jq[0],\"combobox\").data;\n},setValues:function(jq,_62){\nreturn jq.each(function(){\nvar _63=$(this).combobox(\"options\");\nif($.isArray(_62)){\n_62=$.map(_62,function(_64){\nif(_64&&typeof _64==\"object\"){\n$.easyui.addArrayItem(_63.mappingRows,_63.valueField,_64);\nreturn _64[_63.valueField];\n}else{\nreturn _64;\n}\n});\n}\n_19(this,_62);\n});\n},setValue:function(jq,_65){\nreturn jq.each(function(){\n$(this).combobox(\"setValues\",$.isArray(_65)?_65:[_65]);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_19(this,[]);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _66=$(this).combobox(\"options\");\nif(_66.multiple){\n$(this).combobox(\"setValues\",_66.originalValue);\n}else{\n$(this).combobox(\"setValue\",_66.originalValue);\n}\n});\n},loadData:function(jq,_67){\nreturn jq.each(function(){\n_2a(this,_67);\n});\n},reload:function(jq,url){\nreturn jq.each(function(){\nif(typeof url==\"string\"){\n_30(this,url);\n}else{\nif(url){\nvar _68=$(this).combobox(\"options\");\n_68.queryParams=url;\n}\n_30(this);\n}\n});\n},select:function(jq,_69){\nreturn jq.each(function(){\n_13(this,_69);\n});\n},unselect:function(jq,_6a){\nreturn jq.each(function(){\n_1a(this,_6a);\n});\n},scrollTo:function(jq,_6b){\nreturn jq.each(function(){\n_5(this,_6b);\n});\n}};\n$.fn.combobox.parseOptions=function(_6c){\nvar t=$(_6c);\nreturn $.extend({},$.fn.combo.parseOptions(_6c),$.parser.parseOptions(_6c,[\"valueField\",\"textField\",\"groupField\",\"groupPosition\",\"mode\",\"method\",\"url\",{showItemIcon:\"boolean\",limitToList:\"boolean\"}]));\n};\n$.fn.combobox.parseData=function(_6d){\nvar _6e=[];\nvar _6f=$(_6d).combobox(\"options\");\n$(_6d).children().each(function(){\nif(this.tagName.toLowerCase()==\"optgroup\"){\nvar _70=$(this).attr(\"label\");\n$(this).children().each(function(){\n_71(this,_70);\n});\n}else{\n_71(this);\n}\n});\nreturn _6e;\nfunction _71(el,_72){\nvar t=$(el);\nvar row={};\nrow[_6f.valueField]=t.attr(\"value\")!=undefined?t.attr(\"value\"):t.text();\nrow[_6f.textField]=t.text();\nrow[\"iconCls\"]=$.parser.parseOptions(el,[\"iconCls\"]).iconCls;\nrow[\"selected\"]=t.is(\":selected\");\nrow[\"disabled\"]=t.is(\":disabled\");\nif(_72){\n_6f.groupField=_6f.groupField||\"group\";\nrow[_6f.groupField]=_72;\n}\n_6e.push(row);\n};\n};\nvar _73=0;\nvar _74={render:function(_75,_76,_77){\nvar _78=$.data(_75,\"combobox\");\nvar _79=_78.options;\nvar _7a=$(_75).attr(\"id\")||\"\";\n_73++;\n_78.itemIdPrefix=_7a+\"_easyui_combobox_i\"+_73;\n_78.groupIdPrefix=_7a+\"_easyui_combobox_g\"+_73;\n_78.groups=[];\nvar dd=[];\nvar _7b=undefined;\nfor(var i=0;i<_77.length;i++){\nvar row=_77[i];\nvar v=row[_79.valueField]+\"\";\nvar s=row[_79.textField];\nvar g=row[_79.groupField];\nif(g){\nif(_7b!=g){\n_7b=g;\n_78.groups.push({value:g,startIndex:i,count:1});\ndd.push(\"<div id=\\\"\"+(_78.groupIdPrefix+\"_\"+(_78.groups.length-1))+\"\\\" class=\\\"combobox-group\\\">\");\ndd.push(_79.groupFormatter?_79.groupFormatter.call(_75,g):g);\ndd.push(\"</div>\");\n}else{\n_78.groups[_78.groups.length-1].count++;\n}\n}else{\n_7b=undefined;\n}\nvar cls=\"combobox-item\"+(row.disabled?\" combobox-item-disabled\":\"\")+(g?\" combobox-gitem\":\"\");\ndd.push(\"<div id=\\\"\"+(_78.itemIdPrefix+\"_\"+i)+\"\\\" class=\\\"\"+cls+\"\\\">\");\nif(_79.showItemIcon&&row.iconCls){\ndd.push(\"<span class=\\\"combobox-icon \"+row.iconCls+\"\\\"></span>\");\n}\ndd.push(_79.formatter?_79.formatter.call(_75,row):s);\ndd.push(\"</div>\");\n}\n$(_76).html(dd.join(\"\"));\n}};\n$.fn.combobox.defaults=$.extend({},$.fn.combo.defaults,{valueField:\"value\",textField:\"text\",groupPosition:\"static\",groupField:null,groupFormatter:function(_7c){\nreturn _7c;\n},mode:\"local\",method:\"post\",url:null,data:null,queryParams:{},showItemIcon:false,limitToList:false,unselectedValues:[],mappingRows:[],view:_74,keyHandler:{up:function(e){\n_b(this,\"prev\");\ne.preventDefault();\n},down:function(e){\n_b(this,\"next\");\ne.preventDefault();\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_41(this);\n},query:function(q,e){\n_36(this,q);\n}},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){\n$.fn.combo.defaults.inputEvents.blur(e);\nvar _7d=e.data.target;\nvar _7e=$(_7d).combobox(\"options\");\nif(_7e.reversed||_7e.limitToList){\nif(_7e.blurTimer){\nclearTimeout(_7e.blurTimer);\n}\n_7e.blurTimer=setTimeout(function(){\nvar _7f=$(_7d).parent().length;\nif(_7f){\nif(_7e.reversed){\n$(_7d).combobox(\"setValues\",$(_7d).combobox(\"getValues\"));\n}else{\nif(_7e.limitToList){\nvar vv=[];\n$.map($(_7d).combobox(\"getValues\"),function(v){\nvar _80=$.easyui.indexOfArray($(_7d).combobox(\"getData\"),_7e.valueField,v);\nif(_80>=0){\nvv.push(v);\n}\n});\n$(_7d).combobox(\"setValues\",vv);\n}\n}\n_7e.blurTimer=null;\n}\n},50);\n}\n}}),panelEvents:{mouseover:_4b,mouseout:_4d,mousedown:function(e){\ne.preventDefault();\ne.stopPropagation();\n},click:_4e,scroll:_53},filter:function(q,row){\nvar _81=$(this).combobox(\"options\");\nreturn row[_81.textField].toLowerCase().indexOf(q.toLowerCase())>=0;\n},formatter:function(row){\nvar _82=$(this).combobox(\"options\");\nreturn row[_82.textField];\n},loader:function(_83,_84,_85){\nvar _86=$(this).combobox(\"options\");\nif(!_86.url){\nreturn false;\n}\n$.ajax({type:_86.method,url:_86.url,data:_83,dataType:\"json\",success:function(_87){\n_84(_87);\n},error:function(){\n_85.apply(this,arguments);\n}});\n},loadFilter:function(_88){\nreturn _88;\n},finder:{getEl:function(_89,_8a){\nvar _8b=_1(_89,_8a);\nvar id=$.data(_89,\"combobox\").itemIdPrefix+\"_\"+_8b;\nreturn $(\"#\"+id);\n},getGroupEl:function(_8c,_8d){\nvar _8e=$.data(_8c,\"combobox\");\nvar _8f=$.easyui.indexOfArray(_8e.groups,\"value\",_8d);\nvar id=_8e.groupIdPrefix+\"_\"+_8f;\nreturn $(\"#\"+id);\n},getGroup:function(_90,p){\nvar _91=$.data(_90,\"combobox\");\nvar _92=p.attr(\"id\").substr(_91.groupIdPrefix.length+1);\nreturn _91.groups[parseInt(_92)];\n},getRow:function(_93,p){\nvar _94=$.data(_93,\"combobox\");\nvar _95=(p instanceof $)?p.attr(\"id\").substr(_94.itemIdPrefix.length+1):_1(_93,p);\nreturn _94.data[parseInt(_95)];\n}},onBeforeLoad:function(_96){\n},onLoadSuccess:function(_97){\n},onLoadError:function(){\n},onSelect:function(_98){\n},onUnselect:function(_99){\n},onClick:function(_9a){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.combogrid.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"combogrid\");\nvar _4=_3.options;\nvar _5=_3.grid;\n$(_2).addClass(\"combogrid-f\").combo($.extend({},_4,{onShowPanel:function(){\n_22(this,$(this).combogrid(\"getValues\"),true);\nvar p=$(this).combogrid(\"panel\");\nvar _6=p.outerHeight()-p.height();\nvar _7=p._size(\"minHeight\");\nvar _8=p._size(\"maxHeight\");\nvar dg=$(this).combogrid(\"grid\");\ndg.datagrid(\"resize\",{width:\"100%\",height:(isNaN(parseInt(_4.panelHeight))?\"auto\":\"100%\"),minHeight:(_7?_7-_6:\"\"),maxHeight:(_8?_8-_6:\"\")});\nvar _9=dg.datagrid(\"getSelected\");\nif(_9){\ndg.datagrid(\"scrollTo\",dg.datagrid(\"getRowIndex\",_9));\n}\n_4.onShowPanel.call(this);\n}}));\nvar _a=$(_2).combo(\"panel\");\nif(!_5){\n_5=$(\"<table></table>\").appendTo(_a);\n_3.grid=_5;\n}\n_5.datagrid($.extend({},_4,{border:false,singleSelect:(!_4.multiple),onLoadSuccess:_b,onClickRow:_c,onSelect:_d(\"onSelect\"),onUnselect:_d(\"onUnselect\"),onSelectAll:_d(\"onSelectAll\"),onUnselectAll:_d(\"onUnselectAll\")}));\nfunction _e(dg){\nreturn $(dg).closest(\".combo-panel\").panel(\"options\").comboTarget||_2;\n};\nfunction _b(_f){\nvar _10=_e(this);\nvar _11=$(_10).data(\"combogrid\");\nvar _12=_11.options;\nvar _13=$(_10).combo(\"getValues\");\n_22(_10,_13,_11.remainText);\n_12.onLoadSuccess.call(this,_f);\n};\nfunction _c(_14,row){\nvar _15=_e(this);\nvar _16=$(_15).data(\"combogrid\");\nvar _17=_16.options;\n_16.remainText=false;\n_18.call(this);\nif(!_17.multiple){\n$(_15).combo(\"hidePanel\");\n}\n_17.onClickRow.call(this,_14,row);\n};\nfunction _d(_19){\nreturn function(_1a,row){\nvar _1b=_e(this);\nvar _1c=$(_1b).combogrid(\"options\");\nif(_19==\"onUnselectAll\"){\nif(_1c.multiple){\n_18.call(this);\n}\n}else{\n_18.call(this);\n}\n_1c[_19].call(this,_1a,row);\n};\n};\nfunction _18(){\nvar dg=$(this);\nvar _1d=_e(dg);\nvar _1e=$(_1d).data(\"combogrid\");\nvar _1f=_1e.options;\nvar vv=$.map(dg.datagrid(\"getSelections\"),function(row){\nreturn row[_1f.idField];\n});\nvv=vv.concat(_1f.unselectedValues);\nvar _20=dg.data(\"datagrid\").dc.body2;\nvar _21=_20.scrollTop();\n_22(_1d,vv,_1e.remainText);\n_20.scrollTop(_21);\n};\n};\nfunction nav(_23,dir){\nvar _24=$.data(_23,\"combogrid\");\nvar _25=_24.options;\nvar _26=_24.grid;\nvar _27=_26.datagrid(\"getRows\").length;\nif(!_27){\nreturn;\n}\nvar tr=_25.finder.getTr(_26[0],null,\"highlight\");\nif(!tr.length){\ntr=_25.finder.getTr(_26[0],null,\"selected\");\n}\nvar _28;\nif(!tr.length){\n_28=(dir==\"next\"?0:_27-1);\n}else{\nvar _28=parseInt(tr.attr(\"datagrid-row-index\"));\n_28+=(dir==\"next\"?1:-1);\nif(_28<0){\n_28=_27-1;\n}\nif(_28>=_27){\n_28=0;\n}\n}\n_26.datagrid(\"highlightRow\",_28);\nif(_25.selectOnNavigation){\n_24.remainText=false;\n_26.datagrid(\"selectRow\",_28);\n}\n};\nfunction _22(_29,_2a,_2b){\nvar _2c=$.data(_29,\"combogrid\");\nvar _2d=_2c.options;\nvar _2e=_2c.grid;\nvar _2f=$(_29).combo(\"getValues\");\nvar _30=$(_29).combo(\"options\");\nvar _31=_30.onChange;\n_30.onChange=function(){\n};\nvar _32=_2e.datagrid(\"options\");\nvar _33=_32.onSelect;\nvar _34=_32.onUnselectAll;\n_32.onSelect=_32.onUnselectAll=function(){\n};\nif(!$.isArray(_2a)){\n_2a=_2a.split(_2d.separator);\n}\nif(!_2d.multiple){\n_2a=_2a.length?[_2a[0]]:[\"\"];\n}\nvar vv=$.map(_2a,function(_35){\nreturn String(_35);\n});\nvv=$.grep(vv,function(v,_36){\nreturn _36===$.inArray(v,vv);\n});\nvar _37=$.grep(_2e.datagrid(\"getSelections\"),function(row,_38){\nreturn $.inArray(String(row[_2d.idField]),vv)>=0;\n});\n_2e.datagrid(\"clearSelections\");\n_2e.data(\"datagrid\").selectedRows=_37;\nvar ss=[];\n_2d.unselectedValues=[];\n$.map(vv,function(v){\nvar _39=_2e.datagrid(\"getRowIndex\",v);\nif(_39>=0){\n_2e.datagrid(\"selectRow\",_39);\n}else{\n_2d.unselectedValues.push(v);\n}\nss.push(_3a(v,_2e.datagrid(\"getRows\"))||_3a(v,_37)||_3a(v,_2d.mappingRows)||v);\n});\n$(_29).combo(\"setValues\",_2f);\n_30.onChange=_31;\n_32.onSelect=_33;\n_32.onUnselectAll=_34;\nif(!_2b){\nvar s=ss.join(_2d.separator);\nif($(_29).combo(\"getText\")!=s){\n$(_29).combo(\"setText\",s);\n}\n}\n$(_29).combo(\"setValues\",_2a);\nfunction _3a(_3b,a){\nvar _3c=$.easyui.getArrayItem(a,_2d.idField,_3b);\nreturn _3c?_3c[_2d.textField]:undefined;\n};\n};\nfunction _3d(_3e,q){\nvar _3f=$.data(_3e,\"combogrid\");\nvar _40=_3f.options;\nvar _41=_3f.grid;\n_3f.remainText=true;\nvar qq=_40.multiple?q.split(_40.separator):[q];\nqq=$.grep(qq,function(q){\nreturn $.trim(q)!=\"\";\n});\nif(_40.mode==\"remote\"){\n_42(qq);\n_41.datagrid(\"load\",$.extend({},_40.queryParams,{q:q}));\n}else{\n_41.datagrid(\"highlightRow\",-1);\nvar _43=_41.datagrid(\"getRows\");\nvar vv=[];\n$.map(qq,function(q){\nq=$.trim(q);\nvar _44=q;\n_45(_40.mappingRows,q);\n_45(_41.datagrid(\"getSelections\"),q);\nvar _46=_45(_43,q);\nif(_46>=0){\nif(_40.reversed){\n_41.datagrid(\"highlightRow\",_46);\n}\n}else{\n$.map(_43,function(row,i){\nif(_40.filter.call(_3e,q,row)){\n_41.datagrid(\"highlightRow\",i);\n}\n});\n}\n});\n_42(vv);\n}\nfunction _45(_47,q){\nfor(var i=0;i<_47.length;i++){\nvar row=_47[i];\nif((row[_40.textField]||\"\").toLowerCase()==q.toLowerCase()){\nvv.push(row[_40.idField]);\nreturn i;\n}\n}\nreturn -1;\n};\nfunction _42(vv){\nif(!_40.reversed){\n_22(_3e,vv,true);\n}\n};\n};\nfunction _48(_49){\nvar _4a=$.data(_49,\"combogrid\");\nvar _4b=_4a.options;\nvar _4c=_4a.grid;\nvar tr=_4b.finder.getTr(_4c[0],null,\"highlight\");\n_4a.remainText=false;\nif(tr.length){\nvar _4d=parseInt(tr.attr(\"datagrid-row-index\"));\nif(_4b.multiple){\nif(tr.hasClass(\"datagrid-row-selected\")){\n_4c.datagrid(\"unselectRow\",_4d);\n}else{\n_4c.datagrid(\"selectRow\",_4d);\n}\n}else{\n_4c.datagrid(\"selectRow\",_4d);\n}\n}\nvar vv=[];\n$.map(_4c.datagrid(\"getSelections\"),function(row){\nvv.push(row[_4b.idField]);\n});\n$.map(_4b.unselectedValues,function(v){\nif($.easyui.indexOfArray(_4b.mappingRows,_4b.idField,v)>=0){\n$.easyui.addArrayItem(vv,v);\n}\n});\n$(_49).combogrid(\"setValues\",vv);\nif(!_4b.multiple){\n$(_49).combogrid(\"hidePanel\");\n}\n};\n$.fn.combogrid=function(_4e,_4f){\nif(typeof _4e==\"string\"){\nvar _50=$.fn.combogrid.methods[_4e];\nif(_50){\nreturn _50(this,_4f);\n}else{\nreturn this.combo(_4e,_4f);\n}\n}\n_4e=_4e||{};\nreturn this.each(function(){\nvar _51=$.data(this,\"combogrid\");\nif(_51){\n$.extend(_51.options,_4e);\n}else{\n_51=$.data(this,\"combogrid\",{options:$.extend({},$.fn.combogrid.defaults,$.fn.combogrid.parseOptions(this),_4e)});\n}\n_1(this);\n});\n};\n$.fn.combogrid.methods={options:function(jq){\nvar _52=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"combogrid\").options,{width:_52.width,height:_52.height,originalValue:_52.originalValue,disabled:_52.disabled,readonly:_52.readonly});\n},cloneFrom:function(jq,_53){\nreturn jq.each(function(){\n$(this).combo(\"cloneFrom\",_53);\n$.data(this,\"combogrid\",{options:$.extend(true,{cloned:true},$(_53).combogrid(\"options\")),combo:$(this).next(),panel:$(_53).combo(\"panel\"),grid:$(_53).combogrid(\"grid\")});\n});\n},grid:function(jq){\nreturn $.data(jq[0],\"combogrid\").grid;\n},setValues:function(jq,_54){\nreturn jq.each(function(){\nvar _55=$(this).combogrid(\"options\");\nif($.isArray(_54)){\n_54=$.map(_54,function(_56){\nif(_56&&typeof _56==\"object\"){\n$.easyui.addArrayItem(_55.mappingRows,_55.idField,_56);\nreturn _56[_55.idField];\n}else{\nreturn _56;\n}\n});\n}\n_22(this,_54);\n});\n},setValue:function(jq,_57){\nreturn jq.each(function(){\n$(this).combogrid(\"setValues\",$.isArray(_57)?_57:[_57]);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).combogrid(\"setValues\",[]);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _58=$(this).combogrid(\"options\");\nif(_58.multiple){\n$(this).combogrid(\"setValues\",_58.originalValue);\n}else{\n$(this).combogrid(\"setValue\",_58.originalValue);\n}\n});\n}};\n$.fn.combogrid.parseOptions=function(_59){\nvar t=$(_59);\nreturn $.extend({},$.fn.combo.parseOptions(_59),$.fn.datagrid.parseOptions(_59),$.parser.parseOptions(_59,[\"idField\",\"textField\",\"mode\"]));\n};\n$.fn.combogrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.datagrid.defaults,{loadMsg:null,idField:null,textField:null,unselectedValues:[],mappingRows:[],mode:\"local\",keyHandler:{up:function(e){\nnav(this,\"prev\");\ne.preventDefault();\n},down:function(e){\nnav(this,\"next\");\ne.preventDefault();\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_48(this);\n},query:function(q,e){\n_3d(this,q);\n}},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){\n$.fn.combo.defaults.inputEvents.blur(e);\nvar _5a=e.data.target;\nvar _5b=$(_5a).combogrid(\"options\");\nif(_5b.reversed){\n$(_5a).combogrid(\"setValues\",$(_5a).combogrid(\"getValues\"));\n}\n}}),panelEvents:{mousedown:function(e){\n}},filter:function(q,row){\nvar _5c=$(this).combogrid(\"options\");\nreturn (row[_5c.textField]||\"\").toLowerCase().indexOf(q.toLowerCase())>=0;\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.combotree.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"combotree\");\nvar _4=_3.options;\nvar _5=_3.tree;\n$(_2).addClass(\"combotree-f\");\n$(_2).combo($.extend({},_4,{onShowPanel:function(){\nif(_4.editable){\n_5.tree(\"doFilter\",\"\");\n}\n_4.onShowPanel.call(this);\n}}));\nvar _6=$(_2).combo(\"panel\");\nif(!_5){\n_5=$(\"<ul></ul>\").appendTo(_6);\n_3.tree=_5;\n}\n_5.tree($.extend({},_4,{checkbox:_4.multiple,onLoadSuccess:function(_7,_8){\nvar _9=$(_2).combotree(\"getValues\");\nif(_4.multiple){\n$.map(_5.tree(\"getChecked\"),function(_a){\n$.easyui.addArrayItem(_9,_a.id);\n});\n}\n_15(_2,_9,_3.remainText);\n_4.onLoadSuccess.call(this,_7,_8);\n},onClick:function(_b){\nif(_4.multiple){\n$(this).tree(_b.checked?\"uncheck\":\"check\",_b.target);\n}else{\n$(_2).combo(\"hidePanel\");\n}\n_3.remainText=false;\n_e(_2);\n_4.onClick.call(this,_b);\n},onCheck:function(_c,_d){\n_3.remainText=false;\n_e(_2);\n_4.onCheck.call(this,_c,_d);\n}}));\n};\nfunction _e(_f){\nvar _10=$.data(_f,\"combotree\");\nvar _11=_10.options;\nvar _12=_10.tree;\nvar vv=[];\nif(_11.multiple){\nvv=$.map(_12.tree(\"getChecked\"),function(_13){\nreturn _13.id;\n});\n}else{\nvar _14=_12.tree(\"getSelected\");\nif(_14){\nvv.push(_14.id);\n}\n}\nvv=vv.concat(_11.unselectedValues);\n_15(_f,vv,_10.remainText);\n};\nfunction _15(_16,_17,_18){\nvar _19=$.data(_16,\"combotree\");\nvar _1a=_19.options;\nvar _1b=_19.tree;\nvar _1c=_1b.tree(\"options\");\nvar _1d=_1c.onBeforeCheck;\nvar _1e=_1c.onCheck;\nvar _1f=_1c.onBeforeSelect;\nvar _20=_1c.onSelect;\n_1c.onBeforeCheck=_1c.onCheck=_1c.onBeforeSelect=_1c.onSelect=function(){\n};\nif(!$.isArray(_17)){\n_17=_17.split(_1a.separator);\n}\nif(!_1a.multiple){\n_17=_17.length?[_17[0]]:[\"\"];\n}\nvar vv=$.map(_17,function(_21){\nreturn String(_21);\n});\n_1b.find(\"div.tree-node-selected\").removeClass(\"tree-node-selected\");\n$.map(_1b.tree(\"getChecked\"),function(_22){\nif($.inArray(String(_22.id),vv)==-1){\n_1b.tree(\"uncheck\",_22.target);\n}\n});\nvar ss=[];\n_1a.unselectedValues=[];\n$.map(vv,function(v){\nvar _23=_1b.tree(\"find\",v);\nif(_23){\n_1b.tree(\"check\",_23.target).tree(\"select\",_23.target);\nss.push(_24(_23));\n}else{\nss.push(_25(v,_1a.mappingRows)||v);\n_1a.unselectedValues.push(v);\n}\n});\nif(_1a.multiple){\n$.map(_1b.tree(\"getChecked\"),function(_26){\nvar id=String(_26.id);\nif($.inArray(id,vv)==-1){\nvv.push(id);\nss.push(_24(_26));\n}\n});\n}\n_1c.onBeforeCheck=_1d;\n_1c.onCheck=_1e;\n_1c.onBeforeSelect=_1f;\n_1c.onSelect=_20;\nif(!_18){\nvar s=ss.join(_1a.separator);\nif($(_16).combo(\"getText\")!=s){\n$(_16).combo(\"setText\",s);\n}\n}\n$(_16).combo(\"setValues\",vv);\nfunction _25(_27,a){\nvar _28=$.easyui.getArrayItem(a,\"id\",_27);\nreturn _28?_24(_28):undefined;\n};\nfunction _24(_29){\nreturn _29[_1a.textField||\"\"]||_29.text;\n};\n};\nfunction _2a(_2b,q){\nvar _2c=$.data(_2b,\"combotree\");\nvar _2d=_2c.options;\nvar _2e=_2c.tree;\n_2c.remainText=true;\n_2e.tree(\"doFilter\",_2d.multiple?q.split(_2d.separator):q);\n};\nfunction _2f(_30){\nvar _31=$.data(_30,\"combotree\");\n_31.remainText=false;\n$(_30).combotree(\"setValues\",$(_30).combotree(\"getValues\"));\n$(_30).combotree(\"hidePanel\");\n};\n$.fn.combotree=function(_32,_33){\nif(typeof _32==\"string\"){\nvar _34=$.fn.combotree.methods[_32];\nif(_34){\nreturn _34(this,_33);\n}else{\nreturn this.combo(_32,_33);\n}\n}\n_32=_32||{};\nreturn this.each(function(){\nvar _35=$.data(this,\"combotree\");\nif(_35){\n$.extend(_35.options,_32);\n}else{\n$.data(this,\"combotree\",{options:$.extend({},$.fn.combotree.defaults,$.fn.combotree.parseOptions(this),_32)});\n}\n_1(this);\n});\n};\n$.fn.combotree.methods={options:function(jq){\nvar _36=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"combotree\").options,{width:_36.width,height:_36.height,originalValue:_36.originalValue,disabled:_36.disabled,readonly:_36.readonly});\n},clone:function(jq,_37){\nvar t=jq.combo(\"clone\",_37);\nt.data(\"combotree\",{options:$.extend(true,{},jq.combotree(\"options\")),tree:jq.combotree(\"tree\")});\nreturn t;\n},tree:function(jq){\nreturn $.data(jq[0],\"combotree\").tree;\n},loadData:function(jq,_38){\nreturn jq.each(function(){\nvar _39=$.data(this,\"combotree\").options;\n_39.data=_38;\nvar _3a=$.data(this,\"combotree\").tree;\n_3a.tree(\"loadData\",_38);\n});\n},reload:function(jq,url){\nreturn jq.each(function(){\nvar _3b=$.data(this,\"combotree\").options;\nvar _3c=$.data(this,\"combotree\").tree;\nif(url){\n_3b.url=url;\n}\n_3c.tree({url:_3b.url});\n});\n},setValues:function(jq,_3d){\nreturn jq.each(function(){\nvar _3e=$(this).combotree(\"options\");\nif($.isArray(_3d)){\n_3d=$.map(_3d,function(_3f){\nif(_3f&&typeof _3f==\"object\"){\n$.easyui.addArrayItem(_3e.mappingRows,\"id\",_3f);\nreturn _3f.id;\n}else{\nreturn _3f;\n}\n});\n}\n_15(this,_3d);\n});\n},setValue:function(jq,_40){\nreturn jq.each(function(){\n$(this).combotree(\"setValues\",$.isArray(_40)?_40:[_40]);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).combotree(\"setValues\",[]);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _41=$(this).combotree(\"options\");\nif(_41.multiple){\n$(this).combotree(\"setValues\",_41.originalValue);\n}else{\n$(this).combotree(\"setValue\",_41.originalValue);\n}\n});\n}};\n$.fn.combotree.parseOptions=function(_42){\nreturn $.extend({},$.fn.combo.parseOptions(_42),$.fn.tree.parseOptions(_42));\n};\n$.fn.combotree.defaults=$.extend({},$.fn.combo.defaults,$.fn.tree.defaults,{editable:false,textField:null,unselectedValues:[],mappingRows:[],keyHandler:{up:function(e){\n},down:function(e){\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_2f(this);\n},query:function(q,e){\n_2a(this,q);\n}}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.combotreegrid.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"combotreegrid\");\nvar _4=_3.options;\n$(_2).addClass(\"combotreegrid-f\").combo($.extend({},_4,{onShowPanel:function(){\nvar p=$(this).combotreegrid(\"panel\");\nvar _5=p.outerHeight()-p.height();\nvar _6=p._size(\"minHeight\");\nvar _7=p._size(\"maxHeight\");\nvar dg=$(this).combotreegrid(\"grid\");\ndg.treegrid(\"resize\",{width:\"100%\",height:(isNaN(parseInt(_4.panelHeight))?\"auto\":\"100%\"),minHeight:(_6?_6-_5:\"\"),maxHeight:(_7?_7-_5:\"\")});\nvar _8=dg.treegrid(\"getSelected\");\nif(_8){\ndg.treegrid(\"scrollTo\",_8[_4.idField]);\n}\n_4.onShowPanel.call(this);\n}}));\nif(!_3.grid){\nvar _9=$(_2).combo(\"panel\");\n_3.grid=$(\"<table></table>\").appendTo(_9);\n}\n_3.grid.treegrid($.extend({},_4,{border:false,checkbox:_4.multiple,onLoadSuccess:function(_a,_b){\nvar _c=$(_2).combotreegrid(\"getValues\");\nif(_4.multiple){\n$.map($(this).treegrid(\"getCheckedNodes\"),function(_d){\n$.easyui.addArrayItem(_c,_d[_4.idField]);\n});\n}\n_16(_2,_c);\n_4.onLoadSuccess.call(this,_a,_b);\n_3.remainText=false;\n},onClickRow:function(_e){\nif(_4.multiple){\n$(this).treegrid(_e.checked?\"uncheckNode\":\"checkNode\",_e[_4.idField]);\n$(this).treegrid(\"unselect\",_e[_4.idField]);\n}else{\n$(_2).combo(\"hidePanel\");\n}\n_11(_2);\n_4.onClickRow.call(this,_e);\n},onCheckNode:function(_f,_10){\n_11(_2);\n_4.onCheckNode.call(this,_f,_10);\n}}));\n};\nfunction _11(_12){\nvar _13=$.data(_12,\"combotreegrid\");\nvar _14=_13.options;\nvar _15=_13.grid;\nvar vv=[];\nif(_14.multiple){\nvv=$.map(_15.treegrid(\"getCheckedNodes\"),function(row){\nreturn row[_14.idField];\n});\n}else{\nvar row=_15.treegrid(\"getSelected\");\nif(row){\nvv.push(row[_14.idField]);\n}\n}\nvv=vv.concat(_14.unselectedValues);\n_16(_12,vv);\n};\nfunction _16(_17,_18){\nvar _19=$.data(_17,\"combotreegrid\");\nvar _1a=_19.options;\nvar _1b=_19.grid;\nvar _1c=_1b.datagrid(\"options\");\nvar _1d=_1c.onBeforeCheck;\nvar _1e=_1c.onCheck;\nvar _1f=_1c.onBeforeSelect;\nvar _20=_1c.onSelect;\n_1c.onBeforeCheck=_1c.onCheck=_1c.onBeforeSelect=_1c.onSelect=function(){\n};\nif(!$.isArray(_18)){\n_18=_18.split(_1a.separator);\n}\nif(!_1a.multiple){\n_18=_18.length?[_18[0]]:[\"\"];\n}\nvar vv=$.map(_18,function(_21){\nreturn String(_21);\n});\nvv=$.grep(vv,function(v,_22){\nreturn _22===$.inArray(v,vv);\n});\nvar _23=_1b.treegrid(\"getSelected\");\nif(_23){\n_1b.treegrid(\"unselect\",_23[_1a.idField]);\n}\n$.map(_1b.treegrid(\"getCheckedNodes\"),function(row){\nif($.inArray(String(row[_1a.idField]),vv)==-1){\n_1b.treegrid(\"uncheckNode\",row[_1a.idField]);\n}\n});\nvar ss=[];\n_1a.unselectedValues=[];\n$.map(vv,function(v){\nvar row=_1b.treegrid(\"find\",v);\nif(row){\nif(_1a.multiple){\n_1b.treegrid(\"checkNode\",v);\n}else{\n_1b.treegrid(\"select\",v);\n}\nss.push(_24(row));\n}else{\nss.push(_25(v,_1a.mappingRows)||v);\n_1a.unselectedValues.push(v);\n}\n});\nif(_1a.multiple){\n$.map(_1b.treegrid(\"getCheckedNodes\"),function(row){\nvar id=String(row[_1a.idField]);\nif($.inArray(id,vv)==-1){\nvv.push(id);\nss.push(_24(row));\n}\n});\n}\n_1c.onBeforeCheck=_1d;\n_1c.onCheck=_1e;\n_1c.onBeforeSelect=_1f;\n_1c.onSelect=_20;\nif(!_19.remainText){\nvar s=ss.join(_1a.separator);\nif($(_17).combo(\"getText\")!=s){\n$(_17).combo(\"setText\",s);\n}\n}\n$(_17).combo(\"setValues\",vv);\nfunction _25(_26,a){\nvar _27=$.easyui.getArrayItem(a,_1a.idField,_26);\nreturn _27?_24(_27):undefined;\n};\nfunction _24(row){\nreturn row[_1a.textField||\"\"]||row[_1a.treeField];\n};\n};\nfunction _28(_29,q){\nvar _2a=$.data(_29,\"combotreegrid\");\nvar _2b=_2a.options;\nvar _2c=_2a.grid;\n_2a.remainText=true;\nvar qq=_2b.multiple?q.split(_2b.separator):[q];\nqq=$.grep(qq,function(q){\nreturn $.trim(q)!=\"\";\n});\n_2c.treegrid(\"clearSelections\").treegrid(\"clearChecked\").treegrid(\"highlightRow\",-1);\nif(_2b.mode==\"remote\"){\n_2d(qq);\n_2c.treegrid(\"load\",$.extend({},_2b.queryParams,{q:q}));\n}else{\nif(q){\nvar _2e=_2c.treegrid(\"getData\");\nvar vv=[];\n$.map(qq,function(q){\nq=$.trim(q);\nif(q){\nvar v=undefined;\n$.easyui.forEach(_2e,true,function(row){\nif(q.toLowerCase()==String(row[_2b.treeField]).toLowerCase()){\nv=row[_2b.idField];\nreturn false;\n}else{\nif(_2b.filter.call(_29,q,row)){\n_2c.treegrid(\"expandTo\",row[_2b.idField]);\n_2c.treegrid(\"highlightRow\",row[_2b.idField]);\nreturn false;\n}\n}\n});\nif(v==undefined){\n$.easyui.forEach(_2b.mappingRows,false,function(row){\nif(q.toLowerCase()==String(row[_2b.treeField])){\nv=row[_2b.idField];\nreturn false;\n}\n});\n}\nif(v!=undefined){\nvv.push(v);\n}else{\nvv.push(q);\n}\n}\n});\n_2d(vv);\n_2a.remainText=false;\n}\n}\nfunction _2d(vv){\nif(!_2b.reversed){\n$(_29).combotreegrid(\"setValues\",vv);\n}\n};\n};\nfunction _2f(_30){\nvar _31=$.data(_30,\"combotreegrid\");\nvar _32=_31.options;\nvar _33=_31.grid;\nvar tr=_32.finder.getTr(_33[0],null,\"highlight\");\n_31.remainText=false;\nif(tr.length){\nvar id=tr.attr(\"node-id\");\nif(_32.multiple){\nif(tr.hasClass(\"datagrid-row-selected\")){\n_33.treegrid(\"uncheckNode\",id);\n}else{\n_33.treegrid(\"checkNode\",id);\n}\n}else{\n_33.treegrid(\"selectRow\",id);\n}\n}\nvar vv=[];\nif(_32.multiple){\n$.map(_33.treegrid(\"getCheckedNodes\"),function(row){\nvv.push(row[_32.idField]);\n});\n}else{\nvar row=_33.treegrid(\"getSelected\");\nif(row){\nvv.push(row[_32.idField]);\n}\n}\n$.map(_32.unselectedValues,function(v){\nif($.easyui.indexOfArray(_32.mappingRows,_32.idField,v)>=0){\n$.easyui.addArrayItem(vv,v);\n}\n});\n$(_30).combotreegrid(\"setValues\",vv);\nif(!_32.multiple){\n$(_30).combotreegrid(\"hidePanel\");\n}\n};\n$.fn.combotreegrid=function(_34,_35){\nif(typeof _34==\"string\"){\nvar _36=$.fn.combotreegrid.methods[_34];\nif(_36){\nreturn _36(this,_35);\n}else{\nreturn this.combo(_34,_35);\n}\n}\n_34=_34||{};\nreturn this.each(function(){\nvar _37=$.data(this,\"combotreegrid\");\nif(_37){\n$.extend(_37.options,_34);\n}else{\n_37=$.data(this,\"combotreegrid\",{options:$.extend({},$.fn.combotreegrid.defaults,$.fn.combotreegrid.parseOptions(this),_34)});\n}\n_1(this);\n});\n};\n$.fn.combotreegrid.methods={options:function(jq){\nvar _38=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"combotreegrid\").options,{width:_38.width,height:_38.height,originalValue:_38.originalValue,disabled:_38.disabled,readonly:_38.readonly});\n},grid:function(jq){\nreturn $.data(jq[0],\"combotreegrid\").grid;\n},setValues:function(jq,_39){\nreturn jq.each(function(){\nvar _3a=$(this).combotreegrid(\"options\");\nif($.isArray(_39)){\n_39=$.map(_39,function(_3b){\nif(_3b&&typeof _3b==\"object\"){\n$.easyui.addArrayItem(_3a.mappingRows,_3a.idField,_3b);\nreturn _3b[_3a.idField];\n}else{\nreturn _3b;\n}\n});\n}\n_16(this,_39);\n});\n},setValue:function(jq,_3c){\nreturn jq.each(function(){\n$(this).combotreegrid(\"setValues\",$.isArray(_3c)?_3c:[_3c]);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).combotreegrid(\"setValues\",[]);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _3d=$(this).combotreegrid(\"options\");\nif(_3d.multiple){\n$(this).combotreegrid(\"setValues\",_3d.originalValue);\n}else{\n$(this).combotreegrid(\"setValue\",_3d.originalValue);\n}\n});\n}};\n$.fn.combotreegrid.parseOptions=function(_3e){\nvar t=$(_3e);\nreturn $.extend({},$.fn.combo.parseOptions(_3e),$.fn.treegrid.parseOptions(_3e),$.parser.parseOptions(_3e,[\"mode\",{limitToGrid:\"boolean\"}]));\n};\n$.fn.combotreegrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.treegrid.defaults,{editable:false,singleSelect:true,limitToGrid:false,unselectedValues:[],mappingRows:[],mode:\"local\",textField:null,keyHandler:{up:function(e){\n},down:function(e){\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_2f(this);\n},query:function(q,e){\n_28(this,q);\n}},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){\n$.fn.combo.defaults.inputEvents.blur(e);\nvar _3f=e.data.target;\nvar _40=$(_3f).combotreegrid(\"options\");\nif(_40.limitToGrid){\n_2f(_3f);\n}\n}}),filter:function(q,row){\nvar _41=$(this).combotreegrid(\"options\");\nreturn (row[_41.treeField]||\"\").toLowerCase().indexOf(q.toLowerCase())>=0;\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.datagrid.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nvar _1=0;\nfunction _2(a,o){\nreturn $.easyui.indexOfArray(a,o);\n};\nfunction _3(a,o,id){\n$.easyui.removeArrayItem(a,o,id);\n};\nfunction _4(a,o,r){\n$.easyui.addArrayItem(a,o,r);\n};\nfunction _5(_6,aa){\nreturn $.data(_6,\"treegrid\")?aa.slice(1):aa;\n};\nfunction _7(_8){\nvar _9=$.data(_8,\"datagrid\");\nvar _a=_9.options;\nvar _b=_9.panel;\nvar dc=_9.dc;\nvar ss=null;\nif(_a.sharedStyleSheet){\nss=typeof _a.sharedStyleSheet==\"boolean\"?\"head\":_a.sharedStyleSheet;\n}else{\nss=_b.closest(\"div.datagrid-view\");\nif(!ss.length){\nss=dc.view;\n}\n}\nvar cc=$(ss);\nvar _c=$.data(cc[0],\"ss\");\nif(!_c){\n_c=$.data(cc[0],\"ss\",{cache:{},dirty:[]});\n}\nreturn {add:function(_d){\nvar ss=[\"<style type=\\\"text/css\\\" easyui=\\\"true\\\">\"];\nfor(var i=0;i<_d.length;i++){\n_c.cache[_d[i][0]]={width:_d[i][1]};\n}\nvar _e=0;\nfor(var s in _c.cache){\nvar _f=_c.cache[s];\n_f.index=_e++;\nss.push(s+\"{width:\"+_f.width+\"}\");\n}\nss.push(\"</style>\");\n$(ss.join(\"\\n\")).appendTo(cc);\ncc.children(\"style[easyui]:not(:last)\").remove();\n},getRule:function(_10){\nvar _11=cc.children(\"style[easyui]:last\")[0];\nvar _12=_11.styleSheet?_11.styleSheet:(_11.sheet||document.styleSheets[document.styleSheets.length-1]);\nvar _13=_12.cssRules||_12.rules;\nreturn _13[_10];\n},set:function(_14,_15){\nvar _16=_c.cache[_14];\nif(_16){\n_16.width=_15;\nvar _17=this.getRule(_16.index);\nif(_17){\n_17.style[\"width\"]=_15;\n}\n}\n},remove:function(_18){\nvar tmp=[];\nfor(var s in _c.cache){\nif(s.indexOf(_18)==-1){\ntmp.push([s,_c.cache[s].width]);\n}\n}\n_c.cache={};\nthis.add(tmp);\n},dirty:function(_19){\nif(_19){\n_c.dirty.push(_19);\n}\n},clean:function(){\nfor(var i=0;i<_c.dirty.length;i++){\nthis.remove(_c.dirty[i]);\n}\n_c.dirty=[];\n}};\n};\nfunction _1a(_1b,_1c){\nvar _1d=$.data(_1b,\"datagrid\");\nvar _1e=_1d.options;\nvar _1f=_1d.panel;\nif(_1c){\n$.extend(_1e,_1c);\n}\nif(_1e.fit==true){\nvar p=_1f.panel(\"panel\").parent();\n_1e.width=p.width();\n_1e.height=p.height();\n}\n_1f.panel(\"resize\",_1e);\n};\nfunction _20(_21){\nvar _22=$.data(_21,\"datagrid\");\nvar _23=_22.options;\nvar dc=_22.dc;\nvar _24=_22.panel;\nif(!_24.is(\":visible\")){\nreturn;\n}\nvar _25=_24.width();\nvar _26=_24.height();\nvar _27=dc.view;\nvar _28=dc.view1;\nvar _29=dc.view2;\nvar _2a=_28.children(\"div.datagrid-header\");\nvar _2b=_29.children(\"div.datagrid-header\");\nvar _2c=_2a.find(\"table\");\nvar _2d=_2b.find(\"table\");\n_27.width(_25);\nvar _2e=_2a.children(\"div.datagrid-header-inner\").show();\n_28.width(_2e.find(\"table\").width());\nif(!_23.showHeader){\n_2e.hide();\n}\n_29.width(_25-_28._outerWidth());\n_28.children()._outerWidth(_28.width());\n_29.children()._outerWidth(_29.width());\nvar all=_2a.add(_2b).add(_2c).add(_2d);\nall.css(\"height\",\"\");\nvar hh=Math.max(_2c.height(),_2d.height());\nall._outerHeight(hh);\n_27.children(\".datagrid-empty\").css(\"top\",hh+\"px\");\ndc.body1.add(dc.body2).children(\"table.datagrid-btable-frozen\").css({position:\"absolute\",top:dc.header2._outerHeight()});\nvar _2f=dc.body2.children(\"table.datagrid-btable-frozen\")._outerHeight();\nvar _30=_2f+_2b._outerHeight()+_29.children(\".datagrid-footer\")._outerHeight();\n_24.children(\":not(.datagrid-view,.datagrid-mask,.datagrid-mask-msg)\").each(function(){\n_30+=$(this)._outerHeight();\n});\nvar _31=_24.outerHeight()-_24.height();\nvar _32=_24._size(\"minHeight\")||\"\";\nvar _33=_24._size(\"maxHeight\")||\"\";\n_28.add(_29).children(\"div.datagrid-body\").css({marginTop:_2f,height:(isNaN(parseInt(_23.height))?\"\":(_26-_30)),minHeight:(_32?_32-_31-_30:\"\"),maxHeight:(_33?_33-_31-_30:\"\")});\n_27.height(_29.height());\n};\nfunction _34(_35,_36,_37){\nvar _38=$.data(_35,\"datagrid\").data.rows;\nvar _39=$.data(_35,\"datagrid\").options;\nvar dc=$.data(_35,\"datagrid\").dc;\nvar tmp=$(\"<tr class=\\\"datagrid-row\\\" style=\\\"position:absolute;left:-999999px\\\"></tr>\").appendTo(\"body\");\nvar _3a=tmp.outerHeight();\ntmp.remove();\nif(!dc.body1.is(\":empty\")&&(!_39.nowrap||_39.autoRowHeight||_37)){\nif(_36!=undefined){\nvar tr1=_39.finder.getTr(_35,_36,\"body\",1);\nvar tr2=_39.finder.getTr(_35,_36,\"body\",2);\n_3b(tr1,tr2);\n}else{\nvar tr1=_39.finder.getTr(_35,0,\"allbody\",1);\nvar tr2=_39.finder.getTr(_35,0,\"allbody\",2);\n_3b(tr1,tr2);\nif(_39.showFooter){\nvar tr1=_39.finder.getTr(_35,0,\"allfooter\",1);\nvar tr2=_39.finder.getTr(_35,0,\"allfooter\",2);\n_3b(tr1,tr2);\n}\n}\n}\n_20(_35);\nif(_39.height==\"auto\"){\nvar _3c=dc.body1.parent();\nvar _3d=dc.body2;\nvar _3e=_3f(_3d);\nvar _40=_3e.height;\nif(_3e.width>_3d.width()){\n_40+=18;\n}\n_40-=parseInt(_3d.css(\"marginTop\"))||0;\n_3c.height(_40);\n_3d.height(_40);\ndc.view.height(dc.view2.height());\n}\ndc.body2.triggerHandler(\"scroll\");\nfunction _3b(_41,_42){\nfor(var i=0;i<_42.length;i++){\nvar tr1=$(_41[i]);\nvar tr2=$(_42[i]);\ntr1.css(\"height\",\"\");\ntr2.css(\"height\",\"\");\nvar _43=Math.max(tr1.outerHeight(),tr2.outerHeight());\nif(_43!=_3a){\n_43=Math.max(_43,_3a)+1;\ntr1.css(\"height\",_43);\ntr2.css(\"height\",_43);\n}\n}\n};\nfunction _3f(cc){\nvar _44=0;\nvar _45=0;\n$(cc).children().each(function(){\nvar c=$(this);\nif(c.is(\":visible\")){\n_45+=c._outerHeight();\nif(_44<c._outerWidth()){\n_44=c._outerWidth();\n}\n}\n});\nreturn {width:_44,height:_45};\n};\n};\nfunction _46(_47,_48){\nvar _49=$.data(_47,\"datagrid\");\nvar _4a=_49.options;\nvar dc=_49.dc;\nif(!dc.body2.children(\"table.datagrid-btable-frozen\").length){\ndc.body1.add(dc.body2).prepend(\"<table class=\\\"datagrid-btable datagrid-btable-frozen\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"></table>\");\n}\n_4b(true);\n_4b(false);\n_20(_47);\nfunction _4b(_4c){\nvar _4d=_4c?1:2;\nvar tr=_4a.finder.getTr(_47,_48,\"body\",_4d);\n(_4c?dc.body1:dc.body2).children(\"table.datagrid-btable-frozen\").append(tr);\n};\n};\nfunction _4e(_4f,_50){\nfunction _51(){\nvar _52=[];\nvar _53=[];\n$(_4f).children(\"thead\").each(function(){\nvar opt=$.parser.parseOptions(this,[{frozen:\"boolean\"}]);\n$(this).find(\"tr\").each(function(){\nvar _54=[];\n$(this).find(\"th\").each(function(){\nvar th=$(this);\nvar col=$.extend({},$.parser.parseOptions(this,[\"id\",\"field\",\"align\",\"halign\",\"order\",\"width\",{sortable:\"boolean\",checkbox:\"boolean\",resizable:\"boolean\",fixed:\"boolean\"},{rowspan:\"number\",colspan:\"number\"}]),{title:(th.html()||undefined),hidden:(th.attr(\"hidden\")?true:undefined),formatter:(th.attr(\"formatter\")?eval(th.attr(\"formatter\")):undefined),styler:(th.attr(\"styler\")?eval(th.attr(\"styler\")):undefined),sorter:(th.attr(\"sorter\")?eval(th.attr(\"sorter\")):undefined)});\nif(col.width&&String(col.width).indexOf(\"%\")==-1){\ncol.width=parseInt(col.width);\n}\nif(th.attr(\"editor\")){\nvar s=$.trim(th.attr(\"editor\"));\nif(s.substr(0,1)==\"{\"){\ncol.editor=eval(\"(\"+s+\")\");\n}else{\ncol.editor=s;\n}\n}\n_54.push(col);\n});\nopt.frozen?_52.push(_54):_53.push(_54);\n});\n});\nreturn [_52,_53];\n};\nvar _55=$(\"<div class=\\\"datagrid-wrap\\\">\"+\"<div class=\\\"datagrid-view\\\">\"+\"<div class=\\\"datagrid-view1\\\">\"+\"<div class=\\\"datagrid-header\\\">\"+\"<div class=\\\"datagrid-header-inner\\\"></div>\"+\"</div>\"+\"<div class=\\\"datagrid-body\\\">\"+\"<div class=\\\"datagrid-body-inner\\\"></div>\"+\"</div>\"+\"<div class=\\\"datagrid-footer\\\">\"+\"<div class=\\\"datagrid-footer-inner\\\"></div>\"+\"</div>\"+\"</div>\"+\"<div class=\\\"datagrid-view2\\\">\"+\"<div class=\\\"datagrid-header\\\">\"+\"<div class=\\\"datagrid-header-inner\\\"></div>\"+\"</div>\"+\"<div class=\\\"datagrid-body\\\"></div>\"+\"<div class=\\\"datagrid-footer\\\">\"+\"<div class=\\\"datagrid-footer-inner\\\"></div>\"+\"</div>\"+\"</div>\"+\"</div>\"+\"</div>\").insertAfter(_4f);\n_55.panel({doSize:false,cls:\"datagrid\"});\n$(_4f).addClass(\"datagrid-f\").hide().appendTo(_55.children(\"div.datagrid-view\"));\nvar cc=_51();\nvar _56=_55.children(\"div.datagrid-view\");\nvar _57=_56.children(\"div.datagrid-view1\");\nvar _58=_56.children(\"div.datagrid-view2\");\nreturn {panel:_55,frozenColumns:cc[0],columns:cc[1],dc:{view:_56,view1:_57,view2:_58,header1:_57.children(\"div.datagrid-header\").children(\"div.datagrid-header-inner\"),header2:_58.children(\"div.datagrid-header\").children(\"div.datagrid-header-inner\"),body1:_57.children(\"div.datagrid-body\").children(\"div.datagrid-body-inner\"),body2:_58.children(\"div.datagrid-body\"),footer1:_57.children(\"div.datagrid-footer\").children(\"div.datagrid-footer-inner\"),footer2:_58.children(\"div.datagrid-footer\").children(\"div.datagrid-footer-inner\")}};\n};\nfunction _59(_5a){\nvar _5b=$.data(_5a,\"datagrid\");\nvar _5c=_5b.options;\nvar dc=_5b.dc;\nvar _5d=_5b.panel;\n_5b.ss=$(_5a).datagrid(\"createStyleSheet\");\n_5d.panel($.extend({},_5c,{id:null,doSize:false,onResize:function(_5e,_5f){\nif($.data(_5a,\"datagrid\")){\n_20(_5a);\n$(_5a).datagrid(\"fitColumns\");\n_5c.onResize.call(_5d,_5e,_5f);\n}\n},onExpand:function(){\nif($.data(_5a,\"datagrid\")){\n$(_5a).datagrid(\"fixRowHeight\").datagrid(\"fitColumns\");\n_5c.onExpand.call(_5d);\n}\n}}));\nvar _60=$(_5a).attr(\"id\")||\"\";\nif(_60){\n_60+=\"_\";\n}\n_5b.rowIdPrefix=_60+\"datagrid-row-r\"+(++_1);\n_5b.cellClassPrefix=_60+\"datagrid-cell-c\"+_1;\n_61(dc.header1,_5c.frozenColumns,true);\n_61(dc.header2,_5c.columns,false);\n_62();\ndc.header1.add(dc.header2).css(\"display\",_5c.showHeader?\"block\":\"none\");\ndc.footer1.add(dc.footer2).css(\"display\",_5c.showFooter?\"block\":\"none\");\nif(_5c.toolbar){\nif($.isArray(_5c.toolbar)){\n$(\"div.datagrid-toolbar\",_5d).remove();\nvar tb=$(\"<div class=\\\"datagrid-toolbar\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"><tr></tr></table></div>\").prependTo(_5d);\nvar tr=tb.find(\"tr\");\nfor(var i=0;i<_5c.toolbar.length;i++){\nvar btn=_5c.toolbar[i];\nif(btn==\"-\"){\n$(\"<td><div class=\\\"datagrid-btn-separator\\\"></div></td>\").appendTo(tr);\n}else{\nvar td=$(\"<td></td>\").appendTo(tr);\nvar _63=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(td);\n_63[0].onclick=eval(btn.handler||function(){\n});\n_63.linkbutton($.extend({},btn,{plain:true}));\n}\n}\n}else{\n$(_5c.toolbar).addClass(\"datagrid-toolbar\").prependTo(_5d);\n$(_5c.toolbar).show();\n}\n}else{\n$(\"div.datagrid-toolbar\",_5d).remove();\n}\n$(\"div.datagrid-pager\",_5d).remove();\nif(_5c.pagination){\nvar _64=$(\"<div class=\\\"datagrid-pager\\\"></div>\");\nif(_5c.pagePosition==\"bottom\"){\n_64.appendTo(_5d);\n}else{\nif(_5c.pagePosition==\"top\"){\n_64.addClass(\"datagrid-pager-top\").prependTo(_5d);\n}else{\nvar _65=$(\"<div class=\\\"datagrid-pager datagrid-pager-top\\\"></div>\").prependTo(_5d);\n_64.appendTo(_5d);\n_64=_64.add(_65);\n}\n}\n_64.pagination({total:0,pageNumber:_5c.pageNumber,pageSize:_5c.pageSize,pageList:_5c.pageList,onSelectPage:function(_66,_67){\n_5c.pageNumber=_66||1;\n_5c.pageSize=_67;\n_64.pagination(\"refresh\",{pageNumber:_66,pageSize:_67});\n_c1(_5a);\n}});\n_5c.pageSize=_64.pagination(\"options\").pageSize;\n}\nfunction _61(_68,_69,_6a){\nif(!_69){\nreturn;\n}\n$(_68).show();\n$(_68).empty();\nvar tmp=$(\"<div class=\\\"datagrid-cell\\\" style=\\\"position:absolute;left:-99999px\\\"></div>\").appendTo(\"body\");\ntmp._outerWidth(99);\nvar _6b=100-parseInt(tmp[0].style.width);\ntmp.remove();\nvar _6c=[];\nvar _6d=[];\nvar _6e=[];\nif(_5c.sortName){\n_6c=_5c.sortName.split(\",\");\n_6d=_5c.sortOrder.split(\",\");\n}\nvar t=$(\"<table class=\\\"datagrid-htable\\\" border=\\\"0\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"><tbody></tbody></table>\").appendTo(_68);\nfor(var i=0;i<_69.length;i++){\nvar tr=$(\"<tr class=\\\"datagrid-header-row\\\"></tr>\").appendTo($(\"tbody\",t));\nvar _6f=_69[i];\nfor(var j=0;j<_6f.length;j++){\nvar col=_6f[j];\nvar _70=\"\";\nif(col.rowspan){\n_70+=\"rowspan=\\\"\"+col.rowspan+\"\\\" \";\n}\nif(col.colspan){\n_70+=\"colspan=\\\"\"+col.colspan+\"\\\" \";\nif(!col.id){\ncol.id=[\"datagrid-td-group\"+_1,i,j].join(\"-\");\n}\n}\nif(col.id){\n_70+=\"id=\\\"\"+col.id+\"\\\"\";\n}\nvar td=$(\"<td \"+_70+\"></td>\").appendTo(tr);\nif(col.checkbox){\ntd.attr(\"field\",col.field);\n$(\"<div class=\\\"datagrid-header-check\\\"></div>\").html(\"<input type=\\\"checkbox\\\"/>\").appendTo(td);\n}else{\nif(col.field){\ntd.attr(\"field\",col.field);\ntd.append(\"<div class=\\\"datagrid-cell\\\"><span></span><span class=\\\"datagrid-sort-icon\\\"></span></div>\");\ntd.find(\"span:first\").html(col.title);\nvar _71=td.find(\"div.datagrid-cell\");\nvar pos=_2(_6c,col.field);\nif(pos>=0){\n_71.addClass(\"datagrid-sort-\"+_6d[pos]);\n}\nif(col.sortable){\n_71.addClass(\"datagrid-sort\");\n}\nif(col.resizable==false){\n_71.attr(\"resizable\",\"false\");\n}\nif(col.width){\nvar _72=$.parser.parseValue(\"width\",col.width,dc.view,_5c.scrollbarSize+(_5c.rownumbers?_5c.rownumberWidth:0));\ncol.deltaWidth=_6b;\ncol.boxWidth=_72-_6b;\n}else{\ncol.auto=true;\n}\n_71.css(\"text-align\",(col.halign||col.align||\"\"));\ncol.cellClass=_5b.cellClassPrefix+\"-\"+col.field.replace(/[\\.|\\s]/g,\"-\");\n_71.addClass(col.cellClass);\n}else{\n$(\"<div class=\\\"datagrid-cell-group\\\"></div>\").html(col.title).appendTo(td);\n}\n}\nif(col.hidden){\ntd.hide();\n_6e.push(col.field);\n}\n}\n}\nif(_6a&&_5c.rownumbers){\nvar td=$(\"<td rowspan=\\\"\"+_5c.frozenColumns.length+\"\\\"><div class=\\\"datagrid-header-rownumber\\\"></div></td>\");\nif($(\"tr\",t).length==0){\ntd.wrap(\"<tr class=\\\"datagrid-header-row\\\"></tr>\").parent().appendTo($(\"tbody\",t));\n}else{\ntd.prependTo($(\"tr:first\",t));\n}\n}\nfor(var i=0;i<_6e.length;i++){\n_c3(_5a,_6e[i],-1);\n}\n};\nfunction _62(){\nvar _73=[[\".datagrid-header-rownumber\",(_5c.rownumberWidth-1)+\"px\"],[\".datagrid-cell-rownumber\",(_5c.rownumberWidth-1)+\"px\"]];\nvar _74=_75(_5a,true).concat(_75(_5a));\nfor(var i=0;i<_74.length;i++){\nvar col=_76(_5a,_74[i]);\nif(col&&!col.checkbox){\n_73.push([\".\"+col.cellClass,col.boxWidth?col.boxWidth+\"px\":\"auto\"]);\n}\n}\n_5b.ss.add(_73);\n_5b.ss.dirty(_5b.cellSelectorPrefix);\n_5b.cellSelectorPrefix=\".\"+_5b.cellClassPrefix;\n};\n};\nfunction _77(_78){\nvar _79=$.data(_78,\"datagrid\");\nvar _7a=_79.panel;\nvar _7b=_79.options;\nvar dc=_79.dc;\nvar _7c=dc.header1.add(dc.header2);\n_7c._unbind(\".datagrid\");\nfor(var _7d in _7b.headerEvents){\n_7c._bind(_7d+\".datagrid\",_7b.headerEvents[_7d]);\n}\nvar _7e=_7c.find(\"div.datagrid-cell\");\nvar _7f=_7b.resizeHandle==\"right\"?\"e\":(_7b.resizeHandle==\"left\"?\"w\":\"e,w\");\n_7e.each(function(){\n$(this).resizable({handles:_7f,edge:_7b.resizeEdge,disabled:($(this).attr(\"resizable\")?$(this).attr(\"resizable\")==\"false\":false),minWidth:25,onStartResize:function(e){\n_79.resizing=true;\n_7c.css(\"cursor\",$(\"body\").css(\"cursor\"));\nif(!_79.proxy){\n_79.proxy=$(\"<div class=\\\"datagrid-resize-proxy\\\"></div>\").appendTo(dc.view);\n}\nif(e.data.dir==\"e\"){\ne.data.deltaEdge=$(this)._outerWidth()-(e.pageX-$(this).offset().left);\n}else{\ne.data.deltaEdge=$(this).offset().left-e.pageX-1;\n}\n_79.proxy.css({left:e.pageX-$(_7a).offset().left-1+e.data.deltaEdge,display:\"none\"});\nsetTimeout(function(){\nif(_79.proxy){\n_79.proxy.show();\n}\n},500);\n},onResize:function(e){\n_79.proxy.css({left:e.pageX-$(_7a).offset().left-1+e.data.deltaEdge,display:\"block\"});\nreturn false;\n},onStopResize:function(e){\n_7c.css(\"cursor\",\"\");\n$(this).css(\"height\",\"\");\nvar _80=$(this).parent().attr(\"field\");\nvar col=_76(_78,_80);\ncol.width=$(this)._outerWidth()+1;\ncol.boxWidth=col.width-col.deltaWidth;\ncol.auto=undefined;\n$(this).css(\"width\",\"\");\n$(_78).datagrid(\"fixColumnSize\",_80);\n_79.proxy.remove();\n_79.proxy=null;\nif($(this).parents(\"div:first.datagrid-header\").parent().hasClass(\"datagrid-view1\")){\n_20(_78);\n}\n$(_78).datagrid(\"fitColumns\");\n_7b.onResizeColumn.call(_78,_80,col.width);\nsetTimeout(function(){\n_79.resizing=false;\n},0);\n}});\n});\nvar bb=dc.body1.add(dc.body2);\nbb._unbind();\nfor(var _7d in _7b.rowEvents){\nbb._bind(_7d,_7b.rowEvents[_7d]);\n}\ndc.body1._bind(\"mousewheel DOMMouseScroll MozMousePixelScroll\",function(e){\ne.preventDefault();\nvar e1=e.originalEvent||window.event;\nvar _81=e1.wheelDelta||e1.detail*(-1);\nif(\"deltaY\" in e1){\n_81=e1.deltaY*-1;\n}\nvar dg=$(e.target).closest(\"div.datagrid-view\").children(\".datagrid-f\");\nvar dc=dg.data(\"datagrid\").dc;\ndc.body2.scrollTop(dc.body2.scrollTop()-_81);\n});\ndc.body2._bind(\"scroll\",function(){\nvar b1=dc.view1.children(\"div.datagrid-body\");\nvar stv=$(this).scrollTop();\n$(this).scrollTop(stv);\nb1.scrollTop(stv);\nvar c1=dc.body1.children(\":first\");\nvar c2=dc.body2.children(\":first\");\nif(c1.length&&c2.length){\nvar _82=c1.offset().top;\nvar _83=c2.offset().top;\nif(_82!=_83){\nb1.scrollTop(b1.scrollTop()+_82-_83);\n}\n}\ndc.view2.children(\"div.datagrid-header,div.datagrid-footer\")._scrollLeft($(this)._scrollLeft());\ndc.body2.children(\"table.datagrid-btable-frozen\").css(\"left\",-$(this)._scrollLeft());\n});\n};\nfunction _84(_85){\nreturn function(e){\nvar td=$(e.target).closest(\"td[field]\");\nif(td.length){\nvar _86=_87(td);\nif(!$(_86).data(\"datagrid\").resizing&&_85){\ntd.addClass(\"datagrid-header-over\");\n}else{\ntd.removeClass(\"datagrid-header-over\");\n}\n}\n};\n};\nfunction _88(e){\nvar _89=_87(e.target);\nvar _8a=$(_89).datagrid(\"options\");\nvar ck=$(e.target).closest(\"input[type=checkbox]\");\nif(ck.length){\nif(_8a.singleSelect&&_8a.selectOnCheck){\nreturn false;\n}\nif(ck.is(\":checked\")){\n_8b(_89);\n}else{\n_8c(_89);\n}\ne.stopPropagation();\n}else{\nvar _8d=$(e.target).closest(\".datagrid-cell\");\nif(_8d.length){\nvar p1=_8d.offset().left+5;\nvar p2=_8d.offset().left+_8d._outerWidth()-5;\nif(e.pageX<p2&&e.pageX>p1){\n_8e(_89,_8d.parent().attr(\"field\"));\n}\n}\n}\n};\nfunction _8f(e){\nvar _90=_87(e.target);\nvar _91=$(_90).datagrid(\"options\");\nvar _92=$(e.target).closest(\".datagrid-cell\");\nif(_92.length){\nvar p1=_92.offset().left+5;\nvar p2=_92.offset().left+_92._outerWidth()-5;\nvar _93=_91.resizeHandle==\"right\"?(e.pageX>p2):(_91.resizeHandle==\"left\"?(e.pageX<p1):(e.pageX<p1||e.pageX>p2));\nif(_93){\nvar _94=_92.parent().attr(\"field\");\nvar col=_76(_90,_94);\nif(col.resizable==false){\nreturn;\n}\n$(_90).datagrid(\"autoSizeColumn\",_94);\ncol.auto=false;\n}\n}\n};\nfunction _95(e){\nvar _96=_87(e.target);\nvar _97=$(_96).datagrid(\"options\");\nvar td=$(e.target).closest(\"td[field]\");\n_97.onHeaderContextMenu.call(_96,e,td.attr(\"field\"));\n};\nfunction _98(_99){\nreturn function(e){\nvar tr=_9a(e.target);\nif(!tr){\nreturn;\n}\nvar _9b=_87(tr);\nif($.data(_9b,\"datagrid\").resizing){\nreturn;\n}\nvar _9c=_9d(tr);\nif(_99){\n_9e(_9b,_9c);\n}else{\nvar _9f=$.data(_9b,\"datagrid\").options;\n_9f.finder.getTr(_9b,_9c).removeClass(\"datagrid-row-over\");\n}\n};\n};\nfunction _a0(e){\nvar tr=_9a(e.target);\nif(!tr){\nreturn;\n}\nvar _a1=_87(tr);\nvar _a2=$.data(_a1,\"datagrid\").options;\nvar _a3=_9d(tr);\nvar tt=$(e.target);\nif(tt.parent().hasClass(\"datagrid-cell-check\")){\nif(_a2.singleSelect&&_a2.selectOnCheck){\ntt._propAttr(\"checked\",!tt.is(\":checked\"));\n_a4(_a1,_a3);\n}else{\nif(tt.is(\":checked\")){\ntt._propAttr(\"checked\",false);\n_a4(_a1,_a3);\n}else{\ntt._propAttr(\"checked\",true);\n_a5(_a1,_a3);\n}\n}\n}else{\nvar row=_a2.finder.getRow(_a1,_a3);\nvar td=tt.closest(\"td[field]\",tr);\nif(td.length){\nvar _a6=td.attr(\"field\");\n_a2.onClickCell.call(_a1,_a3,_a6,row[_a6]);\n}\nif(_a2.singleSelect==true){\n_a7(_a1,_a3);\n}else{\nif(_a2.ctrlSelect){\nif(e.metaKey||e.ctrlKey){\nif(tr.hasClass(\"datagrid-row-selected\")){\n_a8(_a1,_a3);\n}else{\n_a7(_a1,_a3);\n}\n}else{\nif(e.shiftKey){\n$(_a1).datagrid(\"clearSelections\");\nvar _a9=Math.min(_a2.lastSelectedIndex||0,_a3);\nvar _aa=Math.max(_a2.lastSelectedIndex||0,_a3);\nfor(var i=_a9;i<=_aa;i++){\n_a7(_a1,i);\n}\n}else{\n$(_a1).datagrid(\"clearSelections\");\n_a7(_a1,_a3);\n_a2.lastSelectedIndex=_a3;\n}\n}\n}else{\nif(tr.hasClass(\"datagrid-row-selected\")){\n_a8(_a1,_a3);\n}else{\n_a7(_a1,_a3);\n}\n}\n}\n_a2.onClickRow.apply(_a1,_5(_a1,[_a3,row]));\n}\n};\nfunction _ab(e){\nvar tr=_9a(e.target);\nif(!tr){\nreturn;\n}\nvar _ac=_87(tr);\nvar _ad=$.data(_ac,\"datagrid\").options;\nvar _ae=_9d(tr);\nvar row=_ad.finder.getRow(_ac,_ae);\nvar td=$(e.target).closest(\"td[field]\",tr);\nif(td.length){\nvar _af=td.attr(\"field\");\n_ad.onDblClickCell.call(_ac,_ae,_af,row[_af]);\n}\n_ad.onDblClickRow.apply(_ac,_5(_ac,[_ae,row]));\n};\nfunction _b0(e){\nvar tr=_9a(e.target);\nif(tr){\nvar _b1=_87(tr);\nvar _b2=$.data(_b1,\"datagrid\").options;\nvar _b3=_9d(tr);\nvar row=_b2.finder.getRow(_b1,_b3);\n_b2.onRowContextMenu.call(_b1,e,_b3,row);\n}else{\nvar _b4=_9a(e.target,\".datagrid-body\");\nif(_b4){\nvar _b1=_87(_b4);\nvar _b2=$.data(_b1,\"datagrid\").options;\n_b2.onRowContextMenu.call(_b1,e,-1,null);\n}\n}\n};\nfunction _87(t){\nreturn $(t).closest(\"div.datagrid-view\").children(\".datagrid-f\")[0];\n};\nfunction _9a(t,_b5){\nvar tr=$(t).closest(_b5||\"tr.datagrid-row\");\nif(tr.length&&tr.parent().length){\nreturn tr;\n}else{\nreturn undefined;\n}\n};\nfunction _9d(tr){\nif(tr.attr(\"datagrid-row-index\")){\nreturn parseInt(tr.attr(\"datagrid-row-index\"));\n}else{\nreturn tr.attr(\"node-id\");\n}\n};\nfunction _8e(_b6,_b7){\nvar _b8=$.data(_b6,\"datagrid\");\nvar _b9=_b8.options;\n_b7=_b7||{};\nvar _ba={sortName:_b9.sortName,sortOrder:_b9.sortOrder};\nif(typeof _b7==\"object\"){\n$.extend(_ba,_b7);\n}\nvar _bb=[];\nvar _bc=[];\nif(_ba.sortName){\n_bb=_ba.sortName.split(\",\");\n_bc=_ba.sortOrder.split(\",\");\n}\nif(typeof _b7==\"string\"){\nvar _bd=_b7;\nvar col=_76(_b6,_bd);\nif(!col.sortable||_b8.resizing){\nreturn;\n}\nvar _be=col.order||\"asc\";\nvar pos=_2(_bb,_bd);\nif(pos>=0){\nvar _bf=_bc[pos]==\"asc\"?\"desc\":\"asc\";\nif(_b9.multiSort&&_bf==_be){\n_bb.splice(pos,1);\n_bc.splice(pos,1);\n}else{\n_bc[pos]=_bf;\n}\n}else{\nif(_b9.multiSort){\n_bb.push(_bd);\n_bc.push(_be);\n}else{\n_bb=[_bd];\n_bc=[_be];\n}\n}\n_ba.sortName=_bb.join(\",\");\n_ba.sortOrder=_bc.join(\",\");\n}\nif(_b9.onBeforeSortColumn.call(_b6,_ba.sortName,_ba.sortOrder)==false){\nreturn;\n}\n$.extend(_b9,_ba);\nvar dc=_b8.dc;\nvar _c0=dc.header1.add(dc.header2);\n_c0.find(\"div.datagrid-cell\").removeClass(\"datagrid-sort-asc datagrid-sort-desc\");\nfor(var i=0;i<_bb.length;i++){\nvar col=_76(_b6,_bb[i]);\n_c0.find(\"div.\"+col.cellClass).addClass(\"datagrid-sort-\"+_bc[i]);\n}\nif(_b9.remoteSort){\n_c1(_b6);\n}else{\n_c2(_b6,$(_b6).datagrid(\"getData\"));\n}\n_b9.onSortColumn.call(_b6,_b9.sortName,_b9.sortOrder);\n};\nfunction _c3(_c4,_c5,_c6){\n_c7(true);\n_c7(false);\nfunction _c7(_c8){\nvar aa=_c9(_c4,_c8);\nif(aa.length){\nvar _ca=aa[aa.length-1];\nvar _cb=_2(_ca,_c5);\nif(_cb>=0){\nfor(var _cc=0;_cc<aa.length-1;_cc++){\nvar td=$(\"#\"+aa[_cc][_cb]);\nvar _cd=parseInt(td.attr(\"colspan\")||1)+(_c6||0);\ntd.attr(\"colspan\",_cd);\nif(_cd){\ntd.show();\n}else{\ntd.hide();\n}\n}\n}\n}\n};\n};\nfunction _ce(_cf){\nvar _d0=$.data(_cf,\"datagrid\");\nvar _d1=_d0.options;\nvar dc=_d0.dc;\nvar _d2=dc.view2.children(\"div.datagrid-header\");\nvar _d3=_d2.children(\"div.datagrid-header-inner\");\ndc.body2.css(\"overflow-x\",\"\");\n_d4();\n_d5();\n_d6();\n_d4(true);\n_d3.show();\nif(_d2.width()>=_d2.find(\"table\").width()){\ndc.body2.css(\"overflow-x\",\"hidden\");\n}\nif(!_d1.showHeader){\n_d3.hide();\n}\nfunction _d6(){\nif(!_d1.fitColumns){\nreturn;\n}\nif(!_d0.leftWidth){\n_d0.leftWidth=0;\n}\nvar _d7=0;\nvar cc=[];\nvar _d8=_75(_cf,false);\nfor(var i=0;i<_d8.length;i++){\nvar col=_76(_cf,_d8[i]);\nif(_d9(col)){\n_d7+=col.width;\ncc.push({field:col.field,col:col,addingWidth:0});\n}\n}\nif(!_d7){\nreturn;\n}\ncc[cc.length-1].addingWidth-=_d0.leftWidth;\n_d3.show();\nvar _da=_d2.width()-_d2.find(\"table\").width()-_d1.scrollbarSize+_d0.leftWidth;\nvar _db=_da/_d7;\nif(!_d1.showHeader){\n_d3.hide();\n}\nfor(var i=0;i<cc.length;i++){\nvar c=cc[i];\nvar _dc=parseInt(c.col.width*_db);\nc.addingWidth+=_dc;\n_da-=_dc;\n}\ncc[cc.length-1].addingWidth+=_da;\nfor(var i=0;i<cc.length;i++){\nvar c=cc[i];\nif(c.col.boxWidth+c.addingWidth>0){\nc.col.boxWidth+=c.addingWidth;\nc.col.width+=c.addingWidth;\n}\n}\n_d0.leftWidth=_da;\n$(_cf).datagrid(\"fixColumnSize\");\n};\nfunction _d5(){\nvar _dd=false;\nvar _de=_75(_cf,true).concat(_75(_cf,false));\n$.map(_de,function(_df){\nvar col=_76(_cf,_df);\nif(String(col.width||\"\").indexOf(\"%\")>=0){\nvar _e0=$.parser.parseValue(\"width\",col.width,dc.view,_d1.scrollbarSize+(_d1.rownumbers?_d1.rownumberWidth:0))-col.deltaWidth;\nif(_e0>0){\ncol.boxWidth=_e0;\n_dd=true;\n}\n}\n});\nif(_dd){\n$(_cf).datagrid(\"fixColumnSize\");\n}\n};\nfunction _d4(fit){\nvar _e1=dc.header1.add(dc.header2).find(\".datagrid-cell-group\");\nif(_e1.length){\n_e1.each(function(){\n$(this)._outerWidth(fit?$(this).parent().width():10);\n});\nif(fit){\n_20(_cf);\n}\n}\n};\nfunction _d9(col){\nif(String(col.width||\"\").indexOf(\"%\")>=0){\nreturn false;\n}\nif(!col.hidden&&!col.checkbox&&!col.auto&&!col.fixed){\nreturn true;\n}\n};\n};\nfunction _e2(_e3,_e4){\nvar _e5=$.data(_e3,\"datagrid\");\nvar _e6=_e5.options;\nvar dc=_e5.dc;\nvar tmp=$(\"<div class=\\\"datagrid-cell\\\" style=\\\"position:absolute;left:-9999px\\\"></div>\").appendTo(\"body\");\nif(_e4){\n_1a(_e4);\n$(_e3).datagrid(\"fitColumns\");\n}else{\nvar _e7=false;\nvar _e8=_75(_e3,true).concat(_75(_e3,false));\nfor(var i=0;i<_e8.length;i++){\nvar _e4=_e8[i];\nvar col=_76(_e3,_e4);\nif(col.auto){\n_1a(_e4);\n_e7=true;\n}\n}\nif(_e7){\n$(_e3).datagrid(\"fitColumns\");\n}\n}\ntmp.remove();\nfunction _1a(_e9){\nvar _ea=dc.view.find(\"div.datagrid-header td[field=\\\"\"+_e9+\"\\\"] div.datagrid-cell\");\n_ea.css(\"width\",\"\");\nvar col=$(_e3).datagrid(\"getColumnOption\",_e9);\ncol.width=undefined;\ncol.boxWidth=undefined;\ncol.auto=true;\n$(_e3).datagrid(\"fixColumnSize\",_e9);\nvar _eb=Math.max(_ec(\"header\"),_ec(\"allbody\"),_ec(\"allfooter\"))+1;\n_ea._outerWidth(_eb-1);\ncol.width=_eb;\ncol.boxWidth=parseInt(_ea[0].style.width);\ncol.deltaWidth=_eb-col.boxWidth;\n_ea.css(\"width\",\"\");\n$(_e3).datagrid(\"fixColumnSize\",_e9);\n_e6.onResizeColumn.call(_e3,_e9,col.width);\nfunction _ec(_ed){\nvar _ee=0;\nif(_ed==\"header\"){\n_ee=_ef(_ea);\n}else{\n_e6.finder.getTr(_e3,0,_ed).find(\"td[field=\\\"\"+_e9+\"\\\"] div.datagrid-cell\").each(function(){\nvar w=_ef($(this));\nif(_ee<w){\n_ee=w;\n}\n});\n}\nreturn _ee;\nfunction _ef(_f0){\nreturn _f0.is(\":visible\")?_f0._outerWidth():tmp.html(_f0.html())._outerWidth();\n};\n};\n};\n};\nfunction _f1(_f2,_f3){\nvar _f4=$.data(_f2,\"datagrid\");\nvar _f5=_f4.options;\nvar dc=_f4.dc;\nvar _f6=dc.view.find(\"table.datagrid-btable,table.datagrid-ftable\");\n_f6.css(\"table-layout\",\"fixed\");\nif(_f3){\nfix(_f3);\n}else{\nvar ff=_75(_f2,true).concat(_75(_f2,false));\nfor(var i=0;i<ff.length;i++){\nfix(ff[i]);\n}\n}\n_f6.css(\"table-layout\",\"\");\n_f7(_f2);\n_34(_f2);\n_f8(_f2);\nfunction fix(_f9){\nvar col=_76(_f2,_f9);\nif(col.cellClass){\n_f4.ss.set(\".\"+col.cellClass,col.boxWidth?col.boxWidth+\"px\":\"auto\");\n}\n};\n};\nfunction _f7(_fa,tds){\nvar dc=$.data(_fa,\"datagrid\").dc;\ntds=tds||dc.view.find(\"td.datagrid-td-merged\");\ntds.each(function(){\nvar td=$(this);\nvar _fb=td.attr(\"colspan\")||1;\nif(_fb>1){\nvar col=_76(_fa,td.attr(\"field\"));\nvar _fc=col.boxWidth+col.deltaWidth-1;\nfor(var i=1;i<_fb;i++){\ntd=td.next();\ncol=_76(_fa,td.attr(\"field\"));\n_fc+=col.boxWidth+col.deltaWidth;\n}\n$(this).children(\"div.datagrid-cell\")._outerWidth(_fc);\n}\n});\n};\nfunction _f8(_fd){\nvar dc=$.data(_fd,\"datagrid\").dc;\ndc.view.find(\"div.datagrid-editable\").each(function(){\nvar _fe=$(this);\nvar _ff=_fe.parent().attr(\"field\");\nvar col=$(_fd).datagrid(\"getColumnOption\",_ff);\n_fe._outerWidth(col.boxWidth+col.deltaWidth-1);\nvar ed=$.data(this,\"datagrid.editor\");\nif(ed.actions.resize){\ned.actions.resize(ed.target,_fe.width());\n}\n});\n};\nfunction _76(_100,_101){\nfunction find(_102){\nif(_102){\nfor(var i=0;i<_102.length;i++){\nvar cc=_102[i];\nfor(var j=0;j<cc.length;j++){\nvar c=cc[j];\nif(c.field==_101){\nreturn c;\n}\n}\n}\n}\nreturn null;\n};\nvar opts=$.data(_100,\"datagrid\").options;\nvar col=find(opts.columns);\nif(!col){\ncol=find(opts.frozenColumns);\n}\nreturn col;\n};\nfunction _c9(_103,_104){\nvar opts=$.data(_103,\"datagrid\").options;\nvar _105=_104?opts.frozenColumns:opts.columns;\nvar aa=[];\nvar _106=_107();\nfor(var i=0;i<_105.length;i++){\naa[i]=new Array(_106);\n}\nfor(var _108=0;_108<_105.length;_108++){\n$.map(_105[_108],function(col){\nvar _109=_10a(aa[_108]);\nif(_109>=0){\nvar _10b=col.field||col.id||\"\";\nfor(var c=0;c<(col.colspan||1);c++){\nfor(var r=0;r<(col.rowspan||1);r++){\naa[_108+r][_109]=_10b;\n}\n_109++;\n}\n}\n});\n}\nreturn aa;\nfunction _107(){\nvar _10c=0;\n$.map(_105[0]||[],function(col){\n_10c+=col.colspan||1;\n});\nreturn _10c;\n};\nfunction _10a(a){\nfor(var i=0;i<a.length;i++){\nif(a[i]==undefined){\nreturn i;\n}\n}\nreturn -1;\n};\n};\nfunction _75(_10d,_10e){\nvar aa=_c9(_10d,_10e);\nreturn aa.length?aa[aa.length-1]:aa;\n};\nfunction _c2(_10f,data){\nvar _110=$.data(_10f,\"datagrid\");\nvar opts=_110.options;\nvar dc=_110.dc;\ndata=opts.loadFilter.call(_10f,data);\nif($.isArray(data)){\ndata={total:data.length,rows:data};\n}\ndata.total=parseInt(data.total);\n_110.data=data;\nif(data.footer){\n_110.footer=data.footer;\n}\nif(!opts.remoteSort&&opts.sortName){\nvar _111=opts.sortName.split(\",\");\nvar _112=opts.sortOrder.split(\",\");\ndata.rows.sort(function(r1,r2){\nvar r=0;\nfor(var i=0;i<_111.length;i++){\nvar sn=_111[i];\nvar so=_112[i];\nvar col=_76(_10f,sn);\nvar _113=col.sorter||function(a,b){\nreturn a==b?0:(a>b?1:-1);\n};\nr=_113(r1[sn],r2[sn],r1,r2)*(so==\"asc\"?1:-1);\nif(r!=0){\nreturn r;\n}\n}\nreturn r;\n});\n}\nif(opts.view.onBeforeRender){\nopts.view.onBeforeRender.call(opts.view,_10f,data.rows);\n}\nopts.view.render.call(opts.view,_10f,dc.body2,false);\nopts.view.render.call(opts.view,_10f,dc.body1,true);\nif(opts.showFooter){\nopts.view.renderFooter.call(opts.view,_10f,dc.footer2,false);\nopts.view.renderFooter.call(opts.view,_10f,dc.footer1,true);\n}\nif(opts.view.onAfterRender){\nopts.view.onAfterRender.call(opts.view,_10f);\n}\n_110.ss.clean();\nvar _114=$(_10f).datagrid(\"getPager\");\nif(_114.length){\nvar _115=_114.pagination(\"options\");\nif(_115.total!=data.total){\n_114.pagination(\"refresh\",{pageNumber:opts.pageNumber,total:data.total});\nif(opts.pageNumber!=_115.pageNumber&&_115.pageNumber>0){\nopts.pageNumber=_115.pageNumber;\n_c1(_10f);\n}\n}\n}\n_34(_10f);\ndc.body2.triggerHandler(\"scroll\");\n$(_10f).datagrid(\"setSelectionState\");\n$(_10f).datagrid(\"autoSizeColumn\");\nopts.onLoadSuccess.call(_10f,data);\n};\nfunction _116(_117){\nvar _118=$.data(_117,\"datagrid\");\nvar opts=_118.options;\nvar dc=_118.dc;\ndc.header1.add(dc.header2).find(\"input[type=checkbox]\")._propAttr(\"checked\",false);\nif(opts.idField){\nvar _119=$.data(_117,\"treegrid\")?true:false;\nvar _11a=opts.onSelect;\nvar _11b=opts.onCheck;\nopts.onSelect=opts.onCheck=function(){\n};\nvar rows=opts.finder.getRows(_117);\nfor(var i=0;i<rows.length;i++){\nvar row=rows[i];\nvar _11c=_119?row[opts.idField]:$(_117).datagrid(\"getRowIndex\",row[opts.idField]);\nif(_11d(_118.selectedRows,row)){\n_a7(_117,_11c,true,true);\n}\nif(_11d(_118.checkedRows,row)){\n_a4(_117,_11c,true);\n}\n}\nopts.onSelect=_11a;\nopts.onCheck=_11b;\n}\nfunction _11d(a,r){\nfor(var i=0;i<a.length;i++){\nif(a[i][opts.idField]==r[opts.idField]){\na[i]=r;\nreturn true;\n}\n}\nreturn false;\n};\n};\nfunction _11e(_11f,row){\nvar _120=$.data(_11f,\"datagrid\");\nvar opts=_120.options;\nvar rows=_120.data.rows;\nif(typeof row==\"object\"){\nreturn _2(rows,row);\n}else{\nfor(var i=0;i<rows.length;i++){\nif(rows[i][opts.idField]==row){\nreturn i;\n}\n}\nreturn -1;\n}\n};\nfunction _121(_122){\nvar _123=$.data(_122,\"datagrid\");\nvar opts=_123.options;\nvar data=_123.data;\nif(opts.idField){\nreturn _123.selectedRows;\n}else{\nvar rows=[];\nopts.finder.getTr(_122,\"\",\"selected\",2).each(function(){\nrows.push(opts.finder.getRow(_122,$(this)));\n});\nreturn rows;\n}\n};\nfunction _124(_125){\nvar _126=$.data(_125,\"datagrid\");\nvar opts=_126.options;\nif(opts.idField){\nreturn _126.checkedRows;\n}else{\nvar rows=[];\nopts.finder.getTr(_125,\"\",\"checked\",2).each(function(){\nrows.push(opts.finder.getRow(_125,$(this)));\n});\nreturn rows;\n}\n};\nfunction _127(_128,_129){\nvar _12a=$.data(_128,\"datagrid\");\nvar dc=_12a.dc;\nvar opts=_12a.options;\nvar tr=opts.finder.getTr(_128,_129);\nif(tr.length){\nif(tr.closest(\"table\").hasClass(\"datagrid-btable-frozen\")){\nreturn;\n}\nvar _12b=dc.view2.children(\"div.datagrid-header\")._outerHeight();\nvar _12c=dc.body2;\nvar _12d=opts.scrollbarSize;\nif(_12c[0].offsetHeight&&_12c[0].clientHeight&&_12c[0].offsetHeight<=_12c[0].clientHeight){\n_12d=0;\n}\nvar _12e=_12c.outerHeight(true)-_12c.outerHeight();\nvar top=tr.offset().top-dc.view2.offset().top-_12b-_12e;\nif(top<0){\n_12c.scrollTop(_12c.scrollTop()+top);\n}else{\nif(top+tr._outerHeight()>_12c.height()-_12d){\n_12c.scrollTop(_12c.scrollTop()+top+tr._outerHeight()-_12c.height()+_12d);\n}\n}\n}\n};\nfunction _9e(_12f,_130){\nvar _131=$.data(_12f,\"datagrid\");\nvar opts=_131.options;\nopts.finder.getTr(_12f,_131.highlightIndex).removeClass(\"datagrid-row-over\");\nopts.finder.getTr(_12f,_130).addClass(\"datagrid-row-over\");\n_131.highlightIndex=_130;\n};\nfunction _a7(_132,_133,_134,_135){\nvar _136=$.data(_132,\"datagrid\");\nvar opts=_136.options;\nvar row=opts.finder.getRow(_132,_133);\nif(!row){\nreturn;\n}\nif(opts.onBeforeSelect.apply(_132,_5(_132,[_133,row]))==false){\nreturn;\n}\nif(opts.singleSelect){\n_137(_132,true);\n_136.selectedRows=[];\n}\nif(!_134&&opts.checkOnSelect){\n_a4(_132,_133,true);\n}\nif(opts.idField){\n_4(_136.selectedRows,opts.idField,row);\n}\nopts.finder.getTr(_132,_133).addClass(\"datagrid-row-selected\");\nopts.onSelect.apply(_132,_5(_132,[_133,row]));\nif(!_135&&opts.scrollOnSelect){\n_127(_132,_133);\n}\n};\nfunction _a8(_138,_139,_13a){\nvar _13b=$.data(_138,\"datagrid\");\nvar dc=_13b.dc;\nvar opts=_13b.options;\nvar row=opts.finder.getRow(_138,_139);\nif(!row){\nreturn;\n}\nif(opts.onBeforeUnselect.apply(_138,_5(_138,[_139,row]))==false){\nreturn;\n}\nif(!_13a&&opts.checkOnSelect){\n_a5(_138,_139,true);\n}\nopts.finder.getTr(_138,_139).removeClass(\"datagrid-row-selected\");\nif(opts.idField){\n_3(_13b.selectedRows,opts.idField,row[opts.idField]);\n}\nopts.onUnselect.apply(_138,_5(_138,[_139,row]));\n};\nfunction _13c(_13d,_13e){\nvar _13f=$.data(_13d,\"datagrid\");\nvar opts=_13f.options;\nvar rows=opts.finder.getRows(_13d);\nvar _140=$.data(_13d,\"datagrid\").selectedRows;\nif(!_13e&&opts.checkOnSelect){\n_8b(_13d,true);\n}\nopts.finder.getTr(_13d,\"\",\"allbody\").addClass(\"datagrid-row-selected\");\nif(opts.idField){\nfor(var _141=0;_141<rows.length;_141++){\n_4(_140,opts.idField,rows[_141]);\n}\n}\nopts.onSelectAll.call(_13d,rows);\n};\nfunction _137(_142,_143){\nvar _144=$.data(_142,\"datagrid\");\nvar opts=_144.options;\nvar rows=opts.finder.getRows(_142);\nvar _145=$.data(_142,\"datagrid\").selectedRows;\nif(!_143&&opts.checkOnSelect){\n_8c(_142,true);\n}\nopts.finder.getTr(_142,\"\",\"selected\").removeClass(\"datagrid-row-selected\");\nif(opts.idField){\nfor(var _146=0;_146<rows.length;_146++){\n_3(_145,opts.idField,rows[_146][opts.idField]);\n}\n}\nopts.onUnselectAll.call(_142,rows);\n};\nfunction _a4(_147,_148,_149){\nvar _14a=$.data(_147,\"datagrid\");\nvar opts=_14a.options;\nvar row=opts.finder.getRow(_147,_148);\nif(!row){\nreturn;\n}\nif(opts.onBeforeCheck.apply(_147,_5(_147,[_148,row]))==false){\nreturn;\n}\nif(opts.singleSelect&&opts.selectOnCheck){\n_8c(_147,true);\n_14a.checkedRows=[];\n}\nif(!_149&&opts.selectOnCheck){\n_a7(_147,_148,true);\n}\nvar tr=opts.finder.getTr(_147,_148).addClass(\"datagrid-row-checked\");\ntr.find(\"div.datagrid-cell-check input[type=checkbox]\")._propAttr(\"checked\",true);\ntr=opts.finder.getTr(_147,\"\",\"checked\",2);\nif(tr.length==opts.finder.getRows(_147).length){\nvar dc=_14a.dc;\ndc.header1.add(dc.header2).find(\"input[type=checkbox]\")._propAttr(\"checked\",true);\n}\nif(opts.idField){\n_4(_14a.checkedRows,opts.idField,row);\n}\nopts.onCheck.apply(_147,_5(_147,[_148,row]));\n};\nfunction _a5(_14b,_14c,_14d){\nvar _14e=$.data(_14b,\"datagrid\");\nvar opts=_14e.options;\nvar row=opts.finder.getRow(_14b,_14c);\nif(!row){\nreturn;\n}\nif(opts.onBeforeUncheck.apply(_14b,_5(_14b,[_14c,row]))==false){\nreturn;\n}\nif(!_14d&&opts.selectOnCheck){\n_a8(_14b,_14c,true);\n}\nvar tr=opts.finder.getTr(_14b,_14c).removeClass(\"datagrid-row-checked\");\ntr.find(\"div.datagrid-cell-check input[type=checkbox]\")._propAttr(\"checked\",false);\nvar dc=_14e.dc;\nvar _14f=dc.header1.add(dc.header2);\n_14f.find(\"input[type=checkbox]\")._propAttr(\"checked\",false);\nif(opts.idField){\n_3(_14e.checkedRows,opts.idField,row[opts.idField]);\n}\nopts.onUncheck.apply(_14b,_5(_14b,[_14c,row]));\n};\nfunction _8b(_150,_151){\nvar _152=$.data(_150,\"datagrid\");\nvar opts=_152.options;\nvar rows=opts.finder.getRows(_150);\nif(!_151&&opts.selectOnCheck){\n_13c(_150,true);\n}\nvar dc=_152.dc;\nvar hck=dc.header1.add(dc.header2).find(\"input[type=checkbox]\");\nvar bck=opts.finder.getTr(_150,\"\",\"allbody\").addClass(\"datagrid-row-checked\").find(\"div.datagrid-cell-check input[type=checkbox]\");\nhck.add(bck)._propAttr(\"checked\",true);\nif(opts.idField){\nfor(var i=0;i<rows.length;i++){\n_4(_152.checkedRows,opts.idField,rows[i]);\n}\n}\nopts.onCheckAll.call(_150,rows);\n};\nfunction _8c(_153,_154){\nvar _155=$.data(_153,\"datagrid\");\nvar opts=_155.options;\nvar rows=opts.finder.getRows(_153);\nif(!_154&&opts.selectOnCheck){\n_137(_153,true);\n}\nvar dc=_155.dc;\nvar hck=dc.header1.add(dc.header2).find(\"input[type=checkbox]\");\nvar bck=opts.finder.getTr(_153,\"\",\"checked\").removeClass(\"datagrid-row-checked\").find(\"div.datagrid-cell-check input[type=checkbox]\");\nhck.add(bck)._propAttr(\"checked\",false);\nif(opts.idField){\nfor(var i=0;i<rows.length;i++){\n_3(_155.checkedRows,opts.idField,rows[i][opts.idField]);\n}\n}\nopts.onUncheckAll.call(_153,rows);\n};\nfunction _156(_157,_158){\nvar opts=$.data(_157,\"datagrid\").options;\nvar tr=opts.finder.getTr(_157,_158);\nvar row=opts.finder.getRow(_157,_158);\nif(tr.hasClass(\"datagrid-row-editing\")){\nreturn;\n}\nif(opts.onBeforeEdit.apply(_157,_5(_157,[_158,row]))==false){\nreturn;\n}\ntr.addClass(\"datagrid-row-editing\");\n_159(_157,_158);\n_f8(_157);\ntr.find(\"div.datagrid-editable\").each(function(){\nvar _15a=$(this).parent().attr(\"field\");\nvar ed=$.data(this,\"datagrid.editor\");\ned.actions.setValue(ed.target,row[_15a]);\n});\n_15b(_157,_158);\nopts.onBeginEdit.apply(_157,_5(_157,[_158,row]));\n};\nfunction _15c(_15d,_15e,_15f){\nvar _160=$.data(_15d,\"datagrid\");\nvar opts=_160.options;\nvar _161=_160.updatedRows;\nvar _162=_160.insertedRows;\nvar tr=opts.finder.getTr(_15d,_15e);\nvar row=opts.finder.getRow(_15d,_15e);\nif(!tr.hasClass(\"datagrid-row-editing\")){\nreturn;\n}\nif(!_15f){\nif(!_15b(_15d,_15e)){\nreturn;\n}\nvar _163=false;\nvar _164={};\ntr.find(\"div.datagrid-editable\").each(function(){\nvar _165=$(this).parent().attr(\"field\");\nvar ed=$.data(this,\"datagrid.editor\");\nvar t=$(ed.target);\nvar _166=t.data(\"textbox\")?t.textbox(\"textbox\"):t;\nif(_166.is(\":focus\")){\n_166.triggerHandler(\"blur\");\n}\nvar _167=ed.actions.getValue(ed.target);\nif(row[_165]!==_167){\nrow[_165]=_167;\n_163=true;\n_164[_165]=_167;\n}\n});\nif(_163){\nif(_2(_162,row)==-1){\nif(_2(_161,row)==-1){\n_161.push(row);\n}\n}\n}\nopts.onEndEdit.apply(_15d,_5(_15d,[_15e,row,_164]));\n}\ntr.removeClass(\"datagrid-row-editing\");\n_168(_15d,_15e);\n$(_15d).datagrid(\"refreshRow\",_15e);\nif(!_15f){\nopts.onAfterEdit.apply(_15d,_5(_15d,[_15e,row,_164]));\n}else{\nopts.onCancelEdit.apply(_15d,_5(_15d,[_15e,row]));\n}\n};\nfunction _169(_16a,_16b){\nvar opts=$.data(_16a,\"datagrid\").options;\nvar tr=opts.finder.getTr(_16a,_16b);\nvar _16c=[];\ntr.children(\"td\").each(function(){\nvar cell=$(this).find(\"div.datagrid-editable\");\nif(cell.length){\nvar ed=$.data(cell[0],\"datagrid.editor\");\n_16c.push(ed);\n}\n});\nreturn _16c;\n};\nfunction _16d(_16e,_16f){\nvar _170=_169(_16e,_16f.index!=undefined?_16f.index:_16f.id);\nfor(var i=0;i<_170.length;i++){\nif(_170[i].field==_16f.field){\nreturn _170[i];\n}\n}\nreturn null;\n};\nfunction _159(_171,_172){\nvar opts=$.data(_171,\"datagrid\").options;\nvar tr=opts.finder.getTr(_171,_172);\ntr.children(\"td\").each(function(){\nvar cell=$(this).find(\"div.datagrid-cell\");\nvar _173=$(this).attr(\"field\");\nvar col=_76(_171,_173);\nif(col&&col.editor){\nvar _174,_175;\nif(typeof col.editor==\"string\"){\n_174=col.editor;\n}else{\n_174=col.editor.type;\n_175=col.editor.options;\n}\nvar _176=opts.editors[_174];\nif(_176){\nvar _177=cell.html();\nvar _178=cell._outerWidth();\ncell.addClass(\"datagrid-editable\");\ncell._outerWidth(_178);\ncell.html(\"<table border=\\\"0\\\" cellspacing=\\\"0\\\" cellpadding=\\\"1\\\"><tr><td></td></tr></table>\");\ncell.children(\"table\")._bind(\"click dblclick contextmenu\",function(e){\ne.stopPropagation();\n});\n$.data(cell[0],\"datagrid.editor\",{actions:_176,target:_176.init(cell.find(\"td\"),$.extend({height:opts.editorHeight},_175)),field:_173,type:_174,oldHtml:_177});\n}\n}\n});\n_34(_171,_172,true);\n};\nfunction _168(_179,_17a){\nvar opts=$.data(_179,\"datagrid\").options;\nvar tr=opts.finder.getTr(_179,_17a);\ntr.children(\"td\").each(function(){\nvar cell=$(this).find(\"div.datagrid-editable\");\nif(cell.length){\nvar ed=$.data(cell[0],\"datagrid.editor\");\nif(ed.actions.destroy){\ned.actions.destroy(ed.target);\n}\ncell.html(ed.oldHtml);\n$.removeData(cell[0],\"datagrid.editor\");\ncell.removeClass(\"datagrid-editable\");\ncell.css(\"width\",\"\");\n}\n});\n};\nfunction _15b(_17b,_17c){\nvar tr=$.data(_17b,\"datagrid\").options.finder.getTr(_17b,_17c);\nif(!tr.hasClass(\"datagrid-row-editing\")){\nreturn true;\n}\nvar vbox=tr.find(\".validatebox-text\");\nvbox.validatebox(\"validate\");\nvbox.trigger(\"mouseleave\");\nvar _17d=tr.find(\".validatebox-invalid\");\nreturn _17d.length==0;\n};\nfunction _17e(_17f,_180){\nvar _181=$.data(_17f,\"datagrid\").insertedRows;\nvar _182=$.data(_17f,\"datagrid\").deletedRows;\nvar _183=$.data(_17f,\"datagrid\").updatedRows;\nif(!_180){\nvar rows=[];\nrows=rows.concat(_181);\nrows=rows.concat(_182);\nrows=rows.concat(_183);\nreturn rows;\n}else{\nif(_180==\"inserted\"){\nreturn _181;\n}else{\nif(_180==\"deleted\"){\nreturn _182;\n}else{\nif(_180==\"updated\"){\nreturn _183;\n}\n}\n}\n}\nreturn [];\n};\nfunction _184(_185,_186){\nvar _187=$.data(_185,\"datagrid\");\nvar opts=_187.options;\nvar data=_187.data;\nvar _188=_187.insertedRows;\nvar _189=_187.deletedRows;\n$(_185).datagrid(\"cancelEdit\",_186);\nvar row=opts.finder.getRow(_185,_186);\nif(_2(_188,row)>=0){\n_3(_188,row);\n}else{\n_189.push(row);\n}\n_3(_187.selectedRows,opts.idField,row[opts.idField]);\n_3(_187.checkedRows,opts.idField,row[opts.idField]);\nopts.view.deleteRow.call(opts.view,_185,_186);\nif(opts.height==\"auto\"){\n_34(_185);\n}\n$(_185).datagrid(\"getPager\").pagination(\"refresh\",{total:data.total});\n};\nfunction _18a(_18b,_18c){\nvar data=$.data(_18b,\"datagrid\").data;\nvar view=$.data(_18b,\"datagrid\").options.view;\nvar _18d=$.data(_18b,\"datagrid\").insertedRows;\nview.insertRow.call(view,_18b,_18c.index,_18c.row);\n_18d.push(_18c.row);\n$(_18b).datagrid(\"getPager\").pagination(\"refresh\",{total:data.total});\n};\nfunction _18e(_18f,row){\nvar data=$.data(_18f,\"datagrid\").data;\nvar view=$.data(_18f,\"datagrid\").options.view;\nvar _190=$.data(_18f,\"datagrid\").insertedRows;\nview.insertRow.call(view,_18f,null,row);\n_190.push(row);\n$(_18f).datagrid(\"getPager\").pagination(\"refresh\",{total:data.total});\n};\nfunction _191(_192,_193){\nvar _194=$.data(_192,\"datagrid\");\nvar opts=_194.options;\nvar row=opts.finder.getRow(_192,_193.index);\nvar _195=false;\n_193.row=_193.row||{};\nfor(var _196 in _193.row){\nif(row[_196]!==_193.row[_196]){\n_195=true;\nbreak;\n}\n}\nif(_195){\nif(_2(_194.insertedRows,row)==-1){\nif(_2(_194.updatedRows,row)==-1){\n_194.updatedRows.push(row);\n}\n}\nopts.view.updateRow.call(opts.view,_192,_193.index,_193.row);\n}\n};\nfunction _197(_198){\nvar _199=$.data(_198,\"datagrid\");\nvar data=_199.data;\nvar rows=data.rows;\nvar _19a=[];\nfor(var i=0;i<rows.length;i++){\n_19a.push($.extend({},rows[i]));\n}\n_199.originalRows=_19a;\n_199.updatedRows=[];\n_199.insertedRows=[];\n_199.deletedRows=[];\n};\nfunction _19b(_19c){\nvar data=$.data(_19c,\"datagrid\").data;\nvar ok=true;\nfor(var i=0,len=data.rows.length;i<len;i++){\nif(_15b(_19c,i)){\n$(_19c).datagrid(\"endEdit\",i);\n}else{\nok=false;\n}\n}\nif(ok){\n_197(_19c);\n}\n};\nfunction _19d(_19e){\nvar _19f=$.data(_19e,\"datagrid\");\nvar opts=_19f.options;\nvar _1a0=_19f.originalRows;\nvar _1a1=_19f.insertedRows;\nvar _1a2=_19f.deletedRows;\nvar _1a3=_19f.selectedRows;\nvar _1a4=_19f.checkedRows;\nvar data=_19f.data;\nfunction _1a5(a){\nvar ids=[];\nfor(var i=0;i<a.length;i++){\nids.push(a[i][opts.idField]);\n}\nreturn ids;\n};\nfunction _1a6(ids,_1a7){\nfor(var i=0;i<ids.length;i++){\nvar _1a8=_11e(_19e,ids[i]);\nif(_1a8>=0){\n(_1a7==\"s\"?_a7:_a4)(_19e,_1a8,true);\n}\n}\n};\nfor(var i=0;i<data.rows.length;i++){\n$(_19e).datagrid(\"cancelEdit\",i);\n}\nvar _1a9=_1a5(_1a3);\nvar _1aa=_1a5(_1a4);\n_1a3.splice(0,_1a3.length);\n_1a4.splice(0,_1a4.length);\ndata.total+=_1a2.length-_1a1.length;\ndata.rows=_1a0;\n_c2(_19e,data);\n_1a6(_1a9,\"s\");\n_1a6(_1aa,\"c\");\n_197(_19e);\n};\nfunction _c1(_1ab,_1ac,cb){\nvar opts=$.data(_1ab,\"datagrid\").options;\nif(_1ac){\nopts.queryParams=_1ac;\n}\nvar _1ad=$.extend({},opts.queryParams);\nif(opts.pagination){\n$.extend(_1ad,{page:opts.pageNumber||1,rows:opts.pageSize});\n}\nif(opts.sortName&&opts.remoteSort){\n$.extend(_1ad,{sort:opts.sortName,order:opts.sortOrder});\n}\nif(opts.onBeforeLoad.call(_1ab,_1ad)==false){\nopts.view.setEmptyMsg(_1ab);\nreturn;\n}\n$(_1ab).datagrid(\"loading\");\nvar _1ae=opts.loader.call(_1ab,_1ad,function(data){\n$(_1ab).datagrid(\"loaded\");\n$(_1ab).datagrid(\"loadData\",data);\nif(cb){\ncb();\n}\n},function(){\n$(_1ab).datagrid(\"loaded\");\nopts.onLoadError.apply(_1ab,arguments);\n});\nif(_1ae==false){\n$(_1ab).datagrid(\"loaded\");\nopts.view.setEmptyMsg(_1ab);\n}\n};\nfunction _1af(_1b0,_1b1){\nvar opts=$.data(_1b0,\"datagrid\").options;\n_1b1.type=_1b1.type||\"body\";\n_1b1.rowspan=_1b1.rowspan||1;\n_1b1.colspan=_1b1.colspan||1;\nif(_1b1.rowspan==1&&_1b1.colspan==1){\nreturn;\n}\nvar tr=opts.finder.getTr(_1b0,(_1b1.index!=undefined?_1b1.index:_1b1.id),_1b1.type);\nif(!tr.length){\nreturn;\n}\nvar td=tr.find(\"td[field=\\\"\"+_1b1.field+\"\\\"]\");\ntd.attr(\"rowspan\",_1b1.rowspan).attr(\"colspan\",_1b1.colspan);\ntd.addClass(\"datagrid-td-merged\");\n_1b2(td.next(),_1b1.colspan-1);\nfor(var i=1;i<_1b1.rowspan;i++){\ntr=tr.next();\nif(!tr.length){\nbreak;\n}\n_1b2(tr.find(\"td[field=\\\"\"+_1b1.field+\"\\\"]\"),_1b1.colspan);\n}\n_f7(_1b0,td);\nfunction _1b2(td,_1b3){\nfor(var i=0;i<_1b3;i++){\ntd.hide();\ntd=td.next();\n}\n};\n};\n$.fn.datagrid=function(_1b4,_1b5){\nif(typeof _1b4==\"string\"){\nreturn $.fn.datagrid.methods[_1b4](this,_1b5);\n}\n_1b4=_1b4||{};\nreturn this.each(function(){\nvar _1b6=$.data(this,\"datagrid\");\nvar opts;\nif(_1b6){\nopts=$.extend(_1b6.options,_1b4);\n_1b6.options=opts;\n}else{\nopts=$.extend({},$.extend({},$.fn.datagrid.defaults,{queryParams:{}}),$.fn.datagrid.parseOptions(this),_1b4);\n$(this).css(\"width\",\"\").css(\"height\",\"\");\nvar _1b7=_4e(this,opts.rownumbers);\nif(!opts.columns){\nopts.columns=_1b7.columns;\n}\nif(!opts.frozenColumns){\nopts.frozenColumns=_1b7.frozenColumns;\n}\nopts.columns=$.extend(true,[],opts.columns);\nopts.frozenColumns=$.extend(true,[],opts.frozenColumns);\nopts.view=$.extend({},opts.view);\n$.data(this,\"datagrid\",{options:opts,panel:_1b7.panel,dc:_1b7.dc,ss:null,selectedRows:[],checkedRows:[],data:{total:0,rows:[]},originalRows:[],updatedRows:[],insertedRows:[],deletedRows:[]});\n}\n_59(this);\n_77(this);\n_1a(this);\nif(opts.data){\n$(this).datagrid(\"loadData\",opts.data);\n}else{\nvar data=$.fn.datagrid.parseData(this);\nif(data.total>0){\n$(this).datagrid(\"loadData\",data);\n}else{\n$(this).datagrid(\"autoSizeColumn\");\n}\n}\n_c1(this);\n});\n};\nfunction _1b8(_1b9){\nvar _1ba={};\n$.map(_1b9,function(name){\n_1ba[name]=_1bb(name);\n});\nreturn _1ba;\nfunction _1bb(name){\nfunction isA(_1bc){\nreturn $.data($(_1bc)[0],name)!=undefined;\n};\nreturn {init:function(_1bd,_1be){\nvar _1bf=$(\"<input type=\\\"text\\\" class=\\\"datagrid-editable-input\\\">\").appendTo(_1bd);\nif(_1bf[name]&&name!=\"text\"){\nreturn _1bf[name](_1be);\n}else{\nreturn _1bf;\n}\n},destroy:function(_1c0){\nif(isA(_1c0,name)){\n$(_1c0)[name](\"destroy\");\n}\n},getValue:function(_1c1){\nif(isA(_1c1,name)){\nvar opts=$(_1c1)[name](\"options\");\nif(opts.multiple){\nreturn $(_1c1)[name](\"getValues\").join(opts.separator);\n}else{\nreturn $(_1c1)[name](\"getValue\");\n}\n}else{\nreturn $(_1c1).val();\n}\n},setValue:function(_1c2,_1c3){\nif(isA(_1c2,name)){\nvar opts=$(_1c2)[name](\"options\");\nif(opts.multiple){\nif(_1c3){\n$(_1c2)[name](\"setValues\",_1c3.split(opts.separator));\n}else{\n$(_1c2)[name](\"clear\");\n}\n}else{\n$(_1c2)[name](\"setValue\",_1c3);\n}\n}else{\n$(_1c2).val(_1c3);\n}\n},resize:function(_1c4,_1c5){\nif(isA(_1c4,name)){\n$(_1c4)[name](\"resize\",_1c5);\n}else{\n$(_1c4)._size({width:_1c5,height:$.fn.datagrid.defaults.editorHeight});\n}\n}};\n};\n};\nvar _1c6=$.extend({},_1b8([\"text\",\"textbox\",\"passwordbox\",\"filebox\",\"numberbox\",\"numberspinner\",\"combobox\",\"combotree\",\"combogrid\",\"combotreegrid\",\"datebox\",\"datetimebox\",\"timespinner\",\"datetimespinner\"]),{textarea:{init:function(_1c7,_1c8){\nvar _1c9=$(\"<textarea class=\\\"datagrid-editable-input\\\"></textarea>\").appendTo(_1c7);\n_1c9.css(\"vertical-align\",\"middle\")._outerHeight(_1c8.height);\nreturn _1c9;\n},getValue:function(_1ca){\nreturn $(_1ca).val();\n},setValue:function(_1cb,_1cc){\n$(_1cb).val(_1cc);\n},resize:function(_1cd,_1ce){\n$(_1cd)._outerWidth(_1ce);\n}},checkbox:{init:function(_1cf,_1d0){\nvar _1d1=$(\"<input type=\\\"checkbox\\\">\").appendTo(_1cf);\n_1d1.val(_1d0.on);\n_1d1.attr(\"offval\",_1d0.off);\nreturn _1d1;\n},getValue:function(_1d2){\nif($(_1d2).is(\":checked\")){\nreturn $(_1d2).val();\n}else{\nreturn $(_1d2).attr(\"offval\");\n}\n},setValue:function(_1d3,_1d4){\nvar _1d5=false;\nif($(_1d3).val()==_1d4){\n_1d5=true;\n}\n$(_1d3)._propAttr(\"checked\",_1d5);\n}},validatebox:{init:function(_1d6,_1d7){\nvar _1d8=$(\"<input type=\\\"text\\\" class=\\\"datagrid-editable-input\\\">\").appendTo(_1d6);\n_1d8.validatebox(_1d7);\nreturn _1d8;\n},destroy:function(_1d9){\n$(_1d9).validatebox(\"destroy\");\n},getValue:function(_1da){\nreturn $(_1da).val();\n},setValue:function(_1db,_1dc){\n$(_1db).val(_1dc);\n},resize:function(_1dd,_1de){\n$(_1dd)._outerWidth(_1de)._outerHeight($.fn.datagrid.defaults.editorHeight);\n}}});\n$.fn.datagrid.methods={options:function(jq){\nvar _1df=$.data(jq[0],\"datagrid\").options;\nvar _1e0=$.data(jq[0],\"datagrid\").panel.panel(\"options\");\nvar opts=$.extend(_1df,{width:_1e0.width,height:_1e0.height,closed:_1e0.closed,collapsed:_1e0.collapsed,minimized:_1e0.minimized,maximized:_1e0.maximized});\nreturn opts;\n},setSelectionState:function(jq){\nreturn jq.each(function(){\n_116(this);\n});\n},createStyleSheet:function(jq){\nreturn _7(jq[0]);\n},getPanel:function(jq){\nreturn $.data(jq[0],\"datagrid\").panel;\n},getPager:function(jq){\nreturn $.data(jq[0],\"datagrid\").panel.children(\"div.datagrid-pager\");\n},getColumnFields:function(jq,_1e1){\nreturn _75(jq[0],_1e1);\n},getColumnOption:function(jq,_1e2){\nreturn _76(jq[0],_1e2);\n},resize:function(jq,_1e3){\nreturn jq.each(function(){\n_1a(this,_1e3);\n});\n},load:function(jq,_1e4){\nreturn jq.each(function(){\nvar opts=$(this).datagrid(\"options\");\nif(typeof _1e4==\"string\"){\nopts.url=_1e4;\n_1e4=null;\n}\nopts.pageNumber=1;\nvar _1e5=$(this).datagrid(\"getPager\");\n_1e5.pagination(\"refresh\",{pageNumber:1});\n_c1(this,_1e4);\n});\n},reload:function(jq,_1e6){\nreturn jq.each(function(){\nvar opts=$(this).datagrid(\"options\");\nif(typeof _1e6==\"string\"){\nopts.url=_1e6;\n_1e6=null;\n}\n_c1(this,_1e6);\n});\n},reloadFooter:function(jq,_1e7){\nreturn jq.each(function(){\nvar opts=$.data(this,\"datagrid\").options;\nvar dc=$.data(this,\"datagrid\").dc;\nif(_1e7){\n$.data(this,\"datagrid\").footer=_1e7;\n}\nif(opts.showFooter){\nopts.view.renderFooter.call(opts.view,this,dc.footer2,false);\nopts.view.renderFooter.call(opts.view,this,dc.footer1,true);\nif(opts.view.onAfterRender){\nopts.view.onAfterRender.call(opts.view,this);\n}\n$(this).datagrid(\"fixRowHeight\");\n}\n});\n},loading:function(jq){\nreturn jq.each(function(){\nvar opts=$.data(this,\"datagrid\").options;\n$(this).datagrid(\"getPager\").pagination(\"loading\");\nif(opts.loadMsg){\nvar _1e8=$(this).datagrid(\"getPanel\");\nif(!_1e8.children(\"div.datagrid-mask\").length){\n$(\"<div class=\\\"datagrid-mask\\\" style=\\\"display:block\\\"></div>\").appendTo(_1e8);\nvar msg=$(\"<div class=\\\"datagrid-mask-msg\\\" style=\\\"display:block;left:50%\\\"></div>\").html(opts.loadMsg).appendTo(_1e8);\nmsg._outerHeight(40);\nmsg.css({marginLeft:(-msg.outerWidth()/2),lineHeight:(msg.height()+\"px\")});\n}\n}\n});\n},loaded:function(jq){\nreturn jq.each(function(){\n$(this).datagrid(\"getPager\").pagination(\"loaded\");\nvar _1e9=$(this).datagrid(\"getPanel\");\n_1e9.children(\"div.datagrid-mask-msg\").remove();\n_1e9.children(\"div.datagrid-mask\").remove();\n});\n},fitColumns:function(jq){\nreturn jq.each(function(){\n_ce(this);\n});\n},fixColumnSize:function(jq,_1ea){\nreturn jq.each(function(){\n_f1(this,_1ea);\n});\n},fixRowHeight:function(jq,_1eb){\nreturn jq.each(function(){\n_34(this,_1eb);\n});\n},freezeRow:function(jq,_1ec){\nreturn jq.each(function(){\n_46(this,_1ec);\n});\n},autoSizeColumn:function(jq,_1ed){\nreturn jq.each(function(){\n_e2(this,_1ed);\n});\n},loadData:function(jq,data){\nreturn jq.each(function(){\n_c2(this,data);\n_197(this);\n});\n},getData:function(jq){\nreturn $.data(jq[0],\"datagrid\").data;\n},getRows:function(jq){\nreturn $.data(jq[0],\"datagrid\").data.rows;\n},getFooterRows:function(jq){\nreturn $.data(jq[0],\"datagrid\").footer;\n},getRowIndex:function(jq,id){\nreturn _11e(jq[0],id);\n},getChecked:function(jq){\nreturn _124(jq[0]);\n},getSelected:function(jq){\nvar rows=_121(jq[0]);\nreturn rows.length>0?rows[0]:null;\n},getSelections:function(jq){\nreturn _121(jq[0]);\n},clearSelections:function(jq){\nreturn jq.each(function(){\nvar _1ee=$.data(this,\"datagrid\");\nvar _1ef=_1ee.selectedRows;\nvar _1f0=_1ee.checkedRows;\n_1ef.splice(0,_1ef.length);\n_137(this);\nif(_1ee.options.checkOnSelect){\n_1f0.splice(0,_1f0.length);\n}\n});\n},clearChecked:function(jq){\nreturn jq.each(function(){\nvar _1f1=$.data(this,\"datagrid\");\nvar _1f2=_1f1.selectedRows;\nvar _1f3=_1f1.checkedRows;\n_1f3.splice(0,_1f3.length);\n_8c(this);\nif(_1f1.options.selectOnCheck){\n_1f2.splice(0,_1f2.length);\n}\n});\n},scrollTo:function(jq,_1f4){\nreturn jq.each(function(){\n_127(this,_1f4);\n});\n},highlightRow:function(jq,_1f5){\nreturn jq.each(function(){\n_9e(this,_1f5);\n_127(this,_1f5);\n});\n},selectAll:function(jq){\nreturn jq.each(function(){\n_13c(this);\n});\n},unselectAll:function(jq){\nreturn jq.each(function(){\n_137(this);\n});\n},selectRow:function(jq,_1f6){\nreturn jq.each(function(){\n_a7(this,_1f6);\n});\n},selectRecord:function(jq,id){\nreturn jq.each(function(){\nvar opts=$.data(this,\"datagrid\").options;\nif(opts.idField){\nvar _1f7=_11e(this,id);\nif(_1f7>=0){\n$(this).datagrid(\"selectRow\",_1f7);\n}\n}\n});\n},unselectRow:function(jq,_1f8){\nreturn jq.each(function(){\n_a8(this,_1f8);\n});\n},checkRow:function(jq,_1f9){\nreturn jq.each(function(){\n_a4(this,_1f9);\n});\n},uncheckRow:function(jq,_1fa){\nreturn jq.each(function(){\n_a5(this,_1fa);\n});\n},checkAll:function(jq){\nreturn jq.each(function(){\n_8b(this);\n});\n},uncheckAll:function(jq){\nreturn jq.each(function(){\n_8c(this);\n});\n},beginEdit:function(jq,_1fb){\nreturn jq.each(function(){\n_156(this,_1fb);\n});\n},endEdit:function(jq,_1fc){\nreturn jq.each(function(){\n_15c(this,_1fc,false);\n});\n},cancelEdit:function(jq,_1fd){\nreturn jq.each(function(){\n_15c(this,_1fd,true);\n});\n},getEditors:function(jq,_1fe){\nreturn _169(jq[0],_1fe);\n},getEditor:function(jq,_1ff){\nreturn _16d(jq[0],_1ff);\n},refreshRow:function(jq,_200){\nreturn jq.each(function(){\nvar opts=$.data(this,\"datagrid\").options;\nopts.view.refreshRow.call(opts.view,this,_200);\n});\n},validateRow:function(jq,_201){\nreturn _15b(jq[0],_201);\n},updateRow:function(jq,_202){\nreturn jq.each(function(){\n_191(this,_202);\n});\n},appendRow:function(jq,row){\nreturn jq.each(function(){\n_18e(this,row);\n});\n},insertRow:function(jq,_203){\nreturn jq.each(function(){\n_18a(this,_203);\n});\n},deleteRow:function(jq,_204){\nreturn jq.each(function(){\n_184(this,_204);\n});\n},getChanges:function(jq,_205){\nreturn _17e(jq[0],_205);\n},acceptChanges:function(jq){\nreturn jq.each(function(){\n_19b(this);\n});\n},rejectChanges:function(jq){\nreturn jq.each(function(){\n_19d(this);\n});\n},mergeCells:function(jq,_206){\nreturn jq.each(function(){\n_1af(this,_206);\n});\n},showColumn:function(jq,_207){\nreturn jq.each(function(){\nvar col=$(this).datagrid(\"getColumnOption\",_207);\nif(col.hidden){\ncol.hidden=false;\n$(this).datagrid(\"getPanel\").find(\"td[field=\\\"\"+_207+\"\\\"]\").show();\n_c3(this,_207,1);\n$(this).datagrid(\"fitColumns\");\n}\n});\n},hideColumn:function(jq,_208){\nreturn jq.each(function(){\nvar col=$(this).datagrid(\"getColumnOption\",_208);\nif(!col.hidden){\ncol.hidden=true;\n$(this).datagrid(\"getPanel\").find(\"td[field=\\\"\"+_208+\"\\\"]\").hide();\n_c3(this,_208,-1);\n$(this).datagrid(\"fitColumns\");\n}\n});\n},sort:function(jq,_209){\nreturn jq.each(function(){\n_8e(this,_209);\n});\n},gotoPage:function(jq,_20a){\nreturn jq.each(function(){\nvar _20b=this;\nvar page,cb;\nif(typeof _20a==\"object\"){\npage=_20a.page;\ncb=_20a.callback;\n}else{\npage=_20a;\n}\n$(_20b).datagrid(\"options\").pageNumber=page;\n$(_20b).datagrid(\"getPager\").pagination(\"refresh\",{pageNumber:page});\n_c1(_20b,null,function(){\nif(cb){\ncb.call(_20b,page);\n}\n});\n});\n}};\n$.fn.datagrid.parseOptions=function(_20c){\nvar t=$(_20c);\nreturn $.extend({},$.fn.panel.parseOptions(_20c),$.parser.parseOptions(_20c,[\"url\",\"toolbar\",\"idField\",\"sortName\",\"sortOrder\",\"pagePosition\",\"resizeHandle\",{sharedStyleSheet:\"boolean\",fitColumns:\"boolean\",autoRowHeight:\"boolean\",striped:\"boolean\",nowrap:\"boolean\"},{rownumbers:\"boolean\",singleSelect:\"boolean\",ctrlSelect:\"boolean\",checkOnSelect:\"boolean\",selectOnCheck:\"boolean\"},{pagination:\"boolean\",pageSize:\"number\",pageNumber:\"number\"},{multiSort:\"boolean\",remoteSort:\"boolean\",showHeader:\"boolean\",showFooter:\"boolean\"},{scrollbarSize:\"number\",scrollOnSelect:\"boolean\"}]),{pageList:(t.attr(\"pageList\")?eval(t.attr(\"pageList\")):undefined),loadMsg:(t.attr(\"loadMsg\")!=undefined?t.attr(\"loadMsg\"):undefined),rowStyler:(t.attr(\"rowStyler\")?eval(t.attr(\"rowStyler\")):undefined)});\n};\n$.fn.datagrid.parseData=function(_20d){\nvar t=$(_20d);\nvar data={total:0,rows:[]};\nvar _20e=t.datagrid(\"getColumnFields\",true).concat(t.datagrid(\"getColumnFields\",false));\nt.find(\"tbody tr\").each(function(){\ndata.total++;\nvar row={};\n$.extend(row,$.parser.parseOptions(this,[\"iconCls\",\"state\"]));\nfor(var i=0;i<_20e.length;i++){\nrow[_20e[i]]=$(this).find(\"td:eq(\"+i+\")\").html();\n}\ndata.rows.push(row);\n});\nreturn data;\n};\nvar _20f={render:function(_210,_211,_212){\nvar rows=$(_210).datagrid(\"getRows\");\n$(_211).empty().html(this.renderTable(_210,0,rows,_212));\n},renderFooter:function(_213,_214,_215){\nvar opts=$.data(_213,\"datagrid\").options;\nvar rows=$.data(_213,\"datagrid\").footer||[];\nvar _216=$(_213).datagrid(\"getColumnFields\",_215);\nvar _217=[\"<table class=\\\"datagrid-ftable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"];\nfor(var i=0;i<rows.length;i++){\n_217.push(\"<tr class=\\\"datagrid-row\\\" datagrid-row-index=\\\"\"+i+\"\\\">\");\n_217.push(this.renderRow.call(this,_213,_216,_215,i,rows[i]));\n_217.push(\"</tr>\");\n}\n_217.push(\"</tbody></table>\");\n$(_214).html(_217.join(\"\"));\n},renderTable:function(_218,_219,rows,_21a){\nvar _21b=$.data(_218,\"datagrid\");\nvar opts=_21b.options;\nif(_21a){\nif(!(opts.rownumbers||(opts.frozenColumns&&opts.frozenColumns.length))){\nreturn \"\";\n}\n}\nvar _21c=$(_218).datagrid(\"getColumnFields\",_21a);\nvar _21d=[\"<table class=\\\"datagrid-btable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"];\nfor(var i=0;i<rows.length;i++){\nvar row=rows[i];\nvar css=opts.rowStyler?opts.rowStyler.call(_218,_219,row):\"\";\nvar cs=this.getStyleValue(css);\nvar cls=\"class=\\\"datagrid-row \"+(_219%2&&opts.striped?\"datagrid-row-alt \":\" \")+cs.c+\"\\\"\";\nvar _21e=cs.s?\"style=\\\"\"+cs.s+\"\\\"\":\"\";\nvar _21f=_21b.rowIdPrefix+\"-\"+(_21a?1:2)+\"-\"+_219;\n_21d.push(\"<tr id=\\\"\"+_21f+\"\\\" datagrid-row-index=\\\"\"+_219+\"\\\" \"+cls+\" \"+_21e+\">\");\n_21d.push(this.renderRow.call(this,_218,_21c,_21a,_219,row));\n_21d.push(\"</tr>\");\n_219++;\n}\n_21d.push(\"</tbody></table>\");\nreturn _21d.join(\"\");\n},renderRow:function(_220,_221,_222,_223,_224){\nvar opts=$.data(_220,\"datagrid\").options;\nvar cc=[];\nif(_222&&opts.rownumbers){\nvar _225=_223+1;\nif(opts.pagination){\n_225+=(opts.pageNumber-1)*opts.pageSize;\n}\ncc.push(\"<td class=\\\"datagrid-td-rownumber\\\"><div class=\\\"datagrid-cell-rownumber\\\">\"+_225+\"</div></td>\");\n}\nfor(var i=0;i<_221.length;i++){\nvar _226=_221[i];\nvar col=$(_220).datagrid(\"getColumnOption\",_226);\nif(col){\nvar _227=_224[_226];\nvar css=col.styler?(col.styler.call(_220,_227,_224,_223)||\"\"):\"\";\nvar cs=this.getStyleValue(css);\nvar cls=cs.c?\"class=\\\"\"+cs.c+\"\\\"\":\"\";\nvar _228=col.hidden?\"style=\\\"display:none;\"+cs.s+\"\\\"\":(cs.s?\"style=\\\"\"+cs.s+\"\\\"\":\"\");\ncc.push(\"<td field=\\\"\"+_226+\"\\\" \"+cls+\" \"+_228+\">\");\nvar _228=\"\";\nif(!col.checkbox){\nif(col.align){\n_228+=\"text-align:\"+col.align+\";\";\n}\nif(!opts.nowrap){\n_228+=\"white-space:normal;height:auto;\";\n}else{\nif(opts.autoRowHeight){\n_228+=\"height:auto;\";\n}\n}\n}\ncc.push(\"<div style=\\\"\"+_228+\"\\\" \");\ncc.push(col.checkbox?\"class=\\\"datagrid-cell-check\\\"\":\"class=\\\"datagrid-cell \"+col.cellClass+\"\\\"\");\ncc.push(\">\");\nif(col.checkbox){\ncc.push(\"<input type=\\\"checkbox\\\" \"+(_224.checked?\"checked=\\\"checked\\\"\":\"\"));\ncc.push(\" name=\\\"\"+_226+\"\\\" value=\\\"\"+(_227!=undefined?_227:\"\")+\"\\\">\");\n}else{\nif(col.formatter){\ncc.push(col.formatter(_227,_224,_223));\n}else{\ncc.push(_227);\n}\n}\ncc.push(\"</div>\");\ncc.push(\"</td>\");\n}\n}\nreturn cc.join(\"\");\n},getStyleValue:function(css){\nvar _229=\"\";\nvar _22a=\"\";\nif(typeof css==\"string\"){\n_22a=css;\n}else{\nif(css){\n_229=css[\"class\"]||\"\";\n_22a=css[\"style\"]||\"\";\n}\n}\nreturn {c:_229,s:_22a};\n},refreshRow:function(_22b,_22c){\nthis.updateRow.call(this,_22b,_22c,{});\n},updateRow:function(_22d,_22e,row){\nvar opts=$.data(_22d,\"datagrid\").options;\nvar _22f=opts.finder.getRow(_22d,_22e);\n$.extend(_22f,row);\nvar cs=_230.call(this,_22e);\nvar _231=cs.s;\nvar cls=\"datagrid-row \"+(_22e%2&&opts.striped?\"datagrid-row-alt \":\" \")+cs.c;\nfunction _230(_232){\nvar css=opts.rowStyler?opts.rowStyler.call(_22d,_232,_22f):\"\";\nreturn this.getStyleValue(css);\n};\nfunction _233(_234){\nvar tr=opts.finder.getTr(_22d,_22e,\"body\",(_234?1:2));\nif(!tr.length){\nreturn;\n}\nvar _235=$(_22d).datagrid(\"getColumnFields\",_234);\nvar _236=tr.find(\"div.datagrid-cell-check input[type=checkbox]\").is(\":checked\");\ntr.html(this.renderRow.call(this,_22d,_235,_234,_22e,_22f));\nvar _237=(tr.hasClass(\"datagrid-row-checked\")?\" datagrid-row-checked\":\"\")+(tr.hasClass(\"datagrid-row-selected\")?\" datagrid-row-selected\":\"\");\ntr.attr(\"style\",_231).attr(\"class\",cls+_237);\nif(_236){\ntr.find(\"div.datagrid-cell-check input[type=checkbox]\")._propAttr(\"checked\",true);\n}\n};\n_233.call(this,true);\n_233.call(this,false);\n$(_22d).datagrid(\"fixRowHeight\",_22e);\n},insertRow:function(_238,_239,row){\nvar _23a=$.data(_238,\"datagrid\");\nvar opts=_23a.options;\nvar dc=_23a.dc;\nvar data=_23a.data;\nif(_239==undefined||_239==null){\n_239=data.rows.length;\n}\nif(_239>data.rows.length){\n_239=data.rows.length;\n}\nfunction _23b(_23c){\nvar _23d=_23c?1:2;\nfor(var i=data.rows.length-1;i>=_239;i--){\nvar tr=opts.finder.getTr(_238,i,\"body\",_23d);\ntr.attr(\"datagrid-row-index\",i+1);\ntr.attr(\"id\",_23a.rowIdPrefix+\"-\"+_23d+\"-\"+(i+1));\nif(_23c&&opts.rownumbers){\nvar _23e=i+2;\nif(opts.pagination){\n_23e+=(opts.pageNumber-1)*opts.pageSize;\n}\ntr.find(\"div.datagrid-cell-rownumber\").html(_23e);\n}\nif(opts.striped){\ntr.removeClass(\"datagrid-row-alt\").addClass((i+1)%2?\"datagrid-row-alt\":\"\");\n}\n}\n};\nfunction _23f(_240){\nvar _241=_240?1:2;\nvar _242=$(_238).datagrid(\"getColumnFields\",_240);\nvar _243=_23a.rowIdPrefix+\"-\"+_241+\"-\"+_239;\nvar tr=\"<tr id=\\\"\"+_243+\"\\\" class=\\\"datagrid-row\\\" datagrid-row-index=\\\"\"+_239+\"\\\"></tr>\";\nif(_239>=data.rows.length){\nif(data.rows.length){\nopts.finder.getTr(_238,\"\",\"last\",_241).after(tr);\n}else{\nvar cc=_240?dc.body1:dc.body2;\ncc.html(\"<table class=\\\"datagrid-btable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"+tr+\"</tbody></table>\");\n}\n}else{\nopts.finder.getTr(_238,_239+1,\"body\",_241).before(tr);\n}\n};\n_23b.call(this,true);\n_23b.call(this,false);\n_23f.call(this,true);\n_23f.call(this,false);\ndata.total+=1;\ndata.rows.splice(_239,0,row);\nthis.setEmptyMsg(_238);\nthis.refreshRow.call(this,_238,_239);\n},deleteRow:function(_244,_245){\nvar _246=$.data(_244,\"datagrid\");\nvar opts=_246.options;\nvar data=_246.data;\nfunction _247(_248){\nvar _249=_248?1:2;\nfor(var i=_245+1;i<data.rows.length;i++){\nvar tr=opts.finder.getTr(_244,i,\"body\",_249);\ntr.attr(\"datagrid-row-index\",i-1);\ntr.attr(\"id\",_246.rowIdPrefix+\"-\"+_249+\"-\"+(i-1));\nif(_248&&opts.rownumbers){\nvar _24a=i;\nif(opts.pagination){\n_24a+=(opts.pageNumber-1)*opts.pageSize;\n}\ntr.find(\"div.datagrid-cell-rownumber\").html(_24a);\n}\nif(opts.striped){\ntr.removeClass(\"datagrid-row-alt\").addClass((i-1)%2?\"datagrid-row-alt\":\"\");\n}\n}\n};\nopts.finder.getTr(_244,_245).remove();\n_247.call(this,true);\n_247.call(this,false);\ndata.total-=1;\ndata.rows.splice(_245,1);\nthis.setEmptyMsg(_244);\n},onBeforeRender:function(_24b,rows){\n},onAfterRender:function(_24c){\nvar _24d=$.data(_24c,\"datagrid\");\nvar opts=_24d.options;\nif(opts.showFooter){\nvar _24e=$(_24c).datagrid(\"getPanel\").find(\"div.datagrid-footer\");\n_24e.find(\"div.datagrid-cell-rownumber,div.datagrid-cell-check\").css(\"visibility\",\"hidden\");\n}\nthis.setEmptyMsg(_24c);\n},setEmptyMsg:function(_24f){\nvar _250=$.data(_24f,\"datagrid\");\nvar opts=_250.options;\nvar _251=opts.finder.getRows(_24f).length==0;\nif(_251){\nthis.renderEmptyRow(_24f);\n}\nif(opts.emptyMsg){\n_250.dc.view.children(\".datagrid-empty\").remove();\nif(_251){\nvar h=_250.dc.header2.parent().outerHeight();\nvar d=$(\"<div class=\\\"datagrid-empty\\\"></div>\").appendTo(_250.dc.view);\nd.html(opts.emptyMsg).css(\"top\",h+\"px\");\n}\n}\n},renderEmptyRow:function(_252){\nvar opts=$(_252).datagrid(\"options\");\nvar cols=$.map($(_252).datagrid(\"getColumnFields\"),function(_253){\nreturn $(_252).datagrid(\"getColumnOption\",_253);\n});\n$.map(cols,function(col){\ncol.formatter1=col.formatter;\ncol.styler1=col.styler;\ncol.formatter=col.styler=undefined;\n});\nvar _254=opts.rowStyler;\nopts.rowStyler=function(){\n};\nvar _255=$.data(_252,\"datagrid\").dc.body2;\n_255.html(this.renderTable(_252,0,[{}],false));\n_255.find(\"tbody *\").css({height:1,borderColor:\"transparent\",background:\"transparent\"});\nvar tr=_255.find(\".datagrid-row\");\ntr.removeClass(\"datagrid-row\").removeAttr(\"datagrid-row-index\");\ntr.find(\".datagrid-cell,.datagrid-cell-check\").empty();\n$.map(cols,function(col){\ncol.formatter=col.formatter1;\ncol.styler=col.styler1;\ncol.formatter1=col.styler1=undefined;\n});\nopts.rowStyler=_254;\n}};\n$.fn.datagrid.defaults=$.extend({},$.fn.panel.defaults,{sharedStyleSheet:false,frozenColumns:undefined,columns:undefined,fitColumns:false,resizeHandle:\"right\",resizeEdge:5,autoRowHeight:true,toolbar:null,striped:false,method:\"post\",nowrap:true,idField:null,url:null,data:null,loadMsg:\"Processing, please wait ...\",emptyMsg:\"\",rownumbers:false,singleSelect:false,ctrlSelect:false,selectOnCheck:true,checkOnSelect:true,pagination:false,pagePosition:\"bottom\",pageNumber:1,pageSize:10,pageList:[10,20,30,40,50],queryParams:{},sortName:null,sortOrder:\"asc\",multiSort:false,remoteSort:true,showHeader:true,showFooter:false,scrollOnSelect:true,scrollbarSize:18,rownumberWidth:30,editorHeight:31,headerEvents:{mouseover:_84(true),mouseout:_84(false),click:_88,dblclick:_8f,contextmenu:_95},rowEvents:{mouseover:_98(true),mouseout:_98(false),click:_a0,dblclick:_ab,contextmenu:_b0},rowStyler:function(_256,_257){\n},loader:function(_258,_259,_25a){\nvar opts=$(this).datagrid(\"options\");\nif(!opts.url){\nreturn false;\n}\n$.ajax({type:opts.method,url:opts.url,data:_258,dataType:\"json\",success:function(data){\n_259(data);\n},error:function(){\n_25a.apply(this,arguments);\n}});\n},loadFilter:function(data){\nreturn data;\n},editors:_1c6,finder:{getTr:function(_25b,_25c,type,_25d){\ntype=type||\"body\";\n_25d=_25d||0;\nvar _25e=$.data(_25b,\"datagrid\");\nvar dc=_25e.dc;\nvar opts=_25e.options;\nif(_25d==0){\nvar tr1=opts.finder.getTr(_25b,_25c,type,1);\nvar tr2=opts.finder.getTr(_25b,_25c,type,2);\nreturn tr1.add(tr2);\n}else{\nif(type==\"body\"){\nvar tr=$(\"#\"+_25e.rowIdPrefix+\"-\"+_25d+\"-\"+_25c);\nif(!tr.length){\ntr=(_25d==1?dc.body1:dc.body2).find(\">table>tbody>tr[datagrid-row-index=\"+_25c+\"]\");\n}\nreturn tr;\n}else{\nif(type==\"footer\"){\nreturn (_25d==1?dc.footer1:dc.footer2).find(\">table>tbody>tr[datagrid-row-index=\"+_25c+\"]\");\n}else{\nif(type==\"selected\"){\nreturn (_25d==1?dc.body1:dc.body2).find(\">table>tbody>tr.datagrid-row-selected\");\n}else{\nif(type==\"highlight\"){\nreturn (_25d==1?dc.body1:dc.body2).find(\">table>tbody>tr.datagrid-row-over\");\n}else{\nif(type==\"checked\"){\nreturn (_25d==1?dc.body1:dc.body2).find(\">table>tbody>tr.datagrid-row-checked\");\n}else{\nif(type==\"editing\"){\nreturn (_25d==1?dc.body1:dc.body2).find(\">table>tbody>tr.datagrid-row-editing\");\n}else{\nif(type==\"last\"){\nreturn (_25d==1?dc.body1:dc.body2).find(\">table>tbody>tr[datagrid-row-index]:last\");\n}else{\nif(type==\"allbody\"){\nreturn (_25d==1?dc.body1:dc.body2).find(\">table>tbody>tr[datagrid-row-index]\");\n}else{\nif(type==\"allfooter\"){\nreturn (_25d==1?dc.footer1:dc.footer2).find(\">table>tbody>tr[datagrid-row-index]\");\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n},getRow:function(_25f,p){\nvar _260=(typeof p==\"object\")?p.attr(\"datagrid-row-index\"):p;\nreturn $.data(_25f,\"datagrid\").data.rows[parseInt(_260)];\n},getRows:function(_261){\nreturn $(_261).datagrid(\"getRows\");\n}},view:_20f,onBeforeLoad:function(_262){\n},onLoadSuccess:function(){\n},onLoadError:function(){\n},onClickRow:function(_263,_264){\n},onDblClickRow:function(_265,_266){\n},onClickCell:function(_267,_268,_269){\n},onDblClickCell:function(_26a,_26b,_26c){\n},onBeforeSortColumn:function(sort,_26d){\n},onSortColumn:function(sort,_26e){\n},onResizeColumn:function(_26f,_270){\n},onBeforeSelect:function(_271,_272){\n},onSelect:function(_273,_274){\n},onBeforeUnselect:function(_275,_276){\n},onUnselect:function(_277,_278){\n},onSelectAll:function(rows){\n},onUnselectAll:function(rows){\n},onBeforeCheck:function(_279,_27a){\n},onCheck:function(_27b,_27c){\n},onBeforeUncheck:function(_27d,_27e){\n},onUncheck:function(_27f,_280){\n},onCheckAll:function(rows){\n},onUncheckAll:function(rows){\n},onBeforeEdit:function(_281,_282){\n},onBeginEdit:function(_283,_284){\n},onEndEdit:function(_285,_286,_287){\n},onAfterEdit:function(_288,_289,_28a){\n},onCancelEdit:function(_28b,_28c){\n},onHeaderContextMenu:function(e,_28d){\n},onRowContextMenu:function(e,_28e,_28f){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.datalist.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"datalist\").options;\n$(_2).datagrid($.extend({},_3,{cls:\"datalist\"+(_3.lines?\" datalist-lines\":\"\"),frozenColumns:(_3.frozenColumns&&_3.frozenColumns.length)?_3.frozenColumns:(_3.checkbox?[[{field:\"_ck\",checkbox:true}]]:undefined),columns:(_3.columns&&_3.columns.length)?_3.columns:[[{field:_3.textField,width:\"100%\",formatter:function(_4,_5,_6){\nreturn _3.textFormatter?_3.textFormatter(_4,_5,_6):_4;\n}}]]}));\n};\nvar _7=$.extend({},$.fn.datagrid.defaults.view,{render:function(_8,_9,_a){\nvar _b=$.data(_8,\"datagrid\");\nvar _c=_b.options;\nif(_c.groupField){\nvar g=this.groupRows(_8,_b.data.rows);\nthis.groups=g.groups;\n_b.data.rows=g.rows;\nvar _d=[];\nfor(var i=0;i<g.groups.length;i++){\n_d.push(this.renderGroup.call(this,_8,i,g.groups[i],_a));\n}\n$(_9).html(_d.join(\"\"));\n}else{\n$(_9).html(this.renderTable(_8,0,_b.data.rows,_a));\n}\n},renderGroup:function(_e,_f,_10,_11){\nvar _12=$.data(_e,\"datagrid\");\nvar _13=_12.options;\nvar _14=$(_e).datagrid(\"getColumnFields\",_11);\nvar _15=[];\n_15.push(\"<div class=\\\"datagrid-group\\\" group-index=\"+_f+\">\");\nif(!_11){\n_15.push(\"<span class=\\\"datagrid-group-title\\\">\");\n_15.push(_13.groupFormatter.call(_e,_10.value,_10.rows));\n_15.push(\"</span>\");\n}\n_15.push(\"</div>\");\n_15.push(this.renderTable(_e,_10.startIndex,_10.rows,_11));\nreturn _15.join(\"\");\n},groupRows:function(_16,_17){\nvar _18=$.data(_16,\"datagrid\");\nvar _19=_18.options;\nvar _1a=[];\nfor(var i=0;i<_17.length;i++){\nvar row=_17[i];\nvar _1b=_1c(row[_19.groupField]);\nif(!_1b){\n_1b={value:row[_19.groupField],rows:[row]};\n_1a.push(_1b);\n}else{\n_1b.rows.push(row);\n}\n}\nvar _1d=0;\nvar _17=[];\nfor(var i=0;i<_1a.length;i++){\nvar _1b=_1a[i];\n_1b.startIndex=_1d;\n_1d+=_1b.rows.length;\n_17=_17.concat(_1b.rows);\n}\nreturn {groups:_1a,rows:_17};\nfunction _1c(_1e){\nfor(var i=0;i<_1a.length;i++){\nvar _1f=_1a[i];\nif(_1f.value==_1e){\nreturn _1f;\n}\n}\nreturn null;\n};\n}});\n$.fn.datalist=function(_20,_21){\nif(typeof _20==\"string\"){\nvar _22=$.fn.datalist.methods[_20];\nif(_22){\nreturn _22(this,_21);\n}else{\nreturn this.datagrid(_20,_21);\n}\n}\n_20=_20||{};\nreturn this.each(function(){\nvar _23=$.data(this,\"datalist\");\nif(_23){\n$.extend(_23.options,_20);\n}else{\nvar _24=$.extend({},$.fn.datalist.defaults,$.fn.datalist.parseOptions(this),_20);\n_24.columns=$.extend(true,[],_24.columns);\n_23=$.data(this,\"datalist\",{options:_24});\n}\n_1(this);\nif(!_23.options.data){\nvar _25=$.fn.datalist.parseData(this);\nif(_25.total){\n$(this).datalist(\"loadData\",_25);\n}\n}\n});\n};\n$.fn.datalist.methods={options:function(jq){\nreturn $.data(jq[0],\"datalist\").options;\n}};\n$.fn.datalist.parseOptions=function(_26){\nreturn $.extend({},$.fn.datagrid.parseOptions(_26),$.parser.parseOptions(_26,[\"valueField\",\"textField\",\"groupField\",{checkbox:\"boolean\",lines:\"boolean\"}]));\n};\n$.fn.datalist.parseData=function(_27){\nvar _28=$.data(_27,\"datalist\").options;\nvar _29={total:0,rows:[]};\n$(_27).children().each(function(){\nvar _2a=$.parser.parseOptions(this,[\"value\",\"group\"]);\nvar row={};\nvar _2b=$(this).html();\nrow[_28.valueField]=_2a.value!=undefined?_2a.value:_2b;\nrow[_28.textField]=_2b;\nif(_28.groupField){\nrow[_28.groupField]=_2a.group;\n}\n_29.total++;\n_29.rows.push(row);\n});\nreturn _29;\n};\n$.fn.datalist.defaults=$.extend({},$.fn.datagrid.defaults,{fitColumns:true,singleSelect:true,showHeader:false,checkbox:false,lines:false,valueField:\"value\",textField:\"text\",groupField:\"\",view:_7,textFormatter:function(_2c,row){\nreturn _2c;\n},groupFormatter:function(_2d,_2e){\nreturn _2d;\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.datebox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"datebox\");\nvar _4=_3.options;\n$(_2).addClass(\"datebox-f\").combo($.extend({},_4,{onShowPanel:function(){\n_5(this);\n_6(this);\n_7(this);\n_18(this,$(this).datebox(\"getText\"),true);\n_4.onShowPanel.call(this);\n}}));\nif(!_3.calendar){\nvar _8=$(_2).combo(\"panel\").css(\"overflow\",\"hidden\");\n_8.panel(\"options\").onBeforeDestroy=function(){\nvar c=$(this).find(\".calendar-shared\");\nif(c.length){\nc.insertBefore(c[0].pholder);\n}\n};\nvar cc=$(\"<div class=\\\"datebox-calendar-inner\\\"></div>\").prependTo(_8);\nif(_4.sharedCalendar){\nvar c=$(_4.sharedCalendar);\nif(!c[0].pholder){\nc[0].pholder=$(\"<div class=\\\"calendar-pholder\\\" style=\\\"display:none\\\"></div>\").insertAfter(c);\n}\nc.addClass(\"calendar-shared\").appendTo(cc);\nif(!c.hasClass(\"calendar\")){\nc.calendar();\n}\n_3.calendar=c;\n}else{\n_3.calendar=$(\"<div></div>\").appendTo(cc).calendar();\n}\n$.extend(_3.calendar.calendar(\"options\"),{fit:true,border:false,onSelect:function(_9){\nvar _a=this.target;\nvar _b=$(_a).datebox(\"options\");\n_b.onSelect.call(_a,_9);\n_18(_a,_b.formatter.call(_a,_9));\n$(_a).combo(\"hidePanel\");\n}});\n}\n$(_2).combo(\"textbox\").parent().addClass(\"datebox\");\n$(_2).datebox(\"initValue\",_4.value);\nfunction _5(_c){\nvar _d=$(_c).datebox(\"options\");\nvar _e=$(_c).combo(\"panel\");\n_e._unbind(\".datebox\")._bind(\"click.datebox\",function(e){\nif($(e.target).hasClass(\"datebox-button-a\")){\nvar _f=parseInt($(e.target).attr(\"datebox-button-index\"));\n_d.buttons[_f].handler.call(e.target,_c);\n}\n});\n};\nfunction _6(_10){\nvar _11=$(_10).combo(\"panel\");\nif(_11.children(\"div.datebox-button\").length){\nreturn;\n}\nvar _12=$(\"<div class=\\\"datebox-button\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" style=\\\"width:100%\\\"><tr></tr></table></div>\").appendTo(_11);\nvar tr=_12.find(\"tr\");\nfor(var i=0;i<_4.buttons.length;i++){\nvar td=$(\"<td></td>\").appendTo(tr);\nvar btn=_4.buttons[i];\nvar t=$(\"<a class=\\\"datebox-button-a\\\" href=\\\"javascript:;\\\"></a>\").html($.isFunction(btn.text)?btn.text(_10):btn.text).appendTo(td);\nt.attr(\"datebox-button-index\",i);\n}\ntr.find(\"td\").css(\"width\",(100/_4.buttons.length)+\"%\");\n};\nfunction _7(_13){\nvar _14=$(_13).combo(\"panel\");\nvar cc=_14.children(\"div.datebox-calendar-inner\");\n_14.children()._outerWidth(_14.width());\n_3.calendar.appendTo(cc);\n_3.calendar[0].target=_13;\nif(_4.panelHeight!=\"auto\"){\nvar _15=_14.height();\n_14.children().not(cc).each(function(){\n_15-=$(this).outerHeight();\n});\ncc._outerHeight(_15);\n}\n_3.calendar.calendar(\"resize\");\n};\n};\nfunction _16(_17,q){\n_18(_17,q,true);\n};\nfunction _19(_1a){\nvar _1b=$.data(_1a,\"datebox\");\nvar _1c=_1b.options;\nvar _1d=_1b.calendar.calendar(\"options\").current;\nif(_1d){\n_18(_1a,_1c.formatter.call(_1a,_1d));\n$(_1a).combo(\"hidePanel\");\n}\n};\nfunction _18(_1e,_1f,_20){\nvar _21=$.data(_1e,\"datebox\");\nvar _22=_21.options;\nvar _23=_21.calendar;\n_23.calendar(\"moveTo\",_22.parser.call(_1e,_1f));\nif(_20){\n$(_1e).combo(\"setValue\",_1f);\n}else{\nif(_1f){\n_1f=_22.formatter.call(_1e,_23.calendar(\"options\").current);\n}\n$(_1e).combo(\"setText\",_1f).combo(\"setValue\",_1f);\n}\n};\n$.fn.datebox=function(_24,_25){\nif(typeof _24==\"string\"){\nvar _26=$.fn.datebox.methods[_24];\nif(_26){\nreturn _26(this,_25);\n}else{\nreturn this.combo(_24,_25);\n}\n}\n_24=_24||{};\nreturn this.each(function(){\nvar _27=$.data(this,\"datebox\");\nif(_27){\n$.extend(_27.options,_24);\n}else{\n$.data(this,\"datebox\",{options:$.extend({},$.fn.datebox.defaults,$.fn.datebox.parseOptions(this),_24)});\n}\n_1(this);\n});\n};\n$.fn.datebox.methods={options:function(jq){\nvar _28=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"datebox\").options,{width:_28.width,height:_28.height,originalValue:_28.originalValue,disabled:_28.disabled,readonly:_28.readonly});\n},cloneFrom:function(jq,_29){\nreturn jq.each(function(){\n$(this).combo(\"cloneFrom\",_29);\n$.data(this,\"datebox\",{options:$.extend(true,{},$(_29).datebox(\"options\")),calendar:$(_29).datebox(\"calendar\")});\n$(this).addClass(\"datebox-f\");\n});\n},calendar:function(jq){\nreturn $.data(jq[0],\"datebox\").calendar;\n},initValue:function(jq,_2a){\nreturn jq.each(function(){\nvar _2b=$(this).datebox(\"options\");\nvar _2c=_2b.value;\nif(_2c){\nvar _2d=_2b.parser.call(this,_2c);\n_2c=_2b.formatter.call(this,_2d);\n$(this).datebox(\"calendar\").calendar(\"moveTo\",_2d);\n}\n$(this).combo(\"initValue\",_2c).combo(\"setText\",_2c);\n});\n},setValue:function(jq,_2e){\nreturn jq.each(function(){\n_18(this,_2e);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _2f=$(this).datebox(\"options\");\n$(this).datebox(\"setValue\",_2f.originalValue);\n});\n},setDate:function(jq,_30){\nreturn jq.each(function(){\nvar _31=$(this).datebox(\"options\");\n$(this).datebox(\"calendar\").calendar(\"moveTo\",_30);\n_18(this,_30?_31.formatter.call(this,_30):\"\");\n});\n},getDate:function(jq){\nif(jq.datebox(\"getValue\")){\nreturn jq.datebox(\"calendar\").calendar(\"options\").current;\n}else{\nreturn null;\n}\n}};\n$.fn.datebox.parseOptions=function(_32){\nreturn $.extend({},$.fn.combo.parseOptions(_32),$.parser.parseOptions(_32,[\"sharedCalendar\"]));\n};\n$.fn.datebox.defaults=$.extend({},$.fn.combo.defaults,{panelWidth:250,panelHeight:\"auto\",sharedCalendar:null,keyHandler:{up:function(e){\n},down:function(e){\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_19(this);\n},query:function(q,e){\n_16(this,q);\n}},currentText:\"Today\",closeText:\"Close\",okText:\"Ok\",buttons:[{text:function(_33){\nreturn $(_33).datebox(\"options\").currentText;\n},handler:function(_34){\nvar _35=$(_34).datebox(\"options\");\nvar now=new Date();\nvar _36=new Date(now.getFullYear(),now.getMonth(),now.getDate());\n$(_34).datebox(\"calendar\").calendar({year:_36.getFullYear(),month:_36.getMonth()+1,current:_36});\n_35.onSelect.call(_34,_36);\n_19(_34);\n}},{text:function(_37){\nreturn $(_37).datebox(\"options\").closeText;\n},handler:function(_38){\n$(this).closest(\"div.combo-panel\").panel(\"close\");\n}}],formatter:function(_39){\nvar y=_39.getFullYear();\nvar m=_39.getMonth()+1;\nvar d=_39.getDate();\nreturn (m<10?(\"0\"+m):m)+\"/\"+(d<10?(\"0\"+d):d)+\"/\"+y;\n},parser:function(s){\nvar _3a=$(this).datebox(\"calendar\").calendar(\"options\");\nif(!s){\nreturn new _3a.Date();\n}\nvar ss=s.split(\"/\");\nvar m=parseInt(ss[0],10);\nvar d=parseInt(ss[1],10);\nvar y=parseInt(ss[2],10);\nif(!isNaN(y)&&!isNaN(m)&&!isNaN(d)){\nreturn new _3a.Date(y,m-1,d);\n}else{\nreturn new _3a.Date();\n}\n},onSelect:function(_3b){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.datetimebox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"datetimebox\");\nvar _4=_3.options;\n$(_2).datebox($.extend({},_4,{onShowPanel:function(){\nvar _5=$(this).datetimebox(\"getValue\");\n_d(this,_5,true);\n_4.onShowPanel.call(this);\n},formatter:$.fn.datebox.defaults.formatter,parser:$.fn.datebox.defaults.parser}));\n$(_2).removeClass(\"datebox-f\").addClass(\"datetimebox-f\");\n$(_2).datebox(\"calendar\").calendar({onSelect:function(_6){\n_4.onSelect.call(this.target,_6);\n}});\nif(!_3.spinner){\nvar _7=$(_2).datebox(\"panel\");\nvar p=$(\"<div style=\\\"padding:2px\\\"><input></div>\").insertAfter(_7.children(\"div.datebox-calendar-inner\"));\n_3.spinner=p.children(\"input\");\n}\n_3.spinner.timespinner({width:_4.spinnerWidth,showSeconds:_4.showSeconds,separator:_4.timeSeparator,hour12:_4.hour12});\n$(_2).datetimebox(\"initValue\",_4.value);\n};\nfunction _8(_9){\nvar c=$(_9).datetimebox(\"calendar\");\nvar t=$(_9).datetimebox(\"spinner\");\nvar _a=c.calendar(\"options\").current;\nreturn new Date(_a.getFullYear(),_a.getMonth(),_a.getDate(),t.timespinner(\"getHours\"),t.timespinner(\"getMinutes\"),t.timespinner(\"getSeconds\"));\n};\nfunction _b(_c,q){\n_d(_c,q,true);\n};\nfunction _e(_f){\nvar _10=$.data(_f,\"datetimebox\").options;\nvar _11=_8(_f);\n_d(_f,_10.formatter.call(_f,_11));\n$(_f).combo(\"hidePanel\");\n};\nfunction _d(_12,_13,_14){\nvar _15=$.data(_12,\"datetimebox\").options;\n$(_12).combo(\"setValue\",_13);\nif(!_14){\nif(_13){\nvar _16=_15.parser.call(_12,_13);\n$(_12).combo(\"setText\",_15.formatter.call(_12,_16));\n$(_12).combo(\"setValue\",_15.formatter.call(_12,_16));\n}else{\n$(_12).combo(\"setText\",_13);\n}\n}\nvar _16=_15.parser.call(_12,_13);\n$(_12).datetimebox(\"calendar\").calendar(\"moveTo\",_16);\n$(_12).datetimebox(\"spinner\").timespinner(\"setValue\",_17(_16));\nfunction _17(_18){\nfunction _19(_1a){\nreturn (_1a<10?\"0\":\"\")+_1a;\n};\nvar tt=[_19(_18.getHours()),_19(_18.getMinutes())];\nif(_15.showSeconds){\ntt.push(_19(_18.getSeconds()));\n}\nreturn tt.join($(_12).datetimebox(\"spinner\").timespinner(\"options\").separator);\n};\n};\n$.fn.datetimebox=function(_1b,_1c){\nif(typeof _1b==\"string\"){\nvar _1d=$.fn.datetimebox.methods[_1b];\nif(_1d){\nreturn _1d(this,_1c);\n}else{\nreturn this.datebox(_1b,_1c);\n}\n}\n_1b=_1b||{};\nreturn this.each(function(){\nvar _1e=$.data(this,\"datetimebox\");\nif(_1e){\n$.extend(_1e.options,_1b);\n}else{\n$.data(this,\"datetimebox\",{options:$.extend({},$.fn.datetimebox.defaults,$.fn.datetimebox.parseOptions(this),_1b)});\n}\n_1(this);\n});\n};\n$.fn.datetimebox.methods={options:function(jq){\nvar _1f=jq.datebox(\"options\");\nreturn $.extend($.data(jq[0],\"datetimebox\").options,{originalValue:_1f.originalValue,disabled:_1f.disabled,readonly:_1f.readonly});\n},cloneFrom:function(jq,_20){\nreturn jq.each(function(){\n$(this).datebox(\"cloneFrom\",_20);\n$.data(this,\"datetimebox\",{options:$.extend(true,{},$(_20).datetimebox(\"options\")),spinner:$(_20).datetimebox(\"spinner\")});\n$(this).removeClass(\"datebox-f\").addClass(\"datetimebox-f\");\n});\n},spinner:function(jq){\nreturn $.data(jq[0],\"datetimebox\").spinner;\n},initValue:function(jq,_21){\nreturn jq.each(function(){\nvar _22=$(this).datetimebox(\"options\");\nvar _23=_22.value;\nif(_23){\nvar _24=_22.parser.call(this,_23);\n_23=_22.formatter.call(this,_24);\n$(this).datetimebox(\"calendar\").calendar(\"moveTo\",_24);\n}\n$(this).combo(\"initValue\",_23).combo(\"setText\",_23);\n});\n},setValue:function(jq,_25){\nreturn jq.each(function(){\n_d(this,_25);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _26=$(this).datetimebox(\"options\");\n$(this).datetimebox(\"setValue\",_26.originalValue);\n});\n},setDate:function(jq,_27){\nreturn jq.each(function(){\nvar _28=$(this).datetimebox(\"options\");\n$(this).datetimebox(\"calendar\").calendar(\"moveTo\",_27);\n_d(this,_27?_28.formatter.call(this,_27):\"\");\n});\n},getDate:function(jq){\nif(jq.datetimebox(\"getValue\")){\nreturn jq.datetimebox(\"calendar\").calendar(\"options\").current;\n}else{\nreturn null;\n}\n}};\n$.fn.datetimebox.parseOptions=function(_29){\nvar t=$(_29);\nreturn $.extend({},$.fn.datebox.parseOptions(_29),$.parser.parseOptions(_29,[\"timeSeparator\",\"spinnerWidth\",{showSeconds:\"boolean\"}]));\n};\n$.fn.datetimebox.defaults=$.extend({},$.fn.datebox.defaults,{spinnerWidth:\"100%\",showSeconds:true,timeSeparator:\":\",hour12:false,panelEvents:{mousedown:function(e){\n}},keyHandler:{up:function(e){\n},down:function(e){\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_e(this);\n},query:function(q,e){\n_b(this,q);\n}},buttons:[{text:function(_2a){\nreturn $(_2a).datetimebox(\"options\").currentText;\n},handler:function(_2b){\nvar _2c=$(_2b).datetimebox(\"options\");\n_d(_2b,_2c.formatter.call(_2b,new Date()));\n$(_2b).datetimebox(\"hidePanel\");\n}},{text:function(_2d){\nreturn $(_2d).datetimebox(\"options\").okText;\n},handler:function(_2e){\n_e(_2e);\n}},{text:function(_2f){\nreturn $(_2f).datetimebox(\"options\").closeText;\n},handler:function(_30){\n$(_30).datetimebox(\"hidePanel\");\n}}],formatter:function(_31){\nif(!_31){\nreturn \"\";\n}\nreturn $.fn.datebox.defaults.formatter.call(this,_31)+\" \"+$.fn.timespinner.defaults.formatter.call($(this).datetimebox(\"spinner\")[0],_31);\n},parser:function(s){\ns=$.trim(s);\nif(!s){\nreturn new Date();\n}\nvar dt=s.split(\" \");\nvar _32=$.fn.datebox.defaults.parser.call(this,dt[0]);\nif(dt.length<2){\nreturn _32;\n}\nvar _33=$.fn.timespinner.defaults.parser.call($(this).datetimebox(\"spinner\")[0],dt[1]+(dt[2]?\" \"+dt[2]:\"\"));\nreturn new Date(_32.getFullYear(),_32.getMonth(),_32.getDate(),_33.getHours(),_33.getMinutes(),_33.getSeconds());\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.datetimespinner.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"datetimespinner\").options;\n$(_2).addClass(\"datetimespinner-f\").timespinner(_3);\n};\n$.fn.datetimespinner=function(_4,_5){\nif(typeof _4==\"string\"){\nvar _6=$.fn.datetimespinner.methods[_4];\nif(_6){\nreturn _6(this,_5);\n}else{\nreturn this.timespinner(_4,_5);\n}\n}\n_4=_4||{};\nreturn this.each(function(){\nvar _7=$.data(this,\"datetimespinner\");\nif(_7){\n$.extend(_7.options,_4);\n}else{\n$.data(this,\"datetimespinner\",{options:$.extend({},$.fn.datetimespinner.defaults,$.fn.datetimespinner.parseOptions(this),_4)});\n}\n_1(this);\n});\n};\n$.fn.datetimespinner.methods={options:function(jq){\nvar _8=jq.timespinner(\"options\");\nreturn $.extend($.data(jq[0],\"datetimespinner\").options,{width:_8.width,value:_8.value,originalValue:_8.originalValue,disabled:_8.disabled,readonly:_8.readonly});\n}};\n$.fn.datetimespinner.parseOptions=function(_9){\nreturn $.extend({},$.fn.timespinner.parseOptions(_9),$.parser.parseOptions(_9,[]));\n};\n$.fn.datetimespinner.defaults=$.extend({},$.fn.timespinner.defaults,{formatter:function(_a){\nif(!_a){\nreturn \"\";\n}\nreturn $.fn.datebox.defaults.formatter.call(this,_a)+\" \"+$.fn.timespinner.defaults.formatter.call(this,_a);\n},parser:function(s){\ns=$.trim(s);\nif(!s){\nreturn null;\n}\nvar dt=s.split(\" \");\nvar _b=$.fn.datebox.defaults.parser.call(this,dt[0]);\nif(dt.length<2){\nreturn _b;\n}\nvar _c=$.fn.timespinner.defaults.parser.call(this,dt[1]+(dt[2]?\" \"+dt[2]:\"\"));\nreturn new Date(_b.getFullYear(),_b.getMonth(),_b.getDate(),_c.getHours(),_c.getMinutes(),_c.getSeconds());\n},selections:[[0,2],[3,5],[6,10],[11,13],[14,16],[17,19],[20,22]]});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.dialog.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"dialog\").options;\n_3.inited=false;\n$(_2).window($.extend({},_3,{onResize:function(w,h){\nif(_3.inited){\n_b(this);\n_3.onResize.call(this,w,h);\n}\n}}));\nvar _4=$(_2).window(\"window\");\nif(_3.toolbar){\nif($.isArray(_3.toolbar)){\n$(_2).siblings(\"div.dialog-toolbar\").remove();\nvar _5=$(\"<div class=\\\"dialog-toolbar\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"><tr></tr></table></div>\").appendTo(_4);\nvar tr=_5.find(\"tr\");\nfor(var i=0;i<_3.toolbar.length;i++){\nvar _6=_3.toolbar[i];\nif(_6==\"-\"){\n$(\"<td><div class=\\\"dialog-tool-separator\\\"></div></td>\").appendTo(tr);\n}else{\nvar td=$(\"<td></td>\").appendTo(tr);\nvar _7=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(td);\n_7[0].onclick=eval(_6.handler||function(){\n});\n_7.linkbutton($.extend({},_6,{plain:true}));\n}\n}\n}else{\n$(_3.toolbar).addClass(\"dialog-toolbar\").appendTo(_4);\n$(_3.toolbar).show();\n}\n}else{\n$(_2).siblings(\"div.dialog-toolbar\").remove();\n}\nif(_3.buttons){\nif($.isArray(_3.buttons)){\n$(_2).siblings(\"div.dialog-button\").remove();\nvar _8=$(\"<div class=\\\"dialog-button\\\"></div>\").appendTo(_4);\nfor(var i=0;i<_3.buttons.length;i++){\nvar p=_3.buttons[i];\nvar _9=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(_8);\nif(p.handler){\n_9[0].onclick=p.handler;\n}\n_9.linkbutton(p);\n}\n}else{\n$(_3.buttons).addClass(\"dialog-button\").appendTo(_4);\n$(_3.buttons).show();\n}\n}else{\n$(_2).siblings(\"div.dialog-button\").remove();\n}\n_3.inited=true;\nvar _a=_3.closed;\n_4.show();\n$(_2).window(\"resize\",{});\nif(_a){\n_4.hide();\n}\n};\nfunction _b(_c,_d){\nvar t=$(_c);\nvar _e=t.dialog(\"options\");\nvar _f=_e.noheader;\nvar tb=t.siblings(\".dialog-toolbar\");\nvar bb=t.siblings(\".dialog-button\");\ntb.insertBefore(_c).css({borderTopWidth:(_f?1:0),top:(_f?tb.length:0)});\nbb.insertAfter(_c);\ntb.add(bb)._outerWidth(t._outerWidth()).find(\".easyui-fluid:visible\").each(function(){\n$(this).triggerHandler(\"_resize\");\n});\nvar _10=tb._outerHeight()+bb._outerHeight();\nif(!isNaN(parseInt(_e.height))){\nt._outerHeight(t._outerHeight()-_10);\n}else{\nvar _11=t._size(\"min-height\");\nif(_11){\nt._size(\"min-height\",_11-_10);\n}\nvar _12=t._size(\"max-height\");\nif(_12){\nt._size(\"max-height\",_12-_10);\n}\n}\nvar _13=$.data(_c,\"window\").shadow;\nif(_13){\nvar cc=t.panel(\"panel\");\n_13.css({width:cc._outerWidth(),height:cc._outerHeight()});\n}\n};\n$.fn.dialog=function(_14,_15){\nif(typeof _14==\"string\"){\nvar _16=$.fn.dialog.methods[_14];\nif(_16){\nreturn _16(this,_15);\n}else{\nreturn this.window(_14,_15);\n}\n}\n_14=_14||{};\nreturn this.each(function(){\nvar _17=$.data(this,\"dialog\");\nif(_17){\n$.extend(_17.options,_14);\n}else{\n$.data(this,\"dialog\",{options:$.extend({},$.fn.dialog.defaults,$.fn.dialog.parseOptions(this),_14)});\n}\n_1(this);\n});\n};\n$.fn.dialog.methods={options:function(jq){\nvar _18=$.data(jq[0],\"dialog\").options;\nvar _19=jq.panel(\"options\");\n$.extend(_18,{width:_19.width,height:_19.height,left:_19.left,top:_19.top,closed:_19.closed,collapsed:_19.collapsed,minimized:_19.minimized,maximized:_19.maximized});\nreturn _18;\n},dialog:function(jq){\nreturn jq.window(\"window\");\n}};\n$.fn.dialog.parseOptions=function(_1a){\nvar t=$(_1a);\nreturn $.extend({},$.fn.window.parseOptions(_1a),$.parser.parseOptions(_1a,[\"toolbar\",\"buttons\"]),{toolbar:(t.children(\".dialog-toolbar\").length?t.children(\".dialog-toolbar\").removeClass(\"dialog-toolbar\"):undefined),buttons:(t.children(\".dialog-button\").length?t.children(\".dialog-button\").removeClass(\"dialog-button\"):undefined)});\n};\n$.fn.dialog.defaults=$.extend({},$.fn.window.defaults,{title:\"New Dialog\",collapsible:false,minimizable:false,maximizable:false,resizable:false,toolbar:null,buttons:null});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.draggable.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(e){\nvar _2=$.data(e.data.target,\"draggable\");\nvar _3=_2.options;\nvar _4=_2.proxy;\nvar _5=e.data;\nvar _6=_5.startLeft+e.pageX-_5.startX;\nvar _7=_5.startTop+e.pageY-_5.startY;\nif(_4){\nif(_4.parent()[0]==document.body){\nif(_3.deltaX!=null&&_3.deltaX!=undefined){\n_6=e.pageX+_3.deltaX;\n}else{\n_6=e.pageX-e.data.offsetWidth;\n}\nif(_3.deltaY!=null&&_3.deltaY!=undefined){\n_7=e.pageY+_3.deltaY;\n}else{\n_7=e.pageY-e.data.offsetHeight;\n}\n}else{\nif(_3.deltaX!=null&&_3.deltaX!=undefined){\n_6+=e.data.offsetWidth+_3.deltaX;\n}\nif(_3.deltaY!=null&&_3.deltaY!=undefined){\n_7+=e.data.offsetHeight+_3.deltaY;\n}\n}\n}\nif(e.data.parent!=document.body){\n_6+=$(e.data.parent).scrollLeft();\n_7+=$(e.data.parent).scrollTop();\n}\nif(_3.axis==\"h\"){\n_5.left=_6;\n}else{\nif(_3.axis==\"v\"){\n_5.top=_7;\n}else{\n_5.left=_6;\n_5.top=_7;\n}\n}\n};\nfunction _8(e){\nvar _9=$.data(e.data.target,\"draggable\");\nvar _a=_9.options;\nvar _b=_9.proxy;\nif(!_b){\n_b=$(e.data.target);\n}\n_b.css({left:e.data.left,top:e.data.top});\n$(\"body\").css(\"cursor\",_a.cursor);\n};\nfunction _c(e){\nif(!$.fn.draggable.isDragging){\nreturn false;\n}\nvar _d=$.data(e.data.target,\"draggable\");\nvar _e=_d.options;\nvar _f=$(\".droppable:visible\").filter(function(){\nreturn e.data.target!=this;\n}).filter(function(){\nvar _10=$.data(this,\"droppable\").options.accept;\nif(_10){\nreturn $(_10).filter(function(){\nreturn this==e.data.target;\n}).length>0;\n}else{\nreturn true;\n}\n});\n_d.droppables=_f;\nvar _11=_d.proxy;\nif(!_11){\nif(_e.proxy){\nif(_e.proxy==\"clone\"){\n_11=$(e.data.target).clone().insertAfter(e.data.target);\n}else{\n_11=_e.proxy.call(e.data.target,e.data.target);\n}\n_d.proxy=_11;\n}else{\n_11=$(e.data.target);\n}\n}\n_11.css(\"position\",\"absolute\");\n_1(e);\n_8(e);\n_e.onStartDrag.call(e.data.target,e);\nreturn false;\n};\nfunction _12(e){\nif(!$.fn.draggable.isDragging){\nreturn false;\n}\nvar _13=$.data(e.data.target,\"draggable\");\n_1(e);\nif(_13.options.onDrag.call(e.data.target,e)!=false){\n_8(e);\n}\nvar _14=e.data.target;\n_13.droppables.each(function(){\nvar _15=$(this);\nif(_15.droppable(\"options\").disabled){\nreturn;\n}\nvar p2=_15.offset();\nif(e.pageX>p2.left&&e.pageX<p2.left+_15.outerWidth()&&e.pageY>p2.top&&e.pageY<p2.top+_15.outerHeight()){\nif(!this.entered){\n$(this).trigger(\"_dragenter\",[_14]);\nthis.entered=true;\n}\n$(this).trigger(\"_dragover\",[_14]);\n}else{\nif(this.entered){\n$(this).trigger(\"_dragleave\",[_14]);\nthis.entered=false;\n}\n}\n});\nreturn false;\n};\nfunction _16(e){\nif(!$.fn.draggable.isDragging){\n_17();\nreturn false;\n}\n_12(e);\nvar _18=$.data(e.data.target,\"draggable\");\nvar _19=_18.proxy;\nvar _1a=_18.options;\n_1a.onEndDrag.call(e.data.target,e);\nif(_1a.revert){\nif(_1b()==true){\n$(e.data.target).css({position:e.data.startPosition,left:e.data.startLeft,top:e.data.startTop});\n}else{\nif(_19){\nvar _1c,top;\nif(_19.parent()[0]==document.body){\n_1c=e.data.startX-e.data.offsetWidth;\ntop=e.data.startY-e.data.offsetHeight;\n}else{\n_1c=e.data.startLeft;\ntop=e.data.startTop;\n}\n_19.animate({left:_1c,top:top},function(){\n_1d();\n});\n}else{\n$(e.data.target).animate({left:e.data.startLeft,top:e.data.startTop},function(){\n$(e.data.target).css(\"position\",e.data.startPosition);\n});\n}\n}\n}else{\n$(e.data.target).css({position:\"absolute\",left:e.data.left,top:e.data.top});\n_1b();\n}\n_1a.onStopDrag.call(e.data.target,e);\n_17();\nfunction _1d(){\nif(_19){\n_19.remove();\n}\n_18.proxy=null;\n};\nfunction _1b(){\nvar _1e=false;\n_18.droppables.each(function(){\nvar _1f=$(this);\nif(_1f.droppable(\"options\").disabled){\nreturn;\n}\nvar p2=_1f.offset();\nif(e.pageX>p2.left&&e.pageX<p2.left+_1f.outerWidth()&&e.pageY>p2.top&&e.pageY<p2.top+_1f.outerHeight()){\nif(_1a.revert){\n$(e.data.target).css({position:e.data.startPosition,left:e.data.startLeft,top:e.data.startTop});\n}\n$(this).triggerHandler(\"_drop\",[e.data.target]);\n_1d();\n_1e=true;\nthis.entered=false;\nreturn false;\n}\n});\nif(!_1e&&!_1a.revert){\n_1d();\n}\nreturn _1e;\n};\nreturn false;\n};\nfunction _17(){\nif($.fn.draggable.timer){\nclearTimeout($.fn.draggable.timer);\n$.fn.draggable.timer=undefined;\n}\n$(document)._unbind(\".draggable\");\n$.fn.draggable.isDragging=false;\nsetTimeout(function(){\n$(\"body\").css(\"cursor\",\"\");\n},100);\n};\n$.fn.draggable=function(_20,_21){\nif(typeof _20==\"string\"){\nreturn $.fn.draggable.methods[_20](this,_21);\n}\nreturn this.each(function(){\nvar _22;\nvar _23=$.data(this,\"draggable\");\nif(_23){\n_23.handle._unbind(\".draggable\");\n_22=$.extend(_23.options,_20);\n}else{\n_22=$.extend({},$.fn.draggable.defaults,$.fn.draggable.parseOptions(this),_20||{});\n}\nvar _24=_22.handle?(typeof _22.handle==\"string\"?$(_22.handle,this):_22.handle):$(this);\n$.data(this,\"draggable\",{options:_22,handle:_24});\nif(_22.disabled){\n$(this).css(\"cursor\",\"\");\nreturn;\n}\n_24._unbind(\".draggable\")._bind(\"mousemove.draggable\",{target:this},function(e){\nif($.fn.draggable.isDragging){\nreturn;\n}\nvar _25=$.data(e.data.target,\"draggable\").options;\nif(_26(e)){\n$(this).css(\"cursor\",_25.cursor);\n}else{\n$(this).css(\"cursor\",\"\");\n}\n})._bind(\"mouseleave.draggable\",{target:this},function(e){\n$(this).css(\"cursor\",\"\");\n})._bind(\"mousedown.draggable\",{target:this},function(e){\nif(_26(e)==false){\nreturn;\n}\n$(this).css(\"cursor\",\"\");\nvar _27=$(e.data.target).position();\nvar _28=$(e.data.target).offset();\nvar _29={startPosition:$(e.data.target).css(\"position\"),startLeft:_27.left,startTop:_27.top,left:_27.left,top:_27.top,startX:e.pageX,startY:e.pageY,width:$(e.data.target).outerWidth(),height:$(e.data.target).outerHeight(),offsetWidth:(e.pageX-_28.left),offsetHeight:(e.pageY-_28.top),target:e.data.target,parent:$(e.data.target).parent()[0]};\n$.extend(e.data,_29);\nvar _2a=$.data(e.data.target,\"draggable\").options;\nif(_2a.onBeforeDrag.call(e.data.target,e)==false){\nreturn;\n}\n$(document)._bind(\"mousedown.draggable\",e.data,_c);\n$(document)._bind(\"mousemove.draggable\",e.data,_12);\n$(document)._bind(\"mouseup.draggable\",e.data,_16);\n$.fn.draggable.timer=setTimeout(function(){\n$.fn.draggable.isDragging=true;\n_c(e);\n},_2a.delay);\nreturn false;\n});\nfunction _26(e){\nvar _2b=$.data(e.data.target,\"draggable\");\nvar _2c=_2b.handle;\nvar _2d=$(_2c).offset();\nvar _2e=$(_2c).outerWidth();\nvar _2f=$(_2c).outerHeight();\nvar t=e.pageY-_2d.top;\nvar r=_2d.left+_2e-e.pageX;\nvar b=_2d.top+_2f-e.pageY;\nvar l=e.pageX-_2d.left;\nreturn Math.min(t,r,b,l)>_2b.options.edge;\n};\n});\n};\n$.fn.draggable.methods={options:function(jq){\nreturn $.data(jq[0],\"draggable\").options;\n},proxy:function(jq){\nreturn $.data(jq[0],\"draggable\").proxy;\n},enable:function(jq){\nreturn jq.each(function(){\n$(this).draggable({disabled:false});\n});\n},disable:function(jq){\nreturn jq.each(function(){\n$(this).draggable({disabled:true});\n});\n}};\n$.fn.draggable.parseOptions=function(_30){\nvar t=$(_30);\nreturn $.extend({},$.parser.parseOptions(_30,[\"cursor\",\"handle\",\"axis\",{\"revert\":\"boolean\",\"deltaX\":\"number\",\"deltaY\":\"number\",\"edge\":\"number\",\"delay\":\"number\"}]),{disabled:(t.attr(\"disabled\")?true:undefined)});\n};\n$.fn.draggable.defaults={proxy:null,revert:false,cursor:\"move\",deltaX:null,deltaY:null,handle:null,disabled:false,edge:0,axis:null,delay:100,onBeforeDrag:function(e){\n},onStartDrag:function(e){\n},onDrag:function(e){\n},onEndDrag:function(e){\n},onStopDrag:function(e){\n}};\n$.fn.draggable.isDragging=false;\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.droppable.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\n$(_2).addClass(\"droppable\");\n$(_2)._bind(\"_dragenter\",function(e,_3){\n$.data(_2,\"droppable\").options.onDragEnter.apply(_2,[e,_3]);\n});\n$(_2)._bind(\"_dragleave\",function(e,_4){\n$.data(_2,\"droppable\").options.onDragLeave.apply(_2,[e,_4]);\n});\n$(_2)._bind(\"_dragover\",function(e,_5){\n$.data(_2,\"droppable\").options.onDragOver.apply(_2,[e,_5]);\n});\n$(_2)._bind(\"_drop\",function(e,_6){\n$.data(_2,\"droppable\").options.onDrop.apply(_2,[e,_6]);\n});\n};\n$.fn.droppable=function(_7,_8){\nif(typeof _7==\"string\"){\nreturn $.fn.droppable.methods[_7](this,_8);\n}\n_7=_7||{};\nreturn this.each(function(){\nvar _9=$.data(this,\"droppable\");\nif(_9){\n$.extend(_9.options,_7);\n}else{\n_1(this);\n$.data(this,\"droppable\",{options:$.extend({},$.fn.droppable.defaults,$.fn.droppable.parseOptions(this),_7)});\n}\n});\n};\n$.fn.droppable.methods={options:function(jq){\nreturn $.data(jq[0],\"droppable\").options;\n},enable:function(jq){\nreturn jq.each(function(){\n$(this).droppable({disabled:false});\n});\n},disable:function(jq){\nreturn jq.each(function(){\n$(this).droppable({disabled:true});\n});\n}};\n$.fn.droppable.parseOptions=function(_a){\nvar t=$(_a);\nreturn $.extend({},$.parser.parseOptions(_a,[\"accept\"]),{disabled:(t.attr(\"disabled\")?true:undefined)});\n};\n$.fn.droppable.defaults={accept:null,disabled:false,onDragEnter:function(e,_b){\n},onDragOver:function(e,_c){\n},onDragLeave:function(e,_d){\n},onDrop:function(e,_e){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.filebox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nvar _1=0;\nfunction _2(_3){\nvar _4=$.data(_3,\"filebox\");\nvar _5=_4.options;\n_5.fileboxId=\"filebox_file_id_\"+(++_1);\n$(_3).addClass(\"filebox-f\").textbox(_5);\n$(_3).textbox(\"textbox\").attr(\"readonly\",\"readonly\");\n_4.filebox=$(_3).next().addClass(\"filebox\");\nvar _6=_7(_3);\nvar _8=$(_3).filebox(\"button\");\nif(_8.length){\n$(\"<label class=\\\"filebox-label\\\" for=\\\"\"+_5.fileboxId+\"\\\"></label>\").appendTo(_8);\nif(_8.linkbutton(\"options\").disabled){\n_6._propAttr(\"disabled\",true);\n}else{\n_6._propAttr(\"disabled\",false);\n}\n}\n};\nfunction _7(_9){\nvar _a=$.data(_9,\"filebox\");\nvar _b=_a.options;\n_a.filebox.find(\".textbox-value\").remove();\n_b.oldValue=\"\";\nvar _c=$(\"<input type=\\\"file\\\" class=\\\"textbox-value\\\">\").appendTo(_a.filebox);\n_c.attr(\"id\",_b.fileboxId).attr(\"name\",$(_9).attr(\"textboxName\")||\"\");\n_c.attr(\"accept\",_b.accept);\n_c.attr(\"capture\",_b.capture);\nif(_b.multiple){\n_c.attr(\"multiple\",\"multiple\");\n}\n_c.change(function(){\nvar _d=this.value;\nif(this.files){\n_d=$.map(this.files,function(_e){\nreturn _e.name;\n}).join(_b.separator);\n}\n$(_9).filebox(\"setText\",_d);\n_b.onChange.call(_9,_d,_b.oldValue);\n_b.oldValue=_d;\n});\nreturn _c;\n};\n$.fn.filebox=function(_f,_10){\nif(typeof _f==\"string\"){\nvar _11=$.fn.filebox.methods[_f];\nif(_11){\nreturn _11(this,_10);\n}else{\nreturn this.textbox(_f,_10);\n}\n}\n_f=_f||{};\nreturn this.each(function(){\nvar _12=$.data(this,\"filebox\");\nif(_12){\n$.extend(_12.options,_f);\n}else{\n$.data(this,\"filebox\",{options:$.extend({},$.fn.filebox.defaults,$.fn.filebox.parseOptions(this),_f)});\n}\n_2(this);\n});\n};\n$.fn.filebox.methods={options:function(jq){\nvar _13=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"filebox\").options,{width:_13.width,value:_13.value,originalValue:_13.originalValue,disabled:_13.disabled,readonly:_13.readonly});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"clear\");\n_7(this);\n});\n},reset:function(jq){\nreturn jq.each(function(){\n$(this).filebox(\"clear\");\n});\n},setValue:function(jq){\nreturn jq;\n},setValues:function(jq){\nreturn jq;\n},files:function(jq){\nreturn jq.next().find(\".textbox-value\")[0].files;\n}};\n$.fn.filebox.parseOptions=function(_14){\nvar t=$(_14);\nreturn $.extend({},$.fn.textbox.parseOptions(_14),$.parser.parseOptions(_14,[\"accept\",\"capture\",\"separator\"]),{multiple:(t.attr(\"multiple\")?true:undefined)});\n};\n$.fn.filebox.defaults=$.extend({},$.fn.textbox.defaults,{buttonIcon:null,buttonText:\"Choose File\",buttonAlign:\"right\",inputEvents:{},accept:\"\",capture:\"\",separator:\",\",multiple:false});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.form.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2,_3){\nvar _4=$.data(_2,\"form\").options;\n$.extend(_4,_3||{});\nvar _5=$.extend({},_4.queryParams);\nif(_4.onSubmit.call(_2,_5)==false){\nreturn;\n}\nvar _6=$(_2).find(\".textbox-text:focus\");\n_6.triggerHandler(\"blur\");\n_6.focus();\nvar _7=null;\nif(_4.dirty){\nvar ff=[];\n$.map(_4.dirtyFields,function(f){\nif($(f).hasClass(\"textbox-f\")){\n$(f).next().find(\".textbox-value\").each(function(){\nff.push(this);\n});\n}else{\nff.push(f);\n}\n});\n_7=$(_2).find(\"input[name]:enabled,textarea[name]:enabled,select[name]:enabled\").filter(function(){\nreturn $.inArray(this,ff)==-1;\n});\n_7._propAttr(\"disabled\",true);\n}\nif(_4.ajax){\nif(_4.iframe){\n_8(_2,_5);\n}else{\nif(window.FormData!==undefined){\n_9(_2,_5);\n}else{\n_8(_2,_5);\n}\n}\n}else{\n$(_2).submit();\n}\nif(_4.dirty){\n_7._propAttr(\"disabled\",false);\n}\n};\nfunction _8(_a,_b){\nvar _c=$.data(_a,\"form\").options;\nvar _d=\"easyui_frame_\"+(new Date().getTime());\nvar _e=$(\"<iframe id=\"+_d+\" name=\"+_d+\"></iframe>\").appendTo(\"body\");\n_e.attr(\"src\",window.ActiveXObject?\"javascript:false\":\"about:blank\");\n_e.css({position:\"absolute\",top:-1000,left:-1000});\n_e.bind(\"load\",cb);\n_f(_b);\nfunction _f(_10){\nvar _11=$(_a);\nif(_c.url){\n_11.attr(\"action\",_c.url);\n}\nvar t=_11.attr(\"target\"),a=_11.attr(\"action\");\n_11.attr(\"target\",_d);\nvar _12=$();\ntry{\nfor(var n in _10){\nvar _13=$(\"<input type=\\\"hidden\\\" name=\\\"\"+n+\"\\\">\").val(_10[n]).appendTo(_11);\n_12=_12.add(_13);\n}\n_14();\n_11[0].submit();\n}\nfinally{\n_11.attr(\"action\",a);\nt?_11.attr(\"target\",t):_11.removeAttr(\"target\");\n_12.remove();\n}\n};\nfunction _14(){\nvar f=$(\"#\"+_d);\nif(!f.length){\nreturn;\n}\ntry{\nvar s=f.contents()[0].readyState;\nif(s&&s.toLowerCase()==\"uninitialized\"){\nsetTimeout(_14,100);\n}\n}\ncatch(e){\ncb();\n}\n};\nvar _15=10;\nfunction cb(){\nvar f=$(\"#\"+_d);\nif(!f.length){\nreturn;\n}\nf.unbind();\nvar _16=\"\";\ntry{\nvar _17=f.contents().find(\"body\");\n_16=_17.html();\nif(_16==\"\"){\nif(--_15){\nsetTimeout(cb,100);\nreturn;\n}\n}\nvar ta=_17.find(\">textarea\");\nif(ta.length){\n_16=ta.val();\n}else{\nvar pre=_17.find(\">pre\");\nif(pre.length){\n_16=pre.html();\n}\n}\n}\ncatch(e){\n}\n_c.success.call(_a,_16);\nsetTimeout(function(){\nf.unbind();\nf.remove();\n},100);\n};\n};\nfunction _9(_18,_19){\nvar _1a=$.data(_18,\"form\").options;\nvar _1b=new FormData($(_18)[0]);\nfor(var _1c in _19){\n_1b.append(_1c,_19[_1c]);\n}\n$.ajax({url:_1a.url,type:\"post\",xhr:function(){\nvar xhr=$.ajaxSettings.xhr();\nif(xhr.upload){\nxhr.upload.addEventListener(\"progress\",function(e){\nif(e.lengthComputable){\nvar _1d=e.total;\nvar _1e=e.loaded||e.position;\nvar _1f=Math.ceil(_1e*100/_1d);\n_1a.onProgress.call(_18,_1f);\n}\n},false);\n}\nreturn xhr;\n},data:_1b,dataType:\"html\",cache:false,contentType:false,processData:false,complete:function(res){\n_1a.success.call(_18,res.responseText);\n}});\n};\nfunction _20(_21,_22){\nvar _23=$.data(_21,\"form\").options;\nif(typeof _22==\"string\"){\nvar _24={};\nif(_23.onBeforeLoad.call(_21,_24)==false){\nreturn;\n}\n$.ajax({url:_22,data:_24,dataType:\"json\",success:function(_25){\n_26(_25);\n},error:function(){\n_23.onLoadError.apply(_21,arguments);\n}});\n}else{\n_26(_22);\n}\nfunction _26(_27){\nvar _28=$(_21);\nfor(var _29 in _27){\nvar val=_27[_29];\nif(!_2a(_29,val)){\nif(!_2b(_29,val)){\n_28.find(\"input[name=\\\"\"+_29+\"\\\"]\").val(val);\n_28.find(\"textarea[name=\\\"\"+_29+\"\\\"]\").val(val);\n_28.find(\"select[name=\\\"\"+_29+\"\\\"]\").val(val);\n}\n}\n}\n_23.onLoadSuccess.call(_21,_27);\n_28.form(\"validate\");\n};\nfunction _2a(_2c,val){\nvar _2d=[\"switchbutton\",\"radiobutton\",\"checkbox\"];\nfor(var i=0;i<_2d.length;i++){\nvar _2e=_2d[i];\nvar cc=$(_21).find(\"[\"+_2e+\"Name=\\\"\"+_2c+\"\\\"]\");\nif(cc.length){\ncc[_2e](\"uncheck\");\ncc.each(function(){\nif(_2f($(this)[_2e](\"options\").value,val)){\n$(this)[_2e](\"check\");\n}\n});\nreturn true;\n}\n}\nvar cc=$(_21).find(\"input[name=\\\"\"+_2c+\"\\\"][type=radio], input[name=\\\"\"+_2c+\"\\\"][type=checkbox]\");\nif(cc.length){\ncc._propAttr(\"checked\",false);\ncc.each(function(){\nif(_2f($(this).val(),val)){\n$(this)._propAttr(\"checked\",true);\n}\n});\nreturn true;\n}\nreturn false;\n};\nfunction _2f(v,val){\nif(v==String(val)||$.inArray(v,$.isArray(val)?val:[val])>=0){\nreturn true;\n}else{\nreturn false;\n}\n};\nfunction _2b(_30,val){\nvar _31=$(_21).find(\"[textboxName=\\\"\"+_30+\"\\\"],[sliderName=\\\"\"+_30+\"\\\"]\");\nif(_31.length){\nfor(var i=0;i<_23.fieldTypes.length;i++){\nvar _32=_23.fieldTypes[i];\nvar _33=_31.data(_32);\nif(_33){\nif(_33.options.multiple||_33.options.range){\n_31[_32](\"setValues\",val);\n}else{\n_31[_32](\"setValue\",val);\n}\nreturn true;\n}\n}\n}\nreturn false;\n};\n};\nfunction _34(_35){\n$(\"input,select,textarea\",_35).each(function(){\nif($(this).hasClass(\"textbox-value\")){\nreturn;\n}\nvar t=this.type,tag=this.tagName.toLowerCase();\nif(t==\"text\"||t==\"hidden\"||t==\"password\"||tag==\"textarea\"){\nthis.value=\"\";\n}else{\nif(t==\"file\"){\nvar _36=$(this);\nif(!_36.hasClass(\"textbox-value\")){\nvar _37=_36.clone().val(\"\");\n_37.insertAfter(_36);\nif(_36.data(\"validatebox\")){\n_36.validatebox(\"destroy\");\n_37.validatebox();\n}else{\n_36.remove();\n}\n}\n}else{\nif(t==\"checkbox\"||t==\"radio\"){\nthis.checked=false;\n}else{\nif(tag==\"select\"){\nthis.selectedIndex=-1;\n}\n}\n}\n}\n});\nvar tmp=$();\nvar _38=$(_35);\nvar _39=$.data(_35,\"form\").options;\nfor(var i=0;i<_39.fieldTypes.length;i++){\nvar _3a=_39.fieldTypes[i];\nvar _3b=_38.find(\".\"+_3a+\"-f\").not(tmp);\nif(_3b.length&&_3b[_3a]){\n_3b[_3a](\"clear\");\ntmp=tmp.add(_3b);\n}\n}\n_38.form(\"validate\");\n};\nfunction _3c(_3d){\n_3d.reset();\nvar _3e=$(_3d);\nvar _3f=$.data(_3d,\"form\").options;\nfor(var i=_3f.fieldTypes.length-1;i>=0;i--){\nvar _40=_3f.fieldTypes[i];\nvar _41=_3e.find(\".\"+_40+\"-f\");\nif(_41.length&&_41[_40]){\n_41[_40](\"reset\");\n}\n}\n_3e.form(\"validate\");\n};\nfunction _42(_43){\nvar _44=$.data(_43,\"form\").options;\n$(_43).unbind(\".form\");\nif(_44.ajax){\n$(_43).bind(\"submit.form\",function(){\nsetTimeout(function(){\n_1(_43,_44);\n},0);\nreturn false;\n});\n}\n$(_43).bind(\"_change.form\",function(e,t){\nif($.inArray(t,_44.dirtyFields)==-1){\n_44.dirtyFields.push(t);\n}\n_44.onChange.call(this,t);\n}).bind(\"change.form\",function(e){\nvar t=e.target;\nif(!$(t).hasClass(\"textbox-text\")){\nif($.inArray(t,_44.dirtyFields)==-1){\n_44.dirtyFields.push(t);\n}\n_44.onChange.call(this,t);\n}\n});\n_45(_43,_44.novalidate);\n};\nfunction _46(_47,_48){\n_48=_48||{};\nvar _49=$.data(_47,\"form\");\nif(_49){\n$.extend(_49.options,_48);\n}else{\n$.data(_47,\"form\",{options:$.extend({},$.fn.form.defaults,$.fn.form.parseOptions(_47),_48)});\n}\n};\nfunction _4a(_4b){\nif($.fn.validatebox){\nvar t=$(_4b);\nt.find(\".validatebox-text:not(:disabled)\").validatebox(\"validate\");\nvar _4c=t.find(\".validatebox-invalid\");\n_4c.filter(\":not(:disabled):first\").focus();\nreturn _4c.length==0;\n}\nreturn true;\n};\nfunction _45(_4d,_4e){\nvar _4f=$.data(_4d,\"form\").options;\n_4f.novalidate=_4e;\n$(_4d).find(\".validatebox-text:not(:disabled)\").validatebox(_4e?\"disableValidation\":\"enableValidation\");\n};\n$.fn.form=function(_50,_51){\nif(typeof _50==\"string\"){\nthis.each(function(){\n_46(this);\n});\nreturn $.fn.form.methods[_50](this,_51);\n}\nreturn this.each(function(){\n_46(this,_50);\n_42(this);\n});\n};\n$.fn.form.methods={options:function(jq){\nreturn $.data(jq[0],\"form\").options;\n},submit:function(jq,_52){\nreturn jq.each(function(){\n_1(this,_52);\n});\n},load:function(jq,_53){\nreturn jq.each(function(){\n_20(this,_53);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_34(this);\n});\n},reset:function(jq){\nreturn jq.each(function(){\n_3c(this);\n});\n},validate:function(jq){\nreturn _4a(jq[0]);\n},disableValidation:function(jq){\nreturn jq.each(function(){\n_45(this,true);\n});\n},enableValidation:function(jq){\nreturn jq.each(function(){\n_45(this,false);\n});\n},resetValidation:function(jq){\nreturn jq.each(function(){\n$(this).find(\".validatebox-text:not(:disabled)\").validatebox(\"resetValidation\");\n});\n},resetDirty:function(jq){\nreturn jq.each(function(){\n$(this).form(\"options\").dirtyFields=[];\n});\n}};\n$.fn.form.parseOptions=function(_54){\nvar t=$(_54);\nreturn $.extend({},$.parser.parseOptions(_54,[{ajax:\"boolean\",dirty:\"boolean\"}]),{url:(t.attr(\"action\")?t.attr(\"action\"):undefined)});\n};\n$.fn.form.defaults={fieldTypes:[\"tagbox\",\"combobox\",\"combotree\",\"combogrid\",\"combotreegrid\",\"datetimebox\",\"datebox\",\"timepicker\",\"combo\",\"datetimespinner\",\"timespinner\",\"numberspinner\",\"spinner\",\"slider\",\"searchbox\",\"numberbox\",\"passwordbox\",\"filebox\",\"textbox\",\"switchbutton\",\"radiobutton\",\"checkbox\"],novalidate:false,ajax:true,iframe:true,dirty:false,dirtyFields:[],url:null,queryParams:{},onSubmit:function(_55){\nreturn $(this).form(\"validate\");\n},onProgress:function(_56){\n},success:function(_57){\n},onBeforeLoad:function(_58){\n},onLoadSuccess:function(_59){\n},onLoadError:function(){\n},onChange:function(_5a){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.layout.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nvar _1=false;\nfunction _2(_3,_4){\nvar _5=$.data(_3,\"layout\");\nvar _6=_5.options;\nvar _7=_5.panels;\nvar cc=$(_3);\nif(_4){\n$.extend(_6,{width:_4.width,height:_4.height});\n}\nif(_3.tagName.toLowerCase()==\"body\"){\ncc._size(\"fit\");\n}else{\ncc._size(_6);\n}\nvar _8={top:0,left:0,width:cc.width(),height:cc.height()};\n_9(_a(_7.expandNorth)?_7.expandNorth:_7.north,\"n\");\n_9(_a(_7.expandSouth)?_7.expandSouth:_7.south,\"s\");\n_b(_a(_7.expandEast)?_7.expandEast:_7.east,\"e\");\n_b(_a(_7.expandWest)?_7.expandWest:_7.west,\"w\");\n_7.center.panel(\"resize\",_8);\nfunction _9(pp,_c){\nif(!pp.length||!_a(pp)){\nreturn;\n}\nvar _d=pp.panel(\"options\");\npp.panel(\"resize\",{width:cc.width(),height:_d.height});\nvar _e=pp.panel(\"panel\").outerHeight();\npp.panel(\"move\",{left:0,top:(_c==\"n\"?0:cc.height()-_e)});\n_8.height-=_e;\nif(_c==\"n\"){\n_8.top+=_e;\nif(!_d.split&&_d.border){\n_8.top--;\n}\n}\nif(!_d.split&&_d.border){\n_8.height++;\n}\n};\nfunction _b(pp,_f){\nif(!pp.length||!_a(pp)){\nreturn;\n}\nvar _10=pp.panel(\"options\");\npp.panel(\"resize\",{width:_10.width,height:_8.height});\nvar _11=pp.panel(\"panel\").outerWidth();\npp.panel(\"move\",{left:(_f==\"e\"?cc.width()-_11:0),top:_8.top});\n_8.width-=_11;\nif(_f==\"w\"){\n_8.left+=_11;\nif(!_10.split&&_10.border){\n_8.left--;\n}\n}\nif(!_10.split&&_10.border){\n_8.width++;\n}\n};\n};\nfunction _12(_13){\nvar cc=$(_13);\ncc.addClass(\"layout\");\nfunction _14(el){\nvar _15=$.fn.layout.parsePanelOptions(el);\nif(\"north,south,east,west,center\".indexOf(_15.region)>=0){\n_19(_13,_15,el);\n}\n};\nvar _16=cc.layout(\"options\");\nvar _17=_16.onAdd;\n_16.onAdd=function(){\n};\ncc.find(\">div,>form>div\").each(function(){\n_14(this);\n});\n_16.onAdd=_17;\ncc.append(\"<div class=\\\"layout-split-proxy-h\\\"></div><div class=\\\"layout-split-proxy-v\\\"></div>\");\ncc._bind(\"_resize\",function(e,_18){\nif($(this).hasClass(\"easyui-fluid\")||_18){\n_2(_13);\n}\nreturn false;\n});\n};\nfunction _19(_1a,_1b,el){\n_1b.region=_1b.region||\"center\";\nvar _1c=$.data(_1a,\"layout\").panels;\nvar cc=$(_1a);\nvar dir=_1b.region;\nif(_1c[dir].length){\nreturn;\n}\nvar pp=$(el);\nif(!pp.length){\npp=$(\"<div></div>\").appendTo(cc);\n}\nvar _1d=$.extend({},$.fn.layout.paneldefaults,{width:(pp.length?parseInt(pp[0].style.width)||pp.outerWidth():\"auto\"),height:(pp.length?parseInt(pp[0].style.height)||pp.outerHeight():\"auto\"),doSize:false,collapsible:true,onOpen:function(){\nvar _1e=$(this).panel(\"header\").children(\"div.panel-tool\");\n_1e.children(\"a.panel-tool-collapse\").hide();\nvar _1f={north:\"up\",south:\"down\",east:\"right\",west:\"left\"};\nif(!_1f[dir]){\nreturn;\n}\nvar _20=\"layout-button-\"+_1f[dir];\nvar t=_1e.children(\"a.\"+_20);\nif(!t.length){\nt=$(\"<a href=\\\"javascript:;\\\"></a>\").addClass(_20).appendTo(_1e);\nt._bind(\"click\",{dir:dir},function(e){\n_39(_1a,e.data.dir);\nreturn false;\n});\n}\n$(this).panel(\"options\").collapsible?t.show():t.hide();\n}},_1b,{cls:((_1b.cls||\"\")+\" layout-panel layout-panel-\"+dir),bodyCls:((_1b.bodyCls||\"\")+\" layout-body\")});\npp.panel(_1d);\n_1c[dir]=pp;\nvar _21={north:\"s\",south:\"n\",east:\"w\",west:\"e\"};\nvar _22=pp.panel(\"panel\");\nif(pp.panel(\"options\").split){\n_22.addClass(\"layout-split-\"+dir);\n}\n_22.resizable($.extend({},{handles:(_21[dir]||\"\"),disabled:(!pp.panel(\"options\").split),onStartResize:function(e){\n_1=true;\nif(dir==\"north\"||dir==\"south\"){\nvar _23=$(\">div.layout-split-proxy-v\",_1a);\n}else{\nvar _23=$(\">div.layout-split-proxy-h\",_1a);\n}\nvar top=0,_24=0,_25=0,_26=0;\nvar pos={display:\"block\"};\nif(dir==\"north\"){\npos.top=parseInt(_22.css(\"top\"))+_22.outerHeight()-_23.height();\npos.left=parseInt(_22.css(\"left\"));\npos.width=_22.outerWidth();\npos.height=_23.height();\n}else{\nif(dir==\"south\"){\npos.top=parseInt(_22.css(\"top\"));\npos.left=parseInt(_22.css(\"left\"));\npos.width=_22.outerWidth();\npos.height=_23.height();\n}else{\nif(dir==\"east\"){\npos.top=parseInt(_22.css(\"top\"))||0;\npos.left=parseInt(_22.css(\"left\"))||0;\npos.width=_23.width();\npos.height=_22.outerHeight();\n}else{\nif(dir==\"west\"){\npos.top=parseInt(_22.css(\"top\"))||0;\npos.left=_22.outerWidth()-_23.width();\npos.width=_23.width();\npos.height=_22.outerHeight();\n}\n}\n}\n}\n_23.css(pos);\n$(\"<div class=\\\"layout-mask\\\"></div>\").css({left:0,top:0,width:cc.width(),height:cc.height()}).appendTo(cc);\n},onResize:function(e){\nif(dir==\"north\"||dir==\"south\"){\nvar _27=_28(this);\n$(this).resizable(\"options\").maxHeight=_27;\nvar _29=$(\">div.layout-split-proxy-v\",_1a);\nvar top=dir==\"north\"?e.data.height-_29.height():$(_1a).height()-e.data.height;\n_29.css(\"top\",top);\n}else{\nvar _2a=_28(this);\n$(this).resizable(\"options\").maxWidth=_2a;\nvar _29=$(\">div.layout-split-proxy-h\",_1a);\nvar _2b=dir==\"west\"?e.data.width-_29.width():$(_1a).width()-e.data.width;\n_29.css(\"left\",_2b);\n}\nreturn false;\n},onStopResize:function(e){\ncc.children(\"div.layout-split-proxy-v,div.layout-split-proxy-h\").hide();\npp.panel(\"resize\",e.data);\n_2(_1a);\n_1=false;\ncc.find(\">div.layout-mask\").remove();\n}},_1b));\ncc.layout(\"options\").onAdd.call(_1a,dir);\nfunction _28(p){\nvar _2c=\"expand\"+dir.substring(0,1).toUpperCase()+dir.substring(1);\nvar _2d=_1c[\"center\"];\nvar _2e=(dir==\"north\"||dir==\"south\")?\"minHeight\":\"minWidth\";\nvar _2f=(dir==\"north\"||dir==\"south\")?\"maxHeight\":\"maxWidth\";\nvar _30=(dir==\"north\"||dir==\"south\")?\"_outerHeight\":\"_outerWidth\";\nvar _31=$.parser.parseValue(_2f,_1c[dir].panel(\"options\")[_2f],$(_1a));\nvar _32=$.parser.parseValue(_2e,_2d.panel(\"options\")[_2e],$(_1a));\nvar _33=_2d.panel(\"panel\")[_30]()-_32;\nif(_a(_1c[_2c])){\n_33+=_1c[_2c][_30]()-1;\n}else{\n_33+=$(p)[_30]();\n}\nif(_33>_31){\n_33=_31;\n}\nreturn _33;\n};\n};\nfunction _34(_35,_36){\nvar _37=$.data(_35,\"layout\").panels;\nif(_37[_36].length){\n_37[_36].panel(\"destroy\");\n_37[_36]=$();\nvar _38=\"expand\"+_36.substring(0,1).toUpperCase()+_36.substring(1);\nif(_37[_38]){\n_37[_38].panel(\"destroy\");\n_37[_38]=undefined;\n}\n$(_35).layout(\"options\").onRemove.call(_35,_36);\n}\n};\nfunction _39(_3a,_3b,_3c){\nif(_3c==undefined){\n_3c=\"normal\";\n}\nvar _3d=$.data(_3a,\"layout\").panels;\nvar p=_3d[_3b];\nvar _3e=p.panel(\"options\");\nif(_3e.onBeforeCollapse.call(p)==false){\nreturn;\n}\nvar _3f=\"expand\"+_3b.substring(0,1).toUpperCase()+_3b.substring(1);\nif(!_3d[_3f]){\n_3d[_3f]=_40(_3b);\nvar ep=_3d[_3f].panel(\"panel\");\nif(!_3e.expandMode){\nep.css(\"cursor\",\"default\");\n}else{\nep._bind(\"click\",function(){\nif(_3e.expandMode==\"dock\"){\n_51(_3a,_3b);\n}else{\np.panel(\"expand\",false).panel(\"open\");\nvar _41=_42();\np.panel(\"resize\",_41.collapse);\np.panel(\"panel\")._unbind(\".layout\")._bind(\"mouseleave.layout\",{region:_3b},function(e){\n$(this).stop(true,true);\nif(_1==true){\nreturn;\n}\nif($(\"body>div.combo-p>div.combo-panel:visible\").length){\nreturn;\n}\n_39(_3a,e.data.region);\n});\np.panel(\"panel\").animate(_41.expand,function(){\n$(_3a).layout(\"options\").onExpand.call(_3a,_3b);\n});\n}\nreturn false;\n});\n}\n}\nvar _43=_42();\nif(!_a(_3d[_3f])){\n_3d.center.panel(\"resize\",_43.resizeC);\n}\np.panel(\"panel\").animate(_43.collapse,_3c,function(){\np.panel(\"collapse\",false).panel(\"close\");\n_3d[_3f].panel(\"open\").panel(\"resize\",_43.expandP);\n$(this)._unbind(\".layout\");\n$(_3a).layout(\"options\").onCollapse.call(_3a,_3b);\n});\nfunction _40(dir){\nvar _44={\"east\":\"left\",\"west\":\"right\",\"north\":\"down\",\"south\":\"up\"};\nvar _45=(_3e.region==\"north\"||_3e.region==\"south\");\nvar _46=\"layout-button-\"+_44[dir];\nvar p=$(\"<div></div>\").appendTo(_3a);\np.panel($.extend({},$.fn.layout.paneldefaults,{cls:(\"layout-expand layout-expand-\"+dir),title:\"&nbsp;\",titleDirection:_3e.titleDirection,iconCls:(_3e.hideCollapsedContent?null:_3e.iconCls),closed:true,minWidth:0,minHeight:0,doSize:false,region:_3e.region,collapsedSize:_3e.collapsedSize,noheader:(!_45&&_3e.hideExpandTool),tools:((_45&&_3e.hideExpandTool)?null:[{iconCls:_46,handler:function(){\n_51(_3a,_3b);\nreturn false;\n}}]),onResize:function(){\nvar _47=$(this).children(\".layout-expand-title\");\nif(_47.length){\nvar _48=$(this).children(\".panel-icon\");\nvar _49=_48.length>0?(_48._outerHeight()+2):0;\n_47._outerWidth($(this).height()-_49);\nvar _4a=($(this).width()-Math.min(_47._outerWidth(),_47._outerHeight()))/2;\nvar top=Math.max(_47._outerWidth(),_47._outerHeight());\nif(_47.hasClass(\"layout-expand-title-down\")){\n_4a+=Math.min(_47._outerWidth(),_47._outerHeight());\ntop=0;\n}\ntop+=_49;\n_47.css({left:(_4a+\"px\"),top:(top+\"px\")});\n}\n}}));\nif(!_3e.hideCollapsedContent){\nvar _4b=typeof _3e.collapsedContent==\"function\"?_3e.collapsedContent.call(p[0],_3e.title):_3e.collapsedContent;\n_45?p.panel(\"setTitle\",_4b):p.html(_4b);\n}\np.panel(\"panel\").hover(function(){\n$(this).addClass(\"layout-expand-over\");\n},function(){\n$(this).removeClass(\"layout-expand-over\");\n});\nreturn p;\n};\nfunction _42(){\nvar cc=$(_3a);\nvar _4c=_3d.center.panel(\"options\");\nvar _4d=_3e.collapsedSize;\nif(_3b==\"east\"){\nvar _4e=p.panel(\"panel\")._outerWidth();\nvar _4f=_4c.width+_4e-_4d;\nif(_3e.split||!_3e.border){\n_4f++;\n}\nreturn {resizeC:{width:_4f},expand:{left:cc.width()-_4e},expandP:{top:_4c.top,left:cc.width()-_4d,width:_4d,height:_4c.height},collapse:{left:cc.width(),top:_4c.top,height:_4c.height}};\n}else{\nif(_3b==\"west\"){\nvar _4e=p.panel(\"panel\")._outerWidth();\nvar _4f=_4c.width+_4e-_4d;\nif(_3e.split||!_3e.border){\n_4f++;\n}\nreturn {resizeC:{width:_4f,left:_4d-1},expand:{left:0},expandP:{left:0,top:_4c.top,width:_4d,height:_4c.height},collapse:{left:-_4e,top:_4c.top,height:_4c.height}};\n}else{\nif(_3b==\"north\"){\nvar _50=p.panel(\"panel\")._outerHeight();\nvar hh=_4c.height;\nif(!_a(_3d.expandNorth)){\nhh+=_50-_4d+((_3e.split||!_3e.border)?1:0);\n}\n_3d.east.add(_3d.west).add(_3d.expandEast).add(_3d.expandWest).panel(\"resize\",{top:_4d-1,height:hh});\nreturn {resizeC:{top:_4d-1,height:hh},expand:{top:0},expandP:{top:0,left:0,width:cc.width(),height:_4d},collapse:{top:-_50,width:cc.width()}};\n}else{\nif(_3b==\"south\"){\nvar _50=p.panel(\"panel\")._outerHeight();\nvar hh=_4c.height;\nif(!_a(_3d.expandSouth)){\nhh+=_50-_4d+((_3e.split||!_3e.border)?1:0);\n}\n_3d.east.add(_3d.west).add(_3d.expandEast).add(_3d.expandWest).panel(\"resize\",{height:hh});\nreturn {resizeC:{height:hh},expand:{top:cc.height()-_50},expandP:{top:cc.height()-_4d,left:0,width:cc.width(),height:_4d},collapse:{top:cc.height(),width:cc.width()}};\n}\n}\n}\n}\n};\n};\nfunction _51(_52,_53){\nvar _54=$.data(_52,\"layout\").panels;\nvar p=_54[_53];\nvar _55=p.panel(\"options\");\nif(_55.onBeforeExpand.call(p)==false){\nreturn;\n}\nvar _56=\"expand\"+_53.substring(0,1).toUpperCase()+_53.substring(1);\nif(_54[_56]){\n_54[_56].panel(\"close\");\np.panel(\"panel\").stop(true,true);\np.panel(\"expand\",false).panel(\"open\");\nvar _57=_58();\np.panel(\"resize\",_57.collapse);\np.panel(\"panel\").animate(_57.expand,function(){\n_2(_52);\n$(_52).layout(\"options\").onExpand.call(_52,_53);\n});\n}\nfunction _58(){\nvar cc=$(_52);\nvar _59=_54.center.panel(\"options\");\nif(_53==\"east\"&&_54.expandEast){\nreturn {collapse:{left:cc.width(),top:_59.top,height:_59.height},expand:{left:cc.width()-p.panel(\"panel\")._outerWidth()}};\n}else{\nif(_53==\"west\"&&_54.expandWest){\nreturn {collapse:{left:-p.panel(\"panel\")._outerWidth(),top:_59.top,height:_59.height},expand:{left:0}};\n}else{\nif(_53==\"north\"&&_54.expandNorth){\nreturn {collapse:{top:-p.panel(\"panel\")._outerHeight(),width:cc.width()},expand:{top:0}};\n}else{\nif(_53==\"south\"&&_54.expandSouth){\nreturn {collapse:{top:cc.height(),width:cc.width()},expand:{top:cc.height()-p.panel(\"panel\")._outerHeight()}};\n}\n}\n}\n}\n};\n};\nfunction _a(pp){\nif(!pp){\nreturn false;\n}\nif(pp.length){\nreturn pp.panel(\"panel\").is(\":visible\");\n}else{\nreturn false;\n}\n};\nfunction _5a(_5b){\nvar _5c=$.data(_5b,\"layout\");\nvar _5d=_5c.options;\nvar _5e=_5c.panels;\nvar _5f=_5d.onCollapse;\n_5d.onCollapse=function(){\n};\n_60(\"east\");\n_60(\"west\");\n_60(\"north\");\n_60(\"south\");\n_5d.onCollapse=_5f;\nfunction _60(_61){\nvar p=_5e[_61];\nif(p.length&&p.panel(\"options\").collapsed){\n_39(_5b,_61,0);\n}\n};\n};\nfunction _62(_63,_64,_65){\nvar p=$(_63).layout(\"panel\",_64);\np.panel(\"options\").split=_65;\nvar cls=\"layout-split-\"+_64;\nvar _66=p.panel(\"panel\").removeClass(cls);\nif(_65){\n_66.addClass(cls);\n}\n_66.resizable({disabled:(!_65)});\n_2(_63);\n};\n$.fn.layout=function(_67,_68){\nif(typeof _67==\"string\"){\nreturn $.fn.layout.methods[_67](this,_68);\n}\n_67=_67||{};\nreturn this.each(function(){\nvar _69=$.data(this,\"layout\");\nif(_69){\n$.extend(_69.options,_67);\n}else{\nvar _6a=$.extend({},$.fn.layout.defaults,$.fn.layout.parseOptions(this),_67);\n$.data(this,\"layout\",{options:_6a,panels:{center:$(),north:$(),south:$(),east:$(),west:$()}});\n_12(this);\n}\n_2(this);\n_5a(this);\n});\n};\n$.fn.layout.methods={options:function(jq){\nreturn $.data(jq[0],\"layout\").options;\n},resize:function(jq,_6b){\nreturn jq.each(function(){\n_2(this,_6b);\n});\n},panel:function(jq,_6c){\nreturn $.data(jq[0],\"layout\").panels[_6c];\n},collapse:function(jq,_6d){\nreturn jq.each(function(){\n_39(this,_6d);\n});\n},expand:function(jq,_6e){\nreturn jq.each(function(){\n_51(this,_6e);\n});\n},add:function(jq,_6f){\nreturn jq.each(function(){\n_19(this,_6f);\n_2(this);\nif($(this).layout(\"panel\",_6f.region).panel(\"options\").collapsed){\n_39(this,_6f.region,0);\n}\n});\n},remove:function(jq,_70){\nreturn jq.each(function(){\n_34(this,_70);\n_2(this);\n});\n},split:function(jq,_71){\nreturn jq.each(function(){\n_62(this,_71,true);\n});\n},unsplit:function(jq,_72){\nreturn jq.each(function(){\n_62(this,_72,false);\n});\n}};\n$.fn.layout.parseOptions=function(_73){\nreturn $.extend({},$.parser.parseOptions(_73,[{fit:\"boolean\"}]));\n};\n$.fn.layout.defaults={fit:false,onExpand:function(_74){\n},onCollapse:function(_75){\n},onAdd:function(_76){\n},onRemove:function(_77){\n}};\n$.fn.layout.parsePanelOptions=function(_78){\nvar t=$(_78);\nreturn $.extend({},$.fn.panel.parseOptions(_78),$.parser.parseOptions(_78,[\"region\",{split:\"boolean\",collpasedSize:\"number\",minWidth:\"number\",minHeight:\"number\",maxWidth:\"number\",maxHeight:\"number\"}]));\n};\n$.fn.layout.paneldefaults=$.extend({},$.fn.panel.defaults,{region:null,split:false,collapsedSize:32,expandMode:\"float\",hideExpandTool:false,hideCollapsedContent:true,collapsedContent:function(_79){\nvar p=$(this);\nvar _7a=p.panel(\"options\");\nif(_7a.region==\"north\"||_7a.region==\"south\"){\nreturn _79;\n}\nvar cc=[];\nif(_7a.iconCls){\ncc.push(\"<div class=\\\"panel-icon \"+_7a.iconCls+\"\\\"></div>\");\n}\ncc.push(\"<div class=\\\"panel-title layout-expand-title\");\ncc.push(\" layout-expand-title-\"+_7a.titleDirection);\ncc.push(_7a.iconCls?\" layout-expand-with-icon\":\"\");\ncc.push(\"\\\">\");\ncc.push(_79);\ncc.push(\"</div>\");\nreturn cc.join(\"\");\n},minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.linkbutton.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2,_3){\nvar _4=$.data(_2,\"linkbutton\").options;\nif(_3){\n$.extend(_4,_3);\n}\nif(_4.width||_4.height||_4.fit){\nvar _5=$(_2);\nvar _6=_5.parent();\nvar _7=_5.is(\":visible\");\nif(!_7){\nvar _8=$(\"<div style=\\\"display:none\\\"></div>\").insertBefore(_2);\nvar _9={position:_5.css(\"position\"),display:_5.css(\"display\"),left:_5.css(\"left\")};\n_5.appendTo(\"body\");\n_5.css({position:\"absolute\",display:\"inline-block\",left:-20000});\n}\n_5._size(_4,_6);\nvar _a=_5.find(\".l-btn-left\");\n_a.css(\"margin-top\",0);\n_a.css(\"margin-top\",parseInt((_5.height()-_a.height())/2)+\"px\");\nif(!_7){\n_5.insertAfter(_8);\n_5.css(_9);\n_8.remove();\n}\n}\n};\nfunction _b(_c){\nvar _d=$.data(_c,\"linkbutton\").options;\nvar t=$(_c).empty();\nt.addClass(\"l-btn\").removeClass(\"l-btn-plain l-btn-selected l-btn-plain-selected l-btn-outline\");\nt.removeClass(\"l-btn-small l-btn-medium l-btn-large\").addClass(\"l-btn-\"+_d.size);\nif(_d.plain){\nt.addClass(\"l-btn-plain\");\n}\nif(_d.outline){\nt.addClass(\"l-btn-outline\");\n}\nif(_d.selected){\nt.addClass(_d.plain?\"l-btn-selected l-btn-plain-selected\":\"l-btn-selected\");\n}\nt.attr(\"group\",_d.group||\"\");\nt.attr(\"id\",_d.id||\"\");\nvar _e=$(\"<span class=\\\"l-btn-left\\\"></span>\").appendTo(t);\nif(_d.text){\n$(\"<span class=\\\"l-btn-text\\\"></span>\").html(_d.text).appendTo(_e);\n}else{\n$(\"<span class=\\\"l-btn-text l-btn-empty\\\">&nbsp;</span>\").appendTo(_e);\n}\nif(_d.iconCls){\n$(\"<span class=\\\"l-btn-icon\\\">&nbsp;</span>\").addClass(_d.iconCls).appendTo(_e);\n_e.addClass(\"l-btn-icon-\"+_d.iconAlign);\n}\nt._unbind(\".linkbutton\")._bind(\"focus.linkbutton\",function(){\nif(!_d.disabled){\n$(this).addClass(\"l-btn-focus\");\n}\n})._bind(\"blur.linkbutton\",function(){\n$(this).removeClass(\"l-btn-focus\");\n})._bind(\"click.linkbutton\",function(){\nif(!_d.disabled){\nif(_d.toggle){\nif(_d.selected){\n$(this).linkbutton(\"unselect\");\n}else{\n$(this).linkbutton(\"select\");\n}\n}\n_d.onClick.call(this);\n}\n});\n_f(_c,_d.selected);\n_10(_c,_d.disabled);\n};\nfunction _f(_11,_12){\nvar _13=$.data(_11,\"linkbutton\").options;\nif(_12){\nif(_13.group){\n$(\"a.l-btn[group=\\\"\"+_13.group+\"\\\"]\").each(function(){\nvar o=$(this).linkbutton(\"options\");\nif(o.toggle){\n$(this).removeClass(\"l-btn-selected l-btn-plain-selected\");\no.selected=false;\n}\n});\n}\n$(_11).addClass(_13.plain?\"l-btn-selected l-btn-plain-selected\":\"l-btn-selected\");\n_13.selected=true;\n}else{\nif(!_13.group){\n$(_11).removeClass(\"l-btn-selected l-btn-plain-selected\");\n_13.selected=false;\n}\n}\n};\nfunction _10(_14,_15){\nvar _16=$.data(_14,\"linkbutton\");\nvar _17=_16.options;\n$(_14).removeClass(\"l-btn-disabled l-btn-plain-disabled\");\nif(_15){\n_17.disabled=true;\nvar _18=$(_14).attr(\"href\");\nif(_18){\n_16.href=_18;\n$(_14).attr(\"href\",\"javascript:;\");\n}\nif(_14.onclick){\n_16.onclick=_14.onclick;\n_14.onclick=null;\n}\n_17.plain?$(_14).addClass(\"l-btn-disabled l-btn-plain-disabled\"):$(_14).addClass(\"l-btn-disabled\");\n}else{\n_17.disabled=false;\nif(_16.href){\n$(_14).attr(\"href\",_16.href);\n}\nif(_16.onclick){\n_14.onclick=_16.onclick;\n}\n}\n$(_14)._propAttr(\"disabled\",_15);\n};\n$.fn.linkbutton=function(_19,_1a){\nif(typeof _19==\"string\"){\nreturn $.fn.linkbutton.methods[_19](this,_1a);\n}\n_19=_19||{};\nreturn this.each(function(){\nvar _1b=$.data(this,\"linkbutton\");\nif(_1b){\n$.extend(_1b.options,_19);\n}else{\n$.data(this,\"linkbutton\",{options:$.extend({},$.fn.linkbutton.defaults,$.fn.linkbutton.parseOptions(this),_19)});\n$(this)._propAttr(\"disabled\",false);\n$(this)._bind(\"_resize\",function(e,_1c){\nif($(this).hasClass(\"easyui-fluid\")||_1c){\n_1(this);\n}\nreturn false;\n});\n}\n_b(this);\n_1(this);\n});\n};\n$.fn.linkbutton.methods={options:function(jq){\nreturn $.data(jq[0],\"linkbutton\").options;\n},resize:function(jq,_1d){\nreturn jq.each(function(){\n_1(this,_1d);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_10(this,false);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_10(this,true);\n});\n},select:function(jq){\nreturn jq.each(function(){\n_f(this,true);\n});\n},unselect:function(jq){\nreturn jq.each(function(){\n_f(this,false);\n});\n}};\n$.fn.linkbutton.parseOptions=function(_1e){\nvar t=$(_1e);\nreturn $.extend({},$.parser.parseOptions(_1e,[\"id\",\"iconCls\",\"iconAlign\",\"group\",\"size\",\"text\",{plain:\"boolean\",toggle:\"boolean\",selected:\"boolean\",outline:\"boolean\"}]),{disabled:(t.attr(\"disabled\")?true:undefined),text:($.trim(t.html())||undefined),iconCls:(t.attr(\"icon\")||t.attr(\"iconCls\"))});\n};\n$.fn.linkbutton.defaults={id:null,disabled:false,toggle:false,selected:false,outline:false,group:null,plain:false,text:\"\",iconCls:null,iconAlign:\"left\",size:\"small\",onClick:function(){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.maskedbox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$(_2).data(\"maskedbox\");\nvar _4=_3.options;\n$(_2).textbox(_4);\n$(_2).maskedbox(\"initValue\",_4.value);\n};\nfunction _5(_6,_7){\nvar _8=$(_6).maskedbox(\"options\");\nvar tt=(_7||$(_6).maskedbox(\"getText\")||\"\").split(\"\");\nvar vv=[];\nfor(var i=0;i<_8.mask.length;i++){\nif(_8.masks[_8.mask[i]]){\nvar t=tt[i];\nvv.push(t!=_8.promptChar?t:\" \");\n}\n}\nreturn vv.join(\"\");\n};\nfunction _9(_a,_b){\nvar _c=$(_a).maskedbox(\"options\");\nvar cc=_b.split(\"\");\nvar tt=[];\nfor(var i=0;i<_c.mask.length;i++){\nvar m=_c.mask[i];\nvar r=_c.masks[m];\nif(r){\nvar c=cc.shift();\nif(c!=undefined){\nvar d=new RegExp(r,\"i\");\nif(d.test(c)){\ntt.push(c);\ncontinue;\n}\n}\ntt.push(_c.promptChar);\n}else{\ntt.push(m);\n}\n}\nreturn tt.join(\"\");\n};\nfunction _d(_e,c){\nvar _f=$(_e).maskedbox(\"options\");\nvar _10=$(_e).maskedbox(\"getSelectionRange\");\nvar _11=_12(_e,_10.start);\nvar end=_12(_e,_10.end);\nif(_11!=-1){\nvar r=new RegExp(_f.masks[_f.mask[_11]],\"i\");\nif(r.test(c)){\nvar vv=_5(_e).split(\"\");\nvar _13=_11-_14(_e,_11);\nvar _15=end-_14(_e,end);\nvv.splice(_13,_15-_13,c);\n$(_e).maskedbox(\"setValue\",_9(_e,vv.join(\"\")));\n_11=_12(_e,++_11);\n$(_e).maskedbox(\"setSelectionRange\",{start:_11,end:_11});\n}\n}\n};\nfunction _16(_17,_18){\nvar _19=$(_17).maskedbox(\"options\");\nvar vv=_5(_17).split(\"\");\nvar _1a=$(_17).maskedbox(\"getSelectionRange\");\nif(_1a.start==_1a.end){\nif(_18){\nvar _1b=_1c(_17,_1a.start);\n}else{\nvar _1b=_12(_17,_1a.start);\n}\nvar _1d=_1b-_14(_17,_1b);\nif(_1d>=0){\nvv.splice(_1d,1);\n}\n}else{\nvar _1b=_12(_17,_1a.start);\nvar end=_1c(_17,_1a.end);\nvar _1d=_1b-_14(_17,_1b);\nvar _1e=end-_14(_17,end);\nvv.splice(_1d,_1e-_1d+1);\n}\n$(_17).maskedbox(\"setValue\",_9(_17,vv.join(\"\")));\n$(_17).maskedbox(\"setSelectionRange\",{start:_1b,end:_1b});\n};\nfunction _14(_1f,pos){\nvar _20=$(_1f).maskedbox(\"options\");\nvar _21=0;\nif(pos>=_20.mask.length){\npos--;\n}\nfor(var i=pos;i>=0;i--){\nif(_20.masks[_20.mask[i]]==undefined){\n_21++;\n}\n}\nreturn _21;\n};\nfunction _12(_22,pos){\nvar _23=$(_22).maskedbox(\"options\");\nvar m=_23.mask[pos];\nvar r=_23.masks[m];\nwhile(pos<_23.mask.length&&!r){\npos++;\nm=_23.mask[pos];\nr=_23.masks[m];\n}\nreturn pos;\n};\nfunction _1c(_24,pos){\nvar _25=$(_24).maskedbox(\"options\");\nvar m=_25.mask[--pos];\nvar r=_25.masks[m];\nwhile(pos>=0&&!r){\npos--;\nm=_25.mask[pos];\nr=_25.masks[m];\n}\nreturn pos<0?0:pos;\n};\nfunction _26(e){\nif(e.metaKey||e.ctrlKey){\nreturn;\n}\nvar _27=e.data.target;\nvar _28=$(_27).maskedbox(\"options\");\nvar _29=[9,13,35,36,37,39];\nif($.inArray(e.keyCode,_29)!=-1){\nreturn true;\n}\nif(e.keyCode>=96&&e.keyCode<=105){\ne.keyCode-=48;\n}\nvar c=String.fromCharCode(e.keyCode);\nif(e.keyCode>=65&&e.keyCode<=90&&!e.shiftKey){\nc=c.toLowerCase();\n}else{\nif(e.keyCode==189){\nc=\"-\";\n}else{\nif(e.keyCode==187){\nc=\"+\";\n}else{\nif(e.keyCode==190){\nc=\".\";\n}\n}\n}\n}\nif(e.keyCode==8){\n_16(_27,true);\n}else{\nif(e.keyCode==46){\n_16(_27,false);\n}else{\n_d(_27,c);\n}\n}\nreturn false;\n};\n$.extend($.fn.textbox.methods,{inputMask:function(jq,_2a){\nreturn jq.each(function(){\nvar _2b=this;\nvar _2c=$.extend({},$.fn.maskedbox.defaults,_2a);\n$.data(_2b,\"maskedbox\",{options:_2c});\nvar _2d=$(_2b).textbox(\"textbox\");\n_2d._unbind(\".maskedbox\");\nfor(var _2e in _2c.inputEvents){\n_2d._bind(_2e+\".maskedbox\",{target:_2b},_2c.inputEvents[_2e]);\n}\n});\n}});\n$.fn.maskedbox=function(_2f,_30){\nif(typeof _2f==\"string\"){\nvar _31=$.fn.maskedbox.methods[_2f];\nif(_31){\nreturn _31(this,_30);\n}else{\nreturn this.textbox(_2f,_30);\n}\n}\n_2f=_2f||{};\nreturn this.each(function(){\nvar _32=$.data(this,\"maskedbox\");\nif(_32){\n$.extend(_32.options,_2f);\n}else{\n$.data(this,\"maskedbox\",{options:$.extend({},$.fn.maskedbox.defaults,$.fn.maskedbox.parseOptions(this),_2f)});\n}\n_1(this);\n});\n};\n$.fn.maskedbox.methods={options:function(jq){\nvar _33=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"maskedbox\").options,{width:_33.width,value:_33.value,originalValue:_33.originalValue,disabled:_33.disabled,readonly:_33.readonly});\n},initValue:function(jq,_34){\nreturn jq.each(function(){\n_34=_9(this,_5(this,_34));\n$(this).textbox(\"initValue\",_34);\n});\n},setValue:function(jq,_35){\nreturn jq.each(function(){\n_35=_9(this,_5(this,_35));\n$(this).textbox(\"setValue\",_35);\n});\n}};\n$.fn.maskedbox.parseOptions=function(_36){\nvar t=$(_36);\nreturn $.extend({},$.fn.textbox.parseOptions(_36),$.parser.parseOptions(_36,[\"mask\",\"promptChar\"]),{});\n};\n$.fn.maskedbox.defaults=$.extend({},$.fn.textbox.defaults,{mask:\"\",promptChar:\"_\",masks:{\"9\":\"[0-9]\",\"a\":\"[a-zA-Z]\",\"*\":\"[0-9a-zA-Z]\"},inputEvents:{keydown:_26}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.menu.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\n$(function(){\n$(document)._unbind(\".menu\")._bind(\"mousedown.menu\",function(e){\nvar m=$(e.target).closest(\"div.menu,div.combo-p\");\nif(m.length){\nreturn;\n}\n$(\"body>div.menu-top:visible\").not(\".menu-inline\").menu(\"hide\");\n_1($(\"body>div.menu:visible\").not(\".menu-inline\"));\n});\n});\nfunction _2(_3){\nvar _4=$.data(_3,\"menu\").options;\n$(_3).addClass(\"menu-top\");\n_4.inline?$(_3).addClass(\"menu-inline\"):$(_3).appendTo(\"body\");\n$(_3)._bind(\"_resize\",function(e,_5){\nif($(this).hasClass(\"easyui-fluid\")||_5){\n$(_3).menu(\"resize\",_3);\n}\nreturn false;\n});\nvar _6=_7($(_3));\nfor(var i=0;i<_6.length;i++){\n_b(_3,_6[i]);\n}\nfunction _7(_8){\nvar _9=[];\n_8.addClass(\"menu\");\n_9.push(_8);\nif(!_8.hasClass(\"menu-content\")){\n_8.children(\"div\").each(function(){\nvar _a=$(this).children(\"div\");\nif(_a.length){\n_a.appendTo(\"body\");\nthis.submenu=_a;\nvar mm=_7(_a);\n_9=_9.concat(mm);\n}\n});\n}\nreturn _9;\n};\n};\nfunction _b(_c,_d){\nvar _e=$(_d).addClass(\"menu\");\nif(!_e.data(\"menu\")){\n_e.data(\"menu\",{options:$.parser.parseOptions(_e[0],[\"width\",\"height\"])});\n}\nif(!_e.hasClass(\"menu-content\")){\n_e.children(\"div\").each(function(){\n_f(_c,this);\n});\n$(\"<div class=\\\"menu-line\\\"></div>\").prependTo(_e);\n}\n_10(_c,_e);\nif(!_e.hasClass(\"menu-inline\")){\n_e.hide();\n}\n_11(_c,_e);\n};\nfunction _f(_12,div,_13){\nvar _14=$(div);\nvar _15=$.extend({},$.parser.parseOptions(_14[0],[\"id\",\"name\",\"iconCls\",\"href\",{separator:\"boolean\"}]),{disabled:(_14.attr(\"disabled\")?true:undefined),text:$.trim(_14.html()),onclick:_14[0].onclick},_13||{});\n_15.onclick=_15.onclick||_15.handler||null;\n_14.data(\"menuitem\",{options:_15});\nif(_15.separator){\n_14.addClass(\"menu-sep\");\n}\nif(!_14.hasClass(\"menu-sep\")){\n_14.addClass(\"menu-item\");\n_14.empty().append($(\"<div class=\\\"menu-text\\\"></div>\").html(_15.text));\nif(_15.iconCls){\n$(\"<div class=\\\"menu-icon\\\"></div>\").addClass(_15.iconCls).appendTo(_14);\n}\nif(_15.id){\n_14.attr(\"id\",_15.id);\n}\nif(_15.onclick){\nif(typeof _15.onclick==\"string\"){\n_14.attr(\"onclick\",_15.onclick);\n}else{\n_14[0].onclick=eval(_15.onclick);\n}\n}\nif(_15.disabled){\n_16(_12,_14[0],true);\n}\nif(_14[0].submenu){\n$(\"<div class=\\\"menu-rightarrow\\\"></div>\").appendTo(_14);\n}\n}\n};\nfunction _10(_17,_18){\nvar _19=$.data(_17,\"menu\").options;\nvar _1a=_18.attr(\"style\")||\"\";\nvar _1b=_18.is(\":visible\");\n_18.css({display:\"block\",left:-10000,height:\"auto\",overflow:\"hidden\"});\n_18.find(\".menu-item\").each(function(){\n$(this)._outerHeight(_19.itemHeight);\n$(this).find(\".menu-text\").css({height:(_19.itemHeight-2)+\"px\",lineHeight:(_19.itemHeight-2)+\"px\"});\n});\n_18.removeClass(\"menu-noline\").addClass(_19.noline?\"menu-noline\":\"\");\nvar _1c=_18.data(\"menu\").options;\nvar _1d=_1c.width;\nvar _1e=_1c.height;\nif(isNaN(parseInt(_1d))){\n_1d=0;\n_18.find(\"div.menu-text\").each(function(){\nif(_1d<$(this).outerWidth()){\n_1d=$(this).outerWidth();\n}\n});\n_1d=_1d?_1d+40:\"\";\n}\nvar _1f=_18.outerHeight();\nif(isNaN(parseInt(_1e))){\n_1e=_1f;\nif(_18.hasClass(\"menu-top\")&&_19.alignTo){\nvar at=$(_19.alignTo);\nvar h1=at.offset().top-$(document).scrollTop();\nvar h2=$(window)._outerHeight()+$(document).scrollTop()-at.offset().top-at._outerHeight();\n_1e=Math.min(_1e,Math.max(h1,h2));\n}else{\nif(_1e>$(window)._outerHeight()){\n_1e=$(window).height();\n}\n}\n}\n_18.attr(\"style\",_1a);\n_18.show();\n_18._size($.extend({},_1c,{width:_1d,height:_1e,minWidth:_1c.minWidth||_19.minWidth,maxWidth:_1c.maxWidth||_19.maxWidth}));\n_18.find(\".easyui-fluid\").triggerHandler(\"_resize\",[true]);\n_18.css(\"overflow\",_18.outerHeight()<_1f?\"auto\":\"hidden\");\n_18.children(\"div.menu-line\")._outerHeight(_1f-2);\nif(!_1b){\n_18.hide();\n}\n};\nfunction _11(_20,_21){\nvar _22=$.data(_20,\"menu\");\nvar _23=_22.options;\n_21._unbind(\".menu\");\nfor(var _24 in _23.events){\n_21._bind(_24+\".menu\",{target:_20},_23.events[_24]);\n}\n};\nfunction _25(e){\nvar _26=e.data.target;\nvar _27=$.data(_26,\"menu\");\nif(_27.timer){\nclearTimeout(_27.timer);\n_27.timer=null;\n}\n};\nfunction _28(e){\nvar _29=e.data.target;\nvar _2a=$.data(_29,\"menu\");\nif(_2a.options.hideOnUnhover){\n_2a.timer=setTimeout(function(){\n_2b(_29,$(_29).hasClass(\"menu-inline\"));\n},_2a.options.duration);\n}\n};\nfunction _2c(e){\nvar _2d=e.data.target;\nvar _2e=$(e.target).closest(\".menu-item\");\nif(_2e.length){\n_2e.siblings().each(function(){\nif(this.submenu){\n_1(this.submenu);\n}\n$(this).removeClass(\"menu-active\");\n});\n_2e.addClass(\"menu-active\");\nif(_2e.hasClass(\"menu-item-disabled\")){\n_2e.addClass(\"menu-active-disabled\");\nreturn;\n}\nvar _2f=_2e[0].submenu;\nif(_2f){\n$(_2d).menu(\"show\",{menu:_2f,parent:_2e});\n}\n}\n};\nfunction _30(e){\nvar _31=$(e.target).closest(\".menu-item\");\nif(_31.length){\n_31.removeClass(\"menu-active menu-active-disabled\");\nvar _32=_31[0].submenu;\nif(_32){\nif(e.pageX>=parseInt(_32.css(\"left\"))){\n_31.addClass(\"menu-active\");\n}else{\n_1(_32);\n}\n}else{\n_31.removeClass(\"menu-active\");\n}\n}\n};\nfunction _33(e){\nvar _34=e.data.target;\nvar _35=$(e.target).closest(\".menu-item\");\nif(_35.length){\nvar _36=$(_34).data(\"menu\").options;\nvar _37=_35.data(\"menuitem\").options;\nif(_37.disabled){\nreturn;\n}\nif(!_35[0].submenu){\n_2b(_34,_36.inline);\nif(_37.href){\nlocation.href=_37.href;\n}\n}\n_35.trigger(\"mouseenter\");\n_36.onClick.call(_34,$(_34).menu(\"getItem\",_35[0]));\n}\n};\nfunction _2b(_38,_39){\nvar _3a=$.data(_38,\"menu\");\nif(_3a){\nif($(_38).is(\":visible\")){\n_1($(_38));\nif(_39){\n$(_38).show();\n}else{\n_3a.options.onHide.call(_38);\n}\n}\n}\nreturn false;\n};\nfunction _3b(_3c,_3d){\n_3d=_3d||{};\nvar _3e,top;\nvar _3f=$.data(_3c,\"menu\").options;\nvar _40=$(_3d.menu||_3c);\n$(_3c).menu(\"resize\",_40[0]);\nif(_40.hasClass(\"menu-top\")){\n$.extend(_3f,_3d);\n_3e=_3f.left;\ntop=_3f.top;\nif(_3f.alignTo){\nvar at=$(_3f.alignTo);\n_3e=at.offset().left;\ntop=at.offset().top+at._outerHeight();\nif(_3f.align==\"right\"){\n_3e+=at.outerWidth()-_40.outerWidth();\n}\n}\nif(_3e+_40.outerWidth()>$(window)._outerWidth()+$(document)._scrollLeft()){\n_3e=$(window)._outerWidth()+$(document).scrollLeft()-_40.outerWidth()-5;\n}\nif(_3e<0){\n_3e=0;\n}\ntop=_41(top,_3f.alignTo);\n}else{\nvar _42=_3d.parent;\n_3e=_42.offset().left+_42.outerWidth()-2;\nif(_3e+_40.outerWidth()+5>$(window)._outerWidth()+$(document).scrollLeft()){\n_3e=_42.offset().left-_40.outerWidth()+2;\n}\ntop=_41(_42.offset().top-3);\n}\nfunction _41(top,_43){\nif(top+_40.outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){\nif(_43){\ntop=$(_43).offset().top-_40._outerHeight();\n}else{\ntop=$(window)._outerHeight()+$(document).scrollTop()-_40.outerHeight();\n}\n}\nif(top<0){\ntop=0;\n}\nreturn top;\n};\n_40.css(_3f.position.call(_3c,_40[0],_3e,top));\n_40.show(0,function(){\nif(!_40[0].shadow){\n_40[0].shadow=$(\"<div class=\\\"menu-shadow\\\"></div>\").insertAfter(_40);\n}\n_40[0].shadow.css({display:(_40.hasClass(\"menu-inline\")?\"none\":\"block\"),zIndex:$.fn.menu.defaults.zIndex++,left:_40.css(\"left\"),top:_40.css(\"top\"),width:_40.outerWidth(),height:_40.outerHeight()});\n_40.css(\"z-index\",$.fn.menu.defaults.zIndex++);\nif(_40.hasClass(\"menu-top\")){\n_3f.onShow.call(_3c);\n}\n});\n};\nfunction _1(_44){\nif(_44&&_44.length){\n_45(_44);\n_44.find(\"div.menu-item\").each(function(){\nif(this.submenu){\n_1(this.submenu);\n}\n$(this).removeClass(\"menu-active\");\n});\n}\nfunction _45(m){\nm.stop(true,true);\nif(m[0].shadow){\nm[0].shadow.hide();\n}\nm.hide();\n};\n};\nfunction _46(_47,_48){\nvar _49=null;\nvar fn=$.isFunction(_48)?_48:function(_4a){\nfor(var p in _48){\nif(_4a[p]!=_48[p]){\nreturn false;\n}\n}\nreturn true;\n};\nfunction _4b(_4c){\n_4c.children(\"div.menu-item\").each(function(){\nvar _4d=$(this).data(\"menuitem\").options;\nif(fn.call(_47,_4d)==true){\n_49=$(_47).menu(\"getItem\",this);\n}else{\nif(this.submenu&&!_49){\n_4b(this.submenu);\n}\n}\n});\n};\n_4b($(_47));\nreturn _49;\n};\nfunction _16(_4e,_4f,_50){\nvar t=$(_4f);\nif(t.hasClass(\"menu-item\")){\nvar _51=t.data(\"menuitem\").options;\n_51.disabled=_50;\nif(_50){\nt.addClass(\"menu-item-disabled\");\nt[0].onclick=null;\n}else{\nt.removeClass(\"menu-item-disabled\");\nt[0].onclick=_51.onclick;\n}\n}\n};\nfunction _52(_53,_54){\nvar _55=$.data(_53,\"menu\").options;\nvar _56=$(_53);\nif(_54.parent){\nif(!_54.parent.submenu){\nvar _57=$(\"<div></div>\").appendTo(\"body\");\n_54.parent.submenu=_57;\n$(\"<div class=\\\"menu-rightarrow\\\"></div>\").appendTo(_54.parent);\n_b(_53,_57);\n}\n_56=_54.parent.submenu;\n}\nvar div=$(\"<div></div>\").appendTo(_56);\n_f(_53,div,_54);\n};\nfunction _58(_59,_5a){\nfunction _5b(el){\nif(el.submenu){\nel.submenu.children(\"div.menu-item\").each(function(){\n_5b(this);\n});\nvar _5c=el.submenu[0].shadow;\nif(_5c){\n_5c.remove();\n}\nel.submenu.remove();\n}\n$(el).remove();\n};\n_5b(_5a);\n};\nfunction _5d(_5e,_5f,_60){\nvar _61=$(_5f).parent();\nif(_60){\n$(_5f).show();\n}else{\n$(_5f).hide();\n}\n_10(_5e,_61);\n};\nfunction _62(_63){\n$(_63).children(\"div.menu-item\").each(function(){\n_58(_63,this);\n});\nif(_63.shadow){\n_63.shadow.remove();\n}\n$(_63).remove();\n};\n$.fn.menu=function(_64,_65){\nif(typeof _64==\"string\"){\nreturn $.fn.menu.methods[_64](this,_65);\n}\n_64=_64||{};\nreturn this.each(function(){\nvar _66=$.data(this,\"menu\");\nif(_66){\n$.extend(_66.options,_64);\n}else{\n_66=$.data(this,\"menu\",{options:$.extend({},$.fn.menu.defaults,$.fn.menu.parseOptions(this),_64)});\n_2(this);\n}\n$(this).css({left:_66.options.left,top:_66.options.top});\n});\n};\n$.fn.menu.methods={options:function(jq){\nreturn $.data(jq[0],\"menu\").options;\n},show:function(jq,pos){\nreturn jq.each(function(){\n_3b(this,pos);\n});\n},hide:function(jq){\nreturn jq.each(function(){\n_2b(this);\n});\n},destroy:function(jq){\nreturn jq.each(function(){\n_62(this);\n});\n},setText:function(jq,_67){\nreturn jq.each(function(){\nvar _68=$(_67.target).data(\"menuitem\").options;\n_68.text=_67.text;\n$(_67.target).children(\"div.menu-text\").html(_67.text);\n});\n},setIcon:function(jq,_69){\nreturn jq.each(function(){\nvar _6a=$(_69.target).data(\"menuitem\").options;\n_6a.iconCls=_69.iconCls;\n$(_69.target).children(\"div.menu-icon\").remove();\nif(_69.iconCls){\n$(\"<div class=\\\"menu-icon\\\"></div>\").addClass(_69.iconCls).appendTo(_69.target);\n}\n});\n},getItem:function(jq,_6b){\nvar _6c=$(_6b).data(\"menuitem\").options;\nreturn $.extend({},_6c,{target:$(_6b)[0]});\n},findItem:function(jq,_6d){\nif(typeof _6d==\"string\"){\nreturn _46(jq[0],function(_6e){\nreturn $(\"<div>\"+_6e.text+\"</div>\").text()==_6d;\n});\n}else{\nreturn _46(jq[0],_6d);\n}\n},appendItem:function(jq,_6f){\nreturn jq.each(function(){\n_52(this,_6f);\n});\n},removeItem:function(jq,_70){\nreturn jq.each(function(){\n_58(this,_70);\n});\n},enableItem:function(jq,_71){\nreturn jq.each(function(){\n_16(this,_71,false);\n});\n},disableItem:function(jq,_72){\nreturn jq.each(function(){\n_16(this,_72,true);\n});\n},showItem:function(jq,_73){\nreturn jq.each(function(){\n_5d(this,_73,true);\n});\n},hideItem:function(jq,_74){\nreturn jq.each(function(){\n_5d(this,_74,false);\n});\n},resize:function(jq,_75){\nreturn jq.each(function(){\n_10(this,_75?$(_75):$(this));\n});\n}};\n$.fn.menu.parseOptions=function(_76){\nreturn $.extend({},$.parser.parseOptions(_76,[{minWidth:\"number\",itemHeight:\"number\",duration:\"number\",hideOnUnhover:\"boolean\"},{fit:\"boolean\",inline:\"boolean\",noline:\"boolean\"}]));\n};\n$.fn.menu.defaults={zIndex:110000,left:0,top:0,alignTo:null,align:\"left\",minWidth:150,itemHeight:32,duration:100,hideOnUnhover:true,inline:false,fit:false,noline:false,events:{mouseenter:_25,mouseleave:_28,mouseover:_2c,mouseout:_30,click:_33},position:function(_77,_78,top){\nreturn {left:_78,top:top};\n},onShow:function(){\n},onHide:function(){\n},onClick:function(_79){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.menubutton.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"menubutton\").options;\nvar _4=$(_2);\n_4.linkbutton(_3);\nif(_3.hasDownArrow){\n_4.removeClass(_3.cls.btn1+\" \"+_3.cls.btn2).addClass(\"m-btn\");\n_4.removeClass(\"m-btn-small m-btn-medium m-btn-large\").addClass(\"m-btn-\"+_3.size);\nvar _5=_4.find(\".l-btn-left\");\n$(\"<span></span>\").addClass(_3.cls.arrow).appendTo(_5);\n$(\"<span></span>\").addClass(\"m-btn-line\").appendTo(_5);\n}\n$(_2).menubutton(\"resize\");\nif(_3.menu){\n$(_3.menu).menu({duration:_3.duration});\nvar _6=$(_3.menu).menu(\"options\");\nvar _7=_6.onShow;\nvar _8=_6.onHide;\n$.extend(_6,{onShow:function(){\nvar _9=$(this).menu(\"options\");\nvar _a=$(_9.alignTo);\nvar _b=_a.menubutton(\"options\");\n_a.addClass((_b.plain==true)?_b.cls.btn2:_b.cls.btn1);\n_7.call(this);\n},onHide:function(){\nvar _c=$(this).menu(\"options\");\nvar _d=$(_c.alignTo);\nvar _e=_d.menubutton(\"options\");\n_d.removeClass((_e.plain==true)?_e.cls.btn2:_e.cls.btn1);\n_8.call(this);\n}});\n}\n};\nfunction _f(_10){\nvar _11=$.data(_10,\"menubutton\").options;\nvar btn=$(_10);\nvar t=btn.find(\".\"+_11.cls.trigger);\nif(!t.length){\nt=btn;\n}\nt._unbind(\".menubutton\");\nvar _12=null;\nt._bind(_11.showEvent+\".menubutton\",function(){\nif(!_13()){\n_12=setTimeout(function(){\n_14(_10);\n},_11.duration);\nreturn false;\n}\n})._bind(_11.hideEvent+\".menubutton\",function(){\nif(_12){\nclearTimeout(_12);\n}\n$(_11.menu).triggerHandler(\"mouseleave\");\n});\nfunction _13(){\nreturn $(_10).linkbutton(\"options\").disabled;\n};\n};\nfunction _14(_15){\nvar _16=$(_15).menubutton(\"options\");\nif(_16.disabled||!_16.menu){\nreturn;\n}\n$(\"body>div.menu-top\").menu(\"hide\");\nvar btn=$(_15);\nvar mm=$(_16.menu);\nif(mm.length){\nmm.menu(\"options\").alignTo=btn;\nmm.menu(\"show\",{alignTo:btn,align:_16.menuAlign});\n}\nbtn.blur();\n};\n$.fn.menubutton=function(_17,_18){\nif(typeof _17==\"string\"){\nvar _19=$.fn.menubutton.methods[_17];\nif(_19){\nreturn _19(this,_18);\n}else{\nreturn this.linkbutton(_17,_18);\n}\n}\n_17=_17||{};\nreturn this.each(function(){\nvar _1a=$.data(this,\"menubutton\");\nif(_1a){\n$.extend(_1a.options,_17);\n}else{\n$.data(this,\"menubutton\",{options:$.extend({},$.fn.menubutton.defaults,$.fn.menubutton.parseOptions(this),_17)});\n$(this)._propAttr(\"disabled\",false);\n}\n_1(this);\n_f(this);\n});\n};\n$.fn.menubutton.methods={options:function(jq){\nvar _1b=jq.linkbutton(\"options\");\nreturn $.extend($.data(jq[0],\"menubutton\").options,{toggle:_1b.toggle,selected:_1b.selected,disabled:_1b.disabled});\n},destroy:function(jq){\nreturn jq.each(function(){\nvar _1c=$(this).menubutton(\"options\");\nif(_1c.menu){\n$(_1c.menu).menu(\"destroy\");\n}\n$(this).remove();\n});\n}};\n$.fn.menubutton.parseOptions=function(_1d){\nvar t=$(_1d);\nreturn $.extend({},$.fn.linkbutton.parseOptions(_1d),$.parser.parseOptions(_1d,[\"menu\",{plain:\"boolean\",hasDownArrow:\"boolean\",duration:\"number\"}]));\n};\n$.fn.menubutton.defaults=$.extend({},$.fn.linkbutton.defaults,{plain:true,hasDownArrow:true,menu:null,menuAlign:\"left\",duration:100,showEvent:\"mouseenter\",hideEvent:\"mouseleave\",cls:{btn1:\"m-btn-active\",btn2:\"m-btn-plain-active\",arrow:\"m-btn-downarrow\",trigger:\"m-btn\"}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.messager.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(){\n$(document)._unbind(\".messager\")._bind(\"keydown.messager\",function(e){\nif(e.keyCode==27){\n$(\"body\").children(\"div.messager-window\").children(\"div.messager-body\").each(function(){\n$(this).dialog(\"close\");\n});\n}else{\nif(e.keyCode==9){\nvar _2=$(\"body\").children(\"div.messager-window\");\nif(!_2.length){\nreturn;\n}\nvar _3=_2.find(\".messager-input,.messager-button .l-btn\");\nfor(var i=0;i<_3.length;i++){\nif($(_3[i]).is(\":focus\")){\n$(_3[i>=_3.length-1?0:i+1]).focus();\nreturn false;\n}\n}\n}else{\nif(e.keyCode==13){\nvar _4=$(e.target).closest(\"input.messager-input\");\nif(_4.length){\nvar _5=_4.closest(\".messager-body\");\n_6(_5,_4.val());\n}\n}\n}\n}\n});\n};\nfunction _7(){\n$(document)._unbind(\".messager\");\n};\nfunction _8(_9){\nvar _a=$.extend({},$.messager.defaults,{modal:false,shadow:false,draggable:false,resizable:false,closed:true,style:{left:\"\",top:\"\",right:0,zIndex:$.fn.window.defaults.zIndex++,bottom:-document.body.scrollTop-document.documentElement.scrollTop},title:\"\",width:300,height:150,minHeight:0,showType:\"slide\",showSpeed:600,content:_9.msg,timeout:4000},_9);\nvar _b=$(\"<div class=\\\"messager-body\\\"></div>\").appendTo(\"body\");\n_b.dialog($.extend({},_a,{noheader:(_a.title?false:true),openAnimation:(_a.showType),closeAnimation:(_a.showType==\"show\"?\"hide\":_a.showType),openDuration:_a.showSpeed,closeDuration:_a.showSpeed,onOpen:function(){\n_b.dialog(\"dialog\").hover(function(){\nif(_a.timer){\nclearTimeout(_a.timer);\n}\n},function(){\n_c();\n});\n_c();\nfunction _c(){\nif(_a.timeout>0){\n_a.timer=setTimeout(function(){\nif(_b.length&&_b.data(\"dialog\")){\n_b.dialog(\"close\");\n}\n},_a.timeout);\n}\n};\nif(_9.onOpen){\n_9.onOpen.call(this);\n}else{\n_a.onOpen.call(this);\n}\n},onClose:function(){\nif(_a.timer){\nclearTimeout(_a.timer);\n}\nif(_9.onClose){\n_9.onClose.call(this);\n}else{\n_a.onClose.call(this);\n}\n_b.dialog(\"destroy\");\n}}));\n_b.dialog(\"dialog\").css(_a.style);\n_b.dialog(\"open\");\nreturn _b;\n};\nfunction _d(_e){\n_1();\nvar _f=$(\"<div class=\\\"messager-body\\\"></div>\").appendTo(\"body\");\n_f.dialog($.extend({},_e,{noheader:(_e.title?false:true),onClose:function(){\n_7();\nif(_e.onClose){\n_e.onClose.call(this);\n}\n_f.dialog(\"destroy\");\n}}));\nvar win=_f.dialog(\"dialog\").addClass(\"messager-window\");\nwin.find(\".dialog-button\").addClass(\"messager-button\").find(\"a:first\").focus();\nreturn _f;\n};\nfunction _6(dlg,_10){\nvar _11=dlg.dialog(\"options\");\ndlg.dialog(\"close\");\n_11.fn(_10);\n};\n$.messager={show:function(_12){\nreturn _8(_12);\n},alert:function(_13,msg,_14,fn){\nvar _15=typeof _13==\"object\"?_13:{title:_13,msg:msg,icon:_14,fn:fn};\nvar cls=_15.icon?\"messager-icon messager-\"+_15.icon:\"\";\n_15=$.extend({},$.messager.defaults,{content:\"<div class=\\\"\"+cls+\"\\\"></div>\"+\"<div>\"+_15.msg+\"</div>\"+\"<div style=\\\"clear:both;\\\"/>\"},_15);\nif(!_15.buttons){\n_15.buttons=[{text:_15.ok,onClick:function(){\n_6(dlg);\n}}];\n}\nvar dlg=_d(_15);\nreturn dlg;\n},confirm:function(_16,msg,fn){\nvar _17=typeof _16==\"object\"?_16:{title:_16,msg:msg,fn:fn};\n_17=$.extend({},$.messager.defaults,{content:\"<div class=\\\"messager-icon messager-question\\\"></div>\"+\"<div>\"+_17.msg+\"</div>\"+\"<div style=\\\"clear:both;\\\"/>\"},_17);\nif(!_17.buttons){\n_17.buttons=[{text:_17.ok,onClick:function(){\n_6(dlg,true);\n}},{text:_17.cancel,onClick:function(){\n_6(dlg,false);\n}}];\n}\nvar dlg=_d(_17);\nreturn dlg;\n},prompt:function(_18,msg,fn){\nvar _19=typeof _18==\"object\"?_18:{title:_18,msg:msg,fn:fn};\n_19=$.extend({},$.messager.defaults,{content:\"<div class=\\\"messager-icon messager-question\\\"></div>\"+\"<div>\"+_19.msg+\"</div>\"+\"<br/>\"+\"<div style=\\\"clear:both;\\\"/>\"+\"<div><input class=\\\"messager-input\\\" type=\\\"text\\\"/></div>\"},_19);\nif(!_19.buttons){\n_19.buttons=[{text:_19.ok,onClick:function(){\n_6(dlg,dlg.find(\".messager-input\").val());\n}},{text:_19.cancel,onClick:function(){\n_6(dlg);\n}}];\n}\nvar dlg=_d(_19);\ndlg.find(\".messager-input\").focus();\nreturn dlg;\n},progress:function(_1a){\nvar _1b={bar:function(){\nreturn $(\"body>div.messager-window\").find(\"div.messager-p-bar\");\n},close:function(){\nvar dlg=$(\"body>div.messager-window>div.messager-body:has(div.messager-progress)\");\nif(dlg.length){\ndlg.dialog(\"close\");\n}\n}};\nif(typeof _1a==\"string\"){\nvar _1c=_1b[_1a];\nreturn _1c();\n}\n_1a=_1a||{};\nvar _1d=$.extend({},{title:\"\",minHeight:0,content:undefined,msg:\"\",text:undefined,interval:300},_1a);\nvar dlg=_d($.extend({},$.messager.defaults,{content:\"<div class=\\\"messager-progress\\\"><div class=\\\"messager-p-msg\\\">\"+_1d.msg+\"</div><div class=\\\"messager-p-bar\\\"></div></div>\",closable:false,doSize:false},_1d,{onClose:function(){\nif(this.timer){\nclearInterval(this.timer);\n}\nif(_1a.onClose){\n_1a.onClose.call(this);\n}else{\n$.messager.defaults.onClose.call(this);\n}\n}}));\nvar bar=dlg.find(\"div.messager-p-bar\");\nbar.progressbar({text:_1d.text});\ndlg.dialog(\"resize\");\nif(_1d.interval){\ndlg[0].timer=setInterval(function(){\nvar v=bar.progressbar(\"getValue\");\nv+=10;\nif(v>100){\nv=0;\n}\nbar.progressbar(\"setValue\",v);\n},_1d.interval);\n}\nreturn dlg;\n}};\n$.messager.defaults=$.extend({},$.fn.dialog.defaults,{ok:\"Ok\",cancel:\"Cancel\",width:300,height:\"auto\",minHeight:150,modal:true,collapsible:false,minimizable:false,maximizable:false,resizable:false,fn:function(){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.mobile.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\n$.fn.navpanel=function(_1,_2){\nif(typeof _1==\"string\"){\nvar _3=$.fn.navpanel.methods[_1];\nreturn _3?_3(this,_2):this.panel(_1,_2);\n}else{\n_1=_1||{};\nreturn this.each(function(){\nvar _4=$.data(this,\"navpanel\");\nif(_4){\n$.extend(_4.options,_1);\n}else{\n_4=$.data(this,\"navpanel\",{options:$.extend({},$.fn.navpanel.defaults,$.fn.navpanel.parseOptions(this),_1)});\n}\n$(this).panel(_4.options);\n});\n}\n};\n$.fn.navpanel.methods={options:function(jq){\nreturn $.data(jq[0],\"navpanel\").options;\n}};\n$.fn.navpanel.parseOptions=function(_5){\nreturn $.extend({},$.fn.panel.parseOptions(_5),$.parser.parseOptions(_5,[]));\n};\n$.fn.navpanel.defaults=$.extend({},$.fn.panel.defaults,{fit:true,border:false,cls:\"navpanel\"});\n$.parser.plugins.push(\"navpanel\");\n})(jQuery);\n(function($){\n$(function(){\n$.mobile.init();\n});\n$.mobile={defaults:{animation:\"slide\",direction:\"left\",reverseDirections:{up:\"down\",down:\"up\",left:\"right\",right:\"left\"}},panels:[],init:function(_6){\n$.mobile.panels=[];\nvar _7=$(_6||\"body\").children(\".navpanel:visible\");\nif(_7.length){\n_7.not(\":first\").children(\".panel-body\").navpanel(\"close\");\nvar p=_7.eq(0).children(\".panel-body\");\n$.mobile.panels.push({panel:p,animation:$.mobile.defaults.animation,direction:$.mobile.defaults.direction});\n}\n$(document)._unbind(\".mobile\")._bind(\"click.mobile\",function(e){\nvar a=$(e.target).closest(\"a\");\nif(a.length){\nvar _8=$.parser.parseOptions(a[0],[\"animation\",\"direction\",{back:\"boolean\"}]);\nif(_8.back){\n$.mobile.back();\ne.preventDefault();\n}else{\nvar _9=$.trim(a.attr(\"href\"));\nif(/^#/.test(_9)){\nvar to=$(_9);\nif(to.length&&to.hasClass(\"panel-body\")){\n$.mobile.go(to,_8.animation,_8.direction);\ne.preventDefault();\n}\n}\n}\n}\n});\n$(window)._unbind(\".mobile\")._bind(\"hashchange.mobile\",function(){\nvar _a=$.mobile.panels.length;\nif(_a>1){\nvar _b=location.hash;\nvar p=$.mobile.panels[_a-2];\nif(!_b||_b==\"#&\"+p.panel.attr(\"id\")){\n$.mobile._back();\n}\n}\n});\n},nav:function(_c,to,_d,_e){\nif(window.WebKitAnimationEvent){\n_d=_d!=undefined?_d:$.mobile.defaults.animation;\n_e=_e!=undefined?_e:$.mobile.defaults.direction;\nvar _f=\"m-\"+_d+(_e?\"-\"+_e:\"\");\nvar p1=$(_c).panel(\"open\").panel(\"resize\").panel(\"panel\");\nvar p2=$(to).panel(\"open\").panel(\"resize\").panel(\"panel\");\np1.add(p2)._bind(\"webkitAnimationEnd\",function(){\n$(this)._unbind(\"webkitAnimationEnd\");\nvar p=$(this).children(\".panel-body\");\nif($(this).hasClass(\"m-in\")){\np.panel(\"open\").panel(\"resize\");\n}else{\np.panel(\"close\");\n}\n$(this).removeClass(_f+\" m-in m-out\");\n});\np2.addClass(_f+\" m-in\");\np1.addClass(_f+\" m-out\");\n}else{\n$(to).panel(\"open\").panel(\"resize\");\n$(_c).panel(\"close\");\n}\n},_go:function(_10,_11,_12){\n_11=_11!=undefined?_11:$.mobile.defaults.animation;\n_12=_12!=undefined?_12:$.mobile.defaults.direction;\nvar _13=$.mobile.panels[$.mobile.panels.length-1].panel;\nvar to=$(_10);\nif(_13[0]!=to[0]){\n$.mobile.nav(_13,to,_11,_12);\n$.mobile.panels.push({panel:to,animation:_11,direction:_12});\n}\n},_back:function(){\nif($.mobile.panels.length<2){\nreturn;\n}\nvar p1=$.mobile.panels.pop();\nvar p2=$.mobile.panels[$.mobile.panels.length-1];\nvar _14=p1.animation;\nvar _15=$.mobile.defaults.reverseDirections[p1.direction]||\"\";\n$.mobile.nav(p1.panel,p2.panel,_14,_15);\n},go:function(_16,_17,_18){\n_17=_17!=undefined?_17:$.mobile.defaults.animation;\n_18=_18!=undefined?_18:$.mobile.defaults.direction;\nlocation.hash=\"#&\"+$(_16).attr(\"id\");\n$.mobile._go(_16,_17,_18);\n},back:function(){\nhistory.go(-1);\n}};\n$.map([\"validatebox\",\"textbox\",\"passwordbox\",\"filebox\",\"searchbox\",\"combo\",\"combobox\",\"combogrid\",\"combotree\",\"combotreegrid\",\"datebox\",\"datetimebox\",\"numberbox\",\"spinner\",\"numberspinner\",\"timespinner\",\"datetimespinner\"],function(_19){\nif($.fn[_19]){\n$.extend($.fn[_19].defaults,{iconWidth:28,tipPosition:\"bottom\"});\n}\n});\n$.map([\"spinner\",\"numberspinner\",\"timespinner\",\"datetimespinner\"],function(_1a){\nif($.fn[_1a]){\n$.extend($.fn[_1a].defaults,{iconWidth:56,spinAlign:\"horizontal\"});\n}\n});\nif($.fn.menu){\n$.extend($.fn.menu.defaults,{itemHeight:30,noline:true});\n}\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.numberbox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"numberbox\");\nvar _4=_3.options;\n$(_2).addClass(\"numberbox-f\").textbox(_4);\n$(_2).textbox(\"textbox\").css({imeMode:\"disabled\"});\n$(_2).attr(\"numberboxName\",$(_2).attr(\"textboxName\"));\n_3.numberbox=$(_2).next();\n_3.numberbox.addClass(\"numberbox\");\nvar _5=_4.parser.call(_2,_4.value);\nvar _6=_4.formatter.call(_2,_5);\n$(_2).numberbox(\"initValue\",_5).numberbox(\"setText\",_6);\n};\nfunction _7(_8,_9){\nvar _a=$.data(_8,\"numberbox\");\nvar _b=_a.options;\n_b.value=parseFloat(_9);\nvar _9=_b.parser.call(_8,_9);\nvar _c=_b.formatter.call(_8,_9);\n_b.value=_9;\n$(_8).textbox(\"setText\",_c).textbox(\"setValue\",_9);\n_c=_b.formatter.call(_8,$(_8).textbox(\"getValue\"));\n$(_8).textbox(\"setText\",_c);\n};\n$.fn.numberbox=function(_d,_e){\nif(typeof _d==\"string\"){\nvar _f=$.fn.numberbox.methods[_d];\nif(_f){\nreturn _f(this,_e);\n}else{\nreturn this.textbox(_d,_e);\n}\n}\n_d=_d||{};\nreturn this.each(function(){\nvar _10=$.data(this,\"numberbox\");\nif(_10){\n$.extend(_10.options,_d);\n}else{\n_10=$.data(this,\"numberbox\",{options:$.extend({},$.fn.numberbox.defaults,$.fn.numberbox.parseOptions(this),_d)});\n}\n_1(this);\n});\n};\n$.fn.numberbox.methods={options:function(jq){\nvar _11=jq.data(\"textbox\")?jq.textbox(\"options\"):{};\nreturn $.extend($.data(jq[0],\"numberbox\").options,{width:_11.width,originalValue:_11.originalValue,disabled:_11.disabled,readonly:_11.readonly});\n},cloneFrom:function(jq,_12){\nreturn jq.each(function(){\n$(this).textbox(\"cloneFrom\",_12);\n$.data(this,\"numberbox\",{options:$.extend(true,{},$(_12).numberbox(\"options\"))});\n$(this).addClass(\"numberbox-f\");\n});\n},fix:function(jq){\nreturn jq.each(function(){\nvar _13=$(this).numberbox(\"options\");\n_13.value=null;\nvar _14=_13.parser.call(this,$(this).numberbox(\"getText\"));\n$(this).numberbox(\"setValue\",_14);\n});\n},setValue:function(jq,_15){\nreturn jq.each(function(){\n_7(this,_15);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"clear\");\n$(this).numberbox(\"options\").value=\"\";\n});\n},reset:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"reset\");\n$(this).numberbox(\"setValue\",$(this).numberbox(\"getValue\"));\n});\n}};\n$.fn.numberbox.parseOptions=function(_16){\nvar t=$(_16);\nreturn $.extend({},$.fn.textbox.parseOptions(_16),$.parser.parseOptions(_16,[\"decimalSeparator\",\"groupSeparator\",\"suffix\",{min:\"number\",max:\"number\",precision:\"number\"}]),{prefix:(t.attr(\"prefix\")?t.attr(\"prefix\"):undefined)});\n};\n$.fn.numberbox.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{keypress:function(e){\nvar _17=e.data.target;\nvar _18=$(_17).numberbox(\"options\");\nreturn _18.filter.call(_17,e);\n},blur:function(e){\n$(e.data.target).numberbox(\"fix\");\n},keydown:function(e){\nif(e.keyCode==13){\n$(e.data.target).numberbox(\"fix\");\n}\n}},min:null,max:null,precision:0,decimalSeparator:\".\",groupSeparator:\"\",prefix:\"\",suffix:\"\",filter:function(e){\nvar _19=$(this).numberbox(\"options\");\nvar s=$(this).numberbox(\"getText\");\nif(e.metaKey||e.ctrlKey){\nreturn true;\n}\nif($.inArray(String(e.which),[\"46\",\"8\",\"13\",\"0\"])>=0){\nreturn true;\n}\nvar tmp=$(\"<span></span>\");\ntmp.html(String.fromCharCode(e.which));\nvar c=tmp.text();\ntmp.remove();\nif(!c){\nreturn true;\n}\nif(c==\"-\"&&_19.min!=null&&_19.min>=0){\nreturn false;\n}\nif(c==\"-\"||c==_19.decimalSeparator){\nreturn (s.indexOf(c)==-1)?true:false;\n}else{\nif(c==_19.groupSeparator){\nreturn true;\n}else{\nif(\"0123456789\".indexOf(c)>=0){\nreturn true;\n}else{\nreturn false;\n}\n}\n}\n},formatter:function(_1a){\nif(!_1a){\nreturn _1a;\n}\n_1a=_1a+\"\";\nvar _1b=$(this).numberbox(\"options\");\nvar s1=_1a,s2=\"\";\nvar _1c=_1a.indexOf(\".\");\nif(_1c>=0){\ns1=_1a.substring(0,_1c);\ns2=_1a.substring(_1c+1,_1a.length);\n}\nif(_1b.groupSeparator){\nvar p=/(\\d+)(\\d{3})/;\nwhile(p.test(s1)){\ns1=s1.replace(p,\"$1\"+_1b.groupSeparator+\"$2\");\n}\n}\nif(s2){\nreturn _1b.prefix+s1+_1b.decimalSeparator+s2+_1b.suffix;\n}else{\nreturn _1b.prefix+s1+_1b.suffix;\n}\n},parser:function(s){\ns=s+\"\";\nvar _1d=$(this).numberbox(\"options\");\nif(_1d.prefix){\ns=$.trim(s.replace(new RegExp(\"\\\\\"+$.trim(_1d.prefix),\"g\"),\"\"));\n}\nif(_1d.suffix){\ns=$.trim(s.replace(new RegExp(\"\\\\\"+$.trim(_1d.suffix),\"g\"),\"\"));\n}\nif(parseFloat(s)!=_1d.value){\nif(_1d.groupSeparator){\ns=$.trim(s.replace(new RegExp(\"\\\\\"+_1d.groupSeparator,\"g\"),\"\"));\n}\nif(_1d.decimalSeparator){\ns=$.trim(s.replace(new RegExp(\"\\\\\"+_1d.decimalSeparator,\"g\"),\".\"));\n}\ns=s.replace(/\\s/g,\"\");\n}\nvar val=parseFloat(s).toFixed(_1d.precision);\nif(isNaN(val)){\nval=\"\";\n}else{\nif(typeof (_1d.min)==\"number\"&&val<_1d.min){\nval=_1d.min.toFixed(_1d.precision);\n}else{\nif(typeof (_1d.max)==\"number\"&&val>_1d.max){\nval=_1d.max.toFixed(_1d.precision);\n}\n}\n}\nreturn val;\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.numberspinner.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\n$(_2).addClass(\"numberspinner-f\");\nvar _3=$.data(_2,\"numberspinner\").options;\n$(_2).numberbox($.extend({},_3,{doSize:false})).spinner(_3);\n$(_2).numberbox(\"setValue\",_3.value);\n};\nfunction _4(_5,_6){\nvar _7=$.data(_5,\"numberspinner\").options;\nvar v=parseFloat($(_5).numberbox(\"getValue\")||_7.value)||0;\nif(_6){\nv-=_7.increment;\n}else{\nv+=_7.increment;\n}\n$(_5).numberbox(\"setValue\",v);\n};\n$.fn.numberspinner=function(_8,_9){\nif(typeof _8==\"string\"){\nvar _a=$.fn.numberspinner.methods[_8];\nif(_a){\nreturn _a(this,_9);\n}else{\nreturn this.numberbox(_8,_9);\n}\n}\n_8=_8||{};\nreturn this.each(function(){\nvar _b=$.data(this,\"numberspinner\");\nif(_b){\n$.extend(_b.options,_8);\n}else{\n$.data(this,\"numberspinner\",{options:$.extend({},$.fn.numberspinner.defaults,$.fn.numberspinner.parseOptions(this),_8)});\n}\n_1(this);\n});\n};\n$.fn.numberspinner.methods={options:function(jq){\nvar _c=jq.numberbox(\"options\");\nreturn $.extend($.data(jq[0],\"numberspinner\").options,{width:_c.width,value:_c.value,originalValue:_c.originalValue,disabled:_c.disabled,readonly:_c.readonly});\n}};\n$.fn.numberspinner.parseOptions=function(_d){\nreturn $.extend({},$.fn.spinner.parseOptions(_d),$.fn.numberbox.parseOptions(_d),{});\n};\n$.fn.numberspinner.defaults=$.extend({},$.fn.spinner.defaults,$.fn.numberbox.defaults,{spin:function(_e){\n_4(this,_e);\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.pagination.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"pagination\");\nvar _4=_3.options;\nvar bb=_3.bb={};\nif(_4.buttons&&!$.isArray(_4.buttons)){\n$(_4.buttons).insertAfter(_2);\n}\nvar _5=$(_2).addClass(\"pagination\").html(\"<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr></tr></table>\");\nvar tr=_5.find(\"tr\");\nvar aa=$.extend([],_4.layout);\nif(!_4.showPageList){\n_6(aa,\"list\");\n}\nif(!_4.showPageInfo){\n_6(aa,\"info\");\n}\nif(!_4.showRefresh){\n_6(aa,\"refresh\");\n}\nif(aa[0]==\"sep\"){\naa.shift();\n}\nif(aa[aa.length-1]==\"sep\"){\naa.pop();\n}\nfor(var _7=0;_7<aa.length;_7++){\nvar _8=aa[_7];\nif(_8==\"list\"){\nvar ps=$(\"<select class=\\\"pagination-page-list\\\"></select>\");\nps._bind(\"change\",function(){\n_4.pageSize=parseInt($(this).val());\n_4.onChangePageSize.call(_2,_4.pageSize);\n_10(_2,_4.pageNumber);\n});\nfor(var i=0;i<_4.pageList.length;i++){\n$(\"<option></option>\").text(_4.pageList[i]).appendTo(ps);\n}\n$(\"<td></td>\").append(ps).appendTo(tr);\n}else{\nif(_8==\"sep\"){\n$(\"<td><div class=\\\"pagination-btn-separator\\\"></div></td>\").appendTo(tr);\n}else{\nif(_8==\"first\"){\nbb.first=_9(\"first\");\n}else{\nif(_8==\"prev\"){\nbb.prev=_9(\"prev\");\n}else{\nif(_8==\"next\"){\nbb.next=_9(\"next\");\n}else{\nif(_8==\"last\"){\nbb.last=_9(\"last\");\n}else{\nif(_8==\"manual\"){\n$(\"<span style=\\\"padding-left:6px;\\\"></span>\").html(_4.beforePageText).appendTo(tr).wrap(\"<td></td>\");\nbb.num=$(\"<input class=\\\"pagination-num\\\" type=\\\"text\\\" value=\\\"1\\\" size=\\\"2\\\">\").appendTo(tr).wrap(\"<td></td>\");\nbb.num._unbind(\".pagination\")._bind(\"keydown.pagination\",function(e){\nif(e.keyCode==13){\nvar _a=parseInt($(this).val())||1;\n_10(_2,_a);\nreturn false;\n}\n});\nbb.after=$(\"<span style=\\\"padding-right:6px;\\\"></span>\").appendTo(tr).wrap(\"<td></td>\");\n}else{\nif(_8==\"refresh\"){\nbb.refresh=_9(\"refresh\");\n}else{\nif(_8==\"links\"){\n$(\"<td class=\\\"pagination-links\\\"></td>\").appendTo(tr);\n}else{\nif(_8==\"info\"){\nif(_7==aa.length-1){\n$(\"<div class=\\\"pagination-info\\\"></div>\").appendTo(_5);\n}else{\n$(\"<td><div class=\\\"pagination-info\\\"></div></td>\").appendTo(tr);\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\nif(_4.buttons){\n$(\"<td><div class=\\\"pagination-btn-separator\\\"></div></td>\").appendTo(tr);\nif($.isArray(_4.buttons)){\nfor(var i=0;i<_4.buttons.length;i++){\nvar _b=_4.buttons[i];\nif(_b==\"-\"){\n$(\"<td><div class=\\\"pagination-btn-separator\\\"></div></td>\").appendTo(tr);\n}else{\nvar td=$(\"<td></td>\").appendTo(tr);\nvar a=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(td);\na[0].onclick=eval(_b.handler||function(){\n});\na.linkbutton($.extend({},_b,{plain:true}));\n}\n}\n}else{\nvar td=$(\"<td></td>\").appendTo(tr);\n$(_4.buttons).appendTo(td).show();\n}\n}\n$(\"<div style=\\\"clear:both;\\\"></div>\").appendTo(_5);\nfunction _9(_c){\nvar _d=_4.nav[_c];\nvar a=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(tr);\na.wrap(\"<td></td>\");\na.linkbutton({iconCls:_d.iconCls,plain:true})._unbind(\".pagination\")._bind(\"click.pagination\",function(){\n_d.handler.call(_2);\n});\nreturn a;\n};\nfunction _6(aa,_e){\nvar _f=$.inArray(_e,aa);\nif(_f>=0){\naa.splice(_f,1);\n}\nreturn aa;\n};\n};\nfunction _10(_11,_12){\nvar _13=$.data(_11,\"pagination\").options;\nif(_13.onBeforeSelectPage.call(_11,_12,_13.pageSize)==false){\n_14(_11);\nreturn;\n}\n_14(_11,{pageNumber:_12});\n_13.onSelectPage.call(_11,_13.pageNumber,_13.pageSize);\n};\nfunction _14(_15,_16){\nvar _17=$.data(_15,\"pagination\");\nvar _18=_17.options;\nvar bb=_17.bb;\n$.extend(_18,_16||{});\nvar ps=$(_15).find(\"select.pagination-page-list\");\nif(ps.length){\nps.val(_18.pageSize+\"\");\n_18.pageSize=parseInt(ps.val());\n}\nvar _19=Math.ceil(_18.total/_18.pageSize)||1;\nif(_18.pageNumber<1){\n_18.pageNumber=1;\n}\nif(_18.pageNumber>_19){\n_18.pageNumber=_19;\n}\nif(_18.total==0){\n_18.pageNumber=0;\n_19=0;\n}\nif(bb.num){\nbb.num.val(_18.pageNumber);\n}\nif(bb.after){\nbb.after.html(_18.afterPageText.replace(/{pages}/,_19));\n}\nvar td=$(_15).find(\"td.pagination-links\");\nif(td.length){\ntd.empty();\nvar _1a=_18.pageNumber-Math.floor(_18.links/2);\nif(_1a<1){\n_1a=1;\n}\nvar _1b=_1a+_18.links-1;\nif(_1b>_19){\n_1b=_19;\n}\n_1a=_1b-_18.links+1;\nif(_1a<1){\n_1a=1;\n}\nfor(var i=_1a;i<=_1b;i++){\nvar a=$(\"<a class=\\\"pagination-link\\\" href=\\\"javascript:;\\\"></a>\").appendTo(td);\na.linkbutton({plain:true,text:i});\nif(i==_18.pageNumber){\na.linkbutton(\"select\");\n}else{\na._unbind(\".pagination\")._bind(\"click.pagination\",{pageNumber:i},function(e){\n_10(_15,e.data.pageNumber);\n});\n}\n}\n}\nvar _1c=_18.displayMsg;\n_1c=_1c.replace(/{from}/,_18.total==0?0:_18.pageSize*(_18.pageNumber-1)+1);\n_1c=_1c.replace(/{to}/,Math.min(_18.pageSize*(_18.pageNumber),_18.total));\n_1c=_1c.replace(/{total}/,_18.total);\n$(_15).find(\"div.pagination-info\").html(_1c);\nif(bb.first){\nbb.first.linkbutton({disabled:((!_18.total)||_18.pageNumber==1)});\n}\nif(bb.prev){\nbb.prev.linkbutton({disabled:((!_18.total)||_18.pageNumber==1)});\n}\nif(bb.next){\nbb.next.linkbutton({disabled:(_18.pageNumber==_19)});\n}\nif(bb.last){\nbb.last.linkbutton({disabled:(_18.pageNumber==_19)});\n}\n_1d(_15,_18.loading);\n};\nfunction _1d(_1e,_1f){\nvar _20=$.data(_1e,\"pagination\");\nvar _21=_20.options;\n_21.loading=_1f;\nif(_21.showRefresh&&_20.bb.refresh){\n_20.bb.refresh.linkbutton({iconCls:(_21.loading?\"pagination-loading\":\"pagination-load\")});\n}\n};\n$.fn.pagination=function(_22,_23){\nif(typeof _22==\"string\"){\nreturn $.fn.pagination.methods[_22](this,_23);\n}\n_22=_22||{};\nreturn this.each(function(){\nvar _24;\nvar _25=$.data(this,\"pagination\");\nif(_25){\n_24=$.extend(_25.options,_22);\n}else{\n_24=$.extend({},$.fn.pagination.defaults,$.fn.pagination.parseOptions(this),_22);\n$.data(this,\"pagination\",{options:_24});\n}\n_1(this);\n_14(this);\n});\n};\n$.fn.pagination.methods={options:function(jq){\nreturn $.data(jq[0],\"pagination\").options;\n},loading:function(jq){\nreturn jq.each(function(){\n_1d(this,true);\n});\n},loaded:function(jq){\nreturn jq.each(function(){\n_1d(this,false);\n});\n},refresh:function(jq,_26){\nreturn jq.each(function(){\n_14(this,_26);\n});\n},select:function(jq,_27){\nreturn jq.each(function(){\n_10(this,_27);\n});\n}};\n$.fn.pagination.parseOptions=function(_28){\nvar t=$(_28);\nreturn $.extend({},$.parser.parseOptions(_28,[{total:\"number\",pageSize:\"number\",pageNumber:\"number\",links:\"number\"},{loading:\"boolean\",showPageList:\"boolean\",showPageInfo:\"boolean\",showRefresh:\"boolean\"}]),{pageList:(t.attr(\"pageList\")?eval(t.attr(\"pageList\")):undefined)});\n};\n$.fn.pagination.defaults={total:1,pageSize:10,pageNumber:1,pageList:[10,20,30,50],loading:false,buttons:null,showPageList:true,showPageInfo:true,showRefresh:true,links:10,layout:[\"list\",\"sep\",\"first\",\"prev\",\"sep\",\"manual\",\"sep\",\"next\",\"last\",\"sep\",\"refresh\",\"info\"],onBeforeSelectPage:function(_29,_2a){\n},onSelectPage:function(_2b,_2c){\n},onBeforeRefresh:function(_2d,_2e){\n},onRefresh:function(_2f,_30){\n},onChangePageSize:function(_31){\n},beforePageText:\"Page\",afterPageText:\"of {pages}\",displayMsg:\"Displaying {from} to {to} of {total} items\",nav:{first:{iconCls:\"pagination-first\",handler:function(){\nvar _32=$(this).pagination(\"options\");\nif(_32.pageNumber>1){\n$(this).pagination(\"select\",1);\n}\n}},prev:{iconCls:\"pagination-prev\",handler:function(){\nvar _33=$(this).pagination(\"options\");\nif(_33.pageNumber>1){\n$(this).pagination(\"select\",_33.pageNumber-1);\n}\n}},next:{iconCls:\"pagination-next\",handler:function(){\nvar _34=$(this).pagination(\"options\");\nvar _35=Math.ceil(_34.total/_34.pageSize);\nif(_34.pageNumber<_35){\n$(this).pagination(\"select\",_34.pageNumber+1);\n}\n}},last:{iconCls:\"pagination-last\",handler:function(){\nvar _36=$(this).pagination(\"options\");\nvar _37=Math.ceil(_36.total/_36.pageSize);\nif(_36.pageNumber<_37){\n$(this).pagination(\"select\",_37);\n}\n}},refresh:{iconCls:\"pagination-refresh\",handler:function(){\nvar _38=$(this).pagination(\"options\");\nif(_38.onBeforeRefresh.call(this,_38.pageNumber,_38.pageSize)!=false){\n$(this).pagination(\"select\",_38.pageNumber);\n_38.onRefresh.call(this,_38.pageNumber,_38.pageSize);\n}\n}}}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.panel.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\n$.fn._remove=function(){\nreturn this.each(function(){\n$(this).remove();\ntry{\nthis.outerHTML=\"\";\n}\ncatch(err){\n}\n});\n};\nfunction _1(_2){\n_2._remove();\n};\nfunction _3(_4,_5){\nvar _6=$.data(_4,\"panel\");\nvar _7=_6.options;\nvar _8=_6.panel;\nvar _9=_8.children(\".panel-header\");\nvar _a=_8.children(\".panel-body\");\nvar _b=_8.children(\".panel-footer\");\nvar _c=(_7.halign==\"left\"||_7.halign==\"right\");\nif(_5){\n$.extend(_7,{width:_5.width,height:_5.height,minWidth:_5.minWidth,maxWidth:_5.maxWidth,minHeight:_5.minHeight,maxHeight:_5.maxHeight,left:_5.left,top:_5.top});\n_7.hasResized=false;\n}\nvar _d=_8.outerWidth();\nvar _e=_8.outerHeight();\n_8._size(_7);\nvar _f=_8.outerWidth();\nvar _10=_8.outerHeight();\nif(_7.hasResized&&(_d==_f&&_e==_10)){\nreturn;\n}\n_7.hasResized=true;\nif(!_c){\n_9._outerWidth(_8.width());\n}\n_a._outerWidth(_8.width());\nif(!isNaN(parseInt(_7.height))){\nif(_c){\nif(_7.header){\nvar _11=$(_7.header)._outerWidth();\n}else{\n_9.css(\"width\",\"\");\nvar _11=_9._outerWidth();\n}\nvar _12=_9.find(\".panel-title\");\n_11+=Math.min(_12._outerWidth(),_12._outerHeight());\nvar _13=_8.height();\n_9._outerWidth(_11)._outerHeight(_13);\n_12._outerWidth(_9.height());\n_a._outerWidth(_8.width()-_11-_b._outerWidth())._outerHeight(_13);\n_b._outerHeight(_13);\n_a.css({left:\"\",right:\"\"});\nif(_9.length){\n_a.css(_7.halign,(_9.position()[_7.halign]+_11)+\"px\");\n}\n_7.panelCssWidth=_8.css(\"width\");\nif(_7.collapsed){\n_8._outerWidth(_11+_b._outerWidth());\n}\n}else{\n_a._outerHeight(_8.height()-_9._outerHeight()-_b._outerHeight());\n}\n}else{\n_a.css(\"height\",\"\");\nvar min=$.parser.parseValue(\"minHeight\",_7.minHeight,_8.parent());\nvar max=$.parser.parseValue(\"maxHeight\",_7.maxHeight,_8.parent());\nvar _14=_9._outerHeight()+_b._outerHeight()+_8._outerHeight()-_8.height();\n_a._size(\"minHeight\",min?(min-_14):\"\");\n_a._size(\"maxHeight\",max?(max-_14):\"\");\n}\n_8.css({height:(_c?undefined:\"\"),minHeight:\"\",maxHeight:\"\",left:_7.left,top:_7.top});\n_7.onResize.apply(_4,[_7.width,_7.height]);\n$(_4).panel(\"doLayout\");\n};\nfunction _15(_16,_17){\nvar _18=$.data(_16,\"panel\");\nvar _19=_18.options;\nvar _1a=_18.panel;\nif(_17){\nif(_17.left!=null){\n_19.left=_17.left;\n}\nif(_17.top!=null){\n_19.top=_17.top;\n}\n}\n_1a.css({left:_19.left,top:_19.top});\n_1a.find(\".tooltip-f\").each(function(){\n$(this).tooltip(\"reposition\");\n});\n_19.onMove.apply(_16,[_19.left,_19.top]);\n};\nfunction _1b(_1c){\n$(_1c).addClass(\"panel-body\")._size(\"clear\");\nvar _1d=$(\"<div class=\\\"panel\\\"></div>\").insertBefore(_1c);\n_1d[0].appendChild(_1c);\n_1d._bind(\"_resize\",function(e,_1e){\nif($(this).hasClass(\"easyui-fluid\")||_1e){\n_3(_1c,{});\n}\nreturn false;\n});\nreturn _1d;\n};\nfunction _1f(_20){\nvar _21=$.data(_20,\"panel\");\nvar _22=_21.options;\nvar _23=_21.panel;\n_23.css(_22.style);\n_23.addClass(_22.cls);\n_23.removeClass(\"panel-hleft panel-hright\").addClass(\"panel-h\"+_22.halign);\n_24();\n_25();\nvar _26=$(_20).panel(\"header\");\nvar _27=$(_20).panel(\"body\");\nvar _28=$(_20).siblings(\".panel-footer\");\nif(_22.border){\n_26.removeClass(\"panel-header-noborder\");\n_27.removeClass(\"panel-body-noborder\");\n_28.removeClass(\"panel-footer-noborder\");\n}else{\n_26.addClass(\"panel-header-noborder\");\n_27.addClass(\"panel-body-noborder\");\n_28.addClass(\"panel-footer-noborder\");\n}\n_26.addClass(_22.headerCls);\n_27.addClass(_22.bodyCls);\n$(_20).attr(\"id\",_22.id||\"\");\nif(_22.content){\n$(_20).panel(\"clear\");\n$(_20).html(_22.content);\n$.parser.parse($(_20));\n}\nfunction _24(){\nif(_22.noheader||(!_22.title&&!_22.header)){\n_1(_23.children(\".panel-header\"));\n_23.children(\".panel-body\").addClass(\"panel-body-noheader\");\n}else{\nif(_22.header){\n$(_22.header).addClass(\"panel-header\").prependTo(_23);\n}else{\nvar _29=_23.children(\".panel-header\");\nif(!_29.length){\n_29=$(\"<div class=\\\"panel-header\\\"></div>\").prependTo(_23);\n}\nif(!$.isArray(_22.tools)){\n_29.find(\"div.panel-tool .panel-tool-a\").appendTo(_22.tools);\n}\n_29.empty();\nvar _2a=$(\"<div class=\\\"panel-title\\\"></div>\").html(_22.title).appendTo(_29);\nif(_22.iconCls){\n_2a.addClass(\"panel-with-icon\");\n$(\"<div class=\\\"panel-icon\\\"></div>\").addClass(_22.iconCls).appendTo(_29);\n}\nif(_22.halign==\"left\"||_22.halign==\"right\"){\n_2a.addClass(\"panel-title-\"+_22.titleDirection);\n}\nvar _2b=$(\"<div class=\\\"panel-tool\\\"></div>\").appendTo(_29);\n_2b._bind(\"click\",function(e){\ne.stopPropagation();\n});\nif(_22.tools){\nif($.isArray(_22.tools)){\n$.map(_22.tools,function(t){\n_2c(_2b,t.iconCls,eval(t.handler));\n});\n}else{\n$(_22.tools).children().each(function(){\n$(this).addClass($(this).attr(\"iconCls\")).addClass(\"panel-tool-a\").appendTo(_2b);\n});\n}\n}\nif(_22.collapsible){\n_2c(_2b,\"panel-tool-collapse\",function(){\nif(_22.collapsed==true){\n_57(_20,true);\n}else{\n_43(_20,true);\n}\n});\n}\nif(_22.minimizable){\n_2c(_2b,\"panel-tool-min\",function(){\n_62(_20);\n});\n}\nif(_22.maximizable){\n_2c(_2b,\"panel-tool-max\",function(){\nif(_22.maximized==true){\n_66(_20);\n}else{\n_42(_20);\n}\n});\n}\nif(_22.closable){\n_2c(_2b,\"panel-tool-close\",function(){\n_44(_20);\n});\n}\n}\n_23.children(\"div.panel-body\").removeClass(\"panel-body-noheader\");\n}\n};\nfunction _2c(c,_2d,_2e){\nvar a=$(\"<a href=\\\"javascript:;\\\"></a>\").addClass(_2d).appendTo(c);\na._bind(\"click\",_2e);\n};\nfunction _25(){\nif(_22.footer){\n$(_22.footer).addClass(\"panel-footer\").appendTo(_23);\n$(_20).addClass(\"panel-body-nobottom\");\n}else{\n_23.children(\".panel-footer\").remove();\n$(_20).removeClass(\"panel-body-nobottom\");\n}\n};\n};\nfunction _2f(_30,_31){\nvar _32=$.data(_30,\"panel\");\nvar _33=_32.options;\nif(_34){\n_33.queryParams=_31;\n}\nif(!_33.href){\nreturn;\n}\nif(!_32.isLoaded||!_33.cache){\nvar _34=$.extend({},_33.queryParams);\nif(_33.onBeforeLoad.call(_30,_34)==false){\nreturn;\n}\n_32.isLoaded=false;\nif(_33.loadingMessage){\n$(_30).panel(\"clear\");\n$(_30).html($(\"<div class=\\\"panel-loading\\\"></div>\").html(_33.loadingMessage));\n}\n_33.loader.call(_30,_34,function(_35){\nvar _36=_33.extractor.call(_30,_35);\n$(_30).panel(\"clear\");\n$(_30).html(_36);\n$.parser.parse($(_30));\n_33.onLoad.apply(_30,arguments);\n_32.isLoaded=true;\n},function(){\n_33.onLoadError.apply(_30,arguments);\n});\n}\n};\nfunction _37(_38){\nvar t=$(_38);\nt.find(\".combo-f\").each(function(){\n$(this).combo(\"destroy\");\n});\nt.find(\".m-btn\").each(function(){\n$(this).menubutton(\"destroy\");\n});\nt.find(\".s-btn\").each(function(){\n$(this).splitbutton(\"destroy\");\n});\nt.find(\".tooltip-f\").each(function(){\n$(this).tooltip(\"destroy\");\n});\nt.children(\"div\").each(function(){\n$(this)._size(\"unfit\");\n});\nt.empty();\n};\nfunction _39(_3a){\n$(_3a).panel(\"doLayout\",true);\n};\nfunction _3b(_3c,_3d){\nvar _3e=$.data(_3c,\"panel\");\nvar _3f=_3e.options;\nvar _40=_3e.panel;\nif(_3d!=true){\nif(_3f.onBeforeOpen.call(_3c)==false){\nreturn;\n}\n}\n_40.stop(true,true);\nif($.isFunction(_3f.openAnimation)){\n_3f.openAnimation.call(_3c,cb);\n}else{\nswitch(_3f.openAnimation){\ncase \"slide\":\n_40.slideDown(_3f.openDuration,cb);\nbreak;\ncase \"fade\":\n_40.fadeIn(_3f.openDuration,cb);\nbreak;\ncase \"show\":\n_40.show(_3f.openDuration,cb);\nbreak;\ndefault:\n_40.show();\ncb();\n}\n}\nfunction cb(){\n_3f.closed=false;\n_3f.minimized=false;\nvar _41=_40.children(\".panel-header\").find(\"a.panel-tool-restore\");\nif(_41.length){\n_3f.maximized=true;\n}\n_3f.onOpen.call(_3c);\nif(_3f.maximized==true){\n_3f.maximized=false;\n_42(_3c);\n}\nif(_3f.collapsed==true){\n_3f.collapsed=false;\n_43(_3c);\n}\nif(!_3f.collapsed){\nif(_3f.href&&(!_3e.isLoaded||!_3f.cache)){\n_2f(_3c);\n_39(_3c);\n_3f.doneLayout=true;\n}\n}\nif(!_3f.doneLayout){\n_3f.doneLayout=true;\n_39(_3c);\n}\n};\n};\nfunction _44(_45,_46){\nvar _47=$.data(_45,\"panel\");\nvar _48=_47.options;\nvar _49=_47.panel;\nif(_46!=true){\nif(_48.onBeforeClose.call(_45)==false){\nreturn;\n}\n}\n_49.find(\".tooltip-f\").each(function(){\n$(this).tooltip(\"hide\");\n});\n_49.stop(true,true);\n_49._size(\"unfit\");\nif($.isFunction(_48.closeAnimation)){\n_48.closeAnimation.call(_45,cb);\n}else{\nswitch(_48.closeAnimation){\ncase \"slide\":\n_49.slideUp(_48.closeDuration,cb);\nbreak;\ncase \"fade\":\n_49.fadeOut(_48.closeDuration,cb);\nbreak;\ncase \"hide\":\n_49.hide(_48.closeDuration,cb);\nbreak;\ndefault:\n_49.hide();\ncb();\n}\n}\nfunction cb(){\n_48.closed=true;\n_48.onClose.call(_45);\n};\n};\nfunction _4a(_4b,_4c){\nvar _4d=$.data(_4b,\"panel\");\nvar _4e=_4d.options;\nvar _4f=_4d.panel;\nif(_4c!=true){\nif(_4e.onBeforeDestroy.call(_4b)==false){\nreturn;\n}\n}\n$(_4b).panel(\"clear\").panel(\"clear\",\"footer\");\n_1(_4f);\n_4e.onDestroy.call(_4b);\n};\nfunction _43(_50,_51){\nvar _52=$.data(_50,\"panel\").options;\nvar _53=$.data(_50,\"panel\").panel;\nvar _54=_53.children(\".panel-body\");\nvar _55=_53.children(\".panel-header\");\nvar _56=_55.find(\"a.panel-tool-collapse\");\nif(_52.collapsed==true){\nreturn;\n}\n_54.stop(true,true);\nif(_52.onBeforeCollapse.call(_50)==false){\nreturn;\n}\n_56.addClass(\"panel-tool-expand\");\nif(_51==true){\nif(_52.halign==\"left\"||_52.halign==\"right\"){\n_53.animate({width:_55._outerWidth()+_53.children(\".panel-footer\")._outerWidth()},function(){\ncb();\n});\n}else{\n_54.slideUp(\"normal\",function(){\ncb();\n});\n}\n}else{\nif(_52.halign==\"left\"||_52.halign==\"right\"){\n_53._outerWidth(_55._outerWidth()+_53.children(\".panel-footer\")._outerWidth());\n}\ncb();\n}\nfunction cb(){\n_54.hide();\n_52.collapsed=true;\n_52.onCollapse.call(_50);\n};\n};\nfunction _57(_58,_59){\nvar _5a=$.data(_58,\"panel\").options;\nvar _5b=$.data(_58,\"panel\").panel;\nvar _5c=_5b.children(\".panel-body\");\nvar _5d=_5b.children(\".panel-header\").find(\"a.panel-tool-collapse\");\nif(_5a.collapsed==false){\nreturn;\n}\n_5c.stop(true,true);\nif(_5a.onBeforeExpand.call(_58)==false){\nreturn;\n}\n_5d.removeClass(\"panel-tool-expand\");\nif(_59==true){\nif(_5a.halign==\"left\"||_5a.halign==\"right\"){\n_5c.show();\n_5b.animate({width:_5a.panelCssWidth},function(){\ncb();\n});\n}else{\n_5c.slideDown(\"normal\",function(){\ncb();\n});\n}\n}else{\nif(_5a.halign==\"left\"||_5a.halign==\"right\"){\n_5b.css(\"width\",_5a.panelCssWidth);\n}\ncb();\n}\nfunction cb(){\n_5c.show();\n_5a.collapsed=false;\n_5a.onExpand.call(_58);\n_2f(_58);\n_39(_58);\n};\n};\nfunction _42(_5e){\nvar _5f=$.data(_5e,\"panel\").options;\nvar _60=$.data(_5e,\"panel\").panel;\nvar _61=_60.children(\".panel-header\").find(\"a.panel-tool-max\");\nif(_5f.maximized==true){\nreturn;\n}\n_61.addClass(\"panel-tool-restore\");\nif(!$.data(_5e,\"panel\").original){\n$.data(_5e,\"panel\").original={width:_5f.width,height:_5f.height,left:_5f.left,top:_5f.top,fit:_5f.fit};\n}\n_5f.left=0;\n_5f.top=0;\n_5f.fit=true;\n_3(_5e);\n_5f.minimized=false;\n_5f.maximized=true;\n_5f.onMaximize.call(_5e);\n};\nfunction _62(_63){\nvar _64=$.data(_63,\"panel\").options;\nvar _65=$.data(_63,\"panel\").panel;\n_65._size(\"unfit\");\n_65.hide();\n_64.minimized=true;\n_64.maximized=false;\n_64.onMinimize.call(_63);\n};\nfunction _66(_67){\nvar _68=$.data(_67,\"panel\").options;\nvar _69=$.data(_67,\"panel\").panel;\nvar _6a=_69.children(\".panel-header\").find(\"a.panel-tool-max\");\nif(_68.maximized==false){\nreturn;\n}\n_69.show();\n_6a.removeClass(\"panel-tool-restore\");\n$.extend(_68,$.data(_67,\"panel\").original);\n_3(_67);\n_68.minimized=false;\n_68.maximized=false;\n$.data(_67,\"panel\").original=null;\n_68.onRestore.call(_67);\n};\nfunction _6b(_6c,_6d){\n$.data(_6c,\"panel\").options.title=_6d;\n$(_6c).panel(\"header\").find(\"div.panel-title\").html(_6d);\n};\nvar _6e=null;\n$(window)._unbind(\".panel\")._bind(\"resize.panel\",function(){\nif(_6e){\nclearTimeout(_6e);\n}\n_6e=setTimeout(function(){\nvar _6f=$(\"body.layout\");\nif(_6f.length){\n_6f.layout(\"resize\");\n$(\"body\").children(\".easyui-fluid:visible\").each(function(){\n$(this).triggerHandler(\"_resize\");\n});\n}else{\n$(\"body\").panel(\"doLayout\");\n}\n_6e=null;\n},100);\n});\n$.fn.panel=function(_70,_71){\nif(typeof _70==\"string\"){\nreturn $.fn.panel.methods[_70](this,_71);\n}\n_70=_70||{};\nreturn this.each(function(){\nvar _72=$.data(this,\"panel\");\nvar _73;\nif(_72){\n_73=$.extend(_72.options,_70);\n_72.isLoaded=false;\n}else{\n_73=$.extend({},$.fn.panel.defaults,$.fn.panel.parseOptions(this),_70);\n$(this).attr(\"title\",\"\");\n_72=$.data(this,\"panel\",{options:_73,panel:_1b(this),isLoaded:false});\n}\n_1f(this);\n$(this).show();\nif(_73.doSize==true){\n_72.panel.css(\"display\",\"block\");\n_3(this);\n}\nif(_73.closed==true||_73.minimized==true){\n_72.panel.hide();\n}else{\n_3b(this);\n}\n});\n};\n$.fn.panel.methods={options:function(jq){\nreturn $.data(jq[0],\"panel\").options;\n},panel:function(jq){\nreturn $.data(jq[0],\"panel\").panel;\n},header:function(jq){\nreturn $.data(jq[0],\"panel\").panel.children(\".panel-header\");\n},footer:function(jq){\nreturn jq.panel(\"panel\").children(\".panel-footer\");\n},body:function(jq){\nreturn $.data(jq[0],\"panel\").panel.children(\".panel-body\");\n},setTitle:function(jq,_74){\nreturn jq.each(function(){\n_6b(this,_74);\n});\n},open:function(jq,_75){\nreturn jq.each(function(){\n_3b(this,_75);\n});\n},close:function(jq,_76){\nreturn jq.each(function(){\n_44(this,_76);\n});\n},destroy:function(jq,_77){\nreturn jq.each(function(){\n_4a(this,_77);\n});\n},clear:function(jq,_78){\nreturn jq.each(function(){\n_37(_78==\"footer\"?$(this).panel(\"footer\"):this);\n});\n},refresh:function(jq,_79){\nreturn jq.each(function(){\nvar _7a=$.data(this,\"panel\");\n_7a.isLoaded=false;\nif(_79){\nif(typeof _79==\"string\"){\n_7a.options.href=_79;\n}else{\n_7a.options.queryParams=_79;\n}\n}\n_2f(this);\n});\n},resize:function(jq,_7b){\nreturn jq.each(function(){\n_3(this,_7b||{});\n});\n},doLayout:function(jq,all){\nreturn jq.each(function(){\n_7c(this,\"body\");\n_7c($(this).siblings(\".panel-footer\")[0],\"footer\");\nfunction _7c(_7d,_7e){\nif(!_7d){\nreturn;\n}\nvar _7f=_7d==$(\"body\")[0];\nvar s=$(_7d).find(\"div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible,.easyui-fluid:visible\").filter(function(_80,el){\nvar p=$(el).parents(\".panel-\"+_7e+\":first\");\nreturn _7f?p.length==0:p[0]==_7d;\n});\ns.each(function(){\n$(this).triggerHandler(\"_resize\",[all||false]);\n});\n};\n});\n},move:function(jq,_81){\nreturn jq.each(function(){\n_15(this,_81);\n});\n},maximize:function(jq){\nreturn jq.each(function(){\n_42(this);\n});\n},minimize:function(jq){\nreturn jq.each(function(){\n_62(this);\n});\n},restore:function(jq){\nreturn jq.each(function(){\n_66(this);\n});\n},collapse:function(jq,_82){\nreturn jq.each(function(){\n_43(this,_82);\n});\n},expand:function(jq,_83){\nreturn jq.each(function(){\n_57(this,_83);\n});\n}};\n$.fn.panel.parseOptions=function(_84){\nvar t=$(_84);\nvar hh=t.children(\".panel-header,header\");\nvar ff=t.children(\".panel-footer,footer\");\nreturn $.extend({},$.parser.parseOptions(_84,[\"id\",\"width\",\"height\",\"left\",\"top\",\"title\",\"iconCls\",\"cls\",\"headerCls\",\"bodyCls\",\"tools\",\"href\",\"method\",\"header\",\"footer\",\"halign\",\"titleDirection\",{cache:\"boolean\",fit:\"boolean\",border:\"boolean\",noheader:\"boolean\"},{collapsible:\"boolean\",minimizable:\"boolean\",maximizable:\"boolean\"},{closable:\"boolean\",collapsed:\"boolean\",minimized:\"boolean\",maximized:\"boolean\",closed:\"boolean\"},\"openAnimation\",\"closeAnimation\",{openDuration:\"number\",closeDuration:\"number\"},]),{loadingMessage:(t.attr(\"loadingMessage\")!=undefined?t.attr(\"loadingMessage\"):undefined),header:(hh.length?hh.removeClass(\"panel-header\"):undefined),footer:(ff.length?ff.removeClass(\"panel-footer\"):undefined)});\n};\n$.fn.panel.defaults={id:null,title:null,iconCls:null,width:\"auto\",height:\"auto\",left:null,top:null,cls:null,headerCls:null,bodyCls:null,style:{},href:null,cache:true,fit:false,border:true,doSize:true,noheader:false,content:null,halign:\"top\",titleDirection:\"down\",collapsible:false,minimizable:false,maximizable:false,closable:false,collapsed:false,minimized:false,maximized:false,closed:false,openAnimation:false,openDuration:400,closeAnimation:false,closeDuration:400,tools:null,footer:null,header:null,queryParams:{},method:\"get\",href:null,loadingMessage:\"Loading...\",loader:function(_85,_86,_87){\nvar _88=$(this).panel(\"options\");\nif(!_88.href){\nreturn false;\n}\n$.ajax({type:_88.method,url:_88.href,cache:false,data:_85,dataType:\"html\",success:function(_89){\n_86(_89);\n},error:function(){\n_87.apply(this,arguments);\n}});\n},extractor:function(_8a){\nvar _8b=/<body[^>]*>((.|[\\n\\r])*)<\\/body>/im;\nvar _8c=_8b.exec(_8a);\nif(_8c){\nreturn _8c[1];\n}else{\nreturn _8a;\n}\n},onBeforeLoad:function(_8d){\n},onLoad:function(){\n},onLoadError:function(){\n},onBeforeOpen:function(){\n},onOpen:function(){\n},onBeforeClose:function(){\n},onClose:function(){\n},onBeforeDestroy:function(){\n},onDestroy:function(){\n},onResize:function(_8e,_8f){\n},onMove:function(_90,top){\n},onMaximize:function(){\n},onRestore:function(){\n},onMinimize:function(){\n},onBeforeCollapse:function(){\n},onBeforeExpand:function(){\n},onCollapse:function(){\n},onExpand:function(){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.parser.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\n$.easyui={indexOfArray:function(a,o,id){\nfor(var i=0,_1=a.length;i<_1;i++){\nif(id==undefined){\nif(a[i]==o){\nreturn i;\n}\n}else{\nif(a[i][o]==id){\nreturn i;\n}\n}\n}\nreturn -1;\n},removeArrayItem:function(a,o,id){\nif(typeof o==\"string\"){\nfor(var i=0,_2=a.length;i<_2;i++){\nif(a[i][o]==id){\na.splice(i,1);\nreturn;\n}\n}\n}else{\nvar _3=this.indexOfArray(a,o);\nif(_3!=-1){\na.splice(_3,1);\n}\n}\n},addArrayItem:function(a,o,r){\nvar _4=this.indexOfArray(a,o,r?r[o]:undefined);\nif(_4==-1){\na.push(r?r:o);\n}else{\na[_4]=r?r:o;\n}\n},getArrayItem:function(a,o,id){\nvar _5=this.indexOfArray(a,o,id);\nreturn _5==-1?null:a[_5];\n},forEach:function(_6,_7,_8){\nvar _9=[];\nfor(var i=0;i<_6.length;i++){\n_9.push(_6[i]);\n}\nwhile(_9.length){\nvar _a=_9.shift();\nif(_8(_a)==false){\nreturn;\n}\nif(_7&&_a.children){\nfor(var i=_a.children.length-1;i>=0;i--){\n_9.unshift(_a.children[i]);\n}\n}\n}\n}};\n$.parser={auto:true,emptyFn:function(){\n},onComplete:function(_b){\n},plugins:[\"draggable\",\"droppable\",\"resizable\",\"pagination\",\"tooltip\",\"linkbutton\",\"menu\",\"sidemenu\",\"menubutton\",\"splitbutton\",\"switchbutton\",\"progressbar\",\"radiobutton\",\"checkbox\",\"tree\",\"textbox\",\"passwordbox\",\"maskedbox\",\"filebox\",\"combo\",\"combobox\",\"combotree\",\"combogrid\",\"combotreegrid\",\"tagbox\",\"numberbox\",\"validatebox\",\"searchbox\",\"spinner\",\"numberspinner\",\"timespinner\",\"datetimespinner\",\"calendar\",\"datebox\",\"datetimebox\",\"timepicker\",\"slider\",\"layout\",\"panel\",\"datagrid\",\"propertygrid\",\"treegrid\",\"datalist\",\"tabs\",\"accordion\",\"window\",\"dialog\",\"form\"],parse:function(_c){\nvar aa=[];\nfor(var i=0;i<$.parser.plugins.length;i++){\nvar _d=$.parser.plugins[i];\nvar r=$(\".easyui-\"+_d,_c);\nif(r.length){\nif(r[_d]){\nr.each(function(){\n$(this)[_d]($.data(this,\"options\")||{});\n});\n}else{\naa.push({name:_d,jq:r});\n}\n}\n}\nif(aa.length&&window.easyloader){\nvar _e=[];\nfor(var i=0;i<aa.length;i++){\n_e.push(aa[i].name);\n}\neasyloader.load(_e,function(){\nfor(var i=0;i<aa.length;i++){\nvar _f=aa[i].name;\nvar jq=aa[i].jq;\njq.each(function(){\n$(this)[_f]($.data(this,\"options\")||{});\n});\n}\n$.parser.onComplete.call($.parser,_c);\n});\n}else{\n$.parser.onComplete.call($.parser,_c);\n}\n},parseValue:function(_10,_11,_12,_13){\n_13=_13||0;\nvar v=$.trim(String(_11||\"\"));\nvar _14=v.substr(v.length-1,1);\nif(_14==\"%\"){\nv=parseFloat(v.substr(0,v.length-1));\nif(_10.toLowerCase().indexOf(\"width\")>=0){\n_13+=_12[0].offsetWidth-_12[0].clientWidth;\nv=Math.floor((_12.width()-_13)*v/100);\n}else{\n_13+=_12[0].offsetHeight-_12[0].clientHeight;\nv=Math.floor((_12.height()-_13)*v/100);\n}\n}else{\nv=parseInt(v)||undefined;\n}\nreturn v;\n},parseOptions:function(_15,_16){\nvar t=$(_15);\nvar _17={};\nvar s=$.trim(t.attr(\"data-options\"));\nif(s){\nif(s.substring(0,1)!=\"{\"){\ns=\"{\"+s+\"}\";\n}\n_17=(new Function(\"return \"+s))();\n}\n$.map([\"width\",\"height\",\"left\",\"top\",\"minWidth\",\"maxWidth\",\"minHeight\",\"maxHeight\"],function(p){\nvar pv=$.trim(_15.style[p]||\"\");\nif(pv){\nif(pv.indexOf(\"%\")==-1){\npv=parseInt(pv);\nif(isNaN(pv)){\npv=undefined;\n}\n}\n_17[p]=pv;\n}\n});\nif(_16){\nvar _18={};\nfor(var i=0;i<_16.length;i++){\nvar pp=_16[i];\nif(typeof pp==\"string\"){\n_18[pp]=t.attr(pp);\n}else{\nfor(var _19 in pp){\nvar _1a=pp[_19];\nif(_1a==\"boolean\"){\n_18[_19]=t.attr(_19)?(t.attr(_19)==\"true\"):undefined;\n}else{\nif(_1a==\"number\"){\n_18[_19]=t.attr(_19)==\"0\"?0:parseFloat(t.attr(_19))||undefined;\n}\n}\n}\n}\n}\n$.extend(_17,_18);\n}\nreturn _17;\n},parseVars:function(){\nvar d=$(\"<div style=\\\"position:absolute;top:-1000px;width:100px;height:100px;padding:5px\\\"></div>\").appendTo(\"body\");\n$._boxModel=d.outerWidth()!=100;\nd.remove();\nd=$(\"<div style=\\\"position:fixed\\\"></div>\").appendTo(\"body\");\n$._positionFixed=(d.css(\"position\")==\"fixed\");\nd.remove();\n}};\n$(function(){\n$.parser.parseVars();\nif(!window.easyloader&&$.parser.auto){\n$.parser.parse();\n}\n});\n$.fn._outerWidth=function(_1b){\nif(_1b==undefined){\nif(this[0]==window){\nreturn this.width()||document.body.clientWidth;\n}\nreturn this.outerWidth()||0;\n}\nreturn this._size(\"width\",_1b);\n};\n$.fn._outerHeight=function(_1c){\nif(_1c==undefined){\nif(this[0]==window){\nreturn this.height()||document.body.clientHeight;\n}\nreturn this.outerHeight()||0;\n}\nreturn this._size(\"height\",_1c);\n};\n$.fn._scrollLeft=function(_1d){\nif(_1d==undefined){\nreturn this.scrollLeft();\n}else{\nreturn this.each(function(){\n$(this).scrollLeft(_1d);\n});\n}\n};\n$.fn._propAttr=$.fn.prop||$.fn.attr;\n$.fn._bind=$.fn.on;\n$.fn._unbind=$.fn.off;\n$.fn._size=function(_1e,_1f){\nif(typeof _1e==\"string\"){\nif(_1e==\"clear\"){\nreturn this.each(function(){\n$(this).css({width:\"\",minWidth:\"\",maxWidth:\"\",height:\"\",minHeight:\"\",maxHeight:\"\"});\n});\n}else{\nif(_1e==\"fit\"){\nreturn this.each(function(){\n_20(this,this.tagName==\"BODY\"?$(\"body\"):$(this).parent(),true);\n});\n}else{\nif(_1e==\"unfit\"){\nreturn this.each(function(){\n_20(this,$(this).parent(),false);\n});\n}else{\nif(_1f==undefined){\nreturn _21(this[0],_1e);\n}else{\nreturn this.each(function(){\n_21(this,_1e,_1f);\n});\n}\n}\n}\n}\n}else{\nreturn this.each(function(){\n_1f=_1f||$(this).parent();\n$.extend(_1e,_20(this,_1f,_1e.fit)||{});\nvar r1=_22(this,\"width\",_1f,_1e);\nvar r2=_22(this,\"height\",_1f,_1e);\nif(r1||r2){\n$(this).addClass(\"easyui-fluid\");\n}else{\n$(this).removeClass(\"easyui-fluid\");\n}\n});\n}\nfunction _20(_23,_24,fit){\nif(!_24.length){\nreturn false;\n}\nvar t=$(_23)[0];\nvar p=_24[0];\nvar _25=p.fcount||0;\nif(fit){\nif(!t.fitted){\nt.fitted=true;\np.fcount=_25+1;\n$(p).addClass(\"panel-noscroll\");\nif(p.tagName==\"BODY\"){\n$(\"html\").addClass(\"panel-fit\");\n}\n}\nreturn {width:($(p).width()||1),height:($(p).height()||1)};\n}else{\nif(t.fitted){\nt.fitted=false;\np.fcount=_25-1;\nif(p.fcount==0){\n$(p).removeClass(\"panel-noscroll\");\nif(p.tagName==\"BODY\"){\n$(\"html\").removeClass(\"panel-fit\");\n}\n}\n}\nreturn false;\n}\n};\nfunction _22(_26,_27,_28,_29){\nvar t=$(_26);\nvar p=_27;\nvar p1=p.substr(0,1).toUpperCase()+p.substr(1);\nvar min=$.parser.parseValue(\"min\"+p1,_29[\"min\"+p1],_28);\nvar max=$.parser.parseValue(\"max\"+p1,_29[\"max\"+p1],_28);\nvar val=$.parser.parseValue(p,_29[p],_28);\nvar _2a=(String(_29[p]||\"\").indexOf(\"%\")>=0?true:false);\nif(!isNaN(val)){\nvar v=Math.min(Math.max(val,min||0),max||99999);\nif(!_2a){\n_29[p]=v;\n}\nt._size(\"min\"+p1,\"\");\nt._size(\"max\"+p1,\"\");\nt._size(p,v);\n}else{\nt._size(p,\"\");\nt._size(\"min\"+p1,min);\nt._size(\"max\"+p1,max);\n}\nreturn _2a||_29.fit;\n};\nfunction _21(_2b,_2c,_2d){\nvar t=$(_2b);\nif(_2d==undefined){\n_2d=parseInt(_2b.style[_2c]);\nif(isNaN(_2d)){\nreturn undefined;\n}\nif($._boxModel){\n_2d+=_2e();\n}\nreturn _2d;\n}else{\nif(_2d===\"\"){\nt.css(_2c,\"\");\n}else{\nif($._boxModel){\n_2d-=_2e();\nif(_2d<0){\n_2d=0;\n}\n}\nt.css(_2c,_2d+\"px\");\n}\n}\nfunction _2e(){\nif(_2c.toLowerCase().indexOf(\"width\")>=0){\nreturn t.outerWidth()-t.width();\n}else{\nreturn t.outerHeight()-t.height();\n}\n};\n};\n};\n})(jQuery);\n(function($){\nvar _2f=null;\nvar _30=null;\nvar _31=false;\nfunction _32(e){\nif(e.touches.length!=1){\nreturn;\n}\nif(!_31){\n_31=true;\ndblClickTimer=setTimeout(function(){\n_31=false;\n},500);\n}else{\nclearTimeout(dblClickTimer);\n_31=false;\n_33(e,\"dblclick\");\n}\n_2f=setTimeout(function(){\n_33(e,\"contextmenu\",3);\n},1000);\n_33(e,\"mousedown\");\nif($.fn.draggable.isDragging||$.fn.resizable.isResizing){\ne.preventDefault();\n}\n};\nfunction _34(e){\nif(e.touches.length!=1){\nreturn;\n}\nif(_2f){\nclearTimeout(_2f);\n}\n_33(e,\"mousemove\");\nif($.fn.draggable.isDragging||$.fn.resizable.isResizing){\ne.preventDefault();\n}\n};\nfunction _35(e){\nif(_2f){\nclearTimeout(_2f);\n}\n_33(e,\"mouseup\");\nif($.fn.draggable.isDragging||$.fn.resizable.isResizing){\ne.preventDefault();\n}\n};\nfunction _33(e,_36,_37){\nvar _38=new $.Event(_36);\n_38.pageX=e.changedTouches[0].pageX;\n_38.pageY=e.changedTouches[0].pageY;\n_38.which=_37||1;\n$(e.target).trigger(_38);\n};\nif(document.addEventListener){\ndocument.addEventListener(\"touchstart\",_32,true);\ndocument.addEventListener(\"touchmove\",_34,true);\ndocument.addEventListener(\"touchend\",_35,true);\n}\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.passwordbox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"passwordbox\");\nvar _4=_3.options;\nvar _5=$.extend(true,[],_4.icons);\nif(_4.showEye){\n_5.push({iconCls:\"passwordbox-open\",handler:function(e){\n_4.revealed=!_4.revealed;\n_6(_2);\n}});\n}\n$(_2).addClass(\"passwordbox-f\").textbox($.extend({},_4,{icons:_5}));\n_6(_2);\n};\nfunction _7(_8,_9,_a){\nvar _b=$(_8).data(\"passwordbox\");\nvar t=$(_8);\nvar _c=t.passwordbox(\"options\");\nif(_c.revealed){\nt.textbox(\"setValue\",_9);\nreturn;\n}\n_b.converting=true;\nvar _d=unescape(_c.passwordChar);\nvar cc=_9.split(\"\");\nvar vv=t.passwordbox(\"getValue\").split(\"\");\nfor(var i=0;i<cc.length;i++){\nvar c=cc[i];\nif(c!=vv[i]){\nif(c!=_d){\nvv.splice(i,0,c);\n}\n}\n}\nvar _e=t.passwordbox(\"getSelectionStart\");\nif(cc.length<vv.length){\nvv.splice(_e,vv.length-cc.length,\"\");\n}\nfor(var i=0;i<cc.length;i++){\nif(_a||i!=_e-1){\ncc[i]=_d;\n}\n}\nt.textbox(\"setValue\",vv.join(\"\"));\nt.textbox(\"setText\",cc.join(\"\"));\nt.textbox(\"setSelectionRange\",{start:_e,end:_e});\nsetTimeout(function(){\n_b.converting=false;\n},0);\n};\nfunction _6(_f,_10){\nvar t=$(_f);\nvar _11=t.passwordbox(\"options\");\nvar _12=t.next().find(\".passwordbox-open\");\nvar _13=unescape(_11.passwordChar);\n_10=_10==undefined?t.textbox(\"getValue\"):_10;\nt.textbox(\"setValue\",_10);\nt.textbox(\"setText\",_11.revealed?_10:_10.replace(/./ig,_13));\n_11.revealed?_12.addClass(\"passwordbox-close\"):_12.removeClass(\"passwordbox-close\");\n};\nfunction _14(e){\nvar _15=e.data.target;\nvar t=$(e.data.target);\nvar _16=t.data(\"passwordbox\");\nvar _17=t.data(\"passwordbox\").options;\n_16.checking=true;\n_16.value=t.passwordbox(\"getText\");\n(function(){\nif(_16.checking){\nvar _18=t.passwordbox(\"getText\");\nif(_16.value!=_18){\n_16.value=_18;\nif(_16.lastTimer){\nclearTimeout(_16.lastTimer);\n_16.lastTimer=undefined;\n}\n_7(_15,_18);\n_16.lastTimer=setTimeout(function(){\n_7(_15,t.passwordbox(\"getText\"),true);\n_16.lastTimer=undefined;\n},_17.lastDelay);\n}\nsetTimeout(arguments.callee,_17.checkInterval);\n}\n})();\n};\nfunction _19(e){\nvar _1a=e.data.target;\nvar _1b=$(_1a).data(\"passwordbox\");\n_1b.checking=false;\nif(_1b.lastTimer){\nclearTimeout(_1b.lastTimer);\n_1b.lastTimer=undefined;\n}\n_6(_1a);\n};\n$.fn.passwordbox=function(_1c,_1d){\nif(typeof _1c==\"string\"){\nvar _1e=$.fn.passwordbox.methods[_1c];\nif(_1e){\nreturn _1e(this,_1d);\n}else{\nreturn this.textbox(_1c,_1d);\n}\n}\n_1c=_1c||{};\nreturn this.each(function(){\nvar _1f=$.data(this,\"passwordbox\");\nif(_1f){\n$.extend(_1f.options,_1c);\n}else{\n_1f=$.data(this,\"passwordbox\",{options:$.extend({},$.fn.passwordbox.defaults,$.fn.passwordbox.parseOptions(this),_1c)});\n}\n_1(this);\n});\n};\n$.fn.passwordbox.methods={options:function(jq){\nreturn $.data(jq[0],\"passwordbox\").options;\n},setValue:function(jq,_20){\nreturn jq.each(function(){\n_6(this,_20);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_6(this,\"\");\n});\n},reset:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"reset\");\n_6(this);\n});\n},showPassword:function(jq){\nreturn jq.each(function(){\nvar _21=$(this).passwordbox(\"options\");\n_21.revealed=true;\n_6(this);\n});\n},hidePassword:function(jq){\nreturn jq.each(function(){\nvar _22=$(this).passwordbox(\"options\");\n_22.revealed=false;\n_6(this);\n});\n}};\n$.fn.passwordbox.parseOptions=function(_23){\nreturn $.extend({},$.fn.textbox.parseOptions(_23),$.parser.parseOptions(_23,[\"passwordChar\",{checkInterval:\"number\",lastDelay:\"number\",revealed:\"boolean\",showEye:\"boolean\"}]));\n};\n$.fn.passwordbox.defaults=$.extend({},$.fn.textbox.defaults,{passwordChar:\"%u25CF\",checkInterval:200,lastDelay:500,revealed:false,showEye:true,inputEvents:{focus:_14,blur:_19,keydown:function(e){\nvar _24=$(e.data.target).data(\"passwordbox\");\nreturn !_24.converting;\n}},val:function(_25){\nreturn $(_25).parent().prev().passwordbox(\"getValue\");\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.progressbar.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\n$(_2).addClass(\"progressbar\");\n$(_2).html(\"<div class=\\\"progressbar-text\\\"></div><div class=\\\"progressbar-value\\\"><div class=\\\"progressbar-text\\\"></div></div>\");\n$(_2)._bind(\"_resize\",function(e,_3){\nif($(this).hasClass(\"easyui-fluid\")||_3){\n_4(_2);\n}\nreturn false;\n});\nreturn $(_2);\n};\nfunction _4(_5,_6){\nvar _7=$.data(_5,\"progressbar\").options;\nvar _8=$.data(_5,\"progressbar\").bar;\nif(_6){\n_7.width=_6;\n}\n_8._size(_7);\n_8.find(\"div.progressbar-text\").css(\"width\",_8.width());\n_8.find(\"div.progressbar-text,div.progressbar-value\").css({height:_8.height()+\"px\",lineHeight:_8.height()+\"px\"});\n};\n$.fn.progressbar=function(_9,_a){\nif(typeof _9==\"string\"){\nvar _b=$.fn.progressbar.methods[_9];\nif(_b){\nreturn _b(this,_a);\n}\n}\n_9=_9||{};\nreturn this.each(function(){\nvar _c=$.data(this,\"progressbar\");\nif(_c){\n$.extend(_c.options,_9);\n}else{\n_c=$.data(this,\"progressbar\",{options:$.extend({},$.fn.progressbar.defaults,$.fn.progressbar.parseOptions(this),_9),bar:_1(this)});\n}\n$(this).progressbar(\"setValue\",_c.options.value);\n_4(this);\n});\n};\n$.fn.progressbar.methods={options:function(jq){\nreturn $.data(jq[0],\"progressbar\").options;\n},resize:function(jq,_d){\nreturn jq.each(function(){\n_4(this,_d);\n});\n},getValue:function(jq){\nreturn $.data(jq[0],\"progressbar\").options.value;\n},setValue:function(jq,_e){\nif(_e<0){\n_e=0;\n}\nif(_e>100){\n_e=100;\n}\nreturn jq.each(function(){\nvar _f=$.data(this,\"progressbar\").options;\nvar _10=_f.text.replace(/{value}/,_e);\nvar _11=_f.value;\n_f.value=_e;\n$(this).find(\"div.progressbar-value\").width(_e+\"%\");\n$(this).find(\"div.progressbar-text\").html(_10);\nif(_11!=_e){\n_f.onChange.call(this,_e,_11);\n}\n});\n}};\n$.fn.progressbar.parseOptions=function(_12){\nreturn $.extend({},$.parser.parseOptions(_12,[\"width\",\"height\",\"text\",{value:\"number\"}]));\n};\n$.fn.progressbar.defaults={width:\"auto\",height:22,value:0,text:\"{value}%\",onChange:function(_13,_14){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.propertygrid.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nvar _1;\n$(document)._unbind(\".propertygrid\")._bind(\"mousedown.propertygrid\",function(e){\nvar p=$(e.target).closest(\"div.datagrid-view,div.combo-panel\");\nif(p.length){\nreturn;\n}\n_2(_1);\n_1=undefined;\n});\nfunction _3(_4){\nvar _5=$.data(_4,\"propertygrid\");\nvar _6=$.data(_4,\"propertygrid\").options;\n$(_4).datagrid($.extend({},_6,{cls:\"propertygrid\",view:(_6.showGroup?_6.groupView:_6.view),onBeforeEdit:function(_7,_8){\nif(_6.onBeforeEdit.call(_4,_7,_8)==false){\nreturn false;\n}\nvar dg=$(this);\nvar _8=dg.datagrid(\"getRows\")[_7];\nvar _9=dg.datagrid(\"getColumnOption\",\"value\");\n_9.editor=_8.editor;\n},onClickCell:function(_a,_b,_c){\nif(_1!=this){\n_2(_1);\n_1=this;\n}\nif(_6.editIndex!=_a){\n_2(_1);\n$(this).datagrid(\"beginEdit\",_a);\nvar ed=$(this).datagrid(\"getEditor\",{index:_a,field:_b});\nif(!ed){\ned=$(this).datagrid(\"getEditor\",{index:_a,field:\"value\"});\n}\nif(ed){\nvar t=$(ed.target);\nvar _d=t.data(\"textbox\")?t.textbox(\"textbox\"):t;\n_d.focus();\n_6.editIndex=_a;\n}\n}\n_6.onClickCell.call(_4,_a,_b,_c);\n},loadFilter:function(_e){\n_2(this);\nreturn _6.loadFilter.call(this,_e);\n}}));\n};\nfunction _2(_f){\nvar t=$(_f);\nif(!t.length){\nreturn;\n}\nvar _10=$.data(_f,\"propertygrid\").options;\n_10.finder.getTr(_f,null,\"editing\").each(function(){\nvar _11=parseInt($(this).attr(\"datagrid-row-index\"));\nif(t.datagrid(\"validateRow\",_11)){\nt.datagrid(\"endEdit\",_11);\n}else{\nt.datagrid(\"cancelEdit\",_11);\n}\n});\n_10.editIndex=undefined;\n};\n$.fn.propertygrid=function(_12,_13){\nif(typeof _12==\"string\"){\nvar _14=$.fn.propertygrid.methods[_12];\nif(_14){\nreturn _14(this,_13);\n}else{\nreturn this.datagrid(_12,_13);\n}\n}\n_12=_12||{};\nreturn this.each(function(){\nvar _15=$.data(this,\"propertygrid\");\nif(_15){\n$.extend(_15.options,_12);\n}else{\nvar _16=$.extend({},$.fn.propertygrid.defaults,$.fn.propertygrid.parseOptions(this),_12);\n_16.frozenColumns=$.extend(true,[],_16.frozenColumns);\n_16.columns=$.extend(true,[],_16.columns);\n$.data(this,\"propertygrid\",{options:_16});\n}\n_3(this);\n});\n};\n$.fn.propertygrid.methods={options:function(jq){\nreturn $.data(jq[0],\"propertygrid\").options;\n}};\n$.fn.propertygrid.parseOptions=function(_17){\nreturn $.extend({},$.fn.datagrid.parseOptions(_17),$.parser.parseOptions(_17,[{showGroup:\"boolean\"}]));\n};\nvar _18=$.extend({},$.fn.datagrid.defaults.view,{render:function(_19,_1a,_1b){\nvar _1c=[];\nvar _1d=this.groups;\nfor(var i=0;i<_1d.length;i++){\n_1c.push(this.renderGroup.call(this,_19,i,_1d[i],_1b));\n}\n$(_1a).html(_1c.join(\"\"));\n},renderGroup:function(_1e,_1f,_20,_21){\nvar _22=$.data(_1e,\"datagrid\");\nvar _23=_22.options;\nvar _24=$(_1e).datagrid(\"getColumnFields\",_21);\nvar _25=_23.frozenColumns&&_23.frozenColumns.length;\nif(_21){\nif(!(_23.rownumbers||_25)){\nreturn \"\";\n}\n}\nvar _26=[];\nvar css=_23.groupStyler.call(_1e,_20.value,_20.rows);\nvar cs=_27(css,\"datagrid-group\");\n_26.push(\"<div group-index=\"+_1f+\" \"+cs+\">\");\nif((_21&&(_23.rownumbers||_23.frozenColumns.length))||(!_21&&!(_23.rownumbers||_23.frozenColumns.length))){\n_26.push(\"<span class=\\\"datagrid-group-expander\\\">\");\n_26.push(\"<span class=\\\"datagrid-row-expander datagrid-row-collapse\\\">&nbsp;</span>\");\n_26.push(\"</span>\");\n}\nif((_21&&_25)||(!_21)){\n_26.push(\"<span class=\\\"datagrid-group-title\\\">\");\n_26.push(_23.groupFormatter.call(_1e,_20.value,_20.rows));\n_26.push(\"</span>\");\n}\n_26.push(\"</div>\");\n_26.push(\"<table class=\\\"datagrid-btable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\");\nvar _28=_20.startIndex;\nfor(var j=0;j<_20.rows.length;j++){\nvar css=_23.rowStyler?_23.rowStyler.call(_1e,_28,_20.rows[j]):\"\";\nvar _29=\"\";\nvar _2a=\"\";\nif(typeof css==\"string\"){\n_2a=css;\n}else{\nif(css){\n_29=css[\"class\"]||\"\";\n_2a=css[\"style\"]||\"\";\n}\n}\nvar cls=\"class=\\\"datagrid-row \"+(_28%2&&_23.striped?\"datagrid-row-alt \":\" \")+_29+\"\\\"\";\nvar _2b=_2a?\"style=\\\"\"+_2a+\"\\\"\":\"\";\nvar _2c=_22.rowIdPrefix+\"-\"+(_21?1:2)+\"-\"+_28;\n_26.push(\"<tr id=\\\"\"+_2c+\"\\\" datagrid-row-index=\\\"\"+_28+\"\\\" \"+cls+\" \"+_2b+\">\");\n_26.push(this.renderRow.call(this,_1e,_24,_21,_28,_20.rows[j]));\n_26.push(\"</tr>\");\n_28++;\n}\n_26.push(\"</tbody></table>\");\nreturn _26.join(\"\");\nfunction _27(css,cls){\nvar _2d=\"\";\nvar _2e=\"\";\nif(typeof css==\"string\"){\n_2e=css;\n}else{\nif(css){\n_2d=css[\"class\"]||\"\";\n_2e=css[\"style\"]||\"\";\n}\n}\nreturn \"class=\\\"\"+cls+(_2d?\" \"+_2d:\"\")+\"\\\" \"+\"style=\\\"\"+_2e+\"\\\"\";\n};\n},bindEvents:function(_2f){\nvar _30=$.data(_2f,\"datagrid\");\nvar dc=_30.dc;\nvar _31=dc.body1.add(dc.body2);\nvar _32=($.data(_31[0],\"events\")||$._data(_31[0],\"events\")).click[0].handler;\n_31._unbind(\"click\")._bind(\"click\",function(e){\nvar tt=$(e.target);\nvar _33=tt.closest(\"span.datagrid-row-expander\");\nif(_33.length){\nvar _34=_33.closest(\"div.datagrid-group\").attr(\"group-index\");\nif(_33.hasClass(\"datagrid-row-collapse\")){\n$(_2f).datagrid(\"collapseGroup\",_34);\n}else{\n$(_2f).datagrid(\"expandGroup\",_34);\n}\n}else{\n_32(e);\n}\ne.stopPropagation();\n});\n},onBeforeRender:function(_35,_36){\nvar _37=$.data(_35,\"datagrid\");\nvar _38=_37.options;\n_39();\nvar _3a=[];\nfor(var i=0;i<_36.length;i++){\nvar row=_36[i];\nvar _3b=_3c(row[_38.groupField]);\nif(!_3b){\n_3b={value:row[_38.groupField],rows:[row]};\n_3a.push(_3b);\n}else{\n_3b.rows.push(row);\n}\n}\nvar _3d=0;\nvar _3e=[];\nfor(var i=0;i<_3a.length;i++){\nvar _3b=_3a[i];\n_3b.startIndex=_3d;\n_3d+=_3b.rows.length;\n_3e=_3e.concat(_3b.rows);\n}\n_37.data.rows=_3e;\nthis.groups=_3a;\nvar _3f=this;\nsetTimeout(function(){\n_3f.bindEvents(_35);\n},0);\nfunction _3c(_40){\nfor(var i=0;i<_3a.length;i++){\nvar _41=_3a[i];\nif(_41.value==_40){\nreturn _41;\n}\n}\nreturn null;\n};\nfunction _39(){\nif(!$(\"#datagrid-group-style\").length){\n$(\"head\").append(\"<style id=\\\"datagrid-group-style\\\">\"+\".datagrid-group{height:\"+_38.groupHeight+\"px;overflow:hidden;font-weight:bold;border-bottom:1px solid #ccc;white-space:nowrap;word-break:normal;}\"+\".datagrid-group-title,.datagrid-group-expander{display:inline-block;vertical-align:bottom;height:100%;line-height:\"+_38.groupHeight+\"px;padding:0 4px;}\"+\".datagrid-group-title{position:relative;}\"+\".datagrid-group-expander{width:\"+_38.expanderWidth+\"px;text-align:center;padding:0}\"+\".datagrid-row-expander{margin:\"+Math.floor((_38.groupHeight-16)/2)+\"px 0;display:inline-block;width:16px;height:16px;cursor:pointer}\"+\"</style>\");\n}\n};\n},onAfterRender:function(_42){\n$.fn.datagrid.defaults.view.onAfterRender.call(this,_42);\nvar _43=this;\nvar _44=$.data(_42,\"datagrid\");\nvar _45=_44.options;\nif(!_44.onResizeColumn){\n_44.onResizeColumn=_45.onResizeColumn;\n}\nif(!_44.onResize){\n_44.onResize=_45.onResize;\n}\n_45.onResizeColumn=function(_46,_47){\n_43.resizeGroup(_42);\n_44.onResizeColumn.call(_42,_46,_47);\n};\n_45.onResize=function(_48,_49){\n_43.resizeGroup(_42);\n_44.onResize.call($(_42).datagrid(\"getPanel\")[0],_48,_49);\n};\n_43.resizeGroup(_42);\n}});\n$.extend($.fn.datagrid.methods,{groups:function(jq){\nreturn jq.datagrid(\"options\").view.groups;\n},expandGroup:function(jq,_4a){\nreturn jq.each(function(){\nvar _4b=$(this).datagrid(\"options\");\nvar _4c=$.data(this,\"datagrid\").dc.view;\nvar _4d=_4c.find(_4a!=undefined?\"div.datagrid-group[group-index=\\\"\"+_4a+\"\\\"]\":\"div.datagrid-group\");\nvar _4e=_4d.find(\"span.datagrid-row-expander\");\nif(_4e.hasClass(\"datagrid-row-expand\")){\n_4e.removeClass(\"datagrid-row-expand\").addClass(\"datagrid-row-collapse\");\n_4d.next(\"table\").show();\n}\n$(this).datagrid(\"fixRowHeight\");\nif(_4b.onExpandGroup){\n_4b.onExpandGroup.call(this,_4a);\n}\n});\n},collapseGroup:function(jq,_4f){\nreturn jq.each(function(){\nvar _50=$(this).datagrid(\"options\");\nvar _51=$.data(this,\"datagrid\").dc.view;\nvar _52=_51.find(_4f!=undefined?\"div.datagrid-group[group-index=\\\"\"+_4f+\"\\\"]\":\"div.datagrid-group\");\nvar _53=_52.find(\"span.datagrid-row-expander\");\nif(_53.hasClass(\"datagrid-row-collapse\")){\n_53.removeClass(\"datagrid-row-collapse\").addClass(\"datagrid-row-expand\");\n_52.next(\"table\").hide();\n}\n$(this).datagrid(\"fixRowHeight\");\nif(_50.onCollapseGroup){\n_50.onCollapseGroup.call(this,_4f);\n}\n});\n},scrollToGroup:function(jq,_54){\nreturn jq.each(function(){\nvar _55=$.data(this,\"datagrid\");\nvar dc=_55.dc;\nvar _56=dc.body2.children(\"div.datagrid-group[group-index=\\\"\"+_54+\"\\\"]\");\nif(_56.length){\nvar _57=_56.outerHeight();\nvar _58=dc.view2.children(\"div.datagrid-header\")._outerHeight();\nvar _59=dc.body2.outerHeight(true)-dc.body2.outerHeight();\nvar top=_56.position().top-_58-_59;\nif(top<0){\ndc.body2.scrollTop(dc.body2.scrollTop()+top);\n}else{\nif(top+_57>dc.body2.height()-18){\ndc.body2.scrollTop(dc.body2.scrollTop()+top+_57-dc.body2.height()+18);\n}\n}\n}\n});\n}});\n$.extend(_18,{refreshGroupTitle:function(_5a,_5b){\nvar _5c=$.data(_5a,\"datagrid\");\nvar _5d=_5c.options;\nvar dc=_5c.dc;\nvar _5e=this.groups[_5b];\nvar _5f=dc.body1.add(dc.body2).children(\"div.datagrid-group[group-index=\"+_5b+\"]\").find(\"span.datagrid-group-title\");\n_5f.html(_5d.groupFormatter.call(_5a,_5e.value,_5e.rows));\n},resizeGroup:function(_60,_61){\nvar _62=$.data(_60,\"datagrid\");\nvar dc=_62.dc;\nvar ht=dc.header2.find(\"table\");\nvar fr=ht.find(\"tr.datagrid-filter-row\").hide();\nvar ww=dc.body2.children(\"table.datagrid-btable:first\").width();\nif(_61==undefined){\nvar _63=dc.body2.children(\"div.datagrid-group\");\n}else{\nvar _63=dc.body2.children(\"div.datagrid-group[group-index=\"+_61+\"]\");\n}\n_63._outerWidth(ww);\nvar _64=_62.options;\nif(_64.frozenColumns&&_64.frozenColumns.length){\nvar _65=dc.view1.width()-_64.expanderWidth;\nvar _66=dc.view1.css(\"direction\").toLowerCase()==\"rtl\";\n_63.find(\".datagrid-group-title\").css(_66?\"right\":\"left\",-_65+\"px\");\n}\nif(fr.length){\nif(_64.showFilterBar){\nfr.show();\n}\n}\n},insertRow:function(_67,_68,row){\nvar _69=$.data(_67,\"datagrid\");\nvar _6a=_69.options;\nvar dc=_69.dc;\nvar _6b=null;\nvar _6c;\nif(!_69.data.rows.length){\n$(_67).datagrid(\"loadData\",[row]);\nreturn;\n}\nfor(var i=0;i<this.groups.length;i++){\nif(this.groups[i].value==row[_6a.groupField]){\n_6b=this.groups[i];\n_6c=i;\nbreak;\n}\n}\nif(_6b){\nif(_68==undefined||_68==null){\n_68=_69.data.rows.length;\n}\nif(_68<_6b.startIndex){\n_68=_6b.startIndex;\n}else{\nif(_68>_6b.startIndex+_6b.rows.length){\n_68=_6b.startIndex+_6b.rows.length;\n}\n}\n$.fn.datagrid.defaults.view.insertRow.call(this,_67,_68,row);\nif(_68>=_6b.startIndex+_6b.rows.length){\n_6d(_68,true);\n_6d(_68,false);\n}\n_6b.rows.splice(_68-_6b.startIndex,0,row);\n}else{\n_6b={value:row[_6a.groupField],rows:[row],startIndex:_69.data.rows.length};\n_6c=this.groups.length;\ndc.body1.append(this.renderGroup.call(this,_67,_6c,_6b,true));\ndc.body2.append(this.renderGroup.call(this,_67,_6c,_6b,false));\nthis.groups.push(_6b);\n_69.data.rows.push(row);\n}\nthis.setGroupIndex(_67);\nthis.refreshGroupTitle(_67,_6c);\nthis.resizeGroup(_67);\nfunction _6d(_6e,_6f){\nvar _70=_6f?1:2;\nvar _71=_6a.finder.getTr(_67,_6e-1,\"body\",_70);\nvar tr=_6a.finder.getTr(_67,_6e,\"body\",_70);\ntr.insertAfter(_71);\n};\n},updateRow:function(_72,_73,row){\nvar _74=$.data(_72,\"datagrid\").options;\n$.fn.datagrid.defaults.view.updateRow.call(this,_72,_73,row);\nvar tb=_74.finder.getTr(_72,_73,\"body\",2).closest(\"table.datagrid-btable\");\nvar _75=parseInt(tb.prev().attr(\"group-index\"));\nthis.refreshGroupTitle(_72,_75);\n},deleteRow:function(_76,_77){\nvar _78=$.data(_76,\"datagrid\");\nvar _79=_78.options;\nvar dc=_78.dc;\nvar _7a=dc.body1.add(dc.body2);\nvar tb=_79.finder.getTr(_76,_77,\"body\",2).closest(\"table.datagrid-btable\");\nvar _7b=parseInt(tb.prev().attr(\"group-index\"));\n$.fn.datagrid.defaults.view.deleteRow.call(this,_76,_77);\nvar _7c=this.groups[_7b];\nif(_7c.rows.length>1){\n_7c.rows.splice(_77-_7c.startIndex,1);\nthis.refreshGroupTitle(_76,_7b);\n}else{\n_7a.children(\"div.datagrid-group[group-index=\"+_7b+\"]\").remove();\nfor(var i=_7b+1;i<this.groups.length;i++){\n_7a.children(\"div.datagrid-group[group-index=\"+i+\"]\").attr(\"group-index\",i-1);\n}\nthis.groups.splice(_7b,1);\n}\nthis.setGroupIndex(_76);\n},setGroupIndex:function(_7d){\nvar _7e=0;\nfor(var i=0;i<this.groups.length;i++){\nvar _7f=this.groups[i];\n_7f.startIndex=_7e;\n_7e+=_7f.rows.length;\n}\n}});\n$.fn.propertygrid.defaults=$.extend({},$.fn.datagrid.defaults,{groupHeight:28,expanderWidth:20,singleSelect:true,remoteSort:false,fitColumns:true,loadMsg:\"\",frozenColumns:[[{field:\"f\",width:20,resizable:false}]],columns:[[{field:\"name\",title:\"Name\",width:100,sortable:true},{field:\"value\",title:\"Value\",width:100,resizable:false}]],showGroup:false,groupView:_18,groupField:\"group\",groupStyler:function(_80,_81){\nreturn \"\";\n},groupFormatter:function(_82,_83){\nreturn _82;\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.radiobutton.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nvar _1=1;\nfunction _2(_3){\nvar _4=$(\"<span class=\\\"radiobutton inputbox\\\">\"+\"<span class=\\\"radiobutton-inner\\\" style=\\\"display:none\\\"></span>\"+\"<input type=\\\"radio\\\" class=\\\"radiobutton-value\\\">\"+\"</span>\").insertAfter(_3);\nvar t=$(_3);\nt.addClass(\"radiobutton-f\").hide();\nvar _5=t.attr(\"name\");\nif(_5){\nt.removeAttr(\"name\").attr(\"radiobuttonName\",_5);\n_4.find(\".radiobutton-value\").attr(\"name\",_5);\n}\nreturn _4;\n};\nfunction _6(_7){\nvar _8=$.data(_7,\"radiobutton\");\nvar _9=_8.options;\nvar _a=_8.radiobutton;\nvar _b=\"_easyui_radiobutton_\"+(++_1);\nvar _c=_a.find(\".radiobutton-value\").attr(\"id\",_b);\n_c._unbind(\".radiobutton\")._bind(\"change.radiobutton\",function(e){\nreturn false;\n});\nif(_9.label){\nif(typeof _9.label==\"object\"){\n_8.label=$(_9.label);\n_8.label.attr(\"for\",_b);\n}else{\n$(_8.label).remove();\n_8.label=$(\"<label class=\\\"textbox-label\\\"></label>\").html(_9.label);\n_8.label.css(\"textAlign\",_9.labelAlign).attr(\"for\",_b);\nif(_9.labelPosition==\"after\"){\n_8.label.insertAfter(_a);\n}else{\n_8.label.insertBefore(_7);\n}\n_8.label.removeClass(\"textbox-label-left textbox-label-right textbox-label-top\");\n_8.label.addClass(\"textbox-label-\"+_9.labelPosition);\n}\n}else{\n$(_8.label).remove();\n}\n$(_7).radiobutton(\"setValue\",_9.value);\n_d(_7,_9.checked);\n_e(_7,_9.readonly);\n_f(_7,_9.disabled);\n};\nfunction _10(_11){\nvar _12=$.data(_11,\"radiobutton\");\nvar _13=_12.options;\nvar _14=_12.radiobutton;\n_14._unbind(\".radiobutton\")._bind(\"click.radiobutton\",function(){\nif(!_13.disabled&&!_13.readonly){\n_d(_11,true);\n}\n});\n};\nfunction _15(_16){\nvar _17=$.data(_16,\"radiobutton\");\nvar _18=_17.options;\nvar _19=_17.radiobutton;\n_19._size(_18,_19.parent());\nif(_18.label&&_18.labelPosition){\nif(_18.labelPosition==\"top\"){\n_17.label._size({width:_18.labelWidth},_19);\n}else{\n_17.label._size({width:_18.labelWidth,height:_19.outerHeight()},_19);\n_17.label.css(\"lineHeight\",_19.outerHeight()+\"px\");\n}\n}\n};\nfunction _d(_1a,_1b){\nif(_1b){\nvar f=$(_1a).closest(\"form\");\nvar _1c=$(_1a).attr(\"radiobuttonName\");\nf.find(\".radiobutton-f[radiobuttonName=\\\"\"+_1c+\"\\\"]\").each(function(){\nif(this!=_1a){\n_1d(this,false);\n}\n});\n_1d(_1a,true);\n}else{\n_1d(_1a,false);\n}\nfunction _1d(b,c){\nvar _1e=$(b).data(\"radiobutton\");\nvar _1f=_1e.options;\nvar _20=_1e.radiobutton;\n_20.find(\".radiobutton-inner\").css(\"display\",c?\"\":\"none\");\n_20.find(\".radiobutton-value\")._propAttr(\"checked\",c);\nif(c){\n_20.addClass(\"radiobutton-checked\");\n$(_1e.label).addClass(\"textbox-label-checked\");\n}else{\n_20.removeClass(\"radiobutton-checked\");\n$(_1e.label).removeClass(\"textbox-label-checked\");\n}\nif(_1f.checked!=c){\n_1f.checked=c;\n_1f.onChange.call($(b)[0],c);\n$(b).closest(\"form\").trigger(\"_change\",[$(b)[0]]);\n}\n};\n};\nfunction _f(_21,_22){\nvar _23=$.data(_21,\"radiobutton\");\nvar _24=_23.options;\nvar _25=_23.radiobutton;\nvar rv=_25.find(\".radiobutton-value\");\n_24.disabled=_22;\nif(_22){\n$(_21).add(rv)._propAttr(\"disabled\",true);\n_25.addClass(\"radiobutton-disabled\");\n$(_23.label).addClass(\"textbox-label-disabled\");\n}else{\n$(_21).add(rv)._propAttr(\"disabled\",false);\n_25.removeClass(\"radiobutton-disabled\");\n$(_23.label).removeClass(\"textbox-label-disabled\");\n}\n};\nfunction _e(_26,_27){\nvar _28=$.data(_26,\"radiobutton\");\nvar _29=_28.options;\n_29.readonly=_27==undefined?true:_27;\nif(_29.readonly){\n_28.radiobutton.addClass(\"radiobutton-readonly\");\n$(_28.label).addClass(\"textbox-label-readonly\");\n}else{\n_28.radiobutton.removeClass(\"radiobutton-readonly\");\n$(_28.label).removeClass(\"textbox-label-readonly\");\n}\n};\n$.fn.radiobutton=function(_2a,_2b){\nif(typeof _2a==\"string\"){\nreturn $.fn.radiobutton.methods[_2a](this,_2b);\n}\n_2a=_2a||{};\nreturn this.each(function(){\nvar _2c=$.data(this,\"radiobutton\");\nif(_2c){\n$.extend(_2c.options,_2a);\n}else{\n_2c=$.data(this,\"radiobutton\",{options:$.extend({},$.fn.radiobutton.defaults,$.fn.radiobutton.parseOptions(this),_2a),radiobutton:_2(this)});\n}\n_2c.options.originalChecked=_2c.options.checked;\n_6(this);\n_10(this);\n_15(this);\n});\n};\n$.fn.radiobutton.methods={options:function(jq){\nvar _2d=jq.data(\"radiobutton\");\nreturn $.extend(_2d.options,{value:_2d.radiobutton.find(\".radiobutton-value\").val()});\n},setValue:function(jq,_2e){\nreturn jq.each(function(){\n$(this).val(_2e);\n$.data(this,\"radiobutton\").radiobutton.find(\".radiobutton-value\").val(_2e);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_f(this,false);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_f(this,true);\n});\n},readonly:function(jq,_2f){\nreturn jq.each(function(){\n_e(this,_2f);\n});\n},check:function(jq){\nreturn jq.each(function(){\n_d(this,true);\n});\n},uncheck:function(jq){\nreturn jq.each(function(){\n_d(this,false);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_d(this,false);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _30=$(this).radiobutton(\"options\");\n_d(this,_30.originalChecked);\n});\n}};\n$.fn.radiobutton.parseOptions=function(_31){\nvar t=$(_31);\nreturn $.extend({},$.parser.parseOptions(_31,[\"label\",\"labelPosition\",\"labelAlign\",{labelWidth:\"number\"}]),{value:(t.val()||undefined),checked:(t.attr(\"checked\")?true:undefined),disabled:(t.attr(\"disabled\")?true:undefined),readonly:(t.attr(\"readonly\")?true:undefined)});\n};\n$.fn.radiobutton.defaults={width:20,height:20,value:null,disabled:false,readonly:false,checked:false,label:null,labelWidth:\"auto\",labelPosition:\"before\",labelAlign:\"left\",onChange:function(_32){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.resizable.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(e){\nvar _2=e.data;\nvar _3=$.data(_2.target,\"resizable\").options;\nif(_2.dir.indexOf(\"e\")!=-1){\nvar _4=_2.startWidth+e.pageX-_2.startX;\n_4=Math.min(Math.max(_4,_3.minWidth),_3.maxWidth);\n_2.width=_4;\n}\nif(_2.dir.indexOf(\"s\")!=-1){\nvar _5=_2.startHeight+e.pageY-_2.startY;\n_5=Math.min(Math.max(_5,_3.minHeight),_3.maxHeight);\n_2.height=_5;\n}\nif(_2.dir.indexOf(\"w\")!=-1){\nvar _4=_2.startWidth-e.pageX+_2.startX;\n_4=Math.min(Math.max(_4,_3.minWidth),_3.maxWidth);\n_2.width=_4;\n_2.left=_2.startLeft+_2.startWidth-_2.width;\n}\nif(_2.dir.indexOf(\"n\")!=-1){\nvar _5=_2.startHeight-e.pageY+_2.startY;\n_5=Math.min(Math.max(_5,_3.minHeight),_3.maxHeight);\n_2.height=_5;\n_2.top=_2.startTop+_2.startHeight-_2.height;\n}\n};\nfunction _6(e){\nvar _7=e.data;\nvar t=$(_7.target);\nt.css({left:_7.left,top:_7.top});\nif(t.outerWidth()!=_7.width){\nt._outerWidth(_7.width);\n}\nif(t.outerHeight()!=_7.height){\nt._outerHeight(_7.height);\n}\n};\nfunction _8(e){\n$.fn.resizable.isResizing=true;\n$.data(e.data.target,\"resizable\").options.onStartResize.call(e.data.target,e);\nreturn false;\n};\nfunction _9(e){\n_1(e);\nif($.data(e.data.target,\"resizable\").options.onResize.call(e.data.target,e)!=false){\n_6(e);\n}\nreturn false;\n};\nfunction _a(e){\n$.fn.resizable.isResizing=false;\n_1(e,true);\n_6(e);\n$.data(e.data.target,\"resizable\").options.onStopResize.call(e.data.target,e);\n$(document)._unbind(\".resizable\");\n$(\"body\").css(\"cursor\",\"\");\nreturn false;\n};\nfunction _b(e){\nvar _c=$(e.data.target).resizable(\"options\");\nvar tt=$(e.data.target);\nvar _d=\"\";\nvar _e=tt.offset();\nvar _f=tt.outerWidth();\nvar _10=tt.outerHeight();\nvar _11=_c.edge;\nif(e.pageY>_e.top&&e.pageY<_e.top+_11){\n_d+=\"n\";\n}else{\nif(e.pageY<_e.top+_10&&e.pageY>_e.top+_10-_11){\n_d+=\"s\";\n}\n}\nif(e.pageX>_e.left&&e.pageX<_e.left+_11){\n_d+=\"w\";\n}else{\nif(e.pageX<_e.left+_f&&e.pageX>_e.left+_f-_11){\n_d+=\"e\";\n}\n}\nvar _12=_c.handles.split(\",\");\n_12=$.map(_12,function(h){\nreturn $.trim(h).toLowerCase();\n});\nif($.inArray(\"all\",_12)>=0||$.inArray(_d,_12)>=0){\nreturn _d;\n}\nfor(var i=0;i<_d.length;i++){\nvar _13=$.inArray(_d.substr(i,1),_12);\nif(_13>=0){\nreturn _12[_13];\n}\n}\nreturn \"\";\n};\n$.fn.resizable=function(_14,_15){\nif(typeof _14==\"string\"){\nreturn $.fn.resizable.methods[_14](this,_15);\n}\nreturn this.each(function(){\nvar _16=null;\nvar _17=$.data(this,\"resizable\");\nif(_17){\n$(this)._unbind(\".resizable\");\n_16=$.extend(_17.options,_14||{});\n}else{\n_16=$.extend({},$.fn.resizable.defaults,$.fn.resizable.parseOptions(this),_14||{});\n$.data(this,\"resizable\",{options:_16});\n}\nif(_16.disabled==true){\nreturn;\n}\n$(this)._bind(\"mousemove.resizable\",{target:this},function(e){\nif($.fn.resizable.isResizing){\nreturn;\n}\nvar dir=_b(e);\n$(e.data.target).css(\"cursor\",dir?dir+\"-resize\":\"\");\n})._bind(\"mouseleave.resizable\",{target:this},function(e){\n$(e.data.target).css(\"cursor\",\"\");\n})._bind(\"mousedown.resizable\",{target:this},function(e){\nvar dir=_b(e);\nif(dir==\"\"){\nreturn;\n}\nfunction _18(css){\nvar val=parseInt($(e.data.target).css(css));\nif(isNaN(val)){\nreturn 0;\n}else{\nreturn val;\n}\n};\nvar _19={target:e.data.target,dir:dir,startLeft:_18(\"left\"),startTop:_18(\"top\"),left:_18(\"left\"),top:_18(\"top\"),startX:e.pageX,startY:e.pageY,startWidth:$(e.data.target).outerWidth(),startHeight:$(e.data.target).outerHeight(),width:$(e.data.target).outerWidth(),height:$(e.data.target).outerHeight(),deltaWidth:$(e.data.target).outerWidth()-$(e.data.target).width(),deltaHeight:$(e.data.target).outerHeight()-$(e.data.target).height()};\n$(document)._bind(\"mousedown.resizable\",_19,_8);\n$(document)._bind(\"mousemove.resizable\",_19,_9);\n$(document)._bind(\"mouseup.resizable\",_19,_a);\n$(\"body\").css(\"cursor\",dir+\"-resize\");\n});\n});\n};\n$.fn.resizable.methods={options:function(jq){\nreturn $.data(jq[0],\"resizable\").options;\n},enable:function(jq){\nreturn jq.each(function(){\n$(this).resizable({disabled:false});\n});\n},disable:function(jq){\nreturn jq.each(function(){\n$(this).resizable({disabled:true});\n});\n}};\n$.fn.resizable.parseOptions=function(_1a){\nvar t=$(_1a);\nreturn $.extend({},$.parser.parseOptions(_1a,[\"handles\",{minWidth:\"number\",minHeight:\"number\",maxWidth:\"number\",maxHeight:\"number\",edge:\"number\"}]),{disabled:(t.attr(\"disabled\")?true:undefined)});\n};\n$.fn.resizable.defaults={disabled:false,handles:\"n, e, s, w, ne, se, sw, nw, all\",minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000,edge:5,onStartResize:function(e){\n},onResize:function(e){\n},onStopResize:function(e){\n}};\n$.fn.resizable.isResizing=false;\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.searchbox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"searchbox\");\nvar _4=_3.options;\nvar _5=$.extend(true,[],_4.icons);\n_5.push({iconCls:\"searchbox-button\",handler:function(e){\nvar t=$(e.data.target);\nvar _6=t.searchbox(\"options\");\n_6.searcher.call(e.data.target,t.searchbox(\"getValue\"),t.searchbox(\"getName\"));\n}});\n_7();\nvar _8=_9();\n$(_2).addClass(\"searchbox-f\").textbox($.extend({},_4,{icons:_5,buttonText:(_8?_8.text:\"\")}));\n$(_2).attr(\"searchboxName\",$(_2).attr(\"textboxName\"));\n_3.searchbox=$(_2).next();\n_3.searchbox.addClass(\"searchbox\");\n_a(_8);\nfunction _7(){\nif(_4.menu){\n_3.menu=$(_4.menu).menu();\nvar _b=_3.menu.menu(\"options\");\nvar _c=_b.onClick;\n_b.onClick=function(_d){\n_a(_d);\n_c.call(this,_d);\n};\n}else{\nif(_3.menu){\n_3.menu.menu(\"destroy\");\n}\n_3.menu=null;\n}\n};\nfunction _9(){\nif(_3.menu){\nvar _e=_3.menu.children(\"div.menu-item:first\");\n_3.menu.children(\"div.menu-item\").each(function(){\nvar _f=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr(\"selected\")?true:undefined)});\nif(_f.selected){\n_e=$(this);\nreturn false;\n}\n});\nreturn _3.menu.menu(\"getItem\",_e[0]);\n}else{\nreturn null;\n}\n};\nfunction _a(_10){\nif(!_10){\nreturn;\n}\n$(_2).textbox(\"button\").menubutton({text:_10.text,iconCls:(_10.iconCls||null),menu:_3.menu,menuAlign:_4.buttonAlign,plain:false});\n_3.searchbox.find(\"input.textbox-value\").attr(\"name\",_10.name||_10.text);\n$(_2).searchbox(\"resize\");\n};\n};\n$.fn.searchbox=function(_11,_12){\nif(typeof _11==\"string\"){\nvar _13=$.fn.searchbox.methods[_11];\nif(_13){\nreturn _13(this,_12);\n}else{\nreturn this.textbox(_11,_12);\n}\n}\n_11=_11||{};\nreturn this.each(function(){\nvar _14=$.data(this,\"searchbox\");\nif(_14){\n$.extend(_14.options,_11);\n}else{\n$.data(this,\"searchbox\",{options:$.extend({},$.fn.searchbox.defaults,$.fn.searchbox.parseOptions(this),_11)});\n}\n_1(this);\n});\n};\n$.fn.searchbox.methods={options:function(jq){\nvar _15=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"searchbox\").options,{width:_15.width,value:_15.value,originalValue:_15.originalValue,disabled:_15.disabled,readonly:_15.readonly});\n},menu:function(jq){\nreturn $.data(jq[0],\"searchbox\").menu;\n},getName:function(jq){\nreturn $.data(jq[0],\"searchbox\").searchbox.find(\"input.textbox-value\").attr(\"name\");\n},selectName:function(jq,_16){\nreturn jq.each(function(){\nvar _17=$.data(this,\"searchbox\").menu;\nif(_17){\n_17.children(\"div.menu-item\").each(function(){\nvar _18=_17.menu(\"getItem\",this);\nif(_18.name==_16){\n$(this).trigger(\"click\");\nreturn false;\n}\n});\n}\n});\n},destroy:function(jq){\nreturn jq.each(function(){\nvar _19=$(this).searchbox(\"menu\");\nif(_19){\n_19.menu(\"destroy\");\n}\n$(this).textbox(\"destroy\");\n});\n}};\n$.fn.searchbox.parseOptions=function(_1a){\nvar t=$(_1a);\nreturn $.extend({},$.fn.textbox.parseOptions(_1a),$.parser.parseOptions(_1a,[\"menu\"]),{searcher:(t.attr(\"searcher\")?eval(t.attr(\"searcher\")):undefined)});\n};\n$.fn.searchbox.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:$.extend({},$.fn.textbox.defaults.inputEvents,{keydown:function(e){\nif(e.keyCode==13){\ne.preventDefault();\nvar t=$(e.data.target);\nvar _1b=t.searchbox(\"options\");\nt.searchbox(\"setValue\",$(this).val());\n_1b.searcher.call(e.data.target,t.searchbox(\"getValue\"),t.searchbox(\"getName\"));\nreturn false;\n}\n}}),buttonAlign:\"left\",menu:null,searcher:function(_1c,_1d){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.sidemenu.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nvar _1=1;\nfunction _2(_3){\n$(_3).addClass(\"sidemenu\");\n};\nfunction _4(_5,_6){\nvar _7=$(_5).sidemenu(\"options\");\nif(_6){\n$.extend(_7,{width:_6.width,height:_6.height});\n}\n$(_5)._size(_7);\n$(_5).find(\".accordion\").accordion(\"resize\");\n};\nfunction _8(_9,_a,_b){\nvar _c=$(_9).sidemenu(\"options\");\nvar tt=$(\"<ul class=\\\"sidemenu-tree\\\"></ul>\").appendTo(_a);\ntt.tree({data:_b,animate:_c.animate,onBeforeSelect:function(_d){\nif(_d.children){\nreturn false;\n}\n},onSelect:function(_e){\n_12(_9,_e.id,true);\n},onExpand:function(_f){\n_25(_9,_f);\n},onCollapse:function(_10){\n_25(_9,_10);\n},onClick:function(_11){\nif(_11.children){\nif(_11.state==\"open\"){\n$(_11.target).addClass(\"tree-node-nonleaf-collapsed\");\n}else{\n$(_11.target).removeClass(\"tree-node-nonleaf-collapsed\");\n}\n$(this).tree(\"toggle\",_11.target);\n}\n}});\ntt._unbind(\".sidemenu\")._bind(\"mouseleave.sidemenu\",function(){\n$(_a).trigger(\"mouseleave\");\n});\n_12(_9,_c.selectedItemId);\n};\nfunction _13(_14,_15,_16){\nvar _17=$(_14).sidemenu(\"options\");\n$(_15).tooltip({content:$(\"<div></div>\"),position:_17.floatMenuPosition,valign:\"top\",data:_16,onUpdate:function(_18){\nvar _19=$(this).tooltip(\"options\");\nvar _1a=_19.data;\n_18.accordion({width:_17.floatMenuWidth,multiple:false}).accordion(\"add\",{title:_1a.text,collapsed:false,collapsible:false});\n_8(_14,_18.accordion(\"panels\")[0],_1a.children);\n},onShow:function(){\nvar t=$(this);\nvar tip=t.tooltip(\"tip\").addClass(\"sidemenu-tooltip\");\ntip.children(\".tooltip-content\").addClass(\"sidemenu\");\ntip.find(\".accordion\").accordion(\"resize\");\ntip.add(tip.find(\"ul.tree\"))._unbind(\".sidemenu\")._bind(\"mouseover.sidemenu\",function(){\nt.tooltip(\"show\");\n})._bind(\"mouseleave.sidemenu\",function(){\nt.tooltip(\"hide\");\n});\nt.tooltip(\"reposition\");\n},onPosition:function(_1b,top){\nvar tip=$(this).tooltip(\"tip\");\nif(!_17.collapsed){\ntip.css({left:-999999});\n}else{\nif(top+tip.outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){\ntop=$(window)._outerHeight()+$(document).scrollTop()-tip.outerHeight();\ntip.css(\"top\",top);\n}\n}\n}});\n};\nfunction _1c(_1d,_1e){\n$(_1d).find(\".sidemenu-tree\").each(function(){\n_1e($(this));\n});\n$(_1d).find(\".tooltip-f\").each(function(){\nvar tip=$(this).tooltip(\"tip\");\nif(tip){\ntip.find(\".sidemenu-tree\").each(function(){\n_1e($(this));\n});\n$(this).tooltip(\"reposition\");\n}\n});\n};\nfunction _12(_1f,_20,_21){\nvar _22=null;\nvar _23=$(_1f).sidemenu(\"options\");\n_1c(_1f,function(t){\nt.find(\"div.tree-node-selected\").removeClass(\"tree-node-selected\");\nvar _24=t.tree(\"find\",_20);\nif(_24){\n$(_24.target).addClass(\"tree-node-selected\");\n_23.selectedItemId=_24.id;\nt.trigger(\"mouseleave.sidemenu\");\n_22=_24;\n}\n});\nif(_21&&_22){\n_23.onSelect.call(_1f,_22);\n}\n};\nfunction _25(_26,_27){\n_1c(_26,function(t){\nvar _28=t.tree(\"find\",_27.id);\nif(_28){\nvar _29=t.tree(\"options\");\nvar _2a=_29.animate;\n_29.animate=false;\nt.tree(_27.state==\"open\"?\"expand\":\"collapse\",_28.target);\n_29.animate=_2a;\n}\n});\n};\nfunction _2b(_2c){\nvar _2d=$(_2c).sidemenu(\"options\");\n$(_2c).empty();\nif(_2d.data){\n$.easyui.forEach(_2d.data,true,function(_2e){\nif(!_2e.id){\n_2e.id=\"_easyui_sidemenu_\"+(_1++);\n}\nif(!_2e.iconCls){\n_2e.iconCls=\"sidemenu-default-icon\";\n}\nif(_2e.children){\n_2e.nodeCls=\"tree-node-nonleaf\";\nif(!_2e.state){\n_2e.state=\"closed\";\n}\nif(_2e.state==\"open\"){\n_2e.nodeCls=\"tree-node-nonleaf\";\n}else{\n_2e.nodeCls=\"tree-node-nonleaf tree-node-nonleaf-collapsed\";\n}\n}\n});\nvar acc=$(\"<div></div>\").appendTo(_2c);\nacc.accordion({fit:_2d.height==\"auto\"?false:true,border:_2d.border,multiple:_2d.multiple});\nvar _2f=_2d.data;\nfor(var i=0;i<_2f.length;i++){\nacc.accordion(\"add\",{title:_2f[i].text,selected:_2f[i].state==\"open\",iconCls:_2f[i].iconCls,onBeforeExpand:function(){\nreturn !_2d.collapsed;\n}});\nvar ap=acc.accordion(\"panels\")[i];\n_8(_2c,ap,_2f[i].children);\n_13(_2c,ap.panel(\"header\"),_2f[i]);\n}\n}\n};\nfunction _30(_31,_32){\nvar _33=$(_31).sidemenu(\"options\");\n_33.collapsed=_32;\nvar acc=$(_31).find(\".accordion\");\nvar _34=acc.accordion(\"panels\");\nacc.accordion(\"options\").animate=false;\nif(_33.collapsed){\n$(_31).addClass(\"sidemenu-collapsed\");\nfor(var i=0;i<_34.length;i++){\nvar _35=_34[i];\nif(_35.panel(\"options\").collapsed){\n_33.data[i].state=\"closed\";\n}else{\n_33.data[i].state=\"open\";\nacc.accordion(\"unselect\",i);\n}\nvar _36=_35.panel(\"header\");\n_36.find(\".panel-title\").html(\"\");\n_36.find(\".panel-tool\").hide();\n}\n}else{\n$(_31).removeClass(\"sidemenu-collapsed\");\nfor(var i=0;i<_34.length;i++){\nvar _35=_34[i];\nif(_33.data[i].state==\"open\"){\nacc.accordion(\"select\",i);\n}\nvar _36=_35.panel(\"header\");\n_36.find(\".panel-title\").html(_35.panel(\"options\").title);\n_36.find(\".panel-tool\").show();\n}\n}\nacc.accordion(\"options\").animate=_33.animate;\n};\nfunction _37(_38){\n$(_38).find(\".tooltip-f\").each(function(){\n$(this).tooltip(\"destroy\");\n});\n$(_38).remove();\n};\n$.fn.sidemenu=function(_39,_3a){\nif(typeof _39==\"string\"){\nvar _3b=$.fn.sidemenu.methods[_39];\nreturn _3b(this,_3a);\n}\n_39=_39||{};\nreturn this.each(function(){\nvar _3c=$.data(this,\"sidemenu\");\nif(_3c){\n$.extend(_3c.options,_39);\n}else{\n_3c=$.data(this,\"sidemenu\",{options:$.extend({},$.fn.sidemenu.defaults,$.fn.sidemenu.parseOptions(this),_39)});\n_2(this);\n}\n_4(this);\n_2b(this);\n_30(this,_3c.options.collapsed);\n});\n};\n$.fn.sidemenu.methods={options:function(jq){\nreturn jq.data(\"sidemenu\").options;\n},resize:function(jq,_3d){\nreturn jq.each(function(){\n_4(this,_3d);\n});\n},collapse:function(jq){\nreturn jq.each(function(){\n_30(this,true);\n});\n},expand:function(jq){\nreturn jq.each(function(){\n_30(this,false);\n});\n},destroy:function(jq){\nreturn jq.each(function(){\n_37(this);\n});\n}};\n$.fn.sidemenu.parseOptions=function(_3e){\nvar t=$(_3e);\nreturn $.extend({},$.parser.parseOptions(_3e,[\"width\",\"height\"]));\n};\n$.fn.sidemenu.defaults={width:200,height:\"auto\",border:true,animate:true,multiple:true,collapsed:false,data:null,floatMenuWidth:200,floatMenuPosition:\"right\",onSelect:function(_3f){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.slider.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$(\"<div class=\\\"slider\\\">\"+\"<div class=\\\"slider-inner\\\">\"+\"<a href=\\\"javascript:;\\\" class=\\\"slider-handle\\\"></a>\"+\"<span class=\\\"slider-tip\\\"></span>\"+\"</div>\"+\"<div class=\\\"slider-rule\\\"></div>\"+\"<div class=\\\"slider-rulelabel\\\"></div>\"+\"<div style=\\\"clear:both\\\"></div>\"+\"<input type=\\\"hidden\\\" class=\\\"slider-value\\\">\"+\"</div>\").insertAfter(_2);\nvar t=$(_2);\nt.addClass(\"slider-f\").hide();\nvar _4=t.attr(\"name\");\nif(_4){\n_3.find(\"input.slider-value\").attr(\"name\",_4);\nt.removeAttr(\"name\").attr(\"sliderName\",_4);\n}\n_3._bind(\"_resize\",function(e,_5){\nif($(this).hasClass(\"easyui-fluid\")||_5){\n_6(_2);\n}\nreturn false;\n});\nreturn _3;\n};\nfunction _6(_7,_8){\nvar _9=$.data(_7,\"slider\");\nvar _a=_9.options;\nvar _b=_9.slider;\nif(_8){\nif(_8.width){\n_a.width=_8.width;\n}\nif(_8.height){\n_a.height=_8.height;\n}\n}\n_b._size(_a);\nif(_a.mode==\"h\"){\n_b.css(\"height\",\"\");\n_b.children(\"div\").css(\"height\",\"\");\n}else{\n_b.css(\"width\",\"\");\n_b.children(\"div\").css(\"width\",\"\");\n_b.children(\"div.slider-rule,div.slider-rulelabel,div.slider-inner\")._outerHeight(_b._outerHeight());\n}\n_c(_7);\n};\nfunction _d(_e){\nvar _f=$.data(_e,\"slider\");\nvar _10=_f.options;\nvar _11=_f.slider;\nvar aa=_10.mode==\"h\"?_10.rule:_10.rule.slice(0).reverse();\nif(_10.reversed){\naa=aa.slice(0).reverse();\n}\n_12(aa);\nfunction _12(aa){\nvar _13=_11.find(\"div.slider-rule\");\nvar _14=_11.find(\"div.slider-rulelabel\");\n_13.empty();\n_14.empty();\nfor(var i=0;i<aa.length;i++){\nvar _15=i*100/(aa.length-1)+\"%\";\nvar _16=$(\"<span></span>\").appendTo(_13);\n_16.css((_10.mode==\"h\"?\"left\":\"top\"),_15);\nif(aa[i]!=\"|\"){\n_16=$(\"<span></span>\").appendTo(_14);\n_16.html(aa[i]);\nif(_10.mode==\"h\"){\n_16.css({left:_15,marginLeft:-Math.round(_16.outerWidth()/2)});\n}else{\n_16.css({top:_15,marginTop:-Math.round(_16.outerHeight()/2)});\n}\n}\n}\n};\n};\nfunction _17(_18){\nvar _19=$.data(_18,\"slider\");\nvar _1a=_19.options;\nvar _1b=_19.slider;\n_1b.removeClass(\"slider-h slider-v slider-disabled\");\n_1b.addClass(_1a.mode==\"h\"?\"slider-h\":\"slider-v\");\n_1b.addClass(_1a.disabled?\"slider-disabled\":\"\");\nvar _1c=_1b.find(\".slider-inner\");\n_1c.html(\"<a href=\\\"javascript:;\\\" class=\\\"slider-handle\\\"></a>\"+\"<span class=\\\"slider-tip\\\"></span>\");\nif(_1a.range){\n_1c.append(\"<a href=\\\"javascript:;\\\" class=\\\"slider-handle\\\"></a>\"+\"<span class=\\\"slider-tip\\\"></span>\");\n}\n_1b.find(\"a.slider-handle\").draggable({axis:_1a.mode,cursor:\"pointer\",disabled:_1a.disabled,onDrag:function(e){\nvar _1d=e.data.left;\nvar _1e=_1b.width();\nif(_1a.mode!=\"h\"){\n_1d=e.data.top;\n_1e=_1b.height();\n}\nif(_1d<0||_1d>_1e){\nreturn false;\n}else{\n_1f(_1d,this);\nreturn false;\n}\n},onStartDrag:function(){\n_19.isDragging=true;\n_1a.onSlideStart.call(_18,_1a.value);\n},onStopDrag:function(e){\n_1f(_1a.mode==\"h\"?e.data.left:e.data.top,this);\n_1a.onSlideEnd.call(_18,_1a.value);\n_1a.onComplete.call(_18,_1a.value);\n_19.isDragging=false;\n}});\n_1b.find(\"div.slider-inner\")._unbind(\".slider\")._bind(\"mousedown.slider\",function(e){\nif(_19.isDragging||_1a.disabled){\nreturn;\n}\nvar pos=$(this).offset();\n_1f(_1a.mode==\"h\"?(e.pageX-pos.left):(e.pageY-pos.top));\n_1a.onComplete.call(_18,_1a.value);\n});\nfunction _20(_21){\nvar dd=String(_1a.step).split(\".\");\nvar _22=dd.length>1?dd[1].length:0;\nreturn parseFloat(_21.toFixed(_22));\n};\nfunction _1f(pos,_23){\nvar _24=_25(_18,pos);\nvar s=Math.abs(_24%_1a.step);\nif(s<_1a.step/2){\n_24-=s;\n}else{\n_24=_24-s+_1a.step;\n}\n_24=_20(_24);\nif(_1a.range){\nvar v1=_1a.value[0];\nvar v2=_1a.value[1];\nvar m=parseFloat((v1+v2)/2);\nif(_23){\nvar _26=$(_23).nextAll(\".slider-handle\").length>0;\nif(_24<=v2&&_26){\nv1=_24;\n}else{\nif(_24>=v1&&(!_26)){\nv2=_24;\n}\n}\n}else{\nif(_24<v1){\nv1=_24;\n}else{\nif(_24>v2){\nv2=_24;\n}else{\n_24<m?v1=_24:v2=_24;\n}\n}\n}\n$(_18).slider(\"setValues\",[v1,v2]);\n}else{\n$(_18).slider(\"setValue\",_24);\n}\n};\n};\nfunction _27(_28,_29){\nvar _2a=$.data(_28,\"slider\");\nvar _2b=_2a.options;\nvar _2c=_2a.slider;\nvar _2d=$.isArray(_2b.value)?_2b.value:[_2b.value];\nvar _2e=[];\nif(!$.isArray(_29)){\n_29=$.map(String(_29).split(_2b.separator),function(v){\nreturn parseFloat(v);\n});\n}\n_2c.find(\".slider-value\").remove();\nvar _2f=$(_28).attr(\"sliderName\")||\"\";\nfor(var i=0;i<_29.length;i++){\nvar _30=_29[i];\nif(_30<_2b.min){\n_30=_2b.min;\n}\nif(_30>_2b.max){\n_30=_2b.max;\n}\nvar _31=$(\"<input type=\\\"hidden\\\" class=\\\"slider-value\\\">\").appendTo(_2c);\n_31.attr(\"name\",_2f);\n_31.val(_30);\n_2e.push(_30);\nvar _32=_2c.find(\".slider-handle:eq(\"+i+\")\");\nvar tip=_32.next();\nvar pos=_33(_28,_30);\nif(_2b.showTip){\ntip.show();\ntip.html(_2b.tipFormatter.call(_28,_30));\n}else{\ntip.hide();\n}\nif(_2b.mode==\"h\"){\nvar _34=\"left:\"+pos+\"px;\";\n_32.attr(\"style\",_34);\ntip.attr(\"style\",_34+\"margin-left:\"+(-Math.round(tip.outerWidth()/2))+\"px\");\n}else{\nvar _34=\"top:\"+pos+\"px;\";\n_32.attr(\"style\",_34);\ntip.attr(\"style\",_34+\"margin-left:\"+(-Math.round(tip.outerWidth()))+\"px\");\n}\n}\n_2b.value=_2b.range?_2e:_2e[0];\n$(_28).val(_2b.range?_2e.join(_2b.separator):_2e[0]);\nif(_2d.join(\",\")!=_2e.join(\",\")){\n_2b.onChange.call(_28,_2b.value,(_2b.range?_2d:_2d[0]));\n}\n};\nfunction _c(_35){\nvar _36=$.data(_35,\"slider\").options;\nvar fn=_36.onChange;\n_36.onChange=function(){\n};\n_27(_35,_36.value);\n_36.onChange=fn;\n};\nfunction _33(_37,_38){\nvar _39=$.data(_37,\"slider\");\nvar _3a=_39.options;\nvar _3b=_39.slider;\nvar _3c=_3a.mode==\"h\"?_3b.width():_3b.height();\nvar pos=_3a.converter.toPosition.call(_37,_38,_3c);\nif(_3a.mode==\"v\"){\npos=_3b.height()-pos;\n}\nif(_3a.reversed){\npos=_3c-pos;\n}\nreturn pos;\n};\nfunction _25(_3d,pos){\nvar _3e=$.data(_3d,\"slider\");\nvar _3f=_3e.options;\nvar _40=_3e.slider;\nvar _41=_3f.mode==\"h\"?_40.width():_40.height();\nvar pos=_3f.mode==\"h\"?(_3f.reversed?(_41-pos):pos):(_3f.reversed?pos:(_41-pos));\nvar _42=_3f.converter.toValue.call(_3d,pos,_41);\nreturn _42;\n};\n$.fn.slider=function(_43,_44){\nif(typeof _43==\"string\"){\nreturn $.fn.slider.methods[_43](this,_44);\n}\n_43=_43||{};\nreturn this.each(function(){\nvar _45=$.data(this,\"slider\");\nif(_45){\n$.extend(_45.options,_43);\n}else{\n_45=$.data(this,\"slider\",{options:$.extend({},$.fn.slider.defaults,$.fn.slider.parseOptions(this),_43),slider:_1(this)});\n$(this)._propAttr(\"disabled\",false);\n}\nvar _46=_45.options;\n_46.min=parseFloat(_46.min);\n_46.max=parseFloat(_46.max);\nif(_46.range){\nif(!$.isArray(_46.value)){\n_46.value=$.map(String(_46.value).split(_46.separator),function(v){\nreturn parseFloat(v);\n});\n}\nif(_46.value.length<2){\n_46.value.push(_46.max);\n}\n}else{\n_46.value=parseFloat(_46.value);\n}\n_46.step=parseFloat(_46.step);\n_46.originalValue=_46.value;\n_17(this);\n_d(this);\n_6(this);\n});\n};\n$.fn.slider.methods={options:function(jq){\nreturn $.data(jq[0],\"slider\").options;\n},destroy:function(jq){\nreturn jq.each(function(){\n$.data(this,\"slider\").slider.remove();\n$(this).remove();\n});\n},resize:function(jq,_47){\nreturn jq.each(function(){\n_6(this,_47);\n});\n},getValue:function(jq){\nreturn jq.slider(\"options\").value;\n},getValues:function(jq){\nreturn jq.slider(\"options\").value;\n},setValue:function(jq,_48){\nreturn jq.each(function(){\n_27(this,[_48]);\n});\n},setValues:function(jq,_49){\nreturn jq.each(function(){\n_27(this,_49);\n});\n},clear:function(jq){\nreturn jq.each(function(){\nvar _4a=$(this).slider(\"options\");\n_27(this,_4a.range?[_4a.min,_4a.max]:[_4a.min]);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _4b=$(this).slider(\"options\");\n$(this).slider(_4b.range?\"setValues\":\"setValue\",_4b.originalValue);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n$.data(this,\"slider\").options.disabled=false;\n_17(this);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n$.data(this,\"slider\").options.disabled=true;\n_17(this);\n});\n}};\n$.fn.slider.parseOptions=function(_4c){\nvar t=$(_4c);\nreturn $.extend({},$.parser.parseOptions(_4c,[\"width\",\"height\",\"mode\",{reversed:\"boolean\",showTip:\"boolean\",range:\"boolean\",min:\"number\",max:\"number\",step:\"number\"}]),{value:(t.val()||undefined),disabled:(t.attr(\"disabled\")?true:undefined),rule:(t.attr(\"rule\")?eval(t.attr(\"rule\")):undefined)});\n};\n$.fn.slider.defaults={width:\"auto\",height:\"auto\",mode:\"h\",reversed:false,showTip:false,disabled:false,range:false,value:0,separator:\",\",min:0,max:100,step:1,rule:[],tipFormatter:function(_4d){\nreturn _4d;\n},converter:{toPosition:function(_4e,_4f){\nvar _50=$(this).slider(\"options\");\nvar p=(_4e-_50.min)/(_50.max-_50.min)*_4f;\nreturn p;\n},toValue:function(pos,_51){\nvar _52=$(this).slider(\"options\");\nvar v=_52.min+(_52.max-_52.min)*(pos/_51);\nreturn v;\n}},onChange:function(_53,_54){\n},onSlideStart:function(_55){\n},onSlideEnd:function(_56){\n},onComplete:function(_57){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.spinner.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"spinner\");\nvar _4=_3.options;\nvar _5=$.extend(true,[],_4.icons);\nif(_4.spinAlign==\"left\"||_4.spinAlign==\"right\"){\n_4.spinArrow=true;\n_4.iconAlign=_4.spinAlign;\nvar _6={iconCls:\"spinner-button-updown\",handler:function(e){\nvar _7=$(e.target).closest(\".spinner-arrow-up,.spinner-arrow-down\");\n_13(e.data.target,_7.hasClass(\"spinner-arrow-down\"));\n}};\nif(_4.spinAlign==\"left\"){\n_5.unshift(_6);\n}else{\n_5.push(_6);\n}\n}else{\n_4.spinArrow=false;\nif(_4.spinAlign==\"vertical\"){\nif(_4.buttonAlign!=\"top\"){\n_4.buttonAlign=\"bottom\";\n}\n_4.clsLeft=\"textbox-button-bottom\";\n_4.clsRight=\"textbox-button-top\";\n}else{\n_4.clsLeft=\"textbox-button-left\";\n_4.clsRight=\"textbox-button-right\";\n}\n}\n$(_2).addClass(\"spinner-f\").textbox($.extend({},_4,{icons:_5,doSize:false,onResize:function(_8,_9){\nif(!_4.spinArrow){\nvar _a=$(this).next();\nvar _b=_a.find(\".textbox-button:not(.spinner-button)\");\nif(_b.length){\nvar _c=_b.outerWidth();\nvar _d=_b.outerHeight();\nvar _e=_a.find(\".spinner-button.\"+_4.clsLeft);\nvar _f=_a.find(\".spinner-button.\"+_4.clsRight);\nif(_4.buttonAlign==\"right\"){\n_f.css(\"marginRight\",_c+\"px\");\n}else{\nif(_4.buttonAlign==\"left\"){\n_e.css(\"marginLeft\",_c+\"px\");\n}else{\nif(_4.buttonAlign==\"top\"){\n_f.css(\"marginTop\",_d+\"px\");\n}else{\n_e.css(\"marginBottom\",_d+\"px\");\n}\n}\n}\n}\n}\n_4.onResize.call(this,_8,_9);\n}}));\n$(_2).attr(\"spinnerName\",$(_2).attr(\"textboxName\"));\n_3.spinner=$(_2).next();\n_3.spinner.addClass(\"spinner\");\nif(_4.spinArrow){\nvar _10=_3.spinner.find(\".spinner-button-updown\");\n_10.append(\"<span class=\\\"spinner-arrow spinner-button-top\\\">\"+\"<span class=\\\"spinner-arrow-up\\\"></span>\"+\"</span>\"+\"<span class=\\\"spinner-arrow spinner-button-bottom\\\">\"+\"<span class=\\\"spinner-arrow-down\\\"></span>\"+\"</span>\");\n}else{\nvar _11=$(\"<a href=\\\"javascript:;\\\" class=\\\"textbox-button spinner-button\\\"></a>\").addClass(_4.clsLeft).appendTo(_3.spinner);\nvar _12=$(\"<a href=\\\"javascript:;\\\" class=\\\"textbox-button spinner-button\\\"></a>\").addClass(_4.clsRight).appendTo(_3.spinner);\n_11.linkbutton({iconCls:_4.reversed?\"spinner-button-up\":\"spinner-button-down\",onClick:function(){\n_13(_2,!_4.reversed);\n}});\n_12.linkbutton({iconCls:_4.reversed?\"spinner-button-down\":\"spinner-button-up\",onClick:function(){\n_13(_2,_4.reversed);\n}});\nif(_4.disabled){\n$(_2).spinner(\"disable\");\n}\nif(_4.readonly){\n$(_2).spinner(\"readonly\");\n}\n}\n$(_2).spinner(\"resize\");\n};\nfunction _13(_14,_15){\nvar _16=$(_14).spinner(\"options\");\n_16.spin.call(_14,_15);\n_16[_15?\"onSpinDown\":\"onSpinUp\"].call(_14);\n$(_14).spinner(\"validate\");\n};\n$.fn.spinner=function(_17,_18){\nif(typeof _17==\"string\"){\nvar _19=$.fn.spinner.methods[_17];\nif(_19){\nreturn _19(this,_18);\n}else{\nreturn this.textbox(_17,_18);\n}\n}\n_17=_17||{};\nreturn this.each(function(){\nvar _1a=$.data(this,\"spinner\");\nif(_1a){\n$.extend(_1a.options,_17);\n}else{\n_1a=$.data(this,\"spinner\",{options:$.extend({},$.fn.spinner.defaults,$.fn.spinner.parseOptions(this),_17)});\n}\n_1(this);\n});\n};\n$.fn.spinner.methods={options:function(jq){\nvar _1b=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"spinner\").options,{width:_1b.width,value:_1b.value,originalValue:_1b.originalValue,disabled:_1b.disabled,readonly:_1b.readonly});\n}};\n$.fn.spinner.parseOptions=function(_1c){\nreturn $.extend({},$.fn.textbox.parseOptions(_1c),$.parser.parseOptions(_1c,[\"min\",\"max\",\"spinAlign\",{increment:\"number\",reversed:\"boolean\"}]));\n};\n$.fn.spinner.defaults=$.extend({},$.fn.textbox.defaults,{min:null,max:null,increment:1,spinAlign:\"right\",reversed:false,spin:function(_1d){\n},onSpinUp:function(){\n},onSpinDown:function(){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.splitbutton.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"splitbutton\").options;\n$(_2).menubutton(_3);\n$(_2).addClass(\"s-btn\");\n};\n$.fn.splitbutton=function(_4,_5){\nif(typeof _4==\"string\"){\nvar _6=$.fn.splitbutton.methods[_4];\nif(_6){\nreturn _6(this,_5);\n}else{\nreturn this.menubutton(_4,_5);\n}\n}\n_4=_4||{};\nreturn this.each(function(){\nvar _7=$.data(this,\"splitbutton\");\nif(_7){\n$.extend(_7.options,_4);\n}else{\n$.data(this,\"splitbutton\",{options:$.extend({},$.fn.splitbutton.defaults,$.fn.splitbutton.parseOptions(this),_4)});\n$(this)._propAttr(\"disabled\",false);\n}\n_1(this);\n});\n};\n$.fn.splitbutton.methods={options:function(jq){\nvar _8=jq.menubutton(\"options\");\nvar _9=$.data(jq[0],\"splitbutton\").options;\n$.extend(_9,{disabled:_8.disabled,toggle:_8.toggle,selected:_8.selected});\nreturn _9;\n}};\n$.fn.splitbutton.parseOptions=function(_a){\nvar t=$(_a);\nreturn $.extend({},$.fn.linkbutton.parseOptions(_a),$.parser.parseOptions(_a,[\"menu\",{plain:\"boolean\",duration:\"number\"}]));\n};\n$.fn.splitbutton.defaults=$.extend({},$.fn.linkbutton.defaults,{plain:true,menu:null,duration:100,cls:{btn1:\"m-btn-active s-btn-active\",btn2:\"m-btn-plain-active s-btn-plain-active\",arrow:\"m-btn-downarrow\",trigger:\"m-btn-line\"}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.switchbutton.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nvar _1=1;\nfunction _2(_3){\nvar _4=$(\"<span class=\\\"switchbutton\\\">\"+\"<span class=\\\"switchbutton-inner\\\">\"+\"<span class=\\\"switchbutton-on\\\"></span>\"+\"<span class=\\\"switchbutton-handle\\\"></span>\"+\"<span class=\\\"switchbutton-off\\\"></span>\"+\"<input class=\\\"switchbutton-value\\\" type=\\\"checkbox\\\" tabindex=\\\"-1\\\">\"+\"</span>\"+\"</span>\").insertAfter(_3);\nvar t=$(_3);\nt.addClass(\"switchbutton-f\").hide();\nvar _5=t.attr(\"name\");\nif(_5){\nt.removeAttr(\"name\").attr(\"switchbuttonName\",_5);\n_4.find(\".switchbutton-value\").attr(\"name\",_5);\n}\n_4._bind(\"_resize\",function(e,_6){\nif($(this).hasClass(\"easyui-fluid\")||_6){\n_7(_3);\n}\nreturn false;\n});\nreturn _4;\n};\nfunction _7(_8,_9){\nvar _a=$.data(_8,\"switchbutton\");\nvar _b=_a.options;\nvar _c=_a.switchbutton;\nif(_9){\n$.extend(_b,_9);\n}\nvar _d=_c.is(\":visible\");\nif(!_d){\n_c.appendTo(\"body\");\n}\n_c._size(_b);\nif(_b.label&&_b.labelPosition){\nif(_b.labelPosition==\"top\"){\n_a.label._size({width:_b.labelWidth},_c);\n}else{\n_a.label._size({width:_b.labelWidth,height:_c.outerHeight()},_c);\n_a.label.css(\"lineHeight\",_c.outerHeight()+\"px\");\n}\n}\nvar w=_c.width();\nvar h=_c.height();\nvar w=_c.outerWidth();\nvar h=_c.outerHeight();\nvar _e=parseInt(_b.handleWidth)||_c.height();\nvar _f=w*2-_e;\n_c.find(\".switchbutton-inner\").css({width:_f+\"px\",height:h+\"px\",lineHeight:h+\"px\"});\n_c.find(\".switchbutton-handle\")._outerWidth(_e)._outerHeight(h).css({marginLeft:-_e/2+\"px\"});\n_c.find(\".switchbutton-on\").css({width:(w-_e/2)+\"px\",textIndent:(_b.reversed?\"\":\"-\")+_e/2+\"px\"});\n_c.find(\".switchbutton-off\").css({width:(w-_e/2)+\"px\",textIndent:(_b.reversed?\"-\":\"\")+_e/2+\"px\"});\n_b.marginWidth=w-_e;\n_10(_8,_b.checked,false);\nif(!_d){\n_c.insertAfter(_8);\n}\n};\nfunction _11(_12){\nvar _13=$.data(_12,\"switchbutton\");\nvar _14=_13.options;\nvar _15=_13.switchbutton;\nvar _16=_15.find(\".switchbutton-inner\");\nvar on=_16.find(\".switchbutton-on\").html(_14.onText);\nvar off=_16.find(\".switchbutton-off\").html(_14.offText);\nvar _17=_16.find(\".switchbutton-handle\").html(_14.handleText);\nif(_14.reversed){\noff.prependTo(_16);\non.insertAfter(_17);\n}else{\non.prependTo(_16);\noff.insertAfter(_17);\n}\nvar _18=\"_easyui_switchbutton_\"+(++_1);\nvar _19=_15.find(\".switchbutton-value\")._propAttr(\"checked\",_14.checked).attr(\"id\",_18);\n_19._unbind(\".switchbutton\")._bind(\"change.switchbutton\",function(e){\nreturn false;\n});\n_15.removeClass(\"switchbutton-reversed\").addClass(_14.reversed?\"switchbutton-reversed\":\"\");\nif(_14.label){\nif(typeof _14.label==\"object\"){\n_13.label=$(_14.label);\n_13.label.attr(\"for\",_18);\n}else{\n$(_13.label).remove();\n_13.label=$(\"<label class=\\\"textbox-label\\\"></label>\").html(_14.label);\n_13.label.css(\"textAlign\",_14.labelAlign).attr(\"for\",_18);\nif(_14.labelPosition==\"after\"){\n_13.label.insertAfter(_15);\n}else{\n_13.label.insertBefore(_12);\n}\n_13.label.removeClass(\"textbox-label-left textbox-label-right textbox-label-top\");\n_13.label.addClass(\"textbox-label-\"+_14.labelPosition);\n}\n}else{\n$(_13.label).remove();\n}\n_10(_12,_14.checked);\n_1a(_12,_14.readonly);\n_1b(_12,_14.disabled);\n$(_12).switchbutton(\"setValue\",_14.value);\n};\nfunction _10(_1c,_1d,_1e){\nvar _1f=$.data(_1c,\"switchbutton\");\nvar _20=_1f.options;\nvar _21=_1f.switchbutton.find(\".switchbutton-inner\");\nvar _22=_21.find(\".switchbutton-on\");\nvar _23=_20.reversed?(_1d?_20.marginWidth:0):(_1d?0:_20.marginWidth);\nvar dir=_22.css(\"float\").toLowerCase();\nvar css={};\ncss[\"margin-\"+dir]=-_23+\"px\";\n_1e?_21.animate(css,200):_21.css(css);\nvar _24=_21.find(\".switchbutton-value\");\n$(_1c).add(_24)._propAttr(\"checked\",_1d);\nif(_20.checked!=_1d){\n_20.checked=_1d;\n_20.onChange.call(_1c,_20.checked);\n$(_1c).closest(\"form\").trigger(\"_change\",[_1c]);\n}\n};\nfunction _1b(_25,_26){\nvar _27=$.data(_25,\"switchbutton\");\nvar _28=_27.options;\nvar _29=_27.switchbutton;\nvar _2a=_29.find(\".switchbutton-value\");\nif(_26){\n_28.disabled=true;\n$(_25).add(_2a)._propAttr(\"disabled\",true);\n_29.addClass(\"switchbutton-disabled\");\n_29.removeAttr(\"tabindex\");\n}else{\n_28.disabled=false;\n$(_25).add(_2a)._propAttr(\"disabled\",false);\n_29.removeClass(\"switchbutton-disabled\");\n_29.attr(\"tabindex\",$(_25).attr(\"tabindex\")||\"\");\n}\n};\nfunction _1a(_2b,_2c){\nvar _2d=$.data(_2b,\"switchbutton\");\nvar _2e=_2d.options;\n_2e.readonly=_2c==undefined?true:_2c;\n_2d.switchbutton.removeClass(\"switchbutton-readonly\").addClass(_2e.readonly?\"switchbutton-readonly\":\"\");\n};\nfunction _2f(_30){\nvar _31=$.data(_30,\"switchbutton\");\nvar _32=_31.options;\n_31.switchbutton._unbind(\".switchbutton\")._bind(\"click.switchbutton\",function(){\nif(!_32.disabled&&!_32.readonly){\n_10(_30,_32.checked?false:true,true);\n}\n})._bind(\"keydown.switchbutton\",function(e){\nif(e.which==13||e.which==32){\nif(!_32.disabled&&!_32.readonly){\n_10(_30,_32.checked?false:true,true);\nreturn false;\n}\n}\n});\n};\n$.fn.switchbutton=function(_33,_34){\nif(typeof _33==\"string\"){\nreturn $.fn.switchbutton.methods[_33](this,_34);\n}\n_33=_33||{};\nreturn this.each(function(){\nvar _35=$.data(this,\"switchbutton\");\nif(_35){\n$.extend(_35.options,_33);\n}else{\n_35=$.data(this,\"switchbutton\",{options:$.extend({},$.fn.switchbutton.defaults,$.fn.switchbutton.parseOptions(this),_33),switchbutton:_2(this)});\n}\n_35.options.originalChecked=_35.options.checked;\n_11(this);\n_7(this);\n_2f(this);\n});\n};\n$.fn.switchbutton.methods={options:function(jq){\nvar _36=jq.data(\"switchbutton\");\nreturn $.extend(_36.options,{value:_36.switchbutton.find(\".switchbutton-value\").val()});\n},resize:function(jq,_37){\nreturn jq.each(function(){\n_7(this,_37);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_1b(this,false);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_1b(this,true);\n});\n},readonly:function(jq,_38){\nreturn jq.each(function(){\n_1a(this,_38);\n});\n},check:function(jq){\nreturn jq.each(function(){\n_10(this,true);\n});\n},uncheck:function(jq){\nreturn jq.each(function(){\n_10(this,false);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_10(this,false);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _39=$(this).switchbutton(\"options\");\n_10(this,_39.originalChecked);\n});\n},setValue:function(jq,_3a){\nreturn jq.each(function(){\n$(this).val(_3a);\n$.data(this,\"switchbutton\").switchbutton.find(\".switchbutton-value\").val(_3a);\n});\n}};\n$.fn.switchbutton.parseOptions=function(_3b){\nvar t=$(_3b);\nreturn $.extend({},$.parser.parseOptions(_3b,[\"onText\",\"offText\",\"handleText\",{handleWidth:\"number\",reversed:\"boolean\"},\"label\",\"labelPosition\",\"labelAlign\",{labelWidth:\"number\"}]),{value:(t.val()||undefined),checked:(t.attr(\"checked\")?true:undefined),disabled:(t.attr(\"disabled\")?true:undefined),readonly:(t.attr(\"readonly\")?true:undefined)});\n};\n$.fn.switchbutton.defaults={handleWidth:\"auto\",width:60,height:30,checked:false,disabled:false,readonly:false,reversed:false,onText:\"ON\",offText:\"OFF\",handleText:\"\",value:\"on\",label:null,labelWidth:\"auto\",labelPosition:\"before\",labelAlign:\"left\",onChange:function(_3c){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.tabs.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(c){\nvar w=0;\n$(c).children().each(function(){\nw+=$(this).outerWidth(true);\n});\nreturn w;\n};\nfunction _2(_3){\nvar _4=$.data(_3,\"tabs\").options;\nif(!_4.showHeader){\nreturn;\n}\nvar _5=$(_3).children(\"div.tabs-header\");\nvar _6=_5.children(\"div.tabs-tool:not(.tabs-tool-hidden)\");\nvar _7=_5.children(\"div.tabs-scroller-left\");\nvar _8=_5.children(\"div.tabs-scroller-right\");\nvar _9=_5.children(\"div.tabs-wrap\");\nif(_4.tabPosition==\"left\"||_4.tabPosition==\"right\"){\nif(!_6.length){\nreturn;\n}\n_6._outerWidth(_5.width());\nvar _a={left:_4.tabPosition==\"left\"?\"auto\":0,right:_4.tabPosition==\"left\"?0:\"auto\",top:_4.toolPosition==\"top\"?0:\"auto\",bottom:_4.toolPosition==\"top\"?\"auto\":0};\nvar _b={marginTop:_4.toolPosition==\"top\"?_6.outerHeight():0};\n_6.css(_a);\n_9.css(_b);\nreturn;\n}\nvar _c=_5.outerHeight();\nif(_4.plain){\n_c-=_c-_5.height();\n}\n_6._outerHeight(_c);\nvar _d=_1(_5.find(\"ul.tabs\"));\nvar _e=_5.width()-_6._outerWidth();\nif(_d>_e){\n_7.add(_8).show()._outerHeight(_c);\nif(_4.toolPosition==\"left\"){\n_6.css({left:_7.outerWidth(),right:\"\"});\n_9.css({marginLeft:_7.outerWidth()+_6._outerWidth(),marginRight:_8._outerWidth(),width:_e-_7.outerWidth()-_8.outerWidth()});\n}else{\n_6.css({left:\"\",right:_8.outerWidth()});\n_9.css({marginLeft:_7.outerWidth(),marginRight:_8.outerWidth()+_6._outerWidth(),width:_e-_7.outerWidth()-_8.outerWidth()});\n}\n}else{\n_7.add(_8).hide();\nif(_4.toolPosition==\"left\"){\n_6.css({left:0,right:\"\"});\n_9.css({marginLeft:_6._outerWidth(),marginRight:0,width:_e});\n}else{\n_6.css({left:\"\",right:0});\n_9.css({marginLeft:0,marginRight:_6._outerWidth(),width:_e});\n}\n}\n};\nfunction _f(_10){\nvar _11=$.data(_10,\"tabs\").options;\nvar _12=$(_10).children(\"div.tabs-header\");\nif(_11.tools){\nif(typeof _11.tools==\"string\"){\n$(_11.tools).addClass(\"tabs-tool\").appendTo(_12);\n$(_11.tools).show();\n}else{\n_12.children(\"div.tabs-tool\").remove();\nvar _13=$(\"<div class=\\\"tabs-tool\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" style=\\\"height:100%\\\"><tr></tr></table></div>\").appendTo(_12);\nvar tr=_13.find(\"tr\");\nfor(var i=0;i<_11.tools.length;i++){\nvar td=$(\"<td></td>\").appendTo(tr);\nvar _14=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(td);\n_14[0].onclick=eval(_11.tools[i].handler||function(){\n});\n_14.linkbutton($.extend({},_11.tools[i],{plain:true}));\n}\n}\n}else{\n_12.children(\"div.tabs-tool\").remove();\n}\n};\nfunction _15(_16,_17){\nvar _18=$.data(_16,\"tabs\");\nvar _19=_18.options;\nvar cc=$(_16);\nif(!_19.doSize){\nreturn;\n}\nif(_17){\n$.extend(_19,{width:_17.width,height:_17.height});\n}\ncc._size(_19);\nvar _1a=cc.children(\"div.tabs-header\");\nvar _1b=cc.children(\"div.tabs-panels\");\nvar _1c=_1a.find(\"div.tabs-wrap\");\nvar ul=_1c.find(\".tabs\");\nul.children(\"li\").removeClass(\"tabs-first tabs-last\");\nul.children(\"li:first\").addClass(\"tabs-first\");\nul.children(\"li:last\").addClass(\"tabs-last\");\nif(_19.tabPosition==\"left\"||_19.tabPosition==\"right\"){\n_1a._outerWidth(_19.showHeader?_19.headerWidth:0);\n_1b._outerWidth(cc.width()-_1a.outerWidth());\n_1a.add(_1b)._size(\"height\",isNaN(parseInt(_19.height))?\"\":cc.height());\n_1c._outerWidth(_1a.width());\nul._outerWidth(_1c.width()).css(\"height\",\"\");\n}else{\n_1a.children(\"div.tabs-scroller-left,div.tabs-scroller-right,div.tabs-tool:not(.tabs-tool-hidden)\").css(\"display\",_19.showHeader?\"block\":\"none\");\n_1a._outerWidth(cc.width()).css(\"height\",\"\");\nif(_19.showHeader){\n_1a.css(\"background-color\",\"\");\n_1c.css(\"height\",\"\");\n}else{\n_1a.css(\"background-color\",\"transparent\");\n_1a._outerHeight(0);\n_1c._outerHeight(0);\n}\nul._outerHeight(_19.tabHeight).css(\"width\",\"\");\nul._outerHeight(ul.outerHeight()-ul.height()-1+_19.tabHeight).css(\"width\",\"\");\n_1b._size(\"height\",isNaN(parseInt(_19.height))?\"\":(cc.height()-_1a.outerHeight()));\n_1b._size(\"width\",cc.width());\n}\nif(_18.tabs.length){\nvar d1=ul.outerWidth(true)-ul.width();\nvar li=ul.children(\"li:first\");\nvar d2=li.outerWidth(true)-li.width();\nvar _1d=_1a.width()-_1a.children(\".tabs-tool:not(.tabs-tool-hidden)\")._outerWidth();\nvar _1e=Math.floor((_1d-d1-d2*_18.tabs.length)/_18.tabs.length);\n$.map(_18.tabs,function(p){\n_1f(p,(_19.justified&&$.inArray(_19.tabPosition,[\"top\",\"bottom\"])>=0)?_1e:undefined);\n});\nif(_19.justified&&$.inArray(_19.tabPosition,[\"top\",\"bottom\"])>=0){\nvar _20=_1d-d1-_1(ul);\n_1f(_18.tabs[_18.tabs.length-1],_1e+_20);\n}\n}\n_2(_16);\nfunction _1f(p,_21){\nvar _22=p.panel(\"options\");\nvar p_t=_22.tab.find(\"a.tabs-inner\");\nvar _21=_21?_21:(parseInt(_22.tabWidth||_19.tabWidth||undefined));\nif(_21){\np_t._outerWidth(_21);\n}else{\np_t.css(\"width\",\"\");\n}\np_t._outerHeight(_19.tabHeight);\np_t.css(\"lineHeight\",p_t.height()+\"px\");\np_t.find(\".easyui-fluid:visible\").triggerHandler(\"_resize\");\n};\n};\nfunction _23(_24){\nvar _25=$.data(_24,\"tabs\").options;\nvar tab=_26(_24);\nif(tab){\nvar _27=$(_24).children(\"div.tabs-panels\");\nvar _28=_25.width==\"auto\"?\"auto\":_27.width();\nvar _29=_25.height==\"auto\"?\"auto\":_27.height();\ntab.panel(\"resize\",{width:_28,height:_29});\n}\n};\nfunction _2a(_2b){\nvar _2c=$.data(_2b,\"tabs\").tabs;\nvar cc=$(_2b).addClass(\"tabs-container\");\nvar _2d=$(\"<div class=\\\"tabs-panels\\\"></div>\").insertBefore(cc);\ncc.children(\"div\").each(function(){\n_2d[0].appendChild(this);\n});\ncc[0].appendChild(_2d[0]);\n$(\"<div class=\\\"tabs-header\\\">\"+\"<div class=\\\"tabs-scroller-left\\\"></div>\"+\"<div class=\\\"tabs-scroller-right\\\"></div>\"+\"<div class=\\\"tabs-wrap\\\">\"+\"<ul class=\\\"tabs\\\"></ul>\"+\"</div>\"+\"</div>\").prependTo(_2b);\ncc.children(\"div.tabs-panels\").children(\"div\").each(function(i){\nvar _2e=$.extend({},$.parser.parseOptions(this),{disabled:($(this).attr(\"disabled\")?true:undefined),selected:($(this).attr(\"selected\")?true:undefined)});\n_3e(_2b,_2e,$(this));\n});\ncc.children(\"div.tabs-header\").find(\".tabs-scroller-left, .tabs-scroller-right\")._bind(\"mouseenter\",function(){\n$(this).addClass(\"tabs-scroller-over\");\n})._bind(\"mouseleave\",function(){\n$(this).removeClass(\"tabs-scroller-over\");\n});\ncc._bind(\"_resize\",function(e,_2f){\nif($(this).hasClass(\"easyui-fluid\")||_2f){\n_15(_2b);\n_23(_2b);\n}\nreturn false;\n});\n};\nfunction _30(_31){\nvar _32=$.data(_31,\"tabs\");\nvar _33=_32.options;\n$(_31).children(\"div.tabs-header\")._unbind()._bind(\"click\",function(e){\nif($(e.target).hasClass(\"tabs-scroller-left\")){\n$(_31).tabs(\"scrollBy\",-_33.scrollIncrement);\n}else{\nif($(e.target).hasClass(\"tabs-scroller-right\")){\n$(_31).tabs(\"scrollBy\",_33.scrollIncrement);\n}else{\nvar li=$(e.target).closest(\"li\");\nif(li.hasClass(\"tabs-disabled\")){\nreturn false;\n}\nvar a=$(e.target).closest(\"a.tabs-close\");\nif(a.length){\n_5d(_31,_34(li));\n}else{\nif(li.length){\nvar _35=_34(li);\nvar _36=_32.tabs[_35].panel(\"options\");\nif(_36.collapsible){\n_36.closed?_53(_31,_35):_7b(_31,_35);\n}else{\n_53(_31,_35);\n}\n}\n}\nreturn false;\n}\n}\n})._bind(\"contextmenu\",function(e){\nvar li=$(e.target).closest(\"li\");\nif(li.hasClass(\"tabs-disabled\")){\nreturn;\n}\nif(li.length){\n_33.onContextMenu.call(_31,e,li.find(\"span.tabs-title\").html(),_34(li));\n}\n});\nfunction _34(li){\nvar _37=0;\nli.parent().children(\"li\").each(function(i){\nif(li[0]==this){\n_37=i;\nreturn false;\n}\n});\nreturn _37;\n};\n};\nfunction _38(_39){\nvar _3a=$.data(_39,\"tabs\").options;\nvar _3b=$(_39).children(\"div.tabs-header\");\nvar _3c=$(_39).children(\"div.tabs-panels\");\n_3b.removeClass(\"tabs-header-top tabs-header-bottom tabs-header-left tabs-header-right\");\n_3c.removeClass(\"tabs-panels-top tabs-panels-bottom tabs-panels-left tabs-panels-right\");\nif(_3a.tabPosition==\"top\"){\n_3b.insertBefore(_3c);\n}else{\nif(_3a.tabPosition==\"bottom\"){\n_3b.insertAfter(_3c);\n_3b.addClass(\"tabs-header-bottom\");\n_3c.addClass(\"tabs-panels-top\");\n}else{\nif(_3a.tabPosition==\"left\"){\n_3b.addClass(\"tabs-header-left\");\n_3c.addClass(\"tabs-panels-right\");\n}else{\nif(_3a.tabPosition==\"right\"){\n_3b.addClass(\"tabs-header-right\");\n_3c.addClass(\"tabs-panels-left\");\n}\n}\n}\n}\nif(_3a.plain==true){\n_3b.addClass(\"tabs-header-plain\");\n}else{\n_3b.removeClass(\"tabs-header-plain\");\n}\n_3b.removeClass(\"tabs-header-narrow\").addClass(_3a.narrow?\"tabs-header-narrow\":\"\");\nvar _3d=_3b.find(\".tabs\");\n_3d.removeClass(\"tabs-pill\").addClass(_3a.pill?\"tabs-pill\":\"\");\n_3d.removeClass(\"tabs-narrow\").addClass(_3a.narrow?\"tabs-narrow\":\"\");\n_3d.removeClass(\"tabs-justified\").addClass(_3a.justified?\"tabs-justified\":\"\");\nif(_3a.border==true){\n_3b.removeClass(\"tabs-header-noborder\");\n_3c.removeClass(\"tabs-panels-noborder\");\n}else{\n_3b.addClass(\"tabs-header-noborder\");\n_3c.addClass(\"tabs-panels-noborder\");\n}\n_3a.doSize=true;\n};\nfunction _3e(_3f,_40,pp){\n_40=_40||{};\nvar _41=$.data(_3f,\"tabs\");\nvar _42=_41.tabs;\nif(_40.index==undefined||_40.index>_42.length){\n_40.index=_42.length;\n}\nif(_40.index<0){\n_40.index=0;\n}\nvar ul=$(_3f).children(\"div.tabs-header\").find(\"ul.tabs\");\nvar _43=$(_3f).children(\"div.tabs-panels\");\nvar tab=$(\"<li>\"+\"<a href=\\\"javascript:;\\\" class=\\\"tabs-inner\\\">\"+\"<span class=\\\"tabs-title\\\"></span>\"+\"<span class=\\\"tabs-icon\\\"></span>\"+\"</a>\"+\"</li>\");\nif(!pp){\npp=$(\"<div></div>\");\n}\nif(_40.index>=_42.length){\ntab.appendTo(ul);\npp.appendTo(_43);\n_42.push(pp);\n}else{\ntab.insertBefore(ul.children(\"li:eq(\"+_40.index+\")\"));\npp.insertBefore(_43.children(\"div.panel:eq(\"+_40.index+\")\"));\n_42.splice(_40.index,0,pp);\n}\npp.panel($.extend({},_40,{tab:tab,border:false,noheader:true,closed:true,doSize:false,iconCls:(_40.icon?_40.icon:undefined),onLoad:function(){\nif(_40.onLoad){\n_40.onLoad.apply(this,arguments);\n}\n_41.options.onLoad.call(_3f,$(this));\n},onBeforeOpen:function(){\nif(_40.onBeforeOpen){\nif(_40.onBeforeOpen.call(this)==false){\nreturn false;\n}\n}\nvar p=$(_3f).tabs(\"getSelected\");\nif(p){\nif(p[0]!=this){\n$(_3f).tabs(\"unselect\",_4d(_3f,p));\np=$(_3f).tabs(\"getSelected\");\nif(p){\nreturn false;\n}\n}else{\n_23(_3f);\nreturn false;\n}\n}\nvar _44=$(this).panel(\"options\");\n_44.tab.addClass(\"tabs-selected\");\nvar _45=$(_3f).find(\">div.tabs-header>div.tabs-wrap\");\nvar _46=_44.tab.position().left;\nvar _47=_46+_44.tab.outerWidth();\nif(_46<0||_47>_45.width()){\nvar _48=_46-(_45.width()-_44.tab.width())/2;\n$(_3f).tabs(\"scrollBy\",_48);\n}else{\n$(_3f).tabs(\"scrollBy\",0);\n}\nvar _49=$(this).panel(\"panel\");\n_49.css(\"display\",\"block\");\n_23(_3f);\n_49.css(\"display\",\"none\");\n},onOpen:function(){\nif(_40.onOpen){\n_40.onOpen.call(this);\n}\nvar _4a=$(this).panel(\"options\");\nvar _4b=_4d(_3f,this);\n_41.selectHis.push(_4b);\n_41.options.onSelect.call(_3f,_4a.title,_4b);\n},onBeforeClose:function(){\nif(_40.onBeforeClose){\nif(_40.onBeforeClose.call(this)==false){\nreturn false;\n}\n}\n$(this).panel(\"options\").tab.removeClass(\"tabs-selected\");\n},onClose:function(){\nif(_40.onClose){\n_40.onClose.call(this);\n}\nvar _4c=$(this).panel(\"options\");\n_41.options.onUnselect.call(_3f,_4c.title,_4d(_3f,this));\n}}));\n$(_3f).tabs(\"update\",{tab:pp,options:pp.panel(\"options\"),type:\"header\"});\n};\nfunction _4e(_4f,_50){\nvar _51=$.data(_4f,\"tabs\");\nvar _52=_51.options;\nif(_50.selected==undefined){\n_50.selected=true;\n}\n_3e(_4f,_50);\n_52.onAdd.call(_4f,_50.title,_50.index);\nif(_50.selected){\n_53(_4f,_50.index);\n}\n};\nfunction _54(_55,_56){\n_56.type=_56.type||\"all\";\nvar _57=$.data(_55,\"tabs\").selectHis;\nvar pp=_56.tab;\nvar _58=pp.panel(\"options\");\nvar _59=_58.title;\n$.extend(_58,_56.options,{iconCls:(_56.options.icon?_56.options.icon:undefined)});\nif(_56.type==\"all\"||_56.type==\"body\"){\npp.panel();\n}\nif(_56.type==\"all\"||_56.type==\"header\"){\nvar tab=_58.tab;\nif(_58.header){\ntab.find(\".tabs-inner\").html($(_58.header));\n}else{\nvar _5a=tab.find(\"span.tabs-title\");\nvar _5b=tab.find(\"span.tabs-icon\");\n_5a.html(_58.title);\n_5b.attr(\"class\",\"tabs-icon\");\ntab.find(\"a.tabs-close\").remove();\nif(_58.closable){\n_5a.addClass(\"tabs-closable\");\n$(\"<a href=\\\"javascript:;\\\" class=\\\"tabs-close\\\"></a>\").appendTo(tab);\n}else{\n_5a.removeClass(\"tabs-closable\");\n}\nif(_58.iconCls){\n_5a.addClass(\"tabs-with-icon\");\n_5b.addClass(_58.iconCls);\n}else{\n_5a.removeClass(\"tabs-with-icon\");\n}\nif(_58.tools){\nvar _5c=tab.find(\"span.tabs-p-tool\");\nif(!_5c.length){\nvar _5c=$(\"<span class=\\\"tabs-p-tool\\\"></span>\").insertAfter(tab.find(\"a.tabs-inner\"));\n}\nif($.isArray(_58.tools)){\n_5c.empty();\nfor(var i=0;i<_58.tools.length;i++){\nvar t=$(\"<a href=\\\"javascript:;\\\"></a>\").appendTo(_5c);\nt.addClass(_58.tools[i].iconCls);\nif(_58.tools[i].handler){\nt._bind(\"click\",{handler:_58.tools[i].handler},function(e){\nif($(this).parents(\"li\").hasClass(\"tabs-disabled\")){\nreturn;\n}\ne.data.handler.call(this);\n});\n}\n}\n}else{\n$(_58.tools).children().appendTo(_5c);\n}\nvar pr=_5c.children().length*12;\nif(_58.closable){\npr+=8;\n_5c.css(\"right\",\"\");\n}else{\npr-=3;\n_5c.css(\"right\",\"5px\");\n}\n_5a.css(\"padding-right\",pr+\"px\");\n}else{\ntab.find(\"span.tabs-p-tool\").remove();\n_5a.css(\"padding-right\",\"\");\n}\n}\n}\nif(_58.disabled){\n_58.tab.addClass(\"tabs-disabled\");\n}else{\n_58.tab.removeClass(\"tabs-disabled\");\n}\n_15(_55);\n$.data(_55,\"tabs\").options.onUpdate.call(_55,_58.title,_4d(_55,pp));\n};\nfunction _5d(_5e,_5f){\nvar _60=$.data(_5e,\"tabs\");\nvar _61=_60.options;\nvar _62=_60.tabs;\nvar _63=_60.selectHis;\nif(!_64(_5e,_5f)){\nreturn;\n}\nvar tab=_65(_5e,_5f);\nvar _66=tab.panel(\"options\").title;\nvar _67=_4d(_5e,tab);\nif(_61.onBeforeClose.call(_5e,_66,_67)==false){\nreturn;\n}\nvar tab=_65(_5e,_5f,true);\ntab.panel(\"options\").tab.remove();\ntab.panel(\"destroy\");\n_61.onClose.call(_5e,_66,_67);\n_15(_5e);\nvar his=[];\nfor(var i=0;i<_63.length;i++){\nvar _68=_63[i];\nif(_68!=_67){\nhis.push(_68>_67?_68-1:_68);\n}\n}\n_60.selectHis=his;\nvar _69=$(_5e).tabs(\"getSelected\");\nif(!_69&&his.length){\n_67=_60.selectHis.pop();\n$(_5e).tabs(\"select\",_67);\n}\n};\nfunction _65(_6a,_6b,_6c){\nvar _6d=$.data(_6a,\"tabs\").tabs;\nvar tab=null;\nif(typeof _6b==\"number\"){\nif(_6b>=0&&_6b<_6d.length){\ntab=_6d[_6b];\nif(_6c){\n_6d.splice(_6b,1);\n}\n}\n}else{\nvar tmp=$(\"<span></span>\");\nfor(var i=0;i<_6d.length;i++){\nvar p=_6d[i];\ntmp.html(p.panel(\"options\").title);\nvar _6e=tmp.text();\ntmp.html(_6b);\n_6b=tmp.text();\nif(_6e==_6b){\ntab=p;\nif(_6c){\n_6d.splice(i,1);\n}\nbreak;\n}\n}\ntmp.remove();\n}\nreturn tab;\n};\nfunction _4d(_6f,tab){\nvar _70=$.data(_6f,\"tabs\").tabs;\nfor(var i=0;i<_70.length;i++){\nif(_70[i][0]==$(tab)[0]){\nreturn i;\n}\n}\nreturn -1;\n};\nfunction _26(_71){\nvar _72=$.data(_71,\"tabs\").tabs;\nfor(var i=0;i<_72.length;i++){\nvar tab=_72[i];\nif(tab.panel(\"options\").tab.hasClass(\"tabs-selected\")){\nreturn tab;\n}\n}\nreturn null;\n};\nfunction _73(_74){\nvar _75=$.data(_74,\"tabs\");\nvar _76=_75.tabs;\nfor(var i=0;i<_76.length;i++){\nvar _77=_76[i].panel(\"options\");\nif(_77.selected&&!_77.disabled){\n_53(_74,i);\nreturn;\n}\n}\n_53(_74,_75.options.selected);\n};\nfunction _53(_78,_79){\nvar p=_65(_78,_79);\nif(p&&!p.is(\":visible\")){\n_7a(_78);\nif(!p.panel(\"options\").disabled){\np.panel(\"open\");\n}\n}\n};\nfunction _7b(_7c,_7d){\nvar p=_65(_7c,_7d);\nif(p&&p.is(\":visible\")){\n_7a(_7c);\np.panel(\"close\");\n}\n};\nfunction _7a(_7e){\n$(_7e).children(\"div.tabs-panels\").each(function(){\n$(this).stop(true,true);\n});\n};\nfunction _64(_7f,_80){\nreturn _65(_7f,_80)!=null;\n};\nfunction _81(_82,_83){\nvar _84=$.data(_82,\"tabs\").options;\n_84.showHeader=_83;\n$(_82).tabs(\"resize\");\n};\nfunction _85(_86,_87){\nvar _88=$(_86).find(\">.tabs-header>.tabs-tool\");\nif(_87){\n_88.removeClass(\"tabs-tool-hidden\").show();\n}else{\n_88.addClass(\"tabs-tool-hidden\").hide();\n}\n$(_86).tabs(\"resize\").tabs(\"scrollBy\",0);\n};\n$.fn.tabs=function(_89,_8a){\nif(typeof _89==\"string\"){\nreturn $.fn.tabs.methods[_89](this,_8a);\n}\n_89=_89||{};\nreturn this.each(function(){\nvar _8b=$.data(this,\"tabs\");\nif(_8b){\n$.extend(_8b.options,_89);\n}else{\n$.data(this,\"tabs\",{options:$.extend({},$.fn.tabs.defaults,$.fn.tabs.parseOptions(this),_89),tabs:[],selectHis:[]});\n_2a(this);\n}\n_f(this);\n_38(this);\n_15(this);\n_30(this);\n_73(this);\n});\n};\n$.fn.tabs.methods={options:function(jq){\nvar cc=jq[0];\nvar _8c=$.data(cc,\"tabs\").options;\nvar s=_26(cc);\n_8c.selected=s?_4d(cc,s):-1;\nreturn _8c;\n},tabs:function(jq){\nreturn $.data(jq[0],\"tabs\").tabs;\n},resize:function(jq,_8d){\nreturn jq.each(function(){\n_15(this,_8d);\n_23(this);\n});\n},add:function(jq,_8e){\nreturn jq.each(function(){\n_4e(this,_8e);\n});\n},close:function(jq,_8f){\nreturn jq.each(function(){\n_5d(this,_8f);\n});\n},getTab:function(jq,_90){\nreturn _65(jq[0],_90);\n},getTabIndex:function(jq,tab){\nreturn _4d(jq[0],tab);\n},getSelected:function(jq){\nreturn _26(jq[0]);\n},select:function(jq,_91){\nreturn jq.each(function(){\n_53(this,_91);\n});\n},unselect:function(jq,_92){\nreturn jq.each(function(){\n_7b(this,_92);\n});\n},exists:function(jq,_93){\nreturn _64(jq[0],_93);\n},update:function(jq,_94){\nreturn jq.each(function(){\n_54(this,_94);\n});\n},enableTab:function(jq,_95){\nreturn jq.each(function(){\nvar _96=$(this).tabs(\"getTab\",_95).panel(\"options\");\n_96.tab.removeClass(\"tabs-disabled\");\n_96.disabled=false;\n});\n},disableTab:function(jq,_97){\nreturn jq.each(function(){\nvar _98=$(this).tabs(\"getTab\",_97).panel(\"options\");\n_98.tab.addClass(\"tabs-disabled\");\n_98.disabled=true;\n});\n},showHeader:function(jq){\nreturn jq.each(function(){\n_81(this,true);\n});\n},hideHeader:function(jq){\nreturn jq.each(function(){\n_81(this,false);\n});\n},showTool:function(jq){\nreturn jq.each(function(){\n_85(this,true);\n});\n},hideTool:function(jq){\nreturn jq.each(function(){\n_85(this,false);\n});\n},scrollBy:function(jq,_99){\nreturn jq.each(function(){\nvar _9a=$(this).tabs(\"options\");\nvar _9b=$(this).find(\">div.tabs-header>div.tabs-wrap\");\nvar pos=Math.min(_9b._scrollLeft()+_99,_9c());\n_9b.animate({scrollLeft:pos},_9a.scrollDuration);\nfunction _9c(){\nvar w=0;\nvar ul=_9b.children(\"ul\");\nul.children(\"li\").each(function(){\nw+=$(this).outerWidth(true);\n});\nreturn w-_9b.width()+(ul.outerWidth()-ul.width());\n};\n});\n}};\n$.fn.tabs.parseOptions=function(_9d){\nreturn $.extend({},$.parser.parseOptions(_9d,[\"tools\",\"toolPosition\",\"tabPosition\",{fit:\"boolean\",border:\"boolean\",plain:\"boolean\"},{headerWidth:\"number\",tabWidth:\"number\",tabHeight:\"number\",selected:\"number\"},{showHeader:\"boolean\",justified:\"boolean\",narrow:\"boolean\",pill:\"boolean\"}]));\n};\n$.fn.tabs.defaults={width:\"auto\",height:\"auto\",headerWidth:150,tabWidth:\"auto\",tabHeight:32,selected:0,showHeader:true,plain:false,fit:false,border:true,justified:false,narrow:false,pill:false,tools:null,toolPosition:\"right\",tabPosition:\"top\",scrollIncrement:100,scrollDuration:400,onLoad:function(_9e){\n},onSelect:function(_9f,_a0){\n},onUnselect:function(_a1,_a2){\n},onBeforeClose:function(_a3,_a4){\n},onClose:function(_a5,_a6){\n},onAdd:function(_a7,_a8){\n},onUpdate:function(_a9,_aa){\n},onContextMenu:function(e,_ab,_ac){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.tagbox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"tagbox\");\nvar _4=_3.options;\n$(_2).addClass(\"tagbox-f\").combobox($.extend({},_4,{cls:\"tagbox\",reversed:true,onChange:function(_5,_6){\n_7();\n$(this).combobox(\"hidePanel\");\n_4.onChange.call(_2,_5,_6);\n},onResizing:function(_8,_9){\nvar _a=$(this).combobox(\"textbox\");\nvar tb=$(this).data(\"textbox\").textbox;\nvar _b=tb.outerWidth();\ntb.css({height:\"\",paddingLeft:_a.css(\"marginLeft\"),paddingRight:_a.css(\"marginRight\")});\n_a.css(\"margin\",0);\ntb._outerWidth(_b);\n_23(_2);\n_12(this);\n_4.onResizing.call(_2,_8,_9);\n},onLoadSuccess:function(_c){\n_7();\n_4.onLoadSuccess.call(_2,_c);\n}}));\n_7();\n_23(_2);\nfunction _7(){\n$(_2).next().find(\".tagbox-label\").remove();\nvar _d=$(_2).tagbox(\"textbox\");\nvar ss=[];\n$.map($(_2).tagbox(\"getValues\"),function(_e,_f){\nvar row=_4.finder.getRow(_2,_e);\nvar _10=_4.tagFormatter.call(_2,_e,row);\nvar cs={};\nvar css=_4.tagStyler.call(_2,_e,row)||\"\";\nif(typeof css==\"string\"){\ncs={s:css};\n}else{\ncs={c:css[\"class\"]||\"\",s:css[\"style\"]||\"\"};\n}\nvar _11=$(\"<span class=\\\"tagbox-label\\\"></span>\").insertBefore(_d).html(_10);\n_11.attr(\"tagbox-index\",_f);\n_11.attr(\"style\",cs.s).addClass(cs.c);\n$(\"<a href=\\\"javascript:;\\\" class=\\\"tagbox-remove\\\"></a>\").appendTo(_11);\n});\n_12(_2);\n$(_2).combobox(\"setText\",\"\");\n};\n};\nfunction _12(_13,_14){\nvar _15=$(_13).next();\nvar _16=_14?$(_14):_15.find(\".tagbox-label\");\nif(_16.length){\nvar _17=$(_13).tagbox(\"textbox\");\nvar _18=$(_16[0]);\nvar _19=_18.outerHeight(true)-_18.outerHeight();\nvar _1a=_17.outerHeight()-_19*2;\n_16.css({height:_1a+\"px\",lineHeight:_1a+\"px\"});\nvar _1b=_15.find(\".textbox-addon\").css(\"height\",\"100%\");\n_1b.find(\".textbox-icon\").css(\"height\",\"100%\");\n_15.find(\".textbox-button\").linkbutton(\"resize\",{height:\"100%\"});\n}\n};\nfunction _1c(_1d){\nvar _1e=$(_1d).next();\n_1e._unbind(\".tagbox\")._bind(\"click.tagbox\",function(e){\nvar _1f=$(_1d).tagbox(\"options\");\nif(_1f.disabled||_1f.readonly){\nreturn;\n}\nif($(e.target).hasClass(\"tagbox-remove\")){\nvar _20=parseInt($(e.target).parent().attr(\"tagbox-index\"));\nvar _21=$(_1d).tagbox(\"getValues\");\nif(_1f.onBeforeRemoveTag.call(_1d,_21[_20])==false){\nreturn;\n}\n_1f.onRemoveTag.call(_1d,_21[_20]);\n_21.splice(_20,1);\n$(_1d).tagbox(\"setValues\",_21);\n}else{\nvar _22=$(e.target).closest(\".tagbox-label\");\nif(_22.length){\nvar _20=parseInt(_22.attr(\"tagbox-index\"));\nvar _21=$(_1d).tagbox(\"getValues\");\n_1f.onClickTag.call(_1d,_21[_20]);\n}\n}\n$(this).find(\".textbox-text\").focus();\n})._bind(\"keyup.tagbox\",function(e){\n_23(_1d);\n})._bind(\"mouseover.tagbox\",function(e){\nif($(e.target).closest(\".textbox-button,.textbox-addon,.tagbox-label\").length){\n$(this).triggerHandler(\"mouseleave\");\n}else{\n$(this).find(\".textbox-text\").triggerHandler(\"mouseenter\");\n}\n})._bind(\"mouseleave.tagbox\",function(e){\n$(this).find(\".textbox-text\").triggerHandler(\"mouseleave\");\n});\n};\nfunction _23(_24){\nvar _25=$(_24).tagbox(\"options\");\nvar _26=$(_24).tagbox(\"textbox\");\nvar _27=$(_24).next();\nvar tmp=$(\"<span></span>\").appendTo(\"body\");\ntmp.attr(\"style\",_26.attr(\"style\"));\ntmp.css({position:\"absolute\",top:-9999,left:-9999,width:\"auto\",fontFamily:_26.css(\"fontFamily\"),fontSize:_26.css(\"fontSize\"),fontWeight:_26.css(\"fontWeight\"),whiteSpace:\"nowrap\"});\nvar _28=_29(_26.val());\nvar _2a=_29(_25.prompt||\"\");\ntmp.remove();\nvar _2b=Math.min(Math.max(_28,_2a)+20,_27.width());\n_26._outerWidth(_2b);\n_27.find(\".textbox-button\").linkbutton(\"resize\",{height:\"100%\"});\nfunction _29(val){\nvar s=val.replace(/&/g,\"&amp;\").replace(/\\s/g,\" \").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\");\ntmp.html(s);\nreturn tmp.outerWidth();\n};\n};\nfunction _2c(_2d){\nvar t=$(_2d);\nvar _2e=t.tagbox(\"options\");\nif(_2e.limitToList){\nvar _2f=t.tagbox(\"panel\");\nvar _30=_2f.children(\"div.combobox-item-hover\");\nif(_30.length){\n_30.removeClass(\"combobox-item-hover\");\nvar row=_2e.finder.getRow(_2d,_30);\nvar _31=row[_2e.valueField];\n$(_2d).tagbox(_30.hasClass(\"combobox-item-selected\")?\"unselect\":\"select\",_31);\n}\n$(_2d).tagbox(\"hidePanel\");\n}else{\nvar v=$.trim($(_2d).tagbox(\"getText\"));\nif(v!==\"\"){\nvar _32=$(_2d).tagbox(\"getValues\");\n_32.push(v);\n$(_2d).tagbox(\"setValues\",_32);\n}\n}\n};\nfunction _33(_34,_35){\n$(_34).combobox(\"setText\",\"\");\n_23(_34);\n$(_34).combobox(\"setValues\",_35);\n$(_34).combobox(\"setText\",\"\");\n$(_34).tagbox(\"validate\");\n};\n$.fn.tagbox=function(_36,_37){\nif(typeof _36==\"string\"){\nvar _38=$.fn.tagbox.methods[_36];\nif(_38){\nreturn _38(this,_37);\n}else{\nreturn this.combobox(_36,_37);\n}\n}\n_36=_36||{};\nreturn this.each(function(){\nvar _39=$.data(this,\"tagbox\");\nif(_39){\n$.extend(_39.options,_36);\n}else{\n$.data(this,\"tagbox\",{options:$.extend({},$.fn.tagbox.defaults,$.fn.tagbox.parseOptions(this),_36)});\n}\n_1(this);\n_1c(this);\n});\n};\n$.fn.tagbox.methods={options:function(jq){\nvar _3a=jq.combobox(\"options\");\nreturn $.extend($.data(jq[0],\"tagbox\").options,{width:_3a.width,height:_3a.height,originalValue:_3a.originalValue,disabled:_3a.disabled,readonly:_3a.readonly});\n},setValues:function(jq,_3b){\nreturn jq.each(function(){\n_33(this,_3b);\n});\n},reset:function(jq){\nreturn jq.each(function(){\n$(this).combobox(\"reset\").combobox(\"setText\",\"\");\n});\n}};\n$.fn.tagbox.parseOptions=function(_3c){\nreturn $.extend({},$.fn.combobox.parseOptions(_3c),$.parser.parseOptions(_3c,[]));\n};\n$.fn.tagbox.defaults=$.extend({},$.fn.combobox.defaults,{hasDownArrow:false,multiple:true,reversed:true,selectOnNavigation:false,tipOptions:$.extend({},$.fn.textbox.defaults.tipOptions,{showDelay:200}),val:function(_3d){\nvar vv=$(_3d).parent().prev().tagbox(\"getValues\");\nif($(_3d).is(\":focus\")){\nvv.push($(_3d).val());\n}\nreturn vv.join(\",\");\n},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){\nvar _3e=e.data.target;\nvar _3f=$(_3e).tagbox(\"options\");\nif(_3f.limitToList){\n_2c(_3e);\n}\n}}),keyHandler:$.extend({},$.fn.combobox.defaults.keyHandler,{enter:function(e){\n_2c(this);\n},query:function(q,e){\nvar _40=$(this).tagbox(\"options\");\nif(_40.limitToList){\n$.fn.combobox.defaults.keyHandler.query.call(this,q,e);\n}else{\n$(this).combobox(\"hidePanel\");\n}\n}}),tagFormatter:function(_41,row){\nvar _42=$(this).tagbox(\"options\");\nreturn row?row[_42.textField]:_41;\n},tagStyler:function(_43,row){\nreturn \"\";\n},onClickTag:function(_44){\n},onBeforeRemoveTag:function(_45){\n},onRemoveTag:function(_46){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.textbox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nvar _1=0;\nfunction _2(_3){\n$(_3).addClass(\"textbox-f\").hide();\nvar _4=$(\"<span class=\\\"textbox\\\">\"+\"<input class=\\\"textbox-text\\\" autocomplete=\\\"off\\\">\"+\"<input type=\\\"hidden\\\" class=\\\"textbox-value\\\">\"+\"</span>\").insertAfter(_3);\nvar _5=$(_3).attr(\"name\");\nif(_5){\n_4.find(\"input.textbox-value\").attr(\"name\",_5);\n$(_3).removeAttr(\"name\").attr(\"textboxName\",_5);\n}\nreturn _4;\n};\nfunction _6(_7){\nvar _8=$.data(_7,\"textbox\");\nvar _9=_8.options;\nvar tb=_8.textbox;\nvar _a=\"_easyui_textbox_input\"+(++_1);\ntb.addClass(_9.cls);\ntb.find(\".textbox-text\").remove();\nif(_9.multiline){\n$(\"<textarea id=\\\"\"+_a+\"\\\" class=\\\"textbox-text\\\" autocomplete=\\\"off\\\"></textarea>\").prependTo(tb);\n}else{\n$(\"<input id=\\\"\"+_a+\"\\\" type=\\\"\"+_9.type+\"\\\" class=\\\"textbox-text\\\" autocomplete=\\\"off\\\">\").prependTo(tb);\n}\n$(\"#\"+_a).attr(\"tabindex\",$(_7).attr(\"tabindex\")||\"\").css(\"text-align\",_7.style.textAlign||\"\");\ntb.find(\".textbox-addon\").remove();\nvar bb=_9.icons?$.extend(true,[],_9.icons):[];\nif(_9.iconCls){\nbb.push({iconCls:_9.iconCls,disabled:true});\n}\nif(bb.length){\nvar bc=$(\"<span class=\\\"textbox-addon\\\"></span>\").prependTo(tb);\nbc.addClass(\"textbox-addon-\"+_9.iconAlign);\nfor(var i=0;i<bb.length;i++){\nbc.append(\"<a href=\\\"javascript:;\\\" class=\\\"textbox-icon \"+bb[i].iconCls+\"\\\" icon-index=\\\"\"+i+\"\\\" tabindex=\\\"-1\\\"></a>\");\n}\n}\ntb.find(\".textbox-button\").remove();\nif(_9.buttonText||_9.buttonIcon){\nvar _b=$(\"<a href=\\\"javascript:;\\\" class=\\\"textbox-button\\\"></a>\").prependTo(tb);\n_b.addClass(\"textbox-button-\"+_9.buttonAlign).linkbutton({text:_9.buttonText,iconCls:_9.buttonIcon,onClick:function(){\nvar t=$(this).parent().prev();\nt.textbox(\"options\").onClickButton.call(t[0]);\n}});\n}\nif(_9.label){\nif(typeof _9.label==\"object\"){\n_8.label=$(_9.label);\n_8.label.attr(\"for\",_a);\n}else{\n$(_8.label).remove();\n_8.label=$(\"<label class=\\\"textbox-label\\\"></label>\").html(_9.label);\n_8.label.css(\"textAlign\",_9.labelAlign).attr(\"for\",_a);\nif(_9.labelPosition==\"after\"){\n_8.label.insertAfter(tb);\n}else{\n_8.label.insertBefore(_7);\n}\n_8.label.removeClass(\"textbox-label-left textbox-label-right textbox-label-top\");\n_8.label.addClass(\"textbox-label-\"+_9.labelPosition);\n}\n}else{\n$(_8.label).remove();\n}\n_c(_7);\n_d(_7,_9.disabled);\n_e(_7,_9.readonly);\n};\nfunction _f(_10){\nvar _11=$.data(_10,\"textbox\");\nvar tb=_11.textbox;\ntb.find(\".textbox-text\").validatebox(\"destroy\");\ntb.remove();\n$(_11.label).remove();\n$(_10).remove();\n};\nfunction _12(_13,_14){\nvar _15=$.data(_13,\"textbox\");\nvar _16=_15.options;\nvar tb=_15.textbox;\nvar _17=tb.parent();\nif(_14){\nif(typeof _14==\"object\"){\n$.extend(_16,_14);\n}else{\n_16.width=_14;\n}\n}\nif(isNaN(parseInt(_16.width))){\nvar c=$(_13).clone();\nc.css(\"visibility\",\"hidden\");\nc.insertAfter(_13);\n_16.width=c.outerWidth();\nc.remove();\n}\nvar _18=tb.is(\":visible\");\nif(!_18){\ntb.appendTo(\"body\");\n}\nvar _19=tb.find(\".textbox-text\");\nvar btn=tb.find(\".textbox-button\");\nvar _1a=tb.find(\".textbox-addon\");\nvar _1b=_1a.find(\".textbox-icon\");\nif(_16.height==\"auto\"){\n_19.css({margin:\"\",paddingTop:\"\",paddingBottom:\"\",height:\"\",lineHeight:\"\"});\n}\ntb._size(_16,_17);\nif(_16.label&&_16.labelPosition){\nif(_16.labelPosition==\"top\"){\n_15.label._size({width:_16.labelWidth==\"auto\"?tb.outerWidth():_16.labelWidth},tb);\nif(_16.height!=\"auto\"){\ntb._size(\"height\",tb.outerHeight()-_15.label.outerHeight());\n}\n}else{\n_15.label._size({width:_16.labelWidth,height:tb.outerHeight()},tb);\nif(!_16.multiline){\n_15.label.css(\"lineHeight\",_15.label.height()+\"px\");\n}\ntb._size(\"width\",tb.outerWidth()-_15.label.outerWidth());\n}\n}\nif(_16.buttonAlign==\"left\"||_16.buttonAlign==\"right\"){\nbtn.linkbutton(\"resize\",{height:tb.height()});\n}else{\nbtn.linkbutton(\"resize\",{width:\"100%\"});\n}\nvar _1c=tb.width()-_1b.length*_16.iconWidth-_1d(\"left\")-_1d(\"right\");\nvar _1e=_16.height==\"auto\"?_19.outerHeight():(tb.height()-_1d(\"top\")-_1d(\"bottom\"));\n_1a.css(_16.iconAlign,_1d(_16.iconAlign)+\"px\");\n_1a.css(\"top\",_1d(\"top\")+\"px\");\n_1b.css({width:_16.iconWidth+\"px\",height:_1e+\"px\"});\n_19.css({paddingLeft:(_13.style.paddingLeft||\"\"),paddingRight:(_13.style.paddingRight||\"\"),marginLeft:_1f(\"left\"),marginRight:_1f(\"right\"),marginTop:_1d(\"top\"),marginBottom:_1d(\"bottom\")});\nif(_16.multiline){\n_19.css({paddingTop:(_13.style.paddingTop||\"\"),paddingBottom:(_13.style.paddingBottom||\"\")});\n_19._outerHeight(_1e);\n}else{\n_19.css({paddingTop:0,paddingBottom:0,height:_1e+\"px\",lineHeight:_1e+\"px\"});\n}\n_19._outerWidth(_1c);\n_16.onResizing.call(_13,_16.width,_16.height);\nif(!_18){\ntb.insertAfter(_13);\n}\n_16.onResize.call(_13,_16.width,_16.height);\nfunction _1f(_20){\nreturn (_16.iconAlign==_20?_1a._outerWidth():0)+_1d(_20);\n};\nfunction _1d(_21){\nvar w=0;\nbtn.filter(\".textbox-button-\"+_21).each(function(){\nif(_21==\"left\"||_21==\"right\"){\nw+=$(this).outerWidth();\n}else{\nw+=$(this).outerHeight();\n}\n});\nreturn w;\n};\n};\nfunction _c(_22){\nvar _23=$(_22).textbox(\"options\");\nvar _24=$(_22).textbox(\"textbox\");\n_24.validatebox($.extend({},_23,{deltaX:function(_25){\nreturn $(_22).textbox(\"getTipX\",_25);\n},deltaY:function(_26){\nreturn $(_22).textbox(\"getTipY\",_26);\n},onBeforeValidate:function(){\n_23.onBeforeValidate.call(_22);\nvar box=$(this);\nif(!box.is(\":focus\")){\nif(box.val()!==_23.value){\n_23.oldInputValue=box.val();\nbox.val(_23.value);\n}\n}\n},onValidate:function(_27){\nvar box=$(this);\nif(_23.oldInputValue!=undefined){\nbox.val(_23.oldInputValue);\n_23.oldInputValue=undefined;\n}\nvar tb=box.parent();\nif(_27){\ntb.removeClass(\"textbox-invalid\");\n}else{\ntb.addClass(\"textbox-invalid\");\n}\n_23.onValidate.call(_22,_27);\n}}));\n};\nfunction _28(_29){\nvar _2a=$.data(_29,\"textbox\");\nvar _2b=_2a.options;\nvar tb=_2a.textbox;\nvar _2c=tb.find(\".textbox-text\");\n_2c.attr(\"placeholder\",_2b.prompt);\n_2c._unbind(\".textbox\");\n$(_2a.label)._unbind(\".textbox\");\nif(!_2b.disabled&&!_2b.readonly){\nif(_2a.label){\n$(_2a.label)._bind(\"click.textbox\",function(e){\nif(!_2b.hasFocusMe){\n_2c.focus();\n$(_29).textbox(\"setSelectionRange\",{start:0,end:_2c.val().length});\n}\n});\n}\n_2c._bind(\"blur.textbox\",function(e){\nif(!tb.hasClass(\"textbox-focused\")){\nreturn;\n}\n_2b.value=$(this).val();\nif(_2b.value==\"\"){\n$(this).val(_2b.prompt).addClass(\"textbox-prompt\");\n}else{\n$(this).removeClass(\"textbox-prompt\");\n}\ntb.removeClass(\"textbox-focused\");\ntb.closest(\".form-field\").removeClass(\"form-field-focused\");\n})._bind(\"focus.textbox\",function(e){\n_2b.hasFocusMe=true;\nif(tb.hasClass(\"textbox-focused\")){\nreturn;\n}\nif($(this).val()!=_2b.value){\n$(this).val(_2b.value);\n}\n$(this).removeClass(\"textbox-prompt\");\ntb.addClass(\"textbox-focused\");\ntb.closest(\".form-field\").addClass(\"form-field-focused\");\n});\nfor(var _2d in _2b.inputEvents){\n_2c._bind(_2d+\".textbox\",{target:_29},_2b.inputEvents[_2d]);\n}\n}\nvar _2e=tb.find(\".textbox-addon\");\n_2e._unbind()._bind(\"click\",{target:_29},function(e){\nvar _2f=$(e.target).closest(\"a.textbox-icon:not(.textbox-icon-disabled)\");\nif(_2f.length){\nvar _30=parseInt(_2f.attr(\"icon-index\"));\nvar _31=_2b.icons[_30];\nif(_31&&_31.handler){\n_31.handler.call(_2f[0],e);\n}\n_2b.onClickIcon.call(_29,_30);\n}\n});\n_2e.find(\".textbox-icon\").each(function(_32){\nvar _33=_2b.icons[_32];\nvar _34=$(this);\nif(!_33||_33.disabled||_2b.disabled||_2b.readonly){\n_34.addClass(\"textbox-icon-disabled\");\n}else{\n_34.removeClass(\"textbox-icon-disabled\");\n}\n});\nvar btn=tb.find(\".textbox-button\");\nbtn.linkbutton((_2b.disabled||_2b.readonly)?\"disable\":\"enable\");\ntb._unbind(\".textbox\")._bind(\"_resize.textbox\",function(e,_35){\nif($(this).hasClass(\"easyui-fluid\")||_35){\n_12(_29);\n}\nreturn false;\n});\n};\nfunction _d(_36,_37){\nvar _38=$.data(_36,\"textbox\");\nvar _39=_38.options;\nvar tb=_38.textbox;\nvar _3a=tb.find(\".textbox-text\");\nvar ss=$(_36).add(tb.find(\".textbox-value\"));\n_39.disabled=_37;\nif(_39.disabled){\n_3a.blur();\n_3a.validatebox(\"disable\");\ntb.addClass(\"textbox-disabled\");\nss._propAttr(\"disabled\",true);\n$(_38.label).addClass(\"textbox-label-disabled\");\n}else{\n_3a.validatebox(\"enable\");\ntb.removeClass(\"textbox-disabled\");\nss._propAttr(\"disabled\",false);\n$(_38.label).removeClass(\"textbox-label-disabled\");\n}\n};\nfunction _e(_3b,_3c){\nvar _3d=$.data(_3b,\"textbox\");\nvar _3e=_3d.options;\nvar tb=_3d.textbox;\nvar _3f=tb.find(\".textbox-text\");\n_3e.readonly=_3c==undefined?true:_3c;\nif(_3e.readonly){\n_3f.triggerHandler(\"blur.textbox\");\n}\n_3f.validatebox(\"readonly\",_3e.readonly);\nif(_3e.readonly){\ntb.addClass(\"textbox-readonly\");\n$(_3d.label).addClass(\"textbox-label-readonly\");\n}else{\ntb.removeClass(\"textbox-readonly\");\n$(_3d.label).removeClass(\"textbox-label-readonly\");\n}\n};\n$.fn.textbox=function(_40,_41){\nif(typeof _40==\"string\"){\nvar _42=$.fn.textbox.methods[_40];\nif(_42){\nreturn _42(this,_41);\n}else{\nreturn this.each(function(){\nvar _43=$(this).textbox(\"textbox\");\n_43.validatebox(_40,_41);\n});\n}\n}\n_40=_40||{};\nreturn this.each(function(){\nvar _44=$.data(this,\"textbox\");\nif(_44){\n$.extend(_44.options,_40);\nif(_40.value!=undefined){\n_44.options.originalValue=_40.value;\n}\n}else{\n_44=$.data(this,\"textbox\",{options:$.extend({},$.fn.textbox.defaults,$.fn.textbox.parseOptions(this),_40),textbox:_2(this)});\n_44.options.originalValue=_44.options.value;\n}\n_6(this);\n_28(this);\nif(_44.options.doSize){\n_12(this);\n}\nvar _45=_44.options.value;\n_44.options.value=\"\";\n$(this).textbox(\"initValue\",_45);\n});\n};\n$.fn.textbox.methods={options:function(jq){\nreturn $.data(jq[0],\"textbox\").options;\n},cloneFrom:function(jq,_46){\nreturn jq.each(function(){\nvar t=$(this);\nif(t.data(\"textbox\")){\nreturn;\n}\nif(!$(_46).data(\"textbox\")){\n$(_46).textbox();\n}\nvar _47=$.extend(true,{},$(_46).textbox(\"options\"));\nvar _48=t.attr(\"name\")||\"\";\nt.addClass(\"textbox-f\").hide();\nt.removeAttr(\"name\").attr(\"textboxName\",_48);\nvar _49=$(_46).next().clone().insertAfter(t);\nvar _4a=\"_easyui_textbox_input\"+(++_1);\n_49.find(\".textbox-value\").attr(\"name\",_48);\n_49.find(\".textbox-text\").attr(\"id\",_4a);\nvar _4b=$($(_46).textbox(\"label\")).clone();\nif(_4b.length){\n_4b.attr(\"for\",_4a);\nif(_47.labelPosition==\"after\"){\n_4b.insertAfter(t.next());\n}else{\n_4b.insertBefore(t);\n}\n}\n$.data(this,\"textbox\",{options:_47,textbox:_49,label:(_4b.length?_4b:undefined)});\nvar _4c=$(_46).textbox(\"button\");\nif(_4c.length){\nt.textbox(\"button\").linkbutton($.extend(true,{},_4c.linkbutton(\"options\")));\n}\n_28(this);\n_c(this);\n});\n},textbox:function(jq){\nreturn $.data(jq[0],\"textbox\").textbox.find(\".textbox-text\");\n},button:function(jq){\nreturn $.data(jq[0],\"textbox\").textbox.find(\".textbox-button\");\n},label:function(jq){\nreturn $.data(jq[0],\"textbox\").label;\n},destroy:function(jq){\nreturn jq.each(function(){\n_f(this);\n});\n},resize:function(jq,_4d){\nreturn jq.each(function(){\n_12(this,_4d);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_d(this,true);\n_28(this);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_d(this,false);\n_28(this);\n});\n},readonly:function(jq,_4e){\nreturn jq.each(function(){\n_e(this,_4e);\n_28(this);\n});\n},isValid:function(jq){\nreturn jq.textbox(\"textbox\").validatebox(\"isValid\");\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"setValue\",\"\");\n});\n},setText:function(jq,_4f){\nreturn jq.each(function(){\nvar _50=$(this).textbox(\"options\");\nvar _51=$(this).textbox(\"textbox\");\n_4f=_4f==undefined?\"\":String(_4f);\nif($(this).textbox(\"getText\")!=_4f){\n_51.val(_4f);\n}\n_50.value=_4f;\nif(!_51.is(\":focus\")){\nif(_4f){\n_51.removeClass(\"textbox-prompt\");\n}else{\n_51.val(_50.prompt).addClass(\"textbox-prompt\");\n}\n}\nif(_50.value){\n$(this).closest(\".form-field\").removeClass(\"form-field-empty\");\n}else{\n$(this).closest(\".form-field\").addClass(\"form-field-empty\");\n}\n$(this).textbox(\"validate\");\n});\n},initValue:function(jq,_52){\nreturn jq.each(function(){\nvar _53=$.data(this,\"textbox\");\n$(this).textbox(\"setText\",_52);\n_53.textbox.find(\".textbox-value\").val(_52);\n$(this).val(_52);\n});\n},setValue:function(jq,_54){\nreturn jq.each(function(){\nvar _55=$.data(this,\"textbox\").options;\nvar _56=$(this).textbox(\"getValue\");\n$(this).textbox(\"initValue\",_54);\nif(_56!=_54){\n_55.onChange.call(this,_54,_56);\n$(this).closest(\"form\").trigger(\"_change\",[this]);\n}\n});\n},getText:function(jq){\nvar _57=jq.textbox(\"textbox\");\nif(_57.is(\":focus\")){\nreturn _57.val();\n}else{\nreturn jq.textbox(\"options\").value;\n}\n},getValue:function(jq){\nreturn jq.data(\"textbox\").textbox.find(\".textbox-value\").val();\n},reset:function(jq){\nreturn jq.each(function(){\nvar _58=$(this).textbox(\"options\");\n$(this).textbox(\"textbox\").val(_58.originalValue);\n$(this).textbox(\"setValue\",_58.originalValue);\n});\n},getIcon:function(jq,_59){\nreturn jq.data(\"textbox\").textbox.find(\".textbox-icon:eq(\"+_59+\")\");\n},getTipX:function(jq,_5a){\nvar _5b=jq.data(\"textbox\");\nvar _5c=_5b.options;\nvar tb=_5b.textbox;\nvar _5d=tb.find(\".textbox-text\");\nvar _5a=_5a||_5c.tipPosition;\nvar p1=tb.offset();\nvar p2=_5d.offset();\nvar w1=tb.outerWidth();\nvar w2=_5d.outerWidth();\nif(_5a==\"right\"){\nreturn w1-w2-p2.left+p1.left;\n}else{\nif(_5a==\"left\"){\nreturn p1.left-p2.left;\n}else{\nreturn (w1-w2-p2.left+p1.left)/2-(p2.left-p1.left)/2;\n}\n}\n},getTipY:function(jq,_5e){\nvar _5f=jq.data(\"textbox\");\nvar _60=_5f.options;\nvar tb=_5f.textbox;\nvar _61=tb.find(\".textbox-text\");\nvar _5e=_5e||_60.tipPosition;\nvar p1=tb.offset();\nvar p2=_61.offset();\nvar h1=tb.outerHeight();\nvar h2=_61.outerHeight();\nif(_5e==\"left\"||_5e==\"right\"){\nreturn (h1-h2-p2.top+p1.top)/2-(p2.top-p1.top)/2;\n}else{\nif(_5e==\"bottom\"){\nreturn (h1-h2-p2.top+p1.top);\n}else{\nreturn (p1.top-p2.top);\n}\n}\n},getSelectionStart:function(jq){\nreturn jq.textbox(\"getSelectionRange\").start;\n},getSelectionRange:function(jq){\nvar _62=jq.textbox(\"textbox\")[0];\nvar _63=0;\nvar end=0;\nif(typeof _62.selectionStart==\"number\"){\n_63=_62.selectionStart;\nend=_62.selectionEnd;\n}else{\nif(_62.createTextRange){\nvar s=document.selection.createRange();\nvar _64=_62.createTextRange();\n_64.setEndPoint(\"EndToStart\",s);\n_63=_64.text.length;\nend=_63+s.text.length;\n}\n}\nreturn {start:_63,end:end};\n},setSelectionRange:function(jq,_65){\nreturn jq.each(function(){\nvar _66=$(this).textbox(\"textbox\")[0];\nvar _67=_65.start;\nvar end=_65.end;\nif(_66.setSelectionRange){\n_66.setSelectionRange(_67,end);\n}else{\nif(_66.createTextRange){\nvar _68=_66.createTextRange();\n_68.collapse();\n_68.moveEnd(\"character\",end);\n_68.moveStart(\"character\",_67);\n_68.select();\n}\n}\n});\n}};\n$.fn.textbox.parseOptions=function(_69){\nvar t=$(_69);\nreturn $.extend({},$.fn.validatebox.parseOptions(_69),$.parser.parseOptions(_69,[\"prompt\",\"iconCls\",\"iconAlign\",\"buttonText\",\"buttonIcon\",\"buttonAlign\",\"label\",\"labelPosition\",\"labelAlign\",{multiline:\"boolean\",iconWidth:\"number\",labelWidth:\"number\"}]),{value:(t.val()||undefined),type:(t.attr(\"type\")?t.attr(\"type\"):undefined)});\n};\n$.fn.textbox.defaults=$.extend({},$.fn.validatebox.defaults,{doSize:true,width:\"auto\",height:\"auto\",cls:null,prompt:\"\",value:\"\",type:\"text\",multiline:false,icons:[],iconCls:null,iconAlign:\"right\",iconWidth:26,buttonText:\"\",buttonIcon:null,buttonAlign:\"right\",label:null,labelWidth:\"auto\",labelPosition:\"before\",labelAlign:\"left\",inputEvents:{blur:function(e){\nvar t=$(e.data.target);\nvar _6a=t.textbox(\"options\");\nif(t.textbox(\"getValue\")!=_6a.value){\nt.textbox(\"setValue\",_6a.value);\n}\n},keydown:function(e){\nif(e.keyCode==13){\nvar t=$(e.data.target);\nt.textbox(\"setValue\",t.textbox(\"getText\"));\n}\n}},onChange:function(_6b,_6c){\n},onResizing:function(_6d,_6e){\n},onResize:function(_6f,_70){\n},onClickButton:function(){\n},onClickIcon:function(_71){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.timepicker.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"timepicker\");\nvar _4=_3.options;\n$(_2).addClass(\"timepicker-f\").combo($.extend({},_4,{onShowPanel:function(){\n_5(this);\n_6(_2);\n_13(_2,$(_2).timepicker(\"getValue\"));\n}}));\n$(_2).timepicker(\"initValue\",_4.value);\nfunction _5(_7){\nvar _8=$(_7).timepicker(\"options\");\nvar _9=$(_7).combo(\"panel\");\n_9._unbind(\".timepicker\")._bind(\"click.timepicker\",function(e){\nif($(e.target).hasClass(\"datebox-button-a\")){\nvar _a=parseInt($(e.target).attr(\"datebox-button-index\"));\n_8.buttons[_a].handler.call(e.target,_7);\n}\n});\n};\nfunction _6(_b){\nvar _c=$(_b).combo(\"panel\");\nif(_c.children(\"div.datebox-button\").length){\nreturn;\n}\nvar _d=$(\"<div class=\\\"datebox-button\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" style=\\\"width:100%\\\"><tr></tr></table></div>\").appendTo(_c);\nvar tr=_d.find(\"tr\");\nfor(var i=0;i<_4.buttons.length;i++){\nvar td=$(\"<td></td>\").appendTo(tr);\nvar _e=_4.buttons[i];\nvar t=$(\"<a class=\\\"datebox-button-a\\\" href=\\\"javascript:;\\\"></a>\").html($.isFunction(_e.text)?_e.text(_b):_e.text).appendTo(td);\nt.attr(\"datebox-button-index\",i);\n}\ntr.find(\"td\").css(\"width\",(100/_4.buttons.length)+\"%\");\n};\n};\nfunction _f(_10,_11){\nvar _12=$(_10).data(\"timepicker\").options;\n_13(_10,_11);\n_12.value=_14(_10);\n$(_10).combo(\"setValue\",_12.value).combo(\"setText\",_12.value);\n};\nfunction _13(_15,_16){\nvar _17=$(_15).data(\"timepicker\").options;\nif(_16){\nvar _18=_16.split(\" \");\nvar hm=_18[0].split(\":\");\n_17.selectingHour=parseInt(hm[0],10);\n_17.selectingMinute=parseInt(hm[1],10);\n_17.selectingAmpm=_18[1];\n}else{\n_17.selectingHour=12;\n_17.selectingMinute=0;\n_17.selectingAmpm=_17.ampm[0];\n}\n_19(_15);\n};\nfunction _14(_1a){\nvar _1b=$(_1a).data(\"timepicker\").options;\nvar h=_1b.selectingHour;\nvar m=_1b.selectingMinute;\nvar _1c=_1b.selectingAmpm;\nif(!_1c){\n_1c=_1b.ampm[0];\n}\nreturn (h<10?\"0\"+h:h)+\":\"+(m<10?\"0\"+m:m)+\" \"+_1c;\n};\nfunction _19(_1d){\nvar _1e=$(_1d).data(\"timepicker\").options;\nvar _1f=$(_1d).combo(\"panel\");\nvar _20=_1f.children(\".timepicker-panel\");\nif(!_20.length){\nvar _20=$(\"<div class=\\\"timepicker-panel f-column\\\"></div>\").prependTo(_1f);\n}\n_20.empty();\nif(_1e.panelHeight!=\"auto\"){\nvar _21=_1f.height()-_1f.find(\".datebox-button\").outerHeight();\n_20._outerHeight(_21);\n}\n_22(_1d);\n_23(_1d);\n_20.off(\".timepicker\");\n_20.on(\"click.timepicker\",\".title-hour\",function(e){\n_1e.selectingType=\"hour\";\n_19(_1d);\n}).on(\"click.timepicker\",\".title-minute\",function(e){\n_1e.selectingType=\"minute\";\n_19(_1d);\n}).on(\"click.timepicker\",\".title-am\",function(e){\n_1e.selectingAmpm=_1e.ampm[0];\n_19(_1d);\n}).on(\"click.timepicker\",\".title-pm\",function(e){\n_1e.selectingAmpm=_1e.ampm[1];\n_19(_1d);\n}).on(\"click.timepicker\",\".item\",function(e){\nvar _24=parseInt($(this).text(),10);\nif(_1e.selectingType==\"hour\"){\n_1e.selectingHour=_24;\n}else{\n_1e.selectingMinute=_24;\n}\n_19(_1d);\n});\n};\nfunction _22(_25){\nvar _26=$(_25).data(\"timepicker\").options;\nvar _27=$(_25).combo(\"panel\");\nvar _28=_27.find(\".timepicker-panel\");\nvar _29=_26.selectingHour;\nvar _2a=_26.selectingMinute;\n$(\"<div class=\\\"panel-header f-noshrink f-row f-content-center\\\">\"+\"<div class=\\\"title title-hour\\\">\"+(_29<10?\"0\"+_29:_29)+\"</div>\"+\"<div class=\\\"sep\\\">:</div>\"+\"<div class=\\\"title title-minute\\\">\"+(_2a<10?\"0\"+_2a:_2a)+\"</div>\"+\"<div class=\\\"ampm f-column\\\">\"+\"<div class=\\\"title title-am\\\">\"+_26.ampm[0]+\"</div>\"+\"<div class=\\\"title title-pm\\\">\"+_26.ampm[1]+\"</div>\"+\"</div>\"+\"</div>\").appendTo(_28);\nvar _2b=_28.find(\".panel-header\");\nif(_26.selectingType==\"hour\"){\n_2b.find(\".title-hour\").addClass(\"title-selected\");\n}else{\n_2b.find(\".title-minute\").addClass(\"title-selected\");\n}\nif(_26.selectingAmpm==_26.ampm[0]){\n_2b.find(\".title-am\").addClass(\"title-selected\");\n}\nif(_26.selectingAmpm==_26.ampm[1]){\n_2b.find(\".title-pm\").addClass(\"title-selected\");\n}\n};\nfunction _23(_2c){\nvar _2d=$(_2c).data(\"timepicker\").options;\nvar _2e=$(_2c).combo(\"panel\");\nvar _2f=_2e.find(\".timepicker-panel\");\nvar _30=$(\"<div class=\\\"clock-wrap f-full f-column f-content-center\\\">\"+\"</div>\").appendTo(_2f);\nvar _31=_30.outerWidth();\nvar _32=_30.outerHeight();\nvar _33=Math.min(_31,_32)-20;\nvar _34=_33/2;\n_31=_33;\n_32=_33;\nvar _35=_2d.selectingType==\"hour\"?_2d.selectingHour:_2d.selectingMinute;\nvar _36=_35/(_2d.selectingType==\"hour\"?12:60)*360;\n_36=parseFloat(_36).toFixed(4);\nvar _37={transform:\"rotate(\"+_36+\"deg)\"};\nvar _38={width:_31+\"px\",height:_32+\"px\",marginLeft:-_31/2+\"px\",marginTop:-_32/2+\"px\"};\nvar _39=[];\n_39.push(\"<div class=\\\"clock\\\">\");\n_39.push(\"<div class=\\\"center\\\"></div>\");\n_39.push(\"<div class=\\\"hand\\\">\");\n_39.push(\"<div class=\\\"drag\\\"></div>\");\n_39.push(\"</div>\");\nvar _3a=_3b();\nfor(var i=0;i<_3a.length;i++){\nvar _3c=_3a[i];\nvar cls=\"item f-column f-content-center\";\nif(_3c==_35){\ncls+=\" item-selected\";\n}\nvar _36=_3c/(_2d.selectingType==\"hour\"?12:60)*360*Math.PI/180;\nvar x=(_34-20)*Math.sin(_36);\nvar y=-(_34-20)*Math.cos(_36);\n_36=parseFloat(_36).toFixed(4);\nx=parseFloat(x).toFixed(4);\ny=parseFloat(y).toFixed(4);\nvar _3d={transform:\"translate(\"+x+\"px,\"+y+\"px)\"};\nvar _3d=\"transform:translate(\"+x+\"px,\"+y+\"px)\";\n_39.push(\"<div class=\\\"\"+cls+\"\\\" style=\\\"\"+_3d+\"\\\">\"+_3c+\"</div>\");\n}\n_39.push(\"</div>\");\n_30.html(_39.join(\"\"));\n_30.find(\".clock\").css(_38);\n_30.find(\".hand\").css(_37);\nfunction _3b(){\nvar _3e=[];\nif(_2d.selectingType==\"hour\"){\nfor(var i=0;i<12;i++){\n_3e.push(String(i));\n}\n_3e[0]=\"12\";\n}else{\nfor(var i=0;i<60;i+=5){\n_3e.push(i<10?\"0\"+i:String(i));\n}\n_3e[0]=\"00\";\n}\nreturn _3e;\n};\n};\n$.fn.timepicker=function(_3f,_40){\nif(typeof _3f==\"string\"){\nvar _41=$.fn.timepicker.methods[_3f];\nif(_41){\nreturn _41(this,_40);\n}else{\nreturn this.combo(_3f,_40);\n}\n}\n_3f=_3f||{};\nreturn this.each(function(){\nvar _42=$.data(this,\"timepicker\");\nif(_42){\n$.extend(_42.options,_3f);\n}else{\n$.data(this,\"timepicker\",{options:$.extend({},$.fn.timepicker.defaults,$.fn.timepicker.parseOptions(this),_3f)});\n}\n_1(this);\n});\n};\n$.fn.timepicker.methods={options:function(jq){\nvar _43=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"timepicker\").options,{width:_43.width,height:_43.height,originalValue:_43.originalValue,disabled:_43.disabled,readonly:_43.readonly});\n},initValue:function(jq,_44){\nreturn jq.each(function(){\nvar _45=$(this).timepicker(\"options\");\n_45.value=_44;\n_13(this,_44);\nif(_44){\n_45.value=_14(this);\n$(this).combo(\"initValue\",_45.value).combo(\"setText\",_45.value);\n}\n});\n},setValue:function(jq,_46){\nreturn jq.each(function(){\n_f(this,_46);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _47=$(this).timepicker(\"options\");\n$(this).timepicker(\"setValue\",_47.originalValue);\n});\n}};\n$.fn.timepicker.parseOptions=function(_48){\nreturn $.extend({},$.fn.combo.parseOptions(_48),$.parser.parseOptions(_48,[]));\n};\n$.fn.timepicker.defaults=$.extend({},$.fn.combo.defaults,{closeText:\"Close\",okText:\"Ok\",buttons:[{text:function(_49){\nreturn $(_49).timepicker(\"options\").okText;\n},handler:function(_4a){\n$(_4a).timepicker(\"setValue\",_14(_4a));\n$(this).closest(\"div.combo-panel\").panel(\"close\");\n}},{text:function(_4b){\nreturn $(_4b).timepicker(\"options\").closeText;\n},handler:function(_4c){\n$(this).closest(\"div.combo-panel\").panel(\"close\");\n}}],editable:false,ampm:[\"am\",\"pm\"],value:\"\",selectingHour:12,selectingMinute:0,selectingType:\"hour\"});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.timespinner.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"timespinner\").options;\n$(_2).addClass(\"timespinner-f\").spinner(_3);\nvar _4=_3.formatter.call(_2,_3.parser.call(_2,_3.value));\n$(_2).timespinner(\"initValue\",_4);\n};\nfunction _5(e){\nvar _6=e.data.target;\nvar _7=$.data(_6,\"timespinner\").options;\nvar _8=$(_6).timespinner(\"getSelectionStart\");\nfor(var i=0;i<_7.selections.length;i++){\nvar _9=_7.selections[i];\nif(_8>=_9[0]&&_8<=_9[1]){\n_a(_6,i);\nreturn;\n}\n}\n};\nfunction _a(_b,_c){\nvar _d=$.data(_b,\"timespinner\").options;\nif(_c!=undefined){\n_d.highlight=_c;\n}\nvar _e=_d.selections[_d.highlight];\nif(_e){\nvar tb=$(_b).timespinner(\"textbox\");\n$(_b).timespinner(\"setSelectionRange\",{start:_e[0],end:_e[1]});\ntb.focus();\n}\n};\nfunction _f(_10,_11){\nvar _12=$.data(_10,\"timespinner\").options;\nvar _11=_12.parser.call(_10,_11);\nvar _13=_12.formatter.call(_10,_11);\n$(_10).spinner(\"setValue\",_13);\n};\nfunction _14(_15,_16){\nvar _17=$.data(_15,\"timespinner\").options;\nvar s=$(_15).timespinner(\"getValue\");\nvar _18=_17.selections[_17.highlight];\nvar s1=s.substring(0,_18[0]);\nvar s2=s.substring(_18[0],_18[1]);\nvar s3=s.substring(_18[1]);\nif(s2==_17.ampm[0]){\ns2=_17.ampm[1];\n}else{\nif(s2==_17.ampm[1]){\ns2=_17.ampm[0];\n}else{\ns2=parseInt(s2,10)||0;\nif(_17.selections.length-4==_17.highlight&&_17.hour12){\nif(s2==12){\ns2=0;\n}else{\nif(s2==11&&!_16){\nvar tmp=s3.replace(_17.ampm[0],_17.ampm[1]);\nif(s3!=tmp){\ns3=tmp;\n}else{\ns3=s3.replace(_17.ampm[1],_17.ampm[0]);\n}\n}\n}\n}\ns2=s2+_17.increment*(_16?-1:1);\n}\n}\nvar v=s1+s2+s3;\n$(_15).timespinner(\"setValue\",v);\n_a(_15);\n};\n$.fn.timespinner=function(_19,_1a){\nif(typeof _19==\"string\"){\nvar _1b=$.fn.timespinner.methods[_19];\nif(_1b){\nreturn _1b(this,_1a);\n}else{\nreturn this.spinner(_19,_1a);\n}\n}\n_19=_19||{};\nreturn this.each(function(){\nvar _1c=$.data(this,\"timespinner\");\nif(_1c){\n$.extend(_1c.options,_19);\n}else{\n$.data(this,\"timespinner\",{options:$.extend({},$.fn.timespinner.defaults,$.fn.timespinner.parseOptions(this),_19)});\n}\n_1(this);\n});\n};\n$.fn.timespinner.methods={options:function(jq){\nvar _1d=jq.data(\"spinner\")?jq.spinner(\"options\"):{};\nreturn $.extend($.data(jq[0],\"timespinner\").options,{width:_1d.width,value:_1d.value,originalValue:_1d.originalValue,disabled:_1d.disabled,readonly:_1d.readonly});\n},setValue:function(jq,_1e){\nreturn jq.each(function(){\n_f(this,_1e);\n});\n},getHours:function(jq){\nvar _1f=$.data(jq[0],\"timespinner\").options;\nvar _20=_1f.parser.call(jq[0],jq.timespinner(\"getValue\"));\nreturn _20?_20.getHours():null;\n},getMinutes:function(jq){\nvar _21=$.data(jq[0],\"timespinner\").options;\nvar _22=_21.parser.call(jq[0],jq.timespinner(\"getValue\"));\nreturn _22?_22.getMinutes():null;\n},getSeconds:function(jq){\nvar _23=$.data(jq[0],\"timespinner\").options;\nvar _24=_23.parser.call(jq[0],jq.timespinner(\"getValue\"));\nreturn _24?_24.getSeconds():null;\n}};\n$.fn.timespinner.parseOptions=function(_25){\nreturn $.extend({},$.fn.spinner.parseOptions(_25),$.parser.parseOptions(_25,[\"separator\",{hour12:\"boolean\",showSeconds:\"boolean\",highlight:\"number\"}]));\n};\n$.fn.timespinner.defaults=$.extend({},$.fn.spinner.defaults,{inputEvents:$.extend({},$.fn.spinner.defaults.inputEvents,{click:function(e){\n_5.call(this,e);\n},blur:function(e){\nvar t=$(e.data.target);\nt.timespinner(\"setValue\",t.timespinner(\"getText\"));\n},keydown:function(e){\nif(e.keyCode==13){\nvar t=$(e.data.target);\nt.timespinner(\"setValue\",t.timespinner(\"getText\"));\n}\n}}),formatter:function(_26){\nif(!_26){\nreturn \"\";\n}\nvar _27=$(this).timespinner(\"options\");\nvar _28=_26.getHours();\nvar _29=_26.getMinutes();\nvar _2a=_26.getSeconds();\nvar _2b=\"\";\nif(_27.hour12){\n_2b=_28>=12?_27.ampm[1]:_27.ampm[0];\n_28=_28%12;\nif(_28==0){\n_28=12;\n}\n}\nvar tt=[_2c(_28),_2c(_29)];\nif(_27.showSeconds){\ntt.push(_2c(_2a));\n}\nvar s=tt.join(_27.separator)+\" \"+_2b;\nreturn $.trim(s);\nfunction _2c(_2d){\nreturn (_2d<10?\"0\":\"\")+_2d;\n};\n},parser:function(s){\nvar _2e=$(this).timespinner(\"options\");\nvar _2f=_30(s);\nif(_2f){\nvar min=_30(_2e.min);\nvar max=_30(_2e.max);\nif(min&&min>_2f){\n_2f=min;\n}\nif(max&&max<_2f){\n_2f=max;\n}\n}\nreturn _2f;\nfunction _30(s){\nif(!s){\nreturn null;\n}\nvar ss=s.split(\" \");\nvar tt=ss[0].split(_2e.separator);\nvar _31=parseInt(tt[0],10)||0;\nvar _32=parseInt(tt[1],10)||0;\nvar _33=parseInt(tt[2],10)||0;\nif(_2e.hour12){\nvar _34=ss[1];\nif(_34==_2e.ampm[1]&&_31<12){\n_31+=12;\n}else{\nif(_34==_2e.ampm[0]&&_31==12){\n_31-=12;\n}\n}\n}\nreturn new Date(1900,0,0,_31,_32,_33);\n};\n},selections:[[0,2],[3,5],[6,8],[9,11]],separator:\":\",showSeconds:false,highlight:0,hour12:false,ampm:[\"AM\",\"PM\"],spin:function(_35){\n_14(this,_35);\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.tooltip.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\n$(_2).addClass(\"tooltip-f\");\n};\nfunction _3(_4){\nvar _5=$.data(_4,\"tooltip\").options;\n$(_4)._unbind(\".tooltip\")._bind(_5.showEvent+\".tooltip\",function(e){\n$(_4).tooltip(\"show\",e);\n})._bind(_5.hideEvent+\".tooltip\",function(e){\n$(_4).tooltip(\"hide\",e);\n})._bind(\"mousemove.tooltip\",function(e){\nif(_5.trackMouse){\n_5.trackMouseX=e.pageX;\n_5.trackMouseY=e.pageY;\n$(_4).tooltip(\"reposition\");\n}\n});\n};\nfunction _6(_7){\nvar _8=$.data(_7,\"tooltip\");\nif(_8.showTimer){\nclearTimeout(_8.showTimer);\n_8.showTimer=null;\n}\nif(_8.hideTimer){\nclearTimeout(_8.hideTimer);\n_8.hideTimer=null;\n}\n};\nfunction _9(_a){\nvar _b=$.data(_a,\"tooltip\");\nif(!_b||!_b.tip){\nreturn;\n}\nvar _c=_b.options;\nvar _d=_b.tip;\nvar _e={left:-100000,top:-100000};\nif($(_a).is(\":visible\")){\n_e=_f(_c.position);\nif(_c.position==\"top\"&&_e.top<0){\n_e=_f(\"bottom\");\n}else{\nif((_c.position==\"bottom\")&&(_e.top+_d._outerHeight()>$(window)._outerHeight()+$(document).scrollTop())){\n_e=_f(\"top\");\n}\n}\nif(_e.left<0){\nif(_c.position==\"left\"){\n_e=_f(\"right\");\n}else{\n$(_a).tooltip(\"arrow\").css(\"left\",_d._outerWidth()/2+_e.left);\n_e.left=0;\n}\n}else{\nif(_e.left+_d._outerWidth()>$(window)._outerWidth()+$(document)._scrollLeft()){\nif(_c.position==\"right\"){\n_e=_f(\"left\");\n}else{\nvar _10=_e.left;\n_e.left=$(window)._outerWidth()+$(document)._scrollLeft()-_d._outerWidth();\n$(_a).tooltip(\"arrow\").css(\"left\",_d._outerWidth()/2-(_e.left-_10));\n}\n}\n}\n}\n_d.css({left:_e.left,top:_e.top,zIndex:(_c.zIndex!=undefined?_c.zIndex:($.fn.window?$.fn.window.defaults.zIndex++:\"\"))});\n_c.onPosition.call(_a,_e.left,_e.top);\nfunction _f(_11){\n_c.position=_11||\"bottom\";\n_d.removeClass(\"tooltip-top tooltip-bottom tooltip-left tooltip-right\").addClass(\"tooltip-\"+_c.position);\nvar _12,top;\nvar _13=$.isFunction(_c.deltaX)?_c.deltaX.call(_a,_c.position):_c.deltaX;\nvar _14=$.isFunction(_c.deltaY)?_c.deltaY.call(_a,_c.position):_c.deltaY;\nif(_c.trackMouse){\nt=$();\n_12=_c.trackMouseX+_13;\ntop=_c.trackMouseY+_14;\n}else{\nvar t=$(_a);\n_12=t.offset().left+_13;\ntop=t.offset().top+_14;\n}\nswitch(_c.position){\ncase \"right\":\n_12+=t._outerWidth()+12+(_c.trackMouse?12:0);\nif(_c.valign==\"middle\"){\ntop-=(_d._outerHeight()-t._outerHeight())/2;\n}\nbreak;\ncase \"left\":\n_12-=_d._outerWidth()+12+(_c.trackMouse?12:0);\nif(_c.valign==\"middle\"){\ntop-=(_d._outerHeight()-t._outerHeight())/2;\n}\nbreak;\ncase \"top\":\n_12-=(_d._outerWidth()-t._outerWidth())/2;\ntop-=_d._outerHeight()+12+(_c.trackMouse?12:0);\nbreak;\ncase \"bottom\":\n_12-=(_d._outerWidth()-t._outerWidth())/2;\ntop+=t._outerHeight()+12+(_c.trackMouse?12:0);\nbreak;\n}\nreturn {left:_12,top:top};\n};\n};\nfunction _15(_16,e){\nvar _17=$.data(_16,\"tooltip\");\nvar _18=_17.options;\nvar tip=_17.tip;\nif(!tip){\ntip=$(\"<div tabindex=\\\"-1\\\" class=\\\"tooltip\\\">\"+\"<div class=\\\"tooltip-content\\\"></div>\"+\"<div class=\\\"tooltip-arrow-outer\\\"></div>\"+\"<div class=\\\"tooltip-arrow\\\"></div>\"+\"</div>\").appendTo(\"body\");\n_17.tip=tip;\n_19(_16);\n}\n_6(_16);\n_17.showTimer=setTimeout(function(){\n$(_16).tooltip(\"reposition\");\ntip.show();\n_18.onShow.call(_16,e);\nvar _1a=tip.children(\".tooltip-arrow-outer\");\nvar _1b=tip.children(\".tooltip-arrow\");\nvar bc=\"border-\"+_18.position+\"-color\";\n_1a.add(_1b).css({borderTopColor:\"\",borderBottomColor:\"\",borderLeftColor:\"\",borderRightColor:\"\"});\n_1a.css(bc,tip.css(bc));\n_1b.css(bc,tip.css(\"backgroundColor\"));\n},_18.showDelay);\n};\nfunction _1c(_1d,e){\nvar _1e=$.data(_1d,\"tooltip\");\nif(_1e&&_1e.tip){\n_6(_1d);\n_1e.hideTimer=setTimeout(function(){\n_1e.tip.hide();\n_1e.options.onHide.call(_1d,e);\n},_1e.options.hideDelay);\n}\n};\nfunction _19(_1f,_20){\nvar _21=$.data(_1f,\"tooltip\");\nvar _22=_21.options;\nif(_20){\n_22.content=_20;\n}\nif(!_21.tip){\nreturn;\n}\nvar cc=typeof _22.content==\"function\"?_22.content.call(_1f):_22.content;\n_21.tip.children(\".tooltip-content\").html(cc);\n_22.onUpdate.call(_1f,cc);\n};\nfunction _23(_24){\nvar _25=$.data(_24,\"tooltip\");\nif(_25){\n_6(_24);\nvar _26=_25.options;\nif(_25.tip){\n_25.tip.remove();\n}\nif(_26._title){\n$(_24).attr(\"title\",_26._title);\n}\n$.removeData(_24,\"tooltip\");\n$(_24)._unbind(\".tooltip\").removeClass(\"tooltip-f\");\n_26.onDestroy.call(_24);\n}\n};\n$.fn.tooltip=function(_27,_28){\nif(typeof _27==\"string\"){\nreturn $.fn.tooltip.methods[_27](this,_28);\n}\n_27=_27||{};\nreturn this.each(function(){\nvar _29=$.data(this,\"tooltip\");\nif(_29){\n$.extend(_29.options,_27);\n}else{\n$.data(this,\"tooltip\",{options:$.extend({},$.fn.tooltip.defaults,$.fn.tooltip.parseOptions(this),_27)});\n_1(this);\n}\n_3(this);\n_19(this);\n});\n};\n$.fn.tooltip.methods={options:function(jq){\nreturn $.data(jq[0],\"tooltip\").options;\n},tip:function(jq){\nreturn $.data(jq[0],\"tooltip\").tip;\n},arrow:function(jq){\nreturn jq.tooltip(\"tip\").children(\".tooltip-arrow-outer,.tooltip-arrow\");\n},show:function(jq,e){\nreturn jq.each(function(){\n_15(this,e);\n});\n},hide:function(jq,e){\nreturn jq.each(function(){\n_1c(this,e);\n});\n},update:function(jq,_2a){\nreturn jq.each(function(){\n_19(this,_2a);\n});\n},reposition:function(jq){\nreturn jq.each(function(){\n_9(this);\n});\n},destroy:function(jq){\nreturn jq.each(function(){\n_23(this);\n});\n}};\n$.fn.tooltip.parseOptions=function(_2b){\nvar t=$(_2b);\nvar _2c=$.extend({},$.parser.parseOptions(_2b,[\"position\",\"showEvent\",\"hideEvent\",\"content\",{trackMouse:\"boolean\",deltaX:\"number\",deltaY:\"number\",showDelay:\"number\",hideDelay:\"number\"}]),{_title:t.attr(\"title\")});\nt.attr(\"title\",\"\");\nif(!_2c.content){\n_2c.content=_2c._title;\n}\nreturn _2c;\n};\n$.fn.tooltip.defaults={position:\"bottom\",valign:\"middle\",content:null,trackMouse:false,deltaX:0,deltaY:0,showEvent:\"mouseenter\",hideEvent:\"mouseleave\",showDelay:200,hideDelay:100,onShow:function(e){\n},onHide:function(e){\n},onUpdate:function(_2d){\n},onPosition:function(_2e,top){\n},onDestroy:function(){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.tree.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$(_2);\n_3.addClass(\"tree\");\nreturn _3;\n};\nfunction _4(_5){\nvar _6=$.data(_5,\"tree\").options;\n$(_5)._unbind()._bind(\"mouseover\",function(e){\nvar tt=$(e.target);\nvar _7=tt.closest(\"div.tree-node\");\nif(!_7.length){\nreturn;\n}\n_7.addClass(\"tree-node-hover\");\nif(tt.hasClass(\"tree-hit\")){\nif(tt.hasClass(\"tree-expanded\")){\ntt.addClass(\"tree-expanded-hover\");\n}else{\ntt.addClass(\"tree-collapsed-hover\");\n}\n}\ne.stopPropagation();\n})._bind(\"mouseout\",function(e){\nvar tt=$(e.target);\nvar _8=tt.closest(\"div.tree-node\");\nif(!_8.length){\nreturn;\n}\n_8.removeClass(\"tree-node-hover\");\nif(tt.hasClass(\"tree-hit\")){\nif(tt.hasClass(\"tree-expanded\")){\ntt.removeClass(\"tree-expanded-hover\");\n}else{\ntt.removeClass(\"tree-collapsed-hover\");\n}\n}\ne.stopPropagation();\n})._bind(\"click\",function(e){\nvar tt=$(e.target);\nvar _9=tt.closest(\"div.tree-node\");\nif(!_9.length){\nreturn;\n}\nif(tt.hasClass(\"tree-hit\")){\n_85(_5,_9[0]);\nreturn false;\n}else{\nif(tt.hasClass(\"tree-checkbox\")){\n_34(_5,_9[0]);\nreturn false;\n}else{\n_dc(_5,_9[0]);\n_6.onClick.call(_5,_c(_5,_9[0]));\n}\n}\ne.stopPropagation();\n})._bind(\"dblclick\",function(e){\nvar _a=$(e.target).closest(\"div.tree-node\");\nif(!_a.length){\nreturn;\n}\n_dc(_5,_a[0]);\n_6.onDblClick.call(_5,_c(_5,_a[0]));\ne.stopPropagation();\n})._bind(\"contextmenu\",function(e){\nvar _b=$(e.target).closest(\"div.tree-node\");\nif(!_b.length){\nreturn;\n}\n_6.onContextMenu.call(_5,e,_c(_5,_b[0]));\ne.stopPropagation();\n});\n};\nfunction _d(_e){\nvar _f=$.data(_e,\"tree\").options;\n_f.dnd=false;\nvar _10=$(_e).find(\"div.tree-node\");\n_10.draggable(\"disable\");\n_10.css(\"cursor\",\"pointer\");\n};\nfunction _11(_12){\nvar _13=$.data(_12,\"tree\");\nvar _14=_13.options;\nvar _15=_13.tree;\n_13.disabledNodes=[];\n_14.dnd=true;\n_15.find(\"div.tree-node\").draggable({disabled:false,revert:true,cursor:\"pointer\",proxy:function(_16){\nvar p=$(\"<div class=\\\"tree-node-proxy\\\"></div>\").appendTo(\"body\");\np.html(\"<span class=\\\"tree-dnd-icon tree-dnd-no\\\">&nbsp;</span>\"+$(_16).find(\".tree-title\").html());\np.hide();\nreturn p;\n},deltaX:15,deltaY:15,onBeforeDrag:function(e){\nif(_14.onBeforeDrag.call(_12,_c(_12,this))==false){\nreturn false;\n}\nif($(e.target).hasClass(\"tree-hit\")||$(e.target).hasClass(\"tree-checkbox\")){\nreturn false;\n}\nif(e.which!=1){\nreturn false;\n}\nvar _17=$(this).find(\"span.tree-indent\");\nif(_17.length){\ne.data.offsetWidth-=_17.length*_17.width();\n}\n},onStartDrag:function(e){\n$(this).next(\"ul\").find(\"div.tree-node\").each(function(){\n$(this).droppable(\"disable\");\n_13.disabledNodes.push(this);\n});\n$(this).draggable(\"proxy\").css({left:-10000,top:-10000});\n_14.onStartDrag.call(_12,_c(_12,this));\nvar _18=_c(_12,this);\nif(_18.id==undefined){\n_18.id=\"easyui_tree_node_id_temp\";\n_60(_12,_18);\n}\n_13.draggingNodeId=_18.id;\n},onDrag:function(e){\nvar x1=e.pageX,y1=e.pageY,x2=e.data.startX,y2=e.data.startY;\nvar d=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));\nif(d>3){\n$(this).draggable(\"proxy\").show();\n}\nthis.pageY=e.pageY;\n},onStopDrag:function(){\nfor(var i=0;i<_13.disabledNodes.length;i++){\n$(_13.disabledNodes[i]).droppable(\"enable\");\n}\n_13.disabledNodes=[];\nvar _19=_d0(_12,_13.draggingNodeId);\nif(_19&&_19.id==\"easyui_tree_node_id_temp\"){\n_19.id=\"\";\n_60(_12,_19);\n}\n_14.onStopDrag.call(_12,_19);\n}}).droppable({accept:\"div.tree-node\",onDragEnter:function(e,_1a){\nif(_14.onDragEnter.call(_12,this,_1b(_1a))==false){\n_1c(_1a,false);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\n$(this).droppable(\"disable\");\n_13.disabledNodes.push(this);\n}\n},onDragOver:function(e,_1d){\nif($(this).droppable(\"options\").disabled){\nreturn;\n}\nvar _1e=_1d.pageY;\nvar top=$(this).offset().top;\nvar _1f=top+$(this).outerHeight();\n_1c(_1d,true);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\nif(_1e>top+(_1f-top)/2){\nif(_1f-_1e<5){\n$(this).addClass(\"tree-node-bottom\");\n}else{\n$(this).addClass(\"tree-node-append\");\n}\n}else{\nif(_1e-top<5){\n$(this).addClass(\"tree-node-top\");\n}else{\n$(this).addClass(\"tree-node-append\");\n}\n}\nif(_14.onDragOver.call(_12,this,_1b(_1d))==false){\n_1c(_1d,false);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\n$(this).droppable(\"disable\");\n_13.disabledNodes.push(this);\n}\n},onDragLeave:function(e,_20){\n_1c(_20,false);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\n_14.onDragLeave.call(_12,this,_1b(_20));\n},onDrop:function(e,_21){\nvar _22=this;\nvar _23,_24;\nif($(this).hasClass(\"tree-node-append\")){\n_23=_25;\n_24=\"append\";\n}else{\n_23=_26;\n_24=$(this).hasClass(\"tree-node-top\")?\"top\":\"bottom\";\n}\nif(_14.onBeforeDrop.call(_12,_22,_1b(_21),_24)==false){\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\nreturn;\n}\n_23(_21,_22,_24);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\n}});\nfunction _1b(_27,pop){\nreturn $(_27).closest(\"ul.tree\").tree(pop?\"pop\":\"getData\",_27);\n};\nfunction _1c(_28,_29){\nvar _2a=$(_28).draggable(\"proxy\").find(\"span.tree-dnd-icon\");\n_2a.removeClass(\"tree-dnd-yes tree-dnd-no\").addClass(_29?\"tree-dnd-yes\":\"tree-dnd-no\");\n};\nfunction _25(_2b,_2c){\nif(_c(_12,_2c).state==\"closed\"){\n_79(_12,_2c,function(){\n_2d();\n});\n}else{\n_2d();\n}\nfunction _2d(){\nvar _2e=_1b(_2b,true);\n$(_12).tree(\"append\",{parent:_2c,data:[_2e]});\n_14.onDrop.call(_12,_2c,_2e,\"append\");\n};\n};\nfunction _26(_2f,_30,_31){\nvar _32={};\nif(_31==\"top\"){\n_32.before=_30;\n}else{\n_32.after=_30;\n}\nvar _33=_1b(_2f,true);\n_32.data=_33;\n$(_12).tree(\"insert\",_32);\n_14.onDrop.call(_12,_30,_33,_31);\n};\n};\nfunction _34(_35,_36,_37,_38){\nvar _39=$.data(_35,\"tree\");\nvar _3a=_39.options;\nif(!_3a.checkbox){\nreturn;\n}\nvar _3b=_c(_35,_36);\nif(!_3b.checkState){\nreturn;\n}\nvar ck=$(_36).find(\".tree-checkbox\");\nif(_37==undefined){\nif(ck.hasClass(\"tree-checkbox1\")){\n_37=false;\n}else{\nif(ck.hasClass(\"tree-checkbox0\")){\n_37=true;\n}else{\nif(_3b._checked==undefined){\n_3b._checked=$(_36).find(\".tree-checkbox\").hasClass(\"tree-checkbox1\");\n}\n_37=!_3b._checked;\n}\n}\n}\n_3b._checked=_37;\nif(_37){\nif(ck.hasClass(\"tree-checkbox1\")){\nreturn;\n}\n}else{\nif(ck.hasClass(\"tree-checkbox0\")){\nreturn;\n}\n}\nif(!_38){\nif(_3a.onBeforeCheck.call(_35,_3b,_37)==false){\nreturn;\n}\n}\nif(_3a.cascadeCheck){\n_3c(_35,_3b,_37);\n_3d(_35,_3b);\n}else{\n_3e(_35,_3b,_37?\"1\":\"0\");\n}\nif(!_38){\n_3a.onCheck.call(_35,_3b,_37);\n}\n};\nfunction _3c(_3f,_40,_41){\nvar _42=$.data(_3f,\"tree\").options;\nvar _43=_41?1:0;\n_3e(_3f,_40,_43);\nif(_42.deepCheck){\n$.easyui.forEach(_40.children||[],true,function(n){\n_3e(_3f,n,_43);\n});\n}else{\nvar _44=[];\nif(_40.children&&_40.children.length){\n_44.push(_40);\n}\n$.easyui.forEach(_40.children||[],true,function(n){\nif(!n.hidden){\n_3e(_3f,n,_43);\nif(n.children&&n.children.length){\n_44.push(n);\n}\n}\n});\nfor(var i=_44.length-1;i>=0;i--){\nvar _45=_44[i];\n_3e(_3f,_45,_46(_45));\n}\n}\n};\nfunction _3e(_47,_48,_49){\nvar _4a=$.data(_47,\"tree\").options;\nif(!_48.checkState||_49==undefined){\nreturn;\n}\nif(_48.hidden&&!_4a.deepCheck){\nreturn;\n}\nvar ck=$(\"#\"+_48.domId).find(\".tree-checkbox\");\n_48.checkState=[\"unchecked\",\"checked\",\"indeterminate\"][_49];\n_48.checked=(_48.checkState==\"checked\");\nck.removeClass(\"tree-checkbox0 tree-checkbox1 tree-checkbox2\");\nck.addClass(\"tree-checkbox\"+_49);\n};\nfunction _3d(_4b,_4c){\nvar pd=_4d(_4b,$(\"#\"+_4c.domId)[0]);\nif(pd){\n_3e(_4b,pd,_46(pd));\n_3d(_4b,pd);\n}\n};\nfunction _46(row){\nvar c0=0;\nvar c1=0;\nvar len=0;\n$.easyui.forEach(row.children||[],false,function(r){\nif(r.checkState){\nlen++;\nif(r.checkState==\"checked\"){\nc1++;\n}else{\nif(r.checkState==\"unchecked\"){\nc0++;\n}\n}\n}\n});\nif(len==0){\nreturn undefined;\n}\nvar _4e=0;\nif(c0==len){\n_4e=0;\n}else{\nif(c1==len){\n_4e=1;\n}else{\n_4e=2;\n}\n}\nreturn _4e;\n};\nfunction _4f(_50,_51){\nvar _52=$.data(_50,\"tree\").options;\nif(!_52.checkbox){\nreturn;\n}\nvar _53=$(_51);\nvar ck=_53.find(\".tree-checkbox\");\nvar _54=_c(_50,_51);\nif(_52.view.hasCheckbox(_50,_54)){\nif(!ck.length){\n_54.checkState=_54.checkState||\"unchecked\";\n$(\"<span class=\\\"tree-checkbox\\\"></span>\").insertBefore(_53.find(\".tree-title\"));\n}\nif(_54.checkState==\"checked\"){\n_34(_50,_51,true,true);\n}else{\nif(_54.checkState==\"unchecked\"){\n_34(_50,_51,false,true);\n}else{\nvar _55=_46(_54);\nif(_55===0){\n_34(_50,_51,false,true);\n}else{\nif(_55===1){\n_34(_50,_51,true,true);\n}\n}\n}\n}\n}else{\nck.remove();\n_54.checkState=undefined;\n_54.checked=undefined;\n_3d(_50,_54);\n}\n};\nfunction _56(_57,ul,_58,_59,_5a){\nvar _5b=$.data(_57,\"tree\");\nvar _5c=_5b.options;\nvar _5d=$(ul).prevAll(\"div.tree-node:first\");\n_58=_5c.loadFilter.call(_57,_58,_5d[0]);\nvar _5e=_5f(_57,\"domId\",_5d.attr(\"id\"));\nif(!_59){\n_5e?_5e.children=_58:_5b.data=_58;\n$(ul).empty();\n}else{\nif(_5e){\n_5e.children?_5e.children=_5e.children.concat(_58):_5e.children=_58;\n}else{\n_5b.data=_5b.data.concat(_58);\n}\n}\n_5c.view.render.call(_5c.view,_57,ul,_58);\nif(_5c.dnd){\n_11(_57);\n}\nif(_5e){\n_60(_57,_5e);\n}\nfor(var i=0;i<_5b.tmpIds.length;i++){\n_34(_57,$(\"#\"+_5b.tmpIds[i])[0],true,true);\n}\n_5b.tmpIds=[];\nsetTimeout(function(){\n_61(_57,_57);\n},0);\nif(!_5a){\n_5c.onLoadSuccess.call(_57,_5e,_58);\n}\n};\nfunction _61(_62,ul,_63){\nvar _64=$.data(_62,\"tree\").options;\nif(_64.lines){\n$(_62).addClass(\"tree-lines\");\n}else{\n$(_62).removeClass(\"tree-lines\");\nreturn;\n}\nif(!_63){\n_63=true;\n$(_62).find(\"span.tree-indent\").removeClass(\"tree-line tree-join tree-joinbottom\");\n$(_62).find(\"div.tree-node\").removeClass(\"tree-node-last tree-root-first tree-root-one\");\nvar _65=$(_62).tree(\"getRoots\");\nif(_65.length>1){\n$(_65[0].target).addClass(\"tree-root-first\");\n}else{\nif(_65.length==1){\n$(_65[0].target).addClass(\"tree-root-one\");\n}\n}\n}\n$(ul).children(\"li\").each(function(){\nvar _66=$(this).children(\"div.tree-node\");\nvar ul=_66.next(\"ul\");\nif(ul.length){\nif($(this).next().length){\n_67(_66);\n}\n_61(_62,ul,_63);\n}else{\n_68(_66);\n}\n});\nvar _69=$(ul).children(\"li:last\").children(\"div.tree-node\").addClass(\"tree-node-last\");\n_69.children(\"span.tree-join\").removeClass(\"tree-join\").addClass(\"tree-joinbottom\");\nfunction _68(_6a,_6b){\nvar _6c=_6a.find(\"span.tree-icon\");\n_6c.prev(\"span.tree-indent\").addClass(\"tree-join\");\n};\nfunction _67(_6d){\nvar _6e=_6d.find(\"span.tree-indent, span.tree-hit\").length;\n_6d.next().find(\"div.tree-node\").each(function(){\n$(this).children(\"span:eq(\"+(_6e-1)+\")\").addClass(\"tree-line\");\n});\n};\n};\nfunction _6f(_70,ul,_71,_72){\nvar _73=$.data(_70,\"tree\").options;\n_71=$.extend({},_73.queryParams,_71||{});\nvar _74=null;\nif(_70!=ul){\nvar _75=$(ul).prev();\n_74=_c(_70,_75[0]);\n}\nif(_73.onBeforeLoad.call(_70,_74,_71)==false){\nreturn;\n}\nvar _76=$(ul).prev().children(\"span.tree-folder\");\n_76.addClass(\"tree-loading\");\nvar _77=_73.loader.call(_70,_71,function(_78){\n_76.removeClass(\"tree-loading\");\n_56(_70,ul,_78);\nif(_72){\n_72();\n}\n},function(){\n_76.removeClass(\"tree-loading\");\n_73.onLoadError.apply(_70,arguments);\nif(_72){\n_72();\n}\n});\nif(_77==false){\n_76.removeClass(\"tree-loading\");\n}\n};\nfunction _79(_7a,_7b,_7c){\nvar _7d=$.data(_7a,\"tree\").options;\nvar hit=$(_7b).children(\"span.tree-hit\");\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-expanded\")){\nreturn;\n}\nvar _7e=_c(_7a,_7b);\nif(_7d.onBeforeExpand.call(_7a,_7e)==false){\nreturn;\n}\nhit.removeClass(\"tree-collapsed tree-collapsed-hover\").addClass(\"tree-expanded\");\nhit.next().addClass(\"tree-folder-open\");\nvar ul=$(_7b).next();\nif(ul.length){\nif(_7d.animate){\nul.slideDown(\"normal\",function(){\n_7e.state=\"open\";\n_7d.onExpand.call(_7a,_7e);\nif(_7c){\n_7c();\n}\n});\n}else{\nul.css(\"display\",\"block\");\n_7e.state=\"open\";\n_7d.onExpand.call(_7a,_7e);\nif(_7c){\n_7c();\n}\n}\n}else{\nvar _7f=$(\"<ul style=\\\"display:none\\\"></ul>\").insertAfter(_7b);\n_6f(_7a,_7f[0],{id:_7e.id},function(){\nif(_7f.is(\":empty\")){\n_7f.remove();\n}\nif(_7d.animate){\n_7f.slideDown(\"normal\",function(){\n_7e.state=\"open\";\n_7d.onExpand.call(_7a,_7e);\nif(_7c){\n_7c();\n}\n});\n}else{\n_7f.css(\"display\",\"block\");\n_7e.state=\"open\";\n_7d.onExpand.call(_7a,_7e);\nif(_7c){\n_7c();\n}\n}\n});\n}\n};\nfunction _80(_81,_82){\nvar _83=$.data(_81,\"tree\").options;\nvar hit=$(_82).children(\"span.tree-hit\");\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-collapsed\")){\nreturn;\n}\nvar _84=_c(_81,_82);\nif(_83.onBeforeCollapse.call(_81,_84)==false){\nreturn;\n}\nhit.removeClass(\"tree-expanded tree-expanded-hover\").addClass(\"tree-collapsed\");\nhit.next().removeClass(\"tree-folder-open\");\nvar ul=$(_82).next();\nif(_83.animate){\nul.slideUp(\"normal\",function(){\n_84.state=\"closed\";\n_83.onCollapse.call(_81,_84);\n});\n}else{\nul.css(\"display\",\"none\");\n_84.state=\"closed\";\n_83.onCollapse.call(_81,_84);\n}\n};\nfunction _85(_86,_87){\nvar hit=$(_87).children(\"span.tree-hit\");\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-expanded\")){\n_80(_86,_87);\n}else{\n_79(_86,_87);\n}\n};\nfunction _88(_89,_8a){\nvar _8b=_8c(_89,_8a);\nif(_8a){\n_8b.unshift(_c(_89,_8a));\n}\nfor(var i=0;i<_8b.length;i++){\n_79(_89,_8b[i].target);\n}\n};\nfunction _8d(_8e,_8f){\nvar _90=[];\nvar p=_4d(_8e,_8f);\nwhile(p){\n_90.unshift(p);\np=_4d(_8e,p.target);\n}\nfor(var i=0;i<_90.length;i++){\n_79(_8e,_90[i].target);\n}\n};\nfunction _91(_92,_93){\nvar c=$(_92).parent();\nwhile(c[0].tagName!=\"BODY\"&&c.css(\"overflow-y\")!=\"auto\"){\nc=c.parent();\n}\nvar n=$(_93);\nvar _94=n.offset().top;\nif(c[0].tagName!=\"BODY\"){\nvar _95=c.offset().top;\nif(_94<_95){\nc.scrollTop(c.scrollTop()+_94-_95);\n}else{\nif(_94+n.outerHeight()>_95+c.outerHeight()-18){\nc.scrollTop(c.scrollTop()+_94+n.outerHeight()-_95-c.outerHeight()+18);\n}\n}\n}else{\nc.scrollTop(_94);\n}\n};\nfunction _96(_97,_98){\nvar _99=_8c(_97,_98);\nif(_98){\n_99.unshift(_c(_97,_98));\n}\nfor(var i=0;i<_99.length;i++){\n_80(_97,_99[i].target);\n}\n};\nfunction _9a(_9b,_9c){\nvar _9d=$(_9c.parent);\nvar _9e=_9c.data;\nif(!_9e){\nreturn;\n}\n_9e=$.isArray(_9e)?_9e:[_9e];\nif(!_9e.length){\nreturn;\n}\nvar ul;\nif(_9d.length==0){\nul=$(_9b);\n}else{\nif(_9f(_9b,_9d[0])){\nvar _a0=_9d.find(\"span.tree-icon\");\n_a0.removeClass(\"tree-file\").addClass(\"tree-folder tree-folder-open\");\nvar hit=$(\"<span class=\\\"tree-hit tree-expanded\\\"></span>\").insertBefore(_a0);\nif(hit.prev().length){\nhit.prev().remove();\n}\n}\nul=_9d.next();\nif(!ul.length){\nul=$(\"<ul></ul>\").insertAfter(_9d);\n}\n}\n_56(_9b,ul[0],_9e,true,true);\n};\nfunction _a1(_a2,_a3){\nvar ref=_a3.before||_a3.after;\nvar _a4=_4d(_a2,ref);\nvar _a5=_a3.data;\nif(!_a5){\nreturn;\n}\n_a5=$.isArray(_a5)?_a5:[_a5];\nif(!_a5.length){\nreturn;\n}\n_9a(_a2,{parent:(_a4?_a4.target:null),data:_a5});\nvar _a6=_a4?_a4.children:$(_a2).tree(\"getRoots\");\nfor(var i=0;i<_a6.length;i++){\nif(_a6[i].domId==$(ref).attr(\"id\")){\nfor(var j=_a5.length-1;j>=0;j--){\n_a6.splice((_a3.before?i:(i+1)),0,_a5[j]);\n}\n_a6.splice(_a6.length-_a5.length,_a5.length);\nbreak;\n}\n}\nvar li=$();\nfor(var i=0;i<_a5.length;i++){\nli=li.add($(\"#\"+_a5[i].domId).parent());\n}\nif(_a3.before){\nli.insertBefore($(ref).parent());\n}else{\nli.insertAfter($(ref).parent());\n}\n};\nfunction _a7(_a8,_a9){\nvar _aa=del(_a9);\n$(_a9).parent().remove();\nif(_aa){\nif(!_aa.children||!_aa.children.length){\nvar _ab=$(_aa.target);\n_ab.find(\".tree-icon\").removeClass(\"tree-folder\").addClass(\"tree-file\");\n_ab.find(\".tree-hit\").remove();\n$(\"<span class=\\\"tree-indent\\\"></span>\").prependTo(_ab);\n_ab.next().remove();\n}\n_60(_a8,_aa);\n}\n_61(_a8,_a8);\nfunction del(_ac){\nvar id=$(_ac).attr(\"id\");\nvar _ad=_4d(_a8,_ac);\nvar cc=_ad?_ad.children:$.data(_a8,\"tree\").data;\nfor(var i=0;i<cc.length;i++){\nif(cc[i].domId==id){\ncc.splice(i,1);\nbreak;\n}\n}\nreturn _ad;\n};\n};\nfunction _60(_ae,_af){\nvar _b0=$.data(_ae,\"tree\").options;\nvar _b1=$(_af.target);\nvar _b2=_c(_ae,_af.target);\nif(_b2.iconCls){\n_b1.find(\".tree-icon\").removeClass(_b2.iconCls);\n}\n$.extend(_b2,_af);\n_b1.find(\".tree-title\").html(_b0.formatter.call(_ae,_b2));\nif(_b2.iconCls){\n_b1.find(\".tree-icon\").addClass(_b2.iconCls);\n}\n_4f(_ae,_af.target);\n};\nfunction _b3(_b4,_b5){\nif(_b5){\nvar p=_4d(_b4,_b5);\nwhile(p){\n_b5=p.target;\np=_4d(_b4,_b5);\n}\nreturn _c(_b4,_b5);\n}else{\nvar _b6=_b7(_b4);\nreturn _b6.length?_b6[0]:null;\n}\n};\nfunction _b7(_b8){\nvar _b9=$.data(_b8,\"tree\").data;\nfor(var i=0;i<_b9.length;i++){\n_ba(_b9[i]);\n}\nreturn _b9;\n};\nfunction _8c(_bb,_bc){\nvar _bd=[];\nvar n=_c(_bb,_bc);\nvar _be=n?(n.children||[]):$.data(_bb,\"tree\").data;\n$.easyui.forEach(_be,true,function(_bf){\n_bd.push(_ba(_bf));\n});\nreturn _bd;\n};\nfunction _4d(_c0,_c1){\nvar p=$(_c1).closest(\"ul\").prevAll(\"div.tree-node:first\");\nreturn _c(_c0,p[0]);\n};\nfunction _c2(_c3,_c4){\n_c4=_c4||\"checked\";\nif(!$.isArray(_c4)){\n_c4=[_c4];\n}\nvar _c5=[];\n$.easyui.forEach($.data(_c3,\"tree\").data,true,function(n){\nif(n.checkState&&$.easyui.indexOfArray(_c4,n.checkState)!=-1){\n_c5.push(_ba(n));\n}\n});\nreturn _c5;\n};\nfunction _c6(_c7){\nvar _c8=$(_c7).find(\"div.tree-node-selected\");\nreturn _c8.length?_c(_c7,_c8[0]):null;\n};\nfunction _c9(_ca,_cb){\nvar _cc=_c(_ca,_cb);\nif(_cc&&_cc.children){\n$.easyui.forEach(_cc.children,true,function(_cd){\n_ba(_cd);\n});\n}\nreturn _cc;\n};\nfunction _c(_ce,_cf){\nreturn _5f(_ce,\"domId\",$(_cf).attr(\"id\"));\n};\nfunction _d0(_d1,_d2){\nif($.isFunction(_d2)){\nvar fn=_d2;\n}else{\nvar _d2=typeof _d2==\"object\"?_d2:{id:_d2};\nvar fn=function(_d3){\nfor(var p in _d2){\nif(_d3[p]!=_d2[p]){\nreturn false;\n}\n}\nreturn true;\n};\n}\nvar _d4=null;\nvar _d5=$.data(_d1,\"tree\").data;\n$.easyui.forEach(_d5,true,function(_d6){\nif(fn.call(_d1,_d6)==true){\n_d4=_ba(_d6);\nreturn false;\n}\n});\nreturn _d4;\n};\nfunction _5f(_d7,_d8,_d9){\nvar _da={};\n_da[_d8]=_d9;\nreturn _d0(_d7,_da);\n};\nfunction _ba(_db){\n_db.target=$(\"#\"+_db.domId)[0];\nreturn _db;\n};\nfunction _dc(_dd,_de){\nvar _df=$.data(_dd,\"tree\").options;\nvar _e0=_c(_dd,_de);\nif(_df.onBeforeSelect.call(_dd,_e0)==false){\nreturn;\n}\n$(_dd).find(\"div.tree-node-selected\").removeClass(\"tree-node-selected\");\n$(_de).addClass(\"tree-node-selected\");\n_df.onSelect.call(_dd,_e0);\n};\nfunction _9f(_e1,_e2){\nreturn $(_e2).children(\"span.tree-hit\").length==0;\n};\nfunction _e3(_e4,_e5){\nvar _e6=$.data(_e4,\"tree\").options;\nvar _e7=_c(_e4,_e5);\nif(_e6.onBeforeEdit.call(_e4,_e7)==false){\nreturn;\n}\n$(_e5).css(\"position\",\"relative\");\nvar nt=$(_e5).find(\".tree-title\");\nvar _e8=nt.outerWidth();\nnt.empty();\nvar _e9=$(\"<input class=\\\"tree-editor\\\">\").appendTo(nt);\n_e9.val(_e7.text).focus();\n_e9.width(_e8+20);\n_e9._outerHeight(_e6.editorHeight);\n_e9._bind(\"click\",function(e){\nreturn false;\n})._bind(\"mousedown\",function(e){\ne.stopPropagation();\n})._bind(\"mousemove\",function(e){\ne.stopPropagation();\n})._bind(\"keydown\",function(e){\nif(e.keyCode==13){\n_ea(_e4,_e5);\nreturn false;\n}else{\nif(e.keyCode==27){\n_f0(_e4,_e5);\nreturn false;\n}\n}\n})._bind(\"blur\",function(e){\ne.stopPropagation();\n_ea(_e4,_e5);\n});\n};\nfunction _ea(_eb,_ec){\nvar _ed=$.data(_eb,\"tree\").options;\n$(_ec).css(\"position\",\"\");\nvar _ee=$(_ec).find(\"input.tree-editor\");\nvar val=_ee.val();\n_ee.remove();\nvar _ef=_c(_eb,_ec);\n_ef.text=val;\n_60(_eb,_ef);\n_ed.onAfterEdit.call(_eb,_ef);\n};\nfunction _f0(_f1,_f2){\nvar _f3=$.data(_f1,\"tree\").options;\n$(_f2).css(\"position\",\"\");\n$(_f2).find(\"input.tree-editor\").remove();\nvar _f4=_c(_f1,_f2);\n_60(_f1,_f4);\n_f3.onCancelEdit.call(_f1,_f4);\n};\nfunction _f5(_f6,q){\nvar _f7=$.data(_f6,\"tree\");\nvar _f8=_f7.options;\nvar ids={};\n$.easyui.forEach(_f7.data,true,function(_f9){\nif(_f8.filter.call(_f6,q,_f9)){\n$(\"#\"+_f9.domId).removeClass(\"tree-node-hidden\");\nids[_f9.domId]=1;\n_f9.hidden=false;\n}else{\n$(\"#\"+_f9.domId).addClass(\"tree-node-hidden\");\n_f9.hidden=true;\n}\n});\nfor(var id in ids){\n_fa(id);\n}\nfunction _fa(_fb){\nvar p=$(_f6).tree(\"getParent\",$(\"#\"+_fb)[0]);\nwhile(p){\n$(p.target).removeClass(\"tree-node-hidden\");\np.hidden=false;\np=$(_f6).tree(\"getParent\",p.target);\n}\n};\n};\n$.fn.tree=function(_fc,_fd){\nif(typeof _fc==\"string\"){\nreturn $.fn.tree.methods[_fc](this,_fd);\n}\nvar _fc=_fc||{};\nreturn this.each(function(){\nvar _fe=$.data(this,\"tree\");\nvar _ff;\nif(_fe){\n_ff=$.extend(_fe.options,_fc);\n_fe.options=_ff;\n}else{\n_ff=$.extend({},$.fn.tree.defaults,$.fn.tree.parseOptions(this),_fc);\n$.data(this,\"tree\",{options:_ff,tree:_1(this),data:[],tmpIds:[]});\nvar data=$.fn.tree.parseData(this);\nif(data.length){\n_56(this,this,data);\n}\n}\n_4(this);\nif(_ff.data){\n_56(this,this,$.extend(true,[],_ff.data));\n}\n_6f(this,this);\n});\n};\n$.fn.tree.methods={options:function(jq){\nreturn $.data(jq[0],\"tree\").options;\n},loadData:function(jq,data){\nreturn jq.each(function(){\n_56(this,this,data);\n});\n},getNode:function(jq,_100){\nreturn _c(jq[0],_100);\n},getData:function(jq,_101){\nreturn _c9(jq[0],_101);\n},reload:function(jq,_102){\nreturn jq.each(function(){\nif(_102){\nvar node=$(_102);\nvar hit=node.children(\"span.tree-hit\");\nhit.removeClass(\"tree-expanded tree-expanded-hover\").addClass(\"tree-collapsed\");\nnode.next().remove();\n_79(this,_102);\n}else{\n$(this).empty();\n_6f(this,this);\n}\n});\n},getRoot:function(jq,_103){\nreturn _b3(jq[0],_103);\n},getRoots:function(jq){\nreturn _b7(jq[0]);\n},getParent:function(jq,_104){\nreturn _4d(jq[0],_104);\n},getChildren:function(jq,_105){\nreturn _8c(jq[0],_105);\n},getChecked:function(jq,_106){\nreturn _c2(jq[0],_106);\n},getSelected:function(jq){\nreturn _c6(jq[0]);\n},isLeaf:function(jq,_107){\nreturn _9f(jq[0],_107);\n},find:function(jq,id){\nreturn _d0(jq[0],id);\n},findBy:function(jq,_108){\nreturn _5f(jq[0],_108.field,_108.value);\n},select:function(jq,_109){\nreturn jq.each(function(){\n_dc(this,_109);\n});\n},check:function(jq,_10a){\nreturn jq.each(function(){\n_34(this,_10a,true);\n});\n},uncheck:function(jq,_10b){\nreturn jq.each(function(){\n_34(this,_10b,false);\n});\n},collapse:function(jq,_10c){\nreturn jq.each(function(){\n_80(this,_10c);\n});\n},expand:function(jq,_10d){\nreturn jq.each(function(){\n_79(this,_10d);\n});\n},collapseAll:function(jq,_10e){\nreturn jq.each(function(){\n_96(this,_10e);\n});\n},expandAll:function(jq,_10f){\nreturn jq.each(function(){\n_88(this,_10f);\n});\n},expandTo:function(jq,_110){\nreturn jq.each(function(){\n_8d(this,_110);\n});\n},scrollTo:function(jq,_111){\nreturn jq.each(function(){\n_91(this,_111);\n});\n},toggle:function(jq,_112){\nreturn jq.each(function(){\n_85(this,_112);\n});\n},append:function(jq,_113){\nreturn jq.each(function(){\n_9a(this,_113);\n});\n},insert:function(jq,_114){\nreturn jq.each(function(){\n_a1(this,_114);\n});\n},remove:function(jq,_115){\nreturn jq.each(function(){\n_a7(this,_115);\n});\n},pop:function(jq,_116){\nvar node=jq.tree(\"getData\",_116);\njq.tree(\"remove\",_116);\nreturn node;\n},update:function(jq,_117){\nreturn jq.each(function(){\n_60(this,$.extend({},_117,{checkState:_117.checked?\"checked\":(_117.checked===false?\"unchecked\":undefined)}));\n});\n},enableDnd:function(jq){\nreturn jq.each(function(){\n_11(this);\n});\n},disableDnd:function(jq){\nreturn jq.each(function(){\n_d(this);\n});\n},beginEdit:function(jq,_118){\nreturn jq.each(function(){\n_e3(this,_118);\n});\n},endEdit:function(jq,_119){\nreturn jq.each(function(){\n_ea(this,_119);\n});\n},cancelEdit:function(jq,_11a){\nreturn jq.each(function(){\n_f0(this,_11a);\n});\n},doFilter:function(jq,q){\nreturn jq.each(function(){\n_f5(this,q);\n});\n}};\n$.fn.tree.parseOptions=function(_11b){\nvar t=$(_11b);\nreturn $.extend({},$.parser.parseOptions(_11b,[\"url\",\"method\",{checkbox:\"boolean\",cascadeCheck:\"boolean\",onlyLeafCheck:\"boolean\"},{animate:\"boolean\",lines:\"boolean\",dnd:\"boolean\"}]));\n};\n$.fn.tree.parseData=function(_11c){\nvar data=[];\n_11d(data,$(_11c));\nreturn data;\nfunction _11d(aa,tree){\ntree.children(\"li\").each(function(){\nvar node=$(this);\nvar item=$.extend({},$.parser.parseOptions(this,[\"id\",\"iconCls\",\"state\"]),{checked:(node.attr(\"checked\")?true:undefined)});\nitem.text=node.children(\"span\").html();\nif(!item.text){\nitem.text=node.html();\n}\nvar _11e=node.children(\"ul\");\nif(_11e.length){\nitem.children=[];\n_11d(item.children,_11e);\n}\naa.push(item);\n});\n};\n};\nvar _11f=1;\nvar _120={render:function(_121,ul,data){\nvar _122=$.data(_121,\"tree\");\nvar opts=_122.options;\nvar _123=$(ul).prev(\".tree-node\");\nvar _124=_123.length?$(_121).tree(\"getNode\",_123[0]):null;\nvar _125=_123.find(\"span.tree-indent, span.tree-hit\").length;\nvar _126=$(_121).attr(\"id\")||\"\";\nvar cc=_127.call(this,_125,data);\n$(ul).append(cc.join(\"\"));\nfunction _127(_128,_129){\nvar cc=[];\nfor(var i=0;i<_129.length;i++){\nvar item=_129[i];\nif(item.state!=\"open\"&&item.state!=\"closed\"){\nitem.state=\"open\";\n}\nitem.domId=_126+\"_easyui_tree_\"+_11f++;\ncc.push(\"<li>\");\ncc.push(\"<div id=\\\"\"+item.domId+\"\\\" class=\\\"tree-node\"+(item.nodeCls?\" \"+item.nodeCls:\"\")+\"\\\">\");\nfor(var j=0;j<_128;j++){\ncc.push(\"<span class=\\\"tree-indent\\\"></span>\");\n}\nif(item.state==\"closed\"){\ncc.push(\"<span class=\\\"tree-hit tree-collapsed\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-folder \"+(item.iconCls?item.iconCls:\"\")+\"\\\"></span>\");\n}else{\nif(item.children&&item.children.length){\ncc.push(\"<span class=\\\"tree-hit tree-expanded\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-folder tree-folder-open \"+(item.iconCls?item.iconCls:\"\")+\"\\\"></span>\");\n}else{\ncc.push(\"<span class=\\\"tree-indent\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-file \"+(item.iconCls?item.iconCls:\"\")+\"\\\"></span>\");\n}\n}\nif(this.hasCheckbox(_121,item)){\nvar flag=0;\nif(_124&&_124.checkState==\"checked\"&&opts.cascadeCheck){\nflag=1;\nitem.checked=true;\n}else{\nif(item.checked){\n$.easyui.addArrayItem(_122.tmpIds,item.domId);\n}\n}\nitem.checkState=flag?\"checked\":\"unchecked\";\ncc.push(\"<span class=\\\"tree-checkbox tree-checkbox\"+flag+\"\\\"></span>\");\n}else{\nitem.checkState=undefined;\nitem.checked=undefined;\n}\ncc.push(\"<span class=\\\"tree-title\\\">\"+opts.formatter.call(_121,item)+\"</span>\");\ncc.push(\"</div>\");\nif(item.children&&item.children.length){\nvar tmp=_127.call(this,_128+1,item.children);\ncc.push(\"<ul style=\\\"display:\"+(item.state==\"closed\"?\"none\":\"block\")+\"\\\">\");\ncc=cc.concat(tmp);\ncc.push(\"</ul>\");\n}\ncc.push(\"</li>\");\n}\nreturn cc;\n};\n},hasCheckbox:function(_12a,item){\nvar _12b=$.data(_12a,\"tree\");\nvar opts=_12b.options;\nif(opts.checkbox){\nif($.isFunction(opts.checkbox)){\nif(opts.checkbox.call(_12a,item)){\nreturn true;\n}else{\nreturn false;\n}\n}else{\nif(opts.onlyLeafCheck){\nif(item.state==\"open\"&&!(item.children&&item.children.length)){\nreturn true;\n}\n}else{\nreturn true;\n}\n}\n}\nreturn false;\n}};\n$.fn.tree.defaults={url:null,method:\"post\",animate:false,checkbox:false,cascadeCheck:true,onlyLeafCheck:false,lines:false,dnd:false,editorHeight:26,data:null,queryParams:{},formatter:function(node){\nreturn node.text;\n},filter:function(q,node){\nvar qq=[];\n$.map($.isArray(q)?q:[q],function(q){\nq=$.trim(q);\nif(q){\nqq.push(q);\n}\n});\nfor(var i=0;i<qq.length;i++){\nvar _12c=node.text.toLowerCase().indexOf(qq[i].toLowerCase());\nif(_12c>=0){\nreturn true;\n}\n}\nreturn !qq.length;\n},loader:function(_12d,_12e,_12f){\nvar opts=$(this).tree(\"options\");\nif(!opts.url){\nreturn false;\n}\n$.ajax({type:opts.method,url:opts.url,data:_12d,dataType:\"json\",success:function(data){\n_12e(data);\n},error:function(){\n_12f.apply(this,arguments);\n}});\n},loadFilter:function(data,_130){\nreturn data;\n},view:_120,onBeforeLoad:function(node,_131){\n},onLoadSuccess:function(node,data){\n},onLoadError:function(){\n},onClick:function(node){\n},onDblClick:function(node){\n},onBeforeExpand:function(node){\n},onExpand:function(node){\n},onBeforeCollapse:function(node){\n},onCollapse:function(node){\n},onBeforeCheck:function(node,_132){\n},onCheck:function(node,_133){\n},onBeforeSelect:function(node){\n},onSelect:function(node){\n},onContextMenu:function(e,node){\n},onBeforeDrag:function(node){\n},onStartDrag:function(node){\n},onStopDrag:function(node){\n},onDragEnter:function(_134,_135){\n},onDragOver:function(_136,_137){\n},onDragLeave:function(_138,_139){\n},onBeforeDrop:function(_13a,_13b,_13c){\n},onDrop:function(_13d,_13e,_13f){\n},onBeforeEdit:function(node){\n},onAfterEdit:function(node){\n},onCancelEdit:function(node){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.treegrid.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"treegrid\");\nvar _4=_3.options;\n$(_2).datagrid($.extend({},_4,{url:null,data:null,loader:function(){\nreturn false;\n},onBeforeLoad:function(){\nreturn false;\n},onLoadSuccess:function(){\n},onResizeColumn:function(_5,_6){\n_16(_2);\n_4.onResizeColumn.call(_2,_5,_6);\n},onBeforeSortColumn:function(_7,_8){\nif(_4.onBeforeSortColumn.call(_2,_7,_8)==false){\nreturn false;\n}\n},onSortColumn:function(_9,_a){\n_4.sortName=_9;\n_4.sortOrder=_a;\nif(_4.remoteSort){\n_15(_2);\n}else{\nvar _b=$(_2).treegrid(\"getData\");\n_56(_2,null,_b);\n}\n_4.onSortColumn.call(_2,_9,_a);\n},onClickCell:function(_c,_d){\n_4.onClickCell.call(_2,_d,_37(_2,_c));\n},onDblClickCell:function(_e,_f){\n_4.onDblClickCell.call(_2,_f,_37(_2,_e));\n},onRowContextMenu:function(e,_10){\n_4.onContextMenu.call(_2,e,_37(_2,_10));\n}}));\nvar _11=$.data(_2,\"datagrid\").options;\n_4.columns=_11.columns;\n_4.frozenColumns=_11.frozenColumns;\n_3.dc=$.data(_2,\"datagrid\").dc;\nif(_4.pagination){\nvar _12=$(_2).datagrid(\"getPager\");\n_12.pagination({total:0,pageNumber:_4.pageNumber,pageSize:_4.pageSize,pageList:_4.pageList,onSelectPage:function(_13,_14){\n_4.pageNumber=_13||1;\n_4.pageSize=_14;\n_12.pagination(\"refresh\",{pageNumber:_13,pageSize:_14});\n_15(_2);\n}});\n_4.pageSize=_12.pagination(\"options\").pageSize;\n}\n};\nfunction _16(_17,_18){\nvar _19=$.data(_17,\"datagrid\").options;\nvar dc=$.data(_17,\"datagrid\").dc;\nif(!dc.body1.is(\":empty\")&&(!_19.nowrap||_19.autoRowHeight)){\nif(_18!=undefined){\nvar _1a=_1b(_17,_18);\nfor(var i=0;i<_1a.length;i++){\n_1c(_1a[i][_19.idField]);\n}\n}\n}\n$(_17).datagrid(\"fixRowHeight\",_18);\nfunction _1c(_1d){\nvar tr1=_19.finder.getTr(_17,_1d,\"body\",1);\nvar tr2=_19.finder.getTr(_17,_1d,\"body\",2);\ntr1.css(\"height\",\"\");\ntr2.css(\"height\",\"\");\nvar _1e=Math.max(tr1.height(),tr2.height());\ntr1.css(\"height\",_1e);\ntr2.css(\"height\",_1e);\n};\n};\nfunction _1f(_20){\nvar dc=$.data(_20,\"datagrid\").dc;\nvar _21=$.data(_20,\"treegrid\").options;\nif(!_21.rownumbers){\nreturn;\n}\ndc.body1.find(\"div.datagrid-cell-rownumber\").each(function(i){\n$(this).html(i+1);\n});\n};\nfunction _22(_23){\nreturn function(e){\n$.fn.datagrid.defaults.rowEvents[_23?\"mouseover\":\"mouseout\"](e);\nvar tt=$(e.target);\nvar fn=_23?\"addClass\":\"removeClass\";\nif(tt.hasClass(\"tree-hit\")){\ntt.hasClass(\"tree-expanded\")?tt[fn](\"tree-expanded-hover\"):tt[fn](\"tree-collapsed-hover\");\n}\n};\n};\nfunction _24(e){\nvar tt=$(e.target);\nvar tr=tt.closest(\"tr.datagrid-row\");\nif(!tr.length||!tr.parent().length){\nreturn;\n}\nvar _25=tr.attr(\"node-id\");\nvar _26=_27(tr);\nif(tt.hasClass(\"tree-hit\")){\n_28(_26,_25);\n}else{\nif(tt.hasClass(\"tree-checkbox\")){\n_29(_26,_25);\n}else{\nvar _2a=$(_26).datagrid(\"options\");\nif(!tt.parent().hasClass(\"datagrid-cell-check\")&&!_2a.singleSelect&&e.shiftKey){\nvar _2b=$(_26).treegrid(\"getChildren\");\nvar _2c=$.easyui.indexOfArray(_2b,_2a.idField,_2a.lastSelectedIndex);\nvar _2d=$.easyui.indexOfArray(_2b,_2a.idField,_25);\nvar _2e=Math.min(Math.max(_2c,0),_2d);\nvar to=Math.max(_2c,_2d);\nvar row=_2b[_2d];\nvar td=tt.closest(\"td[field]\",tr);\nif(td.length){\nvar _2f=td.attr(\"field\");\n_2a.onClickCell.call(_26,_25,_2f,row[_2f]);\n}\n$(_26).treegrid(\"clearSelections\");\nfor(var i=_2e;i<=to;i++){\n$(_26).treegrid(\"selectRow\",_2b[i][_2a.idField]);\n}\n_2a.onClickRow.call(_26,row);\n}else{\n$.fn.datagrid.defaults.rowEvents.click(e);\n}\n}\n}\n};\nfunction _27(t){\nreturn $(t).closest(\"div.datagrid-view\").children(\".datagrid-f\")[0];\n};\nfunction _29(_30,_31,_32,_33){\nvar _34=$.data(_30,\"treegrid\");\nvar _35=_34.checkedRows;\nvar _36=_34.options;\nif(!_36.checkbox){\nreturn;\n}\nvar row=_37(_30,_31);\nif(!row.checkState){\nreturn;\n}\nvar tr=_36.finder.getTr(_30,_31);\nvar ck=tr.find(\".tree-checkbox\");\nif(_32==undefined){\nif(ck.hasClass(\"tree-checkbox1\")){\n_32=false;\n}else{\nif(ck.hasClass(\"tree-checkbox0\")){\n_32=true;\n}else{\nif(row._checked==undefined){\nrow._checked=ck.hasClass(\"tree-checkbox1\");\n}\n_32=!row._checked;\n}\n}\n}\nrow._checked=_32;\nif(_32){\nif(ck.hasClass(\"tree-checkbox1\")){\nreturn;\n}\n}else{\nif(ck.hasClass(\"tree-checkbox0\")){\nreturn;\n}\n}\nif(!_33){\nif(_36.onBeforeCheckNode.call(_30,row,_32)==false){\nreturn;\n}\n}\nif(_36.cascadeCheck){\n_38(_30,row,_32);\n_39(_30,row);\n}else{\n_3a(_30,row,_32?\"1\":\"0\");\n}\nif(!_33){\n_36.onCheckNode.call(_30,row,_32);\n}\n};\nfunction _3a(_3b,row,_3c){\nvar _3d=$.data(_3b,\"treegrid\");\nvar _3e=_3d.checkedRows;\nvar _3f=_3d.options;\nif(!row.checkState||_3c==undefined){\nreturn;\n}\nvar tr=_3f.finder.getTr(_3b,row[_3f.idField]);\nvar ck=tr.find(\".tree-checkbox\");\nif(!ck.length){\nreturn;\n}\nrow.checkState=[\"unchecked\",\"checked\",\"indeterminate\"][_3c];\nrow.checked=(row.checkState==\"checked\");\nck.removeClass(\"tree-checkbox0 tree-checkbox1 tree-checkbox2\");\nck.addClass(\"tree-checkbox\"+_3c);\nif(_3c==0){\n$.easyui.removeArrayItem(_3e,_3f.idField,row[_3f.idField]);\n}else{\n$.easyui.addArrayItem(_3e,_3f.idField,row);\n}\n};\nfunction _38(_40,row,_41){\nvar _42=_41?1:0;\n_3a(_40,row,_42);\n$.easyui.forEach(row.children||[],true,function(r){\n_3a(_40,r,_42);\n});\n};\nfunction _39(_43,row){\nvar _44=$.data(_43,\"treegrid\").options;\nvar _45=_46(_43,row[_44.idField]);\nif(_45){\n_3a(_43,_45,_47(_45));\n_39(_43,_45);\n}\n};\nfunction _47(row){\nvar len=0;\nvar c0=0;\nvar c1=0;\n$.easyui.forEach(row.children||[],false,function(r){\nif(r.checkState){\nlen++;\nif(r.checkState==\"checked\"){\nc1++;\n}else{\nif(r.checkState==\"unchecked\"){\nc0++;\n}\n}\n}\n});\nif(len==0){\nreturn undefined;\n}\nvar _48=0;\nif(c0==len){\n_48=0;\n}else{\nif(c1==len){\n_48=1;\n}else{\n_48=2;\n}\n}\nreturn _48;\n};\nfunction _49(_4a,_4b){\nvar _4c=$.data(_4a,\"treegrid\").options;\nif(!_4c.checkbox){\nreturn;\n}\nvar row=_37(_4a,_4b);\nvar tr=_4c.finder.getTr(_4a,_4b);\nvar ck=tr.find(\".tree-checkbox\");\nif(_4c.view.hasCheckbox(_4a,row)){\nif(!ck.length){\nrow.checkState=row.checkState||\"unchecked\";\n$(\"<span class=\\\"tree-checkbox\\\"></span>\").insertBefore(tr.find(\".tree-title\"));\n}\nif(row.checkState==\"checked\"){\n_29(_4a,_4b,true,true);\n}else{\nif(row.checkState==\"unchecked\"){\n_29(_4a,_4b,false,true);\n}else{\nvar _4d=_47(row);\nif(_4d===0){\n_29(_4a,_4b,false,true);\n}else{\nif(_4d===1){\n_29(_4a,_4b,true,true);\n}\n}\n}\n}\n}else{\nck.remove();\nrow.checkState=undefined;\nrow.checked=undefined;\n_39(_4a,row);\n}\n};\nfunction _4e(_4f,_50){\nvar _51=$.data(_4f,\"treegrid\").options;\nvar tr1=_51.finder.getTr(_4f,_50,\"body\",1);\nvar tr2=_51.finder.getTr(_4f,_50,\"body\",2);\nvar _52=$(_4f).datagrid(\"getColumnFields\",true).length+(_51.rownumbers?1:0);\nvar _53=$(_4f).datagrid(\"getColumnFields\",false).length;\n_54(tr1,_52);\n_54(tr2,_53);\nfunction _54(tr,_55){\n$(\"<tr class=\\\"treegrid-tr-tree\\\">\"+\"<td style=\\\"border:0px\\\" colspan=\\\"\"+_55+\"\\\">\"+\"<div></div>\"+\"</td>\"+\"</tr>\").insertAfter(tr);\n};\n};\nfunction _56(_57,_58,_59,_5a,_5b){\nvar _5c=$.data(_57,\"treegrid\");\nvar _5d=_5c.options;\nvar dc=_5c.dc;\n_59=_5d.loadFilter.call(_57,_59,_58);\nvar _5e=_37(_57,_58);\nif(_5e){\nvar _5f=_5d.finder.getTr(_57,_58,\"body\",1);\nvar _60=_5d.finder.getTr(_57,_58,\"body\",2);\nvar cc1=_5f.next(\"tr.treegrid-tr-tree\").children(\"td\").children(\"div\");\nvar cc2=_60.next(\"tr.treegrid-tr-tree\").children(\"td\").children(\"div\");\nif(!_5a){\n_5e.children=[];\n}\n}else{\nvar cc1=dc.body1;\nvar cc2=dc.body2;\nif(!_5a){\n_5c.data=[];\n}\n}\nif(!_5a){\ncc1.empty();\ncc2.empty();\n}\nif(_5d.view.onBeforeRender){\n_5d.view.onBeforeRender.call(_5d.view,_57,_58,_59);\n}\n_5d.view.render.call(_5d.view,_57,cc1,true);\n_5d.view.render.call(_5d.view,_57,cc2,false);\nif(_5d.showFooter){\n_5d.view.renderFooter.call(_5d.view,_57,dc.footer1,true);\n_5d.view.renderFooter.call(_5d.view,_57,dc.footer2,false);\n}\nif(_5d.view.onAfterRender){\n_5d.view.onAfterRender.call(_5d.view,_57);\n}\nif(!_58&&_5d.pagination){\nvar _61=$.data(_57,\"treegrid\").total;\nvar _62=$(_57).datagrid(\"getPager\");\nvar _63=_62.pagination(\"options\");\nif(_63.total!=_59.total){\n_62.pagination(\"refresh\",{pageNumber:_5d.pageNumber,total:_59.total});\nif(_5d.pageNumber!=_63.pageNumber&&_63.pageNumber>0){\n_5d.pageNumber=_63.pageNumber;\n_15(_57);\n}\n}\n}\n_16(_57);\n_1f(_57);\n$(_57).treegrid(\"showLines\");\n$(_57).treegrid(\"setSelectionState\");\n$(_57).treegrid(\"autoSizeColumn\");\nif(!_5b){\n_5d.onLoadSuccess.call(_57,_5e,_59);\n}\n};\nfunction _15(_64,_65,_66,_67,_68){\nvar _69=$.data(_64,\"treegrid\").options;\nvar _6a=$(_64).datagrid(\"getPanel\").find(\"div.datagrid-body\");\nif(_65==undefined&&_69.queryParams){\n_69.queryParams.id=undefined;\n}\nif(_66){\n_69.queryParams=_66;\n}\nvar _6b=$.extend({},_69.queryParams);\nif(_69.pagination){\n$.extend(_6b,{page:_69.pageNumber,rows:_69.pageSize});\n}\nif(_69.sortName){\n$.extend(_6b,{sort:_69.sortName,order:_69.sortOrder});\n}\nvar row=_37(_64,_65);\nif(_69.onBeforeLoad.call(_64,row,_6b)==false){\nreturn;\n}\nvar _6c=_6a.find(\"tr[node-id=\\\"\"+_65+\"\\\"] span.tree-folder\");\n_6c.addClass(\"tree-loading\");\n$(_64).treegrid(\"loading\");\nvar _6d=_69.loader.call(_64,_6b,function(_6e){\n_6c.removeClass(\"tree-loading\");\n$(_64).treegrid(\"loaded\");\n_56(_64,_65,_6e,_67);\nif(_68){\n_68();\n}\n},function(){\n_6c.removeClass(\"tree-loading\");\n$(_64).treegrid(\"loaded\");\n_69.onLoadError.apply(_64,arguments);\nif(_68){\n_68();\n}\n});\nif(_6d==false){\n_6c.removeClass(\"tree-loading\");\n$(_64).treegrid(\"loaded\");\n}\n};\nfunction _6f(_70){\nvar _71=_72(_70);\nreturn _71.length?_71[0]:null;\n};\nfunction _72(_73){\nreturn $.data(_73,\"treegrid\").data;\n};\nfunction _46(_74,_75){\nvar row=_37(_74,_75);\nif(row._parentId){\nreturn _37(_74,row._parentId);\n}else{\nreturn null;\n}\n};\nfunction _1b(_76,_77){\nvar _78=$.data(_76,\"treegrid\").data;\nif(_77){\nvar _79=_37(_76,_77);\n_78=_79?(_79.children||[]):[];\n}\nvar _7a=[];\n$.easyui.forEach(_78,true,function(_7b){\n_7a.push(_7b);\n});\nreturn _7a;\n};\nfunction _7c(_7d,_7e){\nvar _7f=$.data(_7d,\"treegrid\").options;\nvar tr=_7f.finder.getTr(_7d,_7e);\nvar _80=tr.children(\"td[field=\\\"\"+_7f.treeField+\"\\\"]\");\nreturn _80.find(\"span.tree-indent,span.tree-hit\").length;\n};\nfunction _37(_81,_82){\nvar _83=$.data(_81,\"treegrid\");\nvar _84=_83.options;\nvar _85=null;\n$.easyui.forEach(_83.data,true,function(_86){\nif(_86[_84.idField]==_82){\n_85=_86;\nreturn false;\n}\n});\nreturn _85;\n};\nfunction _87(_88,_89){\nvar _8a=$.data(_88,\"treegrid\").options;\nvar row=_37(_88,_89);\nvar tr=_8a.finder.getTr(_88,_89);\nvar hit=tr.find(\"span.tree-hit\");\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-collapsed\")){\nreturn;\n}\nif(_8a.onBeforeCollapse.call(_88,row)==false){\nreturn;\n}\nhit.removeClass(\"tree-expanded tree-expanded-hover\").addClass(\"tree-collapsed\");\nhit.next().removeClass(\"tree-folder-open\");\nrow.state=\"closed\";\ntr=tr.next(\"tr.treegrid-tr-tree\");\nvar cc=tr.children(\"td\").children(\"div\");\nif(_8a.animate){\ncc.slideUp(\"normal\",function(){\n$(_88).treegrid(\"autoSizeColumn\");\n_16(_88,_89);\n_8a.onCollapse.call(_88,row);\n});\n}else{\ncc.hide();\n$(_88).treegrid(\"autoSizeColumn\");\n_16(_88,_89);\n_8a.onCollapse.call(_88,row);\n}\n};\nfunction _8b(_8c,_8d){\nvar _8e=$.data(_8c,\"treegrid\").options;\nvar tr=_8e.finder.getTr(_8c,_8d);\nvar hit=tr.find(\"span.tree-hit\");\nvar row=_37(_8c,_8d);\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-expanded\")){\nreturn;\n}\nif(_8e.onBeforeExpand.call(_8c,row)==false){\nreturn;\n}\nhit.removeClass(\"tree-collapsed tree-collapsed-hover\").addClass(\"tree-expanded\");\nhit.next().addClass(\"tree-folder-open\");\nvar _8f=tr.next(\"tr.treegrid-tr-tree\");\nif(_8f.length){\nvar cc=_8f.children(\"td\").children(\"div\");\n_90(cc);\n}else{\n_4e(_8c,row[_8e.idField]);\nvar _8f=tr.next(\"tr.treegrid-tr-tree\");\nvar cc=_8f.children(\"td\").children(\"div\");\ncc.hide();\nvar _91=$.extend({},_8e.queryParams||{});\n_91.id=row[_8e.idField];\n_15(_8c,row[_8e.idField],_91,true,function(){\nif(cc.is(\":empty\")){\n_8f.remove();\n}else{\n_90(cc);\n}\n});\n}\nfunction _90(cc){\nrow.state=\"open\";\nif(_8e.animate){\ncc.slideDown(\"normal\",function(){\n$(_8c).treegrid(\"autoSizeColumn\");\n_16(_8c,_8d);\n_8e.onExpand.call(_8c,row);\n});\n}else{\ncc.show();\n$(_8c).treegrid(\"autoSizeColumn\");\n_16(_8c,_8d);\n_8e.onExpand.call(_8c,row);\n}\n};\n};\nfunction _28(_92,_93){\nvar _94=$.data(_92,\"treegrid\").options;\nvar tr=_94.finder.getTr(_92,_93);\nvar hit=tr.find(\"span.tree-hit\");\nif(hit.hasClass(\"tree-expanded\")){\n_87(_92,_93);\n}else{\n_8b(_92,_93);\n}\n};\nfunction _95(_96,_97){\nvar _98=$.data(_96,\"treegrid\").options;\nvar _99=_1b(_96,_97);\nif(_97){\n_99.unshift(_37(_96,_97));\n}\nfor(var i=0;i<_99.length;i++){\n_87(_96,_99[i][_98.idField]);\n}\n};\nfunction _9a(_9b,_9c){\nvar _9d=$.data(_9b,\"treegrid\").options;\nvar _9e=_1b(_9b,_9c);\nif(_9c){\n_9e.unshift(_37(_9b,_9c));\n}\nfor(var i=0;i<_9e.length;i++){\n_8b(_9b,_9e[i][_9d.idField]);\n}\n};\nfunction _9f(_a0,_a1){\nvar _a2=$.data(_a0,\"treegrid\").options;\nvar ids=[];\nvar p=_46(_a0,_a1);\nwhile(p){\nvar id=p[_a2.idField];\nids.unshift(id);\np=_46(_a0,id);\n}\nfor(var i=0;i<ids.length;i++){\n_8b(_a0,ids[i]);\n}\n};\nfunction _a3(_a4,_a5){\nvar _a6=$.data(_a4,\"treegrid\");\nvar _a7=_a6.options;\nif(_a5.parent){\nvar tr=_a7.finder.getTr(_a4,_a5.parent);\nif(tr.next(\"tr.treegrid-tr-tree\").length==0){\n_4e(_a4,_a5.parent);\n}\nvar _a8=tr.children(\"td[field=\\\"\"+_a7.treeField+\"\\\"]\").children(\"div.datagrid-cell\");\nvar _a9=_a8.children(\"span.tree-icon\");\nif(_a9.hasClass(\"tree-file\")){\n_a9.removeClass(\"tree-file\").addClass(\"tree-folder tree-folder-open\");\nvar hit=$(\"<span class=\\\"tree-hit tree-expanded\\\"></span>\").insertBefore(_a9);\nif(hit.prev().length){\nhit.prev().remove();\n}\n}\n}\n_56(_a4,_a5.parent,_a5.data,_a6.data.length>0,true);\n};\nfunction _aa(_ab,_ac){\nvar ref=_ac.before||_ac.after;\nvar _ad=$.data(_ab,\"treegrid\").options;\nvar _ae=_46(_ab,ref);\n_a3(_ab,{parent:(_ae?_ae[_ad.idField]:null),data:[_ac.data]});\nvar _af=_ae?_ae.children:$(_ab).treegrid(\"getRoots\");\nfor(var i=0;i<_af.length;i++){\nif(_af[i][_ad.idField]==ref){\nvar _b0=_af[_af.length-1];\n_af.splice(_ac.before?i:(i+1),0,_b0);\n_af.splice(_af.length-1,1);\nbreak;\n}\n}\n_b1(true);\n_b1(false);\n_1f(_ab);\n$(_ab).treegrid(\"showLines\");\nfunction _b1(_b2){\nvar _b3=_b2?1:2;\nvar tr=_ad.finder.getTr(_ab,_ac.data[_ad.idField],\"body\",_b3);\nvar _b4=tr.closest(\"table.datagrid-btable\");\ntr=tr.parent().children();\nvar _b5=_ad.finder.getTr(_ab,ref,\"body\",_b3);\nif(_ac.before){\ntr.insertBefore(_b5);\n}else{\nvar sub=_b5.next(\"tr.treegrid-tr-tree\");\ntr.insertAfter(sub.length?sub:_b5);\n}\n_b4.remove();\n};\n};\nfunction _b6(_b7,_b8){\nvar _b9=$.data(_b7,\"treegrid\");\nvar _ba=_b9.options;\nvar _bb=_46(_b7,_b8);\n$(_b7).datagrid(\"deleteRow\",_b8);\n$.easyui.removeArrayItem(_b9.checkedRows,_ba.idField,_b8);\n_1f(_b7);\nif(_bb){\n_49(_b7,_bb[_ba.idField]);\n}\n_b9.total-=1;\n$(_b7).datagrid(\"getPager\").pagination(\"refresh\",{total:_b9.total});\n$(_b7).treegrid(\"showLines\");\n};\nfunction _bc(_bd){\nvar t=$(_bd);\nvar _be=t.treegrid(\"options\");\nif(_be.lines){\nt.treegrid(\"getPanel\").addClass(\"tree-lines\");\n}else{\nt.treegrid(\"getPanel\").removeClass(\"tree-lines\");\nreturn;\n}\nt.treegrid(\"getPanel\").find(\"span.tree-indent\").removeClass(\"tree-line tree-join tree-joinbottom\");\nt.treegrid(\"getPanel\").find(\"div.datagrid-cell\").removeClass(\"tree-node-last tree-root-first tree-root-one\");\nvar _bf=t.treegrid(\"getRoots\");\nif(_bf.length>1){\n_c0(_bf[0]).addClass(\"tree-root-first\");\n}else{\nif(_bf.length==1){\n_c0(_bf[0]).addClass(\"tree-root-one\");\n}\n}\n_c1(_bf);\n_c2(_bf);\nfunction _c1(_c3){\n$.map(_c3,function(_c4){\nif(_c4.children&&_c4.children.length){\n_c1(_c4.children);\n}else{\nvar _c5=_c0(_c4);\n_c5.find(\".tree-icon\").prev().addClass(\"tree-join\");\n}\n});\nif(_c3.length){\nvar _c6=_c0(_c3[_c3.length-1]);\n_c6.addClass(\"tree-node-last\");\n_c6.find(\".tree-join\").removeClass(\"tree-join\").addClass(\"tree-joinbottom\");\n}\n};\nfunction _c2(_c7){\n$.map(_c7,function(_c8){\nif(_c8.children&&_c8.children.length){\n_c2(_c8.children);\n}\n});\nfor(var i=0;i<_c7.length-1;i++){\nvar _c9=_c7[i];\nvar _ca=t.treegrid(\"getLevel\",_c9[_be.idField]);\nvar tr=_be.finder.getTr(_bd,_c9[_be.idField]);\nvar cc=tr.next().find(\"tr.datagrid-row td[field=\\\"\"+_be.treeField+\"\\\"] div.datagrid-cell\");\ncc.find(\"span:eq(\"+(_ca-1)+\")\").addClass(\"tree-line\");\n}\n};\nfunction _c0(_cb){\nvar tr=_be.finder.getTr(_bd,_cb[_be.idField]);\nvar _cc=tr.find(\"td[field=\\\"\"+_be.treeField+\"\\\"] div.datagrid-cell\");\nreturn _cc;\n};\n};\n$.fn.treegrid=function(_cd,_ce){\nif(typeof _cd==\"string\"){\nvar _cf=$.fn.treegrid.methods[_cd];\nif(_cf){\nreturn _cf(this,_ce);\n}else{\nreturn this.datagrid(_cd,_ce);\n}\n}\n_cd=_cd||{};\nreturn this.each(function(){\nvar _d0=$.data(this,\"treegrid\");\nif(_d0){\n$.extend(_d0.options,_cd);\n}else{\n_d0=$.data(this,\"treegrid\",{options:$.extend({},$.fn.treegrid.defaults,$.fn.treegrid.parseOptions(this),_cd),data:[],checkedRows:[],tmpIds:[]});\n}\n_1(this);\nif(_d0.options.data){\n$(this).treegrid(\"loadData\",_d0.options.data);\n}\n_15(this);\n});\n};\n$.fn.treegrid.methods={options:function(jq){\nreturn $.data(jq[0],\"treegrid\").options;\n},resize:function(jq,_d1){\nreturn jq.each(function(){\n$(this).datagrid(\"resize\",_d1);\n});\n},fixRowHeight:function(jq,_d2){\nreturn jq.each(function(){\n_16(this,_d2);\n});\n},loadData:function(jq,_d3){\nreturn jq.each(function(){\n_56(this,_d3.parent,_d3);\n});\n},load:function(jq,_d4){\nreturn jq.each(function(){\n$(this).treegrid(\"options\").pageNumber=1;\n$(this).treegrid(\"getPager\").pagination({pageNumber:1});\n$(this).treegrid(\"reload\",_d4);\n});\n},reload:function(jq,id){\nreturn jq.each(function(){\nvar _d5=$(this).treegrid(\"options\");\nvar _d6={};\nif(typeof id==\"object\"){\n_d6=id;\n}else{\n_d6=$.extend({},_d5.queryParams);\n_d6.id=id;\n}\nif(_d6.id){\nvar _d7=$(this).treegrid(\"find\",_d6.id);\nif(_d7.children){\n_d7.children.splice(0,_d7.children.length);\n}\n_d5.queryParams=_d6;\nvar tr=_d5.finder.getTr(this,_d6.id);\ntr.next(\"tr.treegrid-tr-tree\").remove();\ntr.find(\"span.tree-hit\").removeClass(\"tree-expanded tree-expanded-hover\").addClass(\"tree-collapsed\");\n_8b(this,_d6.id);\n}else{\n_15(this,null,_d6);\n}\n});\n},reloadFooter:function(jq,_d8){\nreturn jq.each(function(){\nvar _d9=$.data(this,\"treegrid\").options;\nvar dc=$.data(this,\"datagrid\").dc;\nif(_d8){\n$.data(this,\"treegrid\").footer=_d8;\n}\nif(_d9.showFooter){\n_d9.view.renderFooter.call(_d9.view,this,dc.footer1,true);\n_d9.view.renderFooter.call(_d9.view,this,dc.footer2,false);\nif(_d9.view.onAfterRender){\n_d9.view.onAfterRender.call(_d9.view,this);\n}\n$(this).treegrid(\"fixRowHeight\");\n}\n});\n},getData:function(jq){\nreturn $.data(jq[0],\"treegrid\").data;\n},getFooterRows:function(jq){\nreturn $.data(jq[0],\"treegrid\").footer;\n},getRoot:function(jq){\nreturn _6f(jq[0]);\n},getRoots:function(jq){\nreturn _72(jq[0]);\n},getParent:function(jq,id){\nreturn _46(jq[0],id);\n},getChildren:function(jq,id){\nreturn _1b(jq[0],id);\n},getLevel:function(jq,id){\nreturn _7c(jq[0],id);\n},find:function(jq,id){\nreturn _37(jq[0],id);\n},isLeaf:function(jq,id){\nvar _da=$.data(jq[0],\"treegrid\").options;\nvar tr=_da.finder.getTr(jq[0],id);\nvar hit=tr.find(\"span.tree-hit\");\nreturn hit.length==0;\n},select:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"selectRow\",id);\n});\n},unselect:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"unselectRow\",id);\n});\n},collapse:function(jq,id){\nreturn jq.each(function(){\n_87(this,id);\n});\n},expand:function(jq,id){\nreturn jq.each(function(){\n_8b(this,id);\n});\n},toggle:function(jq,id){\nreturn jq.each(function(){\n_28(this,id);\n});\n},collapseAll:function(jq,id){\nreturn jq.each(function(){\n_95(this,id);\n});\n},expandAll:function(jq,id){\nreturn jq.each(function(){\n_9a(this,id);\n});\n},expandTo:function(jq,id){\nreturn jq.each(function(){\n_9f(this,id);\n});\n},append:function(jq,_db){\nreturn jq.each(function(){\n_a3(this,_db);\n});\n},insert:function(jq,_dc){\nreturn jq.each(function(){\n_aa(this,_dc);\n});\n},remove:function(jq,id){\nreturn jq.each(function(){\n_b6(this,id);\n});\n},pop:function(jq,id){\nvar row=jq.treegrid(\"find\",id);\njq.treegrid(\"remove\",id);\nreturn row;\n},refresh:function(jq,id){\nreturn jq.each(function(){\nvar _dd=$.data(this,\"treegrid\").options;\n_dd.view.refreshRow.call(_dd.view,this,id);\n});\n},update:function(jq,_de){\nreturn jq.each(function(){\nvar _df=$.data(this,\"treegrid\").options;\nvar row=_de.row;\n_df.view.updateRow.call(_df.view,this,_de.id,row);\nif(row.checked!=undefined){\nrow=_37(this,_de.id);\n$.extend(row,{checkState:row.checked?\"checked\":(row.checked===false?\"unchecked\":undefined)});\n_49(this,_de.id);\n}\n});\n},beginEdit:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"beginEdit\",id);\n$(this).treegrid(\"fixRowHeight\",id);\n});\n},endEdit:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"endEdit\",id);\n});\n},cancelEdit:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"cancelEdit\",id);\n});\n},showLines:function(jq){\nreturn jq.each(function(){\n_bc(this);\n});\n},setSelectionState:function(jq){\nreturn jq.each(function(){\n$(this).datagrid(\"setSelectionState\");\nvar _e0=$(this).data(\"treegrid\");\nfor(var i=0;i<_e0.tmpIds.length;i++){\n_29(this,_e0.tmpIds[i],true,true);\n}\n_e0.tmpIds=[];\n});\n},getCheckedNodes:function(jq,_e1){\n_e1=_e1||\"checked\";\nvar _e2=[];\n$.easyui.forEach(jq.data(\"treegrid\").checkedRows,false,function(row){\nif(row.checkState==_e1){\n_e2.push(row);\n}\n});\nreturn _e2;\n},checkNode:function(jq,id){\nreturn jq.each(function(){\n_29(this,id,true);\n});\n},uncheckNode:function(jq,id){\nreturn jq.each(function(){\n_29(this,id,false);\n});\n},clearChecked:function(jq){\nreturn jq.each(function(){\nvar _e3=this;\nvar _e4=$(_e3).treegrid(\"options\");\n$(_e3).datagrid(\"clearChecked\");\n$.map($(_e3).treegrid(\"getCheckedNodes\"),function(row){\n_29(_e3,row[_e4.idField],false,true);\n});\n});\n}};\n$.fn.treegrid.parseOptions=function(_e5){\nreturn $.extend({},$.fn.datagrid.parseOptions(_e5),$.parser.parseOptions(_e5,[\"treeField\",{checkbox:\"boolean\",cascadeCheck:\"boolean\",onlyLeafCheck:\"boolean\"},{animate:\"boolean\"}]));\n};\nvar _e6=$.extend({},$.fn.datagrid.defaults.view,{render:function(_e7,_e8,_e9){\nvar _ea=$.data(_e7,\"treegrid\").options;\nvar _eb=$(_e7).datagrid(\"getColumnFields\",_e9);\nvar _ec=$.data(_e7,\"datagrid\").rowIdPrefix;\nif(_e9){\nif(!(_ea.rownumbers||(_ea.frozenColumns&&_ea.frozenColumns.length))){\nreturn;\n}\n}\nvar _ed=this;\nif(this.treeNodes&&this.treeNodes.length){\nvar _ee=_ef.call(this,_e9,this.treeLevel,this.treeNodes);\n$(_e8).append(_ee.join(\"\"));\n}\nfunction _ef(_f0,_f1,_f2){\nvar _f3=$(_e7).treegrid(\"getParent\",_f2[0][_ea.idField]);\nvar _f4=(_f3?_f3.children.length:$(_e7).treegrid(\"getRoots\").length)-_f2.length;\nvar _f5=[\"<table class=\\\"datagrid-btable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"];\nfor(var i=0;i<_f2.length;i++){\nvar row=_f2[i];\nif(row.state!=\"open\"&&row.state!=\"closed\"){\nrow.state=\"open\";\n}\nvar css=_ea.rowStyler?_ea.rowStyler.call(_e7,row):\"\";\nvar cs=this.getStyleValue(css);\nvar cls=\"class=\\\"datagrid-row \"+(_f4++%2&&_ea.striped?\"datagrid-row-alt \":\" \")+cs.c+\"\\\"\";\nvar _f6=cs.s?\"style=\\\"\"+cs.s+\"\\\"\":\"\";\nvar _f7=_ec+\"-\"+(_f0?1:2)+\"-\"+row[_ea.idField];\n_f5.push(\"<tr id=\\\"\"+_f7+\"\\\" node-id=\\\"\"+row[_ea.idField]+\"\\\" \"+cls+\" \"+_f6+\">\");\n_f5=_f5.concat(_ed.renderRow.call(_ed,_e7,_eb,_f0,_f1,row));\n_f5.push(\"</tr>\");\nif(row.children&&row.children.length){\nvar tt=_ef.call(this,_f0,_f1+1,row.children);\nvar v=row.state==\"closed\"?\"none\":\"block\";\n_f5.push(\"<tr class=\\\"treegrid-tr-tree\\\"><td style=\\\"border:0px\\\" colspan=\"+(_eb.length+(_ea.rownumbers?1:0))+\"><div style=\\\"display:\"+v+\"\\\">\");\n_f5=_f5.concat(tt);\n_f5.push(\"</div></td></tr>\");\n}\n}\n_f5.push(\"</tbody></table>\");\nreturn _f5;\n};\n},renderFooter:function(_f8,_f9,_fa){\nvar _fb=$.data(_f8,\"treegrid\").options;\nvar _fc=$.data(_f8,\"treegrid\").footer||[];\nvar _fd=$(_f8).datagrid(\"getColumnFields\",_fa);\nvar _fe=[\"<table class=\\\"datagrid-ftable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"];\nfor(var i=0;i<_fc.length;i++){\nvar row=_fc[i];\nrow[_fb.idField]=row[_fb.idField]||(\"foot-row-id\"+i);\n_fe.push(\"<tr class=\\\"datagrid-row\\\" node-id=\\\"\"+row[_fb.idField]+\"\\\">\");\n_fe.push(this.renderRow.call(this,_f8,_fd,_fa,0,row));\n_fe.push(\"</tr>\");\n}\n_fe.push(\"</tbody></table>\");\n$(_f9).html(_fe.join(\"\"));\n},renderRow:function(_ff,_100,_101,_102,row){\nvar _103=$.data(_ff,\"treegrid\");\nvar opts=_103.options;\nvar cc=[];\nif(_101&&opts.rownumbers){\ncc.push(\"<td class=\\\"datagrid-td-rownumber\\\"><div class=\\\"datagrid-cell-rownumber\\\">0</div></td>\");\n}\nfor(var i=0;i<_100.length;i++){\nvar _104=_100[i];\nvar col=$(_ff).datagrid(\"getColumnOption\",_104);\nif(col){\nvar css=col.styler?(col.styler(row[_104],row)||\"\"):\"\";\nvar cs=this.getStyleValue(css);\nvar cls=cs.c?\"class=\\\"\"+cs.c+\"\\\"\":\"\";\nvar _105=col.hidden?\"style=\\\"display:none;\"+cs.s+\"\\\"\":(cs.s?\"style=\\\"\"+cs.s+\"\\\"\":\"\");\ncc.push(\"<td field=\\\"\"+_104+\"\\\" \"+cls+\" \"+_105+\">\");\nvar _105=\"\";\nif(!col.checkbox){\nif(col.align){\n_105+=\"text-align:\"+col.align+\";\";\n}\nif(!opts.nowrap){\n_105+=\"white-space:normal;height:auto;\";\n}else{\nif(opts.autoRowHeight){\n_105+=\"height:auto;\";\n}\n}\n}\ncc.push(\"<div style=\\\"\"+_105+\"\\\" \");\nif(col.checkbox){\ncc.push(\"class=\\\"datagrid-cell-check \");\n}else{\ncc.push(\"class=\\\"datagrid-cell \"+col.cellClass);\n}\nif(_104==opts.treeField){\ncc.push(\" tree-node\");\n}\ncc.push(\"\\\">\");\nif(col.checkbox){\nif(row.checked){\ncc.push(\"<input type=\\\"checkbox\\\" checked=\\\"checked\\\"\");\n}else{\ncc.push(\"<input type=\\\"checkbox\\\"\");\n}\ncc.push(\" name=\\\"\"+_104+\"\\\" value=\\\"\"+(row[_104]!=undefined?row[_104]:\"\")+\"\\\">\");\n}else{\nvar val=null;\nif(col.formatter){\nval=col.formatter(row[_104],row);\n}else{\nval=row[_104];\n}\nif(_104==opts.treeField){\nfor(var j=0;j<_102;j++){\ncc.push(\"<span class=\\\"tree-indent\\\"></span>\");\n}\nif(row.state==\"closed\"){\ncc.push(\"<span class=\\\"tree-hit tree-collapsed\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-folder \"+(row.iconCls?row.iconCls:\"\")+\"\\\"></span>\");\n}else{\nif(row.children&&row.children.length){\ncc.push(\"<span class=\\\"tree-hit tree-expanded\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-folder tree-folder-open \"+(row.iconCls?row.iconCls:\"\")+\"\\\"></span>\");\n}else{\ncc.push(\"<span class=\\\"tree-indent\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-file \"+(row.iconCls?row.iconCls:\"\")+\"\\\"></span>\");\n}\n}\nif(this.hasCheckbox(_ff,row)){\nvar flag=0;\nvar crow=$.easyui.getArrayItem(_103.checkedRows,opts.idField,row[opts.idField]);\nif(crow){\nflag=crow.checkState==\"checked\"?1:2;\nrow.checkState=crow.checkState;\nrow.checked=crow.checked;\n$.easyui.addArrayItem(_103.checkedRows,opts.idField,row);\n}else{\nvar prow=$.easyui.getArrayItem(_103.checkedRows,opts.idField,row._parentId);\nif(prow&&prow.checkState==\"checked\"&&opts.cascadeCheck){\nflag=1;\nrow.checked=true;\n$.easyui.addArrayItem(_103.checkedRows,opts.idField,row);\n}else{\nif(row.checked){\n$.easyui.addArrayItem(_103.tmpIds,row[opts.idField]);\n}\n}\nrow.checkState=flag?\"checked\":\"unchecked\";\n}\ncc.push(\"<span class=\\\"tree-checkbox tree-checkbox\"+flag+\"\\\"></span>\");\n}else{\nrow.checkState=undefined;\nrow.checked=undefined;\n}\ncc.push(\"<span class=\\\"tree-title\\\">\"+val+\"</span>\");\n}else{\ncc.push(val);\n}\n}\ncc.push(\"</div>\");\ncc.push(\"</td>\");\n}\n}\nreturn cc.join(\"\");\n},hasCheckbox:function(_106,row){\nvar opts=$.data(_106,\"treegrid\").options;\nif(opts.checkbox){\nif($.isFunction(opts.checkbox)){\nif(opts.checkbox.call(_106,row)){\nreturn true;\n}else{\nreturn false;\n}\n}else{\nif(opts.onlyLeafCheck){\nif(row.state==\"open\"&&!(row.children&&row.children.length)){\nreturn true;\n}\n}else{\nreturn true;\n}\n}\n}\nreturn false;\n},refreshRow:function(_107,id){\nthis.updateRow.call(this,_107,id,{});\n},updateRow:function(_108,id,row){\nvar opts=$.data(_108,\"treegrid\").options;\nvar _109=$(_108).treegrid(\"find\",id);\n$.extend(_109,row);\nvar _10a=$(_108).treegrid(\"getLevel\",id)-1;\nvar _10b=opts.rowStyler?opts.rowStyler.call(_108,_109):\"\";\nvar _10c=$.data(_108,\"datagrid\").rowIdPrefix;\nvar _10d=_109[opts.idField];\nfunction _10e(_10f){\nvar _110=$(_108).treegrid(\"getColumnFields\",_10f);\nvar tr=opts.finder.getTr(_108,id,\"body\",(_10f?1:2));\nvar _111=tr.find(\"div.datagrid-cell-rownumber\").html();\nvar _112=tr.find(\"div.datagrid-cell-check input[type=checkbox]\").is(\":checked\");\ntr.html(this.renderRow(_108,_110,_10f,_10a,_109));\ntr.attr(\"style\",_10b||\"\");\ntr.find(\"div.datagrid-cell-rownumber\").html(_111);\nif(_112){\ntr.find(\"div.datagrid-cell-check input[type=checkbox]\")._propAttr(\"checked\",true);\n}\nif(_10d!=id){\ntr.attr(\"id\",_10c+\"-\"+(_10f?1:2)+\"-\"+_10d);\ntr.attr(\"node-id\",_10d);\n}\n};\n_10e.call(this,true);\n_10e.call(this,false);\n$(_108).treegrid(\"fixRowHeight\",id);\n},deleteRow:function(_113,id){\nvar opts=$.data(_113,\"treegrid\").options;\nvar tr=opts.finder.getTr(_113,id);\ntr.next(\"tr.treegrid-tr-tree\").remove();\ntr.remove();\nvar _114=del(id);\nif(_114){\nif(_114.children.length==0){\ntr=opts.finder.getTr(_113,_114[opts.idField]);\ntr.next(\"tr.treegrid-tr-tree\").remove();\nvar cell=tr.children(\"td[field=\\\"\"+opts.treeField+\"\\\"]\").children(\"div.datagrid-cell\");\ncell.find(\".tree-icon\").removeClass(\"tree-folder\").addClass(\"tree-file\");\ncell.find(\".tree-hit\").remove();\n$(\"<span class=\\\"tree-indent\\\"></span>\").prependTo(cell);\n}\n}\nthis.setEmptyMsg(_113);\nfunction del(id){\nvar cc;\nvar _115=$(_113).treegrid(\"getParent\",id);\nif(_115){\ncc=_115.children;\n}else{\ncc=$(_113).treegrid(\"getData\");\n}\nfor(var i=0;i<cc.length;i++){\nif(cc[i][opts.idField]==id){\ncc.splice(i,1);\nbreak;\n}\n}\nreturn _115;\n};\n},onBeforeRender:function(_116,_117,data){\nif($.isArray(_117)){\ndata={total:_117.length,rows:_117};\n_117=null;\n}\nif(!data){\nreturn false;\n}\nvar _118=$.data(_116,\"treegrid\");\nvar opts=_118.options;\nif(data.length==undefined){\nif(data.footer){\n_118.footer=data.footer;\n}\nif(data.total){\n_118.total=data.total;\n}\ndata=this.transfer(_116,_117,data.rows);\n}else{\nfunction _119(_11a,_11b){\nfor(var i=0;i<_11a.length;i++){\nvar row=_11a[i];\nrow._parentId=_11b;\nif(row.children&&row.children.length){\n_119(row.children,row[opts.idField]);\n}\n}\n};\n_119(data,_117);\n}\nthis.sort(_116,data);\nthis.treeNodes=data;\nthis.treeLevel=$(_116).treegrid(\"getLevel\",_117);\nvar node=_37(_116,_117);\nif(node){\nif(node.children){\nnode.children=node.children.concat(data);\n}else{\nnode.children=data;\n}\n}else{\n_118.data=_118.data.concat(data);\n}\n},sort:function(_11c,data){\nvar opts=$.data(_11c,\"treegrid\").options;\nif(!opts.remoteSort&&opts.sortName){\nvar _11d=opts.sortName.split(\",\");\nvar _11e=opts.sortOrder.split(\",\");\n_11f(data);\n}\nfunction _11f(rows){\nrows.sort(function(r1,r2){\nvar r=0;\nfor(var i=0;i<_11d.length;i++){\nvar sn=_11d[i];\nvar so=_11e[i];\nvar col=$(_11c).treegrid(\"getColumnOption\",sn);\nvar _120=col.sorter||function(a,b){\nreturn a==b?0:(a>b?1:-1);\n};\nr=_120(r1[sn],r2[sn])*(so==\"asc\"?1:-1);\nif(r!=0){\nreturn r;\n}\n}\nreturn r;\n});\nfor(var i=0;i<rows.length;i++){\nvar _121=rows[i].children;\nif(_121&&_121.length){\n_11f(_121);\n}\n}\n};\n},transfer:function(_122,_123,data){\nvar opts=$.data(_122,\"treegrid\").options;\nvar rows=$.extend([],data);\nvar _124=_125(_123,rows);\nvar toDo=$.extend([],_124);\nwhile(toDo.length){\nvar node=toDo.shift();\nvar _126=_125(node[opts.idField],rows);\nif(_126.length){\nif(node.children){\nnode.children=node.children.concat(_126);\n}else{\nnode.children=_126;\n}\ntoDo=toDo.concat(_126);\n}\n}\nreturn _124;\nfunction _125(_127,rows){\nvar rr=[];\nfor(var i=0;i<rows.length;i++){\nvar row=rows[i];\nif(row._parentId==_127){\nrr.push(row);\nrows.splice(i,1);\ni--;\n}\n}\nreturn rr;\n};\n}});\n$.fn.treegrid.defaults=$.extend({},$.fn.datagrid.defaults,{treeField:null,checkbox:false,cascadeCheck:true,onlyLeafCheck:false,lines:false,animate:false,singleSelect:true,view:_e6,rowEvents:$.extend({},$.fn.datagrid.defaults.rowEvents,{mouseover:_22(true),mouseout:_22(false),click:_24}),loader:function(_128,_129,_12a){\nvar opts=$(this).treegrid(\"options\");\nif(!opts.url){\nreturn false;\n}\n$.ajax({type:opts.method,url:opts.url,data:_128,dataType:\"json\",success:function(data){\n_129(data);\n},error:function(){\n_12a.apply(this,arguments);\n}});\n},loadFilter:function(data,_12b){\nreturn data;\n},finder:{getTr:function(_12c,id,type,_12d){\ntype=type||\"body\";\n_12d=_12d||0;\nvar dc=$.data(_12c,\"datagrid\").dc;\nif(_12d==0){\nvar opts=$.data(_12c,\"treegrid\").options;\nvar tr1=opts.finder.getTr(_12c,id,type,1);\nvar tr2=opts.finder.getTr(_12c,id,type,2);\nreturn tr1.add(tr2);\n}else{\nif(type==\"body\"){\nvar tr=$(\"#\"+$.data(_12c,\"datagrid\").rowIdPrefix+\"-\"+_12d+\"-\"+id);\nif(!tr.length){\ntr=(_12d==1?dc.body1:dc.body2).find(\"tr[node-id=\\\"\"+id+\"\\\"]\");\n}\nreturn tr;\n}else{\nif(type==\"footer\"){\nreturn (_12d==1?dc.footer1:dc.footer2).find(\"tr[node-id=\\\"\"+id+\"\\\"]\");\n}else{\nif(type==\"selected\"){\nreturn (_12d==1?dc.body1:dc.body2).find(\"tr.datagrid-row-selected\");\n}else{\nif(type==\"highlight\"){\nreturn (_12d==1?dc.body1:dc.body2).find(\"tr.datagrid-row-over\");\n}else{\nif(type==\"checked\"){\nreturn (_12d==1?dc.body1:dc.body2).find(\"tr.datagrid-row-checked\");\n}else{\nif(type==\"last\"){\nreturn (_12d==1?dc.body1:dc.body2).find(\"tr:last[node-id]\");\n}else{\nif(type==\"allbody\"){\nreturn (_12d==1?dc.body1:dc.body2).find(\"tr[node-id]\");\n}else{\nif(type==\"allfooter\"){\nreturn (_12d==1?dc.footer1:dc.footer2).find(\"tr[node-id]\");\n}\n}\n}\n}\n}\n}\n}\n}\n}\n},getRow:function(_12e,p){\nvar id=(typeof p==\"object\")?p.attr(\"node-id\"):p;\nreturn $(_12e).treegrid(\"find\",id);\n},getRows:function(_12f){\nreturn $(_12f).treegrid(\"getChildren\");\n}},onBeforeLoad:function(row,_130){\n},onLoadSuccess:function(row,data){\n},onLoadError:function(){\n},onBeforeCollapse:function(row){\n},onCollapse:function(row){\n},onBeforeExpand:function(row){\n},onExpand:function(row){\n},onClickRow:function(row){\n},onDblClickRow:function(row){\n},onClickCell:function(_131,row){\n},onDblClickCell:function(_132,row){\n},onContextMenu:function(e,row){\n},onBeforeEdit:function(row){\n},onAfterEdit:function(row,_133){\n},onCancelEdit:function(row){\n},onBeforeCheckNode:function(row,_134){\n},onCheckNode:function(row,_135){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.validatebox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\n$(_2).addClass(\"validatebox-text\");\n};\nfunction _3(_4){\nvar _5=$.data(_4,\"validatebox\");\n_5.validating=false;\nif(_5.vtimer){\nclearTimeout(_5.vtimer);\n}\nif(_5.ftimer){\nclearTimeout(_5.ftimer);\n}\n$(_4).tooltip(\"destroy\");\n$(_4)._unbind();\n$(_4).remove();\n};\nfunction _6(_7){\nvar _8=$.data(_7,\"validatebox\").options;\n$(_7)._unbind(\".validatebox\");\nif(_8.novalidate||_8.disabled){\nreturn;\n}\nfor(var _9 in _8.events){\n$(_7)._bind(_9+\".validatebox\",{target:_7},_8.events[_9]);\n}\n};\nfunction _a(e){\nvar _b=e.data.target;\nvar _c=$.data(_b,\"validatebox\");\nvar _d=_c.options;\nif($(_b).attr(\"readonly\")){\nreturn;\n}\n_c.validating=true;\n_c.value=_d.val(_b);\n(function(){\nif(!$(_b).is(\":visible\")){\n_c.validating=false;\n}\nif(_c.validating){\nvar _e=_d.val(_b);\nif(_c.value!=_e){\n_c.value=_e;\nif(_c.vtimer){\nclearTimeout(_c.vtimer);\n}\n_c.vtimer=setTimeout(function(){\n$(_b).validatebox(\"validate\");\n},_d.delay);\n}else{\nif(_c.message){\n_d.err(_b,_c.message);\n}\n}\n_c.ftimer=setTimeout(arguments.callee,_d.interval);\n}\n})();\n};\nfunction _f(e){\nvar _10=e.data.target;\nvar _11=$.data(_10,\"validatebox\");\nvar _12=_11.options;\n_11.validating=false;\nif(_11.vtimer){\nclearTimeout(_11.vtimer);\n_11.vtimer=undefined;\n}\nif(_11.ftimer){\nclearTimeout(_11.ftimer);\n_11.ftimer=undefined;\n}\nif(_12.validateOnBlur){\nsetTimeout(function(){\n$(_10).validatebox(\"validate\");\n},0);\n}\n_12.err(_10,_11.message,\"hide\");\n};\nfunction _13(e){\nvar _14=e.data.target;\nvar _15=$.data(_14,\"validatebox\");\n_15.options.err(_14,_15.message,\"show\");\n};\nfunction _16(e){\nvar _17=e.data.target;\nvar _18=$.data(_17,\"validatebox\");\nif(!_18.validating){\n_18.options.err(_17,_18.message,\"hide\");\n}\n};\nfunction _19(_1a,_1b,_1c){\nvar _1d=$.data(_1a,\"validatebox\");\nvar _1e=_1d.options;\nvar t=$(_1a);\nif(_1c==\"hide\"||!_1b){\nt.tooltip(\"hide\");\n}else{\nif((t.is(\":focus\")&&_1d.validating)||_1c==\"show\"){\nt.tooltip($.extend({},_1e.tipOptions,{content:_1b,position:_1e.tipPosition,deltaX:_1e.deltaX,deltaY:_1e.deltaY})).tooltip(\"show\");\n}\n}\n};\nfunction _1f(_20){\nvar _21=$.data(_20,\"validatebox\");\nvar _22=_21.options;\nvar box=$(_20);\n_22.onBeforeValidate.call(_20);\nvar _23=_24();\n_23?box.removeClass(\"validatebox-invalid\"):box.addClass(\"validatebox-invalid\");\n_22.err(_20,_21.message);\n_22.onValidate.call(_20,_23);\nreturn _23;\nfunction _25(msg){\n_21.message=msg;\n};\nfunction _26(_27,_28){\nvar _29=_22.val(_20);\nvar _2a=/([a-zA-Z_]+)(.*)/.exec(_27);\nvar _2b=_22.rules[_2a[1]];\nif(_2b&&_29){\nvar _2c=_28||_22.validParams||eval(_2a[2]);\nif(!_2b[\"validator\"].call(_20,_29,_2c)){\nvar _2d=_2b[\"message\"];\nif(_2c){\nfor(var i=0;i<_2c.length;i++){\n_2d=_2d.replace(new RegExp(\"\\\\{\"+i+\"\\\\}\",\"g\"),_2c[i]);\n}\n}\n_25(_22.invalidMessage||_2d);\nreturn false;\n}\n}\nreturn true;\n};\nfunction _24(){\n_25(\"\");\nif(!_22._validateOnCreate){\nsetTimeout(function(){\n_22._validateOnCreate=true;\n},0);\nreturn true;\n}\nif(_22.novalidate||_22.disabled){\nreturn true;\n}\nif(_22.required){\nif(_22.val(_20)==\"\"){\n_25(_22.missingMessage);\nreturn false;\n}\n}\nif(_22.validType){\nif($.isArray(_22.validType)){\nfor(var i=0;i<_22.validType.length;i++){\nif(!_26(_22.validType[i])){\nreturn false;\n}\n}\n}else{\nif(typeof _22.validType==\"string\"){\nif(!_26(_22.validType)){\nreturn false;\n}\n}else{\nfor(var _2e in _22.validType){\nvar _2f=_22.validType[_2e];\nif(!_26(_2e,_2f)){\nreturn false;\n}\n}\n}\n}\n}\nreturn true;\n};\n};\nfunction _30(_31,_32){\nvar _33=$.data(_31,\"validatebox\").options;\nif(_32!=undefined){\n_33.disabled=_32;\n}\nif(_33.disabled){\n$(_31).addClass(\"validatebox-disabled\")._propAttr(\"disabled\",true);\n}else{\n$(_31).removeClass(\"validatebox-disabled\")._propAttr(\"disabled\",false);\n}\n};\nfunction _34(_35,_36){\nvar _37=$.data(_35,\"validatebox\").options;\n_37.readonly=_36==undefined?true:_36;\nif(_37.readonly||!_37.editable){\n$(_35).triggerHandler(\"blur.validatebox\");\n$(_35).addClass(\"validatebox-readonly\")._propAttr(\"readonly\",true);\n}else{\n$(_35).removeClass(\"validatebox-readonly\")._propAttr(\"readonly\",false);\n}\n};\n$.fn.validatebox=function(_38,_39){\nif(typeof _38==\"string\"){\nreturn $.fn.validatebox.methods[_38](this,_39);\n}\n_38=_38||{};\nreturn this.each(function(){\nvar _3a=$.data(this,\"validatebox\");\nif(_3a){\n$.extend(_3a.options,_38);\n}else{\n_1(this);\n_3a=$.data(this,\"validatebox\",{options:$.extend({},$.fn.validatebox.defaults,$.fn.validatebox.parseOptions(this),_38)});\n}\n_3a.options._validateOnCreate=_3a.options.validateOnCreate;\n_30(this,_3a.options.disabled);\n_34(this,_3a.options.readonly);\n_6(this);\n_1f(this);\n});\n};\n$.fn.validatebox.methods={options:function(jq){\nreturn $.data(jq[0],\"validatebox\").options;\n},destroy:function(jq){\nreturn jq.each(function(){\n_3(this);\n});\n},validate:function(jq){\nreturn jq.each(function(){\n_1f(this);\n});\n},isValid:function(jq){\nreturn _1f(jq[0]);\n},enableValidation:function(jq){\nreturn jq.each(function(){\n$(this).validatebox(\"options\").novalidate=false;\n_6(this);\n_1f(this);\n});\n},disableValidation:function(jq){\nreturn jq.each(function(){\n$(this).validatebox(\"options\").novalidate=true;\n_6(this);\n_1f(this);\n});\n},resetValidation:function(jq){\nreturn jq.each(function(){\nvar _3b=$(this).validatebox(\"options\");\n_3b._validateOnCreate=_3b.validateOnCreate;\n_1f(this);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_30(this,false);\n_6(this);\n_1f(this);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_30(this,true);\n_6(this);\n_1f(this);\n});\n},readonly:function(jq,_3c){\nreturn jq.each(function(){\n_34(this,_3c);\n_6(this);\n_1f(this);\n});\n}};\n$.fn.validatebox.parseOptions=function(_3d){\nvar t=$(_3d);\nreturn $.extend({},$.parser.parseOptions(_3d,[\"validType\",\"missingMessage\",\"invalidMessage\",\"tipPosition\",{delay:\"number\",interval:\"number\",deltaX:\"number\"},{editable:\"boolean\",validateOnCreate:\"boolean\",validateOnBlur:\"boolean\"}]),{required:(t.attr(\"required\")?true:undefined),disabled:(t.attr(\"disabled\")?true:undefined),readonly:(t.attr(\"readonly\")?true:undefined),novalidate:(t.attr(\"novalidate\")!=undefined?true:undefined)});\n};\n$.fn.validatebox.defaults={required:false,validType:null,validParams:null,delay:200,interval:200,missingMessage:\"This field is required.\",invalidMessage:null,tipPosition:\"right\",deltaX:0,deltaY:0,novalidate:false,editable:true,disabled:false,readonly:false,validateOnCreate:true,validateOnBlur:false,events:{focus:_a,blur:_f,mouseenter:_13,mouseleave:_16,click:function(e){\nvar t=$(e.data.target);\nif(t.attr(\"type\")==\"checkbox\"||t.attr(\"type\")==\"radio\"){\nt.focus().validatebox(\"validate\");\n}\n}},val:function(_3e){\nreturn $(_3e).val();\n},err:function(_3f,_40,_41){\n_19(_3f,_40,_41);\n},tipOptions:{showEvent:\"none\",hideEvent:\"none\",showDelay:0,hideDelay:0,zIndex:\"\",onShow:function(){\n$(this).tooltip(\"tip\").css({color:\"#000\",borderColor:\"#CC9933\",backgroundColor:\"#FFFFCC\"});\n},onHide:function(){\n$(this).tooltip(\"destroy\");\n}},rules:{email:{validator:function(_42){\nreturn /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?$/i.test(_42);\n},message:\"Please enter a valid email address.\"},url:{validator:function(_43){\nreturn /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(_43);\n},message:\"Please enter a valid URL.\"},length:{validator:function(_44,_45){\nvar len=$.trim(_44).length;\nreturn len>=_45[0]&&len<=_45[1];\n},message:\"Please enter a value between {0} and {1}.\"},remote:{validator:function(_46,_47){\nvar _48={};\n_48[_47[1]]=_46;\nvar _49=$.ajax({url:_47[0],dataType:\"json\",data:_48,async:false,cache:false,type:\"post\"}).responseText;\nreturn _49==\"true\";\n},message:\"Please fix this field.\"}},onBeforeValidate:function(){\n},onValidate:function(_4a){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/plugins/jquery.window.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2,_3){\nvar _4=$.data(_2,\"window\");\nif(_3){\nif(_3.left!=null){\n_4.options.left=_3.left;\n}\nif(_3.top!=null){\n_4.options.top=_3.top;\n}\n}\n$(_2).panel(\"move\",_4.options);\nif(_4.shadow){\n_4.shadow.css({left:_4.options.left,top:_4.options.top});\n}\n};\nfunction _5(_6,_7){\nvar _8=$.data(_6,\"window\").options;\nvar pp=$(_6).window(\"panel\");\nvar _9=pp._outerWidth();\nif(_8.inline){\nvar _a=pp.parent();\n_8.left=Math.ceil((_a.width()-_9)/2+_a.scrollLeft());\n}else{\nvar _b=_8.fixed?0:$(document).scrollLeft();\n_8.left=Math.ceil(($(window)._outerWidth()-_9)/2+_b);\n}\nif(_7){\n_1(_6);\n}\n};\nfunction _c(_d,_e){\nvar _f=$.data(_d,\"window\").options;\nvar pp=$(_d).window(\"panel\");\nvar _10=pp._outerHeight();\nif(_f.inline){\nvar _11=pp.parent();\n_f.top=Math.ceil((_11.height()-_10)/2+_11.scrollTop());\n}else{\nvar _12=_f.fixed?0:$(document).scrollTop();\n_f.top=Math.ceil(($(window)._outerHeight()-_10)/2+_12);\n}\nif(_e){\n_1(_d);\n}\n};\nfunction _13(_14){\nvar _15=$.data(_14,\"window\");\nvar _16=_15.options;\nvar win=$(_14).panel($.extend({},_15.options,{border:false,doSize:true,closed:true,cls:\"window \"+(!_16.border?\"window-thinborder window-noborder \":(_16.border==\"thin\"?\"window-thinborder \":\"\"))+(_16.cls||\"\"),headerCls:\"window-header \"+(_16.headerCls||\"\"),bodyCls:\"window-body \"+(_16.noheader?\"window-body-noheader \":\" \")+(_16.bodyCls||\"\"),onBeforeDestroy:function(){\nif(_16.onBeforeDestroy.call(_14)==false){\nreturn false;\n}\nif(_15.shadow){\n_15.shadow.remove();\n}\nif(_15.mask){\n_15.mask.remove();\n}\n},onClose:function(){\nif(_15.shadow){\n_15.shadow.hide();\n}\nif(_15.mask){\n_15.mask.hide();\n}\n_16.onClose.call(_14);\n},onOpen:function(){\nif(_15.mask){\n_15.mask.css($.extend({display:\"block\",zIndex:$.fn.window.defaults.zIndex++},$.fn.window.getMaskSize(_14)));\n}\nif(_15.shadow){\n_15.shadow.css({display:\"block\",position:(_16.fixed?\"fixed\":\"absolute\"),zIndex:$.fn.window.defaults.zIndex++,left:_16.left,top:_16.top,width:_15.window._outerWidth(),height:_15.window._outerHeight()});\n}\n_15.window.css({position:(_16.fixed?\"fixed\":\"absolute\"),zIndex:$.fn.window.defaults.zIndex++});\n_16.onOpen.call(_14);\n},onResize:function(_17,_18){\nvar _19=$(this).panel(\"options\");\n$.extend(_16,{width:_19.width,height:_19.height,left:_19.left,top:_19.top});\nif(_15.shadow){\n_15.shadow.css({left:_16.left,top:_16.top,width:_15.window._outerWidth(),height:_15.window._outerHeight()});\n}\n_16.onResize.call(_14,_17,_18);\n},onMinimize:function(){\nif(_15.shadow){\n_15.shadow.hide();\n}\nif(_15.mask){\n_15.mask.hide();\n}\n_15.options.onMinimize.call(_14);\n},onBeforeCollapse:function(){\nif(_16.onBeforeCollapse.call(_14)==false){\nreturn false;\n}\nif(_15.shadow){\n_15.shadow.hide();\n}\n},onExpand:function(){\nif(_15.shadow){\n_15.shadow.show();\n}\n_16.onExpand.call(_14);\n}}));\n_15.window=win.panel(\"panel\");\nif(_15.mask){\n_15.mask.remove();\n}\nif(_16.modal){\n_15.mask=$(\"<div class=\\\"window-mask\\\" style=\\\"display:none\\\"></div>\").insertAfter(_15.window);\n}\nif(_15.shadow){\n_15.shadow.remove();\n}\nif(_16.shadow){\n_15.shadow=$(\"<div class=\\\"window-shadow\\\" style=\\\"display:none\\\"></div>\").insertAfter(_15.window);\n}\nvar _1a=_16.closed;\nif(_16.left==null){\n_5(_14);\n}\nif(_16.top==null){\n_c(_14);\n}\n_1(_14);\nif(!_1a){\nwin.window(\"open\");\n}\n};\nfunction _1b(_1c,top,_1d,_1e){\nvar _1f=this;\nvar _20=$.data(_1f,\"window\");\nvar _21=_20.options;\nif(!_21.constrain){\nreturn {};\n}\nif($.isFunction(_21.constrain)){\nreturn _21.constrain.call(_1f,_1c,top,_1d,_1e);\n}\nvar win=$(_1f).window(\"window\");\nvar _22=_21.inline?win.parent():$(window);\nvar _23=_21.fixed?0:_22.scrollTop();\nif(_1c<0){\n_1c=0;\n}\nif(top<_23){\ntop=_23;\n}\nif(_1c+_1d>_22.width()){\nif(_1d==win.outerWidth()){\n_1c=_22.width()-_1d;\n}else{\n_1d=_22.width()-_1c;\n}\n}\nif(top-_23+_1e>_22.height()){\nif(_1e==win.outerHeight()){\ntop=_22.height()-_1e+_23;\n}else{\n_1e=_22.height()-top+_23;\n}\n}\nreturn {left:_1c,top:top,width:_1d,height:_1e};\n};\nfunction _24(_25){\nvar _26=$.data(_25,\"window\");\nvar _27=_26.options;\n_26.window.draggable({handle:\">div.panel-header>div.panel-title\",disabled:_26.options.draggable==false,onBeforeDrag:function(e){\nif(_26.mask){\n_26.mask.css(\"z-index\",$.fn.window.defaults.zIndex++);\n}\nif(_26.shadow){\n_26.shadow.css(\"z-index\",$.fn.window.defaults.zIndex++);\n}\n_26.window.css(\"z-index\",$.fn.window.defaults.zIndex++);\n},onStartDrag:function(e){\n_28(e);\n},onDrag:function(e){\n_29(e);\nreturn false;\n},onStopDrag:function(e){\n_2a(e,\"move\");\n}});\n_26.window.resizable({disabled:_26.options.resizable==false,onStartResize:function(e){\n_28(e);\n},onResize:function(e){\n_29(e);\nreturn false;\n},onStopResize:function(e){\n_2a(e,\"resize\");\n}});\nfunction _28(e){\n_26.window.css(\"position\",_27.fixed?\"fixed\":\"absolute\");\nif(_26.shadow){\n_26.shadow.css(\"position\",_27.fixed?\"fixed\":\"absolute\");\n}\nif(_26.pmask){\n_26.pmask.remove();\n}\n_26.pmask=$(\"<div class=\\\"window-proxy-mask\\\"></div>\").insertAfter(_26.window);\n_26.pmask.css({display:\"none\",position:(_27.fixed?\"fixed\":\"absolute\"),zIndex:$.fn.window.defaults.zIndex++,left:e.data.left,top:e.data.top,width:_26.window._outerWidth(),height:_26.window._outerHeight()});\nif(_26.proxy){\n_26.proxy.remove();\n}\n_26.proxy=$(\"<div class=\\\"window-proxy\\\"></div>\").insertAfter(_26.window);\n_26.proxy.css({display:\"none\",position:(_27.fixed?\"fixed\":\"absolute\"),zIndex:$.fn.window.defaults.zIndex++,left:e.data.left,top:e.data.top});\n_26.proxy._outerWidth(e.data.width)._outerHeight(e.data.height);\n_26.proxy.hide();\nsetTimeout(function(){\nif(_26.pmask){\n_26.pmask.show();\n}\nif(_26.proxy){\n_26.proxy.show();\n}\n},500);\n};\nfunction _29(e){\n$.extend(e.data,_1b.call(_25,e.data.left,e.data.top,e.data.width,e.data.height));\n_26.pmask.show();\n_26.proxy.css({display:\"block\",left:e.data.left,top:e.data.top});\n_26.proxy._outerWidth(e.data.width);\n_26.proxy._outerHeight(e.data.height);\n};\nfunction _2a(e,_2b){\n_26.window.css(\"position\",_27.fixed?\"fixed\":\"absolute\");\nif(_26.shadow){\n_26.shadow.css(\"position\",_27.fixed?\"fixed\":\"absolute\");\n}\n$.extend(e.data,_1b.call(_25,e.data.left,e.data.top,e.data.width+0.1,e.data.height+0.1));\n$(_25).window(_2b,e.data);\n_26.pmask.remove();\n_26.pmask=null;\n_26.proxy.remove();\n_26.proxy=null;\n};\n};\n$(function(){\nif(!$._positionFixed){\n$(window).resize(function(){\n$(\"body>div.window-mask:visible\").css({width:\"\",height:\"\"});\nsetTimeout(function(){\n$(\"body>div.window-mask:visible\").css($.fn.window.getMaskSize());\n},50);\n});\n}\n});\n$.fn.window=function(_2c,_2d){\nif(typeof _2c==\"string\"){\nvar _2e=$.fn.window.methods[_2c];\nif(_2e){\nreturn _2e(this,_2d);\n}else{\nreturn this.panel(_2c,_2d);\n}\n}\n_2c=_2c||{};\nreturn this.each(function(){\nvar _2f=$.data(this,\"window\");\nif(_2f){\n$.extend(_2f.options,_2c);\n}else{\n_2f=$.data(this,\"window\",{options:$.extend({},$.fn.window.defaults,$.fn.window.parseOptions(this),_2c)});\nif(!_2f.options.inline){\ndocument.body.appendChild(this);\n}\n}\n_13(this);\n_24(this);\n});\n};\n$.fn.window.methods={options:function(jq){\nvar _30=jq.panel(\"options\");\nvar _31=$.data(jq[0],\"window\").options;\nreturn $.extend(_31,{closed:_30.closed,collapsed:_30.collapsed,minimized:_30.minimized,maximized:_30.maximized});\n},window:function(jq){\nreturn $.data(jq[0],\"window\").window;\n},move:function(jq,_32){\nreturn jq.each(function(){\n_1(this,_32);\n});\n},hcenter:function(jq){\nreturn jq.each(function(){\n_5(this,true);\n});\n},vcenter:function(jq){\nreturn jq.each(function(){\n_c(this,true);\n});\n},center:function(jq){\nreturn jq.each(function(){\n_5(this);\n_c(this);\n_1(this);\n});\n}};\n$.fn.window.getMaskSize=function(_33){\nvar _34=$(_33).data(\"window\");\nif(_34&&_34.options.inline){\nreturn {};\n}else{\nif($._positionFixed){\nreturn {position:\"fixed\"};\n}else{\nreturn {width:$(document).width(),height:$(document).height()};\n}\n}\n};\n$.fn.window.parseOptions=function(_35){\nreturn $.extend({},$.fn.panel.parseOptions(_35),$.parser.parseOptions(_35,[{draggable:\"boolean\",resizable:\"boolean\",shadow:\"boolean\",modal:\"boolean\",inline:\"boolean\"}]));\n};\n$.fn.window.defaults=$.extend({},$.fn.panel.defaults,{zIndex:9000,draggable:true,resizable:true,shadow:true,modal:false,border:true,inline:false,title:\"New Window\",collapsible:true,minimizable:true,maximizable:true,closable:true,closed:false,fixed:false,constrain:false});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/readme.txt",
    "content": "Current Version: 1.9.7\n======================\nThis software is allowed to use under freeware license or you need to buy commercial license for better support or other purpose.\nPlease contact us at info@jeasyui.com\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/easyloader.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * easyloader - EasyUI for jQuery\n * \n */\n(function(){\n\tvar modules = {\n\t\tdraggable:{\n\t\t\tjs:'jquery.draggable.js'\n\t\t},\n\t\tdroppable:{\n\t\t\tjs:'jquery.droppable.js'\n\t\t},\n\t\tresizable:{\n\t\t\tjs:'jquery.resizable.js'\n\t\t},\n\t\tlinkbutton:{\n\t\t\tjs:'jquery.linkbutton.js',\n\t\t\tcss:'linkbutton.css'\n\t\t},\n\t\tprogressbar:{\n\t\t\tjs:'jquery.progressbar.js',\n\t\t\tcss:'progressbar.css'\n\t\t},\n\t\ttooltip:{\n\t\t\tjs:'jquery.tooltip.js',\n\t\t\tcss:'tooltip.css'\n\t\t},\n\t\tpagination:{\n\t\t\tjs:'jquery.pagination.js',\n\t\t\tcss:'pagination.css',\n\t\t\tdependencies:['linkbutton']\n\t\t},\n\t\tdatagrid:{\n\t\t\tjs:'jquery.datagrid.js',\n\t\t\tcss:'datagrid.css',\n\t\t\tdependencies:['panel','resizable','linkbutton','pagination']\n\t\t},\n\t\ttreegrid:{\n\t\t\tjs:'jquery.treegrid.js',\n\t\t\tcss:'tree.css',\n\t\t\tdependencies:['datagrid']\n\t\t},\n\t\tpropertygrid:{\n\t\t\tjs:'jquery.propertygrid.js',\n\t\t\tcss:'propertygrid.css',\n\t\t\tdependencies:['datagrid']\n\t\t},\n\t\tdatalist:{\n\t\t\tjs:'jquery.datalist.js',\n\t\t\tcss:'datalist.css',\n\t\t\tdependencies:['datagrid']\n\t\t},\n\t\tpanel: {\n\t\t\tjs:'jquery.panel.js',\n\t\t\tcss:'panel.css'\n\t\t},\n\t\twindow:{\n\t\t\tjs:'jquery.window.js',\n\t\t\tcss:'window.css',\n\t\t\tdependencies:['resizable','draggable','panel']\n\t\t},\n\t\tdialog:{\n\t\t\tjs:'jquery.dialog.js',\n\t\t\tcss:'dialog.css',\n\t\t\tdependencies:['linkbutton','window']\n\t\t},\n\t\tmessager:{\n\t\t\tjs:'jquery.messager.js',\n\t\t\tcss:'messager.css',\n\t\t\tdependencies:['linkbutton','dialog','progressbar']\n\t\t},\n\t\tlayout:{\n\t\t\tjs:'jquery.layout.js',\n\t\t\tcss:'layout.css',\n\t\t\tdependencies:['resizable','panel']\n\t\t},\n\t\tform:{\n\t\t\tjs:'jquery.form.js'\n\t\t},\n\t\tmenu:{\n\t\t\tjs:'jquery.menu.js',\n\t\t\tcss:'menu.css'\n\t\t},\n\t\ttabs:{\n\t\t\tjs:'jquery.tabs.js',\n\t\t\tcss:'tabs.css',\n\t\t\tdependencies:['panel','linkbutton']\n\t\t},\n\t\tmenubutton:{\n\t\t\tjs:'jquery.menubutton.js',\n\t\t\tcss:'menubutton.css',\n\t\t\tdependencies:['linkbutton','menu']\n\t\t},\n\t\tsplitbutton:{\n\t\t\tjs:'jquery.splitbutton.js',\n\t\t\tcss:'splitbutton.css',\n\t\t\tdependencies:['menubutton']\n\t\t},\n\t\tswitchbutton:{\n\t\t\tjs:'jquery.switchbutton.js',\n\t\t\tcss:'switchbutton.css'\n\t\t},\n\t\taccordion:{\n\t\t\tjs:'jquery.accordion.js',\n\t\t\tcss:'accordion.css',\n\t\t\tdependencies:['panel']\n\t\t},\n\t\tcalendar:{\n\t\t\tjs:'jquery.calendar.js',\n\t\t\tcss:'calendar.css'\n\t\t},\n\t\ttextbox:{\n\t\t\tjs:'jquery.textbox.js',\n\t\t\tcss:'textbox.css',\n\t\t\tdependencies:['validatebox','linkbutton']\n\t\t},\n\t\tpasswordbox:{\n\t\t\tjs:'jquery.passwordbox.js',\n\t\t\tcss:'passwordbox.css',\n\t\t\tdependencies:['textbox']\n\t\t},\n\t\tfilebox:{\n\t\t\tjs:'jquery.filebox.js',\n\t\t\tcss:'filebox.css',\n\t\t\tdependencies:['textbox']\n\t\t},\n\t\tradiobutton:{\n\t\t\tjs:'jquery.radiobutton.js',\n\t\t\tcss:'radiobutton.css'\n\t\t},\n\t\tcheckbox:{\n\t\t\tjs:'jquery.checkbox.js',\n\t\t\tcss:'checkbox.css'\n\t\t},\n\t\tsidemenu:{\n\t\t\tjs:'jquery.sidemenu.js',\n\t\t\tcss:'sidemenu.css',\n\t\t\tdependencies:['accordion','tree','tooltip']\n\t\t},\n\t\tcombo:{\n\t\t\tjs:'jquery.combo.js',\n\t\t\tcss:'combo.css',\n\t\t\tdependencies:['panel','textbox']\n\t\t},\n\t\tcombobox:{\n\t\t\tjs:'jquery.combobox.js',\n\t\t\tcss:'combobox.css',\n\t\t\tdependencies:['combo']\n\t\t},\n\t\tcombotree:{\n\t\t\tjs:'jquery.combotree.js',\n\t\t\tdependencies:['combo','tree']\n\t\t},\n\t\tcombogrid:{\n\t\t\tjs:'jquery.combogrid.js',\n\t\t\tdependencies:['combo','datagrid']\n\t\t},\n\t\tcombotreegrid:{\n\t\t\tjs:'jquery.combotreegrid.js',\n\t\t\tdependencies:['combo','treegrid']\n\t\t},\n\t\ttagbox:{\n\t\t\tjs:'jquery.tagbox.js',\n\t\t\tdependencies:['combobox']\n\t\t},\n\t\tvalidatebox:{\n\t\t\tjs:'jquery.validatebox.js',\n\t\t\tcss:'validatebox.css',\n\t\t\tdependencies:['tooltip']\n\t\t},\n\t\tnumberbox:{\n\t\t\tjs:'jquery.numberbox.js',\n\t\t\tdependencies:['textbox']\n\t\t},\n\t\tsearchbox:{\n\t\t\tjs:'jquery.searchbox.js',\n\t\t\tcss:'searchbox.css',\n\t\t\tdependencies:['menubutton','textbox']\n\t\t},\n\t\tspinner:{\n\t\t\tjs:'jquery.spinner.js',\n\t\t\tcss:'spinner.css',\n\t\t\tdependencies:['textbox']\n\t\t},\n\t\tnumberspinner:{\n\t\t\tjs:'jquery.numberspinner.js',\n\t\t\tdependencies:['spinner','numberbox']\n\t\t},\n\t\ttimespinner:{\n\t\t\tjs:'jquery.timespinner.js',\n\t\t\tdependencies:['spinner']\n\t\t},\n\t\ttimepicker:{\n\t\t\tjs:'jquery.timepicker.js',\n\t\t\tcss:'timepicker.css',\n\t\t\tdependencies:['combo']\n\t\t},\n\t\ttree:{\n\t\t\tjs:'jquery.tree.js',\n\t\t\tcss:'tree.css',\n\t\t\tdependencies:['draggable','droppable']\n\t\t},\n\t\tdatebox:{\n\t\t\tjs:'jquery.datebox.js',\n\t\t\tcss:'datebox.css',\n\t\t\tdependencies:['calendar','combo']\n\t\t},\n\t\tdatetimebox:{\n\t\t\tjs:'jquery.datetimebox.js',\n\t\t\tdependencies:['datebox','timespinner']\n\t\t},\n\t\tslider:{\n\t\t\tjs:'jquery.slider.js',\n\t\t\tdependencies:['draggable']\n\t\t},\n\t\tparser:{\n\t\t\tjs:'jquery.parser.js',\n\t\t\tcss:'flex.css'\n\t\t},\n\t\tmobile:{\n\t\t\tjs:'jquery.mobile.js'\n\t\t}\n\t};\n\t\n\tvar locales = {\n\t\t'af':'easyui-lang-af.js',\n\t\t'ar':'easyui-lang-ar.js',\n\t\t'bg':'easyui-lang-bg.js',\n\t\t'ca':'easyui-lang-ca.js',\n\t\t'cs':'easyui-lang-cs.js',\n\t\t'cz':'easyui-lang-cz.js',\n\t\t'da':'easyui-lang-da.js',\n\t\t'de':'easyui-lang-de.js',\n\t\t'el':'easyui-lang-el.js',\n\t\t'en':'easyui-lang-en.js',\n\t\t'es':'easyui-lang-es.js',\n\t\t'fr':'easyui-lang-fr.js',\n\t\t'it':'easyui-lang-it.js',\n\t\t'jp':'easyui-lang-jp.js',\n\t\t'nl':'easyui-lang-nl.js',\n\t\t'pl':'easyui-lang-pl.js',\n\t\t'pt_BR':'easyui-lang-pt_BR.js',\n\t\t'ru':'easyui-lang-ru.js',\n\t\t'sv_SE':'easyui-lang-sv_SE.js',\n\t\t'tr':'easyui-lang-tr.js',\n\t\t'zh_CN':'easyui-lang-zh_CN.js',\n\t\t'zh_TW':'easyui-lang-zh_TW.js'\n\t};\n\t\n\tvar queues = {};\n\t\n\tfunction loadJs(url, callback){\n\t\tvar done = false;\n\t\tvar script = document.createElement('script');\n\t\tscript.type = 'text/javascript';\n\t\tscript.language = 'javascript';\n\t\tscript.src = url;\n\t\tscript.onload = script.onreadystatechange = function(){\n\t\t\tif (!done && (!script.readyState || script.readyState == 'loaded' || script.readyState == 'complete')){\n\t\t\t\tdone = true;\n\t\t\t\tscript.onload = script.onreadystatechange = null;\n\t\t\t\tif (callback){\n\t\t\t\t\tcallback.call(script);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdocument.getElementsByTagName(\"head\")[0].appendChild(script);\n\t}\n\t\n\tfunction runJs(url, callback){\n\t\tloadJs(url, function(){\n\t\t\tdocument.getElementsByTagName(\"head\")[0].removeChild(this);\n\t\t\tif (callback){\n\t\t\t\tcallback();\n\t\t\t}\n\t\t});\n\t}\n\t\n\tfunction loadCss(url, callback){\n\t\tvar link = document.createElement('link');\n\t\tlink.rel = 'stylesheet';\n\t\tlink.type = 'text/css';\n\t\tlink.media = 'screen';\n\t\tlink.href = url;\n\t\tdocument.getElementsByTagName('head')[0].appendChild(link);\n\t\tif (callback){\n\t\t\tcallback.call(link);\n\t\t}\n\t}\n\t\n\tfunction loadSingle(name, callback){\n\t\tqueues[name] = 'loading';\n\t\t\n\t\tvar module = modules[name];\n\t\tvar jsStatus = 'loading';\n\t\tvar cssStatus = (easyloader.css && module['css']) ? 'loading' : 'loaded';\n\t\t\n\t\tif (easyloader.css && module['css']){\n\t\t\tif (/^http/i.test(module['css'])){\n\t\t\t\tvar url = module['css'];\n\t\t\t} else {\n\t\t\t\tvar url = easyloader.base + 'themes/' + easyloader.theme + '/' + module['css'];\n\t\t\t}\n\t\t\tloadCss(url, function(){\n\t\t\t\tcssStatus = 'loaded';\n\t\t\t\tif (jsStatus == 'loaded' && cssStatus == 'loaded'){\n\t\t\t\t\tfinish();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tif (/^http/i.test(module['js'])){\n\t\t\tvar url = module['js'];\n\t\t} else {\n\t\t\tvar url = easyloader.base + 'plugins/' + module['js'];\n\t\t}\n\t\tloadJs(url, function(){\n\t\t\tjsStatus = 'loaded';\n\t\t\tif (jsStatus == 'loaded' && cssStatus == 'loaded'){\n\t\t\t\tfinish();\n\t\t\t}\n\t\t});\n\t\t\n\t\tfunction finish(){\n\t\t\tqueues[name] = 'loaded';\n\t\t\teasyloader.onProgress(name);\n\t\t\tif (callback){\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction loadModule(name, callback){\n\t\tvar mm = [];\n\t\tvar doLoad = false;\n\t\t\n\t\tif (typeof name == 'string'){\n\t\t\tadd(name);\n\t\t} else {\n\t\t\tfor(var i=0; i<name.length; i++){\n\t\t\t\tadd(name[i]);\n\t\t\t}\n\t\t}\n\t\tmm.unshift('parser');\n\t\t\n\t\tfunction add(name){\n\t\t\tif (!modules[name]) return;\n\t\t\tvar d = modules[name]['dependencies'];\n\t\t\tif (d){\n\t\t\t\tfor(var i=0; i<d.length; i++){\n\t\t\t\t\tadd(d[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tmm.push(name);\n\t\t}\n\t\t\n\t\tfunction finish(){\n\t\t\tif (callback){\n\t\t\t\tif (window.jQuery){\n\t\t\t\t\twindow.jQuery.parser.parseVars();\n\t\t\t\t}\n\t\t\t\tcallback();\n\t\t\t}\n\t\t\teasyloader.onLoad(name);\n\t\t}\n\t\t\n\t\tvar time = 0;\n\t\tfunction loadMm(){\n\t\t\tif (mm.length){\n\t\t\t\tvar m = mm[0];\t// the first module\n\t\t\t\tif (!queues[m]){\n\t\t\t\t\tdoLoad = true;\n\t\t\t\t\tloadSingle(m, function(){\n\t\t\t\t\t\tmm.shift();\n\t\t\t\t\t\tloadMm();\n\t\t\t\t\t});\n\t\t\t\t} else if (queues[m] == 'loaded'){\n\t\t\t\t\tmm.shift();\n\t\t\t\t\tloadMm();\n\t\t\t\t} else {\n\t\t\t\t\tif (time < easyloader.timeout){\n\t\t\t\t\t\ttime += 10;\n\t\t\t\t\t\tsetTimeout(arguments.callee, 10);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (easyloader.locale && doLoad == true && locales[easyloader.locale]){\n\t\t\t\t\tvar url = easyloader.base + 'locale/' + locales[easyloader.locale];\n\t\t\t\t\trunJs(url, function(){\n\t\t\t\t\t\tfinish();\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tfinish();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tloadMm();\n\t}\n\t\n\teasyloader = {\n\t\tmodules:modules,\n\t\tlocales:locales,\n\t\t\n\t\tbase:'.',\n\t\ttheme:'default',\n\t\tcss:true,\n\t\tlocale:null,\n\t\ttimeout:2000,\n\t\n\t\tload: function(name, callback){\n\t\t\tif (/\\.css$/i.test(name)){\n\t\t\t\tif (/^http/i.test(name)){\n\t\t\t\t\tloadCss(name, callback);\n\t\t\t\t} else {\n\t\t\t\t\tloadCss(easyloader.base + name, callback);\n\t\t\t\t}\n\t\t\t} else if (/\\.js$/i.test(name)){\n\t\t\t\tif (/^http/i.test(name)){\n\t\t\t\t\tloadJs(name, callback);\n\t\t\t\t} else {\n\t\t\t\t\tloadJs(easyloader.base + name, callback);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tloadModule(name, callback);\n\t\t\t}\n\t\t},\n\t\t\n\t\tonProgress: function(name){},\n\t\tonLoad: function(name){}\n\t};\n\n\tvar scripts = document.getElementsByTagName('script');\n\tfor(var i=0; i<scripts.length; i++){\n\t\tvar src = scripts[i].src;\n\t\tif (!src) continue;\n\t\tvar m = src.match(/easyloader\\.js(\\W|$)/i);\n\t\tif (m){\n\t\t\teasyloader.base = src.substring(0, m.index);\n\t\t}\n\t}\n\n\twindow.using = easyloader.load;\n\t\n\tif (window.jQuery){\n\t\tjQuery(function(){\n\t\t\teasyloader.load('parser', function(){\n\t\t\t\tjQuery.parser.parse();\n\t\t\t});\n\t\t});\n\t}\n\t\n})();\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.accordion.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * accordion - EasyUI for jQuery\n * \n * Dependencies:\n * \t panel\n * \n */\n(function($){\n\t\n\t// function setSize(container, param){\n\t// \tvar state = $.data(container, 'accordion');\n\t// \tvar opts = state.options;\n\t// \tvar panels = state.panels;\n\t// \tvar cc = $(container);\n\t\t\n\t// \tif (param){\n\t// \t\t$.extend(opts, {\n\t// \t\t\twidth: param.width,\n\t// \t\t\theight: param.height\n\t// \t\t});\n\t// \t}\n\t// \tcc._size(opts);\n\t// \tvar headerHeight = 0;\n\t// \tvar bodyHeight = 'auto';\n\t// \tvar headers = cc.find('>.panel>.accordion-header');\n\t// \tif (headers.length){\n\t// \t\theaderHeight = $(headers[0]).css('height', '')._outerHeight();\n\t// \t}\n\t// \tif (!isNaN(parseInt(opts.height))){\n\t// \t\tbodyHeight = cc.height() - headerHeight*headers.length;\n\t// \t}\n\t\t\n\t// \t_resize(true, bodyHeight - _resize(false) + 1);\n\t\t\n\t// \tfunction _resize(collapsible, height){\n\t// \t\tvar totalHeight = 0;\n\t// \t\tfor(var i=0; i<panels.length; i++){\n\t// \t\t\tvar p = panels[i];\n\t// \t\t\tvar h = p.panel('header')._outerHeight(headerHeight);\n\t// \t\t\tif (p.panel('options').collapsible == collapsible){\n\t// \t\t\t\tvar pheight = isNaN(height) ? undefined : (height+headerHeight*h.length);\n\t// \t\t\t\tp.panel('resize', {\n\t// \t\t\t\t\twidth: cc.width(),\n\t// \t\t\t\t\theight: (collapsible ? pheight : undefined)\n\t// \t\t\t\t});\n\t// \t\t\t\ttotalHeight += p.panel('panel').outerHeight()-headerHeight*h.length;\n\t// \t\t\t}\n\t// \t\t}\n\t// \t\treturn totalHeight;\n\t// \t}\n\t// }\n\n\tfunction setSize(container, param){\n\t\tvar state = $.data(container, 'accordion');\n\t\tvar opts = state.options;\n\t\tvar panels = state.panels;\n\t\tvar cc = $(container);\n\t\tvar isHorizontal = (opts.halign=='left' || opts.halign=='right');\n\t\tcc.children('.panel-last').removeClass('panel-last');\n\t\tcc.children('.panel:last').addClass('panel-last');\n\n\t\tif (param){\n\t\t\t$.extend(opts, {\n\t\t\t\twidth: param.width,\n\t\t\t\theight: param.height\n\t\t\t});\n\t\t}\n\t\tcc._size(opts);\n\t\tvar headerHeight = 0;\n\t\tvar bodyHeight = 'auto';\n\t\tvar headers = cc.find('>.panel>.accordion-header');\n\t\tif (headers.length){\n\t\t\tif (isHorizontal){\n\t\t\t\t// $(panels[0]).panel('resize', {width:cc.width(),height:cc.height()});\n\t\t\t\t$(headers[0]).next().panel('resize', {width:cc.width(),height:cc.height()});\n\t\t\t\theaderHeight = $(headers[0])._outerWidth();\n\t\t\t} else {\n\t\t\t\theaderHeight = $(headers[0]).css('height', '')._outerHeight();\n\t\t\t}\n\t\t}\n\t\tif (!isNaN(parseInt(opts.height))){\n\t\t\tif (isHorizontal){\n\t\t\t\tbodyHeight = cc.width() - headerHeight*headers.length;\n\t\t\t} else {\n\t\t\t\tbodyHeight = cc.height() - headerHeight*headers.length;\n\t\t\t}\n\t\t}\n\n\t\t// _resize(true, bodyHeight - _resize(false) + 1);\n\t\t_resize(true, bodyHeight - _resize(false));\n\t\t\n\t\tfunction _resize(collapsible, height){\n\t\t\tvar totalHeight = 0;\n\t\t\tfor(var i=0; i<panels.length; i++){\n\t\t\t\tvar p = panels[i];\n\t\t\t\tif (isHorizontal){\n\t\t\t\t\tvar h = p.panel('header')._outerWidth(headerHeight);\n\t\t\t\t} else {\n\t\t\t\t\tvar h = p.panel('header')._outerHeight(headerHeight);\n\t\t\t\t}\n\t\t\t\tif (p.panel('options').collapsible == collapsible){\n\t\t\t\t\tvar pheight = isNaN(height) ? undefined : (height+headerHeight*h.length);\n\t\t\t\t\tif (isHorizontal){\n\t\t\t\t\t\tp.panel('resize', {\n\t\t\t\t\t\t\theight: cc.height(),\n\t\t\t\t\t\t\twidth: (collapsible ? pheight : undefined)\n\t\t\t\t\t\t});\n\t\t\t\t\t\ttotalHeight += p.panel('panel')._outerWidth()-headerHeight*h.length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tp.panel('resize', {\n\t\t\t\t\t\t\twidth: cc.width(),\n\t\t\t\t\t\t\theight: (collapsible ? pheight : undefined)\n\t\t\t\t\t\t});\n\t\t\t\t\t\ttotalHeight += p.panel('panel').outerHeight()-headerHeight*h.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn totalHeight;\n\t\t}\n\t}\n\t\n\t/**\n\t * find a panel by specified property, return the panel object or panel index.\n\t */\n\tfunction findBy(container, property, value, all){\n\t\tvar panels = $.data(container, 'accordion').panels;\n\t\tvar pp = [];\n\t\tfor(var i=0; i<panels.length; i++){\n\t\t\tvar p = panels[i];\n\t\t\tif (property){\n\t\t\t\tif (p.panel('options')[property] == value){\n\t\t\t\t\tpp.push(p);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (p[0] == $(value)[0]){\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (property){\n\t\t\treturn all ? pp : (pp.length ? pp[0] : null);\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\t}\n\t\n\tfunction getSelections(container){\n\t\treturn findBy(container, 'collapsed', false, true);\n\t}\n\t\n\tfunction getSelected(container){\n\t\tvar pp = getSelections(container);\n\t\treturn pp.length ? pp[0] : null;\n\t}\n\t\n\t/**\n\t * get panel index, start with 0\n\t */\n\tfunction getPanelIndex(container, panel){\n\t\treturn findBy(container, null, panel);\n\t}\n\t\n\t/**\n\t * get the specified panel.\n\t */\n\tfunction getPanel(container, which){\n\t\tvar panels = $.data(container, 'accordion').panels;\n\t\tif (typeof which == 'number'){\n\t\t\tif (which < 0 || which >= panels.length){\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\treturn panels[which];\n\t\t\t}\n\t\t}\n\t\treturn findBy(container, 'title', which);\n\t}\n\t\n\tfunction setProperties(container){\n\t\tvar opts = $.data(container, 'accordion').options;\n\t\tvar cc = $(container);\n\t\tif (opts.border){\n\t\t\tcc.removeClass('accordion-noborder');\n\t\t} else {\n\t\t\tcc.addClass('accordion-noborder');\n\t\t}\n\t}\n\t\n\tfunction init(container){\n\t\tvar state = $.data(container, 'accordion');\n\t\tvar cc = $(container);\n\t\tcc.addClass('accordion');\n\t\t\n\t\tstate.panels = [];\n\t\tcc.children('div').each(function(){\n\t\t\tvar opts = $.extend({}, $.parser.parseOptions(this), {\n\t\t\t\tselected: ($(this).attr('selected') ? true : undefined)\n\t\t\t});\n\t\t\tvar pp = $(this);\n\t\t\tstate.panels.push(pp);\n\t\t\tcreatePanel(container, pp, opts);\n\t\t});\n\t\t\n\t\tcc._bind('_resize', function(e,force){\n\t\t\tif ($(this).hasClass('easyui-fluid') || force){\n\t\t\t\tsetSize(container);\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t}\n\t\n\tfunction createPanel(container, pp, options){\n\t\tvar opts = $.data(container, 'accordion').options;\n\t\tpp.panel($.extend({}, {\n\t\t\tcollapsible: true,\n\t\t\tminimizable: false,\n\t\t\tmaximizable: false,\n\t\t\tclosable: false,\n\t\t\tdoSize: false,\n\t\t\tcollapsed: true,\n\t\t\theaderCls: 'accordion-header',\n\t\t\tbodyCls: 'accordion-body',\n\t\t\thalign: opts.halign\n\t\t}, options, {\n\t\t\tonBeforeExpand: function(){\n\t\t\t\tif (options.onBeforeExpand){\n\t\t\t\t\tif (options.onBeforeExpand.call(this) == false){return false}\n\t\t\t\t}\n\t\t\t\tif (!opts.multiple){\n\t\t\t\t\t// get all selected panel\n\t\t\t\t\tvar all = $.grep(getSelections(container), function(p){\n\t\t\t\t\t\treturn p.panel('options').collapsible;\n\t\t\t\t\t});\n\t\t\t\t\tfor(var i=0; i<all.length; i++){\n\t\t\t\t\t\tunselect(container, getPanelIndex(container, all[i]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar header = $(this).panel('header');\n\t\t\t\theader.addClass('accordion-header-selected');\n\t\t\t\theader.find('.accordion-collapse').removeClass('accordion-expand');\n\t\t\t},\n\t\t\tonExpand: function(){\n\t\t\t\t$(container).find('>.panel-last>.accordion-header').removeClass('accordion-header-border');\n\t\t\t\tif (options.onExpand){options.onExpand.call(this)}\n\t\t\t\topts.onSelect.call(container, $(this).panel('options').title, getPanelIndex(container, this));\n\t\t\t},\n\t\t\tonBeforeCollapse: function(){\n\t\t\t\tif (options.onBeforeCollapse){\n\t\t\t\t\tif (options.onBeforeCollapse.call(this) == false){return false}\n\t\t\t\t}\n\t\t\t\t$(container).find('>.panel-last>.accordion-header').addClass('accordion-header-border');\n\t\t\t\tvar header = $(this).panel('header');\n\t\t\t\theader.removeClass('accordion-header-selected');\n\t\t\t\theader.find('.accordion-collapse').addClass('accordion-expand');\n\t\t\t},\n\t\t\tonCollapse: function(){\n\t\t\t\tif (isNaN(parseInt(opts.height))){\n\t\t\t\t\t$(container).find('>.panel-last>.accordion-header').removeClass('accordion-header-border');\n\t\t\t\t}\n\t\t\t\tif (options.onCollapse){options.onCollapse.call(this)}\n\t\t\t\topts.onUnselect.call(container, $(this).panel('options').title, getPanelIndex(container, this));\n\t\t\t}\n\t\t}));\n\t\t\n\t\tvar header = pp.panel('header');\n\t\tvar tool = header.children('div.panel-tool');\n\t\ttool.children('a.panel-tool-collapse').hide();\t// hide the old collapse button\n\t\tvar t = $('<a href=\"javascript:;\"></a>').addClass('accordion-collapse accordion-expand').appendTo(tool);\n\t\tt._bind('click', function(){\n\t\t\ttogglePanel(pp);\n\t\t\treturn false;\n\t\t});\n\t\tpp.panel('options').collapsible ? t.show() : t.hide();\n\t\tif (opts.halign=='left' || opts.halign=='right'){\n\t\t\tt.hide();\n\t\t}\n\t\t\n\t\theader._bind('click', function(){\n\t\t\ttogglePanel(pp);\n\t\t\treturn false;\n\t\t})\n\t\t\n\t\tfunction togglePanel(p){\n\t\t\tvar popts = p.panel('options');\n\t\t\tif (popts.collapsible){\n\t\t\t\tvar index = getPanelIndex(container, p);\n\t\t\t\tif (popts.collapsed){\n\t\t\t\t\tselect(container, index);\n\t\t\t\t} else {\n\t\t\t\t\tunselect(container, index);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * select and set the specified panel active\n\t */\n\tfunction select(container, which){\n\t\tvar p = getPanel(container, which);\n\t\tif (!p){return}\n\t\tstopAnimate(container);\n\t\tvar opts = $.data(container, 'accordion').options;\n\t\tp.panel('expand', opts.animate);\n\t}\n\t\n\tfunction unselect(container, which){\n\t\tvar p = getPanel(container, which);\n\t\tif (!p){return}\n\t\tstopAnimate(container);\n\t\tvar opts = $.data(container, 'accordion').options;\n\t\tp.panel('collapse', opts.animate);\n\t}\n\t\n\tfunction doFirstSelect(container){\n\t\tvar opts = $.data(container, 'accordion').options;\n\t\t$(container).find('>.panel-last>.accordion-header').addClass('accordion-header-border');\n\n\t\tvar p = findBy(container, 'selected', true);\n\t\tif (p){\n\t\t\t_select(getPanelIndex(container, p));\n\t\t} else {\n\t\t\t_select(opts.selected);\n\t\t}\n\t\t\n\t\tfunction _select(index){\n\t\t\tvar animate = opts.animate;\n\t\t\topts.animate = false;\n\t\t\tselect(container, index);\n\t\t\topts.animate = animate;\n\t\t}\n\t}\n\t\n\t/**\n\t * stop the animation of all panels\n\t */\n\tfunction stopAnimate(container){\n\t\tvar panels = $.data(container, 'accordion').panels;\n\t\tfor(var i=0; i<panels.length; i++){\n\t\t\tpanels[i].stop(true,true);\n\t\t}\n\t}\n\t\n\tfunction add(container, options){\n\t\tvar state = $.data(container, 'accordion');\n\t\tvar opts = state.options;\n\t\tvar panels = state.panels;\n\t\tif (options.selected == undefined) options.selected = true;\n\n\t\tstopAnimate(container);\n\t\t\n\t\tvar pp = $('<div></div>').appendTo(container);\n\t\tpanels.push(pp);\n\t\tcreatePanel(container, pp, options);\n\t\tsetSize(container);\n\t\t\n\t\topts.onAdd.call(container, options.title, panels.length-1);\n\t\t\n\t\tif (options.selected){\n\t\t\tselect(container, panels.length-1);\n\t\t}\n\t}\n\t\n\tfunction remove(container, which){\n\t\tvar state = $.data(container, 'accordion');\n\t\tvar opts = state.options;\n\t\tvar panels = state.panels;\n\t\t\n\t\tstopAnimate(container);\n\t\t\n\t\tvar panel = getPanel(container, which);\n\t\tvar title = panel.panel('options').title;\n\t\tvar index = getPanelIndex(container, panel);\n\t\t\n\t\tif (!panel){return}\n\t\tif (opts.onBeforeRemove.call(container, title, index) == false){return}\n\t\t\n\t\tpanels.splice(index, 1);\n\t\tpanel.panel('destroy');\n\t\tif (panels.length){\n\t\t\tsetSize(container);\n\t\t\tvar curr = getSelected(container);\n\t\t\tif (!curr){\n\t\t\t\tselect(container, 0);\n\t\t\t}\n\t\t}\n\t\t\n\t\topts.onRemove.call(container, title, index);\n\t}\n\t\n\t$.fn.accordion = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\treturn $.fn.accordion.methods[options](this, param);\n\t\t}\n\t\t\n\t\toptions = options || {};\n\t\treturn this.each(function(){\n\t\t\tvar state = $.data(this, 'accordion');\n\t\t\tif (state){\n\t\t\t\t$.extend(state.options, options);\n\t\t\t} else {\n\t\t\t\t$.data(this, 'accordion', {\n\t\t\t\t\toptions: $.extend({}, $.fn.accordion.defaults, $.fn.accordion.parseOptions(this), options),\n\t\t\t\t\taccordion: $(this).addClass('accordion'),\n\t\t\t\t\tpanels: []\n\t\t\t\t});\n\t\t\t\tinit(this);\n\t\t\t}\n\t\t\t\n\t\t\tsetProperties(this);\n\t\t\tsetSize(this);\n\t\t\tdoFirstSelect(this);\n\t\t});\n\t};\n\t\n\t$.fn.accordion.methods = {\n\t\toptions: function(jq){\n\t\t\treturn $.data(jq[0], 'accordion').options;\n\t\t},\n\t\tpanels: function(jq){\n\t\t\treturn $.data(jq[0], 'accordion').panels;\n\t\t},\n\t\tresize: function(jq, param){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetSize(this, param);\n\t\t\t});\n\t\t},\n\t\tgetSelections: function(jq){\n\t\t\treturn getSelections(jq[0]);\n\t\t},\n\t\tgetSelected: function(jq){\n\t\t\treturn getSelected(jq[0]);\n\t\t},\n\t\tgetPanel: function(jq, which){\n\t\t\treturn getPanel(jq[0], which);\n\t\t},\n\t\tgetPanelIndex: function(jq, panel){\n\t\t\treturn getPanelIndex(jq[0], panel);\n\t\t},\n\t\tselect: function(jq, which){\n\t\t\treturn jq.each(function(){\n\t\t\t\tselect(this, which);\n\t\t\t});\n\t\t},\n\t\tunselect: function(jq, which){\n\t\t\treturn jq.each(function(){\n\t\t\t\tunselect(this, which);\n\t\t\t});\n\t\t},\n\t\tadd: function(jq, options){\n\t\t\treturn jq.each(function(){\n\t\t\t\tadd(this, options);\n\t\t\t});\n\t\t},\n\t\tremove: function(jq, which){\n\t\t\treturn jq.each(function(){\n\t\t\t\tremove(this, which);\n\t\t\t});\n\t\t}\n\t};\n\t\n\t$.fn.accordion.parseOptions = function(target){\n\t\tvar t = $(target);\n\t\treturn $.extend({}, $.parser.parseOptions(target, [\n\t\t\t'width','height','halign',\n\t\t\t{fit:'boolean',border:'boolean',animate:'boolean',multiple:'boolean',selected:'number'}\n\t\t]));\n\t};\n\t\n\t$.fn.accordion.defaults = {\n\t\twidth: 'auto',\n\t\theight: 'auto',\n\t\tfit: false,\n\t\tborder: true,\n\t\tanimate: true,\n\t\tmultiple: false,\n\t\tselected: 0,\n\t\thalign: 'top',\t// the header alignment: 'top','left','right'\n\t\t\n\t\tonSelect: function(title, index){},\n\t\tonUnselect: function(title, index){},\n\t\tonAdd: function(title, index){},\n\t\tonBeforeRemove: function(title, index){},\n\t\tonRemove: function(title, index){}\n\t};\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.calendar.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * calendar - EasyUI for jQuery\n * \n */\n(function($){\n\t\n\tfunction setSize(target, param){\n\t\tvar opts = $.data(target, 'calendar').options;\n\t\tvar t = $(target);\n\t\tif (param){\n\t\t\t$.extend(opts, {\n\t\t\t\twidth: param.width,\n\t\t\t\theight: param.height\n\t\t\t});\n\t\t}\n\t\tt._size(opts, t.parent());\n\t\tt.find('.calendar-body')._outerHeight(t.height() - t.find('.calendar-header')._outerHeight());\n\t\tif (t.find('.calendar-menu').is(':visible')){\n\t\t\tshowSelectMenus(target);\n\t\t}\n\t}\n\t\n\tfunction init(target){\n\t\t$(target).addClass('calendar').html(\n\t\t\t\t'<div class=\"calendar-header\">' +\n\t\t\t\t\t'<div class=\"calendar-nav calendar-prevmonth\"></div>' +\n\t\t\t\t\t'<div class=\"calendar-nav calendar-nextmonth\"></div>' +\n\t\t\t\t\t'<div class=\"calendar-nav calendar-prevyear\"></div>' +\n\t\t\t\t\t'<div class=\"calendar-nav calendar-nextyear\"></div>' +\n\t\t\t\t\t'<div class=\"calendar-title\">' +\n\t\t\t\t\t\t'<span class=\"calendar-text\"></span>' +\n\t\t\t\t\t'</div>' +\n\t\t\t\t'</div>' +\n\t\t\t\t'<div class=\"calendar-body\">' +\n\t\t\t\t\t'<div class=\"calendar-menu\">' +\n\t\t\t\t\t\t'<div class=\"calendar-menu-year-inner\">' +\n\t\t\t\t\t\t\t'<span class=\"calendar-nav calendar-menu-prev\"></span>' +\n\t\t\t\t\t\t\t'<span><input class=\"calendar-menu-year\" type=\"text\"></input></span>' +\n\t\t\t\t\t\t\t'<span class=\"calendar-nav calendar-menu-next\"></span>' +\n\t\t\t\t\t\t'</div>' +\n\t\t\t\t\t\t'<div class=\"calendar-menu-month-inner\">' +\n\t\t\t\t\t\t'</div>' +\n\t\t\t\t\t'</div>' +\n\t\t\t\t'</div>'\n\t\t);\n\t\t\n\t\t\n\t\t$(target)._bind('_resize', function(e,force){\n\t\t\tif ($(this).hasClass('easyui-fluid') || force){\n\t\t\t\tsetSize(target);\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t}\n\t\n\tfunction bindEvents(target){\n\t\tvar opts = $.data(target, 'calendar').options;\n\t\tvar menu = $(target).find('.calendar-menu');\n\t\tmenu.find('.calendar-menu-year')._unbind('.calendar')._bind('keypress.calendar', function(e){\n\t\t\tif (e.keyCode == 13){\n\t\t\t\tsetDate(true);\n\t\t\t}\n\t\t});\n\t\t$(target)._unbind('.calendar')._bind('mouseover.calendar', function(e){\n\t\t\tvar t = toTarget(e.target);\n\t\t\tif (t.hasClass('calendar-nav') || t.hasClass('calendar-text') || (t.hasClass('calendar-day') && !t.hasClass('calendar-disabled'))){\n\t\t\t\tt.addClass('calendar-nav-hover');\n\t\t\t}\n\t\t})._bind('mouseout.calendar', function(e){\n\t\t\tvar t = toTarget(e.target);\n\t\t\tif (t.hasClass('calendar-nav') || t.hasClass('calendar-text') || (t.hasClass('calendar-day') && !t.hasClass('calendar-disabled'))){\n\t\t\t\tt.removeClass('calendar-nav-hover');\n\t\t\t}\n\t\t})._bind('click.calendar', function(e){\n\t\t\tvar t = toTarget(e.target);\n\t\t\tif (t.hasClass('calendar-menu-next') || t.hasClass('calendar-nextyear')){\n\t\t\t\tshowYear(1);\n\t\t\t} else if (t.hasClass('calendar-menu-prev') || t.hasClass('calendar-prevyear')){\n\t\t\t\tshowYear(-1);\n\t\t\t} else if (t.hasClass('calendar-menu-month')){\n\t\t\t\tmenu.find('.calendar-selected').removeClass('calendar-selected');\n\t\t\t\tt.addClass('calendar-selected');\n\t\t\t\tsetDate(true);\n\t\t\t} else if (t.hasClass('calendar-prevmonth')){\n\t\t\t\tshowMonth(-1);\n\t\t\t} else if (t.hasClass('calendar-nextmonth')){\n\t\t\t\tshowMonth(1);\n\t\t\t} else if (t.hasClass('calendar-text')){\n\t\t\t\tif (menu.is(':visible')){\n\t\t\t\t\tmenu.hide();\n\t\t\t\t} else {\n\t\t\t\t\tshowSelectMenus(target);\n\t\t\t\t}\n\t\t\t} else if (t.hasClass('calendar-day')){\n\t\t\t\tif (t.hasClass('calendar-disabled')){return}\n\t\t\t\tvar oldValue = opts.current;\n\t\t\t\tt.closest('div.calendar-body').find('.calendar-selected').removeClass('calendar-selected');\n\t\t\t\tt.addClass('calendar-selected');\n\t\t\t\tvar parts = t.attr('abbr').split(',');\n\t\t\t\tvar y = parseInt(parts[0]);\n\t\t\t\tvar m = parseInt(parts[1]);\n\t\t\t\tvar d = parseInt(parts[2]);\n\t\t\t\topts.current = new opts.Date(y, m-1, d);\n\t\t\t\topts.onSelect.call(target, opts.current);\n\t\t\t\tif (!oldValue || oldValue.getTime() != opts.current.getTime()){\n\t\t\t\t\topts.onChange.call(target, opts.current, oldValue);\n\t\t\t\t}\n\t\t\t\tif (opts.year != y || opts.month != m){\n\t\t\t\t\topts.year = y;\n\t\t\t\t\topts.month = m;\n\t\t\t\t\tshow(target);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tfunction toTarget(t){\n\t\t\tvar day = $(t).closest('.calendar-day');\n\t\t\tif (day.length){\n\t\t\t\treturn day;\n\t\t\t} else {\n\t\t\t\treturn $(t);\n\t\t\t}\n\t\t}\n\t\tfunction setDate(hideMenu){\n\t\t\tvar menu = $(target).find('.calendar-menu');\n\t\t\tvar year = menu.find('.calendar-menu-year').val();\n\t\t\tvar month = menu.find('.calendar-selected').attr('abbr');\n\t\t\tif (!isNaN(year)){\n\t\t\t\topts.year = parseInt(year);\n\t\t\t\topts.month = parseInt(month);\n\t\t\t\tshow(target);\n\t\t\t}\n\t\t\tif (hideMenu){menu.hide()}\n\t\t}\n\t\tfunction showYear(delta){\n\t\t\topts.year += delta;\n\t\t\tshow(target);\n\t\t\tmenu.find('.calendar-menu-year').val(opts.year);\n\t\t}\n\t\tfunction showMonth(delta){\n\t\t\topts.month += delta;\n\t\t\tif (opts.month > 12){\n\t\t\t\topts.year++;\n\t\t\t\topts.month = 1;\n\t\t\t} else if (opts.month < 1){\n\t\t\t\topts.year--;\n\t\t\t\topts.month = 12;\n\t\t\t}\n\t\t\tshow(target);\n\t\t\t\n\t\t\tmenu.find('td.calendar-selected').removeClass('calendar-selected');\n\t\t\tmenu.find('td:eq(' + (opts.month-1) + ')').addClass('calendar-selected');\n\t\t}\n\t}\n\t\n\t/**\n\t * show the select menu that can change year or month, if the menu is not be created then create it.\n\t */\n\tfunction showSelectMenus(target){\n\t\tvar opts = $.data(target, 'calendar').options;\n\t\t$(target).find('.calendar-menu').show();\n\t\t\n\t\tif ($(target).find('.calendar-menu-month-inner').is(':empty')){\n\t\t\t$(target).find('.calendar-menu-month-inner').empty();\n\t\t\tvar t = $('<table class=\"calendar-mtable\"></table>').appendTo($(target).find('.calendar-menu-month-inner'));\n\t\t\tvar idx = 0;\n\t\t\tfor(var i=0; i<3; i++){\n\t\t\t\tvar tr = $('<tr></tr>').appendTo(t);\n\t\t\t\tfor(var j=0; j<4; j++){\n\t\t\t\t\t$('<td class=\"calendar-nav calendar-menu-month\"></td>').html(opts.months[idx++]).attr('abbr',idx).appendTo(tr);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar body = $(target).find('.calendar-body');\n\t\tvar sele = $(target).find('.calendar-menu');\n\t\tvar seleYear = sele.find('.calendar-menu-year-inner');\n\t\tvar seleMonth = sele.find('.calendar-menu-month-inner');\n\t\t\n\t\tseleYear.find('input').val(opts.year).focus();\n\t\tseleMonth.find('td.calendar-selected').removeClass('calendar-selected');\n\t\tseleMonth.find('td:eq('+(opts.month-1)+')').addClass('calendar-selected');\n\t\t\n\t\tsele._outerWidth(body._outerWidth());\n\t\tsele._outerHeight(body._outerHeight());\n\t\tseleMonth._outerHeight(sele.height() - seleYear._outerHeight());\n\t}\n\t\n\t/**\n\t * get weeks data.\n\t */\n\tfunction getWeeks(target, year, month){\n\t\tvar opts = $.data(target, 'calendar').options;\n\t\tvar dates = [];\n\t\tvar lastDay = new opts.Date(year, month, 0).getDate();\n\t\tfor(var i=1; i<=lastDay; i++) dates.push([year,month,i]);\n\t\t\n\t\t// group date by week\n\t\tvar weeks = [], week = [];\n\t\tvar memoDay = -1;\n\t\twhile(dates.length > 0){\n\t\t\tvar date = dates.shift();\n\t\t\tweek.push(date);\n\t\t\tvar day = new opts.Date(date[0],date[1]-1,date[2]).getDay();\n\t\t\tif (memoDay == day){\n\t\t\t\tday = 0;\n\t\t\t} else if (day == (opts.firstDay==0 ? 7 : opts.firstDay) - 1){\n\t\t\t\tweeks.push(week);\n\t\t\t\tweek = [];\n\t\t\t}\n\t\t\tmemoDay = day;\n\t\t}\n\t\tif (week.length){\n\t\t\tweeks.push(week);\n\t\t}\n\t\t\n\t\tvar firstWeek = weeks[0];\n\t\tif (firstWeek.length < 7){\n\t\t\twhile(firstWeek.length < 7){\n\t\t\t\tvar firstDate = firstWeek[0];\n\t\t\t\tvar date = new opts.Date(firstDate[0],firstDate[1]-1,firstDate[2]-1)\n\t\t\t\tfirstWeek.unshift([date.getFullYear(), date.getMonth()+1, date.getDate()]);\n\t\t\t}\n\t\t} else {\n\t\t\tvar firstDate = firstWeek[0];\n\t\t\tvar week = [];\n\t\t\tfor(var i=1; i<=7; i++){\n\t\t\t\tvar date = new opts.Date(firstDate[0], firstDate[1]-1, firstDate[2]-i);\n\t\t\t\tweek.unshift([date.getFullYear(), date.getMonth()+1, date.getDate()]);\n\t\t\t}\n\t\t\tweeks.unshift(week);\n\t\t}\n\t\t\n\t\tvar lastWeek = weeks[weeks.length-1];\n\t\twhile(lastWeek.length < 7){\n\t\t\tvar lastDate = lastWeek[lastWeek.length-1];\n\t\t\tvar date = new opts.Date(lastDate[0], lastDate[1]-1, lastDate[2]+1);\n\t\t\tlastWeek.push([date.getFullYear(), date.getMonth()+1, date.getDate()]);\n\t\t}\n\t\tif (weeks.length < 6){\n\t\t\tvar lastDate = lastWeek[lastWeek.length-1];\n\t\t\tvar week = [];\n\t\t\tfor(var i=1; i<=7; i++){\n\t\t\t\tvar date = new opts.Date(lastDate[0], lastDate[1]-1, lastDate[2]+i);\n\t\t\t\tweek.push([date.getFullYear(), date.getMonth()+1, date.getDate()]);\n\t\t\t}\n\t\t\tweeks.push(week);\n\t\t}\n\t\t\n\t\treturn weeks;\n\t}\n\t\n\t/**\n\t * show the calendar day.\n\t */\n\tfunction show(target){\n\t\tvar opts = $.data(target, 'calendar').options;\n\t\tif (opts.current && !opts.validator.call(target, opts.current)){\n\t\t\topts.current = null;\n\t\t}\n\t\t\n\t\tvar now = new opts.Date();\n\t\tvar todayInfo = now.getFullYear()+','+(now.getMonth()+1)+','+now.getDate();\n\t\tvar currentInfo = opts.current ? (opts.current.getFullYear()+','+(opts.current.getMonth()+1)+','+opts.current.getDate()) : '';\n\t\t// calulate the saturday and sunday index\n\t\tvar saIndex = 6 - opts.firstDay;\n\t\tvar suIndex = saIndex + 1;\n\t\tif (saIndex >= 7) saIndex -= 7;\n\t\tif (suIndex >= 7) suIndex -= 7;\n\t\t\n\t\t$(target).find('.calendar-title span').html(opts.months[opts.month-1] + ' ' + opts.year);\n\t\t\n\t\tvar body = $(target).find('div.calendar-body');\n\t\tbody.children('table').remove();\n\t\t\n\t\tvar data = ['<table class=\"calendar-dtable\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">'];\n\t\tdata.push('<thead><tr>');\n\t\tif (opts.showWeek){\n\t\t\tdata.push('<th class=\"calendar-week\">'+opts.weekNumberHeader+'</th>');\n\t\t}\n\t\tfor(var i=opts.firstDay; i<opts.weeks.length; i++){\n\t\t\tdata.push('<th>'+opts.weeks[i]+'</th>');\n\t\t}\n\t\tfor(var i=0; i<opts.firstDay; i++){\n\t\t\tdata.push('<th>'+opts.weeks[i]+'</th>');\n\t\t}\n\t\tdata.push('</tr></thead>');\n\t\t\n\t\tdata.push('<tbody>');\n\t\tvar weeks = getWeeks(target, opts.year, opts.month);\n\t\tfor(var i=0; i<weeks.length; i++){\n\t\t\tvar week = weeks[i];\n\t\t\tvar cls = '';\n\t\t\tif (i == 0){cls = 'calendar-first';}\n\t\t\telse if (i == weeks.length - 1){cls = 'calendar-last';}\n\t\t\tdata.push('<tr class=\"' + cls + '\">');\n\t\t\tif (opts.showWeek){\n\t\t\t\tvar weekNumber = opts.getWeekNumber(new opts.Date(week[0][0], parseInt(week[0][1])-1, week[0][2]));\n\t\t\t\tdata.push('<td class=\"calendar-week\">'+weekNumber+'</td>');\n\t\t\t}\n\t\t\tfor(var j=0; j<week.length; j++){\n\t\t\t\tvar day = week[j];\n\t\t\t\tvar s = day[0]+','+day[1]+','+day[2];\n\t\t\t\tvar dvalue = new opts.Date(day[0], parseInt(day[1])-1, day[2]);\n\t\t\t\tvar d = opts.formatter.call(target, dvalue);\n\t\t\t\tvar css = opts.styler.call(target, dvalue);\n\t\t\t\tvar classValue = '';\n\t\t\t\tvar styleValue = '';\n\t\t\t\tif (typeof css == 'string'){\n\t\t\t\t\tstyleValue = css;\n\t\t\t\t} else if (css){\n\t\t\t\t\tclassValue = css['class'] || '';\n\t\t\t\t\tstyleValue = css['style'] || '';\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar cls = 'calendar-day';\n\t\t\t\tif (!(opts.year == day[0] && opts.month == day[1])){\n\t\t\t\t\tcls += ' calendar-other-month';\n\t\t\t\t}\n\t\t\t\tif (s == todayInfo){cls += ' calendar-today';}\n\t\t\t\tif (s == currentInfo){cls += ' calendar-selected';}\n\t\t\t\tif (j == saIndex){cls += ' calendar-saturday';}\n\t\t\t\telse if (j == suIndex){cls += ' calendar-sunday';}\n\t\t\t\tif (j == 0){cls += ' calendar-first';}\n\t\t\t\telse if (j == week.length-1){cls += ' calendar-last';}\n\t\t\t\t\n\t\t\t\tcls += ' ' + classValue;\n\t\t\t\tif (!opts.validator.call(target, dvalue)){\n\t\t\t\t\tcls += ' calendar-disabled';\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tdata.push('<td class=\"' + cls + '\" abbr=\"' + s + '\" style=\"' + styleValue + '\">' + d + '</td>');\n\t\t\t}\n\t\t\tdata.push('</tr>');\n\t\t}\n\t\tdata.push('</tbody>');\n\t\tdata.push('</table>');\n\t\t\n\t\tbody.append(data.join(''));\n\t\tbody.children('table.calendar-dtable').prependTo(body);\n\n\t\topts.onNavigate.call(target, opts.year, opts.month);\n\t}\n\t\n\t$.fn.calendar = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\treturn $.fn.calendar.methods[options](this, param);\n\t\t}\n\t\t\n\t\toptions = options || {};\n\t\treturn this.each(function(){\n\t\t\tvar state = $.data(this, 'calendar');\n\t\t\tif (state){\n\t\t\t\t$.extend(state.options, options);\n\t\t\t} else {\n\t\t\t\tstate = $.data(this, 'calendar', {\n\t\t\t\t\toptions:$.extend({}, $.fn.calendar.defaults, $.fn.calendar.parseOptions(this), options)\n\t\t\t\t});\n\t\t\t\tinit(this);\n\t\t\t}\n\t\t\tif (state.options.border == false){\n\t\t\t\t$(this).addClass('calendar-noborder');\n\t\t\t}\n\t\t\tsetSize(this);\n\t\t\tbindEvents(this);\n\t\t\tshow(this);\n\t\t\t$(this).find('div.calendar-menu').hide();\t// hide the calendar menu\n\t\t});\n\t};\n\t\n\t$.fn.calendar.methods = {\n\t\toptions: function(jq){\n\t\t\treturn $.data(jq[0], 'calendar').options;\n\t\t},\n\t\tresize: function(jq, param){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetSize(this, param);\n\t\t\t});\n\t\t},\n\t\tmoveTo: function(jq, date){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar opts = $(this).calendar('options');\n\t\t\t\tif (!date){\n\t\t\t\t\tvar now = new opts.Date();\n\t\t\t\t\t$(this).calendar({\n\t\t\t\t\t\tyear: now.getFullYear(),\n\t\t\t\t\t\tmonth: now.getMonth()+1,\n\t\t\t\t\t\tcurrent: date\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (opts.validator.call(this, date)){\n\t\t\t\t\tvar oldValue = opts.current;\n\t\t\t\t\t$(this).calendar({\n\t\t\t\t\t\tyear: date.getFullYear(),\n\t\t\t\t\t\tmonth: date.getMonth()+1,\n\t\t\t\t\t\tcurrent: date\n\t\t\t\t\t});\n\t\t\t\t\tif (!oldValue || oldValue.getTime() != date.getTime()){\n\t\t\t\t\t\topts.onChange.call(this, opts.current, oldValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\t\n\t$.fn.calendar.parseOptions = function(target){\n\t\tvar t = $(target);\n\t\treturn $.extend({}, $.parser.parseOptions(target, [\n\t\t\t'weekNumberHeader',{firstDay:'number',fit:'boolean',border:'boolean',showWeek:'boolean'}\n\t\t]));\n\t};\n\t\n\t$.fn.calendar.defaults = {\n\t\tDate: Date,\n\t\twidth:180,\n\t\theight:180,\n\t\tfit:false,\n\t\tborder:true,\n\t\tshowWeek:false,\n\t\tfirstDay:0,\n\t\tweeks:['S','M','T','W','T','F','S'],\n\t\tmonths:['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n\t\tyear:new Date().getFullYear(),\n\t\tmonth:new Date().getMonth()+1,\n\t\tcurrent:(function(){\n\t\t\tvar d = new Date();\n\t\t\treturn new Date(d.getFullYear(), d.getMonth(), d.getDate());\n\t\t})(),\n\t\tweekNumberHeader:'',\n\t\tgetWeekNumber: function(date){\n\t\t\tvar checkDate = new Date(date.getTime());\n\t\t\tcheckDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));\n\t\t\tvar time = checkDate.getTime();\n\t\t\tcheckDate.setMonth(0);\n\t\t\tcheckDate.setDate(1);\n\t\t\treturn Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;\n\t\t},\n\n\t\tformatter:function(date){return date.getDate()},\n\t\tstyler:function(date){return ''},\n\t\tvalidator:function(date){return true},\n\t\t\n\t\tonSelect: function(date){},\n\t\tonChange: function(newDate, oldDate){},\n\t\tonNavigate: function(year, month){}\n\t};\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.combobox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * combobox - EasyUI for jQuery\n * \n * Dependencies:\n *   combo\n * \n */\n(function($){\n\tfunction getRowIndex(target, value){\n\t\tvar state = $.data(target, 'combobox');\n\t\treturn $.easyui.indexOfArray(state.data, state.options.valueField, value);\n\t}\n\t\n\t/**\n\t * scroll panel to display the specified item\n\t */\n\tfunction scrollTo(target, value){\n\t\tvar opts = $.data(target, 'combobox').options;\n\t\tvar panel = $(target).combo('panel');\n\t\tvar item = opts.finder.getEl(target, value);\n\t\tif (item.length){\n\t\t\tif (item.position().top <= 0){\n\t\t\t\tvar h = panel.scrollTop() + item.position().top;\n\t\t\t\tpanel.scrollTop(h);\n\t\t\t} else if (item.position().top + item.outerHeight() > panel.height()){\n\t\t\t\tvar h = panel.scrollTop() + item.position().top + item.outerHeight() - panel.height();\n\t\t\t\tpanel.scrollTop(h);\n\t\t\t}\n\t\t}\n\t\tpanel.triggerHandler('scroll');\t// trigger the group sticking\n\t}\n\t\n\tfunction nav(target, dir){\n\t\tvar opts = $.data(target, 'combobox').options;\n\t\tvar panel = $(target).combobox('panel');\n\t\tvar item = panel.children('div.combobox-item-hover');\n\t\tif (!item.length){\n\t\t\titem = panel.children('div.combobox-item-selected');\n\t\t}\n\t\titem.removeClass('combobox-item-hover');\n\t\tvar firstSelector = 'div.combobox-item:visible:not(.combobox-item-disabled):first';\n\t\tvar lastSelector = 'div.combobox-item:visible:not(.combobox-item-disabled):last';\n\t\tif (!item.length){\n\t\t\titem = panel.children(dir=='next' ? firstSelector : lastSelector);\n\t\t} else {\n\t\t\tif (dir == 'next'){\n\t\t\t\titem = item.nextAll(firstSelector);\n\t\t\t\tif (!item.length){\n\t\t\t\t\titem = panel.children(firstSelector);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem = item.prevAll(firstSelector);\n\t\t\t\tif (!item.length){\n\t\t\t\t\titem = panel.children(lastSelector);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (item.length){\n\t\t\titem.addClass('combobox-item-hover');\n\t\t\tvar row = opts.finder.getRow(target, item);\n\t\t\tif (row){\n\t\t\t\t$(target).combobox('scrollTo', row[opts.valueField]);\n\t\t\t\tif (opts.selectOnNavigation){\n\t\t\t\t\tselect(target, row[opts.valueField]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * select the specified value\n\t */\n\tfunction select(target, value, remainText){\n\t\tvar opts = $.data(target, 'combobox').options;\n\t\tvar values = $(target).combo('getValues');\n\t\tif ($.inArray(value+'', values) == -1){\n\t\t\tif (opts.multiple){\n\t\t\t\tvalues.push(value);\n\t\t\t} else {\n\t\t\t\tvalues = [value];\n\t\t\t}\n\t\t\tsetValues(target, values, remainText);\n\t\t}\n\t}\n\t\n\t/**\n\t * unselect the specified value\n\t */\n\tfunction unselect(target, value){\n\t\tvar opts = $.data(target, 'combobox').options;\n\t\tvar values = $(target).combo('getValues');\n\t\tvar index = $.inArray(value+'', values);\n\t\tif (index >= 0){\n\t\t\tvalues.splice(index, 1);\n\t\t\tsetValues(target, values);\n\t\t}\n\t}\n\t\n\t/**\n\t * set values\n\t */\n\tfunction setValues(target, values, remainText){\n\t\tvar opts = $.data(target, 'combobox').options;\n\t\tvar panel = $(target).combo('panel');\n\t\t\n\t\tif (!$.isArray(values)){\n\t\t\tvalues = values.split(opts.separator);\n\t\t}\n\t\tif (!opts.multiple){\n\t\t\tvalues = values.length ? [values[0]] : [''];\n\t\t}\n\n\t\t// unselect the old rows\n\t\tvar oldValues = $(target).combo('getValues');\n\t\tif (panel.is(':visible')){\n\t\t\tpanel.find('.combobox-item-selected').each(function(){\n\t\t\t\tvar row = opts.finder.getRow(target, $(this));\n\t\t\t\tif (row){\n\t\t\t\t\tif ($.easyui.indexOfArray(oldValues, row[opts.valueField]) == -1){\n\t\t\t\t\t\t$(this).removeClass('combobox-item-selected');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t$.map(oldValues, function(v){\n\t\t\tif ($.easyui.indexOfArray(values, v) == -1){\n\t\t\t\tvar el = opts.finder.getEl(target, v);\n\t\t\t\tif (el.hasClass('combobox-item-selected')){\n\t\t\t\t\tel.removeClass('combobox-item-selected');\n\t\t\t\t\topts.onUnselect.call(target, opts.finder.getRow(target, v));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tvar theRow = null;\n\t\tvar vv = [], ss = [];\n\t\tfor(var i=0; i<values.length; i++){\n\t\t\tvar v = values[i];\n\t\t\tvar s = v;\n\t\t\tvar row = opts.finder.getRow(target, v);\n\t\t\tif (row){\n\t\t\t\ts = row[opts.textField];\n\t\t\t\ttheRow = row;\n\t\t\t\tvar el = opts.finder.getEl(target, v);\n\t\t\t\tif (!el.hasClass('combobox-item-selected')){\n\t\t\t\t\tel.addClass('combobox-item-selected');\n\t\t\t\t\topts.onSelect.call(target, row);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ts = findText(v, opts.mappingRows) || v;\n\t\t\t}\n\t\t\tvv.push(v);\n\t\t\tss.push(s);\n\t\t}\n\n\t\tif (!remainText){\n\t\t\t$(target).combo('setText', ss.join(opts.separator));\n\t\t}\n\t\tif (opts.showItemIcon){\n\t\t\tvar tb = $(target).combobox('textbox');\n\t\t\ttb.removeClass('textbox-bgicon ' + opts.textboxIconCls);\n\t\t\tif (theRow && theRow.iconCls){\n\t\t\t\ttb.addClass('textbox-bgicon ' + theRow.iconCls);\n\t\t\t\topts.textboxIconCls = theRow.iconCls;\n\t\t\t}\n\t\t}\n\t\t$(target).combo('setValues', vv);\n\t\tpanel.triggerHandler('scroll');\t// trigger the group sticking\n\n\t\tfunction findText(value, a){\n\t\t\tvar item = $.easyui.getArrayItem(a, opts.valueField, value);\n\t\t\treturn item ? item[opts.textField] : undefined;\n\t\t}\n\t}\n\t\n\t/**\n\t * load data, the old list items will be removed.\n\t */\n\tfunction loadData(target, data, remainText){\n\t\tvar state = $.data(target, 'combobox');\n\t\tvar opts = state.options;\n\t\tstate.data = opts.loadFilter.call(target, data);\n\n\t\topts.view.render.call(opts.view, target, $(target).combo('panel'), state.data);\t\t\n\n\t\tvar vv = $(target).combobox('getValues');\n\t\t$.easyui.forEach(state.data, false, function(row){\n\t\t\tif (row['selected']){\n\t\t\t\t$.easyui.addArrayItem(vv, row[opts.valueField]+'');\n\t\t\t}\n\t\t});\n\t\tif (opts.multiple){\n\t\t\tsetValues(target, vv, remainText);\n\t\t} else {\n\t\t\tsetValues(target, vv.length ? [vv[vv.length-1]] : [], remainText);\n\t\t}\n\t\t\n\t\topts.onLoadSuccess.call(target, data);\n\t}\n\t\n\t/**\n\t * request remote data if the url property is setted.\n\t */\n\tfunction request(target, url, param, remainText){\n\t\tvar opts = $.data(target, 'combobox').options;\n\t\tif (url){\n\t\t\topts.url = url;\n\t\t}\n\t\tparam = $.extend({}, opts.queryParams, param||{});\n//\t\tparam = param || {};\n\t\t\n\t\tif (opts.onBeforeLoad.call(target, param) == false) return;\n\n\t\topts.loader.call(target, param, function(data){\n\t\t\tloadData(target, data, remainText);\n\t\t}, function(){\n\t\t\topts.onLoadError.apply(this, arguments);\n\t\t});\n\t}\n\t\n\t/**\n\t * do the query action\n\t */\n\tfunction doQuery(target, q){\n\t\tvar state = $.data(target, 'combobox');\n\t\tvar opts = state.options;\n\n\t\tvar highlightItem = $();\n\t\tvar qq = opts.multiple ? q.split(opts.separator) : [q];\n\t\tif (opts.mode == 'remote'){\n\t\t\t_setValues(qq);\n\t\t\trequest(target, null, {q:q}, true);\n\t\t} else {\n\t\t\tvar panel = $(target).combo('panel');\n\t\t\tpanel.find('.combobox-item-hover').removeClass('combobox-item-hover');\n\t\t\tpanel.find('.combobox-item,.combobox-group').hide();\n\t\t\tvar data = state.data;\n\t\t\tvar vv = [];\n\t\t\t$.map(qq, function(q){\n\t\t\t\tq = $.trim(q);\n\t\t\t\tvar value = q;\n\t\t\t\tvar group = undefined;\n\t\t\t\thighlightItem = $();\n\t\t\t\tfor(var i=0; i<data.length; i++){\n\t\t\t\t\tvar row = data[i];\n\t\t\t\t\tif (opts.filter.call(target, q, row)){\n\t\t\t\t\t\tvar v = row[opts.valueField];\n\t\t\t\t\t\tvar s = row[opts.textField];\n\t\t\t\t\t\tvar g = row[opts.groupField];\n\t\t\t\t\t\tvar item = opts.finder.getEl(target, v).show();\n\t\t\t\t\t\tif (s.toLowerCase() == q.toLowerCase()){\n\t\t\t\t\t\t\tvalue = v;\n\t\t\t\t\t\t\tif (opts.reversed){\n\t\t\t\t\t\t\t\thighlightItem = item;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tselect(target, v, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (opts.groupField && group != g){\n\t\t\t\t\t\t\topts.finder.getGroupEl(target, g).show();\n\t\t\t\t\t\t\tgroup = g;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvv.push(value);\n\t\t\t});\n\t\t\t_setValues(vv);\n\t\t}\n\t\tfunction _setValues(vv){\n\t\t\tif (opts.reversed){\n\t\t\t\thighlightItem.addClass('combobox-item-hover');\n\t\t\t} else {\n\t\t\t\tsetValues(target, opts.multiple ? (q?vv:[]) : vv, true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction doEnter(target){\n\t\tvar t = $(target);\n\t\tvar opts = t.combobox('options');\n\t\tvar panel = t.combobox('panel');\n\t\tvar item = panel.children('div.combobox-item-hover');\n\t\tif (item.length){\n\t\t\titem.removeClass('combobox-item-hover');\n\t\t\tvar row = opts.finder.getRow(target, item);\n\t\t\tvar value = row[opts.valueField];\n\t\t\tif (opts.multiple){\n\t\t\t\tif (item.hasClass('combobox-item-selected')){\n\t\t\t\t\tt.combobox('unselect', value);\n\t\t\t\t} else {\n\t\t\t\t\tt.combobox('select', value);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tt.combobox('select', value);\n\t\t\t}\n\t\t}\n\t\tvar vv = [];\n\t\t$.map(t.combobox('getValues'), function(v){\n\t\t\tif (getRowIndex(target, v) >= 0){\n\t\t\t\tvv.push(v);\n\t\t\t}\n\t\t});\n\t\tt.combobox('setValues', vv);\n\t\tif (!opts.multiple){\n\t\t\tt.combobox('hidePanel');\n\t\t}\n\t}\n\t\n\t/**\n\t * create the component\n\t */\n\tfunction create(target){\n\t\tvar state = $.data(target, 'combobox');\n\t\tvar opts = state.options;\n\t\t\n\t\t$(target).addClass('combobox-f');\n\t\t$(target).combo($.extend({}, opts, {\n\t\t\tonShowPanel: function(){\n\t\t\t\t$(this).combo('panel').find('div.combobox-item:hidden,div.combobox-group:hidden').show();\n\t\t\t\tsetValues(this, $(this).combobox('getValues'), true);\n\t\t\t\t$(this).combobox('scrollTo', $(this).combobox('getValue'));\n\t\t\t\topts.onShowPanel.call(this);\n\t\t\t}\n\t\t}));\n\n\t}\n\n\tfunction mouseoverHandler(e){\n\t\t$(this).children('div.combobox-item-hover').removeClass('combobox-item-hover');\n\t\tvar item = $(e.target).closest('div.combobox-item');\n\t\tif (!item.hasClass('combobox-item-disabled')){\n\t\t\titem.addClass('combobox-item-hover');\n\t\t}\n\t\te.stopPropagation();\n\t}\n\tfunction mouseoutHandler(e){\n\t\t$(e.target).closest('div.combobox-item').removeClass('combobox-item-hover');\n\t\te.stopPropagation();\n\t}\n\tfunction clickHandler(e){\n\t\tvar target = $(this).panel('options').comboTarget;\n\t\tif (!target){return;}\n\t\tvar opts = $(target).combobox('options');\n\t\tvar item = $(e.target).closest('div.combobox-item');\n\t\tif (!item.length || item.hasClass('combobox-item-disabled')){return}\n\t\tvar row = opts.finder.getRow(target, item);\n\t\tif (!row){return;}\n\t\tif (opts.blurTimer){\n\t\t\tclearTimeout(opts.blurTimer);\n\t\t\topts.blurTimer = null;\n\t\t}\n\t\topts.onClick.call(target, row);\n\t\tvar value = row[opts.valueField];\n\t\tif (opts.multiple){\n\t\t\tif (item.hasClass('combobox-item-selected')){\n\t\t\t\tunselect(target, value);\n\t\t\t} else {\n\t\t\t\tselect(target, value);\n\t\t\t}\n\t\t} else {\n\t\t\t$(target).combobox('setValue', value).combobox('hidePanel');\n\t\t}\n\t\te.stopPropagation();\n\t}\n\tfunction scrollHandler(e){\n\t\tvar target = $(this).panel('options').comboTarget;\n\t\tif (!target){return;}\n\t\tvar opts = $(target).combobox('options');\n\t\tif (opts.groupPosition == 'sticky'){\n\t\t\tvar stick = $(this).children('.combobox-stick');\n\t\t\tif (!stick.length){\n\t\t\t\tstick = $('<div class=\"combobox-stick\"></div>').appendTo(this);\n\t\t\t}\n\t\t\tstick.hide();\n\t\t\tvar state = $(target).data('combobox');\n\t\t\t$(this).children('.combobox-group:visible').each(function(){\n\t\t\t\tvar g = $(this);\n\t\t\t\tvar groupData = opts.finder.getGroup(target, g);\n\t\t\t\tvar rowData = state.data[groupData.startIndex + groupData.count - 1];\n\t\t\t\tvar last = opts.finder.getEl(target, rowData[opts.valueField]);\n\t\t\t\tif (g.position().top < 0 && last.position().top > 0){\n\t\t\t\t\tstick.show().html(g.html());\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\t$.fn.combobox = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\tvar method = $.fn.combobox.methods[options];\n\t\t\tif (method){\n\t\t\t\treturn method(this, param);\n\t\t\t} else {\n\t\t\t\treturn this.combo(options, param);\n\t\t\t}\n\t\t}\n\t\t\n\t\toptions = options || {};\n\t\treturn this.each(function(){\n\t\t\tvar state = $.data(this, 'combobox');\n\t\t\tif (state){\n\t\t\t\t$.extend(state.options, options);\n\t\t\t} else {\n\t\t\t\tstate = $.data(this, 'combobox', {\n\t\t\t\t\toptions: $.extend({}, $.fn.combobox.defaults, $.fn.combobox.parseOptions(this), options),\n\t\t\t\t\tdata: []\n\t\t\t\t});\n\t\t\t}\n\t\t\tcreate(this);\n\t\t\tif (state.options.data){\n\t\t\t\tloadData(this, state.options.data);\n\t\t\t} else {\n\t\t\t\tvar data = $.fn.combobox.parseData(this);\n\t\t\t\tif (data.length){\n\t\t\t\t\tloadData(this, data);\n\t\t\t\t}\n\t\t\t}\n\t\t\trequest(this);\n\t\t});\n\t};\n\t\n\t\n\t$.fn.combobox.methods = {\n\t\toptions: function(jq){\n\t\t\tvar copts = jq.combo('options');\n\t\t\treturn $.extend($.data(jq[0], 'combobox').options, {\n\t\t\t\twidth: copts.width,\n\t\t\t\theight: copts.height,\n\t\t\t\toriginalValue: copts.originalValue,\n\t\t\t\tdisabled: copts.disabled,\n\t\t\t\treadonly: copts.readonly\n\t\t\t});\n\t\t},\n\t\tcloneFrom: function(jq, from){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$(this).combo('cloneFrom', from);\n\t\t\t\t$.data(this, 'combobox', $(from).data('combobox'));\n\t\t\t\t$(this).addClass('combobox-f').attr('comboboxName', $(this).attr('textboxName'));\n\t\t\t});\n\t\t},\n\t\tgetData: function(jq){\n\t\t\treturn $.data(jq[0], 'combobox').data;\n\t\t},\n\t\tsetValues: function(jq, values){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar opts = $(this).combobox('options');\n\t\t\t\tif ($.isArray(values)){\n\t\t\t\t\tvalues = $.map(values, function(value){\n\t\t\t\t\t\tif (value && typeof value == 'object'){\n\t\t\t\t\t\t\t$.easyui.addArrayItem(opts.mappingRows, opts.valueField, value);\n\t\t\t\t\t\t\treturn value[opts.valueField];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tsetValues(this, values);\n\t\t\t});\n\t\t},\n\t\tsetValue: function(jq, value){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$(this).combobox('setValues', $.isArray(value)?value:[value]);\n\t\t\t});\n\t\t},\n\t\tclear: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetValues(this, []);\n\t\t\t});\n\t\t},\n\t\treset: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar opts = $(this).combobox('options');\n\t\t\t\tif (opts.multiple){\n\t\t\t\t\t$(this).combobox('setValues', opts.originalValue);\n\t\t\t\t} else {\n\t\t\t\t\t$(this).combobox('setValue', opts.originalValue);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tloadData: function(jq, data){\n\t\t\treturn jq.each(function(){\n\t\t\t\tloadData(this, data);\n\t\t\t});\n\t\t},\n\t\treload: function(jq, url){\n\t\t\treturn jq.each(function(){\n\t\t\t\tif (typeof url == 'string'){\n\t\t\t\t\trequest(this, url);\n\t\t\t\t} else {\n\t\t\t\t\tif (url){\n\t\t\t\t\t\tvar opts = $(this).combobox('options');\n\t\t\t\t\t\topts.queryParams = url;\n\t\t\t\t\t}\n\t\t\t\t\trequest(this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tselect: function(jq, value){\n\t\t\treturn jq.each(function(){\n\t\t\t\tselect(this, value);\n\t\t\t});\n\t\t},\n\t\tunselect: function(jq, value){\n\t\t\treturn jq.each(function(){\n\t\t\t\tunselect(this, value);\n\t\t\t});\n\t\t},\n\t\tscrollTo: function(jq, value){\n\t\t\treturn jq.each(function(){\n\t\t\t\tscrollTo(this, value);\n\t\t\t});\n\t\t}\n\t};\n\t\n\t$.fn.combobox.parseOptions = function(target){\n\t\tvar t = $(target);\n\t\treturn $.extend({}, $.fn.combo.parseOptions(target), $.parser.parseOptions(target,[\n\t\t\t'valueField','textField','groupField','groupPosition','mode','method','url',\n\t\t\t{showItemIcon:'boolean',limitToList:'boolean'}\n\t\t]));\n\t};\n\t\n\t$.fn.combobox.parseData = function(target){\n\t\tvar data = [];\n\t\tvar opts = $(target).combobox('options');\n\t\t$(target).children().each(function(){\n\t\t\tif (this.tagName.toLowerCase() == 'optgroup'){\n\t\t\t\tvar group = $(this).attr('label');\n\t\t\t\t$(this).children().each(function(){\n\t\t\t\t\t_parseItem(this, group);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t_parseItem(this);\n\t\t\t}\n\t\t});\n\t\treturn data;\n\t\t\n\t\tfunction _parseItem(el, group){\n\t\t\tvar t = $(el);\n\t\t\tvar row = {};\n\t\t\trow[opts.valueField] = t.attr('value')!=undefined ? t.attr('value') : t.text();\n\t\t\trow[opts.textField] = t.text();\n\t\t\trow['iconCls'] = $.parser.parseOptions(el, ['iconCls']).iconCls;\n\t\t\trow['selected'] = t.is(':selected');\n\t\t\trow['disabled'] = t.is(':disabled');\n\t\t\tif (group){\n\t\t\t\topts.groupField = opts.groupField || 'group';\n\t\t\t\trow[opts.groupField] = group;\n\t\t\t}\n\t\t\tdata.push(row);\n\t\t}\n\t};\n\n\tvar COMBOBOX_SERNO = 0;\n\tvar defaultView = {\n\t\trender: function(target, container, data){\n\t\t\tvar state = $.data(target, 'combobox');\n\t\t\tvar opts = state.options;\n\t\t\tvar prefixId = $(target).attr('id')||'';\n\t\t\t\n\t\t\tCOMBOBOX_SERNO++;\n\t\t\tstate.itemIdPrefix = prefixId + '_easyui_combobox_i' + COMBOBOX_SERNO;\n\t\t\tstate.groupIdPrefix = prefixId + '_easyui_combobox_g' + COMBOBOX_SERNO;\t\t\n\t\t\tstate.groups = [];\n\t\t\t\n\t\t\tvar dd = [];\n\t\t\tvar group = undefined;\n\t\t\tfor(var i=0; i<data.length; i++){\n\t\t\t\tvar row = data[i];\n\t\t\t\tvar v = row[opts.valueField]+'';\n\t\t\t\tvar s = row[opts.textField];\n\t\t\t\tvar g = row[opts.groupField];\n\t\t\t\t\n\t\t\t\tif (g){\n\t\t\t\t\tif (group != g){\n\t\t\t\t\t\tgroup = g;\n\t\t\t\t\t\tstate.groups.push({\n\t\t\t\t\t\t\tvalue: g,\n\t\t\t\t\t\t\tstartIndex: i,\n\t\t\t\t\t\t\tcount: 1\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdd.push('<div id=\"' + (state.groupIdPrefix+'_'+(state.groups.length-1)) + '\" class=\"combobox-group\">');\n\t\t\t\t\t\tdd.push(opts.groupFormatter ? opts.groupFormatter.call(target, g) : g);\n\t\t\t\t\t\tdd.push('</div>');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate.groups[state.groups.length-1].count++;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tgroup = undefined;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar cls = 'combobox-item' + (row.disabled ? ' combobox-item-disabled' : '') + (g ? ' combobox-gitem' : '');\n\t\t\t\tdd.push('<div id=\"' + (state.itemIdPrefix+'_'+i) + '\" class=\"' + cls + '\">');\n\t\t\t\tif (opts.showItemIcon && row.iconCls){\n\t\t\t\t\tdd.push('<span class=\"combobox-icon ' + row.iconCls + '\"></span>');\n\t\t\t\t}\n\t\t\t\tdd.push(opts.formatter ? opts.formatter.call(target, row) : s);\n\t\t\t\tdd.push('</div>');\n\t\t\t}\n\t\t\t$(container).html(dd.join(''));\n\t\t}\n\t};\n\t\n\t$.fn.combobox.defaults = $.extend({}, $.fn.combo.defaults, {\n\t\tvalueField: 'value',\n\t\ttextField: 'text',\n\t\tgroupPosition: 'static',\t// or 'sticky'\n\t\tgroupField: null,\n\t\tgroupFormatter: function(group){return group;},\n\t\tmode: 'local',\t// or 'remote'\n\t\tmethod: 'post',\n\t\turl: null,\n\t\tdata: null,\n\t\tqueryParams: {},\n\t\tshowItemIcon: false,\n\t\tlimitToList: false,\t// limit the inputed values to the listed items\n\t\tunselectedValues: [],\n\t\tmappingRows: [],\n\t\tview: defaultView,\n\t\t\n\t\tkeyHandler: {\n\t\t\tup: function(e){nav(this,'prev');e.preventDefault()},\n\t\t\tdown: function(e){nav(this,'next');e.preventDefault()},\n\t\t\tleft: function(e){},\n\t\t\tright: function(e){},\n\t\t\tenter: function(e){doEnter(this)},\n\t\t\tquery: function(q,e){doQuery(this, q)}\n\t\t},\n\t\tinputEvents: $.extend({}, $.fn.combo.defaults.inputEvents, {\n\t\t\tblur: function(e){\n\t\t\t\t$.fn.combo.defaults.inputEvents.blur(e);\n\t\t\t\tvar target = e.data.target;\n\t\t\t\tvar opts = $(target).combobox('options');\n\t\t\t\tif (opts.reversed || opts.limitToList){\n\t\t\t\t\tif (opts.blurTimer){\n\t\t\t\t\t\tclearTimeout(opts.blurTimer);\n\t\t\t\t\t}\n\t\t\t\t\topts.blurTimer = setTimeout(function(){\n\t\t\t\t\t\tvar existing = $(target).parent().length;\n\t\t\t\t\t\tif (existing){\n\t\t\t\t\t\t\tif (opts.reversed){\n\t\t\t\t\t\t\t\t$(target).combobox('setValues', $(target).combobox('getValues'));\n\t\t\t\t\t\t\t} else if (opts.limitToList){\n\t\t\t\t\t\t\t\t//doEnter(target);\n\t\t\t\t\t\t\t\tvar vv = [];\n\t\t\t\t\t\t\t\t$.map($(target).combobox('getValues'), function(v){\n\t\t\t\t\t\t\t\t\tvar index = $.easyui.indexOfArray($(target).combobox('getData'), opts.valueField, v);\n\t\t\t\t\t\t\t\t\tif (index >= 0){\n\t\t\t\t\t\t\t\t\t\tvv.push(v);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t$(target).combobox('setValues', vv);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\topts.blurTimer = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t},50);\n\t\t\t\t}\n\t\t\t}\n\t\t}),\n\t\tpanelEvents: {\n\t\t\tmouseover: mouseoverHandler,\n\t\t\tmouseout: mouseoutHandler,\n\t\t\tmousedown: function(e){\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t},\n\t\t\tclick: clickHandler,\n\t\t\tscroll: scrollHandler\n\t\t},\n\t\tfilter: function(q, row){\n\t\t\tvar opts = $(this).combobox('options');\n\t\t\treturn row[opts.textField].toLowerCase().indexOf(q.toLowerCase()) >= 0;\n\t\t},\n\t\tformatter: function(row){\n\t\t\tvar opts = $(this).combobox('options');\n\t\t\treturn row[opts.textField];\n\t\t},\n\t\tloader: function(param, success, error){\n\t\t\tvar opts = $(this).combobox('options');\n\t\t\tif (!opts.url) return false;\n\t\t\t$.ajax({\n\t\t\t\ttype: opts.method,\n\t\t\t\turl: opts.url,\n\t\t\t\tdata: param,\n\t\t\t\tdataType: 'json',\n\t\t\t\tsuccess: function(data){\n\t\t\t\t\tsuccess(data);\n\t\t\t\t},\n\t\t\t\terror: function(){\n\t\t\t\t\terror.apply(this, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tloadFilter: function(data){\n\t\t\treturn data;\n\t\t},\n\t\tfinder:{\n\t\t\tgetEl:function(target, value){\n\t\t\t\tvar index = getRowIndex(target, value);\n\t\t\t\tvar id = $.data(target, 'combobox').itemIdPrefix + '_' + index;\n\t\t\t\treturn $('#'+id);\n\t\t\t},\n\t\t\tgetGroupEl:function(target, gvalue){\n\t\t\t\tvar state = $.data(target, 'combobox');\n\t\t\t\tvar index = $.easyui.indexOfArray(state.groups, 'value', gvalue);\n\t\t\t\tvar id = state.groupIdPrefix + '_' + index;\n\t\t\t\treturn $('#'+id);\n\t\t\t},\n\t\t\tgetGroup:function(target, p){\n\t\t\t\tvar state = $.data(target, 'combobox');\n\t\t\t\tvar index = p.attr('id').substr(state.groupIdPrefix.length+1);\n\t\t\t\treturn state.groups[parseInt(index)];\n\t\t\t},\n\t\t\tgetRow:function(target, p){\n\t\t\t\tvar state = $.data(target, 'combobox');\n\t\t\t\tvar index = (p instanceof $) ? p.attr('id').substr(state.itemIdPrefix.length+1) : getRowIndex(target, p);\n\t\t\t\treturn state.data[parseInt(index)];\n\t\t\t}\n\t\t},\n\t\t\n\t\tonBeforeLoad: function(param){},\n\t\tonLoadSuccess: function(data){},\n\t\tonLoadError: function(){},\n\t\tonSelect: function(record){},\n\t\tonUnselect: function(record){},\n\t\tonClick: function(record){}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.datebox.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * datebox - EasyUI for jQuery\n * \n * Dependencies:\n * \t calendar\n *   combo\n * \n */\n(function($){\n\t/**\n\t * create date box\n\t */\n\tfunction createBox(target){\n\t\tvar state = $.data(target, 'datebox');\n\t\tvar opts = state.options;\n\t\t\n\t\t$(target).addClass('datebox-f').combo($.extend({}, opts, {\n\t\t\tonShowPanel:function(){\n\t\t\t\tbindEvents(this);\n\t\t\t\tsetButtons(this);\n\t\t\t\tsetCalendar(this);\n\t\t\t\tsetValue(this, $(this).datebox('getText'), true);\n\t\t\t\topts.onShowPanel.call(this);\n\t\t\t}\n\t\t}));\n\t\t\n\t\t/**\n\t\t * if the calendar isn't created, create it.\n\t\t */\n\t\tif (!state.calendar){\n\t\t\tvar panel = $(target).combo('panel').css('overflow','hidden');\n\t\t\tpanel.panel('options').onBeforeDestroy = function(){\n\t\t\t\tvar c = $(this).find('.calendar-shared');\n\t\t\t\tif (c.length){\n\t\t\t\t\tc.insertBefore(c[0].pholder);\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar cc = $('<div class=\"datebox-calendar-inner\"></div>').prependTo(panel);\n\t\t\tif (opts.sharedCalendar){\n\t\t\t\tvar c = $(opts.sharedCalendar);\n\t\t\t\tif (!c[0].pholder){\n\t\t\t\t\tc[0].pholder = $('<div class=\"calendar-pholder\" style=\"display:none\"></div>').insertAfter(c);\n\t\t\t\t}\n\t\t\t\tc.addClass('calendar-shared').appendTo(cc);\n\t\t\t\tif (!c.hasClass('calendar')){\n\t\t\t\t\tc.calendar();\n\t\t\t\t}\n\t\t\t\tstate.calendar = c;\n\t\t\t} else {\n\t\t\t\tstate.calendar = $('<div></div>').appendTo(cc).calendar();\n\t\t\t}\n\n\t\t\t$.extend(state.calendar.calendar('options'), {\n\t\t\t\tfit:true,\n\t\t\t\tborder:false,\n\t\t\t\tonSelect:function(date){\n\t\t\t\t\tvar target = this.target;\n\t\t\t\t\tvar opts = $(target).datebox('options');\n\t\t\t\t\topts.onSelect.call(target, date);\n\t\t\t\t\tsetValue(target, opts.formatter.call(target, date));\n\t\t\t\t\t$(target).combo('hidePanel');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t$(target).combo('textbox').parent().addClass('datebox');\n\t\t$(target).datebox('initValue', opts.value);\n\t\t\n\t\tfunction bindEvents(target){\n\t\t\tvar opts = $(target).datebox('options');\n\t\t\tvar panel = $(target).combo('panel');\n\t\t\tpanel._unbind('.datebox')._bind('click.datebox', function(e){\n\t\t\t\tif ($(e.target).hasClass('datebox-button-a')){\n\t\t\t\t\tvar index = parseInt($(e.target).attr('datebox-button-index'));\n\t\t\t\t\topts.buttons[index].handler.call(e.target, target);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfunction setButtons(target){\n\t\t\tvar panel = $(target).combo('panel');\n\t\t\tif (panel.children('div.datebox-button').length){return}\n\t\t\tvar button = $('<div class=\"datebox-button\"><table cellspacing=\"0\" cellpadding=\"0\" style=\"width:100%\"><tr></tr></table></div>').appendTo(panel);\n\t\t\tvar tr = button.find('tr');\n\t\t\tfor(var i=0; i<opts.buttons.length; i++){\n\t\t\t\tvar td = $('<td></td>').appendTo(tr);\n\t\t\t\tvar btn = opts.buttons[i];\n\t\t\t\tvar t = $('<a class=\"datebox-button-a\" href=\"javascript:;\"></a>').html($.isFunction(btn.text) ? btn.text(target) : btn.text).appendTo(td);\n\t\t\t\tt.attr('datebox-button-index', i);\n\t\t\t}\n\t\t\ttr.find('td').css('width', (100/opts.buttons.length)+'%');\n\t\t}\n\t\tfunction setCalendar(target){\n\t\t\tvar panel = $(target).combo('panel');\n\t\t\tvar cc = panel.children('div.datebox-calendar-inner');\n\t\t\tpanel.children()._outerWidth(panel.width());\n\t\t\tstate.calendar.appendTo(cc);\n\t\t\tstate.calendar[0].target = target;\n\t\t\tif (opts.panelHeight != 'auto'){\n\t\t\t\tvar height = panel.height();\n\t\t\t\tpanel.children().not(cc).each(function(){\n\t\t\t\t\theight -= $(this).outerHeight();\n\t\t\t\t});\n\t\t\t\tcc._outerHeight(height);\n\t\t\t}\n\t\t\tstate.calendar.calendar('resize');\n\t\t}\n\t}\n\t\n\t/**\n\t * called when user inputs some value in text box\n\t */\n\tfunction doQuery(target, q){\n\t\tsetValue(target, q, true);\n\t}\n\t\n\t/**\n\t * called when user press enter key\n\t */\n\tfunction doEnter(target){\n\t\tvar state = $.data(target, 'datebox');\n\t\tvar opts = state.options;\n\t\tvar current = state.calendar.calendar('options').current;\n\t\tif (current){\n\t\t\tsetValue(target, opts.formatter.call(target, current));\n\t\t\t$(target).combo('hidePanel');\n\t\t}\n\t}\n\t\n\tfunction setValue(target, value, remainText){\n\t\tvar state = $.data(target, 'datebox');\n\t\tvar opts = state.options;\n\t\tvar calendar = state.calendar;\n\t\tcalendar.calendar('moveTo', opts.parser.call(target, value));\n\t\tif (remainText){\n\t\t\t$(target).combo('setValue', value);\n\t\t} else {\n\t\t\tif (value){\n\t\t\t\tvalue = opts.formatter.call(target, calendar.calendar('options').current);\n\t\t\t}\n\t\t\t$(target).combo('setText', value).combo('setValue', value);\n\t\t}\n\t}\n\t\n\t$.fn.datebox = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\tvar method = $.fn.datebox.methods[options];\n\t\t\tif (method){\n\t\t\t\treturn method(this, param);\n\t\t\t} else {\n\t\t\t\treturn this.combo(options, param);\n\t\t\t}\n\t\t}\n\t\t\n\t\toptions = options || {};\n\t\treturn this.each(function(){\n\t\t\tvar state = $.data(this, 'datebox');\n\t\t\tif (state){\n\t\t\t\t$.extend(state.options, options);\n\t\t\t} else {\n\t\t\t\t$.data(this, 'datebox', {\n\t\t\t\t\toptions: $.extend({}, $.fn.datebox.defaults, $.fn.datebox.parseOptions(this), options)\n\t\t\t\t});\n\t\t\t}\n\t\t\tcreateBox(this);\n\t\t});\n\t};\n\t\n\t$.fn.datebox.methods = {\n\t\toptions: function(jq){\n\t\t\tvar copts = jq.combo('options');\n\t\t\treturn $.extend($.data(jq[0], 'datebox').options, {\n\t\t\t\twidth: copts.width,\n\t\t\t\theight: copts.height,\n\t\t\t\toriginalValue: copts.originalValue,\n\t\t\t\tdisabled: copts.disabled,\n\t\t\t\treadonly: copts.readonly\n\t\t\t});\n\t\t},\n\t\tcloneFrom: function(jq, from){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$(this).combo('cloneFrom', from);\n\t\t\t\t$.data(this, 'datebox', {\n\t\t\t\t\toptions: $.extend(true, {}, $(from).datebox('options')),\n\t\t\t\t\tcalendar: $(from).datebox('calendar')\n\t\t\t\t});\n\t\t\t\t$(this).addClass('datebox-f');\n\t\t\t});\n\t\t},\n\t\tcalendar: function(jq){\t// get the calendar object\n\t\t\treturn $.data(jq[0], 'datebox').calendar;\n\t\t},\n\t\tinitValue: function(jq, value){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar opts = $(this).datebox('options');\n\t\t\t\tvar value = opts.value;\n\t\t\t\tif (value){\n\t\t\t\t\tvar date = opts.parser.call(this, value);\n\t\t\t\t\tvalue = opts.formatter.call(this, date);\n\t\t\t\t\t$(this).datebox('calendar').calendar('moveTo', date);\n\t\t\t\t}\n\t\t\t\t$(this).combo('initValue', value).combo('setText', value);\n\t\t\t});\n\t\t},\n\t\tsetValue: function(jq, value){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetValue(this, value);\n\t\t\t});\n\t\t},\n\t\treset: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar opts = $(this).datebox('options');\n\t\t\t\t$(this).datebox('setValue', opts.originalValue);\n\t\t\t});\n\t\t},\n\t\tsetDate: function(jq, date){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar opts = $(this).datebox('options');\n\t\t\t\t$(this).datebox('calendar').calendar('moveTo', date);\n\t\t\t\tsetValue(this, date ? opts.formatter.call(this, date) : '');\n\t\t\t});\n\t\t},\n\t\tgetDate: function(jq){\n\t\t\tif (jq.datebox('getValue')){\n\t\t\t\treturn jq.datebox('calendar').calendar('options').current;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t};\n\t\n\t$.fn.datebox.parseOptions = function(target){\n\t\treturn $.extend({}, $.fn.combo.parseOptions(target), $.parser.parseOptions(target, ['sharedCalendar']));\n\t};\n\t\n\t$.fn.datebox.defaults = $.extend({}, $.fn.combo.defaults, {\n\t\tpanelWidth:250,\n\t\tpanelHeight:'auto',\n\t\tsharedCalendar:null,\n\t\t\n\t\tkeyHandler: {\n\t\t\tup:function(e){},\n\t\t\tdown:function(e){},\n\t\t\tleft: function(e){},\n\t\t\tright: function(e){},\n\t\t\tenter:function(e){doEnter(this)},\n\t\t\tquery:function(q,e){doQuery(this, q)}\n\t\t},\n\t\tcurrentText:'Today',\n\t\tcloseText:'Close',\n\t\tokText:'Ok',\n\t\t\n\t\tbuttons:[{\n\t\t\ttext: function(target){return $(target).datebox('options').currentText;},\n\t\t\thandler: function(target){\n\t\t\t\tvar opts = $(target).datebox('options');\n\t\t\t\tvar now = new Date();\n\t\t\t\tvar current = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\t\t\t\t$(target).datebox('calendar').calendar({\n\t\t\t\t\tyear:current.getFullYear(),\n\t\t\t\t\tmonth:current.getMonth()+1,\n\t\t\t\t\tcurrent:current\n\t\t\t\t});\n\t\t\t\topts.onSelect.call(target, current);\n\t\t\t\tdoEnter(target);\n\t\t\t}\n\t\t},{\n\t\t\ttext: function(target){return $(target).datebox('options').closeText;},\n\t\t\thandler: function(target){\n\t\t\t\t$(this).closest('div.combo-panel').panel('close');\n\t\t\t}\n\t\t}],\n\t\t\n\t\tformatter:function(date){\n\t\t\tvar y = date.getFullYear();\n\t\t\tvar m = date.getMonth()+1;\n\t\t\tvar d = date.getDate();\n\t\t\treturn (m<10?('0'+m):m)+'/'+(d<10?('0'+d):d)+'/'+y;\n\t\t},\n\t\tparser:function(s){\n\t\t\tvar copts = $(this).datebox('calendar').calendar('options');\n\t\t\tif (!s) return new copts.Date();\n\t\t\tvar ss = s.split('/');\n\t\t\tvar m = parseInt(ss[0],10);\n\t\t\tvar d = parseInt(ss[1],10);\n\t\t\tvar y = parseInt(ss[2],10);\n\t\t\tif (!isNaN(y) && !isNaN(m) && !isNaN(d)){\n\t\t\t\treturn new copts.Date(y,m-1,d);\n\t\t\t} else {\n\t\t\t\treturn new copts.Date();\n\t\t\t}\n\t\t},\n\t\t\n\t\tonSelect:function(date){}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.draggable.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * draggable - EasyUI for jQuery\n * \n */\n(function($){\n\tfunction drag(e){\n\t\tvar state = $.data(e.data.target, 'draggable');\n\t\tvar opts = state.options;\n\t\tvar proxy = state.proxy;\n\t\t\n\t\tvar dragData = e.data;\n\t\tvar left = dragData.startLeft + e.pageX - dragData.startX;\n\t\tvar top = dragData.startTop + e.pageY - dragData.startY;\n\t\t\n\t\tif (proxy){\n\t\t\tif (proxy.parent()[0] == document.body){\n\t\t\t\tif (opts.deltaX != null && opts.deltaX != undefined){\n\t\t\t\t\tleft = e.pageX + opts.deltaX;\n\t\t\t\t} else {\n\t\t\t\t\tleft = e.pageX - e.data.offsetWidth;\n\t\t\t\t}\n\t\t\t\tif (opts.deltaY != null && opts.deltaY != undefined){\n\t\t\t\t\ttop = e.pageY + opts.deltaY;\n\t\t\t\t} else {\n\t\t\t\t\ttop = e.pageY - e.data.offsetHeight;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (opts.deltaX != null && opts.deltaX != undefined){\n\t\t\t\t\tleft += e.data.offsetWidth + opts.deltaX;\n\t\t\t\t}\n\t\t\t\tif (opts.deltaY != null && opts.deltaY != undefined){\n\t\t\t\t\ttop += e.data.offsetHeight + opts.deltaY;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (e.data.parent != document.body) {\n\t\t\tleft += $(e.data.parent).scrollLeft();\n\t\t\ttop += $(e.data.parent).scrollTop();\n\t\t}\n\t\t\n\t\tif (opts.axis == 'h') {\n\t\t\tdragData.left = left;\n\t\t} else if (opts.axis == 'v') {\n\t\t\tdragData.top = top;\n\t\t} else {\n\t\t\tdragData.left = left;\n\t\t\tdragData.top = top;\n\t\t}\n\t}\n\t\n\tfunction applyDrag(e){\n\t\tvar state = $.data(e.data.target, 'draggable');\n\t\tvar opts = state.options;\n\t\tvar proxy = state.proxy;\n\t\tif (!proxy){\n\t\t\tproxy = $(e.data.target);\n\t\t}\n\t\tproxy.css({\n\t\t\tleft:e.data.left,\n\t\t\ttop:e.data.top\n\t\t});\n\t\t$('body').css('cursor', opts.cursor);\n\t}\n\t\n\tfunction doDown(e){\n\t\tif (!$.fn.draggable.isDragging){return false;}\n\t\t\n\t\tvar state = $.data(e.data.target, 'draggable');\n\t\tvar opts = state.options;\n\n\t\tvar droppables = $('.droppable:visible').filter(function(){\n\t\t\treturn e.data.target != this;\n\t\t}).filter(function(){\n\t\t\tvar accept = $.data(this, 'droppable').options.accept;\n\t\t\tif (accept){\n\t\t\t\treturn $(accept).filter(function(){\n\t\t\t\t\treturn this == e.data.target;\n\t\t\t\t}).length > 0;\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t\tstate.droppables = droppables;\n\t\t\n\t\tvar proxy = state.proxy;\n\t\tif (!proxy){\n\t\t\tif (opts.proxy){\n\t\t\t\tif (opts.proxy == 'clone'){\n\t\t\t\t\tproxy = $(e.data.target).clone().insertAfter(e.data.target);\n\t\t\t\t} else {\n\t\t\t\t\tproxy = opts.proxy.call(e.data.target, e.data.target);\n\t\t\t\t}\n\t\t\t\tstate.proxy = proxy;\n\t\t\t} else {\n\t\t\t\tproxy = $(e.data.target);\n\t\t\t}\n\t\t}\n\t\t\n\t\tproxy.css('position', 'absolute');\n\t\tdrag(e);\n\t\tapplyDrag(e);\n\t\t\n\t\topts.onStartDrag.call(e.data.target, e);\n\t\treturn false;\n\t}\n\t\n\tfunction doMove(e){\n\t\tif (!$.fn.draggable.isDragging){return false;}\n\t\t\n\t\tvar state = $.data(e.data.target, 'draggable');\n\t\tdrag(e);\n\t\tif (state.options.onDrag.call(e.data.target, e) != false){\n\t\t\tapplyDrag(e);\n\t\t}\n\t\t\n\t\tvar source = e.data.target;\n\t\tstate.droppables.each(function(){\n\t\t\tvar dropObj = $(this);\n\t\t\tif (dropObj.droppable('options').disabled){return;}\n\t\t\t\n\t\t\tvar p2 = dropObj.offset();\n\t\t\tif (e.pageX > p2.left && e.pageX < p2.left + dropObj.outerWidth()\n\t\t\t\t\t&& e.pageY > p2.top && e.pageY < p2.top + dropObj.outerHeight()){\n\t\t\t\tif (!this.entered){\n\t\t\t\t\t$(this).trigger('_dragenter', [source]);\n\t\t\t\t\tthis.entered = true;\n\t\t\t\t}\n\t\t\t\t$(this).trigger('_dragover', [source]);\n\t\t\t} else {\n\t\t\t\tif (this.entered){\n\t\t\t\t\t$(this).trigger('_dragleave', [source]);\n\t\t\t\t\tthis.entered = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn false;\n\t}\n\t\n\tfunction doUp(e){\n\t\tif (!$.fn.draggable.isDragging){\n\t\t\tclearDragging();\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tdoMove(e);\n\t\t\n\t\tvar state = $.data(e.data.target, 'draggable');\n\t\tvar proxy = state.proxy;\n\t\tvar opts = state.options;\n\t\topts.onEndDrag.call(e.data.target, e);\n\t\tif (opts.revert){\n\t\t\tif (checkDrop() == true){\n\t\t\t\t$(e.data.target).css({\n\t\t\t\t\tposition:e.data.startPosition,\n\t\t\t\t\tleft:e.data.startLeft,\n\t\t\t\t\ttop:e.data.startTop\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (proxy){\n\t\t\t\t\tvar left, top;\n\t\t\t\t\tif (proxy.parent()[0] == document.body){\n\t\t\t\t\t\tleft = e.data.startX - e.data.offsetWidth;\n\t\t\t\t\t\ttop = e.data.startY - e.data.offsetHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tleft = e.data.startLeft;\n\t\t\t\t\t\ttop = e.data.startTop;\n\t\t\t\t\t}\n\t\t\t\t\tproxy.animate({\n\t\t\t\t\t\tleft: left,\n\t\t\t\t\t\ttop: top\n\t\t\t\t\t}, function(){\n\t\t\t\t\t\tremoveProxy();\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t$(e.data.target).animate({\n\t\t\t\t\t\tleft:e.data.startLeft,\n\t\t\t\t\t\ttop:e.data.startTop\n\t\t\t\t\t}, function(){\n\t\t\t\t\t\t$(e.data.target).css('position', e.data.startPosition);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t$(e.data.target).css({\n\t\t\t\tposition:'absolute',\n\t\t\t\tleft:e.data.left,\n\t\t\t\ttop:e.data.top\n\t\t\t});\n\t\t\tcheckDrop();\n\t\t}\n\t\t\n\t\topts.onStopDrag.call(e.data.target, e);\n\t\t\n\t\tclearDragging();\n\t\t\n\t\tfunction removeProxy(){\n\t\t\tif (proxy){\n\t\t\t\tproxy.remove();\n\t\t\t}\n\t\t\tstate.proxy = null;\n\t\t}\n\t\t\n\t\tfunction checkDrop(){\n\t\t\tvar dropped = false;\n\t\t\tstate.droppables.each(function(){\n\t\t\t\tvar dropObj = $(this);\n\t\t\t\tif (dropObj.droppable('options').disabled){return;}\n\t\t\t\t\n\t\t\t\tvar p2 = dropObj.offset();\n\t\t\t\tif (e.pageX > p2.left && e.pageX < p2.left + dropObj.outerWidth()\n\t\t\t\t\t\t&& e.pageY > p2.top && e.pageY < p2.top + dropObj.outerHeight()){\n\t\t\t\t\tif (opts.revert){\n\t\t\t\t\t\t$(e.data.target).css({\n\t\t\t\t\t\t\tposition:e.data.startPosition,\n\t\t\t\t\t\t\tleft:e.data.startLeft,\n\t\t\t\t\t\t\ttop:e.data.startTop\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$(this).triggerHandler('_drop', [e.data.target]);\n\t\t\t\t\tremoveProxy();\n\t\t\t\t\tdropped = true;\n\t\t\t\t\tthis.entered = false;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!dropped && !opts.revert){\n\t\t\t\tremoveProxy();\n\t\t\t}\n\t\t\treturn dropped;\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tfunction clearDragging(){\n\t\tif ($.fn.draggable.timer){\n\t\t\tclearTimeout($.fn.draggable.timer);\n\t\t\t$.fn.draggable.timer = undefined;\n\t\t}\n\t\t$(document)._unbind('.draggable');\n\t\t$.fn.draggable.isDragging = false;\n\t\tsetTimeout(function(){\n\t\t\t$('body').css('cursor','');\n\t\t},100);\n\t}\n\t\n\t$.fn.draggable = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\treturn $.fn.draggable.methods[options](this, param);\n\t\t}\n\t\t\n\t\treturn this.each(function(){\n\t\t\tvar opts;\n\t\t\tvar state = $.data(this, 'draggable');\n\t\t\tif (state) {\n\t\t\t\tstate.handle._unbind('.draggable');\n\t\t\t\topts = $.extend(state.options, options);\n\t\t\t} else {\n\t\t\t\topts = $.extend({}, $.fn.draggable.defaults, $.fn.draggable.parseOptions(this), options || {});\n\t\t\t}\n\t\t\tvar handle = opts.handle ? (typeof opts.handle=='string' ? $(opts.handle, this) : opts.handle) : $(this);\n\t\t\t\n\t\t\t$.data(this, 'draggable', {\n\t\t\t\toptions: opts,\n\t\t\t\thandle: handle\n\t\t\t});\n\t\t\t\n\t\t\tif (opts.disabled) {\n\t\t\t\t$(this).css('cursor', '');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\thandle._unbind('.draggable')._bind('mousemove.draggable', {target:this}, function(e){\n\t\t\t\tif ($.fn.draggable.isDragging){return}\n\t\t\t\tvar opts = $.data(e.data.target, 'draggable').options;\n\t\t\t\tif (checkArea(e)){\n\t\t\t\t\t$(this).css('cursor', opts.cursor);\n\t\t\t\t} else {\n\t\t\t\t\t$(this).css('cursor', '');\n\t\t\t\t}\n\t\t\t})._bind('mouseleave.draggable', {target:this}, function(e){\n\t\t\t\t$(this).css('cursor', '');\n\t\t\t})._bind('mousedown.draggable', {target:this}, function(e){\n\t\t\t\tif (checkArea(e) == false) return;\n\t\t\t\t$(this).css('cursor', '');\n\n\t\t\t\tvar position = $(e.data.target).position();\n\t\t\t\tvar offset = $(e.data.target).offset();\n\t\t\t\tvar data = {\n\t\t\t\t\tstartPosition: $(e.data.target).css('position'),\n\t\t\t\t\tstartLeft: position.left,\n\t\t\t\t\tstartTop: position.top,\n\t\t\t\t\tleft: position.left,\n\t\t\t\t\ttop: position.top,\n\t\t\t\t\tstartX: e.pageX,\n\t\t\t\t\tstartY: e.pageY,\n\t\t\t\t\twidth: $(e.data.target).outerWidth(),\n\t\t\t\t\theight: $(e.data.target).outerHeight(),\n\t\t\t\t\toffsetWidth: (e.pageX - offset.left),\n\t\t\t\t\toffsetHeight: (e.pageY - offset.top),\n\t\t\t\t\ttarget: e.data.target,\n\t\t\t\t\tparent: $(e.data.target).parent()[0]\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t$.extend(e.data, data);\n\t\t\t\tvar opts = $.data(e.data.target, 'draggable').options;\n\t\t\t\tif (opts.onBeforeDrag.call(e.data.target, e) == false) return;\n\t\t\t\t\n\t\t\t\t$(document)._bind('mousedown.draggable', e.data, doDown);\n\t\t\t\t$(document)._bind('mousemove.draggable', e.data, doMove);\n\t\t\t\t$(document)._bind('mouseup.draggable', e.data, doUp);\n\t\t\t\t\n\t\t\t\t$.fn.draggable.timer = setTimeout(function(){\n\t\t\t\t\t$.fn.draggable.isDragging = true;\n\t\t\t\t\tdoDown(e);\n\t\t\t\t}, opts.delay);\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\t\n\t\t\t// check if the handle can be dragged\n\t\t\tfunction checkArea(e) {\n\t\t\t\tvar state = $.data(e.data.target, 'draggable');\n\t\t\t\tvar handle = state.handle;\n\t\t\t\tvar offset = $(handle).offset();\n\t\t\t\tvar width = $(handle).outerWidth();\n\t\t\t\tvar height = $(handle).outerHeight();\n\t\t\t\tvar t = e.pageY - offset.top;\n\t\t\t\tvar r = offset.left + width - e.pageX;\n\t\t\t\tvar b = offset.top + height - e.pageY;\n\t\t\t\tvar l = e.pageX - offset.left;\n\t\t\t\t\n\t\t\t\treturn Math.min(t,r,b,l) > state.options.edge;\n\t\t\t}\n\t\t\t\n\t\t});\n\t};\n\t\n\t$.fn.draggable.methods = {\n\t\toptions: function(jq){\n\t\t\treturn $.data(jq[0], 'draggable').options;\n\t\t},\n\t\tproxy: function(jq){\n\t\t\treturn $.data(jq[0], 'draggable').proxy;\n\t\t},\n\t\tenable: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$(this).draggable({disabled:false});\n\t\t\t});\n\t\t},\n\t\tdisable: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$(this).draggable({disabled:true});\n\t\t\t});\n\t\t}\n\t};\n\t\n\t$.fn.draggable.parseOptions = function(target){\n\t\tvar t = $(target);\n\t\treturn $.extend({}, \n\t\t\t\t$.parser.parseOptions(target, ['cursor','handle','axis',\n\t\t\t\t       {'revert':'boolean','deltaX':'number','deltaY':'number','edge':'number','delay':'number'}]), {\n\t\t\tdisabled: (t.attr('disabled') ? true : undefined)\n\t\t});\n\t};\n\t\n\t$.fn.draggable.defaults = {\n\t\tproxy:null,\t// 'clone' or a function that will create the proxy object, \n\t\t\t\t\t// the function has the source parameter that indicate the source object dragged.\n\t\trevert:false,\n\t\tcursor:'move',\n\t\tdeltaX:null,\n\t\tdeltaY:null,\n\t\thandle: null,\n\t\tdisabled: false,\n\t\tedge:0,\n\t\taxis:null,\t// v or h\n\t\tdelay:100,\n\t\t\n\t\tonBeforeDrag: function(e){},\n\t\tonStartDrag: function(e){},\n\t\tonDrag: function(e){},\n\t\tonEndDrag: function(e){},\n\t\tonStopDrag: function(e){}\n\t};\n\t\n\t$.fn.draggable.isDragging = false;\n\t\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.droppable.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * droppable - EasyUI for jQuery\n * \n */\n(function($){\n\tfunction init(target){\n\t\t$(target).addClass('droppable');\n\t\t$(target)._bind('_dragenter', function(e, source){\n\t\t\t$.data(target, 'droppable').options.onDragEnter.apply(target, [e, source]);\n\t\t});\n\t\t$(target)._bind('_dragleave', function(e, source){\n\t\t\t$.data(target, 'droppable').options.onDragLeave.apply(target, [e, source]);\n\t\t});\n\t\t$(target)._bind('_dragover', function(e, source){\n\t\t\t$.data(target, 'droppable').options.onDragOver.apply(target, [e, source]);\n\t\t});\n\t\t$(target)._bind('_drop', function(e, source){\n\t\t\t$.data(target, 'droppable').options.onDrop.apply(target, [e, source]);\n\t\t});\n\t}\n\t\n\t$.fn.droppable = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\treturn $.fn.droppable.methods[options](this, param);\n\t\t}\n\t\t\n\t\toptions = options || {};\n\t\treturn this.each(function(){\n\t\t\tvar state = $.data(this, 'droppable');\n\t\t\tif (state){\n\t\t\t\t$.extend(state.options, options);\n\t\t\t} else {\n\t\t\t\tinit(this);\n\t\t\t\t$.data(this, 'droppable', {\n\t\t\t\t\toptions: $.extend({}, $.fn.droppable.defaults, $.fn.droppable.parseOptions(this), options)\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\t\n\t$.fn.droppable.methods = {\n\t\toptions: function(jq){\n\t\t\treturn $.data(jq[0], 'droppable').options;\n\t\t},\n\t\tenable: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$(this).droppable({disabled:false});\n\t\t\t});\n\t\t},\n\t\tdisable: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$(this).droppable({disabled:true});\n\t\t\t});\n\t\t}\n\t};\n\t\n\t$.fn.droppable.parseOptions = function(target){\n\t\tvar t = $(target);\n\t\treturn $.extend({},\t$.parser.parseOptions(target, ['accept']), {\n\t\t\tdisabled: (t.attr('disabled') ? true : undefined)\n\t\t});\n\t};\n\t\n\t$.fn.droppable.defaults = {\n\t\taccept:null,\n\t\tdisabled:false,\n\t\tonDragEnter:function(e, source){},\n\t\tonDragOver:function(e, source){},\n\t\tonDragLeave:function(e, source){},\n\t\tonDrop:function(e, source){}\n\t};\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.form.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * form - EasyUI for jQuery\n * \n */\n(function($){\n\t/**\n\t * submit the form\n\t */\n\tfunction ajaxSubmit(target, options){\n\t\tvar opts = $.data(target, 'form').options;\n\t\t$.extend(opts, options||{});\n\t\t\n\t\tvar param = $.extend({}, opts.queryParams);\n\t\tif (opts.onSubmit.call(target, param) == false){return;}\n\n\t\t// $(target).find('.textbox-text:focus').blur();\n\t\tvar input = $(target).find('.textbox-text:focus');\n\t\tinput.triggerHandler('blur');\n\t\tinput.focus();\n\n\t\tvar disabledFields = null;\t// the fields to be disabled\n\t\tif (opts.dirty){\n\t\t\tvar ff = [];\t// all the dirty fields\n\t\t\t$.map(opts.dirtyFields, function(f){\n\t\t\t\tif ($(f).hasClass('textbox-f')){\n\t\t\t\t\t$(f).next().find('.textbox-value').each(function(){\n\t\t\t\t\t\tff.push(this);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tff.push(f);\n\t\t\t\t}\n\t\t\t});\n\t\t\tdisabledFields = $(target).find('input[name]:enabled,textarea[name]:enabled,select[name]:enabled').filter(function(){\n\t\t\t\treturn $.inArray(this, ff) == -1;\n\t\t\t});\n\t\t\t// disabledFields.attr('disabled', 'disabled');\n\t\t\tdisabledFields._propAttr('disabled', true);\n\t\t}\n\n\t\tif (opts.ajax){\n\t\t\tif (opts.iframe){\n\t\t\t\tsubmitIframe(target, param);\n\t\t\t} else {\n\t\t\t\tif (window.FormData !== undefined){\n\t\t\t\t\tsubmitXhr(target, param);\n\t\t\t\t} else {\n\t\t\t\t\tsubmitIframe(target, param);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t$(target).submit();\n\t\t}\n\n\t\tif (opts.dirty){\n\t\t\t// disabledFields.removeAttr('disabled');\n\t\t\tdisabledFields._propAttr('disabled', false);\n\t\t}\n\t}\n\n\tfunction submitIframe(target, param){\n\t\tvar opts = $.data(target, 'form').options;\n\t\tvar frameId = 'easyui_frame_' + (new Date().getTime());\n\t\tvar frame = $('<iframe id='+frameId+' name='+frameId+'></iframe>').appendTo('body')\n\t\tframe.attr('src', window.ActiveXObject ? 'javascript:false' : 'about:blank');\n\t\tframe.css({\n\t\t\tposition:'absolute',\n\t\t\ttop:-1000,\n\t\t\tleft:-1000\n\t\t});\n\t\tframe.bind('load', cb);\n\t\t\n\t\tsubmit(param);\n\t\t\n\t\tfunction submit(param){\n\t\t\tvar form = $(target);\n\t\t\tif (opts.url){\n\t\t\t\tform.attr('action', opts.url);\n\t\t\t}\n\t\t\tvar t = form.attr('target'), a = form.attr('action');\n\t\t\tform.attr('target', frameId);\n\t\t\tvar paramFields = $();\n\t\t\ttry {\n\t\t\t\tfor(var n in param){\n\t\t\t\t\tvar field = $('<input type=\"hidden\" name=\"' + n + '\">').val(param[n]).appendTo(form);\n\t\t\t\t\tparamFields = paramFields.add(field);\n\t\t\t\t}\n\t\t\t\tcheckState();\n\t\t\t\tform[0].submit();\n\t\t\t} finally {\n\t\t\t\tform.attr('action', a);\n\t\t\t\tt ? form.attr('target', t) : form.removeAttr('target');\n\t\t\t\tparamFields.remove();\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction checkState(){\n\t\t\tvar f = $('#'+frameId);\n\t\t\tif (!f.length){return}\n\t\t\ttry{\n\t\t\t\tvar s = f.contents()[0].readyState;\n\t\t\t\tif (s && s.toLowerCase() == 'uninitialized'){\n\t\t\t\t\tsetTimeout(checkState, 100);\n\t\t\t\t}\n\t\t\t} catch(e){\n\t\t\t\tcb();\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar checkCount = 10;\n\t\tfunction cb(){\n\t\t\tvar f = $('#'+frameId);\n\t\t\tif (!f.length){return}\n\t\t\tf.unbind();\n\t\t\tvar data = '';\n\t\t\ttry{\n\t\t\t\tvar body = f.contents().find('body');\n\t\t\t\tdata = body.html();\n\t\t\t\tif (data == ''){\n\t\t\t\t\tif (--checkCount){\n\t\t\t\t\t\tsetTimeout(cb, 100);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar ta = body.find('>textarea');\n\t\t\t\tif (ta.length){\n\t\t\t\t\tdata = ta.val();\n\t\t\t\t} else {\n\t\t\t\t\tvar pre = body.find('>pre');\n\t\t\t\t\tif (pre.length){\n\t\t\t\t\t\tdata = pre.html();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch(e){\n\t\t\t}\n\t\t\topts.success.call(target, data);\n\t\t\tsetTimeout(function(){\n\t\t\t\tf.unbind();\n\t\t\t\tf.remove();\n\t\t\t}, 100);\n\t\t}\n\t}\n\n\tfunction submitXhr(target, param){\n\t\tvar opts = $.data(target, 'form').options;\n\t\tvar formData = new FormData($(target)[0]);\n\t\tfor(var name in param){\n\t\t\tformData.append(name, param[name]);\n\t\t}\n\t\t$.ajax({\n\t\t\turl: opts.url,\n\t\t\ttype: 'post',\n\t\t\txhr: function(){\n\t\t\t\tvar xhr = $.ajaxSettings.xhr();\n\t\t\t\tif (xhr.upload) {\n\t\t\t\t\txhr.upload.addEventListener('progress', function(e){\n\t\t\t\t\t\tif (e.lengthComputable) {\n\t\t\t\t\t\t\tvar total = e.total;\n\t\t\t\t\t\t\tvar position = e.loaded || e.position;\n\t\t\t\t\t\t\tvar percent = Math.ceil(position * 100 / total);\n\t\t\t\t\t\t\topts.onProgress.call(target, percent);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false);\n\t\t\t\t}\n\t\t\t\treturn xhr;\n\t\t\t},\n\t\t\tdata: formData,\n\t\t\tdataType: 'html',\n\t\t\tcache: false,\n\t\t\tcontentType: false,\n\t\t\tprocessData: false,\n\t\t\tcomplete: function(res){\n\t\t\t\topts.success.call(target, res.responseText);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t\n\t/**\n\t * load form data\n\t * if data is a URL string type load from remote site, \n\t * otherwise load from local data object. \n\t */\n\tfunction load(target, data){\n\t\tvar opts = $.data(target, 'form').options;\n\t\t\n\t\tif (typeof data == 'string'){\n\t\t\tvar param = {};\n\t\t\tif (opts.onBeforeLoad.call(target, param) == false) return;\n\t\t\t\n\t\t\t$.ajax({\n\t\t\t\turl: data,\n\t\t\t\tdata: param,\n\t\t\t\tdataType: 'json',\n\t\t\t\tsuccess: function(data){\n\t\t\t\t\t_load(data);\n\t\t\t\t},\n\t\t\t\terror: function(){\n\t\t\t\t\topts.onLoadError.apply(target, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t_load(data);\n\t\t}\n\t\t\n\t\tfunction _load(data){\n\t\t\tvar form = $(target);\n\t\t\tfor(var name in data){\n\t\t\t\tvar val = data[name];\n\t\t\t\tif (!_checkField(name, val)){\n\t\t\t\t\tif (!_loadBox(name, val)){\n\t\t\t\t\t\tform.find('input[name=\"'+name+'\"]').val(val);\n\t\t\t\t\t\tform.find('textarea[name=\"'+name+'\"]').val(val);\n\t\t\t\t\t\tform.find('select[name=\"'+name+'\"]').val(val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\topts.onLoadSuccess.call(target, data);\n\t\t\tform.form('validate');\n\t\t}\n\t\t\n\t\t/**\n\t\t * check the checkbox and radio fields\n\t\t */\n\t\tfunction _checkField(name, val){\n\t\t\tvar plugins = ['switchbutton','radiobutton','checkbox'];\n\t\t\tfor(var i=0; i<plugins.length; i++){\n\t\t\t\tvar plugin = plugins[i];\n\t\t\t\tvar cc = $(target).find('['+plugin+'Name=\"'+name+'\"]');\n\t\t\t\tif (cc.length){\n\t\t\t\t\tcc[plugin]('uncheck');\n\t\t\t\t\tcc.each(function(){\n\t\t\t\t\t\tif (_isChecked($(this)[plugin]('options').value, val)){\n\t\t\t\t\t\t\t$(this)[plugin]('check');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar cc = $(target).find('input[name=\"'+name+'\"][type=radio], input[name=\"'+name+'\"][type=checkbox]');\n\t\t\tif (cc.length){\n\t\t\t\tcc._propAttr('checked', false);\n\t\t\t\tcc.each(function(){\n\t\t\t\t\tif (_isChecked($(this).val(), val)){\n\t\t\t\t\t\t$(this)._propAttr('checked', true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tfunction _isChecked(v, val){\n\t\t\tif (v == String(val) || $.inArray(v, $.isArray(val)?val:[val]) >= 0){\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction _loadBox(name, val){\n\t\t\tvar field = $(target).find('[textboxName=\"'+name+'\"],[sliderName=\"'+name+'\"]');\n\t\t\tif (field.length){\n\t\t\t\tfor(var i=0; i<opts.fieldTypes.length; i++){\n\t\t\t\t\tvar type = opts.fieldTypes[i];\n\t\t\t\t\tvar state = field.data(type);\n\t\t\t\t\tif (state){\n\t\t\t\t\t\tif (state.options.multiple || state.options.range){\n\t\t\t\t\t\t\tfield[type]('setValues', val);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfield[type]('setValue', val);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t/**\n\t * clear the form fields\n\t */\n\tfunction clear(target){\n\t\t$('input,select,textarea', target).each(function(){\n\t\t\tif ($(this).hasClass('textbox-value')){return;}\n\t\t\tvar t = this.type, tag = this.tagName.toLowerCase();\n\t\t\tif (t == 'text' || t == 'hidden' || t == 'password' || tag == 'textarea'){\n\t\t\t\tthis.value = '';\n\t\t\t} else if (t == 'file'){\n\t\t\t\tvar file = $(this);\n\t\t\t\tif (!file.hasClass('textbox-value')){\n\t\t\t\t\tvar newfile = file.clone().val('');\n\t\t\t\t\tnewfile.insertAfter(file);\n\t\t\t\t\tif (file.data('validatebox')){\n\t\t\t\t\t\tfile.validatebox('destroy');\n\t\t\t\t\t\tnewfile.validatebox();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfile.remove();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (t == 'checkbox' || t == 'radio'){\n\t\t\t\tthis.checked = false;\n\t\t\t} else if (tag == 'select'){\n\t\t\t\tthis.selectedIndex = -1;\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\tvar tmp = $();\n\t\tvar form = $(target);\n\t\tvar opts = $.data(target, 'form').options;\n\t\tfor(var i=0; i<opts.fieldTypes.length; i++){\n\t\t\tvar type = opts.fieldTypes[i];\n\t\t\tvar field = form.find('.'+type+'-f').not(tmp);\n\t\t\tif (field.length && field[type]){\n\t\t\t\tfield[type]('clear');\n\t\t\t\ttmp = tmp.add(field);\n\t\t\t}\n\t\t}\n\t\tform.form('validate');\n\t}\n\t\n\tfunction reset(target){\n\t\ttarget.reset();\n\t\tvar form = $(target);\n\t\tvar opts = $.data(target, 'form').options;\n\t\tfor(var i=opts.fieldTypes.length-1; i>=0; i--){\n\t\t\tvar type = opts.fieldTypes[i];\n\t\t\tvar field = form.find('.'+type+'-f');\n\t\t\tif (field.length && field[type]){\n\t\t\t\tfield[type]('reset');\n\t\t\t}\n\t\t}\n\t\tform.form('validate');\n\t}\n\t\n\t/**\n\t * set the form to make it can submit with ajax.\n\t */\n\tfunction setForm(target){\n\t\tvar options = $.data(target, 'form').options;\n\t\t$(target).unbind('.form');\n\t\tif (options.ajax){\n\t\t\t$(target).bind('submit.form', function(){\n\t\t\t\tsetTimeout(function(){\n\t\t\t\t\tajaxSubmit(target, options);\n\t\t\t\t}, 0);\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t\t$(target).bind('_change.form', function(e, t){\n\t\t\tif ($.inArray(t, options.dirtyFields) == -1){\n\t\t\t\toptions.dirtyFields.push(t);\n\t\t\t}\n\t\t\toptions.onChange.call(this, t);\n\t\t}).bind('change.form', function(e){\n\t\t\tvar t = e.target;\n\t\t\tif (!$(t).hasClass('textbox-text')){\n\t\t\t\tif ($.inArray(t, options.dirtyFields) == -1){\n\t\t\t\t\toptions.dirtyFields.push(t);\n\t\t\t\t}\n\t\t\t\toptions.onChange.call(this, t);\n\t\t\t}\n\t\t});\n\t\tsetValidation(target, options.novalidate);\n\t}\n\t\n\tfunction initForm(target, options){\n\t\toptions = options || {};\n\t\tvar state = $.data(target, 'form');\n\t\tif (state){\n\t\t\t$.extend(state.options, options);\n\t\t} else {\n\t\t\t$.data(target, 'form', {\n\t\t\t\toptions: $.extend({}, $.fn.form.defaults, $.fn.form.parseOptions(target), options)\n\t\t\t});\n\t\t}\n\t}\n\t\n\tfunction validate(target){\n\t\tif ($.fn.validatebox){\n\t\t\tvar t = $(target);\n\t\t\tt.find('.validatebox-text:not(:disabled)').validatebox('validate');\n\t\t\tvar invalidbox = t.find('.validatebox-invalid');\n\t\t\tinvalidbox.filter(':not(:disabled):first').focus();\n\t\t\treturn invalidbox.length == 0;\n\t\t}\n\t\treturn true;\n\t}\n\t\n\tfunction setValidation(target, novalidate){\n\t\tvar opts = $.data(target, 'form').options;\n\t\topts.novalidate = novalidate;\n\t\t$(target).find('.validatebox-text:not(:disabled)').validatebox(novalidate ? 'disableValidation' : 'enableValidation');\n\t}\n\t\n\t$.fn.form = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\tthis.each(function(){\n\t\t\t\tinitForm(this);\n\t\t\t});\n\t\t\treturn $.fn.form.methods[options](this, param);\n\t\t}\n\t\t\n\t\treturn this.each(function(){\n\t\t\tinitForm(this, options);\n\t\t\tsetForm(this);\n\t\t});\n\t};\n\t\n\t$.fn.form.methods = {\n\t\toptions: function(jq){\n\t\t\treturn $.data(jq[0], 'form').options;\n\t\t},\n\t\tsubmit: function(jq, options){\n\t\t\treturn jq.each(function(){\n\t\t\t\tajaxSubmit(this, options);\n\t\t\t});\n\t\t},\n\t\tload: function(jq, data){\n\t\t\treturn jq.each(function(){\n\t\t\t\tload(this, data);\n\t\t\t});\n\t\t},\n\t\tclear: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tclear(this);\n\t\t\t});\n\t\t},\n\t\treset: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\treset(this);\n\t\t\t});\n\t\t},\n\t\tvalidate: function(jq){\n\t\t\treturn validate(jq[0]);\n\t\t},\n\t\tdisableValidation: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetValidation(this, true);\n\t\t\t});\n\t\t},\n\t\tenableValidation: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetValidation(this, false);\n\t\t\t});\n\t\t},\n\t\tresetValidation: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$(this).find('.validatebox-text:not(:disabled)').validatebox('resetValidation');\n\t\t\t});\n\t\t},\n\t\tresetDirty: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$(this).form('options').dirtyFields = [];\n\t\t\t});\n\t\t}\n\t};\n\t\n\t$.fn.form.parseOptions = function(target){\n\t\tvar t = $(target);\n\t\treturn $.extend({}, $.parser.parseOptions(target, [\n\t\t\t{ajax:'boolean',dirty:'boolean'}\n\t\t]), {\n\t\t\turl: (t.attr('action') ? t.attr('action') : undefined)\n\t\t});\n\t};\n\t\n\t$.fn.form.defaults = {\n\t\tfieldTypes: ['tagbox','combobox','combotree','combogrid','combotreegrid','datetimebox','datebox','timepicker','combo',\n\t\t        'datetimespinner','timespinner','numberspinner','spinner',\n\t\t        'slider','searchbox','numberbox','passwordbox','filebox','textbox','switchbutton','radiobutton','checkbox'],\n\t\tnovalidate: false,\n\t\tajax: true,\n\t\tiframe: true,\n\t\tdirty: false,\n\t\tdirtyFields: [],\n\t\turl: null,\n\t\tqueryParams: {},\n\t\tonSubmit: function(param){return $(this).form('validate');},\n\t\tonProgress: function(percent){},\n\t\tsuccess: function(data){},\n\t\tonBeforeLoad: function(param){},\n\t\tonLoadSuccess: function(data){},\n\t\tonLoadError: function(){},\n\t\tonChange: function(target){}\n\t};\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.linkbutton.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * linkbutton - EasyUI for jQuery\n * \n */\n(function($){\n\tfunction setSize(target, param){\n\t\tvar opts = $.data(target, 'linkbutton').options;\n\t\tif (param){\n\t\t\t$.extend(opts, param);\n\t\t}\n\t\tif (opts.width || opts.height || opts.fit){\n\t\t\tvar btn = $(target);\n\t\t\tvar parent = btn.parent();\n\t\t\tvar isVisible = btn.is(':visible');\n\t\t\tif (!isVisible){\n\t\t\t\tvar spacer = $('<div style=\"display:none\"></div>').insertBefore(target);\n\t\t\t\tvar style = {\n\t\t\t\t\tposition: btn.css('position'),\n\t\t\t\t\tdisplay: btn.css('display'),\n\t\t\t\t\tleft: btn.css('left')\n\t\t\t\t};\n\t\t\t\tbtn.appendTo('body');\n\t\t\t\tbtn.css({\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tdisplay: 'inline-block',\n\t\t\t\t\tleft: -20000\n\t\t\t\t});\n\t\t\t}\n\t\t\tbtn._size(opts, parent);\n\t\t\tvar left = btn.find('.l-btn-left');\n\t\t\tleft.css('margin-top', 0);\n\t\t\tleft.css('margin-top', parseInt((btn.height()-left.height())/2)+'px');\n\t\t\tif (!isVisible){\n\t\t\t\tbtn.insertAfter(spacer);\n\t\t\t\tbtn.css(style);\n\t\t\t\tspacer.remove();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction createButton(target) {\n\t\tvar opts = $.data(target, 'linkbutton').options;\n\t\tvar t = $(target).empty();\n\t\t\n\t\tt.addClass('l-btn').removeClass('l-btn-plain l-btn-selected l-btn-plain-selected l-btn-outline');\n\t\tt.removeClass('l-btn-small l-btn-medium l-btn-large').addClass('l-btn-'+opts.size);\n\t\tif (opts.plain){t.addClass('l-btn-plain')}\n\t\tif (opts.outline){t.addClass('l-btn-outline')}\n\t\tif (opts.selected){\n\t\t\tt.addClass(opts.plain ? 'l-btn-selected l-btn-plain-selected' : 'l-btn-selected');\n\t\t}\n\t\tt.attr('group', opts.group || '');\n\t\tt.attr('id', opts.id || '');\n\t\t\n\t\tvar inner = $('<span class=\"l-btn-left\"></span>').appendTo(t);\n\t\tif (opts.text){\n\t\t\t$('<span class=\"l-btn-text\"></span>').html(opts.text).appendTo(inner);\n\t\t} else {\n\t\t\t$('<span class=\"l-btn-text l-btn-empty\">&nbsp;</span>').appendTo(inner);\n\t\t}\n\t\tif (opts.iconCls){\n\t\t\t$('<span class=\"l-btn-icon\">&nbsp;</span>').addClass(opts.iconCls).appendTo(inner);\n\t\t\tinner.addClass('l-btn-icon-'+opts.iconAlign);\n\t\t}\n\t\t\n\t\tt._unbind('.linkbutton')._bind('focus.linkbutton',function(){\n\t\t\tif (!opts.disabled){\n\t\t\t\t$(this).addClass('l-btn-focus');\n\t\t\t}\n\t\t})._bind('blur.linkbutton',function(){\n\t\t\t$(this).removeClass('l-btn-focus');\n\t\t})._bind('click.linkbutton',function(){\n\t\t\tif (!opts.disabled){\n\t\t\t\tif (opts.toggle){\n\t\t\t\t\tif (opts.selected){\n\t\t\t\t\t\t$(this).linkbutton('unselect');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(this).linkbutton('select');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\topts.onClick.call(this);\n\t\t\t}\n//\t\t\treturn false;\n\t\t});\n\t\t\n\t\tsetSelected(target, opts.selected)\n\t\tsetDisabled(target, opts.disabled);\n\t}\n\t\n\tfunction setSelected(target, selected){\n\t\tvar opts = $.data(target, 'linkbutton').options;\n\t\tif (selected){\n\t\t\tif (opts.group){\n\t\t\t\t$('a.l-btn[group=\"'+opts.group+'\"]').each(function(){\n\t\t\t\t\tvar o = $(this).linkbutton('options');\n\t\t\t\t\tif (o.toggle){\n\t\t\t\t\t\t$(this).removeClass('l-btn-selected l-btn-plain-selected');\n\t\t\t\t\t\to.selected = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t$(target).addClass(opts.plain ? 'l-btn-selected l-btn-plain-selected' : 'l-btn-selected');\n\t\t\topts.selected = true;\n\t\t} else {\n\t\t\tif (!opts.group){\n\t\t\t\t$(target).removeClass('l-btn-selected l-btn-plain-selected');\n\t\t\t\topts.selected = false;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction setDisabled(target, disabled){\n\t\tvar state = $.data(target, 'linkbutton');\n\t\tvar opts = state.options;\n\t\t$(target).removeClass('l-btn-disabled l-btn-plain-disabled');\n\t\tif (disabled){\n\t\t\topts.disabled = true;\n\t\t\tvar href = $(target).attr('href');\n\t\t\tif (href){\n\t\t\t\tstate.href = href;\n\t\t\t\t$(target).attr('href', 'javascript:;');\n\t\t\t}\n\t\t\tif (target.onclick){\n\t\t\t\tstate.onclick = target.onclick;\n\t\t\t\ttarget.onclick = null;\n\t\t\t}\n\t\t\topts.plain ? $(target).addClass('l-btn-disabled l-btn-plain-disabled') : $(target).addClass('l-btn-disabled');\n\t\t} else {\n\t\t\topts.disabled = false;\n\t\t\tif (state.href) {\n\t\t\t\t$(target).attr('href', state.href);\n\t\t\t}\n\t\t\tif (state.onclick) {\n\t\t\t\ttarget.onclick = state.onclick;\n\t\t\t}\n\t\t}\n\t\t$(target)._propAttr('disabled', disabled);\n\t}\n\t\n\t$.fn.linkbutton = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\treturn $.fn.linkbutton.methods[options](this, param);\n\t\t}\n\t\t\n\t\toptions = options || {};\n\t\treturn this.each(function(){\n\t\t\tvar state = $.data(this, 'linkbutton');\n\t\t\tif (state){\n\t\t\t\t$.extend(state.options, options);\n\t\t\t} else {\n\t\t\t\t$.data(this, 'linkbutton', {\n\t\t\t\t\toptions: $.extend({}, $.fn.linkbutton.defaults, $.fn.linkbutton.parseOptions(this), options)\n\t\t\t\t});\n\t\t\t\t// $(this).removeAttr('disabled');\n\t\t\t\t$(this)._propAttr('disabled', false);\n\t\t\t\t$(this)._bind('_resize', function(e, force){\n\t\t\t\t\tif ($(this).hasClass('easyui-fluid') || force){\n\t\t\t\t\t\tsetSize(this);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tcreateButton(this);\n\t\t\tsetSize(this);\n\t\t});\n\t};\n\t\n\t$.fn.linkbutton.methods = {\n\t\toptions: function(jq){\n\t\t\treturn $.data(jq[0], 'linkbutton').options;\n\t\t},\n\t\tresize: function(jq, param){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetSize(this, param);\n\t\t\t});\n\t\t},\n\t\tenable: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetDisabled(this, false);\n\t\t\t});\n\t\t},\n\t\tdisable: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetDisabled(this, true);\n\t\t\t});\n\t\t},\n\t\tselect: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetSelected(this, true);\n\t\t\t});\n\t\t},\n\t\tunselect: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetSelected(this, false);\n\t\t\t});\n\t\t}\n\t};\n\t\n\t$.fn.linkbutton.parseOptions = function(target){\n\t\tvar t = $(target);\n\t\treturn $.extend({}, $.parser.parseOptions(target, \n\t\t\t['id','iconCls','iconAlign','group','size','text',{plain:'boolean',toggle:'boolean',selected:'boolean',outline:'boolean'}]\n\t\t), {\n\t\t\tdisabled: (t.attr('disabled') ? true : undefined),\n\t\t\ttext: ($.trim(t.html()) || undefined),\n\t\t\ticonCls: (t.attr('icon') || t.attr('iconCls'))\n\t\t});\n\t};\n\t\n\t$.fn.linkbutton.defaults = {\n\t\tid: null,\n\t\tdisabled: false,\n\t\ttoggle: false,\n\t\tselected: false,\n\t\toutline: false,\n\t\tgroup: null,\n\t\tplain: false,\n\t\ttext: '',\n\t\ticonCls: null,\n\t\ticonAlign: 'left',\n\t\tsize: 'small',\t// small,large\n\t\tonClick: function(){}\n\t};\n\t\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.menu.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * menu - EasyUI for jQuery\n * \n */\n(function($){\n\t$(function(){\n\t\t$(document)._unbind('.menu')._bind('mousedown.menu', function(e){\n\t\t\tvar m = $(e.target).closest('div.menu,div.combo-p');\n\t\t\tif (m.length){return}\n\t\t\t$('body>div.menu-top:visible').not('.menu-inline').menu('hide');\n\t\t\thideMenu($('body>div.menu:visible').not('.menu-inline'));\n\t\t});\n\t});\n\t\n\t/**\n\t * initialize the target menu, the function can be invoked only once\n\t */\n\tfunction init(target){\n\t\tvar opts = $.data(target, 'menu').options;\n\t\t$(target).addClass('menu-top');\t// the top menu\n\t\topts.inline ? $(target).addClass('menu-inline') : $(target).appendTo('body');\n\t\t$(target)._bind('_resize', function(e, force){\n\t\t\tif ($(this).hasClass('easyui-fluid') || force){\n\t\t\t\t$(target).menu('resize', target);\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\t\n\t\tvar menus = splitMenu($(target));\n\t\tfor(var i=0; i<menus.length; i++){\n\t\t\tcreateMenu(target, menus[i]);\n\t\t}\n\t\t\n\t\tfunction splitMenu(menu){\n\t\t\tvar menus = [];\n\t\t\tmenu.addClass('menu');\n\t\t\tmenus.push(menu);\n\t\t\tif (!menu.hasClass('menu-content')){\n\t\t\t\tmenu.children('div').each(function(){\n\t\t\t\t\tvar submenu = $(this).children('div');\n\t\t\t\t\tif (submenu.length){\n\t\t\t\t\t\tsubmenu.appendTo('body');\n\t\t\t\t\t\tthis.submenu = submenu;\t\t// point to the sub menu\n\t\t\t\t\t\tvar mm = splitMenu(submenu);\n\t\t\t\t\t\tmenus = menus.concat(mm);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn menus;\n\t\t}\n\t}\n\n\tfunction createMenu(target, div){\n\t\tvar menu = $(div).addClass('menu');\n\t\tif (!menu.data('menu')){\n\t\t\tmenu.data('menu', {\n\t\t\t\toptions: $.parser.parseOptions(menu[0], ['width','height'])\n\t\t\t});\n\t\t}\n\t\tif (!menu.hasClass('menu-content')){\n\t\t\tmenu.children('div').each(function(){\n\t\t\t\tcreateItem(target, this);\n\t\t\t});\n\t\t\t$('<div class=\"menu-line\"></div>').prependTo(menu);\n\t\t}\n\t\tsetMenuSize(target, menu);\n\t\tif (!menu.hasClass('menu-inline')){\n\t\t\tmenu.hide();\n\t\t}\n\t\tbindMenuEvent(target, menu);\n\t}\n\n\t/**\n\t * create the menu item\n\t */\n\tfunction createItem(target, div, options){\n\t\tvar item = $(div);\n\t\tvar itemOpts = $.extend({}, $.parser.parseOptions(item[0], ['id','name','iconCls','href',{separator:'boolean'}]), {\n\t\t\tdisabled: (item.attr('disabled') ? true : undefined),\n\t\t\ttext: $.trim(item.html()),\n\t\t\tonclick: item[0].onclick\n\t\t}, options||{});\n\t\titemOpts.onclick = itemOpts.onclick || itemOpts.handler || null;\n\t\titem.data('menuitem', {\n\t\t\toptions: itemOpts\n\t\t});\n\t\tif (itemOpts.separator){\n\t\t\titem.addClass('menu-sep');\n\t\t}\n\t\tif (!item.hasClass('menu-sep')){\n\t\t\titem.addClass('menu-item');\n\t\t\titem.empty().append($('<div class=\"menu-text\"></div>').html(itemOpts.text));\n\t\t\tif (itemOpts.iconCls){\n\t\t\t\t$('<div class=\"menu-icon\"></div>').addClass(itemOpts.iconCls).appendTo(item);\n\t\t\t}\n\t\t\tif (itemOpts.id){\n\t\t\t\titem.attr('id', itemOpts.id);\n\t\t\t}\n\t\t\tif (itemOpts.onclick){\n\t\t\t\tif (typeof itemOpts.onclick == 'string'){\n\t\t\t\t\titem.attr('onclick', itemOpts.onclick);\n\t\t\t\t} else {\n\t\t\t\t\titem[0].onclick = eval(itemOpts.onclick);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (itemOpts.disabled){\n\t\t\t\tsetDisabled(target, item[0], true);\n\t\t\t}\n\t\t\tif (item[0].submenu){\n\t\t\t\t$('<div class=\"menu-rightarrow\"></div>').appendTo(item);\t// has sub menu\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction setMenuSize(target, menu){\n\t\tvar opts = $.data(target, 'menu').options;\n\t\tvar style = menu.attr('style') || '';\n\t\tvar isVisible = menu.is(':visible');\n\t\tmenu.css({\n\t\t\tdisplay: 'block',\n\t\t\tleft: -10000,\n\t\t\theight: 'auto',\n\t\t\toverflow: 'hidden'\n\t\t});\n\t\tmenu.find('.menu-item').each(function(){\n\t\t\t$(this)._outerHeight(opts.itemHeight);\n\t\t\t$(this).find('.menu-text').css({\n\t\t\t\theight: (opts.itemHeight-2)+'px',\n\t\t\t\tlineHeight: (opts.itemHeight-2)+'px'\n\t\t\t});\n\t\t});\n\t\tmenu.removeClass('menu-noline').addClass(opts.noline?'menu-noline':'');\n\t\t\n\t\tvar mopts = menu.data('menu').options;\n\t\tvar width = mopts.width;\n\t\tvar height = mopts.height;\n\t\tif (isNaN(parseInt(width))){\n\t\t\twidth = 0;\n\t\t\tmenu.find('div.menu-text').each(function(){\n\t\t\t\tif (width < $(this).outerWidth()){\n\t\t\t\t\twidth = $(this).outerWidth();\n\t\t\t\t}\n\t\t\t});\n\t\t\t// width += 40;\n\t\t\twidth = width ? width+40 : '';\n\t\t}\n\t\tvar autoHeight = menu.outerHeight();\n\t\tif (isNaN(parseInt(height))){\n\t\t\theight = autoHeight;\n\t\t\tif (menu.hasClass('menu-top') && opts.alignTo){\n\t\t\t\tvar at = $(opts.alignTo);\n\t\t\t\tvar h1 = at.offset().top - $(document).scrollTop();\n\t\t\t\tvar h2 = $(window)._outerHeight() + $(document).scrollTop() - at.offset().top - at._outerHeight();\n\t\t\t\theight = Math.min(height, Math.max(h1, h2));\n\t\t\t} else if (height > $(window)._outerHeight()){\n\t\t\t\theight = $(window).height();\n\t\t\t}\n\t\t}\n\n\t\tmenu.attr('style', style);\t// restore the original style\n\t\tmenu.show();\n\t\tmenu._size($.extend({}, mopts, {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tminWidth: mopts.minWidth || opts.minWidth,\n\t\t\tmaxWidth: mopts.maxWidth || opts.maxWidth\n\t\t}));\n\t\tmenu.find('.easyui-fluid').triggerHandler('_resize', [true]);\n\t\tmenu.css('overflow', menu.outerHeight() < autoHeight ? 'auto' : 'hidden');\n\t\tmenu.children('div.menu-line')._outerHeight(autoHeight-2);\n\t\tif (!isVisible){\n\t\t\tmenu.hide();\n\t\t}\n\t}\n\t\n\t/**\n\t * bind menu event\n\t */\n\tfunction bindMenuEvent(target, menu){\n\t\tvar state = $.data(target, 'menu');\n\t\tvar opts = state.options;\n\t\tmenu._unbind('.menu');\n\t\tfor(var event in opts.events){\n\t\t\tmenu._bind(event+'.menu', {target:target}, opts.events[event]);\n\t\t}\n\t}\n\tfunction mouseenterHandler(e){\n\t\tvar target = e.data.target;\n\t\tvar state = $.data(target, 'menu');\n\t\tif (state.timer){\n\t\t\tclearTimeout(state.timer);\n\t\t\tstate.timer = null;\n\t\t}\n\t}\n\tfunction mouseleaveHandler(e){\n\t\tvar target = e.data.target;\n\t\tvar state = $.data(target, 'menu');\n\t\tif (state.options.hideOnUnhover){\n\t\t\tstate.timer = setTimeout(function(){\n\t\t\t\thideAll(target, $(target).hasClass('menu-inline'));\n\t\t\t}, state.options.duration);\n\t\t}\n\t}\n\tfunction mouseoverHandler(e){\n\t\tvar target = e.data.target;\n\t\tvar item = $(e.target).closest('.menu-item');\n\t\tif (item.length){\n\t\t\titem.siblings().each(function(){\n\t\t\t\tif (this.submenu){\n\t\t\t\t\thideMenu(this.submenu);\n\t\t\t\t}\n\t\t\t\t$(this).removeClass('menu-active');\n\t\t\t});\n\t\t\t// show this menu\n\t\t\titem.addClass('menu-active');\n\t\t\t\n\t\t\tif (item.hasClass('menu-item-disabled')){\n\t\t\t\titem.addClass('menu-active-disabled');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tvar submenu = item[0].submenu;\n\t\t\tif (submenu){\n\t\t\t\t$(target).menu('show', {\n\t\t\t\t\tmenu: submenu,\n\t\t\t\t\tparent: item\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tfunction mouseoutHandler(e){\n\t\tvar item = $(e.target).closest('.menu-item');\n\t\tif (item.length){\n\t\t\titem.removeClass('menu-active menu-active-disabled');\n\t\t\tvar submenu = item[0].submenu;\n\t\t\tif (submenu){\n\t\t\t\tif (e.pageX>=parseInt(submenu.css('left'))){\n\t\t\t\t\titem.addClass('menu-active');\n\t\t\t\t} else {\n\t\t\t\t\thideMenu(submenu);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem.removeClass('menu-active');\n\t\t\t}\n\t\t}\n\t}\n\tfunction clickHandler(e){\n\t\tvar target = e.data.target;\n\t\tvar item = $(e.target).closest('.menu-item');\n\t\tif (item.length){\n\t\t\tvar opts = $(target).data('menu').options;\n\t\t\tvar itemOpts = item.data('menuitem').options;\n\t\t\tif (itemOpts.disabled){return;}\n\t\t\tif (!item[0].submenu){\n\t\t\t\thideAll(target, opts.inline);\n\t\t\t\tif (itemOpts.href){\n\t\t\t\t\tlocation.href = itemOpts.href;\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.trigger('mouseenter');\n\t\t\topts.onClick.call(target, $(target).menu('getItem', item[0]));\n\t\t}\n\t}\n\t\n\t/**\n\t * hide top menu and it's all sub menus\n\t */\n\tfunction hideAll(target, inline){\n\t\tvar state = $.data(target, 'menu');\n\t\tif (state){\n\t\t\tif ($(target).is(':visible')){\n\t\t\t\thideMenu($(target));\n\t\t\t\tif (inline){\n\t\t\t\t\t$(target).show();\n\t\t\t\t} else {\n\t\t\t\t\tstate.options.onHide.call(target);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\t\n\t/**\n\t * show the menu, the 'param' object has one or more properties:\n\t * left: the left position to display\n\t * top: the top position to display\n\t * menu: the menu to display, if not defined, the 'target menu' is used\n\t * parent: the parent menu item to align to\n\t * alignTo: the element object to align to\n\t */\n\tfunction showMenu(target, param){\n\t\tparam = param || {};\n\t\tvar left,top;\n\t\tvar opts = $.data(target, 'menu').options;\n\t\tvar menu = $(param.menu || target);\n\t\t$(target).menu('resize', menu[0]);\n\t\tif (menu.hasClass('menu-top')){\n\t\t\t$.extend(opts, param);\n\t\t\tleft = opts.left;\n\t\t\ttop = opts.top;\n\t\t\tif (opts.alignTo){\n\t\t\t\tvar at = $(opts.alignTo);\n\t\t\t\tleft = at.offset().left;\n\t\t\t\ttop = at.offset().top + at._outerHeight();\n\t\t\t\tif (opts.align == 'right'){\n\t\t\t\t\tleft += at.outerWidth() - menu.outerWidth();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (left + menu.outerWidth() > $(window)._outerWidth() + $(document)._scrollLeft()){\n\t\t\t\tleft = $(window)._outerWidth() + $(document).scrollLeft() - menu.outerWidth() - 5;\n\t\t\t}\n\t\t\tif (left < 0){left = 0;}\n\t\t\ttop = _fixTop(top, opts.alignTo);\n\t\t} else {\n\t\t\tvar parent = param.parent;\t// the parent menu item\n\t\t\tleft = parent.offset().left + parent.outerWidth() - 2;\n\t\t\tif (left + menu.outerWidth() + 5 > $(window)._outerWidth() + $(document).scrollLeft()){\n\t\t\t\tleft = parent.offset().left - menu.outerWidth() + 2;\n\t\t\t}\n\t\t\ttop = _fixTop(parent.offset().top - 3);\n\t\t}\n\t\t\n\t\tfunction _fixTop(top, alignTo){\n\t\t\tif (top + menu.outerHeight() > $(window)._outerHeight() + $(document).scrollTop()){\n\t\t\t\tif (alignTo){\n\t\t\t\t\ttop = $(alignTo).offset().top - menu._outerHeight();\n\t\t\t\t} else {\n\t\t\t\t\ttop = $(window)._outerHeight() + $(document).scrollTop() - menu.outerHeight();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (top < 0){top = 0;}\n\t\t\treturn top;\n\t\t}\n\t\t\n\t\tmenu.css(opts.position.call(target, menu[0], left, top));\n\t\tmenu.show(0, function(){\n\t\t\tif (!menu[0].shadow){\n\t\t\t\tmenu[0].shadow = $('<div class=\"menu-shadow\"></div>').insertAfter(menu);\n\t\t\t}\n\t\t\tmenu[0].shadow.css({\n\t\t\t\tdisplay:(menu.hasClass('menu-inline')?'none':'block'),\n\t\t\t\tzIndex:$.fn.menu.defaults.zIndex++,\n\t\t\t\tleft:menu.css('left'),\n\t\t\t\ttop:menu.css('top'),\n\t\t\t\twidth:menu.outerWidth(),\n\t\t\t\theight:menu.outerHeight()\n\t\t\t});\n\t\t\tmenu.css('z-index', $.fn.menu.defaults.zIndex++);\n\t\t\tif (menu.hasClass('menu-top')){\n\t\t\t\topts.onShow.call(target);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tfunction hideMenu(menu){\n\t\tif (menu && menu.length){\n\t\t\thideit(menu);\n\t\t\tmenu.find('div.menu-item').each(function(){\n\t\t\t\tif (this.submenu){\n\t\t\t\t\thideMenu(this.submenu);\n\t\t\t\t}\n\t\t\t\t$(this).removeClass('menu-active');\n\t\t\t});\n\t\t}\n\t\t\n\t\tfunction hideit(m){\n\t\t\tm.stop(true,true);\n\t\t\tif (m[0].shadow){\n\t\t\t\tm[0].shadow.hide();\n\t\t\t}\n\t\t\tm.hide();\n\t\t}\n\t}\n\t\n\tfunction findItem(target, param){\n\t\tvar result = null;\n\t\tvar fn = $.isFunction(param) ? param : function(item){\n\t\t\tfor(var p in param){\n\t\t\t\tif (item[p] != param[p]){\n\t\t\t\t\treturn false;;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction find(menu){\n\t\t\tmenu.children('div.menu-item').each(function(){\n\t\t\t\tvar opts = $(this).data('menuitem').options;\n\t\t\t\tif (fn.call(target, opts) == true){\n\t\t\t\t\tresult = $(target).menu('getItem', this);\n\t\t\t\t} else if (this.submenu && !result){\n\t\t\t\t\tfind(this.submenu);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfind($(target));\n\t\treturn result;\n\t}\n\t\n\tfunction setDisabled(target, itemEl, disabled){\n\t\tvar t = $(itemEl);\n\t\tif (t.hasClass('menu-item')){\n\t\t\tvar opts = t.data('menuitem').options;\n\t\t\topts.disabled = disabled;\n\t\t\tif (disabled){\n\t\t\t\tt.addClass('menu-item-disabled');\n\t\t\t\tt[0].onclick = null;\n\t\t\t} else {\n\t\t\t\tt.removeClass('menu-item-disabled');\n\t\t\t\tt[0].onclick = opts.onclick;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction appendItem(target, param){\n\t\tvar opts = $.data(target, 'menu').options;\n\t\tvar menu = $(target);\n\t\tif (param.parent){\n\t\t\tif (!param.parent.submenu){\n\t\t\t\tvar submenu = $('<div></div>').appendTo('body');\n\t\t\t\tparam.parent.submenu = submenu;\n\t\t\t\t$('<div class=\"menu-rightarrow\"></div>').appendTo(param.parent);\n\t\t\t\tcreateMenu(target, submenu);\n\t\t\t}\n\t\t\tmenu = param.parent.submenu;\n\t\t}\n\t\tvar div = $('<div></div>').appendTo(menu);\n\t\tcreateItem(target, div, param);\n\t}\n\t\n\tfunction removeItem(target, itemEl){\n\t\tfunction removeit(el){\n\t\t\tif (el.submenu){\n\t\t\t\tel.submenu.children('div.menu-item').each(function(){\n\t\t\t\t\tremoveit(this);\n\t\t\t\t});\n\t\t\t\tvar shadow = el.submenu[0].shadow;\n\t\t\t\tif (shadow) shadow.remove();\n\t\t\t\tel.submenu.remove();\n\t\t\t}\n\t\t\t$(el).remove();\n\t\t}\n\t\tremoveit(itemEl);\n\t}\n\t\n\tfunction setVisible(target, itemEl, visible){\n\t\tvar menu = $(itemEl).parent();\n\t\tif (visible){\n\t\t\t$(itemEl).show();\n\t\t} else {\n\t\t\t$(itemEl).hide();\n\t\t}\n\t\tsetMenuSize(target, menu);\n\t}\n\t\n\tfunction destroyMenu(target){\n\t\t$(target).children('div.menu-item').each(function(){\n\t\t\tremoveItem(target, this);\n\t\t});\n\t\tif (target.shadow) target.shadow.remove();\n\t\t$(target).remove();\n\t}\n\t\n\t$.fn.menu = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\treturn $.fn.menu.methods[options](this, param);\n\t\t}\n\t\t\n\t\toptions = options || {};\n\t\treturn this.each(function(){\n\t\t\tvar state = $.data(this, 'menu');\n\t\t\tif (state){\n\t\t\t\t$.extend(state.options, options);\n\t\t\t} else {\n\t\t\t\tstate = $.data(this, 'menu', {\n\t\t\t\t\toptions: $.extend({}, $.fn.menu.defaults, $.fn.menu.parseOptions(this), options)\n\t\t\t\t});\n\t\t\t\tinit(this);\n\t\t\t}\n\t\t\t$(this).css({\n\t\t\t\tleft: state.options.left,\n\t\t\t\ttop: state.options.top\n\t\t\t});\n\t\t});\n\t};\n\t\n\t$.fn.menu.methods = {\n\t\toptions: function(jq){\n\t\t\treturn $.data(jq[0], 'menu').options;\n\t\t},\n\t\tshow: function(jq, pos){\n\t\t\treturn jq.each(function(){\n\t\t\t\tshowMenu(this, pos);\n\t\t\t});\n\t\t},\n\t\thide: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\thideAll(this);\n\t\t\t});\n\t\t},\n\t\tdestroy: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tdestroyMenu(this);\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t * set the menu item text\n\t\t * param: {\n\t\t * \ttarget: DOM object, indicate the menu item\n\t\t * \ttext: string, the new text\n\t\t * }\n\t\t */\n\t\tsetText: function(jq, param){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar item = $(param.target).data('menuitem').options;\n\t\t\t\titem.text = param.text;\n\t\t\t\t$(param.target).children('div.menu-text').html(param.text);\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t * set the menu icon class\n\t\t * param: {\n\t\t * \ttarget: DOM object, indicate the menu item\n\t\t * \ticonCls: the menu item icon class\n\t\t * }\n\t\t */\n\t\tsetIcon: function(jq, param){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar item = $(param.target).data('menuitem').options;\n\t\t\t\titem.iconCls = param.iconCls;\n\t\t\t\t$(param.target).children('div.menu-icon').remove();\n\t\t\t\tif (param.iconCls){\n\t\t\t\t\t$('<div class=\"menu-icon\"></div>').addClass(param.iconCls).appendTo(param.target);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t * get the menu item data that contains the following property:\n\t\t * {\n\t\t * \ttarget: DOM object, the menu item\n\t\t *  id: the menu id\n\t\t * \ttext: the menu item text\n\t\t * \ticonCls: the icon class\n\t\t *  href: a remote address to redirect to\n\t\t *  onclick: a function to be called when the item is clicked\n\t\t * }\n\t\t */\n\t\tgetItem: function(jq, itemEl){\n\t\t\tvar item = $(itemEl).data('menuitem').options;\n\t\t\treturn $.extend({}, item, {\n\t\t\t\ttarget: $(itemEl)[0]\n\t\t\t});\n\t\t},\n\t\tfindItem: function(jq, text){\n\t\t\tif (typeof text == 'string'){\n\t\t\t\treturn findItem(jq[0], function(item){\n\t\t\t\t\treturn $('<div>'+item.text+'</div>').text() == text;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn findItem(jq[0], text);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * append menu item, the param contains following properties:\n\t\t * parent,id,text,iconCls,href,onclick\n\t\t * when parent property is assigned, append menu item to it\n\t\t */\n\t\tappendItem: function(jq, param){\n\t\t\treturn jq.each(function(){\n\t\t\t\tappendItem(this, param);\n\t\t\t});\n\t\t},\n\t\tremoveItem: function(jq, itemEl){\n\t\t\treturn jq.each(function(){\n\t\t\t\tremoveItem(this, itemEl);\n\t\t\t});\n\t\t},\n\t\tenableItem: function(jq, itemEl){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetDisabled(this, itemEl, false);\n\t\t\t});\n\t\t},\n\t\tdisableItem: function(jq, itemEl){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetDisabled(this, itemEl, true);\n\t\t\t});\n\t\t},\n\t\tshowItem: function(jq, itemEl){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetVisible(this, itemEl, true);\n\t\t\t});\n\t\t},\n\t\thideItem: function(jq, itemEl){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetVisible(this, itemEl, false);\n\t\t\t});\n\t\t},\n\t\tresize: function(jq, menuEl){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetMenuSize(this, menuEl ? $(menuEl) : $(this));\n\t\t\t});\n\t\t}\n\t};\n\t\n\t$.fn.menu.parseOptions = function(target){\n\t\treturn $.extend({}, $.parser.parseOptions(target, [\n\t\t     {minWidth:'number',itemHeight:'number',duration:'number',hideOnUnhover:'boolean'},\n\t\t     {fit:'boolean',inline:'boolean',noline:'boolean'}\n\t\t]));\n\t};\n\t\n\t$.fn.menu.defaults = {\n\t\tzIndex:110000,\n\t\tleft: 0,\n\t\ttop: 0,\n\t\talignTo: null,\n\t\talign: 'left',\n\t\tminWidth: 150,\n\t\t// itemHeight: 22,\n\t\titemHeight: 32,\n\t\tduration: 100,\t// Defines duration time in milliseconds to hide when the mouse leaves the menu.\n\t\thideOnUnhover: true,\t// Automatically hides the menu when mouse exits it\n\t\tinline: false,\t// true to stay inside its parent, false to go on top of all elements\n\t\tfit: false,\n\t\tnoline: false,\n\t\tevents: {\n\t\t\tmouseenter: mouseenterHandler,\n\t\t\tmouseleave: mouseleaveHandler,\n\t\t\tmouseover: mouseoverHandler,\n\t\t\tmouseout: mouseoutHandler,\n\t\t\tclick: clickHandler\n\t\t},\n\t\tposition: function(target, left, top){\n\t\t\treturn {left:left,top:top}\n\t\t},\n\t\tonShow: function(){},\n\t\tonHide: function(){},\n\t\tonClick: function(item){}\n\t};\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.parser.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * parser - EasyUI for jQuery\n * \n */\n\n(function($){\n\t$.easyui = {\n\t\t/**\n\t\t * Get the index of array item, return -1 when the item is not found.\n\t\t */\n\t\tindexOfArray: function(a, o, id){\n\t\t\tfor(var i=0,len=a.length; i<len; i++){\n\t\t\t\tif (id == undefined){\n\t\t\t\t\tif (a[i] == o){return i;}\n\t\t\t\t} else {\n\t\t\t\t\tif (a[i][o] == id){return i;}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\t\t/**\n\t\t * Remove array item, 'o' parameter can be item object or id field name.\n\t\t * When 'o' parameter is the id field name, the 'id' parameter is valid.\n\t\t */\n\t\tremoveArrayItem: function(a, o, id){\n\t\t\tif (typeof o == 'string'){\n\t\t\t\tfor(var i=0,len=a.length; i<len; i++){\n\t\t\t\t\tif (a[i][o] == id){\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar index = this.indexOfArray(a,o);\n\t\t\t\tif (index != -1){\n\t\t\t\t\ta.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Add un-duplicate array item, 'o' parameter is the id field name, if the 'r' object is exists, deny the action.\n\t\t */\n\t\taddArrayItem: function(a, o, r){\n\t\t\tvar index = this.indexOfArray(a, o, r ? r[o] : undefined);\n\t\t\tif (index == -1){\n\t\t\t\ta.push(r ? r : o);\n\t\t\t} else {\n\t\t\t\ta[index] = r ? r : o;\n\t\t\t}\n\t\t},\n\t\tgetArrayItem: function(a, o, id){\n\t\t\tvar index = this.indexOfArray(a, o, id);\n\t\t\treturn index==-1 ? null : a[index];\n\t\t},\n\t\tforEach: function(data, deep, callback){\n\t\t\tvar nodes = [];\n\t\t\tfor(var i=0; i<data.length; i++){\n\t\t\t\tnodes.push(data[i]);\n\t\t\t}\n\t\t\twhile(nodes.length){\n\t\t\t\tvar node = nodes.shift();\n\t\t\t\tif (callback(node) == false){return;}\n\t\t\t\tif (deep && node.children){\n\t\t\t\t\tfor(var i=node.children.length-1; i>=0; i--){\n\t\t\t\t\t\tnodes.unshift(node.children[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$.parser = {\n\t\tauto: true,\n\t\temptyFn: function(){},\n\t\tonComplete: function(context){},\n\t\tplugins:['draggable','droppable','resizable','pagination','tooltip',\n\t\t         'linkbutton','menu','sidemenu','menubutton','splitbutton','switchbutton','progressbar','radiobutton','checkbox',\n\t\t\t\t 'tree','textbox','passwordbox','maskedbox','filebox','combo','combobox','combotree','combogrid','combotreegrid','tagbox','numberbox','validatebox','searchbox',\n\t\t\t\t 'spinner','numberspinner','timespinner','datetimespinner','calendar','datebox','datetimebox','timepicker','slider',\n\t\t\t\t 'layout','panel','datagrid','propertygrid','treegrid','datalist','tabs','accordion','window','dialog','form'\n\t\t],\n\t\tparse: function(context){\n\t\t\tvar aa = [];\n\t\t\tfor(var i=0; i<$.parser.plugins.length; i++){\n\t\t\t\tvar name = $.parser.plugins[i];\n\t\t\t\tvar r = $('.easyui-' + name, context);\n\t\t\t\tif (r.length){\n\t\t\t\t\tif (r[name]){\n\t\t\t\t\t\tr.each(function(){\n\t\t\t\t\t\t\t$(this)[name]($.data(this, 'options')||{});\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\taa.push({name:name,jq:r});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (aa.length && window.easyloader){\n\t\t\t\tvar names = [];\n\t\t\t\tfor(var i=0; i<aa.length; i++){\n\t\t\t\t\tnames.push(aa[i].name);\n\t\t\t\t}\n\t\t\t\teasyloader.load(names, function(){\n\t\t\t\t\tfor(var i=0; i<aa.length; i++){\n\t\t\t\t\t\tvar name = aa[i].name;\n\t\t\t\t\t\tvar jq = aa[i].jq;\n\t\t\t\t\t\tjq.each(function(){\n\t\t\t\t\t\t\t$(this)[name]($.data(this, 'options')||{});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$.parser.onComplete.call($.parser, context);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t$.parser.onComplete.call($.parser, context);\n\t\t\t}\n\t\t},\n\t\t\n\t\tparseValue: function(property, value, parent, delta){\n\t\t\tdelta = delta || 0;\n\t\t\tvar v = $.trim(String(value||''));\n\t\t\tvar endchar = v.substr(v.length-1, 1);\n\t\t\tif (endchar == '%'){\n\t\t\t\tv = parseFloat(v.substr(0, v.length-1));\n\t\t\t\tif (property.toLowerCase().indexOf('width') >= 0){\n\t\t\t\t\tdelta += parent[0].offsetWidth-parent[0].clientWidth;\n\t\t\t\t\tv = Math.floor((parent.width()-delta) * v / 100.0);\n\t\t\t\t} else {\n\t\t\t\t\tdelta += parent[0].offsetHeight-parent[0].clientHeight;\n\t\t\t\t\tv = Math.floor((parent.height()-delta) * v / 100.0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tv = parseInt(v) || undefined;\n\t\t\t}\n\t\t\treturn v;\n\t\t},\n\t\t\n\t\t/**\n\t\t * parse options, including standard 'data-options' attribute.\n\t\t * \n\t\t * calling examples:\n\t\t * $.parser.parseOptions(target);\n\t\t * $.parser.parseOptions(target, ['id','title','width',{fit:'boolean',border:'boolean'},{min:'number'}]);\n\t\t */\n\t\tparseOptions: function(target, properties){\n\t\t\tvar t = $(target);\n\t\t\tvar options = {};\n\t\t\t\n\t\t\tvar s = $.trim(t.attr('data-options'));\n\t\t\tif (s){\n\t\t\t\tif (s.substring(0, 1) != '{'){\n\t\t\t\t\ts = '{' + s + '}';\n\t\t\t\t}\n\t\t\t\toptions = (new Function('return ' + s))();\n\t\t\t}\n\t\t\t$.map(['width','height','left','top','minWidth','maxWidth','minHeight','maxHeight'], function(p){\n\t\t\t\tvar pv = $.trim(target.style[p] || '');\n\t\t\t\tif (pv){\n\t\t\t\t\tif (pv.indexOf('%') == -1){\n\t\t\t\t\t\tpv = parseInt(pv);\n\t\t\t\t\t\tif (isNaN(pv)){\n\t\t\t\t\t\t\tpv = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\toptions[p] = pv;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\t\n\t\t\tif (properties){\n\t\t\t\tvar opts = {};\n\t\t\t\tfor(var i=0; i<properties.length; i++){\n\t\t\t\t\tvar pp = properties[i];\n\t\t\t\t\tif (typeof pp == 'string'){\n\t\t\t\t\t\topts[pp] = t.attr(pp);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor(var name in pp){\n\t\t\t\t\t\t\tvar type = pp[name];\n\t\t\t\t\t\t\tif (type == 'boolean'){\n\t\t\t\t\t\t\t\topts[name] = t.attr(name) ? (t.attr(name) == 'true') : undefined;\n\t\t\t\t\t\t\t} else if (type == 'number'){\n\t\t\t\t\t\t\t\topts[name] = t.attr(name)=='0' ? 0 : parseFloat(t.attr(name)) || undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$.extend(options, opts);\n\t\t\t}\n\t\t\treturn options;\n\t\t},\n\t\tparseVars: function(){\n\t\t\tvar d = $('<div style=\"position:absolute;top:-1000px;width:100px;height:100px;padding:5px\"></div>').appendTo('body');\n\t\t\t$._boxModel = d.outerWidth()!=100;\n\t\t\td.remove();\n\t\t\td = $('<div style=\"position:fixed\"></div>').appendTo('body');\n\t\t\t$._positionFixed = (d.css('position') == 'fixed');\n\t\t\td.remove();\n\t\t}\n\t};\n\t$(function(){\n\t\t$.parser.parseVars();\n\t\tif (!window.easyloader && $.parser.auto){\n\t\t\t$.parser.parse();\n\t\t}\n\t});\n\t\n\t/**\n\t * extend plugin to set box model width\n\t */\n\t$.fn._outerWidth = function(width){\n\t\tif (width == undefined){\n\t\t\tif (this[0] == window){\n\t\t\t\treturn this.width() || document.body.clientWidth;\n\t\t\t}\n\t\t\treturn this.outerWidth()||0;\n\t\t}\n\t\treturn this._size('width', width);\n\t};\n\t\n\t/**\n\t * extend plugin to set box model height\n\t */\n\t$.fn._outerHeight = function(height){\n\t\tif (height == undefined){\n\t\t\tif (this[0] == window){\n\t\t\t\treturn this.height() || document.body.clientHeight;\n\t\t\t}\n\t\t\treturn this.outerHeight()||0;\n\t\t}\n\t\treturn this._size('height', height);\n\t};\n\t\n\t$.fn._scrollLeft = function(left){\n\t\tif (left == undefined){\n\t\t\treturn this.scrollLeft();\n\t\t} else {\n\t\t\treturn this.each(function(){$(this).scrollLeft(left)});\n\t\t}\n\t};\n\t\n\t$.fn._propAttr = $.fn.prop || $.fn.attr;\n\t$.fn._bind = $.fn.on;\n\t$.fn._unbind = $.fn.off;\n\t\n\t$.fn._size = function(options, parent){\n\t\tif (typeof options == 'string'){\n\t\t\tif (options == 'clear'){\n\t\t\t\treturn this.each(function(){\n\t\t\t\t\t$(this).css({width:'',minWidth:'',maxWidth:'',height:'',minHeight:'',maxHeight:''});\n\t\t\t\t});\n\t\t\t} else if (options == 'fit'){\n\t\t\t\treturn this.each(function(){\n\t\t\t\t\t_fit(this, this.tagName=='BODY' ? $('body') : $(this).parent(), true);\n\t\t\t\t});\n\t\t\t} else if (options == 'unfit'){\n\t\t\t\treturn this.each(function(){\n\t\t\t\t\t_fit(this, $(this).parent(), false);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (parent == undefined){\n\t\t\t\t\treturn _css(this[0], options);\n\t\t\t\t} else {\n\t\t\t\t\treturn this.each(function(){\n\t\t\t\t\t\t_css(this, options, parent);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.each(function(){\n\t\t\t\tparent = parent || $(this).parent();\n\t\t\t\t$.extend(options, _fit(this, parent, options.fit)||{});\n\t\t\t\tvar r1 = _setSize(this, 'width', parent, options);\n\t\t\t\tvar r2 = _setSize(this, 'height', parent, options);\n\t\t\t\tif (r1 || r2){\n\t\t\t\t\t$(this).addClass('easyui-fluid');\n\t\t\t\t} else {\n\t\t\t\t\t$(this).removeClass('easyui-fluid');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tfunction _fit(target, parent, fit){\n\t\t\tif (!parent.length){return false;}\n\t\t\tvar t = $(target)[0];\n\t\t\tvar p = parent[0];\n\t\t\tvar fcount = p.fcount || 0;\n\t\t\tif (fit){\n\t\t\t\tif (!t.fitted){\n\t\t\t\t\tt.fitted = true;\n\t\t\t\t\tp.fcount = fcount + 1;\n\t\t\t\t\t$(p).addClass('panel-noscroll');\n\t\t\t\t\tif (p.tagName == 'BODY'){\n\t\t\t\t\t\t$('html').addClass('panel-fit');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\twidth: ($(p).width()||1),\n\t\t\t\t\theight: ($(p).height()||1)\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tif (t.fitted){\n\t\t\t\t\tt.fitted = false;\n\t\t\t\t\tp.fcount = fcount - 1;\n\t\t\t\t\tif (p.fcount == 0){\n\t\t\t\t\t\t$(p).removeClass('panel-noscroll');\n\t\t\t\t\t\tif (p.tagName == 'BODY'){\n\t\t\t\t\t\t\t$('html').removeClass('panel-fit');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tfunction _setSize(target, property, parent, options){\n\t\t\tvar t = $(target);\n\t\t\tvar p = property;\n\t\t\tvar p1 = p.substr(0,1).toUpperCase() + p.substr(1);\n\t\t\tvar min = $.parser.parseValue('min'+p1, options['min'+p1], parent);// || 0;\n\t\t\tvar max = $.parser.parseValue('max'+p1, options['max'+p1], parent);// || 99999;\n\t\t\tvar val = $.parser.parseValue(p, options[p], parent);\n\t\t\tvar fluid = (String(options[p]||'').indexOf('%') >= 0 ? true : false);\n\t\t\t\n\t\t\tif (!isNaN(val)){\n\t\t\t\tvar v = Math.min(Math.max(val, min||0), max||99999);\n\t\t\t\tif (!fluid){\n\t\t\t\t\toptions[p] = v;\n\t\t\t\t}\n\t\t\t\tt._size('min'+p1, '');\n\t\t\t\tt._size('max'+p1, '');\n\t\t\t\tt._size(p, v);\n\t\t\t} else {\n\t\t\t\tt._size(p, '');\n\t\t\t\tt._size('min'+p1, min);\n\t\t\t\tt._size('max'+p1, max);\n\t\t\t}\n\t\t\treturn fluid || options.fit;\n\t\t}\n\t\tfunction _css(target, property, value){\n\t\t\tvar t = $(target);\n\t\t\tif (value == undefined){\n\t\t\t\tvalue = parseInt(target.style[property]);\n\t\t\t\tif (isNaN(value)){return undefined;}\n\t\t\t\tif ($._boxModel){\n\t\t\t\t\tvalue += getDeltaSize();\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t} else if (value === ''){\n\t\t\t\tt.css(property, '');\n\t\t\t} else {\n\t\t\t\tif ($._boxModel){\n\t\t\t\t\tvalue -= getDeltaSize();\n\t\t\t\t\tif (value < 0){value = 0;}\n\t\t\t\t}\n\t\t\t\tt.css(property, value+'px');\n\t\t\t}\n\t\t\tfunction getDeltaSize(){\n\t\t\t\tif (property.toLowerCase().indexOf('width') >= 0){\n\t\t\t\t\treturn t.outerWidth() - t.width();\n\t\t\t\t} else {\n\t\t\t\t\treturn t.outerHeight() - t.height();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t\n})(jQuery);\n\n/**\n * support for mobile devices\n */\n(function($){\n\tvar longTouchTimer = null;\n\tvar dblTouchTimer = null;\n\tvar isDblClick = false;\n\t\n\tfunction onTouchStart(e){\n\t\tif (e.touches.length != 1){return}\n\t\tif (!isDblClick){\n\t\t\tisDblClick = true;\n\t\t\tdblClickTimer = setTimeout(function(){\n\t\t\t\tisDblClick = false;\n\t\t\t}, 500);\n\t\t} else {\n\t\t\tclearTimeout(dblClickTimer);\n\t\t\tisDblClick = false;\n\t\t\tfire(e, 'dblclick');\n//\t\t\te.preventDefault();\n\t\t}\n\t\tlongTouchTimer = setTimeout(function(){\n\t\t\tfire(e, 'contextmenu', 3);\n\t\t}, 1000);\n\t\tfire(e, 'mousedown');\n\t\tif ($.fn.draggable.isDragging || $.fn.resizable.isResizing){\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\tfunction onTouchMove(e){\n\t\tif (e.touches.length != 1){return}\n\t\tif (longTouchTimer){\n\t\t\tclearTimeout(longTouchTimer);\n\t\t}\n\t\tfire(e, 'mousemove');\n\t\tif ($.fn.draggable.isDragging || $.fn.resizable.isResizing){\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\tfunction onTouchEnd(e){\n//\t\tif (e.touches.length > 0){return}\n\t\tif (longTouchTimer){\n\t\t\tclearTimeout(longTouchTimer);\n\t\t}\n\t\tfire(e, 'mouseup');\n\t\tif ($.fn.draggable.isDragging || $.fn.resizable.isResizing){\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\tfunction fire(e, name, which){\n\t\tvar event = new $.Event(name);\n\t\tevent.pageX = e.changedTouches[0].pageX;\n\t\tevent.pageY = e.changedTouches[0].pageY;\n\t\tevent.which = which || 1;\n\t\t$(e.target).trigger(event);\n\t}\n\t\n\tif (document.addEventListener){\n\t\tdocument.addEventListener(\"touchstart\", onTouchStart, true);\n\t\tdocument.addEventListener(\"touchmove\", onTouchMove, true);\n\t\tdocument.addEventListener(\"touchend\", onTouchEnd, true);\n\t}\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.progressbar.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * progressbar - EasyUI for jQuery\n * \n * Dependencies:\n * \t none\n * \n */\n(function($){\n\tfunction init(target){\n\t\t$(target).addClass('progressbar');\n\t\t$(target).html('<div class=\"progressbar-text\"></div><div class=\"progressbar-value\"><div class=\"progressbar-text\"></div></div>');\n\t\t$(target)._bind('_resize', function(e,force){\n\t\t\tif ($(this).hasClass('easyui-fluid') || force){\n\t\t\t\tsetSize(target);\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\treturn $(target);\n\t}\n\t\n\tfunction setSize(target,width){\n\t\tvar opts = $.data(target, 'progressbar').options;\n\t\tvar bar = $.data(target, 'progressbar').bar;\n\t\tif (width) opts.width = width;\n\t\tbar._size(opts);\n\t\t\n\t\tbar.find('div.progressbar-text').css('width', bar.width());\n\t\tbar.find('div.progressbar-text,div.progressbar-value').css({\n\t\t\theight: bar.height()+'px',\n\t\t\tlineHeight: bar.height()+'px'\n\t\t});\n\t}\n\t\n\t$.fn.progressbar = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\tvar method = $.fn.progressbar.methods[options];\n\t\t\tif (method){\n\t\t\t\treturn method(this, param);\n\t\t\t}\n\t\t}\n\t\t\n\t\toptions = options || {};\n\t\treturn this.each(function(){\n\t\t\tvar state = $.data(this, 'progressbar');\n\t\t\tif (state){\n\t\t\t\t$.extend(state.options, options);\n\t\t\t} else {\n\t\t\t\tstate = $.data(this, 'progressbar', {\n\t\t\t\t\toptions: $.extend({}, $.fn.progressbar.defaults, $.fn.progressbar.parseOptions(this), options),\n\t\t\t\t\tbar: init(this)\n\t\t\t\t});\n\t\t\t}\n\t\t\t$(this).progressbar('setValue', state.options.value);\n\t\t\tsetSize(this);\n\t\t});\n\t};\n\t\n\t$.fn.progressbar.methods = {\n\t\toptions: function(jq){\n\t\t\treturn $.data(jq[0], 'progressbar').options;\n\t\t},\n\t\tresize: function(jq, width){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetSize(this, width);\n\t\t\t});\n\t\t},\n\t\tgetValue: function(jq){\n\t\t\treturn $.data(jq[0], 'progressbar').options.value;\n\t\t},\n\t\tsetValue: function(jq, value){\n\t\t\tif (value < 0) value = 0;\n\t\t\tif (value > 100) value = 100;\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar opts = $.data(this, 'progressbar').options;\n\t\t\t\tvar text = opts.text.replace(/{value}/, value);\n\t\t\t\tvar oldValue = opts.value;\n\t\t\t\topts.value = value;\n\t\t\t\t$(this).find('div.progressbar-value').width(value+'%');\n\t\t\t\t$(this).find('div.progressbar-text').html(text);\n\t\t\t\tif (oldValue != value){\n\t\t\t\t\topts.onChange.call(this, value, oldValue);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\t\n\t$.fn.progressbar.parseOptions = function(target){\n\t\treturn $.extend({}, $.parser.parseOptions(target, ['width','height','text',{value:'number'}]));\n\t};\n\t\n\t$.fn.progressbar.defaults = {\n\t\twidth: 'auto',\n\t\theight: 22,\n\t\tvalue: 0,\t// percentage value\n\t\ttext: '{value}%',\n\t\tonChange:function(newValue,oldValue){}\n\t};\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.propertygrid.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * propertygrid - EasyUI for jQuery\n * \n * Dependencies:\n * \t datagrid\n * \n */\n(function($){\n\tvar currTarget;\n\t$(document)._unbind('.propertygrid')._bind('mousedown.propertygrid', function(e){\n\t\tvar p = $(e.target).closest('div.datagrid-view,div.combo-panel');\n\t\tif (p.length){return;}\n\t\tstopEditing(currTarget);\n\t\tcurrTarget = undefined;\n\t});\n\t\n\tfunction buildGrid(target){\n\t\tvar state = $.data(target, 'propertygrid');\n\t\tvar opts = $.data(target, 'propertygrid').options;\n\t\t$(target).datagrid($.extend({}, opts, {\n\t\t\tcls:'propertygrid',\n\t\t\tview:(opts.showGroup ? opts.groupView : opts.view),\n\t\t\tonBeforeEdit:function(index, row){\n\t\t\t\tif (opts.onBeforeEdit.call(target, index, row) == false){return false;}\n\t\t\t\tvar dg = $(this);\n\t\t\t\tvar row = dg.datagrid('getRows')[index];\n\t\t\t\tvar col = dg.datagrid('getColumnOption', 'value');\n\t\t\t\tcol.editor = row.editor;\n\t\t\t},\n\t\t\tonClickCell:function(index, field, value){\n\t\t\t\tif (currTarget != this){\n\t\t\t\t\tstopEditing(currTarget);\n\t\t\t\t\tcurrTarget = this;\n\t\t\t\t}\n\t\t\t\tif (opts.editIndex != index){\n\t\t\t\t\tstopEditing(currTarget);\n\t\t\t\t\t$(this).datagrid('beginEdit', index);\n\t\t\t\t\tvar ed = $(this).datagrid('getEditor', {index:index,field:field});\n\t\t\t\t\tif (!ed){\n\t\t\t\t\t\ted = $(this).datagrid('getEditor', {index:index,field:'value'});\n\t\t\t\t\t}\n\t\t\t\t\tif (ed){\n\t\t\t\t\t\tvar t = $(ed.target);\n\t\t\t\t\t\tvar input = t.data('textbox') ? t.textbox('textbox') : t;\n\t\t\t\t\t\tinput.focus();\n\t\t\t\t\t\topts.editIndex = index;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\topts.onClickCell.call(target, index, field, value);\n\t\t\t},\n\t\t\tloadFilter:function(data){\n\t\t\t\tstopEditing(this);\n\t\t\t\treturn opts.loadFilter.call(this, data);\n\t\t\t}\n\t\t}));\n\t}\n\t\n\tfunction stopEditing(target){\n\t\tvar t = $(target);\n\t\tif (!t.length){return}\n\t\tvar opts = $.data(target, 'propertygrid').options;\n\t\topts.finder.getTr(target, null, 'editing').each(function(){\n\t\t\tvar index = parseInt($(this).attr('datagrid-row-index'));\n\t\t\tif (t.datagrid('validateRow', index)){\n\t\t\t\tt.datagrid('endEdit', index);\n\t\t\t} else {\n\t\t\t\tt.datagrid('cancelEdit', index);\n\t\t\t}\n\t\t});\n\t\topts.editIndex = undefined;\n\t}\n\t\n\t$.fn.propertygrid = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\tvar method = $.fn.propertygrid.methods[options];\n\t\t\tif (method){\n\t\t\t\treturn method(this, param);\n\t\t\t} else {\n\t\t\t\treturn this.datagrid(options, param);\n\t\t\t}\n\t\t}\n\t\t\n\t\toptions = options || {};\n\t\treturn this.each(function(){\n\t\t\tvar state = $.data(this, 'propertygrid');\n\t\t\tif (state){\n\t\t\t\t$.extend(state.options, options);\n\t\t\t} else {\n\t\t\t\tvar opts = $.extend({}, $.fn.propertygrid.defaults, $.fn.propertygrid.parseOptions(this), options);\n\t\t\t\topts.frozenColumns = $.extend(true, [], opts.frozenColumns);\n\t\t\t\topts.columns = $.extend(true, [], opts.columns);\n\t\t\t\t$.data(this, 'propertygrid', {\n\t\t\t\t\toptions: opts\n\t\t\t\t});\n\t\t\t}\n\t\t\tbuildGrid(this);\n\t\t});\n\t}\n\t\n\t$.fn.propertygrid.methods = {\n\t\toptions: function(jq){\n\t\t\treturn $.data(jq[0], 'propertygrid').options;\n\t\t}\n\t};\n\t\n\t$.fn.propertygrid.parseOptions = function(target){\n\t\treturn $.extend({}, $.fn.datagrid.parseOptions(target), $.parser.parseOptions(target,[{showGroup:'boolean'}]));\n\t};\n\t\n\t// the group view definition\n\tvar groupview = $.extend({}, $.fn.datagrid.defaults.view, {\n\t\trender: function(target, container, frozen){\n\t\t\tvar table = [];\n\t\t\tvar groups = this.groups;\n\t\t\tfor(var i=0; i<groups.length; i++){\n\t\t\t\ttable.push(this.renderGroup.call(this, target, i, groups[i], frozen));\n\t\t\t}\n\t\t\t$(container).html(table.join(''));\n\t\t},\n\t\t\n\t\trenderGroup: function(target, groupIndex, group, frozen){\n\t\t\tvar state = $.data(target, 'datagrid');\n\t\t\tvar opts = state.options;\n\t\t\tvar fields = $(target).datagrid('getColumnFields', frozen);\n\t\t\tvar hasFrozen = opts.frozenColumns && opts.frozenColumns.length;\n\n\t\t\tif (frozen){\n\t\t\t\tif (!(opts.rownumbers || hasFrozen)){\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar table = [];\n\n\t\t\tvar css = opts.groupStyler.call(target, group.value, group.rows);\n\t\t\tvar cs = parseCss(css, 'datagrid-group');\n\t\t\ttable.push('<div group-index=' + groupIndex + ' ' + cs + '>');\n\t\t\tif ((frozen && (opts.rownumbers || opts.frozenColumns.length)) ||\n\t\t\t\t\t(!frozen && !(opts.rownumbers || opts.frozenColumns.length))){\n\t\t\t\ttable.push('<span class=\"datagrid-group-expander\">');\n\t\t\t\ttable.push('<span class=\"datagrid-row-expander datagrid-row-collapse\">&nbsp;</span>');\n\t\t\t\ttable.push('</span>');\n\t\t\t}\n\t\t\tif ((frozen && hasFrozen) || (!frozen)){\n\t\t\t\ttable.push('<span class=\"datagrid-group-title\">');\n\t\t\t\ttable.push(opts.groupFormatter.call(target, group.value, group.rows));\n\t\t\t\ttable.push('</span>');\n\t\t\t}\n\t\t\ttable.push('</div>');\n\t\t\t\n\t\t\ttable.push('<table class=\"datagrid-btable\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody>');\n\t\t\tvar index = group.startIndex;\n\t\t\tfor(var j=0; j<group.rows.length; j++) {\n\t\t\t\tvar css = opts.rowStyler ? opts.rowStyler.call(target, index, group.rows[j]) : '';\n\t\t\t\tvar classValue = '';\n\t\t\t\tvar styleValue = '';\n\t\t\t\tif (typeof css == 'string'){\n\t\t\t\t\tstyleValue = css;\n\t\t\t\t} else if (css){\n\t\t\t\t\tclassValue = css['class'] || '';\n\t\t\t\t\tstyleValue = css['style'] || '';\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar cls = 'class=\"datagrid-row ' + (index % 2 && opts.striped ? 'datagrid-row-alt ' : ' ') + classValue + '\"';\n\t\t\t\tvar style = styleValue ? 'style=\"' + styleValue + '\"' : '';\n\t\t\t\tvar rowId = state.rowIdPrefix + '-' + (frozen?1:2) + '-' + index;\n\t\t\t\ttable.push('<tr id=\"' + rowId + '\" datagrid-row-index=\"' + index + '\" ' + cls + ' ' + style + '>');\n\t\t\t\ttable.push(this.renderRow.call(this, target, fields, frozen, index, group.rows[j]));\n\t\t\t\ttable.push('</tr>');\n\t\t\t\tindex++;\n\t\t\t}\n\t\t\ttable.push('</tbody></table>');\n\t\t\treturn table.join('');\n\n\t\t\tfunction parseCss(css, cls){\n\t\t\t\tvar classValue = '';\n\t\t\t\tvar styleValue = '';\n\t\t\t\tif (typeof css == 'string'){\n\t\t\t\t\tstyleValue = css;\n\t\t\t\t} else if (css){\n\t\t\t\t\tclassValue = css['class'] || '';\n\t\t\t\t\tstyleValue = css['style'] || '';\n\t\t\t\t}\n\t\t\t\treturn 'class=\"' + cls + (classValue ? ' '+classValue : '') + '\" ' +\n\t\t\t\t\t\t'style=\"' + styleValue + '\"';\n\t\t\t}\n\t\t},\n\t\t\n\t\tbindEvents: function(target){\n\t\t\tvar state = $.data(target, 'datagrid');\n\t\t\tvar dc = state.dc;\n\t\t\tvar body = dc.body1.add(dc.body2);\n\t\t\tvar clickHandler = ($.data(body[0],'events')||$._data(body[0],'events')).click[0].handler;\n\t\t\tbody._unbind('click')._bind('click', function(e){\n\t\t\t\tvar tt = $(e.target);\n\t\t\t\tvar expander = tt.closest('span.datagrid-row-expander');\n\t\t\t\tif (expander.length){\n\t\t\t\t\tvar gindex = expander.closest('div.datagrid-group').attr('group-index');\n\t\t\t\t\tif (expander.hasClass('datagrid-row-collapse')){\n\t\t\t\t\t\t$(target).datagrid('collapseGroup', gindex);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(target).datagrid('expandGroup', gindex);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclickHandler(e);\n\t\t\t\t}\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t},\n\t\t\n\t\tonBeforeRender: function(target, rows){\n\t\t\tvar state = $.data(target, 'datagrid');\n\t\t\tvar opts = state.options;\n\t\t\t\n\t\t\tinitCss();\n\t\t\t\n\t\t\tvar groups = [];\n\t\t\tfor(var i=0; i<rows.length; i++){\n\t\t\t\tvar row = rows[i];\n\t\t\t\tvar group = getGroup(row[opts.groupField]);\n\t\t\t\tif (!group){\n\t\t\t\t\tgroup = {\n\t\t\t\t\t\tvalue: row[opts.groupField],\n\t\t\t\t\t\trows: [row]\n\t\t\t\t\t};\n\t\t\t\t\tgroups.push(group);\n\t\t\t\t} else {\n\t\t\t\t\tgroup.rows.push(row);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar index = 0;\n\t\t\tvar newRows = [];\n\t\t\tfor(var i=0; i<groups.length; i++){\n\t\t\t\tvar group = groups[i];\n\t\t\t\tgroup.startIndex = index;\n\t\t\t\tindex += group.rows.length;\n\t\t\t\tnewRows = newRows.concat(group.rows);\n\t\t\t}\n\t\t\t\n\t\t\tstate.data.rows = newRows;\n\t\t\tthis.groups = groups;\n\t\t\t\n\t\t\tvar that = this;\n\t\t\tsetTimeout(function(){\n\t\t\t\tthat.bindEvents(target);\n\t\t\t},0);\n\t\t\t\n\t\t\tfunction getGroup(value){\n\t\t\t\tfor(var i=0; i<groups.length; i++){\n\t\t\t\t\tvar group = groups[i];\n\t\t\t\t\tif (group.value == value){\n\t\t\t\t\t\treturn group;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfunction initCss(){\n\t\t\t\tif (!$('#datagrid-group-style').length){\n\t\t\t\t\t$('head').append(\n\t\t\t\t\t\t'<style id=\"datagrid-group-style\">' +\n\t\t\t\t\t\t'.datagrid-group{height:'+opts.groupHeight+'px;overflow:hidden;font-weight:bold;border-bottom:1px solid #ccc;white-space:nowrap;word-break:normal;}' +\n\t\t\t\t\t\t'.datagrid-group-title,.datagrid-group-expander{display:inline-block;vertical-align:bottom;height:100%;line-height:'+opts.groupHeight+'px;padding:0 4px;}' +\n\t\t\t\t\t\t'.datagrid-group-title{position:relative;}' +\n\t\t\t\t\t\t'.datagrid-group-expander{width:'+opts.expanderWidth+'px;text-align:center;padding:0}' +\n\t\t\t\t\t\t'.datagrid-row-expander{margin:'+Math.floor((opts.groupHeight-16)/2)+'px 0;display:inline-block;width:16px;height:16px;cursor:pointer}' +\n\t\t\t\t\t\t'</style>'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonAfterRender: function(target){\n\t\t\t$.fn.datagrid.defaults.view.onAfterRender.call(this, target);\n\n\t\t\tvar view = this;\n\t\t\tvar state = $.data(target, 'datagrid');\n\t\t\tvar opts = state.options;\n\t\t\tif (!state.onResizeColumn){\n\t\t\t\tstate.onResizeColumn = opts.onResizeColumn;\n\t\t\t}\n\t\t\tif (!state.onResize){\n\t\t\t\tstate.onResize = opts.onResize;\n\t\t\t}\n\t\t\topts.onResizeColumn = function(field, width){\n\t\t\t\tview.resizeGroup(target);\n\t\t\t\tstate.onResizeColumn.call(target, field, width);\n\t\t\t}\n\t\t\topts.onResize = function(width, height){\n\t\t\t\tview.resizeGroup(target);\t\t\n\t\t\t\tstate.onResize.call($(target).datagrid('getPanel')[0], width, height);\n\t\t\t}\n\t\t\tview.resizeGroup(target);\n\t\t}\n\t});\n\n\t$.extend($.fn.datagrid.methods, {\n\t\tgroups:function(jq){\n\t\t\treturn jq.datagrid('options').view.groups;\n\t\t},\n\t    expandGroup:function(jq, groupIndex){\n\t        return jq.each(function(){\n\t        \tvar opts = $(this).datagrid('options');\n\t            var view = $.data(this, 'datagrid').dc.view;\n\t            var group = view.find(groupIndex!=undefined ? 'div.datagrid-group[group-index=\"'+groupIndex+'\"]' : 'div.datagrid-group');\n\t            var expander = group.find('span.datagrid-row-expander');\n\t            if (expander.hasClass('datagrid-row-expand')){\n\t                expander.removeClass('datagrid-row-expand').addClass('datagrid-row-collapse');\n\t                group.next('table').show();\n\t            }\n\t            $(this).datagrid('fixRowHeight');\n\t            if (opts.onExpandGroup){\n\t            \topts.onExpandGroup.call(this, groupIndex);\n\t            }\n\t        });\n\t    },\n\t    collapseGroup:function(jq, groupIndex){\n\t        return jq.each(function(){\n\t        \tvar opts = $(this).datagrid('options');\n\t            var view = $.data(this, 'datagrid').dc.view;\n\t            var group = view.find(groupIndex!=undefined ? 'div.datagrid-group[group-index=\"'+groupIndex+'\"]' : 'div.datagrid-group');\n\t            var expander = group.find('span.datagrid-row-expander');\n\t            if (expander.hasClass('datagrid-row-collapse')){\n\t                expander.removeClass('datagrid-row-collapse').addClass('datagrid-row-expand');\n\t                group.next('table').hide();\n\t            }\n\t            $(this).datagrid('fixRowHeight');\n\t            if (opts.onCollapseGroup){\n\t            \topts.onCollapseGroup.call(this, groupIndex);\n\t            }\n\t        });\n\t    },\n\t    scrollToGroup: function(jq, groupIndex){\n\t    \treturn jq.each(function(){\n\t\t\t\tvar state = $.data(this, 'datagrid');\n\t\t\t\tvar dc = state.dc;\n\t\t\t\tvar grow = dc.body2.children('div.datagrid-group[group-index=\"'+groupIndex+'\"]');\n\t\t\t\tif (grow.length){\n\t\t\t\t\tvar groupHeight = grow.outerHeight();\n\t\t\t\t\tvar headerHeight = dc.view2.children('div.datagrid-header')._outerHeight();\n\t\t\t\t\tvar frozenHeight = dc.body2.outerHeight(true) - dc.body2.outerHeight();\n\t\t\t\t\tvar top = grow.position().top - headerHeight - frozenHeight;\n\t\t\t\t\tif (top < 0){\n\t\t\t\t\t\tdc.body2.scrollTop(dc.body2.scrollTop() + top);\n\t\t\t\t\t} else if (top + groupHeight > dc.body2.height() - 18){\n\t\t\t\t\t\tdc.body2.scrollTop(dc.body2.scrollTop() + top + groupHeight - dc.body2.height() + 18);\n\t\t\t\t\t}\n\t\t\t\t}\n\t    \t});\n\t    }\n\t});\n\n\t$.extend(groupview, {\n\t\trefreshGroupTitle: function(target, groupIndex){\n\t\t\tvar state = $.data(target, 'datagrid');\n\t\t\tvar opts = state.options;\n\t\t\tvar dc = state.dc;\n\t\t\tvar group = this.groups[groupIndex];\n\t\t\tvar span = dc.body1.add(dc.body2).children('div.datagrid-group[group-index=' + groupIndex + ']').find('span.datagrid-group-title');\n\t\t\tspan.html(opts.groupFormatter.call(target, group.value, group.rows));\n\t\t},\n\t\tresizeGroup: function(target, groupIndex){\n\t\t\tvar state = $.data(target, 'datagrid');\n\t\t\tvar dc = state.dc;\n\t\t\tvar ht = dc.header2.find('table');\n\t\t\tvar fr = ht.find('tr.datagrid-filter-row').hide();\n\t\t\t// var ww = ht.width();\n\t\t\tvar ww = dc.body2.children('table.datagrid-btable:first').width();\n\t\t\tif (groupIndex == undefined){\n\t\t\t\tvar groupHeader = dc.body2.children('div.datagrid-group');\n\t\t\t} else {\n\t\t\t\tvar groupHeader = dc.body2.children('div.datagrid-group[group-index=' + groupIndex + ']');\n\t\t\t}\n\t\t\tgroupHeader._outerWidth(ww);\n\t\t\tvar opts = state.options;\n\t\t\tif (opts.frozenColumns && opts.frozenColumns.length){\n\t\t\t\tvar width = dc.view1.width() - opts.expanderWidth;\n\t\t\t\tvar isRtl = dc.view1.css('direction').toLowerCase()=='rtl';\n\t\t\t\tgroupHeader.find('.datagrid-group-title').css(isRtl?'right':'left', -width+'px');\n\t\t\t}\n\t\t\tif (fr.length){\n\t\t\t\tif (opts.showFilterBar){\n\t\t\t\t\tfr.show();\n\t\t\t\t}\n\t\t\t}\n\t\t\t// fr.show();\n\t\t},\n\n\t\tinsertRow: function(target, index, row){\n\t\t\tvar state = $.data(target, 'datagrid');\n\t\t\tvar opts = state.options;\n\t\t\tvar dc = state.dc;\n\t\t\tvar group = null;\n\t\t\tvar groupIndex;\n\t\t\t\n\t\t\tif (!state.data.rows.length){\n\t\t\t\t$(target).datagrid('loadData', [row]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tfor(var i=0; i<this.groups.length; i++){\n\t\t\t\tif (this.groups[i].value == row[opts.groupField]){\n\t\t\t\t\tgroup = this.groups[i];\n\t\t\t\t\tgroupIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (group){\n\t\t\t\tif (index == undefined || index == null){\n\t\t\t\t\tindex = state.data.rows.length;\n\t\t\t\t}\n\t\t\t\tif (index < group.startIndex){\n\t\t\t\t\tindex = group.startIndex;\n\t\t\t\t} else if (index > group.startIndex + group.rows.length){\n\t\t\t\t\tindex = group.startIndex + group.rows.length;\n\t\t\t\t}\n\t\t\t\t$.fn.datagrid.defaults.view.insertRow.call(this, target, index, row);\n\t\t\t\t\n\t\t\t\tif (index >= group.startIndex + group.rows.length){\n\t\t\t\t\t_moveTr(index, true);\n\t\t\t\t\t_moveTr(index, false);\n\t\t\t\t}\n\t\t\t\tgroup.rows.splice(index - group.startIndex, 0, row);\n\t\t\t} else {\n\t\t\t\tgroup = {\n\t\t\t\t\tvalue: row[opts.groupField],\n\t\t\t\t\trows: [row],\n\t\t\t\t\tstartIndex: state.data.rows.length\n\t\t\t\t}\n\t\t\t\tgroupIndex = this.groups.length;\n\t\t\t\tdc.body1.append(this.renderGroup.call(this, target, groupIndex, group, true));\n\t\t\t\tdc.body2.append(this.renderGroup.call(this, target, groupIndex, group, false));\n\t\t\t\tthis.groups.push(group);\n\t\t\t\tstate.data.rows.push(row);\n\t\t\t}\n\n\t\t\tthis.setGroupIndex(target);\n\t\t\tthis.refreshGroupTitle(target, groupIndex);\n\t\t\tthis.resizeGroup(target);\n\t\t\t\n\t\t\tfunction _moveTr(index,frozen){\n\t\t\t\tvar serno = frozen?1:2;\n\t\t\t\tvar prevTr = opts.finder.getTr(target, index-1, 'body', serno);\n\t\t\t\tvar tr = opts.finder.getTr(target, index, 'body', serno);\n\t\t\t\ttr.insertAfter(prevTr);\n\t\t\t}\n\t\t},\n\t\t\n\t\tupdateRow: function(target, index, row){\n\t\t\tvar opts = $.data(target, 'datagrid').options;\n\t\t\t$.fn.datagrid.defaults.view.updateRow.call(this, target, index, row);\n\t\t\tvar tb = opts.finder.getTr(target, index, 'body', 2).closest('table.datagrid-btable');\n\t\t\tvar groupIndex = parseInt(tb.prev().attr('group-index'));\n\t\t\tthis.refreshGroupTitle(target, groupIndex);\n\t\t},\n\t\t\n\t\tdeleteRow: function(target, index){\n\t\t\tvar state = $.data(target, 'datagrid');\n\t\t\tvar opts = state.options;\n\t\t\tvar dc = state.dc;\n\t\t\tvar body = dc.body1.add(dc.body2);\n\t\t\t\n\t\t\tvar tb = opts.finder.getTr(target, index, 'body', 2).closest('table.datagrid-btable');\n\t\t\tvar groupIndex = parseInt(tb.prev().attr('group-index'));\n\t\t\t\n\t\t\t$.fn.datagrid.defaults.view.deleteRow.call(this, target, index);\n\t\t\t\n\t\t\tvar group = this.groups[groupIndex];\n\t\t\tif (group.rows.length > 1){\n\t\t\t\tgroup.rows.splice(index-group.startIndex, 1);\n\t\t\t\tthis.refreshGroupTitle(target, groupIndex);\n\t\t\t} else {\n\t\t\t\tbody.children('div.datagrid-group[group-index='+groupIndex+']').remove();\n\t\t\t\tfor(var i=groupIndex+1; i<this.groups.length; i++){\n\t\t\t\t\tbody.children('div.datagrid-group[group-index='+i+']').attr('group-index', i-1);\n\t\t\t\t}\n\t\t\t\tthis.groups.splice(groupIndex, 1);\n\t\t\t}\n\t\t\t\n\t\t\tthis.setGroupIndex(target);\n\t\t},\n\n\t\tsetGroupIndex: function(target){\n\t\t\tvar index = 0;\n\t\t\tfor(var i=0; i<this.groups.length; i++){\n\t\t\t\tvar group = this.groups[i];\n\t\t\t\tgroup.startIndex = index;\n\t\t\t\tindex += group.rows.length;\n\t\t\t}\n\t\t}\n\t});\n\n\n\n\t// end of group view definition\n\t\n\t$.fn.propertygrid.defaults = $.extend({}, $.fn.datagrid.defaults, {\n\t\tgroupHeight:28,\n\t\texpanderWidth:20,\n\t\tsingleSelect:true,\n\t\tremoteSort:false,\n\t\tfitColumns:true,\n\t\tloadMsg:'',\n\t\tfrozenColumns:[[\n\t\t    {field:'f',width:20,resizable:false}\n\t\t]],\n\t\tcolumns:[[\n\t\t    {field:'name',title:'Name',width:100,sortable:true},\n\t\t    {field:'value',title:'Value',width:100,resizable:false}\n\t\t]],\n\t\t\n\t\tshowGroup:false,\n\t\tgroupView:groupview,\n\t\tgroupField:'group',\n\t\tgroupStyler: function(value,rows){return ''},\n\t\tgroupFormatter:function(fvalue,rows){return fvalue}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.resizable.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * resizable - EasyUI for jQuery\n * \n */\n(function($){\n\tfunction resize(e){\n\t\tvar resizeData = e.data;\n\t\tvar options = $.data(resizeData.target, 'resizable').options;\n\t\tif (resizeData.dir.indexOf('e') != -1) {\n\t\t\tvar width = resizeData.startWidth + e.pageX - resizeData.startX;\n\t\t\twidth = Math.min(\n\t\t\t\t\t\tMath.max(width, options.minWidth),\n\t\t\t\t\t\toptions.maxWidth\n\t\t\t\t\t);\n\t\t\tresizeData.width = width;\n\t\t}\n\t\tif (resizeData.dir.indexOf('s') != -1) {\n\t\t\tvar height = resizeData.startHeight + e.pageY - resizeData.startY;\n\t\t\theight = Math.min(\n\t\t\t\t\tMath.max(height, options.minHeight),\n\t\t\t\t\toptions.maxHeight\n\t\t\t);\n\t\t\tresizeData.height = height;\n\t\t}\n\t\tif (resizeData.dir.indexOf('w') != -1) {\n\t\t\tvar width = resizeData.startWidth - e.pageX + resizeData.startX;\n\t\t\twidth = Math.min(\n\t\t\t\t\t\tMath.max(width, options.minWidth),\n\t\t\t\t\t\toptions.maxWidth\n\t\t\t\t\t);\n\t\t\tresizeData.width = width;\n\t\t\tresizeData.left = resizeData.startLeft + resizeData.startWidth - resizeData.width;\n\t\t}\n\t\tif (resizeData.dir.indexOf('n') != -1) {\n\t\t\tvar height = resizeData.startHeight - e.pageY + resizeData.startY;\n\t\t\theight = Math.min(\n\t\t\t\t\t\tMath.max(height, options.minHeight),\n\t\t\t\t\t\toptions.maxHeight\n\t\t\t\t\t);\n\t\t\tresizeData.height = height;\n\t\t\tresizeData.top = resizeData.startTop + resizeData.startHeight - resizeData.height;\n\t\t}\n\t}\n\t\n\tfunction applySize(e){\n\t\tvar resizeData = e.data;\n\t\tvar t = $(resizeData.target);\n\t\tt.css({\n\t\t\tleft: resizeData.left,\n\t\t\ttop: resizeData.top\n\t\t});\n\t\tif (t.outerWidth() != resizeData.width){t._outerWidth(resizeData.width)}\n\t\tif (t.outerHeight() != resizeData.height){t._outerHeight(resizeData.height)}\n\t}\n\t\n\tfunction doDown(e){\n\t\t$.fn.resizable.isResizing = true;\n\t\t$.data(e.data.target, 'resizable').options.onStartResize.call(e.data.target, e);\n\t\treturn false;\n\t}\n\t\n\tfunction doMove(e){\n\t\tresize(e);\n\t\tif ($.data(e.data.target, 'resizable').options.onResize.call(e.data.target, e) != false){\n\t\t\tapplySize(e)\n\t\t}\n\t\treturn false;\n\t}\n\t\n\tfunction doUp(e){\n\t\t$.fn.resizable.isResizing = false;\n\t\tresize(e, true);\n\t\tapplySize(e);\n\t\t$.data(e.data.target, 'resizable').options.onStopResize.call(e.data.target, e);\n\t\t$(document)._unbind('.resizable');\n\t\t$('body').css('cursor','');\n\t\treturn false;\n\t}\n\n\t// get the resize direction\n\tfunction getDirection(e) {\n\t\tvar opts = $(e.data.target).resizable('options');\n\t\tvar tt = $(e.data.target);\n\t\tvar dir = '';\n\t\tvar offset = tt.offset();\n\t\tvar width = tt.outerWidth();\n\t\tvar height = tt.outerHeight();\n\t\tvar edge = opts.edge;\n\t\tif (e.pageY > offset.top && e.pageY < offset.top + edge) {\n\t\t\tdir += 'n';\n\t\t} else if (e.pageY < offset.top + height && e.pageY > offset.top + height - edge) {\n\t\t\tdir += 's';\n\t\t}\n\t\tif (e.pageX > offset.left && e.pageX < offset.left + edge) {\n\t\t\tdir += 'w';\n\t\t} else if (e.pageX < offset.left + width && e.pageX > offset.left + width - edge) {\n\t\t\tdir += 'e';\n\t\t}\n\t\t\n\t\tvar handles = opts.handles.split(',');\n\t\thandles = $.map(handles, function(h){return $.trim(h).toLowerCase();});\n\t\tif ($.inArray('all', handles) >= 0 || $.inArray(dir, handles) >= 0){\n\t\t\treturn dir;\n\t\t}\n\t\tfor(var i=0; i<dir.length; i++){\n\t\t\tvar index = $.inArray(dir.substr(i,1), handles);\n\t\t\tif (index >= 0){\n\t\t\t\treturn handles[index];\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t}\n\n\t$.fn.resizable = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\treturn $.fn.resizable.methods[options](this, param);\n\t\t}\n\t\t\n\t\treturn this.each(function(){\n\t\t\tvar opts = null;\n\t\t\tvar state = $.data(this, 'resizable');\n\t\t\tif (state) {\n\t\t\t\t$(this)._unbind('.resizable');\n\t\t\t\topts = $.extend(state.options, options || {});\n\t\t\t} else {\n\t\t\t\topts = $.extend({}, $.fn.resizable.defaults, $.fn.resizable.parseOptions(this), options || {});\n\t\t\t\t$.data(this, 'resizable', {\n\t\t\t\t\toptions:opts\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tif (opts.disabled == true) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t$(this)._bind('mousemove.resizable', {target:this}, function(e){\n\t\t\t\tif ($.fn.resizable.isResizing){return}\n\t\t\t\tvar dir = getDirection(e);\n\t\t\t\t$(e.data.target).css('cursor', dir ? dir+'-resize' : '');\n\t\t\t})._bind('mouseleave.resizable', {target:this}, function(e){\n\t\t\t\t$(e.data.target).css('cursor', '');\n\t\t\t})._bind('mousedown.resizable', {target:this}, function(e){\n\t\t\t\tvar dir = getDirection(e);\n\t\t\t\tif (dir == ''){return;}\n\t\t\t\t\n\t\t\t\tfunction getCssValue(css) {\n\t\t\t\t\tvar val = parseInt($(e.data.target).css(css));\n\t\t\t\t\tif (isNaN(val)) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar data = {\n\t\t\t\t\ttarget: e.data.target,\n\t\t\t\t\tdir: dir,\n\t\t\t\t\tstartLeft: getCssValue('left'),\n\t\t\t\t\tstartTop: getCssValue('top'),\n\t\t\t\t\tleft: getCssValue('left'),\n\t\t\t\t\ttop: getCssValue('top'),\n\t\t\t\t\tstartX: e.pageX,\n\t\t\t\t\tstartY: e.pageY,\n\t\t\t\t\tstartWidth: $(e.data.target).outerWidth(),\n\t\t\t\t\tstartHeight: $(e.data.target).outerHeight(),\n\t\t\t\t\twidth: $(e.data.target).outerWidth(),\n\t\t\t\t\theight: $(e.data.target).outerHeight(),\n\t\t\t\t\tdeltaWidth: $(e.data.target).outerWidth() - $(e.data.target).width(),\n\t\t\t\t\tdeltaHeight: $(e.data.target).outerHeight() - $(e.data.target).height()\n\t\t\t\t};\n\t\t\t\t$(document)._bind('mousedown.resizable', data, doDown);\n\t\t\t\t$(document)._bind('mousemove.resizable', data, doMove);\n\t\t\t\t$(document)._bind('mouseup.resizable', data, doUp);\n\t\t\t\t$('body').css('cursor', dir+'-resize');\n\t\t\t});\n\t\t});\n\t};\n\t\n\t$.fn.resizable.methods = {\n\t\toptions: function(jq){\n\t\t\treturn $.data(jq[0], 'resizable').options;\n\t\t},\n\t\tenable: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$(this).resizable({disabled:false});\n\t\t\t});\n\t\t},\n\t\tdisable: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$(this).resizable({disabled:true});\n\t\t\t});\n\t\t}\n\t};\n\t\n\t$.fn.resizable.parseOptions = function(target){\n\t\tvar t = $(target);\n\t\treturn $.extend({},\n\t\t\t\t$.parser.parseOptions(target, [\n\t\t\t\t\t'handles',{minWidth:'number',minHeight:'number',maxWidth:'number',maxHeight:'number',edge:'number'}\n\t\t\t\t]), {\n\t\t\tdisabled: (t.attr('disabled') ? true : undefined)\n\t\t})\n\t};\n\t\n\t$.fn.resizable.defaults = {\n\t\tdisabled:false,\n\t\thandles:'n, e, s, w, ne, se, sw, nw, all',\n\t\tminWidth: 10,\n\t\tminHeight: 10,\n\t\tmaxWidth: 10000,//$(document).width(),\n\t\tmaxHeight: 10000,//$(document).height(),\n\t\tedge:5,\n\t\tonStartResize: function(e){},\n\t\tonResize: function(e){},\n\t\tonStopResize: function(e){}\n\t};\n\t\n\t$.fn.resizable.isResizing = false;\n\t\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.slider.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * slider - EasyUI for jQuery\n * \n * Dependencies:\n *  draggable\n * \n */\n(function($){\n\tfunction init(target){\n\t\tvar slider = $('<div class=\"slider\">' +\n\t\t\t\t'<div class=\"slider-inner\">' +\n\t\t\t\t'<a href=\"javascript:;\" class=\"slider-handle\"></a>' +\n\t\t\t\t'<span class=\"slider-tip\"></span>' +\n\t\t\t\t'</div>' +\n\t\t\t\t'<div class=\"slider-rule\"></div>' +\n\t\t\t\t'<div class=\"slider-rulelabel\"></div>' +\n\t\t\t\t'<div style=\"clear:both\"></div>' +\n\t\t\t\t'<input type=\"hidden\" class=\"slider-value\">' +\n\t\t\t\t'</div>').insertAfter(target);\n\t\tvar t = $(target);\n\t\tt.addClass('slider-f').hide();\n\t\tvar name = t.attr('name');\n\t\tif (name){\n\t\t\tslider.find('input.slider-value').attr('name', name);\n\t\t\tt.removeAttr('name').attr('sliderName', name);\n\t\t}\n\t\tslider._bind('_resize', function(e,force){\n\t\t\tif ($(this).hasClass('easyui-fluid') || force){\n\t\t\t\tsetSize(target);\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\treturn slider;\n\t}\n\t\n\t/**\n\t * set the slider size, for vertical slider, the height property is required\n\t */\n\tfunction setSize(target, param){\n\t\tvar state = $.data(target, 'slider');\n\t\tvar opts = state.options;\n\t\tvar slider = state.slider;\n\t\t\n\t\tif (param){\n\t\t\tif (param.width) opts.width = param.width;\n\t\t\tif (param.height) opts.height = param.height;\n\t\t}\n\t\tslider._size(opts);\n\t\tif (opts.mode == 'h'){\n\t\t\tslider.css('height', '');\n\t\t\tslider.children('div').css('height', '');\n\t\t} else {\n\t\t\tslider.css('width', '');\n\t\t\tslider.children('div').css('width', '');\n\t\t\tslider.children('div.slider-rule,div.slider-rulelabel,div.slider-inner')._outerHeight(slider._outerHeight());\n\t\t}\n\t\tinitValue(target);\n\t}\n\t\n\t/**\n\t * show slider rule if needed\n\t */\n\tfunction showRule(target){\n\t\tvar state = $.data(target, 'slider');\n\t\tvar opts = state.options;\n\t\tvar slider = state.slider;\n\t\t\n\t\tvar aa = opts.mode == 'h' ? opts.rule : opts.rule.slice(0).reverse();\n\t\tif (opts.reversed){\n\t\t\taa = aa.slice(0).reverse();\n\t\t}\n\t\t_build(aa);\n\t\t\n\t\tfunction _build(aa){\n\t\t\tvar rule = slider.find('div.slider-rule');\n\t\t\tvar label = slider.find('div.slider-rulelabel');\n\t\t\trule.empty();\n\t\t\tlabel.empty();\n\t\t\tfor(var i=0; i<aa.length; i++){\n\t\t\t\tvar distance = i*100/(aa.length-1)+'%';\n\t\t\t\tvar span = $('<span></span>').appendTo(rule);\n\t\t\t\tspan.css((opts.mode=='h'?'left':'top'), distance);\n\t\t\t\t\n\t\t\t\t// show the labels\n\t\t\t\tif (aa[i] != '|'){\n\t\t\t\t\tspan = $('<span></span>').appendTo(label);\n\t\t\t\t\tspan.html(aa[i]);\n\t\t\t\t\tif (opts.mode == 'h'){\n\t\t\t\t\t\tspan.css({\n\t\t\t\t\t\t\tleft: distance,\n\t\t\t\t\t\t\tmarginLeft: -Math.round(span.outerWidth()/2)\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tspan.css({\n\t\t\t\t\t\t\ttop: distance,\n\t\t\t\t\t\t\tmarginTop: -Math.round(span.outerHeight()/2)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * build the slider and set some properties\n\t */\n\tfunction buildSlider(target){\n\t\tvar state = $.data(target, 'slider');\n\t\tvar opts = state.options;\n\t\tvar slider = state.slider;\n\t\t\n\t\tslider.removeClass('slider-h slider-v slider-disabled');\n\t\tslider.addClass(opts.mode == 'h' ? 'slider-h' : 'slider-v');\n\t\tslider.addClass(opts.disabled ? 'slider-disabled' : '');\n\t\t\n\t\tvar inner = slider.find('.slider-inner');\n\t\tinner.html(\n\t\t\t'<a href=\"javascript:;\" class=\"slider-handle\"></a>' +\n\t\t\t'<span class=\"slider-tip\"></span>'\n\t\t);\n\t\tif (opts.range){\n\t\t\tinner.append(\n\t\t\t\t'<a href=\"javascript:;\" class=\"slider-handle\"></a>' +\n\t\t\t\t'<span class=\"slider-tip\"></span>'\n\t\t\t);\n\t\t}\n\t\t\n\t\tslider.find('a.slider-handle').draggable({\n\t\t\taxis:opts.mode,\n\t\t\tcursor:'pointer',\n\t\t\tdisabled: opts.disabled,\n\t\t\tonDrag:function(e){\n\t\t\t\tvar left = e.data.left;\n\t\t\t\tvar width = slider.width();\n\t\t\t\tif (opts.mode!='h'){\n\t\t\t\t\tleft = e.data.top;\n\t\t\t\t\twidth = slider.height();\n\t\t\t\t}\n\t\t\t\tif (left < 0 || left > width) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\tsetPos(left, this);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonStartDrag:function(){\n\t\t\t\tstate.isDragging = true;\n\t\t\t\topts.onSlideStart.call(target, opts.value);\n\t\t\t},\n\t\t\tonStopDrag:function(e){\n\t\t\t\tsetPos(opts.mode=='h'?e.data.left:e.data.top, this);\n\t\t\t\topts.onSlideEnd.call(target, opts.value);\n\t\t\t\topts.onComplete.call(target, opts.value);\n\t\t\t\tstate.isDragging = false;\n\t\t\t}\n\t\t});\n\t\tslider.find('div.slider-inner')._unbind('.slider')._bind('mousedown.slider', function(e){\n\t\t\tif (state.isDragging || opts.disabled){return}\n\t\t\tvar pos = $(this).offset();\n\t\t\tsetPos(opts.mode=='h'?(e.pageX-pos.left):(e.pageY-pos.top));\n\t\t\topts.onComplete.call(target, opts.value);\n\t\t});\n\n\t\tfunction fixVal(value){\n\t\t\tvar dd = String(opts.step).split('.');\n\t\t\tvar dlen = dd.length>1 ? dd[1].length : 0;\n\t\t\treturn parseFloat(value.toFixed(dlen));\n\t\t}\n\t\t\n\t\tfunction setPos(pos, handle){\n\t\t\tvar value = pos2value(target, pos);\n\t\t\tvar s = Math.abs(value % opts.step);\n\t\t\tif (s < opts.step/2){\n\t\t\t\tvalue -= s;\n\t\t\t} else {\n\t\t\t\tvalue = value - s + opts.step;\n\t\t\t}\n\t\t\tvalue = fixVal(value);\n\t\t\tif (opts.range){\n\t\t\t\tvar v1 = opts.value[0];\n\t\t\t\tvar v2 = opts.value[1];\n\t\t\t\tvar m = parseFloat((v1+v2)/2);\n\t\t\t\tif (handle){\n\t\t\t\t\tvar isLeft = $(handle).nextAll('.slider-handle').length > 0;\n\t\t\t\t\tif (value <= v2 && isLeft){\n\t\t\t\t\t\tv1 = value;\n\t\t\t\t\t} else if (value >= v1 && (!isLeft)){\n\t\t\t\t\t\tv2 = value;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (value < v1){\n\t\t\t\t\t\tv1 = value;\n\t\t\t\t\t} else if (value > v2){\n\t\t\t\t\t\tv2 = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue < m ? v1 = value : v2 = value;\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t$(target).slider('setValues', [v1,v2]);\n\t\t\t} else {\n\t\t\t\t$(target).slider('setValue', value);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * set a specified value to slider\n\t */\n\tfunction setValues(target, values){\n\t\tvar state = $.data(target, 'slider');\n\t\tvar opts = state.options;\n\t\tvar slider = state.slider;\n\t\tvar oldValues = $.isArray(opts.value) ? opts.value : [opts.value];\n\t\tvar newValues = [];\n\t\t\n\t\tif (!$.isArray(values)){\n\t\t\tvalues = $.map(String(values).split(opts.separator), function(v){\n\t\t\t\treturn parseFloat(v);\n\t\t\t});\n\t\t}\n\t\t\n\t\tslider.find('.slider-value').remove();\n\t\tvar name = $(target).attr('sliderName') || '';\n\t\tfor(var i=0; i<values.length; i++){\n\t\t\tvar value = values[i];\n\t\t\tif (value < opts.min) value = opts.min;\n\t\t\tif (value > opts.max) value = opts.max;\n\t\t\t\n\t\t\tvar input = $('<input type=\"hidden\" class=\"slider-value\">').appendTo(slider);\n\t\t\tinput.attr('name', name);\n\t\t\tinput.val(value);\n\t\t\tnewValues.push(value);\n\t\t\t\n\t\t\tvar handle = slider.find('.slider-handle:eq('+i+')');\n\t\t\tvar tip = handle.next();\n\t\t\tvar pos = value2pos(target, value);\n\t\t\tif (opts.showTip){\n\t\t\t\ttip.show();\n\t\t\t\ttip.html(opts.tipFormatter.call(target, value));\n\t\t\t} else {\n\t\t\t\ttip.hide();\n\t\t\t}\n\t\t\t\n\t\t\tif (opts.mode == 'h'){\n\t\t\t\tvar style = 'left:'+pos+'px;';\n\t\t\t\thandle.attr('style', style);\n\t\t\t\ttip.attr('style', style +  'margin-left:' + (-Math.round(tip.outerWidth()/2)) + 'px');\n\t\t\t} else {\n\t\t\t\tvar style = 'top:' + pos + 'px;';\n\t\t\t\thandle.attr('style', style);\n\t\t\t\ttip.attr('style', style + 'margin-left:' + (-Math.round(tip.outerWidth())) + 'px');\n\t\t\t}\n\t\t}\n\t\topts.value = opts.range ? newValues : newValues[0];\n\t\t$(target).val(opts.range ? newValues.join(opts.separator) : newValues[0]);\n\t\t\n\t\tif (oldValues.join(',') != newValues.join(',')){\n\t\t\topts.onChange.call(target, opts.value, (opts.range?oldValues:oldValues[0]));\n\t\t}\n\t}\n\t\n\tfunction initValue(target){\n\t\tvar opts = $.data(target, 'slider').options;\n\t\tvar fn = opts.onChange;\n\t\topts.onChange = function(){};\n\t\tsetValues(target, opts.value);\n\t\topts.onChange = fn;\n\t}\n\t\n\t/**\n\t * translate value to slider position\n\t */\n\tfunction value2pos(target, value){\n\t\tvar state = $.data(target, 'slider');\n\t\tvar opts = state.options;\n\t\tvar slider = state.slider;\n\t\tvar size = opts.mode == 'h' ? slider.width() : slider.height();\n\t\tvar pos = opts.converter.toPosition.call(target, value, size);\n\t\tif (opts.mode == 'v'){\n\t\t\tpos = slider.height() - pos;\n\t\t}\n\t\tif (opts.reversed){\n\t\t\tpos = size - pos;\n\t\t}\n\t\treturn pos;\n\t\t// return pos.toFixed(0);\n\t}\n\t\n\t/**\n\t * translate slider position to value\n\t */\n\tfunction pos2value(target, pos){\n\t\tvar state = $.data(target, 'slider');\n\t\tvar opts = state.options;\n\t\tvar slider = state.slider;\n\t\tvar size = opts.mode == 'h' ? slider.width() : slider.height();\n\t\tvar pos = opts.mode=='h' ? (opts.reversed?(size-pos):pos) : (opts.reversed?pos:(size-pos));\n\t\tvar value = opts.converter.toValue.call(target, pos, size);\n\t\treturn value;\n\t\t// return value.toFixed(0);\n\t}\n\t\n\t$.fn.slider = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\treturn $.fn.slider.methods[options](this, param);\n\t\t}\n\t\t\n\t\toptions = options || {};\n\t\treturn this.each(function(){\n\t\t\tvar state = $.data(this, 'slider');\n\t\t\tif (state){\n\t\t\t\t$.extend(state.options, options);\n\t\t\t} else {\n\t\t\t\tstate = $.data(this, 'slider', {\n\t\t\t\t\toptions: $.extend({}, $.fn.slider.defaults, $.fn.slider.parseOptions(this), options),\n\t\t\t\t\tslider: init(this)\n\t\t\t\t});\n\t\t\t\t// $(this).removeAttr('disabled');\n\t\t\t\t$(this)._propAttr('disabled', false);\n\t\t\t}\n\t\t\t\n\t\t\tvar opts = state.options;\n\t\t\topts.min = parseFloat(opts.min);\n\t\t\topts.max = parseFloat(opts.max);\n\t\t\tif (opts.range){\n\t\t\t\tif (!$.isArray(opts.value)){\n\t\t\t\t\topts.value = $.map(String(opts.value).split(opts.separator), function(v){\n\t\t\t\t\t\treturn parseFloat(v);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (opts.value.length < 2){\n\t\t\t\t\topts.value.push(opts.max);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\topts.value = parseFloat(opts.value);\n\t\t\t}\n\t\t\topts.step = parseFloat(opts.step);\n\t\t\topts.originalValue = opts.value;\n\t\t\t\n\t\t\tbuildSlider(this);\n\t\t\tshowRule(this);\n\t\t\tsetSize(this);\n\t\t});\n\t};\n\t\n\t$.fn.slider.methods = {\n\t\toptions: function(jq){\n\t\t\treturn $.data(jq[0], 'slider').options;\n\t\t},\n\t\tdestroy: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$.data(this, 'slider').slider.remove();\n\t\t\t\t$(this).remove();\n\t\t\t});\n\t\t},\n\t\tresize: function(jq, param){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetSize(this, param);\n\t\t\t});\n\t\t},\n\t\tgetValue: function(jq){\n\t\t\treturn jq.slider('options').value;\n\t\t},\n\t\tgetValues: function(jq){\n\t\t\treturn jq.slider('options').value;\n\t\t},\n\t\tsetValue: function(jq, value){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetValues(this, [value]);\n\t\t\t});\n\t\t},\n\t\tsetValues: function(jq, values){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetValues(this, values);\n\t\t\t});\n\t\t},\n\t\tclear: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar opts = $(this).slider('options');\n\t\t\t\tsetValues(this, opts.range?[opts.min,opts.max]:[opts.min]);\n\t\t\t});\n\t\t},\n\t\treset: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar opts = $(this).slider('options');\n\t\t\t\t$(this).slider(opts.range?'setValues':'setValue', opts.originalValue);\n\t\t\t});\n\t\t},\n\t\tenable: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$.data(this, 'slider').options.disabled = false;\n\t\t\t\tbuildSlider(this);\n\t\t\t});\n\t\t},\n\t\tdisable: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$.data(this, 'slider').options.disabled = true;\n\t\t\t\tbuildSlider(this);\n\t\t\t});\n\t\t}\n\t};\n\t\n\t$.fn.slider.parseOptions = function(target){\n\t\tvar t = $(target);\n\t\treturn $.extend({}, $.parser.parseOptions(target, [\n\t\t\t'width','height','mode',{reversed:'boolean',showTip:'boolean',range:'boolean',min:'number',max:'number',step:'number'}\n\t\t]), {\n\t\t\tvalue: (t.val() || undefined),\n\t\t\tdisabled: (t.attr('disabled') ? true : undefined),\n\t\t\trule: (t.attr('rule') ? eval(t.attr('rule')) : undefined)\n\t\t});\n\t};\n\t\n\t$.fn.slider.defaults = {\n\t\twidth: 'auto',\n\t\theight: 'auto',\n\t\tmode: 'h',\t// 'h'(horizontal) or 'v'(vertical)\n\t\treversed: false,\n\t\tshowTip: false,\n\t\tdisabled: false,\n\t\trange: false,\n\t\tvalue: 0,\n\t\tseparator: ',',\n\t\tmin: 0,\n\t\tmax: 100,\n\t\tstep: 1,\n\t\trule: [],\t// [0,'|',100]\n\t\ttipFormatter: function(value){return value},\n\t\tconverter:{\n\t\t\ttoPosition:function(value, size){\n\t\t\t\tvar opts = $(this).slider('options');\n\t\t\t\tvar p = (value-opts.min)/(opts.max-opts.min)*size;\n\t\t\t\treturn p;\n\t\t\t},\n\t\t\ttoValue:function(pos, size){\n\t\t\t\tvar opts = $(this).slider('options');\n\t\t\t\tvar v = opts.min + (opts.max-opts.min)*(pos/size);\n\t\t\t\treturn v;\n\t\t\t}\n\t\t},\n\t\tonChange: function(value, oldValue){},\n\t\tonSlideStart: function(value){},\n\t\tonSlideEnd: function(value){},\n\t\tonComplete: function(value){}\n\t};\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.tabs.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * tabs - EasyUI for jQuery\n * \n * Dependencies:\n * \t panel\n *   linkbutton\n * \n */\n(function($){\n\tfunction getContentWidth(c){\n\t\tvar w = 0;\n\t\t$(c).children().each(function(){\n\t\t\tw += $(this).outerWidth(true);\n\t\t});\n\t\treturn w;\n\t}\n\t/**\n\t * set the tabs scrollers to show or not,\n\t * dependent on the tabs count and width\n\t */\n\tfunction setScrollers(container) {\n\t\tvar opts = $.data(container, 'tabs').options;\n\t\tif (!opts.showHeader){return}\n\t\t\n\t\tvar header = $(container).children('div.tabs-header');\n\t\tvar tool = header.children('div.tabs-tool:not(.tabs-tool-hidden)');\n\t\tvar sLeft = header.children('div.tabs-scroller-left');\n\t\tvar sRight = header.children('div.tabs-scroller-right');\n\t\tvar wrap = header.children('div.tabs-wrap');\n\n\t\tif (opts.tabPosition == 'left' || opts.tabPosition == 'right'){\n\t\t\tif (!tool.length){return}\n\t\t\ttool._outerWidth(header.width());\n\t\t\tvar toolCss = {\n\t\t\t\tleft: opts.tabPosition == 'left' ? 'auto':0,\n\t\t\t\tright: opts.tabPosition == 'left' ? 0 : 'auto',\n\t\t\t\ttop: opts.toolPosition == 'top' ? 0 : 'auto',\n\t\t\t\tbottom: opts.toolPosition == 'top' ? 'auto' : 0\n\t\t\t};\n\t\t\tvar wrapCss = {\n\t\t\t\tmarginTop: opts.toolPosition == 'top' ? tool.outerHeight() : 0\n\t\t\t};\n\t\t\ttool.css(toolCss);\n\t\t\twrap.css(wrapCss);\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t// set the tool height\n\t\tvar tHeight = header.outerHeight();\n\t\tif (opts.plain){\n\t\t\ttHeight -= tHeight - header.height();\n\t\t}\n\t\ttool._outerHeight(tHeight);\n\t\t\n\t\tvar tabsWidth = getContentWidth(header.find('ul.tabs'));\n\t\tvar cWidth = header.width() - tool._outerWidth();\n\t\t\n\t\tif (tabsWidth > cWidth) {\n\t\t\tsLeft.add(sRight).show()._outerHeight(tHeight);\n\t\t\tif (opts.toolPosition == 'left'){\n\t\t\t\ttool.css({\n\t\t\t\t\tleft: sLeft.outerWidth(),\n\t\t\t\t\tright: ''\n\t\t\t\t});\n\t\t\t\twrap.css({\n\t\t\t\t\tmarginLeft: sLeft.outerWidth() + tool._outerWidth(),\n\t\t\t\t\tmarginRight: sRight._outerWidth(),\n\t\t\t\t\twidth: cWidth - sLeft.outerWidth() - sRight.outerWidth()\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttool.css({\n\t\t\t\t\tleft: '',\n\t\t\t\t\tright: sRight.outerWidth()\n\t\t\t\t});\n\t\t\t\twrap.css({\n\t\t\t\t\tmarginLeft: sLeft.outerWidth(),\n\t\t\t\t\tmarginRight: sRight.outerWidth() + tool._outerWidth(),\n\t\t\t\t\twidth: cWidth - sLeft.outerWidth() - sRight.outerWidth()\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tsLeft.add(sRight).hide();\n\t\t\tif (opts.toolPosition == 'left'){\n\t\t\t\ttool.css({\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: ''\n\t\t\t\t});\n\t\t\t\twrap.css({\n\t\t\t\t\tmarginLeft: tool._outerWidth(),\n\t\t\t\t\tmarginRight: 0,\n\t\t\t\t\twidth: cWidth\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttool.css({\n\t\t\t\t\tleft: '',\n\t\t\t\t\tright: 0\n\t\t\t\t});\n\t\t\t\twrap.css({\n\t\t\t\t\tmarginLeft: 0,\n\t\t\t\t\tmarginRight: tool._outerWidth(),\n\t\t\t\t\twidth: cWidth\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction addTools(container){\n\t\tvar opts = $.data(container, 'tabs').options;\n\t\tvar header = $(container).children('div.tabs-header');\n\t\tif (opts.tools) {\n\t\t\tif (typeof opts.tools == 'string'){\n\t\t\t\t$(opts.tools).addClass('tabs-tool').appendTo(header);\n\t\t\t\t$(opts.tools).show();\n\t\t\t} else {\n\t\t\t\theader.children('div.tabs-tool').remove();\n\t\t\t\tvar tools = $('<div class=\"tabs-tool\"><table cellspacing=\"0\" cellpadding=\"0\" style=\"height:100%\"><tr></tr></table></div>').appendTo(header);\n\t\t\t\tvar tr = tools.find('tr');\n\t\t\t\tfor(var i=0; i<opts.tools.length; i++){\n\t\t\t\t\tvar td = $('<td></td>').appendTo(tr);\n\t\t\t\t\tvar tool = $('<a href=\"javascript:;\"></a>').appendTo(td);\n\t\t\t\t\ttool[0].onclick = eval(opts.tools[i].handler || function(){});\n\t\t\t\t\ttool.linkbutton($.extend({}, opts.tools[i], {\n\t\t\t\t\t\tplain: true\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\theader.children('div.tabs-tool').remove();\n\t\t}\n\t}\n\t\n\tfunction setSize(container, param) {\n\t\tvar state = $.data(container, 'tabs');\n\t\tvar opts = state.options;\n\t\tvar cc = $(container);\n\t\t\n\t\tif (!opts.doSize){return}\n\t\tif (param){\n\t\t\t$.extend(opts, {\n\t\t\t\twidth: param.width,\n\t\t\t\theight: param.height\n\t\t\t});\n\t\t}\n\t\tcc._size(opts);\n\n\t\tvar header = cc.children('div.tabs-header');\n\t\tvar panels = cc.children('div.tabs-panels');\n\t\tvar wrap = header.find('div.tabs-wrap');\n\t\tvar ul = wrap.find('.tabs');\n\t\tul.children('li').removeClass('tabs-first tabs-last');\n\t\tul.children('li:first').addClass('tabs-first');\n\t\tul.children('li:last').addClass('tabs-last');\n\t\t\n\t\tif (opts.tabPosition == 'left' || opts.tabPosition == 'right'){\n\t\t\theader._outerWidth(opts.showHeader ? opts.headerWidth : 0);\n\t\t\tpanels._outerWidth(cc.width() - header.outerWidth());\n\t\t\theader.add(panels)._size('height', isNaN(parseInt(opts.height)) ? '' : cc.height());\n\t\t\twrap._outerWidth(header.width());\n\t\t\tul._outerWidth(wrap.width()).css('height','');\n\t\t} else {\n\t\t\theader.children('div.tabs-scroller-left,div.tabs-scroller-right,div.tabs-tool:not(.tabs-tool-hidden)').css('display', opts.showHeader?'block':'none');\n\t\t\theader._outerWidth(cc.width()).css('height','');\n\t\t\tif (opts.showHeader){\n\t\t\t\theader.css('background-color','');\n\t\t\t\twrap.css('height','');\n\t\t\t} else {\n\t\t\t\theader.css('background-color','transparent');\n\t\t\t\theader._outerHeight(0);\n\t\t\t\twrap._outerHeight(0);\n\t\t\t}\n\t\t\tul._outerHeight(opts.tabHeight).css('width','');\n\t\t\tul._outerHeight(ul.outerHeight()-ul.height()-1+opts.tabHeight).css('width','');\n\t\t\t\n\t\t\tpanels._size('height', isNaN(parseInt(opts.height)) ? '' : (cc.height()-header.outerHeight()));\n\t\t\tpanels._size('width', cc.width());\n\t\t}\n\n\t\tif (state.tabs.length){\n\t\t\tvar d1 = ul.outerWidth(true) - ul.width();\n\t\t\tvar li = ul.children('li:first');\n\t\t\tvar d2 = li.outerWidth(true) - li.width();\n\t\t\tvar hwidth = header.width() - header.children('.tabs-tool:not(.tabs-tool-hidden)')._outerWidth();\n\t\t\tvar justifiedWidth = Math.floor((hwidth-d1-d2*state.tabs.length)/state.tabs.length);\n\t\t\t\n\t\t\t$.map(state.tabs, function(p){\n\t\t\t\tsetTabSize(p, (opts.justified && $.inArray(opts.tabPosition,['top','bottom'])>=0) ? justifiedWidth : undefined);\n\t\t\t});\n\t\t\tif (opts.justified && $.inArray(opts.tabPosition,['top','bottom'])>=0){\n\t\t\t\tvar deltaWidth = hwidth - d1 - getContentWidth(ul);\n\t\t\t\tsetTabSize(state.tabs[state.tabs.length-1], justifiedWidth+deltaWidth);\n\t\t\t}\n\t\t}\n\t\tsetScrollers(container);\n\n\t\tfunction setTabSize(p, width){\n\t\t\tvar p_opts = p.panel('options');\n\t\t\tvar p_t = p_opts.tab.find('a.tabs-inner');\n\t\t\tvar width = width ? width : (parseInt(p_opts.tabWidth||opts.tabWidth||undefined));\n\t\t\tif (width){\n\t\t\t\tp_t._outerWidth(width);\n\t\t\t} else {\n\t\t\t\tp_t.css('width', '');\n\t\t\t}\n\t\t\tp_t._outerHeight(opts.tabHeight);\n\t\t\tp_t.css('lineHeight', p_t.height()+'px');\n\t\t\tp_t.find('.easyui-fluid:visible').triggerHandler('_resize');\n\t\t}\n\t}\n\t\n\t/**\n\t * set selected tab panel size\n\t */\n\tfunction setSelectedSize(container){\n\t\tvar opts = $.data(container, 'tabs').options;\n\t\tvar tab = getSelectedTab(container);\n\t\tif (tab){\n\t\t\tvar panels = $(container).children('div.tabs-panels');\n\t\t\tvar width = opts.width=='auto' ? 'auto' : panels.width();\n\t\t\tvar height = opts.height=='auto' ? 'auto' : panels.height();\n\t\t\ttab.panel('resize', {\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t});\n\t\t}\n\t}\n\t\n\t/**\n\t * wrap the tabs header and body\n\t */\n\tfunction wrapTabs(container) {\n\t\tvar tabs = $.data(container, 'tabs').tabs;\n\t\tvar cc = $(container).addClass('tabs-container');\n\t\tvar panels = $('<div class=\"tabs-panels\"></div>').insertBefore(cc);\n\t\tcc.children('div').each(function(){\n\t\t\tpanels[0].appendChild(this);\n\t\t});\n\t\tcc[0].appendChild(panels[0]);\n\t\t$('<div class=\"tabs-header\">'\n\t\t\t\t+ '<div class=\"tabs-scroller-left\"></div>'\n\t\t\t\t+ '<div class=\"tabs-scroller-right\"></div>'\n\t\t\t\t+ '<div class=\"tabs-wrap\">'\n\t\t\t\t+ '<ul class=\"tabs\"></ul>'\n\t\t\t\t+ '</div>'\n\t\t\t\t+ '</div>').prependTo(container);\n\t\t\n\t\tcc.children('div.tabs-panels').children('div').each(function(i){\n\t\t\tvar opts = $.extend({}, $.parser.parseOptions(this), {\n\t\t\t\tdisabled: ($(this).attr('disabled') ? true : undefined),\n\t\t\t\tselected: ($(this).attr('selected') ? true : undefined)\n\t\t\t});\n\t\t\tcreateTab(container, opts, $(this));\n\t\t});\n\t\t\n\t\t// cc.children('div.tabs-header').find('.tabs-scroller-left, .tabs-scroller-right').hover(\n\t\t// \t\tfunction(){$(this).addClass('tabs-scroller-over');},\n\t\t// \t\tfunction(){$(this).removeClass('tabs-scroller-over');}\n\t\t// );\n\t\tcc.children('div.tabs-header').find('.tabs-scroller-left, .tabs-scroller-right')._bind('mouseenter', function(){\n\t\t\t$(this).addClass('tabs-scroller-over');\n\t\t})._bind('mouseleave', function(){\n\t\t\t$(this).removeClass('tabs-scroller-over');\n\t\t});\n\t\tcc._bind('_resize', function(e,force){\n\t\t\tif ($(this).hasClass('easyui-fluid') || force){\n\t\t\t\tsetSize(container);\n\t\t\t\tsetSelectedSize(container);\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t}\n\t\n\tfunction bindEvents(container){\n\t\tvar state = $.data(container, 'tabs')\n\t\tvar opts = state.options;\n\t\t$(container).children('div.tabs-header')._unbind()._bind('click', function(e){\n\t\t\tif ($(e.target).hasClass('tabs-scroller-left')){\n\t\t\t\t$(container).tabs('scrollBy', -opts.scrollIncrement);\n\t\t\t} else if ($(e.target).hasClass('tabs-scroller-right')){\n\t\t\t\t$(container).tabs('scrollBy', opts.scrollIncrement);\n\t\t\t} else {\n\t\t\t\tvar li = $(e.target).closest('li');\n\t\t\t\tif (li.hasClass('tabs-disabled')){return false;}\n\t\t\t\tvar a = $(e.target).closest('a.tabs-close');\n\t\t\t\tif (a.length){\n\t\t\t\t\tcloseTab(container, getLiIndex(li));\n\t\t\t\t} else if (li.length){\n//\t\t\t\t\tselectTab(container, getLiIndex(li));\n\t\t\t\t\tvar index = getLiIndex(li);\n\t\t\t\t\tvar popts = state.tabs[index].panel('options');\n\t\t\t\t\tif (popts.collapsible){\n\t\t\t\t\t\tpopts.closed ? selectTab(container, index) : unselectTab(container, index);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tselectTab(container, index);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t})._bind('contextmenu', function(e){\n\t\t\tvar li = $(e.target).closest('li');\n\t\t\tif (li.hasClass('tabs-disabled')){return;}\n\t\t\tif (li.length){\n\t\t\t\topts.onContextMenu.call(container, e, li.find('span.tabs-title').html(), getLiIndex(li));\n\t\t\t}\n\t\t});\n\t\t\n\t\tfunction getLiIndex(li){\n\t\t\tvar index = 0;\n\t\t\tli.parent().children('li').each(function(i){\n\t\t\t\tif (li[0] == this){\n\t\t\t\t\tindex = i;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn index;\n\t\t}\n\t}\n\t\n\tfunction setProperties(container){\n\t\tvar opts = $.data(container, 'tabs').options;\n\t\tvar header = $(container).children('div.tabs-header');\n\t\tvar panels = $(container).children('div.tabs-panels');\n\t\t\n\t\theader.removeClass('tabs-header-top tabs-header-bottom tabs-header-left tabs-header-right');\n\t\tpanels.removeClass('tabs-panels-top tabs-panels-bottom tabs-panels-left tabs-panels-right');\n\t\tif (opts.tabPosition == 'top'){\n\t\t\theader.insertBefore(panels);\n\t\t} else if (opts.tabPosition == 'bottom'){\n\t\t\theader.insertAfter(panels);\n\t\t\theader.addClass('tabs-header-bottom');\n\t\t\tpanels.addClass('tabs-panels-top');\n\t\t} else if (opts.tabPosition == 'left'){\n\t\t\theader.addClass('tabs-header-left');\n\t\t\tpanels.addClass('tabs-panels-right');\n\t\t} else if (opts.tabPosition == 'right'){\n\t\t\theader.addClass('tabs-header-right');\n\t\t\tpanels.addClass('tabs-panels-left');\n\t\t}\n\t\t\n\t\tif (opts.plain == true) {\n\t\t\theader.addClass('tabs-header-plain');\n\t\t} else {\n\t\t\theader.removeClass('tabs-header-plain');\n\t\t}\n\t\theader.removeClass('tabs-header-narrow').addClass(opts.narrow?'tabs-header-narrow':'');\n\t\tvar tabs = header.find('.tabs');\n\t\ttabs.removeClass('tabs-pill').addClass(opts.pill?'tabs-pill':'');\n\t\ttabs.removeClass('tabs-narrow').addClass(opts.narrow?'tabs-narrow':'');\n\t\ttabs.removeClass('tabs-justified').addClass(opts.justified?'tabs-justified':'');\n\t\tif (opts.border == true){\n\t\t\theader.removeClass('tabs-header-noborder');\n\t\t\tpanels.removeClass('tabs-panels-noborder');\n\t\t} else {\n\t\t\theader.addClass('tabs-header-noborder');\n\t\t\tpanels.addClass('tabs-panels-noborder');\n\t\t}\n\t\topts.doSize = true;\n\t}\n\t\n\tfunction createTab(container, options, pp) {\n\t\toptions = options || {};\n\t\tvar state = $.data(container, 'tabs');\n\t\tvar tabs = state.tabs;\n\t\tif (options.index == undefined || options.index > tabs.length){options.index = tabs.length}\n\t\tif (options.index < 0){options.index = 0}\n\t\t\n\t\tvar ul = $(container).children('div.tabs-header').find('ul.tabs');\n\t\tvar panels = $(container).children('div.tabs-panels');\n\t\tvar tab = $(\n\t\t\t\t'<li>' +\n\t\t\t\t'<a href=\"javascript:;\" class=\"tabs-inner\">' +\n\t\t\t\t'<span class=\"tabs-title\"></span>' +\n\t\t\t\t'<span class=\"tabs-icon\"></span>' +\n\t\t\t\t'</a>' +\n\t\t\t\t'</li>');\n\t\tif (!pp){pp = $('<div></div>');}\n\t\tif (options.index >= tabs.length){\n\t\t\ttab.appendTo(ul);\n\t\t\tpp.appendTo(panels);\n\t\t\ttabs.push(pp);\n\t\t} else {\n\t\t\ttab.insertBefore(ul.children('li:eq('+options.index+')'));\n\t\t\tpp.insertBefore(panels.children('div.panel:eq('+options.index+')'));\n\t\t\ttabs.splice(options.index, 0, pp);\n\t\t}\n\n\t\t// create panel\n\t\tpp.panel($.extend({}, options, {\n\t\t\ttab: tab,\n\t\t\tborder: false,\n\t\t\tnoheader: true,\n\t\t\tclosed: true,\n\t\t\tdoSize: false,\n\t\t\ticonCls: (options.icon ? options.icon : undefined),\n\t\t\tonLoad: function(){\n\t\t\t\tif (options.onLoad){\n\t\t\t\t\toptions.onLoad.apply(this, arguments);\n\t\t\t\t}\n\t\t\t\tstate.options.onLoad.call(container, $(this));\n\t\t\t},\n\t\t\tonBeforeOpen: function(){\n\t\t\t\tif (options.onBeforeOpen){\n\t\t\t\t\tif (options.onBeforeOpen.call(this) == false){return false;}\n\t\t\t\t}\n\t\t\t\tvar p = $(container).tabs('getSelected');\n\t\t\t\tif (p){\n\t\t\t\t\tif (p[0] != this){\n\t\t\t\t\t\t$(container).tabs('unselect', getTabIndex(container, p));\n\t\t\t\t\t\tp = $(container).tabs('getSelected');\n\t\t\t\t\t\tif (p){\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetSelectedSize(container);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar popts = $(this).panel('options');\n\t\t\t\tpopts.tab.addClass('tabs-selected');\n\t\t\t\t// scroll the tab to center position if required.\n\t\t\t\tvar wrap = $(container).find('>div.tabs-header>div.tabs-wrap');\n\t\t\t\tvar left = popts.tab.position().left;\n\t\t\t\tvar right = left + popts.tab.outerWidth();\n\t\t\t\tif (left < 0 || right > wrap.width()){\n\t\t\t\t\tvar deltaX = left - (wrap.width()-popts.tab.width()) / 2;\n\t\t\t\t\t$(container).tabs('scrollBy', deltaX);\n\t\t\t\t} else {\n\t\t\t\t\t$(container).tabs('scrollBy', 0);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar panel = $(this).panel('panel');\n\t\t\t\tpanel.css('display','block');\n\t\t\t\tsetSelectedSize(container);\n\t\t\t\tpanel.css('display','none');\n\t\t\t},\n\t\t\tonOpen: function(){\n\t\t\t\tif (options.onOpen){\n\t\t\t\t\toptions.onOpen.call(this);\n\t\t\t\t}\n\t\t\t\tvar popts = $(this).panel('options');\n\t\t\t\tvar index = getTabIndex(container, this);\n\t\t\t\t// state.selectHis.push(popts.title);\n\t\t\t\tstate.selectHis.push(index);\n\t\t\t\tstate.options.onSelect.call(container, popts.title, index);\n\t\t\t},\n\t\t\tonBeforeClose: function(){\n\t\t\t\tif (options.onBeforeClose){\n\t\t\t\t\tif (options.onBeforeClose.call(this) == false){return false;}\n\t\t\t\t}\n\t\t\t\t$(this).panel('options').tab.removeClass('tabs-selected');\n\t\t\t},\n\t\t\tonClose: function(){\n\t\t\t\tif (options.onClose){\n\t\t\t\t\toptions.onClose.call(this);\n\t\t\t\t}\n\t\t\t\tvar popts = $(this).panel('options');\n\t\t\t\tstate.options.onUnselect.call(container, popts.title, getTabIndex(container, this));\n\t\t\t}\n\t\t}));\n\t\t\n\t\t// only update the tab header\n\t\t$(container).tabs('update', {\n\t\t\ttab: pp,\n\t\t\toptions: pp.panel('options'),\n\t\t\ttype: 'header'\n\t\t});\n\t}\n\t\n\tfunction addTab(container, options) {\n\t\tvar state = $.data(container, 'tabs');\n\t\tvar opts = state.options;\n\t\tif (options.selected == undefined) options.selected = true;\n\t\t\n\t\tcreateTab(container, options);\n\t\topts.onAdd.call(container, options.title, options.index);\n\t\tif (options.selected){\n\t\t\tselectTab(container, options.index);\t// select the added tab panel\n\t\t}\n\t}\n\t\n\t/**\n\t * update tab panel, param has following properties:\n\t * tab: the tab panel to be updated\n\t * options: the tab panel options\n\t * type: the update type, possible values are: 'header','body','all'\n\t */\n\tfunction updateTab(container, param){\n\t\tparam.type = param.type || 'all';\n\t\tvar selectHis = $.data(container, 'tabs').selectHis;\n\t\tvar pp = param.tab;\t// the tab panel\n\t\tvar opts = pp.panel('options');\t// get the tab panel options\n\t\tvar oldTitle = opts.title;\n\t\t$.extend(opts, param.options, {\n\t\t\ticonCls: (param.options.icon ? param.options.icon : undefined)\n\t\t});\n\n\t\tif (param.type == 'all' || param.type == 'body'){\n\t\t\tpp.panel();\n\t\t}\n\t\tif (param.type == 'all' || param.type == 'header'){\n\t\t\tvar tab = opts.tab;\n\t\t\t\n\t\t\tif (opts.header){\n\t\t\t\ttab.find('.tabs-inner').html($(opts.header));\n\t\t\t} else {\n\t\t\t\tvar s_title = tab.find('span.tabs-title');\n\t\t\t\tvar s_icon = tab.find('span.tabs-icon');\n\t\t\t\ts_title.html(opts.title);\n\t\t\t\ts_icon.attr('class', 'tabs-icon');\n\t\t\t\t\n\t\t\t\ttab.find('a.tabs-close').remove();\n\t\t\t\tif (opts.closable){\n\t\t\t\t\ts_title.addClass('tabs-closable');\n\t\t\t\t\t$('<a href=\"javascript:;\" class=\"tabs-close\"></a>').appendTo(tab);\n\t\t\t\t} else{\n\t\t\t\t\ts_title.removeClass('tabs-closable');\n\t\t\t\t}\n\t\t\t\tif (opts.iconCls){\n\t\t\t\t\ts_title.addClass('tabs-with-icon');\n\t\t\t\t\ts_icon.addClass(opts.iconCls);\n\t\t\t\t} else {\n\t\t\t\t\ts_title.removeClass('tabs-with-icon');\n\t\t\t\t}\n\t\t\t\tif (opts.tools){\n\t\t\t\t\tvar p_tool = tab.find('span.tabs-p-tool');\n\t\t\t\t\tif (!p_tool.length){\n\t\t\t\t\t\tvar p_tool = $('<span class=\"tabs-p-tool\"></span>').insertAfter(tab.find('a.tabs-inner'));\n\t\t\t\t\t}\n\t\t\t\t\tif ($.isArray(opts.tools)){\n\t\t\t\t\t\tp_tool.empty();\n\t\t\t\t\t\tfor(var i=0; i<opts.tools.length; i++){\n\t\t\t\t\t\t\tvar t = $('<a href=\"javascript:;\"></a>').appendTo(p_tool);\n\t\t\t\t\t\t\tt.addClass(opts.tools[i].iconCls);\n\t\t\t\t\t\t\tif (opts.tools[i].handler){\n\t\t\t\t\t\t\t\tt._bind('click', {handler:opts.tools[i].handler}, function(e){\n\t\t\t\t\t\t\t\t\tif ($(this).parents('li').hasClass('tabs-disabled')){return;}\n\t\t\t\t\t\t\t\t\te.data.handler.call(this);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(opts.tools).children().appendTo(p_tool);\n\t\t\t\t\t}\n\t\t\t\t\tvar pr = p_tool.children().length * 12;\n\t\t\t\t\tif (opts.closable) {\n\t\t\t\t\t\tpr += 8;\n\t\t\t\t\t\tp_tool.css('right', '');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpr -= 3;\n\t\t\t\t\t\tp_tool.css('right','5px');\n\t\t\t\t\t}\n\t\t\t\t\ts_title.css('padding-right', pr+'px');\n\t\t\t\t} else {\n\t\t\t\t\ttab.find('span.tabs-p-tool').remove();\n\t\t\t\t\ts_title.css('padding-right', '');\n\t\t\t\t}\n\t\t\t}\n\t\t\t// if (oldTitle != opts.title){\n\t\t\t// \tfor(var i=0; i<selectHis.length; i++){\n\t\t\t// \t\tif (selectHis[i] == oldTitle){\n\t\t\t// \t\t\tselectHis[i] = opts.title;\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// }\n\t\t}\n\t\tif (opts.disabled){\n\t\t\topts.tab.addClass('tabs-disabled');\n\t\t} else {\n\t\t\topts.tab.removeClass('tabs-disabled');\n\t\t}\n\t\t\n\t\tsetSize(container);\n\t\t\n\t\t$.data(container, 'tabs').options.onUpdate.call(container, opts.title, getTabIndex(container, pp));\n\t}\n\t\n\t/**\n\t * close a tab with specified index or title\n\t */\n\tfunction closeTab(container, which) {\n\t\tvar state = $.data(container, 'tabs');\n\t\tvar opts = state.options;\n\t\tvar tabs = state.tabs;\n\t\tvar selectHis = state.selectHis;\n\t\t\n\t\tif (!exists(container, which)) return;\n\t\t\n\t\tvar tab = getTab(container, which);\n\t\tvar title = tab.panel('options').title;\n\t\tvar index = getTabIndex(container, tab);\n\t\t\n\t\tif (opts.onBeforeClose.call(container, title, index) == false) return;\n\t\t\n\t\tvar tab = getTab(container, which, true);\n\t\ttab.panel('options').tab.remove();\n\t\ttab.panel('destroy');\n\t\t\n\t\topts.onClose.call(container, title, index);\n\t\t\n//\t\tsetScrollers(container);\n\t\tsetSize(container);\n\t\t\n\t\t// remove the select history item\n\t\tvar his = [];\n\t\tfor(var i=0; i<selectHis.length; i++){\n\t\t\tvar tindex = selectHis[i];\n\t\t\tif (tindex != index){\n\t\t\t\this.push(tindex > index ? tindex-1 : tindex);\n\t\t\t}\n\t\t}\n\t\tstate.selectHis = his;\n\t\tvar selected = $(container).tabs('getSelected');\n\t\tif (!selected && his.length){\n\t\t\tindex = state.selectHis.pop();\n\t\t\t$(container).tabs('select', index);\n\t\t}\n\n\t\t// for(var i=0; i<selectHis.length; i++){\n\t\t// \tif (selectHis[i] == title){\n\t\t// \t\tselectHis.splice(i, 1);\n\t\t// \t\ti --;\n\t\t// \t}\n\t\t// }\n\t\t\n\t\t// // select the nearest tab panel\n\t\t// var hisTitle = selectHis.pop();\n\t\t// if (hisTitle){\n\t\t// \tselectTab(container, hisTitle);\n\t\t// } else if (tabs.length){\n\t\t// \tselectTab(container, 0);\n\t\t// }\n\t}\n\t\n\t/**\n\t * get the specified tab panel\n\t */\n\tfunction getTab(container, which, removeit){\n\t\tvar tabs = $.data(container, 'tabs').tabs;\n\t\tvar tab = null;\n\t\tif (typeof which == 'number'){\n\t\t\tif (which >=0 && which < tabs.length){\n\t\t\t\ttab = tabs[which];\n\t\t\t\tif (removeit){\n\t\t\t\t\ttabs.splice(which, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar tmp = $('<span></span>');\n\t\t\tfor(var i=0; i<tabs.length; i++){\n\t\t\t\tvar p = tabs[i];\n\t\t\t\ttmp.html(p.panel('options').title);\n\t\t\t\tvar title = tmp.text();\n\t\t\t\ttmp.html(which);\n\t\t\t\twhich = tmp.text();\n\t\t\t\tif (title == which){\n\t\t\t\t\ttab = p;\n\t\t\t\t\tif (removeit){\n\t\t\t\t\t\ttabs.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp.remove();\n\t\t}\n\t\treturn tab;\n\t}\n\t\n\tfunction getTabIndex(container, tab){\n\t\tvar tabs = $.data(container, 'tabs').tabs;\n\t\tfor(var i=0; i<tabs.length; i++){\n\t\t\tif (tabs[i][0] == $(tab)[0]){\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\t\n\tfunction getSelectedTab(container){\n\t\tvar tabs = $.data(container, 'tabs').tabs;\n\t\tfor(var i=0; i<tabs.length; i++){\n\t\t\tvar tab = tabs[i];\n\t\t\tif (tab.panel('options').tab.hasClass('tabs-selected')){\n\t\t\t\treturn tab;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\t\n\t/**\n\t * do first select action, if no tab is setted the first tab will be selected.\n\t */\n\tfunction doFirstSelect(container){\n\t\tvar state = $.data(container, 'tabs')\n\t\tvar tabs = state.tabs;\n\t\tfor(var i=0; i<tabs.length; i++){\n\t\t\tvar opts = tabs[i].panel('options');\n\t\t\tif (opts.selected && !opts.disabled){\n\t\t\t\tselectTab(container, i);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tselectTab(container, state.options.selected);\n\t}\n\t\n\tfunction selectTab(container, which){\n\t\tvar p = getTab(container, which);\n\t\tif (p && !p.is(':visible')){\n\t\t\tstopAnimate(container);\n\t\t\tif (!p.panel('options').disabled){\n\t\t\t\tp.panel('open');\t\t\t\t\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction unselectTab(container, which){\n\t\tvar p = getTab(container, which);\n\t\tif (p && p.is(':visible')){\n\t\t\tstopAnimate(container);\n\t\t\tp.panel('close');\n\t\t}\n\t}\n\n\tfunction stopAnimate(container){\n\t\t$(container).children('div.tabs-panels').each(function(){\n\t\t\t$(this).stop(true, true);\n\t\t});\n\t}\n\t\n\tfunction exists(container, which){\n\t\treturn getTab(container, which) != null;\n\t}\n\t\n\tfunction showHeader(container, visible){\n\t\tvar opts = $.data(container, 'tabs').options;\n\t\topts.showHeader = visible;\n\t\t$(container).tabs('resize');\n\t}\n\t\n\tfunction showTool(container, visible){\n\t\tvar tool = $(container).find('>.tabs-header>.tabs-tool');\n\t\tif (visible){\n\t\t\ttool.removeClass('tabs-tool-hidden').show();\n\t\t} else {\n\t\t\ttool.addClass('tabs-tool-hidden').hide();\n\t\t}\n\t\t$(container).tabs('resize').tabs('scrollBy', 0);\n\t}\n\t\n\t\n\t$.fn.tabs = function(options, param){\n\t\tif (typeof options == 'string') {\n\t\t\treturn $.fn.tabs.methods[options](this, param);\n\t\t}\n\t\t\n\t\toptions = options || {};\n\t\treturn this.each(function(){\n\t\t\tvar state = $.data(this, 'tabs');\n\t\t\tif (state) {\n\t\t\t\t$.extend(state.options, options);\n\t\t\t} else {\n\t\t\t\t$.data(this, 'tabs', {\n\t\t\t\t\toptions: $.extend({},$.fn.tabs.defaults, $.fn.tabs.parseOptions(this), options),\n\t\t\t\t\ttabs: [],\n\t\t\t\t\tselectHis: []\n\t\t\t\t});\n\t\t\t\twrapTabs(this);\n\t\t\t}\n\t\t\t\n\t\t\taddTools(this);\n\t\t\tsetProperties(this);\n\t\t\tsetSize(this);\n\t\t\tbindEvents(this);\n\t\t\t\n\t\t\tdoFirstSelect(this);\n\t\t});\n\t};\n\t\n\t$.fn.tabs.methods = {\n\t\toptions: function(jq){\n\t\t\tvar cc = jq[0];\n\t\t\tvar opts = $.data(cc, 'tabs').options;\n\t\t\tvar s = getSelectedTab(cc);\n\t\t\topts.selected = s ? getTabIndex(cc, s) : -1;\n\t\t\treturn opts;\n\t\t},\n\t\ttabs: function(jq){\n\t\t\treturn $.data(jq[0], 'tabs').tabs;\n\t\t},\n\t\tresize: function(jq, param){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetSize(this, param);\n\t\t\t\tsetSelectedSize(this);\n\t\t\t});\n\t\t},\n\t\tadd: function(jq, options){\n\t\t\treturn jq.each(function(){\n\t\t\t\taddTab(this, options);\n\t\t\t});\n\t\t},\n\t\tclose: function(jq, which){\n\t\t\treturn jq.each(function(){\n\t\t\t\tcloseTab(this, which);\n\t\t\t});\n\t\t},\n\t\tgetTab: function(jq, which){\n\t\t\treturn getTab(jq[0], which);\n\t\t},\n\t\tgetTabIndex: function(jq, tab){\n\t\t\treturn getTabIndex(jq[0], tab);\n\t\t},\n\t\tgetSelected: function(jq){\n\t\t\treturn getSelectedTab(jq[0]);\n\t\t},\n\t\tselect: function(jq, which){\n\t\t\treturn jq.each(function(){\n\t\t\t\tselectTab(this, which);\n\t\t\t});\n\t\t},\n\t\tunselect: function(jq, which){\n\t\t\treturn jq.each(function(){\n\t\t\t\tunselectTab(this, which);\n\t\t\t});\n\t\t},\n\t\texists: function(jq, which){\n\t\t\treturn exists(jq[0], which);\n\t\t},\n\t\tupdate: function(jq, options){\n\t\t\treturn jq.each(function(){\n\t\t\t\tupdateTab(this, options);\n\t\t\t});\n\t\t},\n\t\tenableTab: function(jq, which){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar opts = $(this).tabs('getTab', which).panel('options');\n\t\t\t\topts.tab.removeClass('tabs-disabled');\n\t\t\t\topts.disabled = false;\n\t\t\t});\n\t\t},\n\t\tdisableTab: function(jq, which){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar opts = $(this).tabs('getTab', which).panel('options');\n\t\t\t\topts.tab.addClass('tabs-disabled');\n\t\t\t\topts.disabled = true;\n\t\t\t});\n\t\t},\n\t\tshowHeader: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tshowHeader(this, true);\n\t\t\t});\n\t\t},\n\t\thideHeader: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tshowHeader(this, false);\n\t\t\t});\n\t\t},\n\t\tshowTool: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tshowTool(this, true);\n\t\t\t});\n\t\t},\n\t\thideTool: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tshowTool(this, false);\n\t\t\t});\n\t\t},\n\t\tscrollBy: function(jq, deltaX){\t// scroll the tab header by the specified amount of pixels\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar opts = $(this).tabs('options');\n\t\t\t\tvar wrap = $(this).find('>div.tabs-header>div.tabs-wrap');\n\t\t\t\tvar pos = Math.min(wrap._scrollLeft() + deltaX, getMaxScrollWidth());\n\t\t\t\twrap.animate({scrollLeft: pos}, opts.scrollDuration);\n\t\t\t\t\n\t\t\t\tfunction getMaxScrollWidth(){\n\t\t\t\t\tvar w = 0;\n\t\t\t\t\tvar ul = wrap.children('ul');\n\t\t\t\t\tul.children('li').each(function(){\n\t\t\t\t\t\tw += $(this).outerWidth(true);\n\t\t\t\t\t});\n\t\t\t\t\treturn w - wrap.width() + (ul.outerWidth() - ul.width());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\t\n\t$.fn.tabs.parseOptions = function(target){\n\t\treturn $.extend({}, $.parser.parseOptions(target, [\n\t\t\t'tools','toolPosition','tabPosition',\n\t\t\t{fit:'boolean',border:'boolean',plain:'boolean'},\n\t\t\t{headerWidth:'number',tabWidth:'number',tabHeight:'number',selected:'number'},\n\t\t\t{showHeader:'boolean',justified:'boolean',narrow:'boolean',pill:'boolean'}\n\t\t]));\n\t};\n\t\n\t$.fn.tabs.defaults = {\n\t\twidth: 'auto',\n\t\theight: 'auto',\n\t\theaderWidth: 150,\t// the tab header width, it is valid only when tabPosition set to 'left' or 'right' \n\t\ttabWidth: 'auto',\t// the tab width\n\t\t// tabHeight: 27,\t\t// the tab height\n\t\ttabHeight: 32,\t\t// the tab height\n\t\tselected: 0,\t\t// the initialized selected tab index\n\t\tshowHeader: true,\n\t\tplain: false,\n\t\tfit: false,\n\t\tborder: true,\n\t\tjustified: false,\n\t\tnarrow: false,\n\t\tpill: false,\n\t\ttools: null,\n\t\ttoolPosition: 'right',\t// left,right,top,bottom\n\t\ttabPosition: 'top',\t\t// possible values: top,bottom\n\t\tscrollIncrement: 100,\n\t\tscrollDuration: 400,\n\t\tonLoad: function(panel){},\n\t\tonSelect: function(title, index){},\n\t\tonUnselect: function(title, index){},\n\t\tonBeforeClose: function(title, index){},\n\t\tonClose: function(title, index){},\n\t\tonAdd: function(title, index){},\n\t\tonUpdate: function(title, index){},\n\t\tonContextMenu: function(e, title, index){}\n\t};\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/src/jquery.window.js",
    "content": "/**\n * EasyUI for jQuery 1.9.7\n * \n * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * window - EasyUI for jQuery\n * \n * Dependencies:\n * \t panel\n *   draggable\n *   resizable\n * \n */\n(function($){\n\tfunction moveWindow(target, param){\n\t\tvar state = $.data(target, 'window');\n\t\tif (param){\n\t\t\tif (param.left != null) state.options.left = param.left;\n\t\t\tif (param.top != null) state.options.top = param.top;\n\t\t}\n\t\t$(target).panel('move', state.options);\n\t\tif (state.shadow){\n\t\t\tstate.shadow.css({\n\t\t\t\tleft: state.options.left,\n\t\t\t\ttop: state.options.top\n\t\t\t});\n\t\t}\n\t}\n\t\n\t/**\n\t *  center the window only horizontally\n\t */\n\tfunction hcenter(target, tomove){\n\t\tvar opts = $.data(target, 'window').options;\n\t\tvar pp = $(target).window('panel');\n\t\tvar width = pp._outerWidth();\n\t\tif (opts.inline){\n\t\t\tvar parent = pp.parent();\n\t\t\topts.left = Math.ceil((parent.width() - width) / 2 + parent.scrollLeft());\n\t\t} else {\n\t\t\tvar scrollLeft = opts.fixed ? 0 : $(document).scrollLeft();\n\t\t\topts.left = Math.ceil(($(window)._outerWidth() - width) / 2 + scrollLeft);\n\t\t}\n\t\tif (tomove){moveWindow(target);}\n\t}\n\t\n\t/**\n\t * center the window only vertically\n\t */\n\tfunction vcenter(target, tomove){\n\t\tvar opts = $.data(target, 'window').options;\n\t\tvar pp = $(target).window('panel');\n\t\tvar height = pp._outerHeight();\n\t\tif (opts.inline){\n\t\t\tvar parent = pp.parent();\n\t\t\topts.top = Math.ceil((parent.height() - height) / 2 + parent.scrollTop());\n\t\t} else {\n\t\t\tvar scrollTop = opts.fixed ? 0 : $(document).scrollTop();\n\t\t\topts.top = Math.ceil(($(window)._outerHeight() - height) / 2 + scrollTop);\n\t\t}\n\t\tif (tomove){moveWindow(target);}\n\t}\n\n\tfunction create(target){\n\t\tvar state = $.data(target, 'window');\n\t\tvar opts = state.options;\n\t\tvar win = $(target).panel($.extend({}, state.options, {\n\t\t\tborder: false,\n\t\t\tdoSize: true,\t// size the panel, the property undefined in window component\n\t\t\tclosed: true,\t// close the panel\n\t\t\tcls: 'window ' + (!opts.border?'window-thinborder window-noborder ':(opts.border=='thin'?'window-thinborder ':'')) + (opts.cls || ''),\n\t\t\theaderCls: 'window-header ' + (opts.headerCls || ''),\n\t\t\tbodyCls: 'window-body ' + (opts.noheader ? 'window-body-noheader ' : ' ') + (opts.bodyCls||''),\n\t\t\t\n\t\t\tonBeforeDestroy: function(){\n\t\t\t\tif (opts.onBeforeDestroy.call(target) == false){return false;}\n\t\t\t\tif (state.shadow){state.shadow.remove();}\n\t\t\t\tif (state.mask){state.mask.remove();}\n\t\t\t},\n\t\t\tonClose: function(){\n\t\t\t\tif (state.shadow){state.shadow.hide();}\n\t\t\t\tif (state.mask){state.mask.hide();}\n\t\t\t\topts.onClose.call(target);\n\t\t\t},\n\t\t\tonOpen: function(){\n\t\t\t\tif (state.mask){\n\t\t\t\t\tstate.mask.css($.extend({\n\t\t\t\t\t\tdisplay:'block',\n\t\t\t\t\t\tzIndex: $.fn.window.defaults.zIndex++\n\t\t\t\t\t}, $.fn.window.getMaskSize(target)));\n\t\t\t\t}\n\t\t\t\tif (state.shadow){\n\t\t\t\t\tstate.shadow.css({\n\t\t\t\t\t\tdisplay:'block',\n\t\t\t\t\t\tposition: (opts.fixed ? 'fixed' : 'absolute'),\n\t\t\t\t\t\tzIndex: $.fn.window.defaults.zIndex++,\n\t\t\t\t\t\tleft: opts.left,\n\t\t\t\t\t\ttop: opts.top,\n\t\t\t\t\t\twidth: state.window._outerWidth(),\n\t\t\t\t\t\theight: state.window._outerHeight()\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tstate.window.css({\n\t\t\t\t\tposition: (opts.fixed ? 'fixed' : 'absolute'),\n\t\t\t\t\tzIndex: $.fn.window.defaults.zIndex++\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\topts.onOpen.call(target);\n\t\t\t},\n\t\t\tonResize: function(width, height){\n\t\t\t\tvar popts = $(this).panel('options');\n\t\t\t\t$.extend(opts, {\n\t\t\t\t\twidth: popts.width,\n\t\t\t\t\theight: popts.height,\n\t\t\t\t\tleft: popts.left,\n\t\t\t\t\ttop: popts.top\n\t\t\t\t});\n\t\t\t\tif (state.shadow){\n\t\t\t\t\tstate.shadow.css({\n\t\t\t\t\t\tleft: opts.left,\n\t\t\t\t\t\ttop: opts.top,\n\t\t\t\t\t\twidth: state.window._outerWidth(),\n\t\t\t\t\t\theight: state.window._outerHeight()\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\topts.onResize.call(target, width, height);\n\t\t\t},\n\t\t\tonMinimize: function(){\n\t\t\t\tif (state.shadow){state.shadow.hide();}\n\t\t\t\tif (state.mask){state.mask.hide();}\n\t\t\t\tstate.options.onMinimize.call(target);\n\t\t\t},\n\t\t\tonBeforeCollapse: function(){\n\t\t\t\tif (opts.onBeforeCollapse.call(target) == false){return false;}\n\t\t\t\tif (state.shadow){state.shadow.hide();}\n\t\t\t},\n\t\t\tonExpand: function(){\n\t\t\t\tif (state.shadow){state.shadow.show();}\n\t\t\t\topts.onExpand.call(target);\n\t\t\t}\n\t\t}));\n\t\t\n\t\tstate.window = win.panel('panel');\n\t\t\n\t\t// create mask\n\t\tif (state.mask){state.mask.remove();}\n\t\tif (opts.modal){\n\t\t\tstate.mask = $('<div class=\"window-mask\" style=\"display:none\"></div>').insertAfter(state.window);\n\t\t}\n\t\t\n\t\t// create shadow\n\t\tif (state.shadow){state.shadow.remove();}\n\t\tif (opts.shadow){\n\t\t\tstate.shadow = $('<div class=\"window-shadow\" style=\"display:none\"></div>').insertAfter(state.window);\n\t\t}\n\t\t\n\t\t// center and open the window\n\t\tvar closed = opts.closed;\n\t\tif (opts.left == null){hcenter(target);}\n\t\tif (opts.top == null){vcenter(target);}\n\t\tmoveWindow(target);\n\t\tif (!closed){win.window('open');}\n\t}\n\n\tfunction constrain(left, top, width, height){\n\t\tvar target = this;\n\t\tvar state = $.data(target, 'window');\n\t\tvar opts = state.options;\n\t\tif (!opts.constrain){return {};}\n\t\tif ($.isFunction(opts.constrain)){\n\t\t\treturn opts.constrain.call(target, left, top, width, height);\n\t\t}\n\t\tvar win = $(target).window('window');\n\t\tvar parent = opts.inline ? win.parent() : $(window);\n\t\tvar scrollTop = opts.fixed ? 0 : parent.scrollTop();\n\t\tif (left < 0){left = 0;}\n\t\tif (top < scrollTop){top = scrollTop;}\n\t\tif (left + width > parent.width()){\n\t\t\tif (width == win.outerWidth()){\t// moving\n\t\t\t\tleft = parent.width() - width;\n\t\t\t} else {\t// resizing\n\t\t\t\twidth = parent.width() - left;\n\t\t\t}\n\t\t}\n\t\tif (top - scrollTop + height > parent.height()){\n\t\t\tif (height == win.outerHeight()){\t// moving\n\t\t\t\ttop = parent.height() - height + scrollTop;\n\t\t\t} else {\t// resizing\n\t\t\t\theight = parent.height() - top + scrollTop;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tleft:left,\n\t\t\ttop:top,\n\t\t\twidth:width,\n\t\t\theight:height\n\t\t};\n\t}\n\t\n\t\n\t/**\n\t * set window drag and resize property\n\t */\n\tfunction setProperties(target){\n\t\tvar state = $.data(target, 'window');\n\t\tvar opts = state.options;\n\t\t\n\t\tstate.window.draggable({\n\t\t\thandle: '>div.panel-header>div.panel-title',\n\t\t\tdisabled: state.options.draggable == false,\n\t\t\tonBeforeDrag: function(e){\n\t\t\t\tif (state.mask) state.mask.css('z-index', $.fn.window.defaults.zIndex++);\n\t\t\t\tif (state.shadow) state.shadow.css('z-index', $.fn.window.defaults.zIndex++);\n\t\t\t\tstate.window.css('z-index', $.fn.window.defaults.zIndex++);\n\t\t\t},\n\t\t\tonStartDrag: function(e){\n\t\t\t\tstart1(e);\n\t\t\t},\n\t\t\tonDrag: function(e){\n\t\t\t\tproc1(e);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tonStopDrag: function(e){\n\t\t\t\tstop1(e, 'move');\n\t\t\t}\n\t\t});\n\t\t\n\t\tstate.window.resizable({\n\t\t\tdisabled: state.options.resizable == false,\n\t\t\tonStartResize:function(e){\n\t\t\t\tstart1(e);\n\t\t\t},\n\t\t\tonResize: function(e){\n\t\t\t\tproc1(e);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tonStopResize: function(e){\n\t\t\t\tstop1(e, 'resize');\n\t\t\t}\n\t\t});\n\n\t\tfunction start1(e){\n\t\t\tstate.window.css('position', opts.fixed ? 'fixed' : 'absolute');\n\t\t\tif (state.shadow){\n\t\t\t\tstate.shadow.css('position', opts.fixed ? 'fixed' : 'absolute');\n\t\t\t}\n\t\t\tif (state.pmask){state.pmask.remove();}\n\t\t\tstate.pmask = $('<div class=\"window-proxy-mask\"></div>').insertAfter(state.window);\n\t\t\tstate.pmask.css({\n\t\t\t\tdisplay: 'none',\n\t\t\t\tposition: (opts.fixed ? 'fixed' : 'absolute'),\n\t\t\t\tzIndex: $.fn.window.defaults.zIndex++,\n\t\t\t\tleft: e.data.left,\n\t\t\t\ttop: e.data.top,\n\t\t\t\twidth: state.window._outerWidth(),\n\t\t\t\theight: state.window._outerHeight()\n\t\t\t});\n\t\t\tif (state.proxy){state.proxy.remove();}\n\t\t\tstate.proxy = $('<div class=\"window-proxy\"></div>').insertAfter(state.window);\n\t\t\tstate.proxy.css({\n\t\t\t\tdisplay: 'none',\n\t\t\t\tposition: (opts.fixed ? 'fixed' : 'absolute'),\n\t\t\t\tzIndex: $.fn.window.defaults.zIndex++,\n\t\t\t\tleft: e.data.left,\n\t\t\t\ttop: e.data.top\n\t\t\t});\n\t\t\tstate.proxy._outerWidth(e.data.width)._outerHeight(e.data.height);\n\t\t\tstate.proxy.hide();\n\t\t\tsetTimeout(function(){\n\t\t\t\tif (state.pmask){state.pmask.show();}\n\t\t\t\tif (state.proxy){state.proxy.show();}\n\t\t\t}, 500);\n\t\t}\n\t\tfunction proc1(e){\n\t\t\t$.extend(e.data, constrain.call(target, e.data.left, e.data.top, e.data.width, e.data.height));\n\t\t\tstate.pmask.show();\n\t\t\tstate.proxy.css({\n\t\t\t\tdisplay: 'block',\n\t\t\t\tleft: e.data.left,\n\t\t\t\ttop: e.data.top\n\t\t\t});\n\t\t\tstate.proxy._outerWidth(e.data.width);\n\t\t\tstate.proxy._outerHeight(e.data.height);\n\t\t}\n\t\tfunction stop1(e, method){\n\t\t\tstate.window.css('position', opts.fixed ? 'fixed' : 'absolute');\n\t\t\tif (state.shadow){\n\t\t\t\tstate.shadow.css('position', opts.fixed ? 'fixed' : 'absolute');\n\t\t\t}\n\t\t\t$.extend(e.data, constrain.call(target, e.data.left, e.data.top, e.data.width+0.1, e.data.height+0.1));\n\t\t\t$(target).window(method, e.data);\n\t\t\tstate.pmask.remove();\n\t\t\tstate.pmask = null;\n\t\t\tstate.proxy.remove();\n\t\t\tstate.proxy = null;\n\t\t}\n\t}\n\t\t\n\t// when window resize, reset the width and height of the window's mask\n\t$(function(){\n\t\tif (!$._positionFixed){\n\t\t\t$(window).resize(function(){\n\t\t\t\t$('body>div.window-mask:visible').css({\n\t\t\t\t\twidth: '',\n\t\t\t\t\theight: ''\n\t\t\t\t});\n\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t$('body>div.window-mask:visible').css($.fn.window.getMaskSize());\n\t\t\t\t}, 50);\n\t\t\t});\n\t\t}\n\t});\n\t\n\t$.fn.window = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\tvar method = $.fn.window.methods[options];\n\t\t\tif (method){\n\t\t\t\treturn method(this, param);\n\t\t\t} else {\n\t\t\t\treturn this.panel(options, param);\n\t\t\t}\n\t\t}\n\t\t\n\t\toptions = options || {};\n\t\treturn this.each(function(){\n\t\t\tvar state = $.data(this, 'window');\n\t\t\tif (state){\n\t\t\t\t$.extend(state.options, options);\n\t\t\t} else {\n\t\t\t\tstate = $.data(this, 'window', {\n\t\t\t\t\toptions: $.extend({}, $.fn.window.defaults, $.fn.window.parseOptions(this), options)\n\t\t\t\t});\n\t\t\t\tif (!state.options.inline){\n\t\t\t\t\tdocument.body.appendChild(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcreate(this);\n\t\t\tsetProperties(this);\n\t\t});\n\t};\n\t\n\t$.fn.window.methods = {\n\t\toptions: function(jq){\n\t\t\tvar popts = jq.panel('options');\n\t\t\tvar wopts = $.data(jq[0], 'window').options;\n\t\t\treturn $.extend(wopts, {\n\t\t\t\tclosed: popts.closed,\n\t\t\t\tcollapsed: popts.collapsed,\n\t\t\t\tminimized: popts.minimized,\n\t\t\t\tmaximized: popts.maximized\n\t\t\t});\n\t\t},\n\t\twindow: function(jq){\n\t\t\treturn $.data(jq[0], 'window').window;\n\t\t},\n\t\tmove: function(jq, param){\n\t\t\treturn jq.each(function(){\n\t\t\t\tmoveWindow(this, param);\n\t\t\t});\n\t\t},\n\t\thcenter: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\thcenter(this, true);\n\t\t\t});\n\t\t},\n\t\tvcenter: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvcenter(this, true);\n\t\t\t});\n\t\t},\n\t\tcenter: function(jq){\n\t\t\treturn jq.each(function(){\n\t\t\t\thcenter(this);\n\t\t\t\tvcenter(this);\n\t\t\t\tmoveWindow(this);\n\t\t\t});\n\t\t}\n\t};\n\n\t$.fn.window.getMaskSize = function(target){\n\t\tvar state = $(target).data('window');\n\t\tif (state && state.options.inline){\n\t\t\treturn {};\n\t\t} else if ($._positionFixed){\n\t\t\treturn {position: 'fixed'};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\twidth: $(document).width(),\n\t\t\t\theight: $(document).height()\n\t\t\t};\n\t\t}\n\t};\n\t\n\t$.fn.window.parseOptions = function(target){\n\t\treturn $.extend({}, $.fn.panel.parseOptions(target), $.parser.parseOptions(target, [\n\t\t\t{draggable:'boolean',resizable:'boolean',shadow:'boolean',modal:'boolean',inline:'boolean'}\n\t\t]));\n\t};\n\t\n\t// Inherited from $.fn.panel.defaults\n\t$.fn.window.defaults = $.extend({}, $.fn.panel.defaults, {\n\t\tzIndex: 9000,\n\t\tdraggable: true,\n\t\tresizable: true,\n\t\tshadow: true,\n\t\tmodal: false,\n\t\tborder: true,\t// possible values are: true,false,'thin','thick'\n\t\tinline: false,\t// true to stay inside its parent, false to go on top of all elements\n\t\t\n\t\t// window's property which difference from panel\n\t\ttitle: 'New Window',\n\t\tcollapsible: true,\n\t\tminimizable: true,\n\t\tmaximizable: true,\n\t\tclosable: true,\n\t\tclosed: false,\n\t\tfixed: false,\n\t\tconstrain: false\n\t\t/*\n\t\tconstrain: function(left,top,width,height){\n\t\t\treturn {\n\t\t\t\tleft:left,\n\t\t\t\ttop:top,\n\t\t\t\twidth:width,\n\t\t\t\theight:height\n\t\t\t};\n\t\t}\n\t\t*/\n\t});\n})(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/angular.css",
    "content": "*{\n\tbox-sizing: border-box;\n}\n.f-block{\n\tdisplay: block;\n\tposition: relative;\n}\n.f-row{\n\tdisplay: -webkit-box;\n\tdisplay: -webkit-flex;\n\tdisplay: -moz-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\tposition: relative;\n}\n.f-column{\n\tdisplay: -webkit-box;\n\tdisplay: -webkit-flex;\n\tdisplay: -moz-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-direction: normal;\n\t-webkit-box-orient: vertical;\n\t-webkit-flex-direction: column;\n\t-moz-flex-direction: column;\n\t-ms-flex-direction: column;\n\tflex-direction: column;\n\tposition: relative;\n}\n.f-inline-row{\n\twhite-space: nowrap;\n\tdisplay: -webkit-inline-box;\n\tdisplay: -ms-inline-box;\n\tdisplay: inline-flex;\n\tvertical-align: middle;\n\tposition: relative;\n\talign-items: stretch;\n\t-webkit-tap-highlight-color: transparent;\n}\n.f-content-center{\n\t-webkit-box-pack: center;\n\t-ms-flex-pack: center;\n\t-webkit-justify-content: center;\n\t-moz-justify-content: center;\n\tjustify-content: center;\n\t-webkit-box-align: center;\n\t-ms-flex-align: center;\n\t-webkit-align-items: center;\n\t-moz-align-items: center;\n\talign-items: center;\n}\n.f-full{\n\t-webkit-box-flex: 1 1 auto;\n\t-ms-flex: 1 1 auto;\n\tflex: 1 1 auto;\n}\n.f-hide{\n\tdisplay: none;\n}\n.f-order0{\n\torder: 0;\n}\n.f-order1{\n\torder: 1;\n}\n.f-order2{\n\torder: 2;\n}\n.f-order3{\n\torder: 3;\n}\n.f-order4{\n\torder: 4;\n}\n.f-order5{\n\torder: 5;\n}\n.f-order6{\n\torder: 6;\n}\n.f-order7{\n\torder: 7;\n}\n.f-order8{\n\torder: 8;\n}\n.f-noshrink{\n\t-webkit-flex-shrink: 0;\n\t-moz-flex-shrink: 0;\n\t-ms-flex-negative: 0;\n\tflex-shrink: 0;\n}\n.f-animate{\n    transition: all .3s;\n}\n\n.scroll-body{\n\toverflow: auto;\n\tposition: relative;\n}\n\n.textbox .textbox-text{\n\twidth: 100%;\n\theight: auto;\n\toverflow: hidden;\n}\n.textbox-addon{\n\talign-items: center;\n}\n.textbox-disabled>.textbox-addon .textbox-icon,\n.textbox-readonly>.textbox-addon .textbox-icon{\n\tcursor: default;\n}\n.textbox-disabled>.textbox-addon .textbox-icon:hover,\n.textbox-readonly>.textbox-addon .textbox-icon:hover{\n\topacity: 0.6;\n\tcursor: default;\n}\n.textbox-addon .textbox-icon{\n\twidth: 26px;\n\theight: 18px;\n}\n\n.spinner .textbox-text{\n\theight: auto;\n}\n.spinner-button-left,.spinner-button-right{\n\twidth: 26px;\n}\n.spinner-button-updown{\n\twidth: 26px;\n}\n.spinner-button-top,.spinner-button-bottom{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 26px;\n}\n.spinner-button-top{\n\ttop: 0;\n}\n.spinner-button-bottom{\n\ttop: auto;\n\tbottom: 0;\n}\n.spinner-button{\n\tdisplay: inline-block;\n\tposition: absolute;\n\twidth: 16px;\n\theight: 16px;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.spinner-arrow{\n\tcursor: pointer;\n\topacity: 0.6;\n}\n\n.textbox-disabled .spinner-arrow:hover,\n.textbox-readonly .spinner-arrow:hover\n{\n\topacity: 0.6;\n\tcursor: default;\n}\n.textbox-readonly .spinner-arrow .spinner-arrow-up:hover,\n.textbox-disabled .spinner-arrow .spinner-arrow-up:hover,\n.textbox-readonly .spinner-arrow .spinner-arrow-down:hover,\n.textbox-disabled .spinner-arrow .spinner-arrow-down:hover\n{\n\tcursor: default;\n}\n\n.l-btn{\n\twidth: 100%;\n}\n.l-btn-empty{\n\theight: 28px;\n}\n.l-btn-large .l-btn-empty{\n\theight: 44px;\n}\n.l-btn-left{\n\toverflow: visible;\n}\n.m-btn .l-btn-left .m-btn-line{\n\ttop: -100px;\n\twidth: 36px;\n\tright: -20px;\n}\neui-button-group eui-linkbutton.f-inline-row{\n\tmargin-left: -1px;\n}\neui-button-group .l-btn:hover{\n\tz-index: 99;\n}\neui-button-group eui-linkbutton:not(:first-child):not(:last-child) .l-btn{\n\tborder-radius: 0;\n}\neui-button-group eui-linkbutton:first-child .l-btn{\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\neui-button-group eui-linkbutton:last-child .l-btn{\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n}\n\n.switchbutton-on,.switchbutton-off{\n\tposition: absolute;\n\tleft: 0;\n\twidth: calc(100% - 15px);\n\theight: 100%;\n}\n.switchbutton-on span,.switchbutton-off span,.switchbutton-handle span{\n\theight: 100%;\n}\n.switchbutton-on span{\n\ttext-indent: -15px;\n}\n.switchbutton-off span{\n\ttext-indent: 15px;\n}\n.switchbutton-off{\n\tleft: calc(100% - 15px);\n}\n.switchbutton-handle{\n\twidth: 30px;\n\tleft: auto;\n\tright: 0;\n\tz-index: 9;\n}\n.switchbutton-inner{\n\ttransition: all 200ms ease-out;\n\toverflow: visible;\n\tposition: absolute;\n\twidth: 100%;\n\ttop: -1px;\n\tbottom: -1px;\n\tleft: calc(-100% + 30px);\n\tright: auto;\n}\n.switchbutton-checked .switchbutton-inner{\n\tleft: 0;\n}\n.draggable-reverting{\n\ttransition: all 200ms ease-out;\n}\n.slider-h .slider-tip{\n\ttransform: translateX(-50%);\n}\n.slider-h .slider-rulelabel span{\n\ttransform: translateX(-50%);\n}\n.slider-v .slider-tip{\n\tmargin-top: 0;\n\ttransform: translate(-100%,-50%);\n}\n.slider-v .slider-rulelabel span{\n\ttransform: translateY(-50%);\n}\n.slider-v .slider-inner{\n\theight: auto;\n}\n\n\n.panel{\n\tposition:relative;\n}\n.panel-title{\n\theight: 20px;\n\tline-height: 20px;\n}\n.panel-footer-fixed{\n\tposition:absolute;\n\twidth:100%;\n\tbottom:0;\n}\n.window{\n\tposition: absolute;\n}\n.window-mask{\n\tposition: fixed;\n}\n.window .window-footer{\n\ttop: 0;\n}\n.dialog-toolbar{\n\tborder-width: 0 0 1px 0;\n}\n.dialog-button{\n\tborder-width: 1px 0 0 0;\n\ttop: 0;\n}\n\n.tabs{\n\twidth: 100%;\n\theight: auto;\n}\n.tabs-scrollable{\n\ttransition: left 400ms, right 400ms;\n\tposition: absolute;\n\twidth: auto;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.tabs li{\n\tdisplay: inherit;\n}\n.tabs li a.tabs-inner{\n\theight: auto;\n\tline-height: normal;\n\tdisplay: inherit;\n\toverflow: hidden;\n}\n.tabs-title{\n\tdisplay: inherit;\n\talign-items: center;\n\tline-height: normal;\n}\n.tabs-close{\n\toutline: none;\n}\n.tabs-scroller-left,.tabs-scroller-right{\n\tposition: relative;\n\tdisplay: block;\n\twidth: 21px;\n\theight: 100%;\n}\n.tabs-header-left .tabs li{\n\tright: -1px;\n}\n.tabs-header-left .tabs li,.tabs-header-right .tabs li,\n.tabs-header-left .tabs li a.tabs-inner,\n.tabs-header-right .tabs li a.tabs-inner{\n\tdisplay: inherit;\n}\n\n.combo-panel{\n\tposition: absolute;\n\theight: 200px;\n\tz-index: 9999;\n}\n.combo-panel eui-virtual-scroll,\n.combo-panel eui-datagrid,\n.combo-panel eui-treegrid{\n\twidth: 100%;\n\theight: 100%;\n}\n.combobox-item{\n\tpadding: 6px 4px;\n\tline-height: 20px;\n}\n.tagbox-labels{\n\tpadding-bottom: 4px;\n}\n.tagbox-label{\n\theight: 20px;\n\tline-height: 20px;\n}\n.tagbox .textbox-text{\n\twidth: 50px;\n\tmax-width: 100%;\n\tmargin-top: 4px;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n\theight: 20px;\n\tline-height: 20px;\n}\n\n.datagrid,eui-datagrid,\neui-datagrid-view,eui-datagrid-body,\neui-treegrid-view,eui-treegrid-body{\n\toverflow: hidden;\n}\n.datagrid-view,.datagrid-view1,.datagrid-view2{\n\tposition: relative;\n}\n.datagrid-vbody{\n\toverflow: hidden;\n}\n.datagrid-view3{\n\tmargin-left: -1px;\n}\n.datagrid-view3 .datagrid-body{\n\toverflow: hidden;\n}\n.datagrid-view3 .datagrid-body-inner{\n\tpadding-bottom: 20px;\n}\n.datagrid-view3 .datagrid-header td,\n.datagrid-view3 .datagrid-body td,\n.datagrid-view3 .datagrid-footer td {\n\tborder-width: 0 0 1px 1px;\n}\n.datagrid-htable,.datagrid-btable,.datagrid-ftable{\n\ttable-layout: fixed;\n\twidth: 100%;\n}\n.datagrid-htable{\n\theight: 100%;\n}\n.datagrid-header .datagrid-header,\n.datagrid-footer .datagrid-header{\n\tborder-width: 0 0 0 1px;\n}\n.datagrid-header-inner,.datagrid-footer-inner{\n\toverflow: hidden;\n}\n.datagrid-header-row, .datagrid-row{\n\theight: 32px;\n}\n.datagrid-cell{\n\ttext-align: left;\n\theight: auto;\n\tfont-size: inherit;\n}\n.datagrid-cell-group{\n\ttext-align: center;\n}\n.datagrid .datagrid-pager{\n\tpadding: 2px 4px;\n\tdisplay: inherit;\n}\n.datagrid-loading{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\tjustify-content: center;\n\talign-items: center;\n}\n.datagrid-mask{\n\tdisplay: block;\n}\n.datagrid-mask-msg{\n\tdisplay: block;\n\tposition: static;\n\tline-height: 36px;\n\theight: 40px;\n\tmargin: 0;\n\tpadding: 0 5px 0 30px;\n\tz-index: 9;\n}\n.datagrid-body .datagrid-td-group{\n\tborder-left-color: transparent;\n\tborder-right-color: transparent;\n}\n.datagrid-group-expander{\n\tcursor: pointer;\n}\n.datagrid-row-expander{\n\tdisplay: inline-block;\n\twidth: 16px;\n\theight: 18px;\n\tcursor: pointer;\n}\n.datagrid-group-title{\n\talign-self: center;\n\tpadding: 0 4px;\n\twhite-space: nowrap;\n\tword-break: normal;\n\tposition: relative;\n}\n.datagrid-editable> .f-field,\n.datagrid-editable> *{\n\twidth: 100%;\n\theight: 31px;\n}\n.datagrid-editable .textbox, .datagrid-editable .textbox-text{\n\tborder-radius: 0;\n}\n.datagrid-filter-row .textbox{\n\tborder-radius: 0;\n}\n.datagrid-filter-c{\n\tpadding: 4px;\n\theight: 38px;\n}\n.datagrid-filter-c> .f-field,\n.datagrid-filter-c> *{\n\theight: 30px;\n}\n.datagrid-filter-c .datagrid-editable-input{\n\twidth: 100%;\n}\n.datagrid-filter-btn{\n\twidth: 30px;\n}\n.datagrid-filter-btn .textbox-icon{\n\twidth: 28px;\n}\n.datagrid-filter-btn .textbox{\n\tbackground-color: transparent;\n}\n.datagrid-filter-btn-left{\n\tmargin-right: 4px;\n}\n.datagrid-filter-btn-right{\n\tmargin-left: 4px;\n}\n\neui-menu.menu-inline{\n\tposition: relative;\n\tdisplay: inline;\n\tmargin: 0;\n\tpadding: 0;\n}\neui-menu> .menu-container{\n\tposition: relative;\n}\n.menu-container{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tmin-width: 200px;\n}\n.menu{\n\toverflow: visible;\n}\n.menu-shadow{\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.menu-item{\n\toverflow: visible;\n}\n.menu-text{\n\theight: 32px;\n\tline-height: 32px;\n\tfloat: none;\n}\n.menu-line{\n\tz-index: 9999999;\n\theight: 100%;\n}\n.menu-active{\n\tz-index: 99999999;\n}\n\n.progressbar-value{\n\toverflow: visible;\n}\n\n.searchbox .textbox-button,\n.searchbox .textbox-button:hover{\n\tposition: inherit;\n}\n\n.calendar-content{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.calendar-menu{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n}\n.calendar-menu-month-inner{\n\tposition: relative;\n}\n\n.f-field{\n\twidth: 12em;\n\theight: 30px;\n}\neui-tagbox{\n\twidth: 12em;\n\theight: auto;\n\tmin-height: 30px;\n}\neui-switchbutton{\n\twidth: 70px;\n\theight: 30px;\n}\neui-radiobutton{\n\twidth: 20px;\n\theight: 20px;\n}\neui-checkbox{\n\twidth: 20px;\n\theight: 20px;\n}\neui-progressbar{\n\theight: 24px;\n}\neui-pagination{\n\theight: 34px;\n\tpadding: 2px;\n}\neui-layout{\n\tdisplay: block;\n}\n.layout{\n\theight: 100%;\n}\n.layout-animate{\n\ttransition: transform 400ms;\n}\n.layout-panel-north,.layout-panel-south{\n\tposition: absolute;\n\twidth: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.layout-panel-south{\n\ttop: auto;\n\tbottom: 0;\n}\n.layout-panel-west,.layout-panel-east{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tbottom: 0;\n}\n.layout-panel-east{\n\tleft: auto;\n\tright: 0;\n}\n.layout-panel-west.layout-collapsed{\n\ttransform: translate3d(-100%, 0, 0);\n}\n.layout-panel-east.layout-collapsed{\n\ttransform: translate3d(100%, 0, 0)\n}\n.layout-panel-north.layout-collapsed{\n\ttransform: translate3d(0, -100%, 0)\n}\n.layout-panel-south.layout-collapsed{\n\ttransform: translate3d(0, 100%, 0)\n}\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/accordion.css",
    "content": ".accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #666;\n  border-color: #000;\n}\n.accordion .accordion-header {\n  background: #3d3d3d;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #0052A3;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #fff;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #3d3d3d;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #666;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #000;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #3d3d3d;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #666;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #000;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #3d3d3d;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #666;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/calendar.css",
    "content": ".calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #ffffff;\n}\n.calendar-day {\n  color: #fff;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #000;\n}\n.calendar {\n  border-color: #000;\n}\n.calendar-header {\n  background: #3d3d3d;\n}\n.calendar-body,\n.calendar-menu {\n  background: #666;\n}\n.calendar-body th {\n  background: #555;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #777;\n  color: #fff;\n}\n.calendar-hover {\n  border: 1px solid #555;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #0052A3;\n  color: #fff;\n  border: 1px solid #00458a;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #3d3d3d;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/checkbox.css",
    "content": ".checkbox {\n  position: relative;\n  border: 2px solid #00458a;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #00458a;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/combo.css",
    "content": ".combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #666;\n}\n.combo-arrow {\n  background-color: #3d3d3d;\n}\n.combo-arrow-hover {\n  background-color: #777;\n}\n.combo-arrow:hover {\n  background-color: #777;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/combobox.css",
    "content": ".combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #777;\n  color: #fff;\n}\n.combobox-item-selected {\n  background-color: #0052A3;\n  color: #fff;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/datagrid.css",
    "content": ".datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #444;\n  border-right: 1px solid #777;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #000;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #666 url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #444;\n  background: -webkit-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%);\n  background: -moz-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%);\n  background: -o-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%);\n  background: linear-gradient(to bottom,#4c4c4c 0,#3f3f3f 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4c4c4c,endColorstr=#3f3f3f,GradientType=0);\n}\n.datagrid-cell-rownumber {\n  color: #fff;\n}\n.datagrid-resize-proxy {\n  background: #cccccc;\n}\n.datagrid-mask {\n  background: #000;\n}\n.datagrid-mask-msg {\n  border-color: #000;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #555;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #222;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #222;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #fff;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #555;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #777;\n  color: #fff;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #0052A3;\n  color: #fff;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #00458a;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #00458a;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/datalist.css",
    "content": ".datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #444;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #222;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #fff;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #222;\n}\n.m-list li>a:hover {\n  background: #777;\n  color: #fff;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/datebox.css",
    "content": ".datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #555;\n}\n.datebox-button a {\n  color: #fff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/dialog.css",
    "content": ".dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #444;\n  border-right: 1px solid #777;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #555;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #000 #000 #222 #000;\n}\n.dialog-button {\n  border-color: #222 #000 #000 #000;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #555;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/easyui.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #777;\n  -moz-border-radius: 3px 3px 3px 3px;\n  -webkit-border-radius: 3px 3px 3px 3px;\n  border-radius: 3px 3px 3px 3px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #000;\n}\n.panel-header {\n  background-color: #3d3d3d;\n  background: -webkit-linear-gradient(top,#454545 0,#383838 100%);\n  background: -moz-linear-gradient(top,#454545 0,#383838 100%);\n  background: -o-linear-gradient(top,#454545 0,#383838 100%);\n  background: linear-gradient(to bottom,#454545 0,#383838 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0);\n  color: #fff;\n}\n.panel-body {\n  background-color: #666;\n  color: #fff;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #fff;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #000;\n  overflow: hidden;\n  background: #555;\n  color: #fff;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n.accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #666;\n  border-color: #000;\n}\n.accordion .accordion-header {\n  background: #3d3d3d;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #0052A3;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #fff;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #3d3d3d;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #666;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #000;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #3d3d3d;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #666;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #000;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #3d3d3d;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #666;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #000;\n}\n.window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.window-shadow {\n  background: #777;\n  -moz-box-shadow: 2px 2px 3px #787878;\n  -webkit-box-shadow: 2px 2px 3px #787878;\n  box-shadow: 2px 2px 3px #787878;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #000;\n}\n.window {\n  background-color: #3d3d3d;\n  background: -webkit-linear-gradient(top,#454545 0,#383838 20%);\n  background: -moz-linear-gradient(top,#454545 0,#383838 20%);\n  background: -o-linear-gradient(top,#454545 0,#383838 20%);\n  background: linear-gradient(to bottom,#454545 0,#383838 20%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0);\n}\n.window-proxy {\n  border: 1px dashed #000;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #000;\n}\n.window .panel-footer {\n  border: 1px solid #000;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n.dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #444;\n  border-right: 1px solid #777;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #555;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #000 #000 #222 #000;\n}\n.dialog-button {\n  border-color: #222 #000 #000 #000;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #555;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #fff;\n  background: #777;\n  background-repeat: repeat-x;\n  border: 1px solid #555;\n  background: -webkit-linear-gradient(top,#919191 0,#6a6a6a 100%);\n  background: -moz-linear-gradient(top,#919191 0,#6a6a6a 100%);\n  background: -o-linear-gradient(top,#919191 0,#6a6a6a 100%);\n  background: linear-gradient(to bottom,#919191 0,#6a6a6a 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#919191,endColorstr=#6a6a6a,GradientType=0);\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn:hover {\n  background: #777;\n  color: #fff;\n  border: 1px solid #555;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #555;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #777;\n  color: #fff;\n  border: 1px solid #555;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #777;\n  color: #fff;\n  background: -webkit-linear-gradient(top,#919191 0,#6a6a6a 100%);\n  background: -moz-linear-gradient(top,#919191 0,#6a6a6a 100%);\n  background: -o-linear-gradient(top,#919191 0,#6a6a6a 100%);\n  background: linear-gradient(to bottom,#919191 0,#6a6a6a 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#919191,endColorstr=#6a6a6a,GradientType=0);\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #000;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #000;\n}\n.textbox {\n  position: relative;\n  border: 1px solid #000;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #000000;\n  -moz-box-shadow: 0 0 3px 0 #000;\n  -webkit-box-shadow: 0 0 3px 0 #000;\n  box-shadow: 0 0 3px 0 #000;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n.passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n.filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n.combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #666;\n}\n.combo-arrow {\n  background-color: #3d3d3d;\n}\n.combo-arrow-hover {\n  background-color: #777;\n}\n.combo-arrow:hover {\n  background-color: #777;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n.combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #777;\n  color: #fff;\n}\n.combobox-item-selected {\n  background-color: #0052A3;\n  color: #fff;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n.tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #777;\n  color: #fff;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #cccccc;\n}\n.layout-split-north {\n  border-bottom: 5px solid #444;\n}\n.layout-split-south {\n  border-top: 5px solid #444;\n}\n.layout-split-east {\n  border-left: 5px solid #444;\n}\n.layout-split-west {\n  border-right: 5px solid #444;\n}\n.layout-expand {\n  background-color: #3d3d3d;\n}\n.layout-expand-over {\n  background-color: #3d3d3d;\n}\n.tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 0 0;\n  -webkit-border-radius: 5px 5px 0 0;\n  border-radius: 5px 5px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 5px 5px;\n  -webkit-border-radius: 0 0 5px 5px;\n  border-radius: 0 0 5px 5px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #3d3d3d url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #3d3d3d url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #777;\n  color: #fff;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #666;\n  color: #fff;\n  background: -webkit-linear-gradient(top,#454545 0,#666 100%);\n  background: -moz-linear-gradient(top,#454545 0,#666 100%);\n  background: -o-linear-gradient(top,#454545 0,#666 100%);\n  background: linear-gradient(to bottom,#454545 0,#666 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#666,GradientType=0);\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(top,#666 0,#454545 100%);\n  background: -moz-linear-gradient(top,#666 0,#454545 100%);\n  background: -o-linear-gradient(top,#666 0,#454545 100%);\n  background: linear-gradient(to bottom,#666 0,#454545 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#666,endColorstr=#454545,GradientType=0);\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#454545 0,#666 100%);\n  background: -moz-linear-gradient(left,#454545 0,#666 100%);\n  background: -o-linear-gradient(left,#454545 0,#666 100%);\n  background: linear-gradient(to right,#454545 0,#666 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#666,GradientType=1);\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#666 0,#454545 100%);\n  background: -moz-linear-gradient(left,#666 0,#454545 100%);\n  background: -o-linear-gradient(left,#666 0,#454545 100%);\n  background: linear-gradient(to right,#666 0,#454545 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#666,endColorstr=#454545,GradientType=1);\n}\n.tabs li .tabs-inner {\n  color: #fff;\n  background-color: #3d3d3d;\n  background: -webkit-linear-gradient(top,#454545 0,#383838 100%);\n  background: -moz-linear-gradient(top,#454545 0,#383838 100%);\n  background: -o-linear-gradient(top,#454545 0,#383838 100%);\n  background: linear-gradient(to bottom,#454545 0,#383838 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0);\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #3d3d3d;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #000;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #777;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #666;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #666;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #666;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #666;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #0052A3;\n  color: #fff;\n  filter: none;\n  border-color: #000;\n}\n.datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #444;\n  border-right: 1px solid #777;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #000;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #666 url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #444;\n  background: -webkit-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%);\n  background: -moz-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%);\n  background: -o-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%);\n  background: linear-gradient(to bottom,#4c4c4c 0,#3f3f3f 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4c4c4c,endColorstr=#3f3f3f,GradientType=0);\n}\n.datagrid-cell-rownumber {\n  color: #fff;\n}\n.datagrid-resize-proxy {\n  background: #cccccc;\n}\n.datagrid-mask {\n  background: #000;\n}\n.datagrid-mask-msg {\n  border-color: #000;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #555;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #222;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #222;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #fff;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #555;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #777;\n  color: #fff;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #0052A3;\n  color: #fff;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #00458a;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #00458a;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #222;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #3d3d3d;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #222;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #3d3d3d;\n}\n.datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #444;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #222;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #fff;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #222;\n}\n.m-list li>a:hover {\n  background: #777;\n  color: #fff;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n.pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #444;\n  border-right: 1px solid #777;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #000;\n}\n.calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #ffffff;\n}\n.calendar-day {\n  color: #fff;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #000;\n}\n.calendar {\n  border-color: #000;\n}\n.calendar-header {\n  background: #3d3d3d;\n}\n.calendar-body,\n.calendar-menu {\n  background: #666;\n}\n.calendar-body th {\n  background: #555;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #777;\n  color: #fff;\n}\n.calendar-hover {\n  border: 1px solid #555;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #0052A3;\n  color: #fff;\n  border: 1px solid #00458a;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #3d3d3d;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n.datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #555;\n}\n.datebox-button a {\n  color: #fff;\n}\n.spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #3d3d3d;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #fff;\n  outline-style: none;\n  background-color: #3d3d3d;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #777;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #777;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #3d3d3d;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #3d3d3d;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #3d3d3d;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n.progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.progressbar {\n  border-color: #000;\n}\n.progressbar-text {\n  color: #fff;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #0052A3;\n  color: #fff;\n}\n.searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #3d3d3d;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #000;\n  background: #3d3d3d;\n}\n.slider-rule span {\n  border-color: #000;\n}\n.slider-rulelabel span {\n  color: #fff;\n}\n.menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #777;\n  -moz-box-shadow: 2px 2px 3px #787878;\n  -webkit-box-shadow: 2px 2px 3px #787878;\n  box-shadow: 2px 2px 3px #787878;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #444;\n  border-right: 1px solid #777;\n}\n.menu-sep {\n  border-top: 1px solid #444;\n  border-bottom: 1px solid #777;\n}\n.menu {\n  background-color: #666;\n  border-color: #444;\n  color: #fff;\n}\n.menu-content {\n  background: #666;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #666;\n}\n.menu-active {\n  border-color: #555;\n  color: #fff;\n  background: #777;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #fff;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #777;\n  color: #fff;\n  border: 1px solid #555;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #cccccc;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #555;\n  background-color: #777;\n  color: #fff;\n}\n.s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #cccccc;\n  border-width: 0 0 0 1px;\n}\n.messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #000;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n.tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #000;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #666;\n  color: #fff;\n  border-color: #000;\n}\n.tree-node-hover {\n  background: #777;\n  color: #fff;\n}\n.tree-node-selected {\n  background: #0052A3;\n  color: #fff;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n.inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n  color: #000;\n}\n.tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #666;\n  border-color: #000;\n  color: #fff;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #000;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #666;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #000;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #666;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #000;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #666;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #000;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #666;\n}\n.switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #555;\n  border: 1px solid #555;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-on {\n  background: #0052A3;\n  color: #fff;\n}\n.switchbutton-off {\n  background-color: #666;\n  color: #fff;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #666;\n  color: #fff;\n  border: 1px solid #555;\n  -moz-box-shadow: 0 0 3px 0 #555;\n  -webkit-box-shadow: 0 0 3px 0 #555;\n  box-shadow: 0 0 3px 0 #555;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #555;\n  -webkit-box-shadow: 0 0 3px 0 #555;\n  box-shadow: 0 0 3px 0 #555;\n  outline: none;\n}\n.radiobutton {\n  position: relative;\n  border: 2px solid #00458a;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #00458a;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.checkbox {\n  position: relative;\n  border: 2px solid #00458a;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #00458a;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #fff;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #fff;\n}\n.sidemenu .accordion-header:hover {\n  background: #777;\n  color: #fff;\n}\n.sidemenu .tree-node-hover {\n  background: #777;\n  color: #fff;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #00458a;\n  color: #fff;\n  background: #0052A3;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n.timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #3d3d3d;\n  color: #fff;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #00458a;\n  color: #fff;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #00458a;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #00458a;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #fff;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #00458a;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/filebox.css",
    "content": ".filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/flex.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/layout.css",
    "content": ".layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #cccccc;\n}\n.layout-split-north {\n  border-bottom: 5px solid #444;\n}\n.layout-split-south {\n  border-top: 5px solid #444;\n}\n.layout-split-east {\n  border-left: 5px solid #444;\n}\n.layout-split-west {\n  border-right: 5px solid #444;\n}\n.layout-expand {\n  background-color: #3d3d3d;\n}\n.layout-expand-over {\n  background-color: #3d3d3d;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/linkbutton.css",
    "content": ".l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #fff;\n  background: #777;\n  background-repeat: repeat-x;\n  border: 1px solid #555;\n  background: -webkit-linear-gradient(top,#919191 0,#6a6a6a 100%);\n  background: -moz-linear-gradient(top,#919191 0,#6a6a6a 100%);\n  background: -o-linear-gradient(top,#919191 0,#6a6a6a 100%);\n  background: linear-gradient(to bottom,#919191 0,#6a6a6a 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#919191,endColorstr=#6a6a6a,GradientType=0);\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn:hover {\n  background: #777;\n  color: #fff;\n  border: 1px solid #555;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #555;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #777;\n  color: #fff;\n  border: 1px solid #555;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #777;\n  color: #fff;\n  background: -webkit-linear-gradient(top,#919191 0,#6a6a6a 100%);\n  background: -moz-linear-gradient(top,#919191 0,#6a6a6a 100%);\n  background: -o-linear-gradient(top,#919191 0,#6a6a6a 100%);\n  background: linear-gradient(to bottom,#919191 0,#6a6a6a 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#919191,endColorstr=#6a6a6a,GradientType=0);\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #000;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/menu.css",
    "content": ".menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #777;\n  -moz-box-shadow: 2px 2px 3px #787878;\n  -webkit-box-shadow: 2px 2px 3px #787878;\n  box-shadow: 2px 2px 3px #787878;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #444;\n  border-right: 1px solid #777;\n}\n.menu-sep {\n  border-top: 1px solid #444;\n  border-bottom: 1px solid #777;\n}\n.menu {\n  background-color: #666;\n  border-color: #444;\n  color: #fff;\n}\n.menu-content {\n  background: #666;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #666;\n}\n.menu-active {\n  border-color: #555;\n  color: #fff;\n  background: #777;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #fff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/menubutton.css",
    "content": ".m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #777;\n  color: #fff;\n  border: 1px solid #555;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #cccccc;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #555;\n  background-color: #777;\n  color: #fff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/messager.css",
    "content": ".messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #000;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/numberbox.css",
    "content": ""
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/pagination.css",
    "content": ".pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #444;\n  border-right: 1px solid #777;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/panel.css",
    "content": "* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #777;\n  -moz-border-radius: 3px 3px 3px 3px;\n  -webkit-border-radius: 3px 3px 3px 3px;\n  border-radius: 3px 3px 3px 3px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #000;\n}\n.panel-header {\n  background-color: #3d3d3d;\n  background: -webkit-linear-gradient(top,#454545 0,#383838 100%);\n  background: -moz-linear-gradient(top,#454545 0,#383838 100%);\n  background: -o-linear-gradient(top,#454545 0,#383838 100%);\n  background: linear-gradient(to bottom,#454545 0,#383838 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0);\n  color: #fff;\n}\n.panel-body {\n  background-color: #666;\n  color: #fff;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #fff;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #000;\n  overflow: hidden;\n  background: #555;\n  color: #fff;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/passwordbox.css",
    "content": ".passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/progressbar.css",
    "content": ".progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.progressbar {\n  border-color: #000;\n}\n.progressbar-text {\n  color: #fff;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #0052A3;\n  color: #fff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/propertygrid.css",
    "content": ".propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #222;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #3d3d3d;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #222;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #3d3d3d;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/radiobutton.css",
    "content": ".radiobutton {\n  position: relative;\n  border: 2px solid #00458a;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #00458a;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/searchbox.css",
    "content": ".searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #3d3d3d;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/sidemenu.css",
    "content": ".sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #fff;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #fff;\n}\n.sidemenu .accordion-header:hover {\n  background: #777;\n  color: #fff;\n}\n.sidemenu .tree-node-hover {\n  background: #777;\n  color: #fff;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #00458a;\n  color: #fff;\n  background: #0052A3;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/slider.css",
    "content": ".slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #000;\n  background: #3d3d3d;\n}\n.slider-rule span {\n  border-color: #000;\n}\n.slider-rulelabel span {\n  color: #fff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/spinner.css",
    "content": ".spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #3d3d3d;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #fff;\n  outline-style: none;\n  background-color: #3d3d3d;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #777;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #777;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #3d3d3d;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #3d3d3d;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #3d3d3d;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/splitbutton.css",
    "content": ".s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #cccccc;\n  border-width: 0 0 0 1px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/switchbutton.css",
    "content": ".switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #555;\n  border: 1px solid #555;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-on {\n  background: #0052A3;\n  color: #fff;\n}\n.switchbutton-off {\n  background-color: #666;\n  color: #fff;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #666;\n  color: #fff;\n  border: 1px solid #555;\n  -moz-box-shadow: 0 0 3px 0 #555;\n  -webkit-box-shadow: 0 0 3px 0 #555;\n  box-shadow: 0 0 3px 0 #555;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #555;\n  -webkit-box-shadow: 0 0 3px 0 #555;\n  box-shadow: 0 0 3px 0 #555;\n  outline: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/tabs.css",
    "content": ".tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 0 0;\n  -webkit-border-radius: 5px 5px 0 0;\n  border-radius: 5px 5px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 5px 5px;\n  -webkit-border-radius: 0 0 5px 5px;\n  border-radius: 0 0 5px 5px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #3d3d3d url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #3d3d3d url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #777;\n  color: #fff;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #666;\n  color: #fff;\n  background: -webkit-linear-gradient(top,#454545 0,#666 100%);\n  background: -moz-linear-gradient(top,#454545 0,#666 100%);\n  background: -o-linear-gradient(top,#454545 0,#666 100%);\n  background: linear-gradient(to bottom,#454545 0,#666 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#666,GradientType=0);\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(top,#666 0,#454545 100%);\n  background: -moz-linear-gradient(top,#666 0,#454545 100%);\n  background: -o-linear-gradient(top,#666 0,#454545 100%);\n  background: linear-gradient(to bottom,#666 0,#454545 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#666,endColorstr=#454545,GradientType=0);\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#454545 0,#666 100%);\n  background: -moz-linear-gradient(left,#454545 0,#666 100%);\n  background: -o-linear-gradient(left,#454545 0,#666 100%);\n  background: linear-gradient(to right,#454545 0,#666 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#666,GradientType=1);\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#666 0,#454545 100%);\n  background: -moz-linear-gradient(left,#666 0,#454545 100%);\n  background: -o-linear-gradient(left,#666 0,#454545 100%);\n  background: linear-gradient(to right,#666 0,#454545 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#666,endColorstr=#454545,GradientType=1);\n}\n.tabs li .tabs-inner {\n  color: #fff;\n  background-color: #3d3d3d;\n  background: -webkit-linear-gradient(top,#454545 0,#383838 100%);\n  background: -moz-linear-gradient(top,#454545 0,#383838 100%);\n  background: -o-linear-gradient(top,#454545 0,#383838 100%);\n  background: linear-gradient(to bottom,#454545 0,#383838 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0);\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #3d3d3d;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #000;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #777;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #666;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #666;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #666;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #666;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #0052A3;\n  color: #fff;\n  filter: none;\n  border-color: #000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/tagbox.css",
    "content": ".tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #777;\n  color: #fff;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/textbox.css",
    "content": ".textbox {\n  position: relative;\n  border: 1px solid #000;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #000000;\n  -moz-box-shadow: 0 0 3px 0 #000;\n  -webkit-box-shadow: 0 0 3px 0 #000;\n  box-shadow: 0 0 3px 0 #000;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/timepicker.css",
    "content": ".timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #3d3d3d;\n  color: #fff;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #00458a;\n  color: #fff;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #00458a;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #00458a;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #fff;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #00458a;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/tooltip.css",
    "content": ".tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #666;\n  border-color: #000;\n  color: #fff;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #000;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #666;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #000;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #666;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #000;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #666;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #000;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #666;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/tree.css",
    "content": ".tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #000;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #666;\n  color: #fff;\n  border-color: #000;\n}\n.tree-node-hover {\n  background: #777;\n  color: #fff;\n}\n.tree-node-selected {\n  background: #0052A3;\n  color: #fff;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/validatebox.css",
    "content": ".inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n  color: #000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/black/window.css",
    "content": ".window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.window-shadow {\n  background: #777;\n  -moz-box-shadow: 2px 2px 3px #787878;\n  -webkit-box-shadow: 2px 2px 3px #787878;\n  box-shadow: 2px 2px 3px #787878;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #000;\n}\n.window {\n  background-color: #3d3d3d;\n  background: -webkit-linear-gradient(top,#454545 0,#383838 20%);\n  background: -moz-linear-gradient(top,#454545 0,#383838 20%);\n  background: -o-linear-gradient(top,#454545 0,#383838 20%);\n  background: linear-gradient(to bottom,#454545 0,#383838 20%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0);\n}\n.window-proxy {\n  border: 1px dashed #000;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #000;\n}\n.window .panel-footer {\n  border: 1px solid #000;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/accordion.css",
    "content": ".accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #ffffff;\n  border-color: #D4D4D4;\n}\n.accordion .accordion-header {\n  background: #F2F2F2;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #0081c2;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #fff;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #F2F2F2;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #D4D4D4;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #F2F2F2;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #D4D4D4;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #F2F2F2;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #D4D4D4;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/calendar.css",
    "content": ".calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 12px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 12px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 12px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 12px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 12px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #808080;\n}\n.calendar-day {\n  color: #333;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #D4D4D4;\n}\n.calendar {\n  border-color: #D4D4D4;\n}\n.calendar-header {\n  background: #F2F2F2;\n}\n.calendar-body,\n.calendar-menu {\n  background: #ffffff;\n}\n.calendar-body th {\n  background: #F5F5F5;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #e6e6e6;\n  color: #00438a;\n}\n.calendar-hover {\n  border: 1px solid #ddd;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #0081c2;\n  color: #fff;\n  border: 1px solid #0070a9;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #F2F2F2;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/checkbox.css",
    "content": ".checkbox {\n  position: relative;\n  border: 2px solid #0070a9;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #0070a9;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/combo.css",
    "content": ".combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #ffffff;\n}\n.combo-arrow {\n  background-color: #F2F2F2;\n}\n.combo-arrow-hover {\n  background-color: #e6e6e6;\n}\n.combo-arrow:hover {\n  background-color: #e6e6e6;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/combobox.css",
    "content": ".combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 12px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #e6e6e6;\n  color: #00438a;\n}\n.combobox-item-selected {\n  background-color: #0081c2;\n  color: #fff;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/datagrid.css",
    "content": ".datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 12px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 12px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #D4D4D4;\n  font-size: 12px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #F2F2F2;\n  background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0);\n}\n.datagrid-cell-rownumber {\n  color: #333;\n}\n.datagrid-resize-proxy {\n  background: #bbb;\n}\n.datagrid-mask {\n  background: #ccc;\n}\n.datagrid-mask-msg {\n  border-color: #D4D4D4;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #F5F5F5;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #e6e6e6;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #ccc;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #333;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #F5F5F5;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #e6e6e6;\n  color: #00438a;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #0081c2;\n  color: #fff;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #0070a9;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #0070a9;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/datalist.css",
    "content": ".datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #F2F2F2;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ccc;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #333;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ccc;\n}\n.m-list li>a:hover {\n  background: #e6e6e6;\n  color: #00438a;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/datebox.css",
    "content": ".datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 12px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #F5F5F5;\n}\n.datebox-button a {\n  color: #444;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/dialog.css",
    "content": ".dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #F5F5F5;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #D4D4D4 #D4D4D4 #e6e6e6 #D4D4D4;\n}\n.dialog-button {\n  border-color: #e6e6e6 #D4D4D4 #D4D4D4 #D4D4D4;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #F5F5F5;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/easyui.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #e6e6e6;\n  -moz-border-radius: 3px 3px 3px 3px;\n  -webkit-border-radius: 3px 3px 3px 3px;\n  border-radius: 3px 3px 3px 3px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #D4D4D4;\n}\n.panel-header {\n  background-color: #F2F2F2;\n  background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0);\n  color: #777;\n}\n.panel-body {\n  background-color: #ffffff;\n  color: #333;\n  font-size: 12px;\n}\n.panel-title {\n  font-size: 12px;\n  font-weight: bold;\n  color: #777;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #D4D4D4;\n  overflow: hidden;\n  background: #F5F5F5;\n  color: #333;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n.accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #ffffff;\n  border-color: #D4D4D4;\n}\n.accordion .accordion-header {\n  background: #F2F2F2;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #0081c2;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #fff;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #F2F2F2;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #D4D4D4;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #F2F2F2;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #D4D4D4;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #F2F2F2;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #D4D4D4;\n}\n.window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.window-shadow {\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #D4D4D4;\n}\n.window {\n  background-color: #F2F2F2;\n  background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 20%);\n  background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 20%);\n  background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 20%);\n  background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 20%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0);\n}\n.window-proxy {\n  border: 1px dashed #D4D4D4;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #ccc;\n}\n.window .panel-footer {\n  border: 1px solid #D4D4D4;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n.dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #F5F5F5;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #D4D4D4 #D4D4D4 #e6e6e6 #D4D4D4;\n}\n.dialog-button {\n  border-color: #e6e6e6 #D4D4D4 #D4D4D4 #D4D4D4;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #F5F5F5;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 12px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #444;\n  background: #f5f5f5;\n  background-repeat: repeat-x;\n  border: 1px solid #bbb;\n  background: -webkit-linear-gradient(top,#ffffff 0,#e6e6e6 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#e6e6e6 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#e6e6e6 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#e6e6e6 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0);\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn:hover {\n  background: #e6e6e6;\n  color: #00438a;\n  border: 1px solid #ddd;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #ddd;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #e6e6e6;\n  color: #00438a;\n  border: 1px solid #ddd;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #f5f5f5;\n  color: #444;\n  background: -webkit-linear-gradient(top,#ffffff 0,#e6e6e6 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#e6e6e6 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#e6e6e6 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#e6e6e6 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0);\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #ddd;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #ddd;\n}\n.textbox {\n  position: relative;\n  border: 1px solid #D4D4D4;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.textbox .textbox-text {\n  font-size: 12px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 12px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #bbbbbb;\n  -moz-box-shadow: 0 0 3px 0 #D4D4D4;\n  -webkit-box-shadow: 0 0 3px 0 #D4D4D4;\n  box-shadow: 0 0 3px 0 #D4D4D4;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 10px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 12px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 10px;\n  transform: translate(0,0);\n}\n.passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n.filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n.combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #ffffff;\n}\n.combo-arrow {\n  background-color: #F2F2F2;\n}\n.combo-arrow-hover {\n  background-color: #e6e6e6;\n}\n.combo-arrow:hover {\n  background-color: #e6e6e6;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n.combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 12px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #e6e6e6;\n  color: #00438a;\n}\n.combobox-item-selected {\n  background-color: #0081c2;\n  color: #fff;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n.tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #e6e6e6;\n  color: #00438a;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #bbb;\n}\n.layout-split-north {\n  border-bottom: 5px solid #eee;\n}\n.layout-split-south {\n  border-top: 5px solid #eee;\n}\n.layout-split-east {\n  border-left: 5px solid #eee;\n}\n.layout-split-west {\n  border-right: 5px solid #eee;\n}\n.layout-expand {\n  background-color: #F2F2F2;\n}\n.layout-expand-over {\n  background-color: #F2F2F2;\n}\n.tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 0 0;\n  -webkit-border-radius: 5px 5px 0 0;\n  border-radius: 5px 5px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 12px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 5px 5px;\n  -webkit-border-radius: 0 0 5px 5px;\n  border-radius: 0 0 5px 5px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #F2F2F2 url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #F2F2F2 url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #e6e6e6;\n  color: #00438a;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #ffffff;\n  color: #777;\n  background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0);\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0);\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to right,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1);\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to right,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1);\n}\n.tabs li .tabs-inner {\n  color: #777;\n  background-color: #F2F2F2;\n  background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0);\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #F2F2F2;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #D4D4D4;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #e6e6e6;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #ffffff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #ffffff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #ffffff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #ffffff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #0081c2;\n  color: #fff;\n  filter: none;\n  border-color: #D4D4D4;\n}\n.datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 12px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 12px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #D4D4D4;\n  font-size: 12px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #F2F2F2;\n  background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0);\n}\n.datagrid-cell-rownumber {\n  color: #333;\n}\n.datagrid-resize-proxy {\n  background: #bbb;\n}\n.datagrid-mask {\n  background: #ccc;\n}\n.datagrid-mask-msg {\n  border-color: #D4D4D4;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #F5F5F5;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #e6e6e6;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #ccc;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #333;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #F5F5F5;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #e6e6e6;\n  color: #00438a;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #0081c2;\n  color: #fff;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #0070a9;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #0070a9;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #e6e6e6;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #F2F2F2;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #e6e6e6;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #F2F2F2;\n}\n.datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #F2F2F2;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ccc;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #333;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ccc;\n}\n.m-list li>a:hover {\n  background: #e6e6e6;\n  color: #00438a;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n.pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 12px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 12px;\n}\n.pagination span {\n  font-size: 12px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #D4D4D4;\n}\n.calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 12px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 12px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 12px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 12px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 12px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #808080;\n}\n.calendar-day {\n  color: #333;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #D4D4D4;\n}\n.calendar {\n  border-color: #D4D4D4;\n}\n.calendar-header {\n  background: #F2F2F2;\n}\n.calendar-body,\n.calendar-menu {\n  background: #ffffff;\n}\n.calendar-body th {\n  background: #F5F5F5;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #e6e6e6;\n  color: #00438a;\n}\n.calendar-hover {\n  border: 1px solid #ddd;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #0081c2;\n  color: #fff;\n  border: 1px solid #0070a9;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #F2F2F2;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n.datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 12px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #F5F5F5;\n}\n.datebox-button a {\n  color: #444;\n}\n.spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #F2F2F2;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #444;\n  outline-style: none;\n  background-color: #F2F2F2;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #e6e6e6;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #e6e6e6;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #F2F2F2;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #F2F2F2;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #F2F2F2;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n.progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.progressbar {\n  border-color: #D4D4D4;\n}\n.progressbar-text {\n  color: #333;\n  font-size: 12px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #0081c2;\n  color: #fff;\n}\n.searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #F2F2F2;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 12px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 12px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #D4D4D4;\n  background: #F2F2F2;\n}\n.slider-rule span {\n  border-color: #D4D4D4;\n}\n.slider-rulelabel span {\n  color: #333;\n}\n.menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 12px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #ccc;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #fff;\n  border-color: #e6e6e6;\n  color: #333;\n}\n.menu-content {\n  background: #ffffff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #fff;\n}\n.menu-active {\n  border-color: #ddd;\n  color: #00438a;\n  background: #e6e6e6;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #333;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #e6e6e6;\n  color: #00438a;\n  border: 1px solid #ddd;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #bbb;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ddd;\n  background-color: #e6e6e6;\n  color: #00438a;\n}\n.s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #bbb;\n  border-width: 0 0 0 1px;\n}\n.messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #D4D4D4;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n.tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 12px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 12px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #D4D4D4;\n  font-size: 12px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #ffffff;\n  color: #333;\n  border-color: #D4D4D4;\n}\n.tree-node-hover {\n  background: #e6e6e6;\n  color: #00438a;\n}\n.tree-node-selected {\n  background: #0081c2;\n  color: #fff;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n.inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n  color: #000;\n}\n.tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tooltip-content {\n  font-size: 12px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #ffffff;\n  border-color: #D4D4D4;\n  color: #333;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #D4D4D4;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #ffffff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #D4D4D4;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #ffffff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #D4D4D4;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #ffffff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #D4D4D4;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #ffffff;\n}\n.switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #bbb;\n  border: 1px solid #bbb;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 12px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-on {\n  background: #0081c2;\n  color: #fff;\n}\n.switchbutton-off {\n  background-color: #ffffff;\n  color: #333;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #ffffff;\n  color: #333;\n  border: 1px solid #bbb;\n  -moz-box-shadow: 0 0 3px 0 #bbb;\n  -webkit-box-shadow: 0 0 3px 0 #bbb;\n  box-shadow: 0 0 3px 0 #bbb;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #bbb;\n  -webkit-box-shadow: 0 0 3px 0 #bbb;\n  box-shadow: 0 0 3px 0 #bbb;\n  outline: none;\n}\n.radiobutton {\n  position: relative;\n  border: 2px solid #0070a9;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #0070a9;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.checkbox {\n  position: relative;\n  border: 2px solid #0070a9;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #0070a9;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #777;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #777;\n}\n.sidemenu .accordion-header:hover {\n  background: #e6e6e6;\n  color: #777;\n}\n.sidemenu .tree-node-hover {\n  background: #e6e6e6;\n  color: #777;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #0070a9;\n  color: #fff;\n  background: #0081c2;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n.timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #F2F2F2;\n  color: #777;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #0070a9;\n  color: #fff;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #0070a9;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #0070a9;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #fff;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #0070a9;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n.tabs-panels {\n  border-color: transparent;\n}\n.tabs li .tabs-inner {\n  border-color: transparent;\n  background: transparent;\n  filter: none;\n  color: #0088CC;\n}\n.menu-active {\n  background-color: #0081C2;\n  border-color: #0081C2;\n  color: #fff;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #333;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/filebox.css",
    "content": ".filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/flex.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/layout.css",
    "content": ".layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #bbb;\n}\n.layout-split-north {\n  border-bottom: 5px solid #eee;\n}\n.layout-split-south {\n  border-top: 5px solid #eee;\n}\n.layout-split-east {\n  border-left: 5px solid #eee;\n}\n.layout-split-west {\n  border-right: 5px solid #eee;\n}\n.layout-expand {\n  background-color: #F2F2F2;\n}\n.layout-expand-over {\n  background-color: #F2F2F2;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/linkbutton.css",
    "content": ".l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 12px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #444;\n  background: #f5f5f5;\n  background-repeat: repeat-x;\n  border: 1px solid #bbb;\n  background: -webkit-linear-gradient(top,#ffffff 0,#e6e6e6 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#e6e6e6 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#e6e6e6 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#e6e6e6 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0);\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn:hover {\n  background: #e6e6e6;\n  color: #00438a;\n  border: 1px solid #ddd;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #ddd;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #e6e6e6;\n  color: #00438a;\n  border: 1px solid #ddd;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #f5f5f5;\n  color: #444;\n  background: -webkit-linear-gradient(top,#ffffff 0,#e6e6e6 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#e6e6e6 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#e6e6e6 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#e6e6e6 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0);\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #ddd;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #ddd;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/menu.css",
    "content": ".menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 12px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #ccc;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #fff;\n  border-color: #e6e6e6;\n  color: #333;\n}\n.menu-content {\n  background: #ffffff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #fff;\n}\n.menu-active {\n  border-color: #ddd;\n  color: #00438a;\n  background: #e6e6e6;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #333;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/menubutton.css",
    "content": ".m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #e6e6e6;\n  color: #00438a;\n  border: 1px solid #ddd;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #bbb;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ddd;\n  background-color: #e6e6e6;\n  color: #00438a;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/messager.css",
    "content": ".messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #D4D4D4;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/numberbox.css",
    "content": ""
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/pagination.css",
    "content": ".pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 12px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 12px;\n}\n.pagination span {\n  font-size: 12px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #D4D4D4;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/panel.css",
    "content": "* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #e6e6e6;\n  -moz-border-radius: 3px 3px 3px 3px;\n  -webkit-border-radius: 3px 3px 3px 3px;\n  border-radius: 3px 3px 3px 3px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #D4D4D4;\n}\n.panel-header {\n  background-color: #F2F2F2;\n  background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0);\n  color: #777;\n}\n.panel-body {\n  background-color: #ffffff;\n  color: #333;\n  font-size: 12px;\n}\n.panel-title {\n  font-size: 12px;\n  font-weight: bold;\n  color: #777;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #D4D4D4;\n  overflow: hidden;\n  background: #F5F5F5;\n  color: #333;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/passwordbox.css",
    "content": ".passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/progressbar.css",
    "content": ".progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.progressbar {\n  border-color: #D4D4D4;\n}\n.progressbar-text {\n  color: #333;\n  font-size: 12px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #0081c2;\n  color: #fff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/propertygrid.css",
    "content": ".propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #e6e6e6;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #F2F2F2;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #e6e6e6;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #F2F2F2;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/radiobutton.css",
    "content": ".radiobutton {\n  position: relative;\n  border: 2px solid #0070a9;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #0070a9;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/searchbox.css",
    "content": ".searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #F2F2F2;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/sidemenu.css",
    "content": ".sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #777;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #777;\n}\n.sidemenu .accordion-header:hover {\n  background: #e6e6e6;\n  color: #777;\n}\n.sidemenu .tree-node-hover {\n  background: #e6e6e6;\n  color: #777;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #0070a9;\n  color: #fff;\n  background: #0081c2;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/slider.css",
    "content": ".slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 12px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 12px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #D4D4D4;\n  background: #F2F2F2;\n}\n.slider-rule span {\n  border-color: #D4D4D4;\n}\n.slider-rulelabel span {\n  color: #333;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/spinner.css",
    "content": ".spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #F2F2F2;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #444;\n  outline-style: none;\n  background-color: #F2F2F2;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #e6e6e6;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #e6e6e6;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #F2F2F2;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #F2F2F2;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #F2F2F2;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/splitbutton.css",
    "content": ".s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #bbb;\n  border-width: 0 0 0 1px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/switchbutton.css",
    "content": ".switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #bbb;\n  border: 1px solid #bbb;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 12px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-on {\n  background: #0081c2;\n  color: #fff;\n}\n.switchbutton-off {\n  background-color: #ffffff;\n  color: #333;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #ffffff;\n  color: #333;\n  border: 1px solid #bbb;\n  -moz-box-shadow: 0 0 3px 0 #bbb;\n  -webkit-box-shadow: 0 0 3px 0 #bbb;\n  box-shadow: 0 0 3px 0 #bbb;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #bbb;\n  -webkit-box-shadow: 0 0 3px 0 #bbb;\n  box-shadow: 0 0 3px 0 #bbb;\n  outline: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/tabs.css",
    "content": ".tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 0 0;\n  -webkit-border-radius: 5px 5px 0 0;\n  border-radius: 5px 5px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 12px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 5px 5px;\n  -webkit-border-radius: 0 0 5px 5px;\n  border-radius: 0 0 5px 5px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #F2F2F2 url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #F2F2F2 url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #e6e6e6;\n  color: #00438a;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #ffffff;\n  color: #777;\n  background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0);\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0);\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to right,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1);\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to right,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1);\n}\n.tabs li .tabs-inner {\n  color: #777;\n  background-color: #F2F2F2;\n  background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0);\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #F2F2F2;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #D4D4D4;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #e6e6e6;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #ffffff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #ffffff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #ffffff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #ffffff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #0081c2;\n  color: #fff;\n  filter: none;\n  border-color: #D4D4D4;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/tagbox.css",
    "content": ".tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #e6e6e6;\n  color: #00438a;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/textbox.css",
    "content": ".textbox {\n  position: relative;\n  border: 1px solid #D4D4D4;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.textbox .textbox-text {\n  font-size: 12px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 12px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #bbbbbb;\n  -moz-box-shadow: 0 0 3px 0 #D4D4D4;\n  -webkit-box-shadow: 0 0 3px 0 #D4D4D4;\n  box-shadow: 0 0 3px 0 #D4D4D4;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 10px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 12px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 10px;\n  transform: translate(0,0);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/timepicker.css",
    "content": ".timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #F2F2F2;\n  color: #777;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #0070a9;\n  color: #fff;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #0070a9;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #0070a9;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #fff;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #0070a9;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/tooltip.css",
    "content": ".tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tooltip-content {\n  font-size: 12px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #ffffff;\n  border-color: #D4D4D4;\n  color: #333;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #D4D4D4;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #ffffff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #D4D4D4;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #ffffff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #D4D4D4;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #ffffff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #D4D4D4;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #ffffff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/tree.css",
    "content": ".tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 12px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 12px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #D4D4D4;\n  font-size: 12px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #ffffff;\n  color: #333;\n  border-color: #D4D4D4;\n}\n.tree-node-hover {\n  background: #e6e6e6;\n  color: #00438a;\n}\n.tree-node-selected {\n  background: #0081c2;\n  color: #fff;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/validatebox.css",
    "content": ".inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n  color: #000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/bootstrap/window.css",
    "content": ".window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.window-shadow {\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #D4D4D4;\n}\n.window {\n  background-color: #F2F2F2;\n  background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 20%);\n  background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 20%);\n  background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 20%);\n  background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 20%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0);\n}\n.window-proxy {\n  border: 1px dashed #D4D4D4;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #ccc;\n}\n.window .panel-footer {\n  border: 1px solid #D4D4D4;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/color.css",
    "content": ".c1,.c1:hover,.c1>.panel-header{\n\tcolor: #fff;\n\tborder-color: #3c8b3c;\n\tbackground: #4cae4c;\n\tbackground: -webkit-linear-gradient(top,#4cae4c 0,#449d44 100%);\n\tbackground: -moz-linear-gradient(top,#4cae4c 0,#449d44 100%);\n\tbackground: -o-linear-gradient(top,#4cae4c 0,#449d44 100%);\n\tbackground: linear-gradient(to bottom,#4cae4c 0,#449d44 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4cae4c,endColorstr=#449d44,GradientType=0);\n}\na.c1:hover{\n\tbackground: #449d44;\n\tfilter: none;\n}\n.c1>.panel-body{\n\tborder-color: #3c8b3c;\n}\n.c1>.dialog-toolbar,.c1>.dialog-button{\n\tborder-left-color: #3c8b3c;\n\tborder-right-color: #3c8b3c;\n}\n.c1>.dialog-button{\n\tborder-bottom-color: #3c8b3c;\n}\n.c2,.c2:hover,.c2>.panel-header{\n\tcolor: #fff;\n\tborder-color: #5f5f5f;\n\tbackground: #747474;\n\tbackground: -webkit-linear-gradient(top,#747474 0,#676767 100%);\n\tbackground: -moz-linear-gradient(top,#747474 0,#676767 100%);\n\tbackground: -o-linear-gradient(top,#747474 0,#676767 100%);\n\tbackground: linear-gradient(to bottom,#747474 0,#676767 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#747474,endColorstr=#676767,GradientType=0);\n}\na.c2:hover{\n\tbackground: #676767;\n\tfilter: none;\n}\n.c2>.panel-body{\n\tborder-color: #5f5f5f;\n}\n.c2>.dialog-toolbar,.c2>.dialog-button{\n\tborder-left-color: #5f5f5f;\n\tborder-right-color: #5f5f5f;\n}\n.c2>.dialog-button{\n\tborder-bottom-color: #5f5f5f;\n}\n.c3,.c3:hover,.c3>.panel-header{\n\tcolor: #333;\n\tborder-color: #ff8080;\n\tbackground: #ffb3b3;\n\tbackground: -webkit-linear-gradient(top,#ffb3b3 0,#ff9999 100%);\n\tbackground: -moz-linear-gradient(top,#ffb3b3 0,#ff9999 100%);\n\tbackground: -o-linear-gradient(top,#ffb3b3 0,#ff9999 100%);\n\tbackground: linear-gradient(to bottom,#ffb3b3 0,#ff9999 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffb3b3,endColorstr=#ff9999,GradientType=0);\n}\na.c3:hover{\n\tbackground: #ff9999;\n\tfilter: none;\n}\n.c3>.panel-body{\n\tborder-color: #ff8080;\n}\n.c3>.dialog-toolbar,.c3>.dialog-button{\n\tborder-left-color: #ff8080;\n\tborder-right-color: #ff8080;\n}\n.c3>.dialog-button{\n\tborder-bottom-color: #ff8080;\n}\n.c4,.c4:hover,.c4>.panel-header{\n\tcolor: #333;\n\tborder-color: #52d689;\n\tbackground: #b8eecf;\n\tbackground: -webkit-linear-gradient(top,#b8eecf 0,#a4e9c1 100%);\n\tbackground: -moz-linear-gradient(top,#b8eecf 0,#a4e9c1 100%);\n\tbackground: -o-linear-gradient(top,#b8eecf 0,#a4e9c1 100%);\n\tbackground: linear-gradient(to bottom,#b8eecf 0,#a4e9c1 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#b8eecf,endColorstr=#a4e9c1,GradientType=0);\n}\na.c4:hover{\n\tbackground: #a4e9c1;\n\tfilter: none;\n}\n.c4>.panel-body{\n\tborder-color: #52d689;\n}\n.c4>.dialog-toolbar,.c4>.dialog-button{\n\tborder-left-color: #52d689;\n\tborder-right-color: #52d689;\n}\n.c4>.dialog-button{\n\tborder-bottom-color: #52d689;\n}\n.c5,.c5:hover,.c5>.panel-header{\n\tcolor: #fff;\n\tborder-color: #b52b27;\n\tbackground: #d84f4b;\n\tbackground: -webkit-linear-gradient(top,#d84f4b 0,#c9302c 100%);\n\tbackground: -moz-linear-gradient(top,#d84f4b 0,#c9302c 100%);\n\tbackground: -o-linear-gradient(top,#d84f4b 0,#c9302c 100%);\n\tbackground: linear-gradient(to bottom,#d84f4b 0,#c9302c 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d84f4b,endColorstr=#c9302c,GradientType=0);\n}\na.c5:hover{\n\tbackground: #c9302c;\n\tfilter: none;\n}\n.c5>.panel-body{\n\tborder-color: #b52b27;\n}\n.c5>.dialog-toolbar,.c5>.dialog-button{\n\tborder-left-color: #b52b27;\n\tborder-right-color: #b52b27;\n}\n.c5>.dialog-button{\n\tborder-bottom-color: #b52b27;\n}\n.c6,.c6:hover,.c6>.panel-header{\n\tcolor: #fff;\n\tborder-color: #1f637b;\n\tbackground: #2984a4;\n\tbackground: -webkit-linear-gradient(top,#2984a4 0,#24748f 100%);\n\tbackground: -moz-linear-gradient(top,#2984a4 0,#24748f 100%);\n\tbackground: -o-linear-gradient(top,#2984a4 0,#24748f 100%);\n\tbackground: linear-gradient(to bottom,#2984a4 0,#24748f 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#2984a4,endColorstr=#24748f,GradientType=0);\n}\na.c6:hover{\n\tbackground: #24748f;\n\tfilter: none;\n}\n.c6>.panel-body{\n\tborder-color: #1f637b;\n}\n.c6>.dialog-toolbar,.c6>.dialog-button{\n\tborder-left-color: #1f637b;\n\tborder-right-color: #1f637b;\n}\n.c6>.dialog-button{\n\tborder-bottom-color: #1f637b;\n}\n.c7,.c7:hover,.c7>.panel-header{\n\tcolor: #333;\n\tborder-color: #e68900;\n\tbackground: #ffab2e;\n\tbackground: -webkit-linear-gradient(top,#ffab2e 0,#ff9900 100%);\n\tbackground: -moz-linear-gradient(top,#ffab2e 0,#ff9900 100%);\n\tbackground: -o-linear-gradient(top,#ffab2e 0,#ff9900 100%);\n\tbackground: linear-gradient(to bottom,#ffab2e 0,#ff9900 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffab2e,endColorstr=#ff9900,GradientType=0);\n}\na.c7:hover{\n\tbackground: #ff9900;\n\tfilter: none;\n}\n.c7>.panel-body{\n\tborder-color: #e68900;\n}\n.c7>.dialog-toolbar,.c7>.dialog-button{\n\tborder-left-color: #e68900;\n\tborder-right-color: #e68900;\n}\n.c7>.dialog-button{\n\tborder-bottom-color: #e68900;\n}\n.c8,.c8:hover,.c8>.panel-header{\n\tcolor: #fff;\n\tborder-color: #4b72a4;\n\tbackground: #698cba;\n\tbackground: -webkit-linear-gradient(top,#698cba 0,#577eb2 100%);\n\tbackground: -moz-linear-gradient(top,#698cba 0,#577eb2 100%);\n\tbackground: -o-linear-gradient(top,#698cba 0,#577eb2 100%);\n\tbackground: linear-gradient(to bottom,#698cba 0,#577eb2 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#698cba,endColorstr=#577eb2,GradientType=0);\n}\na.c8:hover{\n\tbackground: #577eb2;\n\tfilter: none;\n}\n.c8>.panel-body{\n\tborder-color: #4b72a4;\n}\n.c8>.dialog-toolbar,.c8>.dialog-button{\n\tborder-left-color: #4b72a4;\n\tborder-right-color: #4b72a4;\n}\n.c8>.dialog-button{\n\tborder-bottom-color: #4b72a4;\n}\n.c1>.panel-header>.panel-title,.c2>.panel-header>.panel-title,\n.c5>.panel-header>.panel-title,.c6>.panel-header>.panel-title,.c8>.panel-header>.panel-title{\n\tcolor: #fff;\n}\n.c-plain{\n\tborder-color: #fff;\n\tbackground: #fff;\n}\n.c-plain>.panel-header,\n.c-plain>.panel-body,\n.c-plain>.dialog-button,\n.c-plain>.dialog-toolbar{\n\tborder-color: transparent;\n\tbackground: transparent;\n}\n.c-raised{\n\tbox-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/accordion.css",
    "content": ".accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #ffffff;\n  border-color: #95B8E7;\n}\n.accordion .accordion-header {\n  background: #E0ECFF;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #ffe48d;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #000000;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #E0ECFF;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #95B8E7;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #E0ECFF;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #95B8E7;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #E0ECFF;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #95B8E7;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/calendar.css",
    "content": ".calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #4d4d4d;\n}\n.calendar-day {\n  color: #000000;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #95B8E7;\n}\n.calendar {\n  border-color: #95B8E7;\n}\n.calendar-header {\n  background: #E0ECFF;\n}\n.calendar-body,\n.calendar-menu {\n  background: #ffffff;\n}\n.calendar-body th {\n  background: #F4F4F4;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #eaf2ff;\n  color: #000000;\n}\n.calendar-hover {\n  border: 1px solid #b7d2ff;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #ffe48d;\n  color: #000000;\n  border: 1px solid #ffab3f;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #E0ECFF;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/checkbox.css",
    "content": ".checkbox {\n  position: relative;\n  border: 2px solid #ffab3f;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #ffab3f;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/combo.css",
    "content": ".combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #ffffff;\n}\n.combo-arrow {\n  background-color: #E0ECFF;\n}\n.combo-arrow-hover {\n  background-color: #eaf2ff;\n}\n.combo-arrow:hover {\n  background-color: #eaf2ff;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/combobox.css",
    "content": ".combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #eaf2ff;\n  color: #000000;\n}\n.combobox-item-selected {\n  background-color: #ffe48d;\n  color: #000000;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/datagrid.css",
    "content": ".datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #95B8E7;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #efefef;\n  background: -webkit-linear-gradient(top,#F9F9F9 0,#efefef 100%);\n  background: -moz-linear-gradient(top,#F9F9F9 0,#efefef 100%);\n  background: -o-linear-gradient(top,#F9F9F9 0,#efefef 100%);\n  background: linear-gradient(to bottom,#F9F9F9 0,#efefef 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F9F9F9,endColorstr=#efefef,GradientType=0);\n}\n.datagrid-cell-rownumber {\n  color: #000000;\n}\n.datagrid-resize-proxy {\n  background: #aac5e7;\n}\n.datagrid-mask {\n  background: #ccc;\n}\n.datagrid-mask-msg {\n  border-color: #95B8E7;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #F4F4F4;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #dddddd;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #ccc;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #000000;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #fafafa;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #eaf2ff;\n  color: #000000;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #ffe48d;\n  color: #000000;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #ffab3f;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #ffab3f;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/datalist.css",
    "content": ".datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #efefef;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ccc;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #000000;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ccc;\n}\n.m-list li>a:hover {\n  background: #eaf2ff;\n  color: #000000;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/datebox.css",
    "content": ".datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #F4F4F4;\n}\n.datebox-button a {\n  color: #444;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/dialog.css",
    "content": ".dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #F4F4F4;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #95B8E7 #95B8E7 #dddddd #95B8E7;\n}\n.dialog-button {\n  border-color: #dddddd #95B8E7 #95B8E7 #95B8E7;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #F4F4F4;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/easyui.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #eaf2ff;\n  -moz-border-radius: 3px 3px 3px 3px;\n  -webkit-border-radius: 3px 3px 3px 3px;\n  border-radius: 3px 3px 3px 3px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #95B8E7;\n}\n.panel-header {\n  background-color: #E0ECFF;\n  background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%);\n  background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%);\n  background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%);\n  background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0);\n  color: #0E2D5F;\n}\n.panel-body {\n  background-color: #ffffff;\n  color: #000000;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #0E2D5F;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #95B8E7;\n  overflow: hidden;\n  background: #F4F4F4;\n  color: #000000;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n.accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #ffffff;\n  border-color: #95B8E7;\n}\n.accordion .accordion-header {\n  background: #E0ECFF;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #ffe48d;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #000000;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #E0ECFF;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #95B8E7;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #E0ECFF;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #95B8E7;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #E0ECFF;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #95B8E7;\n}\n.window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.window-shadow {\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #95B8E7;\n}\n.window {\n  background-color: #E0ECFF;\n  background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%);\n  background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%);\n  background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%);\n  background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 20%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0);\n}\n.window-proxy {\n  border: 1px dashed #95B8E7;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #ccc;\n}\n.window .panel-footer {\n  border: 1px solid #95B8E7;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n.dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #F4F4F4;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #95B8E7 #95B8E7 #dddddd #95B8E7;\n}\n.dialog-button {\n  border-color: #dddddd #95B8E7 #95B8E7 #95B8E7;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #F4F4F4;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #444;\n  background: #fafafa;\n  background-repeat: repeat-x;\n  border: 1px solid #bbb;\n  background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0);\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn:hover {\n  background: #eaf2ff;\n  color: #000000;\n  border: 1px solid #b7d2ff;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #b7d2ff;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #eaf2ff;\n  color: #000000;\n  border: 1px solid #b7d2ff;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #fafafa;\n  color: #444;\n  background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0);\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #ddd;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #ddd;\n}\n.textbox {\n  position: relative;\n  border: 1px solid #95B8E7;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #6b9cde;\n  -moz-box-shadow: 0 0 3px 0 #95B8E7;\n  -webkit-box-shadow: 0 0 3px 0 #95B8E7;\n  box-shadow: 0 0 3px 0 #95B8E7;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n.passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n.filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n.combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #ffffff;\n}\n.combo-arrow {\n  background-color: #E0ECFF;\n}\n.combo-arrow-hover {\n  background-color: #eaf2ff;\n}\n.combo-arrow:hover {\n  background-color: #eaf2ff;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n.combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #eaf2ff;\n  color: #000000;\n}\n.combobox-item-selected {\n  background-color: #ffe48d;\n  color: #000000;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n.tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #eaf2ff;\n  color: #000000;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #aac5e7;\n}\n.layout-split-north {\n  border-bottom: 5px solid #E6EEF8;\n}\n.layout-split-south {\n  border-top: 5px solid #E6EEF8;\n}\n.layout-split-east {\n  border-left: 5px solid #E6EEF8;\n}\n.layout-split-west {\n  border-right: 5px solid #E6EEF8;\n}\n.layout-expand {\n  background-color: #E0ECFF;\n}\n.layout-expand-over {\n  background-color: #E0ECFF;\n}\n.tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 0 0;\n  -webkit-border-radius: 5px 5px 0 0;\n  border-radius: 5px 5px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 5px 5px;\n  -webkit-border-radius: 0 0 5px 5px;\n  border-radius: 0 0 5px 5px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #E0ECFF url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #E0ECFF url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #eaf2ff;\n  color: #000000;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #ffffff;\n  color: #0E2D5F;\n  background: -webkit-linear-gradient(top,#EFF5FF 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#EFF5FF 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#EFF5FF 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#EFF5FF 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=0);\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(top,#ffffff 0,#EFF5FF 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#EFF5FF 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#EFF5FF 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#EFF5FF 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=0);\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#EFF5FF 0,#ffffff 100%);\n  background: -moz-linear-gradient(left,#EFF5FF 0,#ffffff 100%);\n  background: -o-linear-gradient(left,#EFF5FF 0,#ffffff 100%);\n  background: linear-gradient(to right,#EFF5FF 0,#ffffff 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=1);\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#ffffff 0,#EFF5FF 100%);\n  background: -moz-linear-gradient(left,#ffffff 0,#EFF5FF 100%);\n  background: -o-linear-gradient(left,#ffffff 0,#EFF5FF 100%);\n  background: linear-gradient(to right,#ffffff 0,#EFF5FF 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=1);\n}\n.tabs li .tabs-inner {\n  color: #0E2D5F;\n  background-color: #E0ECFF;\n  background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%);\n  background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%);\n  background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%);\n  background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0);\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #E0ECFF;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #95B8E7;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #eaf2ff;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #ffffff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #ffffff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #ffffff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #ffffff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #ffe48d;\n  color: #000000;\n  filter: none;\n  border-color: #95B8E7;\n}\n.datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #95B8E7;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #efefef;\n  background: -webkit-linear-gradient(top,#F9F9F9 0,#efefef 100%);\n  background: -moz-linear-gradient(top,#F9F9F9 0,#efefef 100%);\n  background: -o-linear-gradient(top,#F9F9F9 0,#efefef 100%);\n  background: linear-gradient(to bottom,#F9F9F9 0,#efefef 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F9F9F9,endColorstr=#efefef,GradientType=0);\n}\n.datagrid-cell-rownumber {\n  color: #000000;\n}\n.datagrid-resize-proxy {\n  background: #aac5e7;\n}\n.datagrid-mask {\n  background: #ccc;\n}\n.datagrid-mask-msg {\n  border-color: #95B8E7;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #F4F4F4;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #dddddd;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #ccc;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #000000;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #fafafa;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #eaf2ff;\n  color: #000000;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #ffe48d;\n  color: #000000;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #ffab3f;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #ffab3f;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #dddddd;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #E0ECFF;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #dddddd;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #E0ECFF;\n}\n.datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #efefef;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ccc;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #000000;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ccc;\n}\n.m-list li>a:hover {\n  background: #eaf2ff;\n  color: #000000;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n.pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #95B8E7;\n}\n.calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #4d4d4d;\n}\n.calendar-day {\n  color: #000000;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #95B8E7;\n}\n.calendar {\n  border-color: #95B8E7;\n}\n.calendar-header {\n  background: #E0ECFF;\n}\n.calendar-body,\n.calendar-menu {\n  background: #ffffff;\n}\n.calendar-body th {\n  background: #F4F4F4;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #eaf2ff;\n  color: #000000;\n}\n.calendar-hover {\n  border: 1px solid #b7d2ff;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #ffe48d;\n  color: #000000;\n  border: 1px solid #ffab3f;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #E0ECFF;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n.datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #F4F4F4;\n}\n.datebox-button a {\n  color: #444;\n}\n.spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #E0ECFF;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #444;\n  outline-style: none;\n  background-color: #E0ECFF;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #eaf2ff;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #eaf2ff;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #E0ECFF;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #E0ECFF;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #E0ECFF;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n.progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.progressbar {\n  border-color: #95B8E7;\n}\n.progressbar-text {\n  color: #000000;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #ffe48d;\n  color: #000000;\n}\n.searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #E0ECFF;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #95B8E7;\n  background: #E0ECFF;\n}\n.slider-rule span {\n  border-color: #95B8E7;\n}\n.slider-rulelabel span {\n  color: #000000;\n}\n.menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #ccc;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #fafafa;\n  border-color: #ddd;\n  color: #444;\n}\n.menu-content {\n  background: #ffffff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #fafafa;\n}\n.menu-active {\n  border-color: #b7d2ff;\n  color: #000000;\n  background: #eaf2ff;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #444;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #eaf2ff;\n  color: #000000;\n  border: 1px solid #b7d2ff;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #aac5e7;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #b7d2ff;\n  background-color: #eaf2ff;\n  color: #000000;\n}\n.s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #aac5e7;\n  border-width: 0 0 0 1px;\n}\n.messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #95B8E7;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n.tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #95B8E7;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #ffffff;\n  color: #000000;\n  border-color: #95B8E7;\n}\n.tree-node-hover {\n  background: #eaf2ff;\n  color: #000000;\n}\n.tree-node-selected {\n  background: #ffe48d;\n  color: #000000;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n.inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n  color: #000;\n}\n.tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #ffffff;\n  border-color: #95B8E7;\n  color: #000000;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #95B8E7;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #ffffff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #95B8E7;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #ffffff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #95B8E7;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #ffffff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #95B8E7;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #ffffff;\n}\n.switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #bbb;\n  border: 1px solid #bbb;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-on {\n  background: #ffe48d;\n  color: #000000;\n}\n.switchbutton-off {\n  background-color: #ffffff;\n  color: #000000;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #ffffff;\n  color: #000000;\n  border: 1px solid #bbb;\n  -moz-box-shadow: 0 0 3px 0 #bbb;\n  -webkit-box-shadow: 0 0 3px 0 #bbb;\n  box-shadow: 0 0 3px 0 #bbb;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #bbb;\n  -webkit-box-shadow: 0 0 3px 0 #bbb;\n  box-shadow: 0 0 3px 0 #bbb;\n  outline: none;\n}\n.radiobutton {\n  position: relative;\n  border: 2px solid #ffab3f;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #ffab3f;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.checkbox {\n  position: relative;\n  border: 2px solid #ffab3f;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #ffab3f;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #0E2D5F;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #0E2D5F;\n}\n.sidemenu .accordion-header:hover {\n  background: #eaf2ff;\n  color: #0E2D5F;\n}\n.sidemenu .tree-node-hover {\n  background: #eaf2ff;\n  color: #0E2D5F;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #ffab3f;\n  color: #000000;\n  background: #ffe48d;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n.timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #E0ECFF;\n  color: #0E2D5F;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #ffab3f;\n  color: #000000;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #ffab3f;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #ffab3f;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #000000;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #ffab3f;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/filebox.css",
    "content": ".filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/flex.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/layout.css",
    "content": ".layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #aac5e7;\n}\n.layout-split-north {\n  border-bottom: 5px solid #E6EEF8;\n}\n.layout-split-south {\n  border-top: 5px solid #E6EEF8;\n}\n.layout-split-east {\n  border-left: 5px solid #E6EEF8;\n}\n.layout-split-west {\n  border-right: 5px solid #E6EEF8;\n}\n.layout-expand {\n  background-color: #E0ECFF;\n}\n.layout-expand-over {\n  background-color: #E0ECFF;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/linkbutton.css",
    "content": ".l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #444;\n  background: #fafafa;\n  background-repeat: repeat-x;\n  border: 1px solid #bbb;\n  background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0);\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn:hover {\n  background: #eaf2ff;\n  color: #000000;\n  border: 1px solid #b7d2ff;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #b7d2ff;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #eaf2ff;\n  color: #000000;\n  border: 1px solid #b7d2ff;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #fafafa;\n  color: #444;\n  background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0);\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #ddd;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #ddd;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/menu.css",
    "content": ".menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #ccc;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #fafafa;\n  border-color: #ddd;\n  color: #444;\n}\n.menu-content {\n  background: #ffffff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #fafafa;\n}\n.menu-active {\n  border-color: #b7d2ff;\n  color: #000000;\n  background: #eaf2ff;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #444;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/menubutton.css",
    "content": ".m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #eaf2ff;\n  color: #000000;\n  border: 1px solid #b7d2ff;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #aac5e7;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #b7d2ff;\n  background-color: #eaf2ff;\n  color: #000000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/messager.css",
    "content": ".messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #95B8E7;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/numberbox.css",
    "content": ""
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/pagination.css",
    "content": ".pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #95B8E7;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/panel.css",
    "content": "* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #eaf2ff;\n  -moz-border-radius: 3px 3px 3px 3px;\n  -webkit-border-radius: 3px 3px 3px 3px;\n  border-radius: 3px 3px 3px 3px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #95B8E7;\n}\n.panel-header {\n  background-color: #E0ECFF;\n  background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%);\n  background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%);\n  background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%);\n  background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0);\n  color: #0E2D5F;\n}\n.panel-body {\n  background-color: #ffffff;\n  color: #000000;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #0E2D5F;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #95B8E7;\n  overflow: hidden;\n  background: #F4F4F4;\n  color: #000000;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/passwordbox.css",
    "content": ".passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/progressbar.css",
    "content": ".progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.progressbar {\n  border-color: #95B8E7;\n}\n.progressbar-text {\n  color: #000000;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #ffe48d;\n  color: #000000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/propertygrid.css",
    "content": ".propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #dddddd;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #E0ECFF;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #dddddd;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #E0ECFF;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/radiobutton.css",
    "content": ".radiobutton {\n  position: relative;\n  border: 2px solid #ffab3f;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #ffab3f;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/searchbox.css",
    "content": ".searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #E0ECFF;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/sidemenu.css",
    "content": ".sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #0E2D5F;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #0E2D5F;\n}\n.sidemenu .accordion-header:hover {\n  background: #eaf2ff;\n  color: #0E2D5F;\n}\n.sidemenu .tree-node-hover {\n  background: #eaf2ff;\n  color: #0E2D5F;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #ffab3f;\n  color: #000000;\n  background: #ffe48d;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/slider.css",
    "content": ".slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #95B8E7;\n  background: #E0ECFF;\n}\n.slider-rule span {\n  border-color: #95B8E7;\n}\n.slider-rulelabel span {\n  color: #000000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/spinner.css",
    "content": ".spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #E0ECFF;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #444;\n  outline-style: none;\n  background-color: #E0ECFF;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #eaf2ff;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #eaf2ff;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #E0ECFF;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #E0ECFF;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #E0ECFF;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/splitbutton.css",
    "content": ".s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #aac5e7;\n  border-width: 0 0 0 1px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/switchbutton.css",
    "content": ".switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #bbb;\n  border: 1px solid #bbb;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-on {\n  background: #ffe48d;\n  color: #000000;\n}\n.switchbutton-off {\n  background-color: #ffffff;\n  color: #000000;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #ffffff;\n  color: #000000;\n  border: 1px solid #bbb;\n  -moz-box-shadow: 0 0 3px 0 #bbb;\n  -webkit-box-shadow: 0 0 3px 0 #bbb;\n  box-shadow: 0 0 3px 0 #bbb;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #bbb;\n  -webkit-box-shadow: 0 0 3px 0 #bbb;\n  box-shadow: 0 0 3px 0 #bbb;\n  outline: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/tabs.css",
    "content": ".tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 0 0;\n  -webkit-border-radius: 5px 5px 0 0;\n  border-radius: 5px 5px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 5px 5px;\n  -webkit-border-radius: 0 0 5px 5px;\n  border-radius: 0 0 5px 5px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #E0ECFF url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #E0ECFF url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #eaf2ff;\n  color: #000000;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #ffffff;\n  color: #0E2D5F;\n  background: -webkit-linear-gradient(top,#EFF5FF 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#EFF5FF 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#EFF5FF 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#EFF5FF 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=0);\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(top,#ffffff 0,#EFF5FF 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#EFF5FF 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#EFF5FF 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#EFF5FF 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=0);\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#EFF5FF 0,#ffffff 100%);\n  background: -moz-linear-gradient(left,#EFF5FF 0,#ffffff 100%);\n  background: -o-linear-gradient(left,#EFF5FF 0,#ffffff 100%);\n  background: linear-gradient(to right,#EFF5FF 0,#ffffff 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=1);\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#ffffff 0,#EFF5FF 100%);\n  background: -moz-linear-gradient(left,#ffffff 0,#EFF5FF 100%);\n  background: -o-linear-gradient(left,#ffffff 0,#EFF5FF 100%);\n  background: linear-gradient(to right,#ffffff 0,#EFF5FF 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=1);\n}\n.tabs li .tabs-inner {\n  color: #0E2D5F;\n  background-color: #E0ECFF;\n  background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%);\n  background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%);\n  background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%);\n  background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0);\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #E0ECFF;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #95B8E7;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #eaf2ff;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #ffffff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #ffffff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #ffffff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #ffffff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #ffe48d;\n  color: #000000;\n  filter: none;\n  border-color: #95B8E7;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/tagbox.css",
    "content": ".tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #eaf2ff;\n  color: #000000;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/textbox.css",
    "content": ".textbox {\n  position: relative;\n  border: 1px solid #95B8E7;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #6b9cde;\n  -moz-box-shadow: 0 0 3px 0 #95B8E7;\n  -webkit-box-shadow: 0 0 3px 0 #95B8E7;\n  box-shadow: 0 0 3px 0 #95B8E7;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/timepicker.css",
    "content": ".timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #E0ECFF;\n  color: #0E2D5F;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #ffab3f;\n  color: #000000;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #ffab3f;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #ffab3f;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #000000;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #ffab3f;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/tooltip.css",
    "content": ".tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #ffffff;\n  border-color: #95B8E7;\n  color: #000000;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #95B8E7;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #ffffff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #95B8E7;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #ffffff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #95B8E7;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #ffffff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #95B8E7;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #ffffff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/tree.css",
    "content": ".tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #95B8E7;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #ffffff;\n  color: #000000;\n  border-color: #95B8E7;\n}\n.tree-node-hover {\n  background: #eaf2ff;\n  color: #000000;\n}\n.tree-node-selected {\n  background: #ffe48d;\n  color: #000000;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/validatebox.css",
    "content": ".inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n  color: #000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/default/window.css",
    "content": ".window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.window-shadow {\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #95B8E7;\n}\n.window {\n  background-color: #E0ECFF;\n  background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%);\n  background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%);\n  background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%);\n  background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 20%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0);\n}\n.window-proxy {\n  border: 1px dashed #95B8E7;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #ccc;\n}\n.window .panel-footer {\n  border: 1px solid #95B8E7;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/accordion.css",
    "content": ".accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #ffffff;\n  border-color: #D3D3D3;\n}\n.accordion .accordion-header {\n  background: #f3f3f3;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #0092DC;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #fff;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #f3f3f3;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #D3D3D3;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #f3f3f3;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #D3D3D3;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #f3f3f3;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #D3D3D3;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/calendar.css",
    "content": ".calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #4d4d4d;\n}\n.calendar-day {\n  color: #000000;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #D3D3D3;\n}\n.calendar {\n  border-color: #D3D3D3;\n}\n.calendar-header {\n  background: #f3f3f3;\n}\n.calendar-body,\n.calendar-menu {\n  background: #ffffff;\n}\n.calendar-body th {\n  background: #fafafa;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #e2e2e2;\n  color: #000000;\n}\n.calendar-hover {\n  border: 1px solid #ccc;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #0092DC;\n  color: #fff;\n  border: 1px solid #0070a9;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #f3f3f3;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/checkbox.css",
    "content": ".checkbox {\n  position: relative;\n  border: 2px solid #0070a9;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #0070a9;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/combo.css",
    "content": ".combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #ffffff;\n}\n.combo-arrow {\n  background-color: #f3f3f3;\n}\n.combo-arrow-hover {\n  background-color: #e2e2e2;\n}\n.combo-arrow:hover {\n  background-color: #e2e2e2;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/combobox.css",
    "content": ".combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #e2e2e2;\n  color: #000000;\n}\n.combobox-item-selected {\n  background-color: #0092DC;\n  color: #fff;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/datagrid.css",
    "content": ".datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #D3D3D3;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #fafafa;\n  background: -webkit-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%);\n  background: -moz-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%);\n  background: -o-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%);\n  background: linear-gradient(to bottom,#fdfdfd 0,#f5f5f5 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fdfdfd,endColorstr=#f5f5f5,GradientType=0);\n}\n.datagrid-cell-rownumber {\n  color: #000000;\n}\n.datagrid-resize-proxy {\n  background: #bfbfbf;\n}\n.datagrid-mask {\n  background: #ccc;\n}\n.datagrid-mask-msg {\n  border-color: #D3D3D3;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #fafafa;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #ddd;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #ccc;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #000000;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #fafafa;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #e2e2e2;\n  color: #000000;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #0092DC;\n  color: #fff;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #0070a9;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #0070a9;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/datalist.css",
    "content": ".datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #fafafa;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ccc;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #000000;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ccc;\n}\n.m-list li>a:hover {\n  background: #e2e2e2;\n  color: #000000;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/datebox.css",
    "content": ".datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #fafafa;\n}\n.datebox-button a {\n  color: #444;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/dialog.css",
    "content": ".dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #fafafa;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #D3D3D3 #D3D3D3 #ddd #D3D3D3;\n}\n.dialog-button {\n  border-color: #ddd #D3D3D3 #D3D3D3 #D3D3D3;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #fafafa;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/easyui.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #e2e2e2;\n  -moz-border-radius: 3px 3px 3px 3px;\n  -webkit-border-radius: 3px 3px 3px 3px;\n  border-radius: 3px 3px 3px 3px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #D3D3D3;\n}\n.panel-header {\n  background-color: #f3f3f3;\n  background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%);\n  background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%);\n  background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%);\n  background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0);\n  color: #575765;\n}\n.panel-body {\n  background-color: #ffffff;\n  color: #000000;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #575765;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #D3D3D3;\n  overflow: hidden;\n  background: #fafafa;\n  color: #000000;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n.accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #ffffff;\n  border-color: #D3D3D3;\n}\n.accordion .accordion-header {\n  background: #f3f3f3;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #0092DC;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #fff;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #f3f3f3;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #D3D3D3;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #f3f3f3;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #D3D3D3;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #f3f3f3;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #D3D3D3;\n}\n.window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.window-shadow {\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #D3D3D3;\n}\n.window {\n  background-color: #f3f3f3;\n  background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 20%);\n  background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 20%);\n  background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 20%);\n  background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 20%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0);\n}\n.window-proxy {\n  border: 1px dashed #D3D3D3;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #ccc;\n}\n.window .panel-footer {\n  border: 1px solid #D3D3D3;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n.dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #fafafa;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #D3D3D3 #D3D3D3 #ddd #D3D3D3;\n}\n.dialog-button {\n  border-color: #ddd #D3D3D3 #D3D3D3 #D3D3D3;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #fafafa;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #444;\n  background: #fafafa;\n  background-repeat: repeat-x;\n  border: 1px solid #bbb;\n  background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0);\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn:hover {\n  background: #e2e2e2;\n  color: #000000;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #ccc;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #e2e2e2;\n  color: #000000;\n  border: 1px solid #ccc;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #fafafa;\n  color: #444;\n  background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0);\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #ddd;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #ddd;\n}\n.textbox {\n  position: relative;\n  border: 1px solid #D3D3D3;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #bababa;\n  -moz-box-shadow: 0 0 3px 0 #D3D3D3;\n  -webkit-box-shadow: 0 0 3px 0 #D3D3D3;\n  box-shadow: 0 0 3px 0 #D3D3D3;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n.passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n.filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n.combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #ffffff;\n}\n.combo-arrow {\n  background-color: #f3f3f3;\n}\n.combo-arrow-hover {\n  background-color: #e2e2e2;\n}\n.combo-arrow:hover {\n  background-color: #e2e2e2;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n.combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #e2e2e2;\n  color: #000000;\n}\n.combobox-item-selected {\n  background-color: #0092DC;\n  color: #fff;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n.tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #e2e2e2;\n  color: #000000;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #bfbfbf;\n}\n.layout-split-north {\n  border-bottom: 5px solid #efefef;\n}\n.layout-split-south {\n  border-top: 5px solid #efefef;\n}\n.layout-split-east {\n  border-left: 5px solid #efefef;\n}\n.layout-split-west {\n  border-right: 5px solid #efefef;\n}\n.layout-expand {\n  background-color: #f3f3f3;\n}\n.layout-expand-over {\n  background-color: #f3f3f3;\n}\n.tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 0 0;\n  -webkit-border-radius: 5px 5px 0 0;\n  border-radius: 5px 5px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 5px 5px;\n  -webkit-border-radius: 0 0 5px 5px;\n  border-radius: 0 0 5px 5px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #f3f3f3 url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #f3f3f3 url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #e2e2e2;\n  color: #000000;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #ffffff;\n  color: #575765;\n  background: -webkit-linear-gradient(top,#F8F8F8 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#F8F8F8 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#F8F8F8 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#F8F8F8 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=0);\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(top,#ffffff 0,#F8F8F8 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#F8F8F8 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#F8F8F8 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#F8F8F8 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=0);\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#F8F8F8 0,#ffffff 100%);\n  background: -moz-linear-gradient(left,#F8F8F8 0,#ffffff 100%);\n  background: -o-linear-gradient(left,#F8F8F8 0,#ffffff 100%);\n  background: linear-gradient(to right,#F8F8F8 0,#ffffff 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=1);\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#ffffff 0,#F8F8F8 100%);\n  background: -moz-linear-gradient(left,#ffffff 0,#F8F8F8 100%);\n  background: -o-linear-gradient(left,#ffffff 0,#F8F8F8 100%);\n  background: linear-gradient(to right,#ffffff 0,#F8F8F8 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=1);\n}\n.tabs li .tabs-inner {\n  color: #575765;\n  background-color: #f3f3f3;\n  background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%);\n  background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%);\n  background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%);\n  background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0);\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #f3f3f3;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #D3D3D3;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #e2e2e2;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #ffffff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #ffffff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #ffffff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #ffffff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #0092DC;\n  color: #fff;\n  filter: none;\n  border-color: #D3D3D3;\n}\n.datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #D3D3D3;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #fafafa;\n  background: -webkit-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%);\n  background: -moz-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%);\n  background: -o-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%);\n  background: linear-gradient(to bottom,#fdfdfd 0,#f5f5f5 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fdfdfd,endColorstr=#f5f5f5,GradientType=0);\n}\n.datagrid-cell-rownumber {\n  color: #000000;\n}\n.datagrid-resize-proxy {\n  background: #bfbfbf;\n}\n.datagrid-mask {\n  background: #ccc;\n}\n.datagrid-mask-msg {\n  border-color: #D3D3D3;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #fafafa;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #ddd;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #ccc;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #000000;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #fafafa;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #e2e2e2;\n  color: #000000;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #0092DC;\n  color: #fff;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #0070a9;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #0070a9;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #ddd;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #f3f3f3;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #ddd;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #f3f3f3;\n}\n.datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #fafafa;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ccc;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #000000;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ccc;\n}\n.m-list li>a:hover {\n  background: #e2e2e2;\n  color: #000000;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n.pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #D3D3D3;\n}\n.calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #4d4d4d;\n}\n.calendar-day {\n  color: #000000;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #D3D3D3;\n}\n.calendar {\n  border-color: #D3D3D3;\n}\n.calendar-header {\n  background: #f3f3f3;\n}\n.calendar-body,\n.calendar-menu {\n  background: #ffffff;\n}\n.calendar-body th {\n  background: #fafafa;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #e2e2e2;\n  color: #000000;\n}\n.calendar-hover {\n  border: 1px solid #ccc;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #0092DC;\n  color: #fff;\n  border: 1px solid #0070a9;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #f3f3f3;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n.datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #fafafa;\n}\n.datebox-button a {\n  color: #444;\n}\n.spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #f3f3f3;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #444;\n  outline-style: none;\n  background-color: #f3f3f3;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #e2e2e2;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #e2e2e2;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #f3f3f3;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #f3f3f3;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #f3f3f3;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n.progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.progressbar {\n  border-color: #D3D3D3;\n}\n.progressbar-text {\n  color: #000000;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #0092DC;\n  color: #fff;\n}\n.searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #f3f3f3;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #D3D3D3;\n  background: #f3f3f3;\n}\n.slider-rule span {\n  border-color: #D3D3D3;\n}\n.slider-rulelabel span {\n  color: #000000;\n}\n.menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #ccc;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #f3f3f3;\n  border-color: #D3D3D3;\n  color: #444;\n}\n.menu-content {\n  background: #ffffff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #f3f3f3;\n}\n.menu-active {\n  border-color: #ccc;\n  color: #000000;\n  background: #e2e2e2;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #444;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #e2e2e2;\n  color: #000000;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #bfbfbf;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ccc;\n  background-color: #e2e2e2;\n  color: #000000;\n}\n.s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #bfbfbf;\n  border-width: 0 0 0 1px;\n}\n.messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #D3D3D3;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n.tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #D3D3D3;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #ffffff;\n  color: #000000;\n  border-color: #D3D3D3;\n}\n.tree-node-hover {\n  background: #e2e2e2;\n  color: #000000;\n}\n.tree-node-selected {\n  background: #0092DC;\n  color: #fff;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n.inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n  color: #000;\n}\n.tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #ffffff;\n  border-color: #D3D3D3;\n  color: #000000;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #D3D3D3;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #ffffff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #D3D3D3;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #ffffff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #D3D3D3;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #ffffff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #D3D3D3;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #ffffff;\n}\n.switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #bbb;\n  border: 1px solid #bbb;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-on {\n  background: #0092DC;\n  color: #fff;\n}\n.switchbutton-off {\n  background-color: #ffffff;\n  color: #000000;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #ffffff;\n  color: #000000;\n  border: 1px solid #bbb;\n  -moz-box-shadow: 0 0 3px 0 #bbb;\n  -webkit-box-shadow: 0 0 3px 0 #bbb;\n  box-shadow: 0 0 3px 0 #bbb;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #bbb;\n  -webkit-box-shadow: 0 0 3px 0 #bbb;\n  box-shadow: 0 0 3px 0 #bbb;\n  outline: none;\n}\n.radiobutton {\n  position: relative;\n  border: 2px solid #0070a9;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #0070a9;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.checkbox {\n  position: relative;\n  border: 2px solid #0070a9;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #0070a9;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #575765;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #575765;\n}\n.sidemenu .accordion-header:hover {\n  background: #e2e2e2;\n  color: #575765;\n}\n.sidemenu .tree-node-hover {\n  background: #e2e2e2;\n  color: #575765;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #0070a9;\n  color: #fff;\n  background: #0092DC;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n.timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #f3f3f3;\n  color: #575765;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #0070a9;\n  color: #fff;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #0070a9;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #0070a9;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #fff;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #0070a9;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/filebox.css",
    "content": ".filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/flex.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/layout.css",
    "content": ".layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #bfbfbf;\n}\n.layout-split-north {\n  border-bottom: 5px solid #efefef;\n}\n.layout-split-south {\n  border-top: 5px solid #efefef;\n}\n.layout-split-east {\n  border-left: 5px solid #efefef;\n}\n.layout-split-west {\n  border-right: 5px solid #efefef;\n}\n.layout-expand {\n  background-color: #f3f3f3;\n}\n.layout-expand-over {\n  background-color: #f3f3f3;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/linkbutton.css",
    "content": ".l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #444;\n  background: #fafafa;\n  background-repeat: repeat-x;\n  border: 1px solid #bbb;\n  background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0);\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn:hover {\n  background: #e2e2e2;\n  color: #000000;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #ccc;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #e2e2e2;\n  color: #000000;\n  border: 1px solid #ccc;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #fafafa;\n  color: #444;\n  background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0);\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #ddd;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #ddd;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/menu.css",
    "content": ".menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #ccc;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #f3f3f3;\n  border-color: #D3D3D3;\n  color: #444;\n}\n.menu-content {\n  background: #ffffff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #f3f3f3;\n}\n.menu-active {\n  border-color: #ccc;\n  color: #000000;\n  background: #e2e2e2;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #444;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/menubutton.css",
    "content": ".m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #e2e2e2;\n  color: #000000;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #bfbfbf;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ccc;\n  background-color: #e2e2e2;\n  color: #000000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/messager.css",
    "content": ".messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #D3D3D3;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/numberbox.css",
    "content": ""
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/pagination.css",
    "content": ".pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #D3D3D3;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/panel.css",
    "content": "* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #e2e2e2;\n  -moz-border-radius: 3px 3px 3px 3px;\n  -webkit-border-radius: 3px 3px 3px 3px;\n  border-radius: 3px 3px 3px 3px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #D3D3D3;\n}\n.panel-header {\n  background-color: #f3f3f3;\n  background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%);\n  background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%);\n  background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%);\n  background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0);\n  color: #575765;\n}\n.panel-body {\n  background-color: #ffffff;\n  color: #000000;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #575765;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #D3D3D3;\n  overflow: hidden;\n  background: #fafafa;\n  color: #000000;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/passwordbox.css",
    "content": ".passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/progressbar.css",
    "content": ".progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.progressbar {\n  border-color: #D3D3D3;\n}\n.progressbar-text {\n  color: #000000;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #0092DC;\n  color: #fff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/propertygrid.css",
    "content": ".propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #ddd;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #f3f3f3;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #ddd;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #f3f3f3;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/radiobutton.css",
    "content": ".radiobutton {\n  position: relative;\n  border: 2px solid #0070a9;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #0070a9;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/searchbox.css",
    "content": ".searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #f3f3f3;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/sidemenu.css",
    "content": ".sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #575765;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #575765;\n}\n.sidemenu .accordion-header:hover {\n  background: #e2e2e2;\n  color: #575765;\n}\n.sidemenu .tree-node-hover {\n  background: #e2e2e2;\n  color: #575765;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #0070a9;\n  color: #fff;\n  background: #0092DC;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/slider.css",
    "content": ".slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #D3D3D3;\n  background: #f3f3f3;\n}\n.slider-rule span {\n  border-color: #D3D3D3;\n}\n.slider-rulelabel span {\n  color: #000000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/spinner.css",
    "content": ".spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #f3f3f3;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #444;\n  outline-style: none;\n  background-color: #f3f3f3;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #e2e2e2;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #e2e2e2;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #f3f3f3;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #f3f3f3;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #f3f3f3;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/splitbutton.css",
    "content": ".s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #bfbfbf;\n  border-width: 0 0 0 1px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/switchbutton.css",
    "content": ".switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #bbb;\n  border: 1px solid #bbb;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.switchbutton-on {\n  background: #0092DC;\n  color: #fff;\n}\n.switchbutton-off {\n  background-color: #ffffff;\n  color: #000000;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #ffffff;\n  color: #000000;\n  border: 1px solid #bbb;\n  -moz-box-shadow: 0 0 3px 0 #bbb;\n  -webkit-box-shadow: 0 0 3px 0 #bbb;\n  box-shadow: 0 0 3px 0 #bbb;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #bbb;\n  -webkit-box-shadow: 0 0 3px 0 #bbb;\n  box-shadow: 0 0 3px 0 #bbb;\n  outline: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/tabs.css",
    "content": ".tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 5px 5px 0 0;\n  -webkit-border-radius: 5px 5px 0 0;\n  border-radius: 5px 5px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 5px 5px;\n  -webkit-border-radius: 0 0 5px 5px;\n  border-radius: 0 0 5px 5px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 5px 0 0 5px;\n  -webkit-border-radius: 5px 0 0 5px;\n  border-radius: 5px 0 0 5px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 5px 5px 0;\n  -webkit-border-radius: 0 5px 5px 0;\n  border-radius: 0 5px 5px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #f3f3f3 url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #f3f3f3 url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #e2e2e2;\n  color: #000000;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #ffffff;\n  color: #575765;\n  background: -webkit-linear-gradient(top,#F8F8F8 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#F8F8F8 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#F8F8F8 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#F8F8F8 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=0);\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(top,#ffffff 0,#F8F8F8 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#F8F8F8 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#F8F8F8 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#F8F8F8 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=0);\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#F8F8F8 0,#ffffff 100%);\n  background: -moz-linear-gradient(left,#F8F8F8 0,#ffffff 100%);\n  background: -o-linear-gradient(left,#F8F8F8 0,#ffffff 100%);\n  background: linear-gradient(to right,#F8F8F8 0,#ffffff 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=1);\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  background: -webkit-linear-gradient(left,#ffffff 0,#F8F8F8 100%);\n  background: -moz-linear-gradient(left,#ffffff 0,#F8F8F8 100%);\n  background: -o-linear-gradient(left,#ffffff 0,#F8F8F8 100%);\n  background: linear-gradient(to right,#ffffff 0,#F8F8F8 100%);\n  background-repeat: repeat-y;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=1);\n}\n.tabs li .tabs-inner {\n  color: #575765;\n  background-color: #f3f3f3;\n  background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%);\n  background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%);\n  background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%);\n  background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0);\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #f3f3f3;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #D3D3D3;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #e2e2e2;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #ffffff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #ffffff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #ffffff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #ffffff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #0092DC;\n  color: #fff;\n  filter: none;\n  border-color: #D3D3D3;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/tagbox.css",
    "content": ".tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  background: #e2e2e2;\n  color: #000000;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/textbox.css",
    "content": ".textbox {\n  position: relative;\n  border: 1px solid #D3D3D3;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #bababa;\n  -moz-box-shadow: 0 0 3px 0 #D3D3D3;\n  -webkit-box-shadow: 0 0 3px 0 #D3D3D3;\n  box-shadow: 0 0 3px 0 #D3D3D3;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/timepicker.css",
    "content": ".timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #f3f3f3;\n  color: #575765;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #0070a9;\n  color: #fff;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #0070a9;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #0070a9;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #fff;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #0070a9;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/tooltip.css",
    "content": ".tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #ffffff;\n  border-color: #D3D3D3;\n  color: #000000;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #D3D3D3;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #ffffff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #D3D3D3;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #ffffff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #D3D3D3;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #ffffff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #D3D3D3;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #ffffff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/tree.css",
    "content": ".tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #D3D3D3;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #ffffff;\n  color: #000000;\n  border-color: #D3D3D3;\n}\n.tree-node-hover {\n  background: #e2e2e2;\n  color: #000000;\n}\n.tree-node-selected {\n  background: #0092DC;\n  color: #fff;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/validatebox.css",
    "content": ".inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n  color: #000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/gray/window.css",
    "content": ".window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 5px 5px 5px 5px;\n  -webkit-border-radius: 5px 5px 5px 5px;\n  border-radius: 5px 5px 5px 5px;\n}\n.window-shadow {\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #D3D3D3;\n}\n.window {\n  background-color: #f3f3f3;\n  background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 20%);\n  background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 20%);\n  background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 20%);\n  background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 20%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0);\n}\n.window-proxy {\n  border: 1px dashed #D3D3D3;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #ccc;\n}\n.window .panel-footer {\n  border: 1px solid #D3D3D3;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/icon.css",
    "content": ".icon-blank{\n\tbackground:url('icons/blank.gif') no-repeat center center;\n}\n.icon-add{\n\tbackground:url('icons/edit_add.png') no-repeat center center;\n}\n.icon-edit{\n\tbackground:url('icons/pencil.png') no-repeat center center;\n}\n.icon-clear{\n\tbackground:url('icons/clear.png') no-repeat center center;\n}\n.icon-remove{\n\tbackground:url('icons/edit_remove.png') no-repeat center center;\n}\n.icon-save{\n\tbackground:url('icons/filesave.png') no-repeat center center;\n}\n.icon-cut{\n\tbackground:url('icons/cut.png') no-repeat center center;\n}\n.icon-ok{\n\tbackground:url('icons/ok.png') no-repeat center center;\n}\n.icon-no{\n\tbackground:url('icons/no.png') no-repeat center center;\n}\n.icon-cancel{\n\tbackground:url('icons/cancel.png') no-repeat center center;\n}\n.icon-reload{\n\tbackground:url('icons/reload.png') no-repeat center center;\n}\n.icon-search{\n\tbackground:url('icons/search.png') no-repeat center center;\n}\n.icon-print{\n\tbackground:url('icons/print.png') no-repeat center center;\n}\n.icon-help{\n\tbackground:url('icons/help.png') no-repeat center center;\n}\n.icon-undo{\n\tbackground:url('icons/undo.png') no-repeat center center;\n}\n.icon-redo{\n\tbackground:url('icons/redo.png') no-repeat center center;\n}\n.icon-back{\n\tbackground:url('icons/back.png') no-repeat center center;\n}\n.icon-sum{\n\tbackground:url('icons/sum.png') no-repeat center center;\n}\n.icon-tip{\n\tbackground:url('icons/tip.png') no-repeat center center;\n}\n.icon-filter{\n\tbackground:url('icons/filter.png') no-repeat center center;\n}\n.icon-man{\n\tbackground:url('icons/man.png') no-repeat center center;\n}\n.icon-lock{\n\tbackground:url('icons/lock.png') no-repeat center center;\n}\n.icon-more{\n\tbackground:url('icons/more.png') no-repeat center center;\n}\n\n\n.icon-mini-add{\n\tbackground:url('icons/mini_add.png') no-repeat center center;\n}\n.icon-mini-edit{\n\tbackground:url('icons/mini_edit.png') no-repeat center center;\n}\n.icon-mini-refresh{\n\tbackground:url('icons/mini_refresh.png') no-repeat center center;\n}\n\n.icon-large-picture{\n\tbackground:url('icons/large_picture.png') no-repeat center center;\n}\n.icon-large-clipart{\n\tbackground:url('icons/large_clipart.png') no-repeat center center;\n}\n.icon-large-shapes{\n\tbackground:url('icons/large_shapes.png') no-repeat center center;\n}\n.icon-large-smartart{\n\tbackground:url('icons/large_smartart.png') no-repeat center center;\n}\n.icon-large-chart{\n\tbackground:url('icons/large_chart.png') no-repeat center center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/accordion.css",
    "content": ".accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #ffffff;\n  border-color: #ddd;\n}\n.accordion .accordion-header {\n  background: #f5f5f5;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #00bbee;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #fff;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #f5f5f5;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #ddd;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #f5f5f5;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #ddd;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #f5f5f5;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #ddd;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/calendar.css",
    "content": ".calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #8d8d8d;\n}\n.calendar-day {\n  color: #404040;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #ddd;\n}\n.calendar {\n  border-color: #ddd;\n}\n.calendar-header {\n  background: #f5f5f5;\n}\n.calendar-body,\n.calendar-menu {\n  background: #ffffff;\n}\n.calendar-body th {\n  background: #fafafa;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #eee;\n  color: #404040;\n}\n.calendar-hover {\n  border: 1px solid #ccc;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #00bbee;\n  color: #fff;\n  border: 1px solid #00bbee;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #f5f5f5;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/checkbox.css",
    "content": ".checkbox {\n  position: relative;\n  border: 2px solid #00bbee;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #00bbee;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/combo.css",
    "content": ".combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #ffffff;\n}\n.combo-arrow {\n  background-color: #f5f5f5;\n}\n.combo-arrow-hover {\n  background-color: #eee;\n}\n.combo-arrow:hover {\n  background-color: #eee;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/combobox.css",
    "content": ".combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #eee;\n  color: #404040;\n}\n.combobox-item-selected {\n  background-color: #00bbee;\n  color: #fff;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/datagrid.css",
    "content": ".datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #ddd;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #fafafa;\n}\n.datagrid-cell-rownumber {\n  color: #404040;\n}\n.datagrid-resize-proxy {\n  background: #ccc;\n}\n.datagrid-mask {\n  background: #eee;\n}\n.datagrid-mask-msg {\n  border-color: #ddd;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #fafafa;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #eee;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #ebebeb;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #404040;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #f9f9f9;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #eee;\n  color: #404040;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #00bbee;\n  color: #fff;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #00bbee;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #00bbee;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/datalist.css",
    "content": ".datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #fafafa;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ebebeb;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #404040;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ebebeb;\n}\n.m-list li>a:hover {\n  background: #eee;\n  color: #404040;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/datebox.css",
    "content": ".datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #fafafa;\n}\n.datebox-button a {\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/dialog.css",
    "content": ".dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #fafafa;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #ddd #ddd #eee #ddd;\n}\n.dialog-button {\n  border-color: #eee #ddd #ddd #ddd;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #fafafa;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/easyui.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #eee;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #ddd;\n}\n.panel-header {\n  background-color: #f5f5f5;\n  color: #000000;\n}\n.panel-body {\n  background-color: #ffffff;\n  color: #404040;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #000000;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #ddd;\n  overflow: hidden;\n  background: #fafafa;\n  color: #404040;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n.accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #ffffff;\n  border-color: #ddd;\n}\n.accordion .accordion-header {\n  background: #f5f5f5;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #00bbee;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #fff;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #f5f5f5;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #ddd;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #f5f5f5;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #ddd;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #f5f5f5;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #ddd;\n}\n.window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.window-shadow {\n  background: #fafafa;\n  -moz-box-shadow: 2px 2px 3px #fafafa;\n  -webkit-box-shadow: 2px 2px 3px #fafafa;\n  box-shadow: 2px 2px 3px #fafafa;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #ddd;\n}\n.window {\n  background-color: #f5f5f5;\n}\n.window-proxy {\n  border: 1px dashed #ddd;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #eee;\n}\n.window .panel-footer {\n  border: 1px solid #ddd;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n.dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #fafafa;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #ddd #ddd #eee #ddd;\n}\n.dialog-button {\n  border-color: #eee #ddd #ddd #ddd;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #fafafa;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #404040;\n  background: #fafafa;\n  background-repeat: repeat-x;\n  border: 1px solid #d9d9d9;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.l-btn:hover {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #ccc;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #fafafa;\n  color: #404040;\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #00bbee;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #00bbee;\n}\n.textbox {\n  position: relative;\n  border: 1px solid #ddd;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #c4c4c4;\n  -moz-box-shadow: 0 0 3px 0 #ddd;\n  -webkit-box-shadow: 0 0 3px 0 #ddd;\n  box-shadow: 0 0 3px 0 #ddd;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n.passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n.filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n.combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #ffffff;\n}\n.combo-arrow {\n  background-color: #f5f5f5;\n}\n.combo-arrow-hover {\n  background-color: #eee;\n}\n.combo-arrow:hover {\n  background-color: #eee;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n.combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #eee;\n  color: #404040;\n}\n.combobox-item-selected {\n  background-color: #00bbee;\n  color: #fff;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n.tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  background: #eee;\n  color: #404040;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #ccc;\n}\n.layout-split-north {\n  border-bottom: 5px solid #ffffff;\n}\n.layout-split-south {\n  border-top: 5px solid #ffffff;\n}\n.layout-split-east {\n  border-left: 5px solid #ffffff;\n}\n.layout-split-west {\n  border-right: 5px solid #ffffff;\n}\n.layout-expand {\n  background-color: #f5f5f5;\n}\n.layout-expand-over {\n  background-color: #f5f5f5;\n}\n.tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 4px 4px 0 0;\n  -webkit-border-radius: 4px 4px 0 0;\n  border-radius: 4px 4px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 4px 4px;\n  -webkit-border-radius: 0 0 4px 4px;\n  border-radius: 0 0 4px 4px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 4px 0 0 4px;\n  -webkit-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 4px 4px 0;\n  -webkit-border-radius: 0 4px 4px 0;\n  border-radius: 0 4px 4px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #f5f5f5 url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #f5f5f5 url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #eee;\n  color: #404040;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #ffffff;\n  color: #000000;\n}\n.tabs li .tabs-inner {\n  color: #000000;\n  background-color: #f5f5f5;\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #f5f5f5;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #ddd;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #eee;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #ffffff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #ffffff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #ffffff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #ffffff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #00bbee;\n  color: #fff;\n  filter: none;\n  border-color: #ddd;\n}\n.datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #ddd;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #fafafa;\n}\n.datagrid-cell-rownumber {\n  color: #404040;\n}\n.datagrid-resize-proxy {\n  background: #ccc;\n}\n.datagrid-mask {\n  background: #eee;\n}\n.datagrid-mask-msg {\n  border-color: #ddd;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #fafafa;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #eee;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #ebebeb;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #404040;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #f9f9f9;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #eee;\n  color: #404040;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #00bbee;\n  color: #fff;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #00bbee;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #00bbee;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #eee;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #f5f5f5;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #eee;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #f5f5f5;\n}\n.datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #fafafa;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ebebeb;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #404040;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ebebeb;\n}\n.m-list li>a:hover {\n  background: #eee;\n  color: #404040;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n.pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #ddd;\n}\n.calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #8d8d8d;\n}\n.calendar-day {\n  color: #404040;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #ddd;\n}\n.calendar {\n  border-color: #ddd;\n}\n.calendar-header {\n  background: #f5f5f5;\n}\n.calendar-body,\n.calendar-menu {\n  background: #ffffff;\n}\n.calendar-body th {\n  background: #fafafa;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #eee;\n  color: #404040;\n}\n.calendar-hover {\n  border: 1px solid #ccc;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #00bbee;\n  color: #fff;\n  border: 1px solid #00bbee;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #f5f5f5;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n.datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #fafafa;\n}\n.datebox-button a {\n  color: #404040;\n}\n.spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #f5f5f5;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #404040;\n  outline-style: none;\n  background-color: #f5f5f5;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #eee;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #eee;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #f5f5f5;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #f5f5f5;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #f5f5f5;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n.progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 4px 0 0 4px;\n  -webkit-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n}\n.progressbar {\n  border-color: #ddd;\n}\n.progressbar-text {\n  color: #404040;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #00bbee;\n  color: #fff;\n}\n.searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #f5f5f5;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 4px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #ddd;\n  background: #f5f5f5;\n}\n.slider-rule span {\n  border-color: #ddd;\n}\n.slider-rulelabel span {\n  color: #404040;\n}\n.menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  background: #fafafa;\n  -moz-box-shadow: 2px 2px 3px #fafafa;\n  -webkit-box-shadow: 2px 2px 3px #fafafa;\n  box-shadow: 2px 2px 3px #fafafa;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #ddd;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #fff;\n  border-color: #eee;\n  color: #404040;\n}\n.menu-content {\n  background: #ffffff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #fff;\n}\n.menu-active {\n  border-color: #ccc;\n  color: #404040;\n  background: #eee;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #404040;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #ccc;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ccc;\n  background-color: #eee;\n  color: #404040;\n}\n.s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #ccc;\n  border-width: 0 0 0 1px;\n}\n.messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #ddd;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n.tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #ddd;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #ffffff;\n  color: #404040;\n  border-color: #ddd;\n}\n.tree-node-hover {\n  background: #eee;\n  color: #404040;\n}\n.tree-node-selected {\n  background: #00bbee;\n  color: #fff;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n.inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff;\n  color: #404040;\n}\n.tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #ffffff;\n  border-color: #ddd;\n  color: #404040;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #ddd;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #ffffff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #ddd;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #ffffff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #ddd;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #ffffff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #ddd;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #ffffff;\n}\n.switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #d9d9d9;\n  border: 1px solid #d9d9d9;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.switchbutton-on {\n  background: #00bbee;\n  color: #fff;\n}\n.switchbutton-off {\n  background-color: #ffffff;\n  color: #404040;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 4px 0 0 4px;\n  -webkit-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 4px 4px 0;\n  -webkit-border-radius: 0 4px 4px 0;\n  border-radius: 0 4px 4px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #ffffff;\n  color: #404040;\n  border: 1px solid #d9d9d9;\n  -moz-box-shadow: 0 0 3px 0 #d9d9d9;\n  -webkit-box-shadow: 0 0 3px 0 #d9d9d9;\n  box-shadow: 0 0 3px 0 #d9d9d9;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #d9d9d9;\n  -webkit-box-shadow: 0 0 3px 0 #d9d9d9;\n  box-shadow: 0 0 3px 0 #d9d9d9;\n  outline: none;\n}\n.radiobutton {\n  position: relative;\n  border: 2px solid #00bbee;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #00bbee;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.checkbox {\n  position: relative;\n  border: 2px solid #00bbee;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #00bbee;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #000000;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #000000;\n}\n.sidemenu .accordion-header:hover {\n  background: #eee;\n  color: #000000;\n}\n.sidemenu .tree-node-hover {\n  background: #eee;\n  color: #000000;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #00bbee;\n  color: #fff;\n  background: #00bbee;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n.timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #f5f5f5;\n  color: #000000;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #00bbee;\n  color: #fff;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #00bbee;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #00bbee;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #fff;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #00bbee;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n.l-btn {\n  box-shadow: 0 1px 2px rgba(0,0,0,0.2), 0 1px 1px rgba(0,0,0,0.05);\n}\n.l-btn:active {\n  box-shadow: 0 6px 17px 0 rgba(235,235,235,0.3);\n}\n.l-btn-selected {\n  box-shadow: 0 1px 2px rgba(89,205,226,0.2), 0 1px 1px rgba(89,205,226,0.05);\n}\n.l-btn-plain,\n.l-btn-disabled,\n.l-btn-disabled:active,\n.textbox-button {\n  box-shadow: none;\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #00bbee;\n  color: #fff;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #00bbee;\n}\n.m-btn-active,\n.m-btn-plain-active,\n.s-btn-active,\n.s-btn-plain-active {\n  background: #00bbee;\n  color: #fff;\n}\n.menu-shadow,\n.combo-p {\n  -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);\n  -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);\n  box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);\n  filter: none;\n}\n.menu-active {\n  border-color: transparent;\n  color: #fff;\n  background: #00bbee;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #404040;\n}\n.window {\n  background-color: #fff;\n}\n.window-proxy {\n  border-color: #ccc;\n}\n.window-shadow {\n  -moz-box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12);\n  -webkit-box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12);\n  box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12);\n  filter: none;\n}\n.window-mask {\n  background: #000;\n}\n.datagrid-header .datagrid-cell,\n.datagrid-header .datagrid-cell-group {\n  color: #666;\n  font-weight: bold;\n  filter: alpha(opacity=80);\n  opacity: 0.80;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-style: solid;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/filebox.css",
    "content": ".filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/flex.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/layout.css",
    "content": ".layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #ccc;\n}\n.layout-split-north {\n  border-bottom: 5px solid #ffffff;\n}\n.layout-split-south {\n  border-top: 5px solid #ffffff;\n}\n.layout-split-east {\n  border-left: 5px solid #ffffff;\n}\n.layout-split-west {\n  border-right: 5px solid #ffffff;\n}\n.layout-expand {\n  background-color: #f5f5f5;\n}\n.layout-expand-over {\n  background-color: #f5f5f5;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/linkbutton.css",
    "content": ".l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #404040;\n  background: #fafafa;\n  background-repeat: repeat-x;\n  border: 1px solid #d9d9d9;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.l-btn:hover {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #ccc;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #fafafa;\n  color: #404040;\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #00bbee;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #00bbee;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/menu.css",
    "content": ".menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  background: #fafafa;\n  -moz-box-shadow: 2px 2px 3px #fafafa;\n  -webkit-box-shadow: 2px 2px 3px #fafafa;\n  box-shadow: 2px 2px 3px #fafafa;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #ddd;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #fff;\n  border-color: #eee;\n  color: #404040;\n}\n.menu-content {\n  background: #ffffff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #fff;\n}\n.menu-active {\n  border-color: #ccc;\n  color: #404040;\n  background: #eee;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/menubutton.css",
    "content": ".m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #ccc;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ccc;\n  background-color: #eee;\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/messager.css",
    "content": ".messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #ddd;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/numberbox.css",
    "content": ""
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/pagination.css",
    "content": ".pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #ddd;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/panel.css",
    "content": "* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #eee;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #ddd;\n}\n.panel-header {\n  background-color: #f5f5f5;\n  color: #000000;\n}\n.panel-body {\n  background-color: #ffffff;\n  color: #404040;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #000000;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #ddd;\n  overflow: hidden;\n  background: #fafafa;\n  color: #404040;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/passwordbox.css",
    "content": ".passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/progressbar.css",
    "content": ".progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 4px 0 0 4px;\n  -webkit-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n}\n.progressbar {\n  border-color: #ddd;\n}\n.progressbar-text {\n  color: #404040;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #00bbee;\n  color: #fff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/propertygrid.css",
    "content": ".propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #eee;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #f5f5f5;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #eee;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #f5f5f5;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/radiobutton.css",
    "content": ".radiobutton {\n  position: relative;\n  border: 2px solid #00bbee;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #00bbee;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/searchbox.css",
    "content": ".searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #f5f5f5;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/sidemenu.css",
    "content": ".sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #000000;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #000000;\n}\n.sidemenu .accordion-header:hover {\n  background: #eee;\n  color: #000000;\n}\n.sidemenu .tree-node-hover {\n  background: #eee;\n  color: #000000;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #00bbee;\n  color: #fff;\n  background: #00bbee;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/slider.css",
    "content": ".slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 4px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #ddd;\n  background: #f5f5f5;\n}\n.slider-rule span {\n  border-color: #ddd;\n}\n.slider-rulelabel span {\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/spinner.css",
    "content": ".spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #f5f5f5;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #404040;\n  outline-style: none;\n  background-color: #f5f5f5;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #eee;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #eee;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #f5f5f5;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #f5f5f5;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #f5f5f5;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/splitbutton.css",
    "content": ".s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #ccc;\n  border-width: 0 0 0 1px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/switchbutton.css",
    "content": ".switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #d9d9d9;\n  border: 1px solid #d9d9d9;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.switchbutton-on {\n  background: #00bbee;\n  color: #fff;\n}\n.switchbutton-off {\n  background-color: #ffffff;\n  color: #404040;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 4px 0 0 4px;\n  -webkit-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 4px 4px 0;\n  -webkit-border-radius: 0 4px 4px 0;\n  border-radius: 0 4px 4px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #ffffff;\n  color: #404040;\n  border: 1px solid #d9d9d9;\n  -moz-box-shadow: 0 0 3px 0 #d9d9d9;\n  -webkit-box-shadow: 0 0 3px 0 #d9d9d9;\n  box-shadow: 0 0 3px 0 #d9d9d9;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #d9d9d9;\n  -webkit-box-shadow: 0 0 3px 0 #d9d9d9;\n  box-shadow: 0 0 3px 0 #d9d9d9;\n  outline: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/tabs.css",
    "content": ".tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 4px 4px 0 0;\n  -webkit-border-radius: 4px 4px 0 0;\n  border-radius: 4px 4px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 4px 4px;\n  -webkit-border-radius: 0 0 4px 4px;\n  border-radius: 0 0 4px 4px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 4px 0 0 4px;\n  -webkit-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 4px 4px 0;\n  -webkit-border-radius: 0 4px 4px 0;\n  border-radius: 0 4px 4px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #f5f5f5 url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #f5f5f5 url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #eee;\n  color: #404040;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #ffffff;\n  color: #000000;\n}\n.tabs li .tabs-inner {\n  color: #000000;\n  background-color: #f5f5f5;\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #f5f5f5;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #ddd;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #eee;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #ffffff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #ffffff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #ffffff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #ffffff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #00bbee;\n  color: #fff;\n  filter: none;\n  border-color: #ddd;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/tagbox.css",
    "content": ".tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  background: #eee;\n  color: #404040;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/textbox.css",
    "content": ".textbox {\n  position: relative;\n  border: 1px solid #ddd;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #c4c4c4;\n  -moz-box-shadow: 0 0 3px 0 #ddd;\n  -webkit-box-shadow: 0 0 3px 0 #ddd;\n  box-shadow: 0 0 3px 0 #ddd;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/timepicker.css",
    "content": ".timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #f5f5f5;\n  color: #000000;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #00bbee;\n  color: #fff;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #00bbee;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #00bbee;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #fff;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #00bbee;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/tooltip.css",
    "content": ".tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #ffffff;\n  border-color: #ddd;\n  color: #404040;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #ddd;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #ffffff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #ddd;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #ffffff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #ddd;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #ffffff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #ddd;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #ffffff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/tree.css",
    "content": ".tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #ddd;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #ffffff;\n  color: #404040;\n  border-color: #ddd;\n}\n.tree-node-hover {\n  background: #eee;\n  color: #404040;\n}\n.tree-node-selected {\n  background: #00bbee;\n  color: #fff;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/validatebox.css",
    "content": ".inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff;\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material/window.css",
    "content": ".window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.window-shadow {\n  background: #fafafa;\n  -moz-box-shadow: 2px 2px 3px #fafafa;\n  -webkit-box-shadow: 2px 2px 3px #fafafa;\n  box-shadow: 2px 2px 3px #fafafa;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #ddd;\n}\n.window {\n  background-color: #f5f5f5;\n}\n.window-proxy {\n  border: 1px dashed #ddd;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #eee;\n}\n.window .panel-footer {\n  border: 1px solid #ddd;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/accordion.css",
    "content": ".accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #ffffff;\n  border-color: #dfdfdf;\n}\n.accordion .accordion-header {\n  background: #f5f5f5;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #eee;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #2196f3;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #f5f5f5;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #dfdfdf;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #f5f5f5;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #dfdfdf;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #f5f5f5;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #dfdfdf;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/calendar.css",
    "content": ".calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #8d8d8d;\n}\n.calendar-day {\n  color: #404040;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #dfdfdf;\n}\n.calendar {\n  border-color: #dfdfdf;\n}\n.calendar-header {\n  background: #f5f5f5;\n}\n.calendar-body,\n.calendar-menu {\n  background: #ffffff;\n}\n.calendar-body th {\n  background: #fafafa;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #eee;\n  color: #404040;\n}\n.calendar-hover {\n  border: 1px solid #ccc;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #eee;\n  color: #2196f3;\n  border: 1px solid #2196f3;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #f5f5f5;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/checkbox.css",
    "content": ".checkbox {\n  position: relative;\n  border: 2px solid #2196f3;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #2196f3;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/combo.css",
    "content": ".combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #ffffff;\n}\n.combo-arrow {\n  background-color: #f5f5f5;\n}\n.combo-arrow-hover {\n  background-color: #eee;\n}\n.combo-arrow:hover {\n  background-color: #eee;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/combobox.css",
    "content": ".combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #eee;\n  color: #404040;\n}\n.combobox-item-selected {\n  background-color: #eee;\n  color: #2196f3;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/datagrid.css",
    "content": ".datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #dfdfdf;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #c62828;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #fff;\n}\n.datagrid-cell-rownumber {\n  color: #404040;\n}\n.datagrid-resize-proxy {\n  background: #ccc;\n}\n.datagrid-mask {\n  background: #eee;\n}\n.datagrid-mask-msg {\n  border-color: #dfdfdf;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #fafafa;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #dfdfdf;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #dfdfdf;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #404040;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #fafafa;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #eee;\n  color: #404040;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #eee;\n  color: #2196f3;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #2196f3;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #2196f3;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/datalist.css",
    "content": ".datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #fff;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #dfdfdf;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #404040;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #dfdfdf;\n}\n.m-list li>a:hover {\n  background: #eee;\n  color: #404040;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/datebox.css",
    "content": ".datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #fafafa;\n}\n.datebox-button a {\n  color: #ffffff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/dialog.css",
    "content": ".dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #fafafa;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #dfdfdf #dfdfdf #dfdfdf #dfdfdf;\n}\n.dialog-button {\n  border-color: #dfdfdf #dfdfdf #dfdfdf #dfdfdf;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #fafafa;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/easyui.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #eee;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #dfdfdf;\n}\n.panel-header {\n  background-color: #f5f5f5;\n  color: #404040;\n}\n.panel-body {\n  background-color: #ffffff;\n  color: #404040;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #404040;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #dfdfdf;\n  overflow: hidden;\n  background: #fafafa;\n  color: #404040;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n.accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #ffffff;\n  border-color: #dfdfdf;\n}\n.accordion .accordion-header {\n  background: #f5f5f5;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #eee;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #2196f3;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #f5f5f5;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #dfdfdf;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #f5f5f5;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #dfdfdf;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #f5f5f5;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #dfdfdf;\n}\n.window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.window-shadow {\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #dfdfdf;\n}\n.window {\n  background-color: #f5f5f5;\n}\n.window-proxy {\n  border: 1px dashed #dfdfdf;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #eee;\n}\n.window .panel-footer {\n  border: 1px solid #dfdfdf;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n.dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #fafafa;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #dfdfdf #dfdfdf #dfdfdf #dfdfdf;\n}\n.dialog-button {\n  border-color: #dfdfdf #dfdfdf #dfdfdf #dfdfdf;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #fafafa;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #ffffff;\n  background: #2196f3;\n  background-repeat: repeat-x;\n  border: 1px solid #2196f3;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.l-btn:hover {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #ccc;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #2196f3;\n  color: #ffffff;\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #6ab8f7;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #6ab8f7;\n}\n.textbox {\n  position: relative;\n  border: 1px solid #dfdfdf;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #c6c6c6;\n  -moz-box-shadow: 0 0 3px 0 #dfdfdf;\n  -webkit-box-shadow: 0 0 3px 0 #dfdfdf;\n  box-shadow: 0 0 3px 0 #dfdfdf;\n}\n.textbox-invalid {\n  border-color: #c62828;\n  background-color: #fff;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n.passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n.filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n.combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #ffffff;\n}\n.combo-arrow {\n  background-color: #f5f5f5;\n}\n.combo-arrow-hover {\n  background-color: #eee;\n}\n.combo-arrow:hover {\n  background-color: #eee;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n.combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #eee;\n  color: #404040;\n}\n.combobox-item-selected {\n  background-color: #eee;\n  color: #2196f3;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n.tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n  background: #eee;\n  color: #404040;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #ccc;\n}\n.layout-split-north {\n  border-bottom: 5px solid #ffffff;\n}\n.layout-split-south {\n  border-top: 5px solid #ffffff;\n}\n.layout-split-east {\n  border-left: 5px solid #ffffff;\n}\n.layout-split-west {\n  border-right: 5px solid #ffffff;\n}\n.layout-expand {\n  background-color: #f5f5f5;\n}\n.layout-expand-over {\n  background-color: #f5f5f5;\n}\n.tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  border-radius: 2px 2px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  border-radius: 0 0 2px 2px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 2px 0 0 2px;\n  -webkit-border-radius: 2px 0 0 2px;\n  border-radius: 2px 0 0 2px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 2px 2px 0;\n  -webkit-border-radius: 0 2px 2px 0;\n  border-radius: 0 2px 2px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #f5f5f5 url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #f5f5f5 url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #eee;\n  color: #404040;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #ffffff;\n  color: #404040;\n}\n.tabs li .tabs-inner {\n  color: #404040;\n  background-color: #f5f5f5;\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #f5f5f5;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #dfdfdf;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #eee;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #ffffff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #ffffff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #ffffff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #ffffff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #eee;\n  color: #2196f3;\n  filter: none;\n  border-color: #dfdfdf;\n}\n.datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #dfdfdf;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #c62828;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #fff;\n}\n.datagrid-cell-rownumber {\n  color: #404040;\n}\n.datagrid-resize-proxy {\n  background: #ccc;\n}\n.datagrid-mask {\n  background: #eee;\n}\n.datagrid-mask-msg {\n  border-color: #dfdfdf;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #fafafa;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #dfdfdf;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #dfdfdf;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #404040;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #fafafa;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #eee;\n  color: #404040;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #eee;\n  color: #2196f3;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #2196f3;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #2196f3;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #dfdfdf;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #f5f5f5;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #dfdfdf;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #f5f5f5;\n}\n.datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #fff;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #dfdfdf;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #404040;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #dfdfdf;\n}\n.m-list li>a:hover {\n  background: #eee;\n  color: #404040;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n.pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #dfdfdf;\n}\n.calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #8d8d8d;\n}\n.calendar-day {\n  color: #404040;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #dfdfdf;\n}\n.calendar {\n  border-color: #dfdfdf;\n}\n.calendar-header {\n  background: #f5f5f5;\n}\n.calendar-body,\n.calendar-menu {\n  background: #ffffff;\n}\n.calendar-body th {\n  background: #fafafa;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #eee;\n  color: #404040;\n}\n.calendar-hover {\n  border: 1px solid #ccc;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #eee;\n  color: #2196f3;\n  border: 1px solid #2196f3;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #f5f5f5;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n.datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #fafafa;\n}\n.datebox-button a {\n  color: #ffffff;\n}\n.spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #f5f5f5;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #ffffff;\n  outline-style: none;\n  background-color: #f5f5f5;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #eee;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #eee;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #f5f5f5;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #f5f5f5;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #f5f5f5;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n.progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 2px 0 0 2px;\n  -webkit-border-radius: 2px 0 0 2px;\n  border-radius: 2px 0 0 2px;\n}\n.progressbar {\n  border-color: #dfdfdf;\n}\n.progressbar-text {\n  color: #404040;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #eee;\n  color: #2196f3;\n}\n.searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #f5f5f5;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 2px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #dfdfdf;\n  background: #f5f5f5;\n}\n.slider-rule span {\n  border-color: #dfdfdf;\n}\n.slider-rulelabel span {\n  color: #404040;\n}\n.menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #dfdfdf;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #fff;\n  border-color: #eee;\n  color: #404040;\n}\n.menu-content {\n  background: #ffffff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #fff;\n}\n.menu-active {\n  border-color: #ccc;\n  color: #404040;\n  background: #eee;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #404040;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #ccc;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ccc;\n  background-color: #eee;\n  color: #404040;\n}\n.s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #ccc;\n  border-width: 0 0 0 1px;\n}\n.messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #dfdfdf;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n.tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #dfdfdf;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #ffffff;\n  color: #404040;\n  border-color: #dfdfdf;\n}\n.tree-node-hover {\n  background: #eee;\n  color: #404040;\n}\n.tree-node-selected {\n  background: #eee;\n  color: #2196f3;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n.inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #c62828;\n  background-color: #fff;\n  color: #404040;\n}\n.tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #ffffff;\n  border-color: #dfdfdf;\n  color: #404040;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #dfdfdf;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #ffffff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #dfdfdf;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #ffffff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #dfdfdf;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #ffffff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #dfdfdf;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #ffffff;\n}\n.switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #2196f3;\n  border: 1px solid #2196f3;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.switchbutton-on {\n  background: #eee;\n  color: #2196f3;\n}\n.switchbutton-off {\n  background-color: #ffffff;\n  color: #404040;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 2px 0 0 2px;\n  -webkit-border-radius: 2px 0 0 2px;\n  border-radius: 2px 0 0 2px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 2px 2px 0;\n  -webkit-border-radius: 0 2px 2px 0;\n  border-radius: 0 2px 2px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #ffffff;\n  color: #404040;\n  border: 1px solid #2196f3;\n  -moz-box-shadow: 0 0 3px 0 #2196f3;\n  -webkit-box-shadow: 0 0 3px 0 #2196f3;\n  box-shadow: 0 0 3px 0 #2196f3;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #2196f3;\n  -webkit-box-shadow: 0 0 3px 0 #2196f3;\n  box-shadow: 0 0 3px 0 #2196f3;\n  outline: none;\n}\n.radiobutton {\n  position: relative;\n  border: 2px solid #2196f3;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #2196f3;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.checkbox {\n  position: relative;\n  border: 2px solid #2196f3;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #2196f3;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #404040;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #404040;\n}\n.sidemenu .accordion-header:hover {\n  background: #eee;\n  color: #404040;\n}\n.sidemenu .tree-node-hover {\n  background: #eee;\n  color: #404040;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #2196f3;\n  color: #2196f3;\n  background: #eee;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n.timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #f5f5f5;\n  color: #404040;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #2196f3;\n  color: #2196f3;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #2196f3;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #2196f3;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #2196f3;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #2196f3;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n.textbox {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n  border-top-color: transparent;\n  border-left-color: transparent;\n  border-right-color: transparent;\n}\n.textbox-focused {\n  border-color: #2196f3;\n  border-top-color: transparent;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  -moz-box-shadow: 0 0 3px 0 transparent;\n  -webkit-box-shadow: 0 0 3px 0 transparent;\n  box-shadow: 0 0 3px 0 transparent;\n}\n.textbox .textbox-button {\n  background-color: transparent;\n  color: #2196f3;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-right,\n.textbox .textbox-button-top,\n.textbox .textbox-button-bottom {\n  border-color: transparent;\n}\n.form-floating-label.form-field .textbox-label {\n  color: #8d8d8d;\n}\n.form-floating-label.form-field-focused .textbox-label {\n  color: #2196f3;\n}\n.combo-arrow,\n.combo-arrow:hover,\n.spinner-arrow-up,\n.spinner-arrow-up:hover,\n.spinner-arrow-down,\n.spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom {\n  background-color: transparent;\n}\n.datagrid-header .datagrid-cell,\n.datagrid-cell-group {\n  color: #a6a6a6;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-style: solid;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-left-color: transparent;\n  border-right-color: transparent;\n}\n.datagrid-header td[field]:hover,\n.datagrid-header .datagrid-field-td:hover {\n  background: #eee;\n}\n.datagrid-row-alt .datagrid-td-rownumber {\n  background-color: #fafafa;\n}\n.datagrid-row-over .datagrid-td-rownumber {\n  background-color: #eee;\n}\n.datagrid-row-selected,\n.datagrid-row-selected .datagrid-td-rownumber {\n  color: #404040;\n  background: #e1e1e1;\n}\n.datagrid-filter-row .textbox,\n.datagrid-editable .textbox {\n  border: 1px solid #dfdfdf;\n}\n.datagrid-editable .textbox-invalid {\n  border-color: #c62828;\n}\n.datagrid-view1 {\n  border-right: 1px solid #dfdfdf;\n}\n.datagrid-view3 {\n  border-left: 1px solid #dfdfdf;\n}\n.tree-node-selected {\n  color: #404040;\n  background: #e1e1e1;\n}\n.calendar-header,\n.calendar-body th {\n  background: transparent;\n}\n.calendar-selected {\n  background: #2196f3;\n  color: #fff;\n  border-color: transparent;\n}\n.calendar-selected.calendar-saturday {\n  background: #00ee00;\n}\n.calendar-selected.calendar-sunday {\n  background: #CC2222;\n}\n.calendar-info {\n  background: #2196f3;\n  color: #fff;\n}\n.datebox-button a {\n  color: #2196f3;\n}\n.tabs-header,\n.tabs-tool {\n  padding-top: 0;\n}\n.tabs li {\n  margin-bottom: 0;\n}\n.tabs li .tabs-inner,\n.tabs li .tabs-inner:hover {\n  color: #404040;\n  background: transparent;\n  border-color: transparent;\n  border-left-width: 0;\n  border-right-width: 0;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background: transparent;\n  border-color: transparent;\n  color: #2196f3;\n  border-bottom: 2px solid #2196f3;\n  border-radius: 0;\n  font-weight: normal;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  border-top: 2px solid transparent;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 2px solid #2196f3;\n  border-bottom: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  border-right: 2px solid transparent;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 2px solid #2196f3;\n  border-top-color: transparent;\n  border-bottom-color: transparent;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  border-left: 2px solid transparent;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 2px solid #2196f3;\n  border-top-color: transparent;\n  border-bottom-color: transparent;\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  color: #fff;\n}\n.slider-handle {\n  background: #2196f3;\n  -moz-border-radius: 50% 50% 50% 50%;\n  -webkit-border-radius: 50% 50% 50% 50%;\n  border-radius: 50% 50% 50% 50%;\n}\n.menu-shadow,\n.combo-p {\n  -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);\n  -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);\n  box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);\n  filter: none;\n}\n.menu {\n  padding: 3px 0;\n  border: 0;\n}\n.menu-icon {\n  left: 4px;\n}\n.menu-active {\n  border-color: transparent;\n  background: #eee;\n  border-radius: 0;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #404040;\n}\n.window {\n  background-color: #fff;\n}\n.window .window-header .panel-title {\n  height: 40px;\n  line-height: 40px;\n}\n.window .window-header .panel-icon {\n  left: 10px;\n}\n.window .window-header .panel-tool {\n  right: 10px;\n}\n.window .window-header .panel-title {\n  padding-left: 10px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 28px;\n}\n.window .window-header,\n.window .window-body,\n.window .dialog-toolbar,\n.window .dialog-button {\n  border-color: transparent;\n  background: transparent;\n}\n.window .dialog-button .l-btn {\n  color: #2196f3;\n  border-color: transparent;\n  background: transparent;\n}\n.window .dialog-button .l-btn:hover {\n  background: #eee;\n}\n.window-proxy {\n  border-color: #ccc;\n}\n.window-shadow {\n  -moz-box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12);\n  -webkit-box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12);\n  box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12);\n  filter: none;\n}\n.window-mask {\n  background: #000;\n}\n.sidemenu .tree-node-selected {\n  border-right: 0;\n}\n.l-btn-plain {\n  color: #2196f3;\n}\n.textbox .m-btn-active,\n.m-btn-active,\n.l-btn:hover {\n  background: #0c7cd5;\n  border-color: #0c7cd5;\n  color: #fff;\n}\n.m-btn-plain-active,\n.l-btn-plain:hover {\n  background: #eee;\n  border-color: #eee;\n  color: #2196f3;\n}\n.l-btn-selected {\n  color: #ffffff;\n}\n.l-btn-selected:hover {\n  background: #6ab8f7;\n  border-color: #2196f3;\n  color: #fff;\n}\n.pagination-link.l-btn-plain,\n.pagination-link.l-btn-plain:hover {\n  color: #404040;\n}\n.pagination-link.l-btn-selected,\n.pagination-link.l-btn-selected:hover {\n  color: #ffffff;\n}\n.m-btn .m-btn-downarrow {\n  background-image: url('images/menu_arrows2.png');\n}\n.textbox .m-btn.l-btn .m-btn-downarrow,\n.m-btn.l-btn-plain .m-btn-downarrow {\n  background-image: url('images/menu_arrows1.png');\n}\n.textbox .m-btn-active.l-btn .m-btn-downarrow {\n  background-image: url('images/menu_arrows2.png');\n}\n.spinner .l-btn {\n  opacity: 0.6;\n}\n.spinner .l-btn:hover {\n  background: transparent;\n  border-color: transparent;\n  opacity: 1.0;\n}\n.switchbutton-on {\n  background: #2196f3;\n  color: #ffffff;\n}\n.accordion .accordion-header {\n  background: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .accordion-header-selected {\n  border-bottom-color: transparent;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #404040;\n}\n.progressbar {\n  border: 0;\n  background: #b2dbfb;\n}\n.progressbar-text {\n  color: #404040;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #2196f3;\n  color: #fff;\n}\n.timepicker-panel .clock .item-selected {\n  color: #fff;\n}\n.timepicker-panel .panel-header {\n  background-color: #2196f3;\n  color: #fff;\n}\n.timepicker-panel .clock .hand .drag {\n  background-color: #fff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/filebox.css",
    "content": ".filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/flex.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/layout.css",
    "content": ".layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #ccc;\n}\n.layout-split-north {\n  border-bottom: 5px solid #ffffff;\n}\n.layout-split-south {\n  border-top: 5px solid #ffffff;\n}\n.layout-split-east {\n  border-left: 5px solid #ffffff;\n}\n.layout-split-west {\n  border-right: 5px solid #ffffff;\n}\n.layout-expand {\n  background-color: #f5f5f5;\n}\n.layout-expand-over {\n  background-color: #f5f5f5;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/linkbutton.css",
    "content": ".l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #ffffff;\n  background: #2196f3;\n  background-repeat: repeat-x;\n  border: 1px solid #2196f3;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.l-btn:hover {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #ccc;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #2196f3;\n  color: #ffffff;\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #6ab8f7;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #6ab8f7;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/menu.css",
    "content": ".menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #dfdfdf;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #fff;\n  border-color: #eee;\n  color: #404040;\n}\n.menu-content {\n  background: #ffffff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #fff;\n}\n.menu-active {\n  border-color: #ccc;\n  color: #404040;\n  background: #eee;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/menubutton.css",
    "content": ".m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #ccc;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ccc;\n  background-color: #eee;\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/messager.css",
    "content": ".messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #dfdfdf;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/numberbox.css",
    "content": ""
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/pagination.css",
    "content": ".pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #dfdfdf;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/panel.css",
    "content": "* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #eee;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #dfdfdf;\n}\n.panel-header {\n  background-color: #f5f5f5;\n  color: #404040;\n}\n.panel-body {\n  background-color: #ffffff;\n  color: #404040;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #404040;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #dfdfdf;\n  overflow: hidden;\n  background: #fafafa;\n  color: #404040;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/passwordbox.css",
    "content": ".passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/progressbar.css",
    "content": ".progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 2px 0 0 2px;\n  -webkit-border-radius: 2px 0 0 2px;\n  border-radius: 2px 0 0 2px;\n}\n.progressbar {\n  border-color: #dfdfdf;\n}\n.progressbar-text {\n  color: #404040;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #eee;\n  color: #2196f3;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/propertygrid.css",
    "content": ".propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #dfdfdf;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #f5f5f5;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #dfdfdf;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #f5f5f5;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/radiobutton.css",
    "content": ".radiobutton {\n  position: relative;\n  border: 2px solid #2196f3;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #2196f3;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/searchbox.css",
    "content": ".searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #f5f5f5;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/sidemenu.css",
    "content": ".sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #404040;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #404040;\n}\n.sidemenu .accordion-header:hover {\n  background: #eee;\n  color: #404040;\n}\n.sidemenu .tree-node-hover {\n  background: #eee;\n  color: #404040;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #2196f3;\n  color: #2196f3;\n  background: #eee;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/slider.css",
    "content": ".slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 2px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #dfdfdf;\n  background: #f5f5f5;\n}\n.slider-rule span {\n  border-color: #dfdfdf;\n}\n.slider-rulelabel span {\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/spinner.css",
    "content": ".spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #f5f5f5;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #ffffff;\n  outline-style: none;\n  background-color: #f5f5f5;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #eee;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #eee;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #f5f5f5;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #f5f5f5;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #f5f5f5;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/splitbutton.css",
    "content": ".s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #ccc;\n  border-width: 0 0 0 1px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/switchbutton.css",
    "content": ".switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #2196f3;\n  border: 1px solid #2196f3;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.switchbutton-on {\n  background: #eee;\n  color: #2196f3;\n}\n.switchbutton-off {\n  background-color: #ffffff;\n  color: #404040;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 2px 0 0 2px;\n  -webkit-border-radius: 2px 0 0 2px;\n  border-radius: 2px 0 0 2px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 2px 2px 0;\n  -webkit-border-radius: 0 2px 2px 0;\n  border-radius: 0 2px 2px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #ffffff;\n  color: #404040;\n  border: 1px solid #2196f3;\n  -moz-box-shadow: 0 0 3px 0 #2196f3;\n  -webkit-box-shadow: 0 0 3px 0 #2196f3;\n  box-shadow: 0 0 3px 0 #2196f3;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #2196f3;\n  -webkit-box-shadow: 0 0 3px 0 #2196f3;\n  box-shadow: 0 0 3px 0 #2196f3;\n  outline: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/tabs.css",
    "content": ".tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  border-radius: 2px 2px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  border-radius: 0 0 2px 2px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 2px 0 0 2px;\n  -webkit-border-radius: 2px 0 0 2px;\n  border-radius: 2px 0 0 2px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 2px 2px 0;\n  -webkit-border-radius: 0 2px 2px 0;\n  border-radius: 0 2px 2px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #f5f5f5 url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #f5f5f5 url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #eee;\n  color: #404040;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #ffffff;\n  color: #404040;\n}\n.tabs li .tabs-inner {\n  color: #404040;\n  background-color: #f5f5f5;\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #f5f5f5;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #dfdfdf;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #eee;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #ffffff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #ffffff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #ffffff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #ffffff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #eee;\n  color: #2196f3;\n  filter: none;\n  border-color: #dfdfdf;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/tagbox.css",
    "content": ".tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n  background: #eee;\n  color: #404040;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/textbox.css",
    "content": ".textbox {\n  position: relative;\n  border: 1px solid #dfdfdf;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #c6c6c6;\n  -moz-box-shadow: 0 0 3px 0 #dfdfdf;\n  -webkit-box-shadow: 0 0 3px 0 #dfdfdf;\n  box-shadow: 0 0 3px 0 #dfdfdf;\n}\n.textbox-invalid {\n  border-color: #c62828;\n  background-color: #fff;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/timepicker.css",
    "content": ".timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #f5f5f5;\n  color: #404040;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #2196f3;\n  color: #2196f3;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #2196f3;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #2196f3;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #2196f3;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #2196f3;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/tooltip.css",
    "content": ".tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #ffffff;\n  border-color: #dfdfdf;\n  color: #404040;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #dfdfdf;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #ffffff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #dfdfdf;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #ffffff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #dfdfdf;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #ffffff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #dfdfdf;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #ffffff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/tree.css",
    "content": ".tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #dfdfdf;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #ffffff;\n  color: #404040;\n  border-color: #dfdfdf;\n}\n.tree-node-hover {\n  background: #eee;\n  color: #404040;\n}\n.tree-node-selected {\n  background: #eee;\n  color: #2196f3;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/validatebox.css",
    "content": ".inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #c62828;\n  background-color: #fff;\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-blue/window.css",
    "content": ".window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.window-shadow {\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #dfdfdf;\n}\n.window {\n  background-color: #f5f5f5;\n}\n.window-proxy {\n  border: 1px dashed #dfdfdf;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #eee;\n}\n.window .panel-footer {\n  border: 1px solid #dfdfdf;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/accordion.css",
    "content": ".accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #ffffff;\n  border-color: #dfdfdf;\n}\n.accordion .accordion-header {\n  background: #fafafa;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #eee;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #39c;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #fafafa;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #dfdfdf;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #fafafa;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #dfdfdf;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #fafafa;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #dfdfdf;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/calendar.css",
    "content": ".calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #8d8d8d;\n}\n.calendar-day {\n  color: #404040;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #dfdfdf;\n}\n.calendar {\n  border-color: #dfdfdf;\n}\n.calendar-header {\n  background: #fafafa;\n}\n.calendar-body,\n.calendar-menu {\n  background: #ffffff;\n}\n.calendar-body th {\n  background: #fafafa;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #eee;\n  color: #404040;\n}\n.calendar-hover {\n  border: 1px solid #ccc;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #eee;\n  color: #39c;\n  border: 1px solid #39c;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #fafafa;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/checkbox.css",
    "content": ".checkbox {\n  position: relative;\n  border: 2px solid #39c;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #39c;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/combo.css",
    "content": ".combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #ffffff;\n}\n.combo-arrow {\n  background-color: #fafafa;\n}\n.combo-arrow-hover {\n  background-color: #eee;\n}\n.combo-arrow:hover {\n  background-color: #eee;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/combobox.css",
    "content": ".combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #eee;\n  color: #404040;\n}\n.combobox-item-selected {\n  background-color: #eee;\n  color: #39c;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/datagrid.css",
    "content": ".datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #dfdfdf;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #fff;\n}\n.datagrid-cell-rownumber {\n  color: #404040;\n}\n.datagrid-resize-proxy {\n  background: #ccc;\n}\n.datagrid-mask {\n  background: #eee;\n}\n.datagrid-mask-msg {\n  border-color: #dfdfdf;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #fafafa;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #dfdfdf;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #dfdfdf;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #404040;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #fafafa;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #eee;\n  color: #404040;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #eee;\n  color: #39c;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #39c;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #39c;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/datalist.css",
    "content": ".datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #fff;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #dfdfdf;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #404040;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #dfdfdf;\n}\n.m-list li>a:hover {\n  background: #eee;\n  color: #404040;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/datebox.css",
    "content": ".datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #fafafa;\n}\n.datebox-button a {\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/dialog.css",
    "content": ".dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #fafafa;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #dfdfdf #dfdfdf #dfdfdf #dfdfdf;\n}\n.dialog-button {\n  border-color: #dfdfdf #dfdfdf #dfdfdf #dfdfdf;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #fafafa;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/easyui.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #eee;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #dfdfdf;\n}\n.panel-header {\n  background-color: #fafafa;\n  color: #404040;\n}\n.panel-body {\n  background-color: #ffffff;\n  color: #404040;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #404040;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #dfdfdf;\n  overflow: hidden;\n  background: #fafafa;\n  color: #404040;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n.accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #ffffff;\n  border-color: #dfdfdf;\n}\n.accordion .accordion-header {\n  background: #fafafa;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #eee;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #39c;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #fafafa;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #dfdfdf;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #fafafa;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #dfdfdf;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #fafafa;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #dfdfdf;\n}\n.window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.window-shadow {\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #dfdfdf;\n}\n.window {\n  background-color: #fafafa;\n}\n.window-proxy {\n  border: 1px dashed #dfdfdf;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #eee;\n}\n.window .panel-footer {\n  border: 1px solid #dfdfdf;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n.dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #fafafa;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #dfdfdf #dfdfdf #dfdfdf #dfdfdf;\n}\n.dialog-button {\n  border-color: #dfdfdf #dfdfdf #dfdfdf #dfdfdf;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #fafafa;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #404040;\n  background: #fafafa;\n  background-repeat: repeat-x;\n  border: 1px solid #dfdfdf;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.l-btn:hover {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #ccc;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #fafafa;\n  color: #404040;\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #39c;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #39c;\n}\n.textbox {\n  position: relative;\n  border: 1px solid #dfdfdf;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #c6c6c6;\n  -moz-box-shadow: 0 0 3px 0 #dfdfdf;\n  -webkit-box-shadow: 0 0 3px 0 #dfdfdf;\n  box-shadow: 0 0 3px 0 #dfdfdf;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n.passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n.filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n.combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #ffffff;\n}\n.combo-arrow {\n  background-color: #fafafa;\n}\n.combo-arrow-hover {\n  background-color: #eee;\n}\n.combo-arrow:hover {\n  background-color: #eee;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n.combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #eee;\n  color: #404040;\n}\n.combobox-item-selected {\n  background-color: #eee;\n  color: #39c;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n.tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  background: #eee;\n  color: #404040;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #ccc;\n}\n.layout-split-north {\n  border-bottom: 5px solid #ffffff;\n}\n.layout-split-south {\n  border-top: 5px solid #ffffff;\n}\n.layout-split-east {\n  border-left: 5px solid #ffffff;\n}\n.layout-split-west {\n  border-right: 5px solid #ffffff;\n}\n.layout-expand {\n  background-color: #fafafa;\n}\n.layout-expand-over {\n  background-color: #fafafa;\n}\n.tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 4px 4px 0 0;\n  -webkit-border-radius: 4px 4px 0 0;\n  border-radius: 4px 4px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 4px 4px;\n  -webkit-border-radius: 0 0 4px 4px;\n  border-radius: 0 0 4px 4px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 4px 0 0 4px;\n  -webkit-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 4px 4px 0;\n  -webkit-border-radius: 0 4px 4px 0;\n  border-radius: 0 4px 4px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #fafafa url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #fafafa url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #eee;\n  color: #404040;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #ffffff;\n  color: #404040;\n}\n.tabs li .tabs-inner {\n  color: #404040;\n  background-color: #fafafa;\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #fafafa;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #dfdfdf;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #eee;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #ffffff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #ffffff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #ffffff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #ffffff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #eee;\n  color: #39c;\n  filter: none;\n  border-color: #dfdfdf;\n}\n.datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #dfdfdf;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #fff;\n}\n.datagrid-cell-rownumber {\n  color: #404040;\n}\n.datagrid-resize-proxy {\n  background: #ccc;\n}\n.datagrid-mask {\n  background: #eee;\n}\n.datagrid-mask-msg {\n  border-color: #dfdfdf;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #fafafa;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #dfdfdf;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #dfdfdf;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #404040;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #fafafa;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #eee;\n  color: #404040;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #eee;\n  color: #39c;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #39c;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #39c;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #dfdfdf;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #fafafa;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #dfdfdf;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #fafafa;\n}\n.datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #fff;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #dfdfdf;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #404040;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #dfdfdf;\n}\n.m-list li>a:hover {\n  background: #eee;\n  color: #404040;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n.pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #dfdfdf;\n}\n.calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #8d8d8d;\n}\n.calendar-day {\n  color: #404040;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #dfdfdf;\n}\n.calendar {\n  border-color: #dfdfdf;\n}\n.calendar-header {\n  background: #fafafa;\n}\n.calendar-body,\n.calendar-menu {\n  background: #ffffff;\n}\n.calendar-body th {\n  background: #fafafa;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #eee;\n  color: #404040;\n}\n.calendar-hover {\n  border: 1px solid #ccc;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #eee;\n  color: #39c;\n  border: 1px solid #39c;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #fafafa;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n.datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #fafafa;\n}\n.datebox-button a {\n  color: #404040;\n}\n.spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #fafafa;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #404040;\n  outline-style: none;\n  background-color: #fafafa;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #eee;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #eee;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #fafafa;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #fafafa;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #fafafa;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n.progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 4px 0 0 4px;\n  -webkit-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n}\n.progressbar {\n  border-color: #dfdfdf;\n}\n.progressbar-text {\n  color: #404040;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #eee;\n  color: #39c;\n}\n.searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #fafafa;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 4px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #dfdfdf;\n  background: #fafafa;\n}\n.slider-rule span {\n  border-color: #dfdfdf;\n}\n.slider-rulelabel span {\n  color: #404040;\n}\n.menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #dfdfdf;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #fff;\n  border-color: #eee;\n  color: #404040;\n}\n.menu-content {\n  background: #ffffff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #fff;\n}\n.menu-active {\n  border-color: #ccc;\n  color: #404040;\n  background: #eee;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #404040;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #ccc;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ccc;\n  background-color: #eee;\n  color: #404040;\n}\n.s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #ccc;\n  border-width: 0 0 0 1px;\n}\n.messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #dfdfdf;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n.tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #dfdfdf;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #ffffff;\n  color: #404040;\n  border-color: #dfdfdf;\n}\n.tree-node-hover {\n  background: #eee;\n  color: #404040;\n}\n.tree-node-selected {\n  background: #eee;\n  color: #39c;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n.inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff;\n  color: #404040;\n}\n.tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #ffffff;\n  border-color: #dfdfdf;\n  color: #404040;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #dfdfdf;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #ffffff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #dfdfdf;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #ffffff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #dfdfdf;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #ffffff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #dfdfdf;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #ffffff;\n}\n.switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #dfdfdf;\n  border: 1px solid #dfdfdf;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.switchbutton-on {\n  background: #eee;\n  color: #39c;\n}\n.switchbutton-off {\n  background-color: #ffffff;\n  color: #404040;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 4px 0 0 4px;\n  -webkit-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 4px 4px 0;\n  -webkit-border-radius: 0 4px 4px 0;\n  border-radius: 0 4px 4px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #ffffff;\n  color: #404040;\n  border: 1px solid #dfdfdf;\n  -moz-box-shadow: 0 0 3px 0 #dfdfdf;\n  -webkit-box-shadow: 0 0 3px 0 #dfdfdf;\n  box-shadow: 0 0 3px 0 #dfdfdf;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #dfdfdf;\n  -webkit-box-shadow: 0 0 3px 0 #dfdfdf;\n  box-shadow: 0 0 3px 0 #dfdfdf;\n  outline: none;\n}\n.radiobutton {\n  position: relative;\n  border: 2px solid #39c;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #39c;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.checkbox {\n  position: relative;\n  border: 2px solid #39c;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #39c;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #404040;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #404040;\n}\n.sidemenu .accordion-header:hover {\n  background: #eee;\n  color: #404040;\n}\n.sidemenu .tree-node-hover {\n  background: #eee;\n  color: #404040;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #39c;\n  color: #39c;\n  background: #eee;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n.timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #fafafa;\n  color: #404040;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #39c;\n  color: #39c;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #39c;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #39c;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #39c;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #39c;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n.textbox {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n  border-top-color: transparent;\n  border-left-color: transparent;\n  border-right-color: transparent;\n}\n.textbox-focused {\n  border-color: #39c;\n  border-top-color: transparent;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  -moz-box-shadow: 0 0 3px 0 transparent;\n  -webkit-box-shadow: 0 0 3px 0 transparent;\n  box-shadow: 0 0 3px 0 transparent;\n}\n.textbox .textbox-button {\n  background-color: transparent;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-right,\n.textbox .textbox-button-top,\n.textbox .textbox-button-bottom {\n  border-color: transparent;\n}\n.form-floating-label.form-field .textbox-label {\n  color: #8d8d8d;\n}\n.form-floating-label.form-field-focused .textbox-label {\n  color: #39c;\n}\n.combo-arrow,\n.combo-arrow:hover,\n.spinner-arrow-up,\n.spinner-arrow-up:hover,\n.spinner-arrow-down,\n.spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom {\n  background-color: transparent;\n}\n.datagrid-header .datagrid-cell,\n.datagrid-cell-group {\n  color: #a6a6a6;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n}\n.datagrid-row-alt .datagrid-td-rownumber {\n  background-color: #fafafa;\n}\n.datagrid-row-over .datagrid-td-rownumber {\n  background-color: #eee;\n}\n.datagrid-row-selected .datagrid-td-rownumber {\n  background-color: #eee;\n}\n.datagrid-row-selected .datagrid-cell-rownumber {\n  color: #39c;\n}\n.datagrid-filter-row .textbox,\n.datagrid-editable .textbox {\n  border: 1px solid #dfdfdf;\n}\n.datagrid-editable .textbox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-view1 {\n  border-right: 1px solid #dfdfdf;\n}\n.datagrid-view3 {\n  border-left: 1px solid #dfdfdf;\n}\n.tree-node {\n  border-left: 2px solid transparent;\n}\n.tree-node-selected {\n  border-left: 2px solid #39c;\n}\n.calendar-header,\n.calendar-body th {\n  background: transparent;\n}\n.calendar-selected {\n  background: #39c;\n  color: #fff;\n  border-color: transparent;\n}\n.calendar-selected.calendar-saturday {\n  background: #00ee00;\n}\n.calendar-selected.calendar-sunday {\n  background: #CC2222;\n}\n.calendar-info {\n  background: #39c;\n  color: #fff;\n}\n.tabs-header,\n.tabs-tool {\n  padding-top: 0;\n}\n.tabs li {\n  margin-bottom: 0;\n}\n.tabs li .tabs-inner,\n.tabs li .tabs-inner:hover {\n  color: #404040;\n  background: transparent;\n  border-color: transparent;\n  border-left-width: 0;\n  border-right-width: 0;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background: transparent;\n  border-color: transparent;\n  color: #39c;\n  border-bottom: 2px solid #39c;\n  border-radius: 0;\n  font-weight: normal;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  border-top: 2px solid transparent;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 2px solid #39c;\n  border-bottom: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  border-right: 2px solid transparent;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 2px solid #39c;\n  border-top-color: transparent;\n  border-bottom-color: transparent;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  border-left: 2px solid transparent;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 2px solid #39c;\n  border-top-color: transparent;\n  border-bottom-color: transparent;\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  color: #fff;\n}\n.slider-handle {\n  background: #39c;\n  -moz-border-radius: 50% 50% 50% 50%;\n  -webkit-border-radius: 50% 50% 50% 50%;\n  border-radius: 50% 50% 50% 50%;\n}\n.menu-shadow,\n.combo-p {\n  -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);\n  -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);\n  box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);\n  filter: none;\n}\n.menu {\n  padding: 3px 0;\n  border: 0;\n}\n.menu-icon {\n  left: 4px;\n}\n.menu-active {\n  border-color: transparent;\n  color: #39c;\n  background: #eee;\n  border-radius: 0;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #404040;\n}\n.window {\n  background-color: #fff;\n}\n.window-proxy {\n  border-color: #ccc;\n}\n.window-shadow {\n  -moz-box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12);\n  -webkit-box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12);\n  box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12);\n  filter: none;\n}\n.window-mask {\n  background: #000;\n}\n.sidemenu .tree-node-selected {\n  border-right: 0;\n}\n.timepicker-panel .clock .item-selected {\n  color: #fff;\n}\n.timepicker-panel .panel-header {\n  background-color: #39c;\n  color: #fff;\n}\n.timepicker-panel .clock .hand .drag {\n  background-color: #fff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/filebox.css",
    "content": ".filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/flex.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/layout.css",
    "content": ".layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #ccc;\n}\n.layout-split-north {\n  border-bottom: 5px solid #ffffff;\n}\n.layout-split-south {\n  border-top: 5px solid #ffffff;\n}\n.layout-split-east {\n  border-left: 5px solid #ffffff;\n}\n.layout-split-west {\n  border-right: 5px solid #ffffff;\n}\n.layout-expand {\n  background-color: #fafafa;\n}\n.layout-expand-over {\n  background-color: #fafafa;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/linkbutton.css",
    "content": ".l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #404040;\n  background: #fafafa;\n  background-repeat: repeat-x;\n  border: 1px solid #dfdfdf;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.l-btn:hover {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #ccc;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #fafafa;\n  color: #404040;\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #39c;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #39c;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/menu.css",
    "content": ".menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #dfdfdf;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #fff;\n  border-color: #eee;\n  color: #404040;\n}\n.menu-content {\n  background: #ffffff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #fff;\n}\n.menu-active {\n  border-color: #ccc;\n  color: #404040;\n  background: #eee;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/menubutton.css",
    "content": ".m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #eee;\n  color: #404040;\n  border: 1px solid #ccc;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #ccc;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ccc;\n  background-color: #eee;\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/messager.css",
    "content": ".messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #dfdfdf;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/numberbox.css",
    "content": ""
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/pagination.css",
    "content": ".pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #dfdfdf;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #dfdfdf;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/panel.css",
    "content": "* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #eee;\n  -moz-border-radius: 2px 2px 2px 2px;\n  -webkit-border-radius: 2px 2px 2px 2px;\n  border-radius: 2px 2px 2px 2px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #dfdfdf;\n}\n.panel-header {\n  background-color: #fafafa;\n  color: #404040;\n}\n.panel-body {\n  background-color: #ffffff;\n  color: #404040;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #404040;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #dfdfdf;\n  overflow: hidden;\n  background: #fafafa;\n  color: #404040;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/passwordbox.css",
    "content": ".passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/progressbar.css",
    "content": ".progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 4px 0 0 4px;\n  -webkit-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n}\n.progressbar {\n  border-color: #dfdfdf;\n}\n.progressbar-text {\n  color: #404040;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #eee;\n  color: #39c;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/propertygrid.css",
    "content": ".propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #dfdfdf;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #fafafa;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #dfdfdf;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #fafafa;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/radiobutton.css",
    "content": ".radiobutton {\n  position: relative;\n  border: 2px solid #39c;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #39c;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/searchbox.css",
    "content": ".searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #fafafa;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/sidemenu.css",
    "content": ".sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #404040;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #404040;\n}\n.sidemenu .accordion-header:hover {\n  background: #eee;\n  color: #404040;\n}\n.sidemenu .tree-node-hover {\n  background: #eee;\n  color: #404040;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #39c;\n  color: #39c;\n  background: #eee;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/slider.css",
    "content": ".slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 4px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #dfdfdf;\n  background: #fafafa;\n}\n.slider-rule span {\n  border-color: #dfdfdf;\n}\n.slider-rulelabel span {\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/spinner.css",
    "content": ".spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #fafafa;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #404040;\n  outline-style: none;\n  background-color: #fafafa;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #eee;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #eee;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #fafafa;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #fafafa;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #fafafa;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/splitbutton.css",
    "content": ".s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #ccc;\n  border-width: 0 0 0 1px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/switchbutton.css",
    "content": ".switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #dfdfdf;\n  border: 1px solid #dfdfdf;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.switchbutton-on {\n  background: #eee;\n  color: #39c;\n}\n.switchbutton-off {\n  background-color: #ffffff;\n  color: #404040;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 4px 0 0 4px;\n  -webkit-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 4px 4px 0;\n  -webkit-border-radius: 0 4px 4px 0;\n  border-radius: 0 4px 4px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #ffffff;\n  color: #404040;\n  border: 1px solid #dfdfdf;\n  -moz-box-shadow: 0 0 3px 0 #dfdfdf;\n  -webkit-box-shadow: 0 0 3px 0 #dfdfdf;\n  box-shadow: 0 0 3px 0 #dfdfdf;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #dfdfdf;\n  -webkit-box-shadow: 0 0 3px 0 #dfdfdf;\n  box-shadow: 0 0 3px 0 #dfdfdf;\n  outline: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/tabs.css",
    "content": ".tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 4px 4px 0 0;\n  -webkit-border-radius: 4px 4px 0 0;\n  border-radius: 4px 4px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 4px 4px;\n  -webkit-border-radius: 0 0 4px 4px;\n  border-radius: 0 0 4px 4px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 4px 0 0 4px;\n  -webkit-border-radius: 4px 0 0 4px;\n  border-radius: 4px 0 0 4px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 4px 4px 0;\n  -webkit-border-radius: 0 4px 4px 0;\n  border-radius: 0 4px 4px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #fafafa url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #fafafa url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #eee;\n  color: #404040;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #ffffff;\n  color: #404040;\n}\n.tabs li .tabs-inner {\n  color: #404040;\n  background-color: #fafafa;\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #fafafa;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #dfdfdf;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #eee;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #ffffff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #ffffff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #ffffff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #ffffff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #eee;\n  color: #39c;\n  filter: none;\n  border-color: #dfdfdf;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/tagbox.css",
    "content": ".tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  background: #eee;\n  color: #404040;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/textbox.css",
    "content": ".textbox {\n  position: relative;\n  border: 1px solid #dfdfdf;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #c6c6c6;\n  -moz-box-shadow: 0 0 3px 0 #dfdfdf;\n  -webkit-box-shadow: 0 0 3px 0 #dfdfdf;\n  box-shadow: 0 0 3px 0 #dfdfdf;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/timepicker.css",
    "content": ".timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #fafafa;\n  color: #404040;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #39c;\n  color: #39c;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #39c;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #39c;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #39c;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #39c;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/tooltip.css",
    "content": ".tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #ffffff;\n  border-color: #dfdfdf;\n  color: #404040;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #dfdfdf;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #ffffff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #dfdfdf;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #ffffff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #dfdfdf;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #ffffff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #dfdfdf;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #ffffff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/tree.css",
    "content": ".tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #dfdfdf;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #ffffff;\n  color: #404040;\n  border-color: #dfdfdf;\n}\n.tree-node-hover {\n  background: #eee;\n  color: #404040;\n}\n.tree-node-selected {\n  background: #eee;\n  color: #39c;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/validatebox.css",
    "content": ".inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff;\n  color: #404040;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/material-teal/window.css",
    "content": ".window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 4px 4px 4px 4px;\n  -webkit-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n}\n.window-shadow {\n  background: #ccc;\n  -moz-box-shadow: 2px 2px 3px #cccccc;\n  -webkit-box-shadow: 2px 2px 3px #cccccc;\n  box-shadow: 2px 2px 3px #cccccc;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #dfdfdf;\n}\n.window {\n  background-color: #fafafa;\n}\n.window-proxy {\n  border: 1px dashed #dfdfdf;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #eee;\n}\n.window .panel-footer {\n  border: 1px solid #dfdfdf;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/accordion.css",
    "content": ".accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #fff;\n  border-color: #ddd;\n}\n.accordion .accordion-header {\n  background: #ffffff;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #CCE6FF;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #000;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #fff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #ddd;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #fff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #ddd;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #fff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #ddd;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/calendar.css",
    "content": ".calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #919191;\n}\n.calendar-day {\n  color: #444;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #ddd;\n}\n.calendar {\n  border-color: #ddd;\n}\n.calendar-header {\n  background: #ffffff;\n}\n.calendar-body,\n.calendar-menu {\n  background: #fff;\n}\n.calendar-body th {\n  background: #fff;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #E6E6E6;\n  color: #444;\n}\n.calendar-hover {\n  border: 1px solid #ddd;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #CCE6FF;\n  color: #000;\n  border: 1px solid #99cdff;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #ffffff;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/checkbox.css",
    "content": ".checkbox {\n  position: relative;\n  border: 2px solid #99cdff;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #99cdff;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/combo.css",
    "content": ".combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #fff;\n}\n.combo-arrow {\n  background-color: #ffffff;\n}\n.combo-arrow-hover {\n  background-color: #E6E6E6;\n}\n.combo-arrow:hover {\n  background-color: #E6E6E6;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/combobox.css",
    "content": ".combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #E6E6E6;\n  color: #444;\n}\n.combobox-item-selected {\n  background-color: #CCE6FF;\n  color: #000;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/datagrid.css",
    "content": ".datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #ddd;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #fff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #ffffff;\n}\n.datagrid-cell-rownumber {\n  color: #444;\n}\n.datagrid-resize-proxy {\n  background: #b3b3b3;\n}\n.datagrid-mask {\n  background: #eee;\n}\n.datagrid-mask-msg {\n  border-color: #ddd;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #fff;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #ddd;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #ddd;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #444;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #f5f5f5;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #E6E6E6;\n  color: #444;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #CCE6FF;\n  color: #000;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #99cdff;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #99cdff;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/datalist.css",
    "content": ".datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #ffffff;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ddd;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #444;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ddd;\n}\n.m-list li>a:hover {\n  background: #E6E6E6;\n  color: #444;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/datebox.css",
    "content": ".datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #fff;\n}\n.datebox-button a {\n  color: #777;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/dialog.css",
    "content": ".dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #fff;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #ddd #ddd #ddd #ddd;\n}\n.dialog-button {\n  border-color: #ddd #ddd #ddd #ddd;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #fff;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/easyui.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #E6E6E6;\n  -moz-border-radius: -2px -2px -2px -2px;\n  -webkit-border-radius: -2px -2px -2px -2px;\n  border-radius: -2px -2px -2px -2px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #ddd;\n}\n.panel-header {\n  background-color: #ffffff;\n  color: #777;\n}\n.panel-body {\n  background-color: #fff;\n  color: #444;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #777;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #ddd;\n  overflow: hidden;\n  background: #fff;\n  color: #444;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n.accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #fff;\n  border-color: #ddd;\n}\n.accordion .accordion-header {\n  background: #ffffff;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #CCE6FF;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #000;\n}\n.accordion .panel-last > .accordion-header {\n  border-bottom-color: #ffffff;\n}\n.accordion .panel-last > .accordion-body {\n  border-bottom-color: #fff;\n}\n.accordion .panel-last > .accordion-header-selected,\n.accordion .panel-last > .accordion-header-border {\n  border-bottom-color: #ddd;\n}\n.accordion> .panel-hleft {\n  float: left;\n}\n.accordion> .panel-hleft>.panel-header {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft> .panel-body {\n  border-width: 0 1px 0 0;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header {\n  border-right-color: #ffffff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-body {\n  border-right-color: #fff;\n}\n.accordion> .panel-hleft.panel-last > .accordion-header-selected,\n.accordion> .panel-hleft.panel-last > .accordion-header-border {\n  border-right-color: #ddd;\n}\n.accordion> .panel-hright {\n  float: right;\n}\n.accordion> .panel-hright>.panel-header {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright> .panel-body {\n  border-width: 0 0 0 1px;\n}\n.accordion> .panel-hright.panel-last > .accordion-header {\n  border-left-color: #ffffff;\n}\n.accordion> .panel-hright.panel-last > .accordion-body {\n  border-left-color: #fff;\n}\n.accordion> .panel-hright.panel-last > .accordion-header-selected,\n.accordion> .panel-hright.panel-last > .accordion-header-border {\n  border-left-color: #ddd;\n}\n.window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.window-shadow {\n  background: #eee;\n  -moz-box-shadow: 2px 2px 3px #ededed;\n  -webkit-box-shadow: 2px 2px 3px #ededed;\n  box-shadow: 2px 2px 3px #ededed;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #ddd;\n}\n.window {\n  background-color: #ffffff;\n}\n.window-proxy {\n  border: 1px dashed #ddd;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #eee;\n}\n.window .panel-footer {\n  border: 1px solid #ddd;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n.dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  position: relative;\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  position: relative;\n  top: -1px;\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #fff;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #ddd #ddd #ddd #ddd;\n}\n.dialog-button {\n  border-color: #ddd #ddd #ddd #ddd;\n}\n.window-thinborder .dialog-toolbar {\n  border-left: transparent;\n  border-right: transparent;\n  border-top-color: #fff;\n}\n.window-thinborder .dialog-button {\n  top: 0px;\n  padding: 5px 8px 8px 8px;\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #777;\n  background: #ffffff;\n  background-repeat: repeat-x;\n  border: 1px solid #dddddd;\n  background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0);\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.l-btn:hover {\n  background: #E6E6E6;\n  color: #444;\n  border: 1px solid #ddd;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #ddd;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #E6E6E6;\n  color: #444;\n  border: 1px solid #ddd;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #ffffff;\n  color: #777;\n  background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0);\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #ddd;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #ddd;\n}\n.textbox {\n  position: relative;\n  border: 1px solid #ddd;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #c4c4c4;\n  -moz-box-shadow: 0 0 3px 0 #ddd;\n  -webkit-box-shadow: 0 0 3px 0 #ddd;\n  box-shadow: 0 0 3px 0 #ddd;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n.passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n.filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n.combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #fff;\n}\n.combo-arrow {\n  background-color: #ffffff;\n}\n.combo-arrow-hover {\n  background-color: #E6E6E6;\n}\n.combo-arrow:hover {\n  background-color: #E6E6E6;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n.combobox-item,\n.combobox-group,\n.combobox-stick {\n  font-size: 14px;\n  padding: 6px 4px;\n  line-height: 20px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group,\n.combobox-stick {\n  font-weight: bold;\n}\n.combobox-stick {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  right: 1px;\n  background: inherit;\n}\n.combobox-item-hover {\n  background-color: #E6E6E6;\n  color: #444;\n}\n.combobox-item-selected {\n  background-color: #CCE6FF;\n  color: #000;\n}\n.combobox-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: middle;\n  margin-right: 2px;\n}\n.tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n  background: #E6E6E6;\n  color: #444;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #b3b3b3;\n}\n.layout-split-north {\n  border-bottom: 5px solid #fff;\n}\n.layout-split-south {\n  border-top: 5px solid #fff;\n}\n.layout-split-east {\n  border-left: 5px solid #fff;\n}\n.layout-split-west {\n  border-right: 5px solid #fff;\n}\n.layout-expand {\n  background-color: #ffffff;\n}\n.layout-expand-over {\n  background-color: #ffffff;\n}\n.tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 0px 0px 0 0;\n  -webkit-border-radius: 0px 0px 0 0;\n  border-radius: 0px 0px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 0px 0px;\n  -webkit-border-radius: 0 0 0px 0px;\n  border-radius: 0 0 0px 0px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0px 0 0 0px;\n  -webkit-border-radius: 0px 0 0 0px;\n  border-radius: 0px 0 0 0px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 0px 0px 0;\n  -webkit-border-radius: 0 0px 0px 0;\n  border-radius: 0 0px 0px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #ffffff url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #ffffff url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #E6E6E6;\n  color: #444;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #fff;\n  color: #777;\n}\n.tabs li .tabs-inner {\n  color: #777;\n  background-color: #ffffff;\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #ffffff;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #ddd;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #E6E6E6;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #fff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #fff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #fff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #fff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #CCE6FF;\n  color: #000;\n  filter: none;\n  border-color: #ddd;\n}\n.datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-empty {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n}\n.datagrid-sort-icon {\n  padding: 0;\n  display: none;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 32px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 14px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 14px;\n}\n.datagrid-cell-group {\n  text-align: center;\n  text-overflow: ellipsis;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 30px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #ddd;\n  font-size: 14px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-view .validatebox-invalid {\n  border-color: #ffa8a8;\n}\n.datagrid-sort .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -64px center;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  display: inline;\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #fff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #ffffff;\n}\n.datagrid-cell-rownumber {\n  color: #444;\n}\n.datagrid-resize-proxy {\n  background: #b3b3b3;\n}\n.datagrid-mask {\n  background: #eee;\n}\n.datagrid-mask-msg {\n  border-color: #ddd;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #fff;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #ddd;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #ddd;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #444;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #f5f5f5;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #E6E6E6;\n  color: #444;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #CCE6FF;\n  color: #000;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-header .datagrid-filter-row td.datagrid-header-over {\n  background: inherit;\n}\n.datagrid-split-proxy {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 1px;\n  height: 100%;\n  border-left: 1px solid #99cdff;\n}\n.datagrid-moving-proxy {\n  border: 1px solid #99cdff;\n  height: 32px;\n  line-height: 32px;\n  padding: 0 4px;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #ddd;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #ffffff;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #ddd;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #ffffff;\n}\n.datalist .datagrid-header {\n  border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n  height: 25px;\n  line-height: 25px;\n  font-weight: bold;\n  overflow: hidden;\n  background-color: #ffffff;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ddd;\n}\n.datalist .datagrid-group-expander {\n  display: none;\n}\n.datalist .datagrid-group-title {\n  padding: 0 4px;\n}\n.datalist .datagrid-btable {\n  width: 100%;\n  table-layout: fixed;\n}\n.datalist .datagrid-row td {\n  border-style: solid;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  border-bottom-width: 0;\n}\n.datalist-lines .datagrid-row td {\n  border-bottom-width: 1px;\n}\n.datalist .datagrid-cell,\n.m-list li {\n  width: auto;\n  height: auto;\n  padding: 2px 4px;\n  line-height: 18px;\n  position: relative;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link,\n.m-list li>a {\n  display: block;\n  position: relative;\n  cursor: pointer;\n  color: #444;\n  text-decoration: none;\n  overflow: hidden;\n  margin: -2px -4px;\n  padding: 2px 4px;\n  padding-right: 16px;\n  line-height: 18px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.datalist-link::after,\n.m-list li>a::after {\n  position: absolute;\n  display: block;\n  width: 8px;\n  height: 8px;\n  content: '';\n  right: 6px;\n  top: 50%;\n  margin-top: -4px;\n  border-style: solid;\n  border-width: 1px 1px 0 0;\n  -ms-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -webkit-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.m-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.m-list li {\n  border-style: solid;\n  border-width: 0 0 1px 0;\n  border-color: #ddd;\n}\n.m-list li>a:hover {\n  background: #E6E6E6;\n  color: #444;\n}\n.m-list .m-list-group {\n  padding: 0 4px;\n}\n.pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #ddd;\n}\n.calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 14px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 14px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 36px;\n}\n.calendar-title {\n  text-align: center;\n  height: 36px;\n  line-height: 36px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 0px;\n  padding: 0 3px;\n  height: 28px;\n  line-height: 28px;\n  font-size: 14px;\n  cursor: pointer;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-prevmonth {\n  left: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -16px 0;\n}\n.calendar-nextmonth {\n  right: 30px;\n  background: url('images/calendar_arrows.png') no-repeat -32px 0;\n}\n.calendar-prevyear {\n  left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 0px 0;\n}\n.calendar-nextyear {\n  right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -48px 0;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 14px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 80px;\n  line-height: 26px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  outline-style: none;\n  resize: none;\n  margin: 0;\n  padding: 0;\n  font-weight: bold;\n  font-size: 14px;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 25px;\n  height: 28px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 5px center;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -44px center;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #919191;\n}\n.calendar-day {\n  color: #444;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #ddd;\n}\n.calendar {\n  border-color: #ddd;\n}\n.calendar-header {\n  background: #ffffff;\n}\n.calendar-body,\n.calendar-menu {\n  background: #fff;\n}\n.calendar-body th {\n  background: #fff;\n  padding: 4px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #E6E6E6;\n  color: #444;\n}\n.calendar-hover {\n  border: 1px solid #ddd;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #CCE6FF;\n  color: #000;\n  border: 1px solid #99cdff;\n  padding: 0;\n}\n.calendar-info {\n  background-color: #ffffff;\n  font-size: 28px;\n  height: 70px;\n  padding: 10px 20px;\n}\n.calendar-info .year {\n  font-size: 16px;\n}\n.datebox-calendar-inner {\n  height: 250px;\n}\n.datebox-button {\n  padding: 4px 0;\n  text-align: center;\n}\n.datebox-button a {\n  line-height: 22px;\n  font-size: 14px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #fff;\n}\n.datebox-button a {\n  color: #777;\n}\n.spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #ffffff;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #777;\n  outline-style: none;\n  background-color: #ffffff;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #E6E6E6;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #E6E6E6;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #ffffff;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #ffffff;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #ffffff;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n.progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 0px 0 0 0px;\n  -webkit-border-radius: 0px 0 0 0px;\n  border-radius: 0px 0 0 0px;\n}\n.progressbar {\n  border-color: #ddd;\n}\n.progressbar-text {\n  color: #444;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #CCE6FF;\n  color: #000;\n}\n.searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #ffffff;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 0px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #ddd;\n  background: #ffffff;\n}\n.slider-rule span {\n  border-color: #ddd;\n}\n.slider-rulelabel span {\n  color: #444;\n}\n.menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n  background: #eee;\n  -moz-box-shadow: 2px 2px 3px #ededed;\n  -webkit-box-shadow: 2px 2px 3px #ededed;\n  box-shadow: 2px 2px 3px #ededed;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #ddd;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #ffffff;\n  border-color: #ddd;\n  color: #444;\n}\n.menu-content {\n  background: #fff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #ffffff;\n}\n.menu-active {\n  border-color: #ddd;\n  color: #444;\n  background: #E6E6E6;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #444;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #E6E6E6;\n  color: #444;\n  border: 1px solid #ddd;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #b3b3b3;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ddd;\n  background-color: #E6E6E6;\n  color: #444;\n}\n.s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #b3b3b3;\n  border-width: 0 0 0 1px;\n}\n.messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #ddd;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n.tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #ddd;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #fff;\n  color: #444;\n  border-color: #ddd;\n}\n.tree-node-hover {\n  background: #E6E6E6;\n  color: #444;\n}\n.tree-node-selected {\n  background: #CCE6FF;\n  color: #000;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n.inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n  color: #000;\n}\n.tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #fff;\n  border-color: #ddd;\n  color: #444;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #ddd;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #fff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #ddd;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #fff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #ddd;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #fff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #ddd;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #fff;\n}\n.switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #dddddd;\n  border: 1px solid #dddddd;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.switchbutton-on {\n  background: #CCE6FF;\n  color: #000;\n}\n.switchbutton-off {\n  background-color: #fff;\n  color: #444;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 0px 0 0 0px;\n  -webkit-border-radius: 0px 0 0 0px;\n  border-radius: 0px 0 0 0px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 0px 0px 0;\n  -webkit-border-radius: 0 0px 0px 0;\n  border-radius: 0 0px 0px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #fff;\n  color: #444;\n  border: 1px solid #dddddd;\n  -moz-box-shadow: 0 0 3px 0 #dddddd;\n  -webkit-box-shadow: 0 0 3px 0 #dddddd;\n  box-shadow: 0 0 3px 0 #dddddd;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #dddddd;\n  -webkit-box-shadow: 0 0 3px 0 #dddddd;\n  box-shadow: 0 0 3px 0 #dddddd;\n  outline: none;\n}\n.radiobutton {\n  position: relative;\n  border: 2px solid #99cdff;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #99cdff;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.checkbox {\n  position: relative;\n  border: 2px solid #99cdff;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.checkbox-checked {\n  border: 0;\n  background: #99cdff;\n}\n.checkbox-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.checkbox path {\n  stroke-width: 2px;\n}\n.checkbox-disabled {\n  opacity: 0.6;\n}\n.checkbox-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n.sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #777;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #777;\n}\n.sidemenu .accordion-header:hover {\n  background: #E6E6E6;\n  color: #777;\n}\n.sidemenu .tree-node-hover {\n  background: #E6E6E6;\n  color: #777;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #99cdff;\n  color: #000;\n  background: #CCE6FF;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n.timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #ffffff;\n  color: #777;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #99cdff;\n  color: #000;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #99cdff;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #99cdff;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #000;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #99cdff;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/filebox.css",
    "content": ".filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.filebox-label {\n  display: inline-block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n  left: 0;\n  top: 0;\n  z-index: 10;\n  background: url('images/blank.gif') no-repeat;\n}\n.l-btn-disabled .filebox-label {\n  cursor: default;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/flex.css",
    "content": ".f-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n}\n.f-column {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -moz-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n}\n.f-full {\n  -webkit-box-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n.f-noshrink {\n  -webkit-flex-shrink: 0;\n  -moz-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n.f-content-center {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n.f-vcenter {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/layout.css",
    "content": ".layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-body {\n  min-width: 1px;\n  min-height: 1px;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-expand .panel-body {\n  position: relative;\n}\n.layout-expand .panel-body .panel-icon {\n  margin-top: 0;\n  top: 0;\n  left: 50%;\n  margin-left: -8px;\n}\n.layout-expand-west .panel-header .panel-icon,\n.layout-expand-east .panel-header .panel-icon {\n  display: none;\n}\n.layout-expand-title {\n  position: absolute;\n  top: 0;\n  left: 21px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-title-up {\n  position: absolute;\n  top: 0;\n  left: 0;\n  text-align: right;\n  padding-left: 5px;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 0;\n}\n.layout-expand-with-icon {\n  top: 18px;\n}\n.layout-expand .panel-body-noheader .layout-expand-title,\n.layout-expand .panel-body-noheader .panel-icon {\n  top: 5px;\n}\n.layout-expand .panel-body-noheader .layout-expand-with-icon {\n  top: 23px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #b3b3b3;\n}\n.layout-split-north {\n  border-bottom: 5px solid #fff;\n}\n.layout-split-south {\n  border-top: 5px solid #fff;\n}\n.layout-split-east {\n  border-left: 5px solid #fff;\n}\n.layout-split-west {\n  border-right: 5px solid #fff;\n}\n.layout-expand {\n  background-color: #ffffff;\n}\n.layout-expand-over {\n  background-color: #ffffff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/linkbutton.css",
    "content": ".l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n  line-height: normal;\n}\n.l-btn-plain {\n  border-width: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 28px;\n  font-size: 14px;\n  padding: 0;\n  margin: 0 6px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 6px 0 26px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 6px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 26px 0 6px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 6px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 44px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 6px;\n  width: 32px;\n}\n.l-btn {\n  color: #777;\n  background: #ffffff;\n  background-repeat: repeat-x;\n  border: 1px solid #dddddd;\n  background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0);\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.l-btn:hover {\n  background: #E6E6E6;\n  color: #444;\n  border: 1px solid #ddd;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border-width: 0;\n  filter: none;\n}\n.l-btn-outline {\n  border-width: 1px;\n  border-color: #ddd;\n  padding: 0;\n}\n.l-btn-plain:hover {\n  background: #E6E6E6;\n  color: #444;\n  border: 1px solid #ddd;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #ffffff;\n  color: #777;\n  background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0);\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #ddd;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #ddd;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/menu.css",
    "content": ".menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-inline {\n  position: relative;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-noline .menu-line {\n  display: none;\n}\n.menu-noline .menu-sep {\n  margin-left: 0;\n  margin-right: 0;\n}\n.menu-active {\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 14px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n  background: #eee;\n  -moz-box-shadow: 2px 2px 3px #ededed;\n  -webkit-box-shadow: 2px 2px 3px #ededed;\n  box-shadow: 2px 2px 3px #ededed;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #ddd;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #ffffff;\n  border-color: #ddd;\n  color: #444;\n}\n.menu-content {\n  background: #fff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #ffffff;\n}\n.menu-active {\n  border-color: #ddd;\n  color: #444;\n  background: #E6E6E6;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #444;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/menubutton.css",
    "content": ".m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #E6E6E6;\n  color: #444;\n  border: 1px solid #ddd;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #b3b3b3;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ddd;\n  background-color: #E6E6E6;\n  color: #444;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/messager.css",
    "content": ".messager-body {\n  padding: 10px 10px 30px 10px;\n  overflow: auto;\n}\n.messager-button {\n  text-align: center;\n  padding: 5px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 4px 0;\n  outline-style: none;\n  border: 1px solid #ddd;\n}\n.window-thinborder .messager-button {\n  padding-bottom: 8px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/numberbox.css",
    "content": ""
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/pagination.css",
    "content": ".pagination {\n  zoom: 1;\n  padding: 2px;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 3em;\n  height: auto;\n  text-align: center;\n  font-size: 14px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 14px;\n}\n.pagination span {\n  font-size: 14px;\n}\n.pagination-link .l-btn-text {\n  box-sizing: border-box;\n  text-align: center;\n  margin: 0;\n  padding: 0 .5em;\n  width: auto;\n  min-width: 28px;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #ddd;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/panel.css",
    "content": "* {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #E6E6E6;\n  -moz-border-radius: -2px -2px -2px -2px;\n  -webkit-border-radius: -2px -2px -2px -2px;\n  border-radius: -2px -2px -2px -2px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #ddd;\n}\n.panel-header {\n  background-color: #ffffff;\n  color: #777;\n}\n.panel-body {\n  background-color: #fff;\n  color: #444;\n  font-size: 14px;\n}\n.panel-title {\n  font-size: 14px;\n  font-weight: bold;\n  color: #777;\n  height: 20px;\n  line-height: 20px;\n}\n.panel-footer {\n  border: 1px solid #ddd;\n  overflow: hidden;\n  background: #fff;\n  color: #444;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.panel-hleft,\n.panel-hright {\n  position: relative;\n}\n.panel-hleft>.panel-body,\n.panel-hright>.panel-body {\n  position: absolute;\n}\n.panel-hleft>.panel-header {\n  float: left;\n}\n.panel-hright>.panel-header {\n  float: right;\n}\n.panel-hleft>.panel-body {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.panel-hright>.panel-body {\n  border-top-width: 1px;\n  border-right-width: 0;\n}\n.panel-hleft>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-right-width: 0;\n}\n.panel-hright>.panel-body-nobottom {\n  border-bottom-width: 1px;\n  border-left-width: 0;\n}\n.panel-hleft>.panel-footer {\n  position: absolute;\n  right: 0;\n}\n.panel-hright>.panel-footer {\n  position: absolute;\n  left: 0;\n}\n.panel-hleft>.panel-header-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hright>.panel-header-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hleft>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hright>.panel-body-noborder {\n  border-width: 0;\n}\n.panel-hleft>.panel-body-noheader {\n  border-left-width: 1px;\n}\n.panel-hright>.panel-body-noheader {\n  border-right-width: 1px;\n}\n.panel-hleft>.panel-footer-noborder {\n  border-width: 0 0 0 1px;\n}\n.panel-hright>.panel-footer-noborder {\n  border-width: 0 1px 0 0;\n}\n.panel-hleft>.panel-header .panel-icon,\n.panel-hright>.panel-header .panel-icon {\n  margin-top: 0;\n  top: 5px;\n  left: 50%;\n  margin-left: -8px;\n}\n.panel-hleft>.panel-header .panel-title,\n.panel-hright>.panel-header .panel-title {\n  position: absolute;\n  min-width: 16px;\n  left: 25px;\n  top: 5px;\n  bottom: auto;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(90deg);\n  transform-origin: 0 0;\n}\n.panel-hleft>.panel-header .panel-title-up,\n.panel-hright>.panel-header .panel-title-up {\n  position: absolute;\n  min-width: 16px;\n  left: 21px;\n  top: auto;\n  bottom: 0px;\n  text-align: right;\n  white-space: nowrap;\n  word-wrap: normal;\n  -webkit-transform: rotate(-90deg);\n  -webkit-transform-origin: 0 0;\n  -moz-transform: rotate(-90deg);\n  -moz-transform-origin: 0 0;\n  -o-transform: rotate(-90deg);\n  -o-transform-origin: 0 0;\n  transform: rotate(-90deg);\n  transform-origin: 0 16px;\n}\n.panel-hleft>.panel-header .panel-with-icon.panel-title-up,\n.panel-hright>.panel-header .panel-with-icon.panel-title-up {\n  padding-left: 0;\n  padding-right: 18px;\n}\n.panel-hleft>.panel-header .panel-tool,\n.panel-hright>.panel-header .panel-tool {\n  top: auto;\n  bottom: 5px;\n  width: 16px;\n  height: auto;\n  left: 50%;\n  margin-left: -8px;\n  margin-top: 0;\n}\n.panel-hleft>.panel-header .panel-tool a,\n.panel-hright>.panel-header .panel-tool a {\n  margin: 2px 0 0 0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/passwordbox.css",
    "content": ".passwordbox-open {\n  background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n  background: url('images/passwordbox_close.png') no-repeat center center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/progressbar.css",
    "content": ".progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 0px 0 0 0px;\n  -webkit-border-radius: 0px 0 0 0px;\n  border-radius: 0px 0 0 0px;\n}\n.progressbar {\n  border-color: #ddd;\n}\n.progressbar-text {\n  color: #444;\n  font-size: 14px;\n}\n.progressbar-value,\n.progressbar-value .progressbar-text {\n  background-color: #CCE6FF;\n  color: #000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/propertygrid.css",
    "content": ".propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #ddd;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #ffffff;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #ddd;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #ffffff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/radiobutton.css",
    "content": ".radiobutton {\n  position: relative;\n  border: 2px solid #99cdff;\n  border-radius: 50%;\n}\n.radiobutton-inner {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #99cdff;\n  border-radius: 50%;\n  transform: scale(.6);\n}\n.radiobutton-disabled {\n  opacity: 0.6;\n}\n.radiobutton-value {\n  position: absolute;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  left: -999px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/searchbox.css",
    "content": ".searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox .l-btn-plain {\n  background: #ffffff;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/sidemenu.css",
    "content": ".sidemenu .tree-hit {\n  background-image: none;\n}\n.sidemenu-default-icon {\n  background-image: none;\n  width: 0;\n}\n.sidemenu .accordion .accordion-header,\n.sidemenu .accordion .accordion-body {\n  border-bottom-color: transparent;\n  background: transparent;\n}\n.sidemenu .accordion .accordion-header {\n  color: #777;\n}\n.sidemenu .accordion-header .panel-title {\n  height: 30px;\n  line-height: 30px;\n  color: #777;\n}\n.sidemenu .accordion-header:hover {\n  background: #E6E6E6;\n  color: #777;\n}\n.sidemenu .tree-node-hover {\n  background: #E6E6E6;\n  color: #777;\n}\n.sidemenu .tree-node-selected {\n  border-right: 2px solid #99cdff;\n  color: #000;\n  background: #CCE6FF;\n}\n.sidemenu .tree-node {\n  height: 40px;\n}\n.sidemenu .tree-title {\n  margin: 11px 0;\n}\n.sidemenu .tree-node-nonleaf {\n  position: relative;\n}\n.sidemenu .tree-node-nonleaf::after {\n  display: inline-block;\n  content: '';\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n  width: 16px;\n  height: 16px;\n  right: 5px;\n}\n.sidemenu .tree-node-nonleaf-collapsed::after {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.sidemenu-collapsed .panel-icon {\n  left: 50%;\n  margin-left: -8px;\n}\n.sidemenu-collapsed .collapsed-icon {\n  position: relative;\n}\n.sidemenu-collapsed .collapsed-text {\n  text-align: center;\n}\n.sidemenu-tooltip {\n  padding: 0;\n  margin: 0 -12px;\n  border: 0;\n}\n.sidemenu-tooltip.tooltip-left {\n  margin: 0 12px;\n}\n.sidemenu-tooltip .tooltip-arrow-outer,\n.sidemenu-tooltip .tooltip-arrow {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/slider.css",
    "content": ".slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 0px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 14px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 14px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #ddd;\n  background: #ffffff;\n}\n.slider-rule span {\n  border-color: #ddd;\n}\n.slider-rulelabel span {\n  color: #444;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/spinner.css",
    "content": ".spinner-arrow {\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow.spinner-button-top,\n.spinner-arrow.spinner-button-bottom,\n.spinner-arrow.spinner-button-left,\n.spinner-arrow.spinner-button-right {\n  background-color: #ffffff;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  color: #777;\n  outline-style: none;\n  background-color: #ffffff;\n}\n.spinner-button-updown {\n  opacity: 1.0;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 50%;\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n  top: 50%;\n  left: 50%;\n  margin-top: -8px;\n  margin-left: -8px;\n  position: absolute;\n}\n.spinner-button-updown .spinner-button-top,\n.spinner-button-updown .spinner-button-bottom {\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-button-updown .spinner-button-top:hover,\n.spinner-button-updown .spinner-button-bottom:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-updown .spinner-arrow-up,\n.spinner-button-updown .spinner-arrow-down,\n.spinner-button-updown .spinner-arrow-up:hover,\n.spinner-button-updown .spinner-arrow-down:hover {\n  background-color: transparent;\n}\n.spinner-arrow-hover {\n  background-color: #E6E6E6;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-button-top:hover,\n.spinner-button-bottom:hover,\n.spinner-button-left:hover,\n.spinner-button-right:hover,\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #E6E6E6;\n}\n.textbox-disabled .spinner-button-top:hover,\n.textbox-disabled .spinner-button-bottom:hover,\n.textbox-disabled .spinner-button-left:hover,\n.textbox-disabled .spinner-button-right:hover,\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #ffffff;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n  background-color: #ffffff;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n  background-color: #ffffff;\n}\n.spinner-button-up {\n  background: url('images/spinner_arrows.png') no-repeat -32px center;\n}\n.spinner-button-down {\n  background: url('images/spinner_arrows.png') no-repeat -48px center;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/splitbutton.css",
    "content": ".s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #b3b3b3;\n  border-width: 0 0 0 1px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/switchbutton.css",
    "content": ".switchbutton {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: middle;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  background: #dddddd;\n  border: 1px solid #dddddd;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.switchbutton-inner {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  top: -1px;\n  left: -1px;\n}\n.switchbutton-on,\n.switchbutton-off,\n.switchbutton-handle {\n  display: inline-block;\n  text-align: center;\n  height: 100%;\n  float: left;\n  font-size: 14px;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.switchbutton-on {\n  background: #CCE6FF;\n  color: #000;\n}\n.switchbutton-off {\n  background-color: #fff;\n  color: #444;\n}\n.switchbutton-on,\n.switchbutton-reversed .switchbutton-off {\n  -moz-border-radius: 0px 0 0 0px;\n  -webkit-border-radius: 0px 0 0 0px;\n  border-radius: 0px 0 0 0px;\n}\n.switchbutton-off,\n.switchbutton-reversed .switchbutton-on {\n  -moz-border-radius: 0 0px 0px 0;\n  -webkit-border-radius: 0 0px 0px 0;\n  border-radius: 0 0px 0px 0;\n}\n.switchbutton-handle {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  background-color: #fff;\n  color: #444;\n  border: 1px solid #dddddd;\n  -moz-box-shadow: 0 0 3px 0 #dddddd;\n  -webkit-box-shadow: 0 0 3px 0 #dddddd;\n  box-shadow: 0 0 3px 0 #dddddd;\n}\n.switchbutton-value {\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.switchbutton-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.switchbutton-disabled,\n.switchbutton-readonly {\n  cursor: default;\n}\n.switchbutton:focus {\n  -moz-box-shadow: 0 0 3px 0 #dddddd;\n  -webkit-box-shadow: 0 0 3px 0 #dddddd;\n  box-shadow: 0 0 3px 0 #dddddd;\n  outline: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/tabs.css",
    "content": ".tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  border: 0;\n}\n.tabs li .tabs-inner {\n  display: inline-block;\n  text-decoration: none;\n  cursor: hand;\n  cursor: pointer;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 0px 0px 0 0;\n  -webkit-border-radius: 0px 0px 0 0;\n  border-radius: 0px 0px 0 0;\n}\n.tabs li.tabs-selected .tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected .tabs-inner:hover {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 14px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li .tabs-inner {\n  -moz-border-radius: 0 0 0px 0px;\n  -webkit-border-radius: 0 0 0px 0px;\n  border-radius: 0 0 0px 0px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 2px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 2px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-justified li .tabs-inner {\n  padding-left: 0;\n  padding-right: 0;\n}\n.tabs-header-left .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0px 0 0 0px;\n  -webkit-border-radius: 0px 0 0 0px;\n  border-radius: 0px 0 0 0px;\n}\n.tabs-header-right .tabs li .tabs-inner {\n  display: block;\n  text-align: left;\n  padding-left: 10px;\n  padding-right: 10px;\n  -moz-border-radius: 0 0px 0px 0;\n  -webkit-border-radius: 0 0px 0px 0;\n  border-radius: 0 0px 0px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-pill {\n  padding-bottom: 3px;\n}\n.tabs-header-bottom .tabs-pill {\n  padding-top: 3px;\n  padding-bottom: 0;\n}\n.tabs-header-left .tabs-pill {\n  padding-right: 3px;\n}\n.tabs-header-right .tabs-pill {\n  padding-left: 3px;\n}\n.tabs-header .tabs-pill li .tabs-inner {\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.tabs-header-narrow,\n.tabs-header-narrow .tabs-narrow {\n  padding: 0;\n}\n.tabs-narrow li,\n.tabs-header-bottom .tabs-narrow li {\n  margin-left: 0;\n  margin-right: -1px;\n}\n.tabs-narrow li.tabs-last,\n.tabs-header-bottom .tabs-narrow li.tabs-last {\n  margin-right: 0;\n}\n.tabs-header-left .tabs-narrow,\n.tabs-header-right .tabs-narrow {\n  padding-top: 0;\n}\n.tabs-header-left .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-right: -1px;\n}\n.tabs-header-left .tabs-narrow li.tabs-last,\n.tabs-header-right .tabs-narrow li.tabs-last {\n  margin-bottom: 0;\n}\n.tabs-header-right .tabs-narrow li {\n  margin-bottom: -1px;\n  margin-left: -1px;\n}\n.tabs-scroller-left {\n  background: #ffffff url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #ffffff url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li .tabs-inner:hover {\n  background: #E6E6E6;\n  color: #444;\n  filter: none;\n}\n.tabs li.tabs-selected .tabs-inner {\n  background-color: #fff;\n  color: #777;\n}\n.tabs li .tabs-inner {\n  color: #777;\n  background-color: #ffffff;\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #ffffff;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li .tabs-inner,\n.tabs li.tabs-selected .tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner,\n.tabs-header-left .tabs li.tabs-selected .tabs-inner,\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-color: #ddd;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #E6E6E6;\n}\n.tabs li.tabs-selected .tabs-inner {\n  border-bottom: 1px solid #fff;\n}\n.tabs-header-bottom .tabs li.tabs-selected .tabs-inner {\n  border-top: 1px solid #fff;\n}\n.tabs-header-left .tabs li.tabs-selected .tabs-inner {\n  border-right: 1px solid #fff;\n}\n.tabs-header-right .tabs li.tabs-selected .tabs-inner {\n  border-left: 1px solid #fff;\n}\n.tabs-header .tabs-pill li.tabs-selected .tabs-inner {\n  background: #CCE6FF;\n  color: #000;\n  filter: none;\n  border-color: #ddd;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/tagbox.css",
    "content": ".tagbox {\n  cursor: text;\n}\n.tagbox .textbox-text {\n  float: left;\n}\n.tagbox-label {\n  position: relative;\n  display: block;\n  margin: 4px 0 0 4px;\n  padding: 0 20px 0 4px;\n  float: left;\n  vertical-align: top;\n  text-decoration: none;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n  background: #E6E6E6;\n  color: #444;\n}\n.tagbox-remove {\n  background: url('images/tagbox_icons.png') no-repeat -16px center;\n  position: absolute;\n  display: block;\n  width: 16px;\n  height: 16px;\n  right: 2px;\n  top: 50%;\n  margin-top: -8px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tagbox-remove:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.textbox-disabled .tagbox-label {\n  cursor: default;\n}\n.textbox-disabled .tagbox-remove:hover {\n  cursor: default;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/textbox.css",
    "content": ".textbox {\n  position: relative;\n  border: 1px solid #ddd;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.textbox .textbox-text {\n  font-size: 14px;\n  border: 0;\n  margin: 0;\n  padding: 0 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n  height: 28px;\n  line-height: 28px;\n}\n.textbox textarea.textbox-text {\n  line-height: normal;\n}\n.textbox .textbox-text::-ms-clear,\n.textbox .textbox-text::-ms-reveal {\n  display: none;\n}\n.textbox textarea.textbox-text {\n  white-space: pre-wrap;\n}\n.textbox .textbox-prompt {\n  font-size: 14px;\n  color: #aaa;\n}\n.textbox .textbox-bgicon {\n  background-position: 3px center;\n  padding-left: 21px;\n}\n.textbox .textbox-button,\n.textbox .textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox .textbox-button-right,\n.textbox .textbox-button-right:hover {\n  right: 0;\n  border-width: 0 0 0 1px;\n}\n.textbox .textbox-button-left,\n.textbox .textbox-button-left:hover {\n  left: 0;\n  border-width: 0 1px 0 0;\n}\n.textbox .textbox-button-top,\n.textbox .textbox-button-top:hover {\n  left: 0;\n  border-width: 0 0 1px 0;\n}\n.textbox .textbox-button-bottom,\n.textbox .textbox-button-bottom:hover {\n  top: auto;\n  bottom: 0;\n  left: 0;\n  border-width: 1px 0 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-label {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n  line-height: 30px;\n  vertical-align: middle;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  margin: 0;\n  padding-right: 5px;\n}\n.textbox-label-after {\n  padding-left: 5px;\n  padding-right: 0;\n}\n.textbox-label-top {\n  display: block;\n  width: auto;\n  padding: 0;\n}\n.textbox-disabled,\n.textbox-label-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  border-color: #c4c4c4;\n  -moz-box-shadow: 0 0 3px 0 #ddd;\n  -webkit-box-shadow: 0 0 3px 0 #ddd;\n  box-shadow: 0 0 3px 0 #ddd;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n.form-floating-label.form-field .textbox-text {\n  padding: 0;\n}\n.form-floating-label.form-field .textbox-label {\n  position: relative;\n  height: 20px;\n  line-height: 20px;\n  transition: all .3s;\n  font-size: 12px;\n  z-index: 9;\n}\n.form-floating-label.form-field-empty .textbox-label {\n  cursor: text;\n  font-size: 14px;\n  transform: translate(0,25px);\n}\n.form-floating-label.form-field-empty.form-field-focused .textbox-label {\n  cursor: default;\n  font-size: 12px;\n  transform: translate(0,0);\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/timepicker.css",
    "content": ".timepicker-panel .clock-wrap {\n  position: relative;\n}\n.timepicker-panel .clock {\n  position: relative;\n  background: #ffffff;\n  color: #777;\n  border-radius: 50%;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n}\n.timepicker-panel .clock .item {\n  width: 32px;\n  height: 32px;\n  left: 50%;\n  top: 50%;\n  margin-left: -16px;\n  margin-top: -16px;\n  position: absolute;\n  user-select: none;\n  border-radius: 50%;\n  z-index: 9;\n  cursor: pointer;\n}\n.timepicker-panel .clock .item-selected {\n  background: #99cdff;\n  color: #000;\n}\n.timepicker-panel .clock .hand {\n  width: 2px;\n  bottom: 50%;\n  left: 50%;\n  margin-left: -1px;\n  top: 20px;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  position: absolute;\n  will-change: transform;\n  z-index: 1;\n  background-color: #99cdff;\n}\n.timepicker-panel .clock .hand .drag {\n  top: -16px;\n  left: -15px;\n  width: 4px;\n  height: 4px;\n  border: 14px solid #99cdff;\n  position: absolute;\n  box-sizing: content-box;\n  border-radius: 100%;\n  background-color: #000;\n}\n.timepicker-panel .clock .center {\n  top: 50%;\n  left: 50%;\n  width: 6px;\n  height: 6px;\n  position: absolute;\n  transform: translate(-50%,-50%);\n  border-radius: 50%;\n  background-color: #99cdff;\n}\n.timepicker-panel .panel-header {\n  height: 70px;\n  border: 0;\n  font-size: 36px;\n  position: relative;\n}\n.timepicker-panel .body {\n  position: relative;\n}\n.timepicker-panel .panel-header .ampm {\n  font-size: 16px;\n  padding-left: 10px;\n  position: absolute;\n  right: 20px;\n}\n.timepicker-panel .panel-header .sep {\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title {\n  cursor: pointer;\n  opacity: 0.6;\n}\n.timepicker-panel .panel-header .title:hover {\n  opacity: 1.0;\n}\n.timepicker-panel .panel-header .title-selected,\n.timepicker-panel .panel-header .title-selected:hover {\n  cursor: default;\n  opacity: 1.0;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/tooltip.css",
    "content": ".tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.tooltip-content {\n  font-size: 14px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.tooltip-arrow {\n  display: none \\9;\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #fff;\n  border-color: #ddd;\n  color: #444;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #ddd;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #fff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #ddd;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #fff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #ddd;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #fff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #ddd;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #fff;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/tree.css",
    "content": ".tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 26px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  margin: 4px 0;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 14px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  margin: 4px 0;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 14px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #ddd;\n  font-size: 14px;\n  height: 26px;\n  line-height: 26px;\n  padding: 0 4px;\n  margin: 0;\n  width: 80px;\n  outline-style: none;\n  vertical-align: middle;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #fff;\n  color: #444;\n  border-color: #ddd;\n}\n.tree-node-hover {\n  background: #E6E6E6;\n  color: #444;\n}\n.tree-node-selected {\n  background: #CCE6FF;\n  color: #000;\n}\n.tree-node-disabled {\n  opacity: 0.5;\n  cursor: default;\n}\n.tree-node-hidden {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/validatebox.css",
    "content": ".inputbox {\n  display: inline-block;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n  color: #000;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/metro/window.css",
    "content": ".window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.window-shadow {\n  background: #eee;\n  -moz-box-shadow: 2px 2px 3px #ededed;\n  -webkit-box-shadow: 2px 2px 3px #ededed;\n  box-shadow: 2px 2px 3px #ededed;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #ddd;\n}\n.window {\n  background-color: #ffffff;\n}\n.window-proxy {\n  border: 1px dashed #ddd;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #eee;\n}\n.window .panel-footer {\n  border: 1px solid #ddd;\n  position: relative;\n  top: -1px;\n}\n.window-thinborder {\n  padding: 0;\n}\n.window-thinborder .window-header {\n  padding: 5px 5px 6px 5px;\n}\n.window-thinborder .window-body {\n  border-width: 0px;\n}\n.window-thinborder .window-footer {\n  border-left: transparent;\n  border-right: transparent;\n  border-bottom: transparent;\n}\n.window-thinborder .window-header .panel-icon,\n.window-thinborder .window-header .panel-tool {\n  margin-top: -9px;\n  margin-left: 5px;\n  margin-right: 5px;\n}\n.window-noborder {\n  border: 0;\n}\n.window.panel-hleft .window-header {\n  padding: 0 6px 0 0;\n}\n.window.panel-hright .window-header {\n  padding: 0 0 0 6px;\n}\n.window.panel-hleft>.panel-header .panel-title {\n  top: auto;\n  left: 16px;\n}\n.window.panel-hright>.panel-header .panel-title {\n  top: auto;\n  right: 16px;\n}\n.window.panel-hleft>.panel-header .panel-title-up,\n.window.panel-hright>.panel-header .panel-title-up {\n  bottom: 0;\n}\n.window.panel-hleft .window-body {\n  border-width: 1px 1px 1px 0;\n}\n.window.panel-hright .window-body {\n  border-width: 1px 0 1px 1px;\n}\n.window.panel-hleft .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: 0;\n}\n.window.panel-hright .window-header .panel-icon {\n  top: 1px;\n  margin-top: 0;\n  left: auto;\n  right: 1px;\n}\n.window.panel-hleft .window-header .panel-tool,\n.window.panel-hright .window-header .panel-tool {\n  margin-top: 0;\n  top: auto;\n  bottom: 1px;\n  right: auto;\n  margin-right: 0;\n  left: 50%;\n  margin-left: -11px;\n}\n.window.panel-hright .window-header .panel-tool {\n  left: auto;\n  right: 1px;\n}\n.window-thinborder.panel-hleft .window-header {\n  padding: 5px 6px 5px 5px;\n}\n.window-thinborder.panel-hright .window-header {\n  padding: 5px 5px 5px 6px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title {\n  left: 21px;\n}\n.window-thinborder.panel-hleft>.panel-header .panel-title-up,\n.window-thinborder.panel-hright>.panel-header .panel-title-up {\n  bottom: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-icon,\n.window-thinborder.panel-hright .window-header .panel-icon {\n  margin-top: 5px;\n}\n.window-thinborder.panel-hleft .window-header .panel-tool,\n.window-thinborder.panel-hright .window-header .panel-tool {\n  left: 16px;\n  bottom: 5px;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/mobile.css",
    "content": "*{\n\tbox-sizing: border-box;\n}\n.m-toolbar{\n\tposition: relative;\n\ttext-align: center;\n\tmin-height: 34px;\n}\n.m-toolbar .m-title{\n\tline-height: 34px;\n\tfont-size: 16px;\n\tfont-weight: bold;\n\ttext-align: center;\n}\n.m-left{\n\tposition: absolute;\n\theight: 100%;\n\tvertical-align: middle;\n\ttop:0;\n\tleft:0;\n\tz-index: 1;\n}\n.m-right{\n\tposition: absolute;\n\theight: 100%;\n\tvertical-align: middle;\n\ttop:0;\n\tright:0;\n\tz-index: 1;\n}\n.m-left>.l-btn,.m-right>.l-btn,\n.m-left>.switchbutton,.m-right>.switchbutton{\n\tposition: relative;\n\tvertical-align: top;\n\ttop: 50%;\n\tmargin-top: -15px;\n}\n.m-back::before,.m-next::after{\n\tdisplay: inline-block;\n\tbox-sizing: border-box;\n\tvertical-align: top;\n\tborder-style: solid;\n\t-webkit-transform:rotate(45deg);\n\ttransform:rotate(45deg);\n\twidth: 12px;\n\theight: 12px;\n\tcontent: '';\n\tposition: absolute;\n\ttop: 50%;\n\tmargin-top: -6px;\n}\n.m-back::before{\n\tborder-width: 0 0 1px 1px;\n\tleft: 8px;\n}\n.m-next::after{\n\tborder-width: 1px 1px 0 0;\n\tright: 8px;\n}\n.m-back .l-btn-text{\n\tpadding-left: 12px;\n}\n.m-next .l-btn-text{\n\tpadding-right: 12px;\n}\n.m-buttongroup{\n\tdisplay: inline-block;\n\tmargin: 0;\n\tpadding: 0;\n\toverflow: hidden;\n\tvertical-align: middle;\n}\n.m-buttongroup .l-btn{\n\tfloat: left;\n\tmargin-left: -1px;\n}\n.m-buttongroup .l-btn:last-child::after{\n\tcontent: '';\n\tclear: both;\n}\n.m-buttongroup .l-btn:not(:first-child):not(:last-child){\n\tborder-radius: 0;\n}\n.m-buttongroup .l-btn:first-child{\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n\tmargin-left: 0;\n}\n.m-buttongroup .l-btn:last-child{\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n}\n.m-buttongroup-justified{\n\tdisplay: table;\n\ttable-layout: fixed;\n}\n.m-buttongroup-justified .l-btn{\n\tfloat: none;\n\tdisplay: table-cell;\n}\n.m-badge:not(.l-btn),\n.l-btn.m-badge::after{\n\tdisplay: inline-block;\n\tmin-width: 10px;\n\tline-height: 1;\n\tfont-size: 12px;\n\ttext-align: center;\n\twhite-space: nowrap;\n\tborder-radius: 10px;\n\tpadding: 2px 4px;\n\tborder-style: solid;\n\tborder-width: 0px;\n\tbackground-color: #d9534f;\n\tcolor: #fff;\n\tz-index: 99999;\n}\n.l-btn.m-badge::after,\n.l-btn .m-badge{\n\tposition: absolute;\n\ttop: -10px;\n\tright: -10px;\n}\n.tabs-inner .m-badge{\n\tposition: absolute;\n\ttop: 1px;\n\tright: -10px;\n}\n.tabs-inner>.tabs-title>.m-badge{\n\ttop: 0;\n\tright: 0;\n}\n.tabs-header-bottom .tabs-inner>.tabs-title>.m-badge{\n\ttop: auto;\n\tbottom: 0;\n\tright: 0;\n}\n.panel-footer .l-btn .l-btn-icon-top .m-badge,\n.panel-footer .l-btn .l-btn-icon-bottom .m-badge{\n\ttop: 0;\n\tright: -10px;\n}\n.l-btn.m-badge::after{\n\tcontent: attr(data-badge);\n}\n.l-btn,.l-btn-left{\n\toverflow: visible;\n\tposition: relative;\n}\n\n.m-in{\n\t-webkit-animation-timing-function: ease-out;\n\t-webkit-animation-duration: 250ms;\n}\n.m-out{\n\t-webkit-animation-timing-function: ease-in;\n\t-webkit-animation-duration: 250ms;\n}\n.m-slide-left.m-in{\n\t-webkit-animation-name: slideLeftIn;\n}\n.m-slide-left.m-out{\n\t-webkit-animation-name: slideLeftOut;\n}\n.m-slide-right.m-in{\n\t-webkit-animation-name: slideRightIn;\n}\n.m-slide-right.m-out{\n\t-webkit-animation-name: slideRightOut;\n}\n.m-slide-up.m-in{\n\t-webkit-animation-name: slideUpIn;\n}\n.m-slide-up.m-out{\n\t-webkit-animation-name: slideUpOut;\n}\n.m-slide-down.m-in{\n\t-webkit-animation-name: slideDownIn;\n}\n.m-slide-down.m-out{\n\t-webkit-animation-name: slideDownOut;\n}\n\n@-webkit-keyframes slideLeftIn{\n\tfrom {-webkit-transform: translateX(100%);}\n\tto {-webkit-transform: translateX(0);}\n}\n@-webkit-keyframes slideLeftOut{\n\tfrom {-webkit-transform: translateX(0);}\n\tto {-webkit-transform: translateX(-100%);}\n}\n@-webkit-keyframes slideRightIn{\n\tfrom {-webkit-transform: translateX(-100%);}\n\tto {-webkit-transform: translateX(0);}\n}\n@-webkit-keyframes slideRightOut{\n\tfrom {-webkit-transform: translateX(0);}\n\tto {-webkit-transform: translateX(100%);}\n}\n@-webkit-keyframes slideUpIn{\n\tfrom {-webkit-transform: translateY(100%);}\n\tto {-webkit-transform: translateY(0);}\n}\n@-webkit-keyframes slideUpOut{\n\tfrom {-webkit-transform: translateY(0);}\n\tto {-webkit-transform: translateY(-100%);}\n}\n@-webkit-keyframes slideDownIn{\n\tfrom {-webkit-transform: translateY(-100%);}\n\tto {-webkit-transform: translateY(0);}\n}\n@-webkit-keyframes slideDownOut{\n\tfrom {-webkit-transform: translateY(0);}\n\tto {-webkit-transform: translateY(100%);}\n}\n\n.m-fade.m-in{\n\t-webkit-animation-name: fadeIn;\n}\n.m-fade.m-out{\n\t-webkit-animation-name: fadeOut;\n}\n\n@-webkit-keyframes fadeIn{\n\tfrom {opacity: 0;}\n\tto {opacity: 1}\n}\n@-webkit-keyframes fadeOut{\n\tfrom {opacity: 1;}\n\tto {opacity: 0;}\n}\n\n.m-pop.m-in{\n\t-webkit-animation-name: popIn;\n}\n.m-pop.m-out{\n\t-webkit-animation-name: popOut;\n}\n@-webkit-keyframes popIn{\n\tfrom {\n\t\topacity: 0;\n\t\t-webkit-transform: scale(.2);\n\t}\n\tto {\n\t\topacity: 1;\n\t\t-webkit-transform: scale(1);\n\t}\n}\n@-webkit-keyframes popOut{\n\tfrom {\n\t\topacity: 1;\n\t\t-webkit-transform: scale(1);\n\t}\n\tto {\n\t\topacity: 0;\n\t\t-webkit-transform: scale(0);\n\t}\n}\n\n.navpanel{\n\tposition: absolute;\n}\n.textbox .textbox-text{\n\tpadding: 0 4px;\n\theight: 30px;\n\tline-height: 30px;\n}\n.calendar-header,.calendar-title{\n\theight: 30px;\n}\n.calendar-title span{\n\theight: 30px;\n\tline-height: 30px\n}\n.datebox-button{\n\theight: 24px;\n}\n.datebox-button a{\n\tline-height: 24px;\n}\n.tree-node{\n\tbox-sizing: border-box;\n\theight: 32px;\n\tpadding: 3px 0;\n}\n\n.panel-title{\n\theight: 26px;\n\tline-height: 26px;\n}\n.window{\n\tpadding: 5px 0 0 0;\n}\n.window-shadow{\n\t-moz-box-shadow: 0 0 30px 0 #D3D3D3;\n\t-webkit-box-shadow: 0 0 30px 0 #D3D3D3;\n\tbox-shadow: 0 0 30px 0 #D3D3D3;\t\n}\n.window-header .panel-title{\n\theight: 26px;\n\tline-height: 26px;\n\ttext-align: center;\n}\n.window-header .panel-tool{\n\tdisplay: none;\n}\n.window .window-body{\n\tborder: 0;\n}\n.dialog-button{\n\tborder-color: transparent;\n\toverflow: hidden;\n}\n.dialog-button .l-btn{\n\tmargin: 0;\n}\n\n.tabs-justified,\n.tabs-justified .l-btn,\n.tabs-justified li a.tabs-inner,\n.tabs-justified li.tabs-selected a.tabs-inner,\n.tabs-header-bottom .tabs-justified li.tabs-selected a.tabs-inner,\n.tabs-header-bottom .tabs-justified li a.tabs-inner{\n\t-moz-border-radius:0;\n\t-webkit-border-radius:0;\n\tborder-radius:0;\n}\n\n.datagrid-row,.datagrid-header-row{\n\theight: 32px;\n}\n.datalist .datagrid-group-title,\n.m-list .m-list-group{\n\tpadding: 0 10px;\n}\n.datalist .datagrid-cell,\n.m-list li{\n\tpadding: 10px;\n}\n.m-list li .m-right{\n\tright: 10px;\n}\n.datalist .datalist-link,\n.m-list li>a{\n\tmargin: -10px;\n\tpadding: 10px;\n\tpadding-right: 24px;\n}\n.m-list li>a .m-right{\n\tright: 24px;\n}\n.datalist .datalist-link::after,\n.m-list li>a::after{\n\tright: 12px;\n}\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/react.css",
    "content": "*{\n\tbox-sizing: border-box;\n}\n.f-block{\n\tdisplay: block;\n\tposition: relative;\n}\n.f-row{\n\tdisplay: -webkit-box;\n\tdisplay: -webkit-flex;\n\tdisplay: -moz-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\tposition: relative;\n}\n.f-column{\n\tdisplay: -webkit-box;\n\tdisplay: -webkit-flex;\n\tdisplay: -moz-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-direction: normal;\n\t-webkit-box-orient: vertical;\n\t-webkit-flex-direction: column;\n\t-moz-flex-direction: column;\n\t-ms-flex-direction: column;\n\tflex-direction: column;\n\tposition: relative;\n}\n.f-inline-row{\n\twhite-space: nowrap;\n\tdisplay: -webkit-inline-box;\n\tdisplay: -ms-inline-box;\n\tdisplay: inline-flex;\n\tvertical-align: middle;\n\tposition: relative;\n\talign-items: stretch;\n\t-webkit-tap-highlight-color: transparent;\n}\n.f-content-center{\n\t-webkit-box-pack: center;\n\t-ms-flex-pack: center;\n\t-webkit-justify-content: center;\n\t-moz-justify-content: center;\n\tjustify-content: center;\n\t-webkit-box-align: center;\n\t-ms-flex-align: center;\n\t-webkit-align-items: center;\n\t-moz-align-items: center;\n\talign-items: center;\n}\n.f-vcenter{\n\t-webkit-box-align: center;\n\t-ms-flex-align: center;\n\t-webkit-align-items: center;\n\t-moz-align-items: center;\n\talign-items: center;\n}\n.f-full{\n\t-webkit-box-flex: 1 1 auto;\n\t-ms-flex: 1 1 auto;\n\tflex: 1 1 auto;\n}\n.f-none{\n\t-webkit-box-flex: none;\n\t-ms-flex: none;\n\tflex: none;\n}\n.f-hide{\n\tdisplay: none;\n}\n.f-order0{\n\torder: 0;\n}\n.f-order1{\n\torder: 1;\n}\n.f-order2{\n\torder: 2;\n}\n.f-order3{\n\torder: 3;\n}\n.f-order4{\n\torder: 4;\n}\n.f-order5{\n\torder: 5;\n}\n.f-order6{\n\torder: 6;\n}\n.f-order7{\n\torder: 7;\n}\n.f-order8{\n\torder: 8;\n}\n.f-noshrink{\n\t-webkit-flex-shrink: 0;\n\t-moz-flex-shrink: 0;\n\t-ms-flex-negative: 0;\n\tflex-shrink: 0;\n}\n.f-animate{\n    transition: all .3s;\n}\n.f-field{\n\twidth: 12em;\n\theight: 30px;\n}\n.f-vtitle{\n\t-ms-writing-mode: tb-lr;\n\t-webkit-writing-mode: vertical-lr;\n\twriting-mode: vertical-lr;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.scroll-body{\n\toverflow: auto;\n\tposition: relative;\n}\n\n.textbox .textbox-text{\n\twidth: 100%;\n\theight: auto;\n\toverflow: hidden;\n}\n.textbox-addon{\n\talign-items: center;\n}\n.textbox textarea.textbox-text{\n\theight: auto;\n\toverflow: auto;\n}\n.textbox-disabled>.textbox-addon .textbox-icon,\n.textbox-readonly>.textbox-addon .textbox-icon{\n\tcursor: default;\n}\n.textbox-disabled>.textbox-addon .textbox-icon:hover,\n.textbox-readonly>.textbox-addon .textbox-icon:hover{\n\topacity: 0.6;\n\tcursor: default;\n}\n.textbox-addon .textbox-icon{\n\twidth: 26px;\n\theight: 18px;\n}\n\n.spinner .textbox-text{\n\theight: auto;\n}\n.spinner-button-left,.spinner-button-right{\n\twidth: 26px;\n}\n.spinner-button-updown{\n\twidth: 26px;\n}\n.spinner-button-top,.spinner-button-bottom{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 26px;\n}\n.spinner-button-top{\n\ttop: 0;\n}\n.spinner-button-bottom{\n\ttop: auto;\n\tbottom: 0;\n}\n.spinner-button{\n\tdisplay: inline-block;\n\tposition: absolute;\n\twidth: 16px;\n\theight: 16px;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.spinner-arrow{\n\tcursor: pointer;\n\topacity: 0.6;\n}\n\n.textbox-disabled .spinner-arrow:hover,\n.textbox-readonly .spinner-arrow:hover\n{\n\topacity: 0.6;\n\tcursor: default;\n}\n.textbox-readonly .spinner-arrow .spinner-arrow-up:hover,\n.textbox-disabled .spinner-arrow .spinner-arrow-up:hover,\n.textbox-readonly .spinner-arrow .spinner-arrow-down:hover,\n.textbox-disabled .spinner-arrow .spinner-arrow-down:hover\n{\n\tcursor: default;\n}\n\n.l-btn{\n\twidth1: 100%;\n}\n.l-btn-empty{\n\theight: 28px;\n}\n.l-btn-large .l-btn-empty{\n\theight: 44px;\n}\n.l-btn-left{\n\toverflow: visible;\n}\n.m-btn .l-btn-left .m-btn-line{\n\ttop: -100px;\n\twidth: 36px;\n\tright: -20px;\n}\n.button-group .l-btn.f-inline-row{\n\tmargin-left: -1px;\n}\n.button-group .l-btn:hover{\n\tz-index: 99;\n}\n.button-group .l-btn:not(:first-child):not(:last-child){\n\tborder-radius: 0;\n}\n.button-group .l-btn:first-child{\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n.button-group .l-btn:last-child{\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n}\n\n.switchbutton{\n\twidth: 70px;\n\theight: 30px;\n}\n.switchbutton-on,.switchbutton-off{\n\tposition: absolute;\n\tleft: 0;\n\twidth: calc(100% - 15px);\n\theight: 100%;\n}\n.switchbutton-on span,.switchbutton-off span,.switchbutton-handle span{\n\theight: 100%;\n}\n.switchbutton-on span{\n\ttext-indent: -15px;\n}\n.switchbutton-off span{\n\ttext-indent: 15px;\n}\n.switchbutton-off{\n\tleft: calc(100% - 15px);\n}\n.switchbutton-handle{\n\twidth: 30px;\n\tleft: auto;\n\tright: 0;\n\tz-index: 9;\n}\n.switchbutton-inner{\n\ttransition: all 200ms ease-out;\n\toverflow: visible;\n\tposition: absolute;\n\twidth: 100%;\n\ttop: -1px;\n\tbottom: -1px;\n\tleft: calc(-100% + 30px);\n\tright: auto;\n}\n.switchbutton-checked .switchbutton-inner{\n\tleft: 0;\n}\n.draggable-reverting{\n\ttransition: all 200ms ease-out;\n}\n.slider-h .slider-tip{\n\ttransform: translateX(-50%);\n}\n.slider-h .slider-rulelabel span{\n\ttransform: translateX(-50%);\n}\n.slider-v .slider-tip{\n\tmargin-top: 0;\n\ttransform: translate(-100%,-50%);\n}\n.slider-v .slider-rulelabel span{\n\ttransform: translateY(-50%);\n}\n.slider-v .slider-inner{\n\theight: auto;\n}\n\n\n.panel{\n\tposition:relative;\n}\n.panel-title{\n\theight: 20px;\n\tline-height: 20px;\n}\n.panel-footer-fixed{\n\tposition:absolute;\n\twidth:100%;\n\tbottom:0;\n}\n.window{\n\tposition: absolute;\n}\n.window-mask{\n\tposition: fixed;\n}\n.window .window-footer{\n\ttop: 0;\n}\n.dialog-toolbar{\n\tborder-width: 0 0 1px 0;\n}\n.dialog-button{\n\tborder-width: 1px 0 0 0;\n\ttop: 0;\n}\n\n.tabs{\n\twidth: 100%;\n\theight: auto;\n}\n.tabs-scrollable{\n\ttransition: left 400ms, right 400ms;\n\tposition: absolute;\n\twidth: auto;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.tabs li{\n\tdisplay: inherit;\n}\n.tabs li .tabs-inner{\n\theight: auto;\n\tline-height: normal;\n\tdisplay: inherit;\n\toverflow: hidden;\n}\n.tabs-title{\n\tdisplay: inherit;\n\talign-items: center;\n\tline-height: normal;\n}\n.tabs-close{\n\toutline: none;\n}\n.tabs-scroller-left,.tabs-scroller-right{\n\tposition: relative;\n\tdisplay: block;\n\twidth: 21px;\n\theight: 100%;\n}\n.tabs-header-left .tabs li{\n\tright: -1px;\n}\n.tabs-header-left .tabs li,.tabs-header-right .tabs li,\n.tabs-header-left .tabs li .tabs-inner,\n.tabs-header-right .tabs li .tabs-inner{\n\tdisplay: inherit;\n}\n\n.combo-panel{\n\tposition: absolute;\n\theight: 200px;\n\tz-index: 9999;\n}\n.combo-panel .tree,\n.combo-panel eui-datagrid,\n.combo-panel eui-treegrid{\n\twidth: 100%;\n\theight: 100%;\n}\n.combobox-item{\n\tpadding: 6px 4px;\n\tline-height: 20px;\n}\n.tagbox.f-field{\n\theight: auto;\n}\n.tagbox-labels{\n\tpadding-bottom: 4px;\n}\n.tagbox-label{\n\theight: 20px;\n\tline-height: 20px;\n}\n.tagbox .textbox-text{\n\twidth: 50px;\n\tmax-width: 100%;\n\tmargin-top: 4px;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n\theight: 20px;\n\tline-height: 20px;\n}\n.tree-editing.tree-title{\n\tposition: relative;\n\tmargin: 0;\n\tpadding: 0;\n\theight: 26px;\n\tline-height: 26px;\n\toverflow: hidden;\n}\n.tree-editing.tree-title > *{\n\tflex: 1 1 auto;\n\theight: auto;\n\toverflow: hidden;\n}\n.tree-editing.tree-title .textbox-text{\n\theight: 24px;\n\tline-height: 24px;\n}\n.datagrid,\n.datagrid-view,.datagrid-view1,.datagrid-view2{\n\tposition: relative;\n}\n.datagrid-vbody{\n\toverflow: hidden;\n}\n.datagrid-view3{\n\tmargin-left: -1px;\n}\n.datagrid-view3 .datagrid-body{\n\toverflow: hidden;\n}\n.datagrid-view3 .datagrid-body-inner{\n\tpadding-bottom: 20px;\n}\n.datagrid-view3 .datagrid-header td,\n.datagrid-view3 .datagrid-body td,\n.datagrid-view3 .datagrid-footer td {\n\tborder-width: 0 0 1px 1px;\n}\n.datagrid-htable,.datagrid-btable,.datagrid-ftable{\n\ttable-layout: fixed;\n\twidth: 100%;\n}\n.datagrid-htable{\n\theight: 100%;\n}\n.datagrid-header .datagrid-header,\n.datagrid-footer .datagrid-header{\n\tborder-width: 0 0 0 1px;\n}\n.datagrid-header-inner,.datagrid-footer-inner{\n\toverflow: hidden;\n}\n.datagrid-header-row, .datagrid-row{\n\theight: 32px;\n}\n.datagrid-header td.datagrid-field-td{\n\tborder-bottom: 0;\n}\n  \n.datagrid-cell{\n\ttext-align: left;\n\theight: auto;\n\tfont-size: inherit;\n}\n.datagrid-cell-group{\n\ttext-align: center;\n}\n.datagrid .datagrid-pager{\n\tpadding: 2px 4px;\n\tdisplay: inherit;\n}\n.datagrid-loading{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\tjustify-content: center;\n\talign-items: center;\n}\n.datagrid-mask{\n\tdisplay: block;\n}\n.datagrid-mask-msg{\n\tdisplay: block;\n\tposition: static;\n\tline-height: 36px;\n\theight: 40px;\n\tmargin: 0;\n\tpadding: 0 5px 0 30px;\n\tz-index: 9;\n}\n.datagrid-body .datagrid-td-group{\n\tborder-left-color: transparent;\n\tborder-right-color: transparent;\n}\n.datagrid-group-expander{\n\tcursor: pointer;\n}\n.datagrid-row-expander{\n\tdisplay: inline-block;\n\twidth: 16px;\n\theight: 18px;\n\tcursor: pointer;\n}\n.datagrid-group-title{\n\talign-self: center;\n\tpadding: 0 4px;\n\twhite-space: nowrap;\n\tword-break: normal;\n\tposition: relative;\n}\n.datagrid-editable> .f-field,\n.datagrid-editable> *{\n\twidth: 100%;\n\theight: 31px;\n}\n.datagrid-editable .textbox, .datagrid-editable .textbox-text{\n\tborder-radius: 0;\n}\n.datagrid-filter-row .textbox{\n\tborder-radius: 0;\n}\n.datagrid-filter-c{\n\tpadding: 4px;\n\theight: 38px;\n}\n.datagrid-filter-c> .f-field,\n.datagrid-filter-c> *{\n\theight: 30px;\n}\n.datagrid-filter-c .datagrid-editable-input{\n\twidth: 100%;\n}\n.datagrid-filter-btn{\n\twidth: 30px;\n}\n.datagrid-filter-btn .textbox-icon{\n\twidth: 28px;\n}\n.datagrid-filter-btn .textbox{\n\tbackground-color: transparent;\n}\n.datagrid-filter-btn-left{\n\tmargin-right: 4px;\n}\n.datagrid-filter-btn-right{\n\tmargin-left: 4px;\n}\n\n.menu-inline{\n\tposition: relative;\n\tdisplay: inline;\n\tmargin: 0;\n\tpadding: 0;\n}\n.menu-inline> .menu-container{\n\tposition: relative;\n}\n.menu-container{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tmin-width: 200px;\n}\n.menu{\n\toverflow: visible;\n}\n.menu-shadow{\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.menu-item{\n\toverflow: visible;\n}\n.menu-text{\n\theight: 32px;\n\tline-height: 32px;\n\tfloat: none;\n}\n.menu-line{\n\tz-index: 9999999;\n\theight: 100%;\n}\n.menu-active{\n\tz-index: 99999999;\n}\n\n.progressbar-value{\n\toverflow: visible;\n}\n\n.searchbox .textbox-button,\n.searchbox .textbox-button:hover{\n\tposition: inherit;\n}\n\n.calendar-content{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.calendar-menu{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n}\n.calendar-menu-month-inner{\n\tposition: relative;\n}\n\n.radiobutton{\n\twidth: 20px;\n\theight: 20px;\n}\n.checkbox{\n\twidth: 20px;\n\theight: 20px;\n}\n.progressbar{\n\theight: 24px;\n}\n.pagination1{\n\theight: 34px;\n\tpadding: 2px;\n}\n.layout{\n\theight: 100%;\n}\n.layout-mask{\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n.layout-animate{\n\ttransition: transform 400ms;\n}\n.layout-panel-north,.layout-panel-south{\n\tposition: absolute;\n\twidth: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.layout-panel-south{\n\ttop: auto;\n\tbottom: 0;\n}\n.layout-panel-west,.layout-panel-east{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tbottom: 0;\n}\n.layout-panel-east{\n\tleft: auto;\n\tright: 0;\n}\n.layout-panel-west.layout-collapsed{\n\ttransform: translate3d(-100%, 0, 0);\n}\n.layout-panel-east.layout-collapsed{\n\ttransform: translate3d(100%, 0, 0)\n}\n.layout-panel-north.layout-collapsed{\n\ttransform: translate3d(0, -100%, 0)\n}\n.layout-panel-south.layout-collapsed{\n\ttransform: translate3d(0, 100%, 0)\n}\n.layout-expand .panel-tool{\n\tright: 6px;\n}\n\n.form-field{\n\tmargin-bottom: 28px;\n}\n.form-field-haserror{\n\tmargin-bottom: 4px;\n}\n.form-field-error{\n\tfont-size: 14px;\n\tcolor: #ed4014;\n\theight: 24px;\n\tline-height: 24px;\n}\n.form-field .f-field{\n\twidth: auto;\n}"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/themes/vue.css",
    "content": "*{\n\tbox-sizing: border-box;\n}\n.f-block{\n\tdisplay: block;\n\tposition: relative;\n}\n.f-row{\n\tdisplay: -webkit-box;\n\tdisplay: -webkit-flex;\n\tdisplay: -moz-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\tposition: relative;\n}\n.f-column{\n\tdisplay: -webkit-box;\n\tdisplay: -webkit-flex;\n\tdisplay: -moz-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-direction: normal;\n\t-webkit-box-orient: vertical;\n\t-webkit-flex-direction: column;\n\t-moz-flex-direction: column;\n\t-ms-flex-direction: column;\n\tflex-direction: column;\n\tposition: relative;\n}\n.f-inline-row{\n\twhite-space: nowrap;\n\tdisplay: -webkit-inline-box;\n\tdisplay: -ms-inline-box;\n\tdisplay: inline-flex;\n\tvertical-align: middle;\n\tposition: relative;\n\talign-items: stretch;\n\t-webkit-tap-highlight-color: transparent;\n}\n.f-content-center{\n\t-webkit-box-pack: center;\n\t-ms-flex-pack: center;\n\t-webkit-justify-content: center;\n\t-moz-justify-content: center;\n\tjustify-content: center;\n\t-webkit-box-align: center;\n\t-ms-flex-align: center;\n\t-webkit-align-items: center;\n\t-moz-align-items: center;\n\talign-items: center;\n}\n.f-vcenter{\n\t-webkit-box-align: center;\n\t-ms-flex-align: center;\n\t-webkit-align-items: center;\n\t-moz-align-items: center;\n\talign-items: center;\n}\n.f-full{\n\t-webkit-box-flex: 1 1 auto;\n\t-ms-flex: 1 1 auto;\n\tflex: 1 1 auto;\n}\n.f-none{\n\t-webkit-box-flex: none;\n\t-ms-flex: none;\n\tflex: none;\n}\n.f-hide{\n\tdisplay: none;\n}\n.f-order0{\n\torder: 0;\n}\n.f-order1{\n\torder: 1;\n}\n.f-order2{\n\torder: 2;\n}\n.f-order3{\n\torder: 3;\n}\n.f-order4{\n\torder: 4;\n}\n.f-order5{\n\torder: 5;\n}\n.f-order6{\n\torder: 6;\n}\n.f-order7{\n\torder: 7;\n}\n.f-order8{\n\torder: 8;\n}\n.f-noshrink{\n\t-webkit-flex-shrink: 0;\n\t-moz-flex-shrink: 0;\n\t-ms-flex-negative: 0;\n\tflex-shrink: 0;\n}\n.f-animate{\n    transition: all .3s;\n}\n.f-field{\n\twidth: 12em;\n\theight: 30px;\n}\n.f-vtitle{\n\t-ms-writing-mode: tb-lr;\n\t-webkit-writing-mode: vertical-lr;\n\twriting-mode: vertical-lr;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.scroll-body{\n\toverflow: auto;\n\tposition: relative;\n}\n\n.textbox .textbox-text{\n\twidth: 100%;\n\theight: auto;\n\toverflow: hidden;\n}\n.textbox-addon{\n\talign-items: center;\n}\n.textbox textarea.textbox-text{\n\theight: auto;\n\toverflow: auto;\n}\n.textbox-disabled>.textbox-addon .textbox-icon,\n.textbox-readonly>.textbox-addon .textbox-icon{\n\tcursor: default;\n}\n.textbox-disabled>.textbox-addon .textbox-icon:hover,\n.textbox-readonly>.textbox-addon .textbox-icon:hover{\n\topacity: 0.6;\n\tcursor: default;\n}\n.textbox-addon .textbox-icon{\n\twidth: 26px;\n\theight: 18px;\n}\n\n.spinner .textbox-text{\n\theight: auto;\n}\n.spinner-button-left,.spinner-button-right{\n\twidth: 26px;\n}\n.spinner-button-updown{\n\twidth: 26px;\n}\n.spinner-button-top,.spinner-button-bottom{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 26px;\n}\n.spinner-button-top{\n\ttop: 0;\n}\n.spinner-button-bottom{\n\ttop: auto;\n\tbottom: 0;\n}\n.spinner-button{\n\tdisplay: inline-block;\n\tposition: absolute;\n\twidth: 16px;\n\theight: 16px;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.spinner-arrow{\n\tcursor: pointer;\n\topacity: 0.6;\n}\n\n.textbox-disabled .spinner-arrow:hover,\n.textbox-readonly .spinner-arrow:hover\n{\n\topacity: 0.6;\n\tcursor: default;\n}\n.textbox-readonly .spinner-arrow .spinner-arrow-up:hover,\n.textbox-disabled .spinner-arrow .spinner-arrow-up:hover,\n.textbox-readonly .spinner-arrow .spinner-arrow-down:hover,\n.textbox-disabled .spinner-arrow .spinner-arrow-down:hover\n{\n\tcursor: default;\n}\n\n.l-btn{\n\twidth1: 100%;\n}\n.l-btn-empty{\n\theight: 28px;\n}\n.l-btn-large .l-btn-empty{\n\theight: 44px;\n}\n.l-btn-left{\n\toverflow: visible;\n}\n.m-btn .l-btn-left .m-btn-line{\n\ttop: -100px;\n\twidth: 36px;\n\tright: -20px;\n}\n.button-group .l-btn.f-inline-row{\n\tmargin-left: -1px;\n}\n.button-group .l-btn:hover{\n\tz-index: 99;\n}\n.button-group .l-btn:not(:first-child):not(:last-child){\n\tborder-radius: 0;\n}\n.button-group .l-btn:first-child{\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n.button-group .l-btn:last-child{\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n}\n\n.switchbutton{\n\twidth: 70px;\n\theight: 30px;\n}\n.switchbutton-on,.switchbutton-off{\n\tposition: absolute;\n\tleft: 0;\n\twidth: calc(100% - 15px);\n\theight: 100%;\n}\n.switchbutton-on span,.switchbutton-off span,.switchbutton-handle span{\n\theight: 100%;\n}\n.switchbutton-on span{\n\ttext-indent: -15px;\n}\n.switchbutton-off span{\n\ttext-indent: 15px;\n}\n.switchbutton-off{\n\tleft: calc(100% - 15px);\n}\n.switchbutton-handle{\n\twidth: 30px;\n\tleft: auto;\n\tright: 0;\n\tz-index: 9;\n}\n.switchbutton-inner{\n\ttransition: all 200ms ease-out;\n\toverflow: visible;\n\tposition: absolute;\n\twidth: 100%;\n\ttop: -1px;\n\tbottom: -1px;\n\tleft: calc(-100% + 30px);\n\tright: auto;\n}\n.switchbutton-checked .switchbutton-inner{\n\tleft: 0;\n}\n.draggable-reverting{\n\ttransition: all 200ms ease-out;\n}\n.slider-h .slider-tip{\n\ttransform: translateX(-50%);\n}\n.slider-h .slider-rulelabel span{\n\ttransform: translateX(-50%);\n}\n.slider-v .slider-tip{\n\tmargin-top: 0;\n\ttransform: translate(-100%,-50%);\n}\n.slider-v .slider-rulelabel span{\n\ttransform: translateY(-50%);\n}\n.slider-v .slider-inner{\n\theight: auto;\n}\n\n\n.panel{\n\tposition:relative;\n}\n.panel-title{\n\theight: 20px;\n\tline-height: 20px;\n}\n.panel-footer-fixed{\n\tposition:absolute;\n\twidth:100%;\n\tbottom:0;\n}\n.window{\n\tposition: absolute;\n}\n.window-mask{\n\tposition: fixed;\n}\n.window .window-footer{\n\ttop: 0;\n}\n.dialog-toolbar{\n\tborder-width: 0 0 1px 0;\n}\n.dialog-button{\n\tborder-width: 1px 0 0 0;\n\ttop: 0;\n}\n\n.tabs{\n\twidth: 100%;\n\theight: auto;\n}\n.tabs-scrollable{\n\ttransition: left 400ms, right 400ms;\n\tposition: absolute;\n\twidth: auto;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.tabs li{\n\tdisplay: inherit;\n}\n.tabs li .tabs-inner{\n\theight: auto;\n\tline-height: normal;\n\tdisplay: inherit;\n\toverflow: hidden;\n}\n.tabs-title{\n\tdisplay: inherit;\n\talign-items: center;\n\tline-height: normal;\n}\n.tabs-close{\n\toutline: none;\n}\n.tabs-scroller-left,.tabs-scroller-right{\n\tposition: relative;\n\tdisplay: block;\n\twidth: 21px;\n\theight: 100%;\n\ttop: -3px;\n\theight: calc(100% + 3px);\n}\n.tabs-header-left .tabs li{\n\tright: -1px;\n}\n.tabs-header-left .tabs li,.tabs-header-right .tabs li,\n.tabs-header-left .tabs li .tabs-inner,\n.tabs-header-right .tabs li .tabs-inner{\n\tdisplay: inherit;\n}\n.tabs-scroller-left{\n\tborder-left-width: 0;\n}\n.tabs-scroller-right{\n\tborder-right-width: 0;\n}\n.tabs-header-plain .tabs-scroller-left{\n\tborder-left-width: 1px;\n}\n.tabs-header-plain .tabs-scroller-right{\n\tborder-right-width: 1px;\n}\n.tabs-tool{\n\tposition: relative;\n\ttop: -3px;\n\tbottom: 0;\n\theight: calc(100% + 3px);\n\tborder-right-width: 0;\n}\n.tabs-header-plain .tabs-scroller-left,\n.tabs-header-plain .tabs-scroller-right,\n.tabs-header-narrow .tabs-scroller-left,\n.tabs-header-narrow .tabs-scroller-right,\n.tabs-header-plain .tabs-tool,\n.tabs-header-narrow .tabs-tool{\n\ttop: 0;\n\theight: 100%;\n}\n.tabs-header-plain .tabs-tool{\n\tborder-left-width: 0;\n\tborder-right-width: 1px;\n}\n\n.combo-panel{\n\tposition: absolute;\n\theight: 200px;\n\tz-index: 9999;\n}\n.combo-panel .tree,\n.combo-panel eui-datagrid,\n.combo-panel eui-treegrid{\n\twidth: 100%;\n\theight: 100%;\n}\n.combobox-item{\n\tpadding: 6px 4px;\n\tline-height: 20px;\n}\n.tagbox-labels{\n\tpadding-bottom: 4px;\n}\n.tagbox-label{\n\theight: 20px;\n\tline-height: 20px;\n}\n.tagbox .textbox-text{\n\twidth: 50px;\n\tmax-width: 100%;\n\tmargin-top: 4px;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n\theight: 20px;\n\tline-height: 20px;\n}\n.tree-editing.tree-title{\n\tposition: relative;\n\tmargin: 0;\n\tpadding: 0;\n\theight: 26px;\n\tline-height: 26px;\n\toverflow: hidden;\n}\n.tree-editing .f-field{\n\twidth: 100%;\n\tborder-radius: 0;\n\theight: auto;\n\tvertical-align: top;\n}\n.tree-editing .textbox-text{\n\tline-height: 24px;\n}\n.datagrid,\n.datagrid-view,.datagrid-view1,.datagrid-view2{\n\tposition: relative;\n}\n.datagrid-vbody{\n\toverflow: hidden;\n}\n.datagrid-view3{\n\tmargin-left: -1px;\n}\n.datagrid-view3 .datagrid-body{\n\toverflow: hidden;\n}\n.datagrid-view3 .datagrid-body-inner{\n\tpadding-bottom: 20px;\n}\n.datagrid-view3 .datagrid-header td,\n.datagrid-view3 .datagrid-body td,\n.datagrid-view3 .datagrid-footer td {\n\tborder-width: 0 0 1px 1px;\n}\n.datagrid-htable,.datagrid-btable,.datagrid-ftable{\n\ttable-layout: fixed;\n\twidth: 100%;\n}\n.datagrid-htable{\n\theight: 100%;\n}\n.datagrid-header .datagrid-header,\n.datagrid-footer .datagrid-header{\n\tborder-width: 0 0 0 1px;\n}\n.datagrid-header-inner,.datagrid-footer-inner{\n\toverflow: hidden;\n}\n.datagrid-header-row, .datagrid-row{\n\theight: 32px;\n}\n.datagrid-header td.datagrid-field-td{\n\tborder-bottom: 0;\n}\n.datagrid-cell{\n\ttext-align: left;\n\theight: auto;\n\tfont-size: inherit;\n}\n.datagrid-cell-group{\n\ttext-align: center;\n}\n.datagrid .datagrid-pager{\n\tpadding: 2px 4px;\n\tdisplay: inherit;\n}\n.datagrid-loading{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\tjustify-content: center;\n\talign-items: center;\n}\n.datagrid-mask{\n\tdisplay: block;\n}\n.datagrid-mask-msg{\n\tdisplay: block;\n\tposition: static;\n\tline-height: 36px;\n\theight: 40px;\n\tmargin: 0;\n\tpadding: 0 5px 0 30px;\n\tz-index: 9;\n}\n.datagrid-empty{\n\ttop: 50%;\n\tmargin-top: -20px;\n}\n.datagrid-body .datagrid-td-group{\n\tborder-left-color: transparent;\n\tborder-right-color: transparent;\n}\n.datagrid-group-expander{\n\tcursor: pointer;\n}\n.datagrid-row-expander{\n\tdisplay: inline-block;\n\twidth: 16px;\n\theight: 18px;\n\tcursor: pointer;\n}\n.datagrid-group-title{\n\talign-self: center;\n\tpadding: 0 4px;\n\twhite-space: nowrap;\n\tword-break: normal;\n\tposition: relative;\n}\n.datagrid-editable> .f-field,\n.datagrid-editable>form> .f-field,\n.datagrid-editable> *{\n\twidth: 100%;\n\theight: 31px;\n}\n.datagrid-editable .textbox, .datagrid-editable .textbox-text{\n\tborder-radius: 0;\n}\n.datagrid-filter-row .textbox{\n\tborder-radius: 0;\n}\n.datagrid-filter-c{\n\tpadding: 4px;\n\theight: 38px;\n}\n.datagrid-filter-c> .f-field,\n.datagrid-filter-c> *{\n\theight: 30px;\n}\n.datagrid-filter-c .datagrid-editable-input{\n\twidth: 100%;\n}\n.datagrid-filter-btn{\n\twidth: 30px;\n}\n.datagrid-filter-btn .textbox-icon{\n\twidth: 28px;\n}\n.datagrid-filter-btn .textbox{\n\tbackground-color: transparent;\n}\n.datagrid-filter-btn-left{\n\tmargin-right: 4px;\n}\n.datagrid-filter-btn-right{\n\tmargin-left: 4px;\n}\n\n.menu-inline{\n\tposition: relative;\n\tdisplay: inline;\n\tmargin: 0;\n\tpadding: 0;\n}\n.menu-inline> .menu-container{\n\tposition: relative;\n}\n.menu-container{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tmin-width: 200px;\n}\n.menu{\n\toverflow: visible;\n}\n.menu-shadow{\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.menu-item{\n\toverflow: visible;\n}\n.menu-text{\n\theight: 32px;\n\tline-height: 32px;\n\tfloat: none;\n}\n.menu-line{\n\tz-index: 9999999;\n\theight: 100%;\n}\n.menu-active{\n\tz-index: 99999999;\n}\n\n.progressbar-value{\n\toverflow: visible;\n}\n\n.searchbox .textbox-button,\n.searchbox .textbox-button:hover{\n\tposition: inherit;\n}\n\n.calendar-content{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.calendar-menu{\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n}\n.calendar-menu-month-inner{\n\tposition: relative;\n}\n\n.radiobutton{\n\twidth: 20px;\n\theight: 20px;\n}\n.checkbox{\n\twidth: 20px;\n\theight: 20px;\n}\n.progressbar{\n\theight: 24px;\n}\n.pagination1{\n\theight: 34px;\n\tpadding: 2px;\n}\n.layout{\n\theight: 100%;\n}\n.layout-animate{\n\ttransition: transform 400ms;\n}\n.layout-panel-north,.layout-panel-south{\n\tposition: absolute;\n\twidth: 100%;\n\tleft: 0;\n\ttop: 0;\n}\n.layout-panel-south{\n\ttop: auto;\n\tbottom: 0;\n}\n.layout-panel-west,.layout-panel-east{\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tbottom: 0;\n}\n.layout-panel-east{\n\tleft: auto;\n\tright: 0;\n}\n.layout-panel-west.layout-collapsed{\n\ttransform: translate3d(-100%, 0, 0);\n}\n.layout-panel-east.layout-collapsed{\n\ttransform: translate3d(100%, 0, 0)\n}\n.layout-panel-north.layout-collapsed{\n\ttransform: translate3d(0, -100%, 0)\n}\n.layout-panel-south.layout-collapsed{\n\ttransform: translate3d(0, 100%, 0)\n}\n\n.form-field{\n\tmargin-bottom: 28px;\n}\n.form-field-haserror{\n\tmargin-bottom: 4px;\n}\n.form-field-error{\n\tfont-size: 14px;\n\tcolor: #ed4014;\n\theight: 24px;\n\tline-height: 24px;\n}\n.form-field .f-field{\n\twidth: auto;\n\t-webkit-box-flex: 1 1 auto;\n\t-ms-flex: 1 1 auto;\n\tflex: 1 1 auto;\n}\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery.form.min.js",
    "content": "/*!\n * jQuery Form Plugin\n * version: 4.2.2\n * Requires jQuery v1.7.2 or later\n * Project repository: https://github.com/jquery-form/form\n\n * Copyright 2017 Kevin Morris\n * Copyright 2006 M. Alsup\n\n * Dual licensed under the LGPL-2.1+ or MIT licenses\n * https://github.com/jquery-form/form#license\n\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n */\n!function(e){\"function\"==typeof define&&define.amd?define([\"jquery\"],e):\"object\"==typeof module&&module.exports?module.exports=function(t,r){return void 0===r&&(r=\"undefined\"!=typeof window?require(\"jquery\"):require(\"jquery\")(t)),e(r),r}:e(jQuery)}(function(e){\"use strict\";function t(t){var r=t.data;t.isDefaultPrevented()||(t.preventDefault(),e(t.target).closest(\"form\").ajaxSubmit(r))}function r(t){var r=t.target,a=e(r);if(!a.is(\"[type=submit],[type=image]\")){var n=a.closest(\"[type=submit]\");if(0===n.length)return;r=n[0]}var i=r.form;if(i.clk=r,\"image\"===r.type)if(void 0!==t.offsetX)i.clk_x=t.offsetX,i.clk_y=t.offsetY;else if(\"function\"==typeof e.fn.offset){var o=a.offset();i.clk_x=t.pageX-o.left,i.clk_y=t.pageY-o.top}else i.clk_x=t.pageX-r.offsetLeft,i.clk_y=t.pageY-r.offsetTop;setTimeout(function(){i.clk=i.clk_x=i.clk_y=null},100)}function a(){if(e.fn.ajaxSubmit.debug){var t=\"[jquery.form] \"+Array.prototype.join.call(arguments,\"\");window.console&&window.console.log?window.console.log(t):window.opera&&window.opera.postError&&window.opera.postError(t)}}var n=/\\r?\\n/g,i={};i.fileapi=void 0!==e('<input type=\"file\">').get(0).files,i.formdata=void 0!==window.FormData;var o=!!e.fn.prop;e.fn.attr2=function(){if(!o)return this.attr.apply(this,arguments);var e=this.prop.apply(this,arguments);return e&&e.jquery||\"string\"==typeof e?e:this.attr.apply(this,arguments)},e.fn.ajaxSubmit=function(t,r,n,s){function u(r){var a,n,i=e.param(r,t.traditional).split(\"&\"),o=i.length,s=[];for(a=0;a<o;a++)i[a]=i[a].replace(/\\+/g,\" \"),n=i[a].split(\"=\"),s.push([decodeURIComponent(n[0]),decodeURIComponent(n[1])]);return s}function c(r){function n(e){var t=null;try{e.contentWindow&&(t=e.contentWindow.document)}catch(e){a(\"cannot get iframe.contentWindow document: \"+e)}if(t)return t;try{t=e.contentDocument?e.contentDocument:e.document}catch(r){a(\"cannot get iframe.contentDocument: \"+r),t=e.document}return t}function i(){function t(){try{var e=n(v).readyState;a(\"state = \"+e),e&&\"uninitialized\"===e.toLowerCase()&&setTimeout(t,50)}catch(e){a(\"Server abort: \",e,\" (\",e.name,\")\"),s(L),j&&clearTimeout(j),j=void 0}}var r=p.attr2(\"target\"),i=p.attr2(\"action\"),o=p.attr(\"enctype\")||p.attr(\"encoding\")||\"multipart/form-data\";w.setAttribute(\"target\",m),l&&!/post/i.test(l)||w.setAttribute(\"method\",\"POST\"),i!==f.url&&w.setAttribute(\"action\",f.url),f.skipEncodingOverride||l&&!/post/i.test(l)||p.attr({encoding:\"multipart/form-data\",enctype:\"multipart/form-data\"}),f.timeout&&(j=setTimeout(function(){T=!0,s(A)},f.timeout));var u=[];try{if(f.extraData)for(var c in f.extraData)f.extraData.hasOwnProperty(c)&&(e.isPlainObject(f.extraData[c])&&f.extraData[c].hasOwnProperty(\"name\")&&f.extraData[c].hasOwnProperty(\"value\")?u.push(e('<input type=\"hidden\" name=\"'+f.extraData[c].name+'\">',k).val(f.extraData[c].value).appendTo(w)[0]):u.push(e('<input type=\"hidden\" name=\"'+c+'\">',k).val(f.extraData[c]).appendTo(w)[0]));f.iframeTarget||h.appendTo(D),v.attachEvent?v.attachEvent(\"onload\",s):v.addEventListener(\"load\",s,!1),setTimeout(t,15);try{w.submit()}catch(e){document.createElement(\"form\").submit.apply(w)}}finally{w.setAttribute(\"action\",i),w.setAttribute(\"enctype\",o),r?w.setAttribute(\"target\",r):p.removeAttr(\"target\"),e(u).remove()}}function s(t){if(!x.aborted&&!X){if((O=n(v))||(a(\"cannot access response document\"),t=L),t===A&&x)return x.abort(\"timeout\"),void S.reject(x,\"timeout\");if(t===L&&x)return x.abort(\"server abort\"),void S.reject(x,\"error\",\"server abort\");if(O&&O.location.href!==f.iframeSrc||T){v.detachEvent?v.detachEvent(\"onload\",s):v.removeEventListener(\"load\",s,!1);var r,i=\"success\";try{if(T)throw\"timeout\";var o=\"xml\"===f.dataType||O.XMLDocument||e.isXMLDoc(O);if(a(\"isXml=\"+o),!o&&window.opera&&(null===O.body||!O.body.innerHTML)&&--C)return a(\"requeing onLoad callback, DOM not available\"),void setTimeout(s,250);var u=O.body?O.body:O.documentElement;x.responseText=u?u.innerHTML:null,x.responseXML=O.XMLDocument?O.XMLDocument:O,o&&(f.dataType=\"xml\"),x.getResponseHeader=function(e){return{\"content-type\":f.dataType}[e.toLowerCase()]},u&&(x.status=Number(u.getAttribute(\"status\"))||x.status,x.statusText=u.getAttribute(\"statusText\")||x.statusText);var c=(f.dataType||\"\").toLowerCase(),l=/(json|script|text)/.test(c);if(l||f.textarea){var p=O.getElementsByTagName(\"textarea\")[0];if(p)x.responseText=p.value,x.status=Number(p.getAttribute(\"status\"))||x.status,x.statusText=p.getAttribute(\"statusText\")||x.statusText;else if(l){var m=O.getElementsByTagName(\"pre\")[0],g=O.getElementsByTagName(\"body\")[0];m?x.responseText=m.textContent?m.textContent:m.innerText:g&&(x.responseText=g.textContent?g.textContent:g.innerText)}}else\"xml\"===c&&!x.responseXML&&x.responseText&&(x.responseXML=q(x.responseText));try{M=N(x,c,f)}catch(e){i=\"parsererror\",x.error=r=e||i}}catch(e){a(\"error caught: \",e),i=\"error\",x.error=r=e||i}x.aborted&&(a(\"upload aborted\"),i=null),x.status&&(i=x.status>=200&&x.status<300||304===x.status?\"success\":\"error\"),\"success\"===i?(f.success&&f.success.call(f.context,M,\"success\",x),S.resolve(x.responseText,\"success\",x),d&&e.event.trigger(\"ajaxSuccess\",[x,f])):i&&(void 0===r&&(r=x.statusText),f.error&&f.error.call(f.context,x,i,r),S.reject(x,\"error\",r),d&&e.event.trigger(\"ajaxError\",[x,f,r])),d&&e.event.trigger(\"ajaxComplete\",[x,f]),d&&!--e.active&&e.event.trigger(\"ajaxStop\"),f.complete&&f.complete.call(f.context,x,i),X=!0,f.timeout&&clearTimeout(j),setTimeout(function(){f.iframeTarget?h.attr(\"src\",f.iframeSrc):h.remove(),x.responseXML=null},100)}}}var u,c,f,d,m,h,v,x,y,b,T,j,w=p[0],S=e.Deferred();if(S.abort=function(e){x.abort(e)},r)for(c=0;c<g.length;c++)u=e(g[c]),o?u.prop(\"disabled\",!1):u.removeAttr(\"disabled\");(f=e.extend(!0,{},e.ajaxSettings,t)).context=f.context||f,m=\"jqFormIO\"+(new Date).getTime();var k=w.ownerDocument,D=p.closest(\"body\");if(f.iframeTarget?(b=(h=e(f.iframeTarget,k)).attr2(\"name\"))?m=b:h.attr2(\"name\",m):(h=e('<iframe name=\"'+m+'\" src=\"'+f.iframeSrc+'\" />',k)).css({position:\"absolute\",top:\"-1000px\",left:\"-1000px\"}),v=h[0],x={aborted:0,responseText:null,responseXML:null,status:0,statusText:\"n/a\",getAllResponseHeaders:function(){},getResponseHeader:function(){},setRequestHeader:function(){},abort:function(t){var r=\"timeout\"===t?\"timeout\":\"aborted\";a(\"aborting upload... \"+r),this.aborted=1;try{v.contentWindow.document.execCommand&&v.contentWindow.document.execCommand(\"Stop\")}catch(e){}h.attr(\"src\",f.iframeSrc),x.error=r,f.error&&f.error.call(f.context,x,r,t),d&&e.event.trigger(\"ajaxError\",[x,f,r]),f.complete&&f.complete.call(f.context,x,r)}},(d=f.global)&&0==e.active++&&e.event.trigger(\"ajaxStart\"),d&&e.event.trigger(\"ajaxSend\",[x,f]),f.beforeSend&&!1===f.beforeSend.call(f.context,x,f))return f.global&&e.active--,S.reject(),S;if(x.aborted)return S.reject(),S;(y=w.clk)&&(b=y.name)&&!y.disabled&&(f.extraData=f.extraData||{},f.extraData[b]=y.value,\"image\"===y.type&&(f.extraData[b+\".x\"]=w.clk_x,f.extraData[b+\".y\"]=w.clk_y));var A=1,L=2,F=e(\"meta[name=csrf-token]\").attr(\"content\"),E=e(\"meta[name=csrf-param]\").attr(\"content\");E&&F&&(f.extraData=f.extraData||{},f.extraData[E]=F),f.forceSync?i():setTimeout(i,10);var M,O,X,C=50,q=e.parseXML||function(e,t){return window.ActiveXObject?((t=new ActiveXObject(\"Microsoft.XMLDOM\")).async=\"false\",t.loadXML(e)):t=(new DOMParser).parseFromString(e,\"text/xml\"),t&&t.documentElement&&\"parsererror\"!==t.documentElement.nodeName?t:null},_=e.parseJSON||function(e){return window.eval(\"(\"+e+\")\")},N=function(t,r,a){var n=t.getResponseHeader(\"content-type\")||\"\",i=(\"xml\"===r||!r)&&n.indexOf(\"xml\")>=0,o=i?t.responseXML:t.responseText;return i&&\"parsererror\"===o.documentElement.nodeName&&e.error&&e.error(\"parsererror\"),a&&a.dataFilter&&(o=a.dataFilter(o,r)),\"string\"==typeof o&&((\"json\"===r||!r)&&n.indexOf(\"json\")>=0?o=_(o):(\"script\"===r||!r)&&n.indexOf(\"javascript\")>=0&&e.globalEval(o)),o};return S}if(!this.length)return a(\"ajaxSubmit: skipping submit process - no element selected\"),this;var l,f,d,p=this;\"function\"==typeof t?t={success:t}:\"string\"==typeof t||!1===t&&arguments.length>0?(t={url:t,data:r,dataType:n},\"function\"==typeof s&&(t.success=s)):void 0===t&&(t={}),l=t.method||t.type||this.attr2(\"method\"),(d=(d=\"string\"==typeof(f=t.url||this.attr2(\"action\"))?e.trim(f):\"\")||window.location.href||\"\")&&(d=(d.match(/^([^#]+)/)||[])[1]),t=e.extend(!0,{url:d,success:e.ajaxSettings.success,type:l||e.ajaxSettings.type,iframeSrc:/^https/i.test(window.location.href||\"\")?\"javascript:false\":\"about:blank\"},t);var m={};if(this.trigger(\"form-pre-serialize\",[this,t,m]),m.veto)return a(\"ajaxSubmit: submit vetoed via form-pre-serialize trigger\"),this;if(t.beforeSerialize&&!1===t.beforeSerialize(this,t))return a(\"ajaxSubmit: submit aborted via beforeSerialize callback\"),this;var h=t.traditional;void 0===h&&(h=e.ajaxSettings.traditional);var v,g=[],x=this.formToArray(t.semantic,g,t.filtering);if(t.data){var y=e.isFunction(t.data)?t.data(x):t.data;t.extraData=y,v=e.param(y,h)}if(t.beforeSubmit&&!1===t.beforeSubmit(x,this,t))return a(\"ajaxSubmit: submit aborted via beforeSubmit callback\"),this;if(this.trigger(\"form-submit-validate\",[x,this,t,m]),m.veto)return a(\"ajaxSubmit: submit vetoed via form-submit-validate trigger\"),this;var b=e.param(x,h);v&&(b=b?b+\"&\"+v:v),\"GET\"===t.type.toUpperCase()?(t.url+=(t.url.indexOf(\"?\")>=0?\"&\":\"?\")+b,t.data=null):t.data=b;var T=[];if(t.resetForm&&T.push(function(){p.resetForm()}),t.clearForm&&T.push(function(){p.clearForm(t.includeHidden)}),!t.dataType&&t.target){var j=t.success||function(){};T.push(function(r,a,n){var i=arguments,o=t.replaceTarget?\"replaceWith\":\"html\";e(t.target)[o](r).each(function(){j.apply(this,i)})})}else t.success&&(e.isArray(t.success)?e.merge(T,t.success):T.push(t.success));if(t.success=function(e,r,a){for(var n=t.context||this,i=0,o=T.length;i<o;i++)T[i].apply(n,[e,r,a||p,p])},t.error){var w=t.error;t.error=function(e,r,a){var n=t.context||this;w.apply(n,[e,r,a,p])}}if(t.complete){var S=t.complete;t.complete=function(e,r){var a=t.context||this;S.apply(a,[e,r,p])}}var k=e(\"input[type=file]:enabled\",this).filter(function(){return\"\"!==e(this).val()}).length>0,D=\"multipart/form-data\",A=p.attr(\"enctype\")===D||p.attr(\"encoding\")===D,L=i.fileapi&&i.formdata;a(\"fileAPI :\"+L);var F,E=(k||A)&&!L;!1!==t.iframe&&(t.iframe||E)?t.closeKeepAlive?e.get(t.closeKeepAlive,function(){F=c(x)}):F=c(x):F=(k||A)&&L?function(r){for(var a=new FormData,n=0;n<r.length;n++)a.append(r[n].name,r[n].value);if(t.extraData){var i=u(t.extraData);for(n=0;n<i.length;n++)i[n]&&a.append(i[n][0],i[n][1])}t.data=null;var o=e.extend(!0,{},e.ajaxSettings,t,{contentType:!1,processData:!1,cache:!1,type:l||\"POST\"});t.uploadProgress&&(o.xhr=function(){var r=e.ajaxSettings.xhr();return r.upload&&r.upload.addEventListener(\"progress\",function(e){var r=0,a=e.loaded||e.position,n=e.total;e.lengthComputable&&(r=Math.ceil(a/n*100)),t.uploadProgress(e,a,n,r)},!1),r}),o.data=null;var s=o.beforeSend;return o.beforeSend=function(e,r){t.formData?r.data=t.formData:r.data=a,s&&s.call(this,e,r)},e.ajax(o)}(x):e.ajax(t),p.removeData(\"jqxhr\").data(\"jqxhr\",F);for(var M=0;M<g.length;M++)g[M]=null;return this.trigger(\"form-submit-notify\",[this,t]),this},e.fn.ajaxForm=function(n,i,o,s){if((\"string\"==typeof n||!1===n&&arguments.length>0)&&(n={url:n,data:i,dataType:o},\"function\"==typeof s&&(n.success=s)),n=n||{},n.delegation=n.delegation&&e.isFunction(e.fn.on),!n.delegation&&0===this.length){var u={s:this.selector,c:this.context};return!e.isReady&&u.s?(a(\"DOM not ready, queuing ajaxForm\"),e(function(){e(u.s,u.c).ajaxForm(n)}),this):(a(\"terminating; zero elements found by selector\"+(e.isReady?\"\":\" (DOM not ready)\")),this)}return n.delegation?(e(document).off(\"submit.form-plugin\",this.selector,t).off(\"click.form-plugin\",this.selector,r).on(\"submit.form-plugin\",this.selector,n,t).on(\"click.form-plugin\",this.selector,n,r),this):this.ajaxFormUnbind().on(\"submit.form-plugin\",n,t).on(\"click.form-plugin\",n,r)},e.fn.ajaxFormUnbind=function(){return this.off(\"submit.form-plugin click.form-plugin\")},e.fn.formToArray=function(t,r,a){var n=[];if(0===this.length)return n;var o,s=this[0],u=this.attr(\"id\"),c=t||void 0===s.elements?s.getElementsByTagName(\"*\"):s.elements;if(c&&(c=e.makeArray(c)),u&&(t||/(Edge|Trident)\\//.test(navigator.userAgent))&&(o=e(':input[form=\"'+u+'\"]').get()).length&&(c=(c||[]).concat(o)),!c||!c.length)return n;e.isFunction(a)&&(c=e.map(c,a));var l,f,d,p,m,h,v;for(l=0,h=c.length;l<h;l++)if(m=c[l],(d=m.name)&&!m.disabled)if(t&&s.clk&&\"image\"===m.type)s.clk===m&&(n.push({name:d,value:e(m).val(),type:m.type}),n.push({name:d+\".x\",value:s.clk_x},{name:d+\".y\",value:s.clk_y}));else if((p=e.fieldValue(m,!0))&&p.constructor===Array)for(r&&r.push(m),f=0,v=p.length;f<v;f++)n.push({name:d,value:p[f]});else if(i.fileapi&&\"file\"===m.type){r&&r.push(m);var g=m.files;if(g.length)for(f=0;f<g.length;f++)n.push({name:d,value:g[f],type:m.type});else n.push({name:d,value:\"\",type:m.type})}else null!==p&&void 0!==p&&(r&&r.push(m),n.push({name:d,value:p,type:m.type,required:m.required}));if(!t&&s.clk){var x=e(s.clk),y=x[0];(d=y.name)&&!y.disabled&&\"image\"===y.type&&(n.push({name:d,value:x.val()}),n.push({name:d+\".x\",value:s.clk_x},{name:d+\".y\",value:s.clk_y}))}return n},e.fn.formSerialize=function(t){return e.param(this.formToArray(t))},e.fn.fieldSerialize=function(t){var r=[];return this.each(function(){var a=this.name;if(a){var n=e.fieldValue(this,t);if(n&&n.constructor===Array)for(var i=0,o=n.length;i<o;i++)r.push({name:a,value:n[i]});else null!==n&&void 0!==n&&r.push({name:this.name,value:n})}}),e.param(r)},e.fn.fieldValue=function(t){for(var r=[],a=0,n=this.length;a<n;a++){var i=this[a],o=e.fieldValue(i,t);null===o||void 0===o||o.constructor===Array&&!o.length||(o.constructor===Array?e.merge(r,o):r.push(o))}return r},e.fieldValue=function(t,r){var a=t.name,i=t.type,o=t.tagName.toLowerCase();if(void 0===r&&(r=!0),r&&(!a||t.disabled||\"reset\"===i||\"button\"===i||(\"checkbox\"===i||\"radio\"===i)&&!t.checked||(\"submit\"===i||\"image\"===i)&&t.form&&t.form.clk!==t||\"select\"===o&&-1===t.selectedIndex))return null;if(\"select\"===o){var s=t.selectedIndex;if(s<0)return null;for(var u=[],c=t.options,l=\"select-one\"===i,f=l?s+1:c.length,d=l?s:0;d<f;d++){var p=c[d];if(p.selected&&!p.disabled){var m=p.value;if(m||(m=p.attributes&&p.attributes.value&&!p.attributes.value.specified?p.text:p.value),l)return m;u.push(m)}}return u}return e(t).val().replace(n,\"\\r\\n\")},e.fn.clearForm=function(t){return this.each(function(){e(\"input,select,textarea\",this).clearFields(t)})},e.fn.clearFields=e.fn.clearInputs=function(t){var r=/^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;return this.each(function(){var a=this.type,n=this.tagName.toLowerCase();r.test(a)||\"textarea\"===n?this.value=\"\":\"checkbox\"===a||\"radio\"===a?this.checked=!1:\"select\"===n?this.selectedIndex=-1:\"file\"===a?/MSIE/.test(navigator.userAgent)?e(this).replaceWith(e(this).clone(!0)):e(this).val(\"\"):t&&(!0===t&&/hidden/.test(a)||\"string\"==typeof t&&e(this).is(t))&&(this.value=\"\")})},e.fn.resetForm=function(){return this.each(function(){var t=e(this),r=this.tagName.toLowerCase();switch(r){case\"input\":this.checked=this.defaultChecked;case\"textarea\":return this.value=this.defaultValue,!0;case\"option\":case\"optgroup\":var a=t.parents(\"select\");return a.length&&a[0].multiple?\"option\"===r?this.selected=this.defaultSelected:t.find(\"option\").resetForm():a.resetForm(),!0;case\"select\":return t.find(\"option\").each(function(e){if(this.selected=this.defaultSelected,this.defaultSelected&&!t[0].multiple)return t[0].selectedIndex=e,!1}),!0;case\"label\":var n=e(t.attr(\"for\")),i=t.find(\"input,select,textarea\");return n[0]&&i.unshift(n[0]),i.resetForm(),!0;case\"form\":return(\"function\"==typeof this.reset||\"object\"==typeof this.reset&&!this.reset.nodeType)&&this.reset(),!0;default:return t.find(\"form,input,label,select,textarea\").resetForm(),!0}})},e.fn.enable=function(e){return void 0===e&&(e=!0),this.each(function(){this.disabled=!e})},e.fn.selected=function(t){return void 0===t&&(t=!0),this.each(function(){var r=this.type;if(\"checkbox\"===r||\"radio\"===r)this.checked=t;else if(\"option\"===this.tagName.toLowerCase()){var a=e(this).parent(\"select\");t&&a[0]&&\"select-one\"===a[0].type&&a.find(\"option\").selected(!1),this.selected=t}})},e.fn.ajaxSubmit.debug=!1});\n//# sourceMappingURL=jquery.form.min.js.map\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/jquery.placeholder-2.3.1.js",
    "content": "/*!\n * jQuery Placeholder Plugin v2.3.1\n * https://github.com/mathiasbynens/jquery-placeholder\n *\n * Copyright 2011, 2015 Mathias Bynens\n * Released under the MIT license\n */\n(function(factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        factory(require('jquery'));\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function($) {\n\n    /****\n     * Allows plugin behavior simulation in modern browsers for easier debugging. \n     * When setting to true, use attribute \"placeholder-x\" rather than the usual \"placeholder\" in your inputs/textareas \n     * i.e. <input type=\"text\" placeholder-x=\"my placeholder text\" />\n     */\n    var debugMode = false; \n\n    // Opera Mini v7 doesn't support placeholder although its DOM seems to indicate so\n    var isOperaMini = Object.prototype.toString.call(window.operamini) === '[object OperaMini]';\n    var isInputSupported = 'placeholder' in document.createElement('input') && !isOperaMini && !debugMode;\n    var isTextareaSupported = 'placeholder' in document.createElement('textarea') && !isOperaMini && !debugMode;\n    var valHooks = $.valHooks;\n    var propHooks = $.propHooks;\n    var hooks;\n    var placeholder;\n    var settings = {};\n\n    if (isInputSupported && isTextareaSupported) {\n\n        placeholder = $.fn.placeholder = function() {\n            return this;\n        };\n\n        placeholder.input = true;\n        placeholder.textarea = true;\n\n    } else {\n\n        placeholder = $.fn.placeholder = function(options) {\n\n            var defaults = {customClass: 'placeholder'};\n            settings = $.extend({}, defaults, options);\n\n            return this.filter((isInputSupported ? 'textarea' : ':input') + '[' + (debugMode ? 'placeholder-x' : 'placeholder') + ']')\n                .not('.'+settings.customClass)\n                .not(':radio, :checkbox, [type=hidden]')\n                .bind({\n                    'focus.placeholder': clearPlaceholder,\n                    'blur.placeholder': setPlaceholder\n                })\n                .data('placeholder-enabled', true)\n                .trigger('blur.placeholder');\n        };\n\n        placeholder.input = isInputSupported;\n        placeholder.textarea = isTextareaSupported;\n\n        hooks = {\n            'get': function(element) {\n\n                var $element = $(element);\n                var $passwordInput = $element.data('placeholder-password');\n\n                if ($passwordInput) {\n                    return $passwordInput[0].value;\n                }\n\n                return $element.data('placeholder-enabled') && $element.hasClass(settings.customClass) ? '' : element.value;\n            },\n            'set': function(element, value) {\n\n                var $element = $(element);\n                var $replacement;\n                var $passwordInput;\n\n                if (value !== '') {\n\n                    $replacement = $element.data('placeholder-textinput');\n                    $passwordInput = $element.data('placeholder-password');\n\n                    if ($replacement) {\n                        clearPlaceholder.call($replacement[0], true, value) || (element.value = value);\n                        $replacement[0].value = value;\n\n                    } else if ($passwordInput) {\n                        clearPlaceholder.call(element, true, value) || ($passwordInput[0].value = value);\n                        element.value = value;\n                    }\n                }\n\n                if (!$element.data('placeholder-enabled')) {\n                    element.value = value;\n                    return $element;\n                }\n\n                if (value === '') {\n                    \n                    element.value = value;\n                    \n                    // Setting the placeholder causes problems if the element continues to have focus.\n                    if (element != safeActiveElement()) {\n                        // We can't use `triggerHandler` here because of dummy text/password inputs :(\n                        setPlaceholder.call(element);\n                    }\n\n                } else {\n                    \n                    if ($element.hasClass(settings.customClass)) {\n                        clearPlaceholder.call(element);\n                    }\n\n                    element.value = value;\n                }\n                // `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363\n                return $element;\n            }\n        };\n\n        if (!isInputSupported) {\n            valHooks.input = hooks;\n            propHooks.value = hooks;\n        }\n\n        if (!isTextareaSupported) {\n            valHooks.textarea = hooks;\n            propHooks.value = hooks;\n        }\n\n        $(function() {\n            // Look for forms\n            $(document).delegate('form', 'submit.placeholder', function() {\n                \n                // Clear the placeholder values so they don't get submitted\n                var $inputs = $('.'+settings.customClass, this).each(function() {\n                    clearPlaceholder.call(this, true, '');\n                });\n\n                setTimeout(function() {\n                    $inputs.each(setPlaceholder);\n                }, 10);\n            });\n        });\n\n        // Clear placeholder values upon page reload\n        $(window).bind('beforeunload.placeholder', function() {\n\n            var clearPlaceholders = true;\n\n            try {\n                // Prevent IE javascript:void(0) anchors from causing cleared values\n                if (document.activeElement.toString() === 'javascript:void(0)') {\n                    clearPlaceholders = false;\n                }\n            } catch (exception) { }\n\n            if (clearPlaceholders) {\n                $('.'+settings.customClass).each(function() {\n                    this.value = '';\n                });\n            }\n        });\n    }\n\n    function args(elem) {\n        // Return an object of element attributes\n        var newAttrs = {};\n        var rinlinejQuery = /^jQuery\\d+$/;\n\n        $.each(elem.attributes, function(i, attr) {\n            if (attr.specified && !rinlinejQuery.test(attr.name)) {\n                newAttrs[attr.name] = attr.value;\n            }\n        });\n\n        return newAttrs;\n    }\n\n    function clearPlaceholder(event, value) {\n        \n        var input = this;\n        var $input = $(this);\n        \n        if (input.value === $input.attr((debugMode ? 'placeholder-x' : 'placeholder')) && $input.hasClass(settings.customClass)) {\n            \n            input.value = '';\n            $input.removeClass(settings.customClass);\n\n            if ($input.data('placeholder-password')) {\n\n                $input = $input.hide().nextAll('input[type=\"password\"]:first').show().attr('id', $input.removeAttr('id').data('placeholder-id'));\n                \n                // If `clearPlaceholder` was called from `$.valHooks.input.set`\n                if (event === true) {\n                    $input[0].value = value;\n\n                    return value;\n                }\n\n                $input.focus();\n\n            } else {\n                input == safeActiveElement() && input.select();\n            }\n        }\n    }\n\n    function setPlaceholder(event) {\n        var $replacement;\n        var input = this;\n        var $input = $(this);\n        var id = input.id;\n\n        // If the placeholder is activated, triggering blur event (`$input.trigger('blur')`) should do nothing.\n        if (event && event.type === 'blur' && $input.hasClass(settings.customClass)) {\n            return;\n        }\n\n        if (input.value === '') {\n            if (input.type === 'password') {\n                if (!$input.data('placeholder-textinput')) {\n                    \n                    try {\n                        $replacement = $input.clone().prop({ 'type': 'text' });\n                    } catch(e) {\n                        $replacement = $('<input>').attr($.extend(args(this), { 'type': 'text' }));\n                    }\n\n                    $replacement\n                        .removeAttr('name')\n                        .data({\n                            'placeholder-enabled': true,\n                            'placeholder-password': $input,\n                            'placeholder-id': id\n                        })\n                        .bind('focus.placeholder', clearPlaceholder);\n\n                    $input\n                        .data({\n                            'placeholder-textinput': $replacement,\n                            'placeholder-id': id\n                        })\n                        .before($replacement);\n                }\n\n                input.value = '';\n                $input = $input.removeAttr('id').hide().prevAll('input[type=\"text\"]:first').attr('id', $input.data('placeholder-id')).show();\n\n            } else {\n                \n                var $passwordInput = $input.data('placeholder-password');\n\n                if ($passwordInput) {\n                    $passwordInput[0].value = '';\n                    $input.attr('id', $input.data('placeholder-id')).show().nextAll('input[type=\"password\"]:last').hide().removeAttr('id');\n                }\n            }\n\n            $input.addClass(settings.customClass);\n            $input[0].value = $input.attr((debugMode ? 'placeholder-x' : 'placeholder'));\n\n        } else {\n            $input.removeClass(settings.customClass);\n        }\n    }\n\n    function safeActiveElement() {\n        // Avoid IE9 `document.activeElement` of death\n        try {\n            return document.activeElement;\n        } catch (exception) {}\n    }\n}));\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/README.md",
    "content": "目录说明\n========================\n\n```bash\n├── Uploader.swf                      # SWF文件，当使用Flash运行时需要引入。\n├\n├── webuploader.js                    # 完全版本。\n├── webuploader.min.js                # min版本\n├\n├── webuploader.flashonly.js          # 只有Flash实现的版本。\n├── webuploader.flashonly.min.js      # min版本\n├\n├── webuploader.html5only.js          # 只有Html5实现的版本。\n├── webuploader.html5only.min.js      # min版本\n├\n├── webuploader.noimage.js            # 去除图片处理的版本，包括HTML5和FLASH.\n├── webuploader.noimage.min.js        # min版本\n├\n├── webuploader.custom.js             # 自定义打包方案，请查看 Gruntfile.js，满足移动端使用。\n└── webuploader.custom.min.js         # min版本\n```\n\n## 示例\n\n请把整个 Git 包下载下来放在 php 服务器下，因为默认提供的文件接受是用 php 编写的，打开 examples 页面便能查看示例效果。"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.css",
    "content": ".webuploader-container {\n\tposition: relative;\n}\n.webuploader-element-invisible {\n\tposition: absolute !important;\n\tclip: rect(1px 1px 1px 1px); /* IE6, IE7 */\n    clip: rect(1px,1px,1px,1px);\n}\n.webuploader-pick {\n\tposition: relative;\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tbackground: #00b7ee;\n\tpadding: 10px 15px;\n\tcolor: #fff;\n\ttext-align: center;\n\tborder-radius: 3px;\n\toverflow: hidden;\n}\n.webuploader-pick-hover {\n\tbackground: #00a2d4;\n}\n\n.webuploader-pick-disable {\n\topacity: 0.6;\n\tpointer-events:none;\n}\n\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.custom.js",
    "content": "/*! WebUploader 0.1.5 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n\n            return obj;\n        },\n\n        makeExport = function( dollar ) {\n            root.__dollar = dollar;\n\n            // exports every module.\n            return exportsTo( factory( root, _define, _require ) );\n        },\n\n        origin;\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = makeExport();\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([ 'jquery' ], makeExport );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = makeExport();\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( window, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        var $ = window.__dollar || window.jQuery || window.Zepto;\n    \n        if ( !$ ) {\n            throw new Error('jQuery or Zepto not found!');\n        }\n    \n        return $;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * 直接来源于jquery的代码。\n     * @fileOverview Promise/A+\n     * @beta\n     */\n    define('promise-builtin',[\n        'dollar'\n    ], function( $ ) {\n    \n        var api;\n    \n        // 简单版Callbacks, 默认memory，可选once.\n        function Callbacks( once ) {\n            var list = [],\n                stack = !once && [],\n                fire = function( data ) {\n                    memory = data;\n                    fired = true;\n                    firingIndex = firingStart || 0;\n                    firingStart = 0;\n                    firingLength = list.length;\n                    firing = true;\n    \n                    for ( ; list && firingIndex < firingLength; firingIndex++ ) {\n                        list[ firingIndex ].apply( data[ 0 ], data[ 1 ] );\n                    }\n                    firing = false;\n    \n                    if ( list ) {\n                        if ( stack ) {\n                            stack.length && fire( stack.shift() );\n                        }  else {\n                            list = [];\n                        }\n                    }\n                },\n                self = {\n                    add: function() {\n                        if ( list ) {\n                            var start = list.length;\n                            (function add ( args ) {\n                                $.each( args, function( _, arg ) {\n                                    var type = $.type( arg );\n                                    if ( type === 'function' ) {\n                                        list.push( arg );\n                                    } else if ( arg && arg.length &&\n                                            type !== 'string' ) {\n    \n                                        add( arg );\n                                    }\n                                });\n                            })( arguments );\n    \n                            if ( firing ) {\n                                firingLength = list.length;\n                            } else if ( memory ) {\n                                firingStart = start;\n                                fire( memory );\n                            }\n                        }\n                        return this;\n                    },\n    \n                    disable: function() {\n                        list = stack = memory = undefined;\n                        return this;\n                    },\n    \n                    // Lock the list in its current state\n                    lock: function() {\n                        stack = undefined;\n                        if ( !memory ) {\n                            self.disable();\n                        }\n                        return this;\n                    },\n    \n                    fireWith: function( context, args ) {\n                        if ( list && (!fired || stack) ) {\n                            args = args || [];\n                            args = [ context, args.slice ? args.slice() : args ];\n                            if ( firing ) {\n                                stack.push( args );\n                            } else {\n                                fire( args );\n                            }\n                        }\n                        return this;\n                    },\n    \n                    fire: function() {\n                        self.fireWith( this, arguments );\n                        return this;\n                    }\n                },\n    \n                fired, firing, firingStart, firingLength, firingIndex, memory;\n    \n            return self;\n        }\n    \n        function Deferred( func ) {\n            var tuples = [\n                    // action, add listener, listener list, final state\n                    [ 'resolve', 'done', Callbacks( true ), 'resolved' ],\n                    [ 'reject', 'fail', Callbacks( true ), 'rejected' ],\n                    [ 'notify', 'progress', Callbacks() ]\n                ],\n                state = 'pending',\n                promise = {\n                    state: function() {\n                        return state;\n                    },\n                    always: function() {\n                        deferred.done( arguments ).fail( arguments );\n                        return this;\n                    },\n                    then: function( /* fnDone, fnFail, fnProgress */ ) {\n                        var fns = arguments;\n                        return Deferred(function( newDefer ) {\n                            $.each( tuples, function( i, tuple ) {\n                                var action = tuple[ 0 ],\n                                    fn = $.isFunction( fns[ i ] ) && fns[ i ];\n    \n                                // deferred[ done | fail | progress ] for\n                                // forwarding actions to newDefer\n                                deferred[ tuple[ 1 ] ](function() {\n                                    var returned;\n    \n                                    returned = fn && fn.apply( this, arguments );\n    \n                                    if ( returned &&\n                                            $.isFunction( returned.promise ) ) {\n    \n                                        returned.promise()\n                                                .done( newDefer.resolve )\n                                                .fail( newDefer.reject )\n                                                .progress( newDefer.notify );\n                                    } else {\n                                        newDefer[ action + 'With' ](\n                                                this === promise ?\n                                                newDefer.promise() :\n                                                this,\n                                                fn ? [ returned ] : arguments );\n                                    }\n                                });\n                            });\n                            fns = null;\n                        }).promise();\n                    },\n    \n                    // Get a promise for this deferred\n                    // If obj is provided, the promise aspect is added to the object\n                    promise: function( obj ) {\n    \n                        return obj != null ? $.extend( obj, promise ) : promise;\n                    }\n                },\n                deferred = {};\n    \n            // Keep pipe for back-compat\n            promise.pipe = promise.then;\n    \n            // Add list-specific methods\n            $.each( tuples, function( i, tuple ) {\n                var list = tuple[ 2 ],\n                    stateString = tuple[ 3 ];\n    \n                // promise[ done | fail | progress ] = list.add\n                promise[ tuple[ 1 ] ] = list.add;\n    \n                // Handle state\n                if ( stateString ) {\n                    list.add(function() {\n                        // state = [ resolved | rejected ]\n                        state = stateString;\n    \n                    // [ reject_list | resolve_list ].disable; progress_list.lock\n                    }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n                }\n    \n                // deferred[ resolve | reject | notify ]\n                deferred[ tuple[ 0 ] ] = function() {\n                    deferred[ tuple[ 0 ] + 'With' ]( this === deferred ? promise :\n                            this, arguments );\n                    return this;\n                };\n                deferred[ tuple[ 0 ] + 'With' ] = list.fireWith;\n            });\n    \n            // Make the deferred a promise\n            promise.promise( deferred );\n    \n            // Call given func if any\n            if ( func ) {\n                func.call( deferred, deferred );\n            }\n    \n            // All done!\n            return deferred;\n        }\n    \n        api = {\n            /**\n             * 创建一个[Deferred](http://api.jquery.com/category/deferred-object/)对象。\n             * 详细的Deferred用法说明，请参照jQuery的API文档。\n             *\n             * Deferred对象在钩子回掉函数中经常要用到，用来处理需要等待的异步操作。\n             *\n             * @for  Base\n             * @method Deferred\n             * @grammar Base.Deferred() => Deferred\n             * @example\n             * // 在文件开始发送前做些异步操作。\n             * // WebUploader会等待此异步操作完成后，开始发送文件。\n             * Uploader.register({\n             *     'before-send-file': 'doSomthingAsync'\n             * }, {\n             *\n             *     doSomthingAsync: function() {\n             *         var deferred = Base.Deferred();\n             *\n             *         // 模拟一次异步操作。\n             *         setTimeout(deferred.resolve, 2000);\n             *\n             *         return deferred.promise();\n             *     }\n             * });\n             */\n            Deferred: Deferred,\n    \n            /**\n             * 判断传入的参数是否为一个promise对象。\n             * @method isPromise\n             * @grammar Base.isPromise( anything ) => Boolean\n             * @param  {*}  anything 检测对象。\n             * @return {Boolean}\n             * @for  Base\n             * @example\n             * console.log( Base.isPromise() );    // => false\n             * console.log( Base.isPromise({ key: '123' }) );    // => false\n             * console.log( Base.isPromise( Base.Deferred().promise() ) );    // => true\n             *\n             * // Deferred也是一个Promise\n             * console.log( Base.isPromise( Base.Deferred() ) );    // => true\n             */\n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            },\n    \n            /**\n             * 返回一个promise，此promise在所有传入的promise都完成了后完成。\n             * 详细请查看[这里](http://api.jquery.com/jQuery.when/)。\n             *\n             * @method when\n             * @for  Base\n             * @grammar Base.when( promise1[, promise2[, promise3...]] ) => Promise\n             */\n            when: function( subordinate /* , ..., subordinateN */ ) {\n                var i = 0,\n                    slice = [].slice,\n                    resolveValues = slice.call( arguments ),\n                    length = resolveValues.length,\n    \n                    // the count of uncompleted subordinates\n                    remaining = length !== 1 || (subordinate &&\n                        $.isFunction( subordinate.promise )) ? length : 0,\n    \n                    // the master Deferred. If resolveValues consist of\n                    // only a single Deferred, just use that.\n                    deferred = remaining === 1 ? subordinate : Deferred(),\n    \n                    // Update function for both resolve and progress values\n                    updateFunc = function( i, contexts, values ) {\n                        return function( value ) {\n                            contexts[ i ] = this;\n                            values[ i ] = arguments.length > 1 ?\n                                    slice.call( arguments ) : value;\n    \n                            if ( values === progressValues ) {\n                                deferred.notifyWith( contexts, values );\n                            } else if ( !(--remaining) ) {\n                                deferred.resolveWith( contexts, values );\n                            }\n                        };\n                    },\n    \n                    progressValues, progressContexts, resolveContexts;\n    \n                // add listeners to Deferred subordinates; treat others as resolved\n                if ( length > 1 ) {\n                    progressValues = new Array( length );\n                    progressContexts = new Array( length );\n                    resolveContexts = new Array( length );\n                    for ( ; i < length; i++ ) {\n                        if ( resolveValues[ i ] &&\n                                $.isFunction( resolveValues[ i ].promise ) ) {\n    \n                            resolveValues[ i ].promise()\n                                    .done( updateFunc( i, resolveContexts,\n                                            resolveValues ) )\n                                    .fail( deferred.reject )\n                                    .progress( updateFunc( i, progressContexts,\n                                            progressValues ) );\n                        } else {\n                            --remaining;\n                        }\n                    }\n                }\n    \n                // if we're not waiting on anything, resolve the master\n                if ( !remaining ) {\n                    deferred.resolveWith( resolveContexts, resolveValues );\n                }\n    \n                return deferred.promise();\n            }\n        };\n    \n        return api;\n    });\n    define('promise',[\n        'promise-builtin'\n    ], function( $ ) {\n        return $;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id为该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.5',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match( /(?:trident)(?:.*rv:([\\w.]+))?/i ),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数noop](#WebUploader:Base.noop)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            cancelFile: 'cancel-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            md5File: 'md5-file',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            predictRuntimeType: 'predict-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     compress: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.option( 'compress', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `progressNum` 上传中的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `queueNum` 还在队列中的文件数\n             * * `interruptNum` 被暂停的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return stats ? {\n                    successNum: stats.numOfSuccess,\n                    progressNum: stats.numOfProgress,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue,\n                    interruptNum: stats.numofInterrupt\n                } : {};\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            /**\n             * 销毁 webuploader 实例\n             * @method destroy\n             * @grammar destroy() => undefined\n             */\n            destroy: function() {\n                this.request( 'destroy', arguments );\n                this.off();\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                this._parent = parent;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                this._container && this._container.remove();\n                this._parent && this._parent.removeClass('webuploader-container');\n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n            this.size = source.size || 0;\n    \n            // 如果没有指定 mimetype, 但是知道文件后缀。\n            if ( !source.type && this.ext &&\n                    ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) {\n                this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext);\n            } else {\n                this.type = source.type || 'application/octet-stream';\n            }\n    \n            RuntimeClient.call( me, 'Blob' );\n            this.uid = source.uid || this.uid;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n            // 如果有 mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && file.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n    \n            Blob.apply( this, arguments );\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                this._resizeHandler = Base.bindFn( this.refresh, this );\n                $( window ).on( 'resize', this._resizeHandler );\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                var btn = this.options.button;\n                $( window ).off( 'resize', this._resizeHandler );\n                btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' +\n                    'webuploader-pick');\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            _destroy = Uploader.prototype.destroy,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            /**\n             * @property {String | Array} [disableWidgets=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 默认所有 Uploader.register 了的 widget 都会被加载，如果禁用某一部分，请通过此 option 指定黑名单。\n             */\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [],\n                    deactives = me.options.disableWidgets || '';\n    \n                $.each( widgetClass, function( _, klass ) {\n                    (!deactives || !~deactives.indexOf( klass._name )) &&\n                        widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets && widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个 tick 中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                if ( args.length === 1 ) {\n                                    args = args[ 0 ];\n                                }\n    \n                                setTimeout(function() {\n                                    deferred.resolve( args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ callback ? key : 'done' ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            },\n    \n            destroy: function() {\n                _destroy.apply( this, arguments );\n                this._widgets = null;\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @grammar Uploader.register(proto);\n         * @grammar Uploader.register(map, proto);\n         * @param  {object} responseMap API 名称与函数实现的映射\n         * @param  {object} proto 组件原型，构造函数通过 constructor 属性定义\n         * @method Uploader.register\n         * @for Uploader\n         * @example\n         * Uploader.register({\n         *     'make-thumb': 'makeThumb'\n         * }, {\n         *     init: function( options ) {},\n         *     makeThumb: function() {}\n         * });\n         *\n         * Uploader.register({\n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init', destroy: 'destroy', name: 'anonymous' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n    \n                // 自动生成 map 表。\n                $.each(widgetProto, function(key) {\n                    if ( key[0] === '_' || key === 'name' ) {\n                        key === 'name' && (map.name = widgetProto.name);\n                        return;\n                    }\n    \n                    map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key;\n                });\n    \n            } else {\n                map = $.extend( map, responseMap );\n            }\n    \n            widgetProto.responseMap = map;\n            klass = Base.inherits( Widget, widgetProto );\n            klass._name = map.name;\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        /**\n         * 删除插件，只有在注册时指定了名字的才能被删除。\n         * @grammar Uploader.unRegister(name);\n         * @param  {string} name 组件名字\n         * @method Uploader.unRegister\n         * @for Uploader\n         * @example\n         *\n         * Uploader.register({\n         *     name: 'custom',\n         *     \n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         *\n         * Uploader.unRegister('custom');\n         */\n        Uploader.unRegister = Widget.unRegister = function( name ) {\n            if ( !name || name === 'anonymous' ) {\n                return;\n            }\n            \n            // 删除指定的插件。\n            for ( var i = widgetClass.length; i--; ) {\n                if ( widgetClass[i]._name === name ) {\n                    widgetClass.splice(i, 1)\n                }\n            }\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor|dom} 指定选择文件的按钮容器，不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            name: 'picker',\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addBtn( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addBtn: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    promises = [];\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                $( pick.id ).each(function() {\n                    var options, picker, deferred;\n    \n                    deferred = Base.Deferred();\n    \n                    options = $.extend({}, pick, {\n                        accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                        swf: opts.swf,\n                        runtimeOrder: opts.runtimeOrder,\n                        id: this\n                    });\n    \n                    picker = new FilePicker( options );\n    \n                    picker.once( 'ready', deferred.resolve );\n                    picker.on( 'select', function( files ) {\n                        me.owner.request( 'add-file', [ files ]);\n                    });\n                    picker.init();\n    \n                    me.pickers.push( picker );\n    \n                    promises.push( deferred.promise() );\n                });\n    \n                return Base.when.apply( Base, promises );\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            },\n    \n            destroy: function() {\n                $.each( this.pickers, function() {\n                    this.destroy();\n                });\n                this.pickers = null;\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: false,\n    \n            // 是否允许放大。\n            allowMagnify: false\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            crop: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'crop' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true,\n             *\n             *     // 如果发现压缩后文件大小比原来还大，则使用原来图片\n             *     // 此属性可能会影响图片自动纠正功能\n             *     noCompressIfLarger: false,\n             *\n             *     // 单位字节，如果图片大小小于此值，不会采用压缩。\n             *     compressSize: 0\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n    \n            name: 'image',\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * 当 width 或者 height 的值介于 0 - 1 时，被当成百分比使用。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             * 也可以借助服务端，将 base64 数据传给服务端，生成一个临时文件供预览。\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n    \n                    // 如果 width 的值介于 0 - 1\n                    // 说明设置的是百分比。\n                    if ( width <= 1 && width > 0 ) {\n                        width = file._info.width * width;\n                    }\n    \n                    // 同样的规则应用于 height\n                    if ( height <= 1 && height > 0 ) {\n                        height = file._info.height * height;\n                    }\n    \n                    image.resize( width, height );\n                });\n    \n                // 当 resize 完后\n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function( reason ) {\n                    cb( reason || true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            beforeSendFile: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 0,\n                    noCompressIfLarger = opts && opts.noCompressIfLarger || false,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只压缩 jpeg 图片格式。\n                // gif 可能会丢失针\n                // bmp png 基本上尺寸都不大，且压缩比比较小。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    var width = opts.width,\n                        height = opts.height;\n    \n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n    \n                    // 如果 width 的值介于 0 - 1\n                    // 说明设置的是百分比。\n                    if ( width <= 1 && width > 0 ) {\n                        width = file._info.width * width;\n                    }\n    \n                    // 同样的规则应用于 height\n                    if ( height <= 1 && height > 0 ) {\n                        height = file._info.height * height;\n                    }\n    \n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( !noCompressIfLarger || blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application/octet-stream'\n             */\n            this.type = source.type || 'application/octet-stream';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destroy: function() {\n                this.off();\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被取消的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * * `numofDeleted` 被移除的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0,\n                numofDeleted: 0,\n                numofInterrupt: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            /**\n             * 在队列中删除文件。\n             * @grammar removeFile( file ) => Array\n             * @method removeFile\n             * @param {File} 文件对象。\n             */\n            removeFile: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( existing ) {\n                    delete this._map[ file.id ];\n                    file.destroy();\n                    this.stats.numofDeleted++;\n                }\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            name: 'queue',\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                this.placeholder = runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || !file.size || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n            \n            /**\n             * @property {Boolean} [auto=false]\n             * @namespace options\n             * @for Uploader\n             * @description 设置为 true 后，不需要手动调用上传，有文件选择即开始上传。\n             * \n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFile: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    setTimeout(function() {\n                        me.request('start-upload');\n                    }, 20 );\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n             /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @grammar removeFile( file, true ) => undefined\n             * @grammar removeFile( id, true ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件, 默认只会标记文件状态为已取消，如果第二个参数为 `true` 则会从 queue 中移除。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file, remove ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                this.request( 'cancel-file', file );\n    \n                if ( remove ) {\n                    this.queue.removeFile( file );\n                }\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @event reset\n             * @description 当 uploader 被重置的时候触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.owner.trigger('reset');\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            },\n    \n            destroy: function() {\n                this.reset();\n                this.placeholder && this.placeholder.destroy();\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        /**\n         * @property {Object} [runtimeOrder=html5,flash]\n         * @namespace options\n         * @for Uploader\n         * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持，如果支持则使用 html5, 否则则使用 flash.\n         *\n         * 可以将此值设置成 `flash`，来强制使用 flash 运行时。\n         */\n    \n        return Uploader.register({\n            name: 'runtime',\n    \n            init: function() {\n                if ( !this.predictRuntimeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntimeType() => String\n             * @method predictRuntimeType\n             * @for  Uploader\n             */\n            predictRuntimeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData={}]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: {}\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len, api;\n    \n            api = {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                shift: function() {\n                    return pending.shift();\n                },\n    \n                unshift: function( block ) {\n                    pending.unshift( block );\n                }\n            };\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++,\n                    cuted: api\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return api;\n        }\n    \n        Uploader.register({\n            name: 'upload',\n    \n            init: function() {\n                var owner = this.owner,\n                    me = this;\n    \n                this.runing = false;\n                this.progress = false;\n    \n                owner\n                    .on( 'startUpload', function() {\n                        me.progress = true;\n                    })\n                    .on( 'uploadFinished', function() {\n                        me.progress = false;\n                    });\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存分好片的文件。\n                this.stack = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片在上传中但是没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n    \n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            reset: function() {\n                this.request( 'stop-upload', true );\n                this.runing = false;\n                this.pool = [];\n                this.stack = [];\n                this.pending = [];\n                this.remaning = 0;\n                this._trigged = false;\n                this._promise = null;\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             *\n             * 可以指定开始某一个文件。\n             * @grammar upload() => undefined\n             * @grammar upload( file | fileId) => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            startUpload: function(file) {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                // 如果指定了开始某个文件，则只开始指定文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if (file.getStatus() === Status.INTERRUPT) {\n                        $.each( me.pool, function( _, v ) {\n    \n                            // 之前暂停过。\n                            if (v.file !== file) {\n                                return;\n                            }\n    \n                            v.transport && v.transport.send();\n                        });\n    \n                        file.setStatus( Status.QUEUED );\n                    } else if (file.getStatus() === Status.PROGRESS) {\n                        return;\n                    } else {\n                        file.setStatus( Status.QUEUED );\n                    }\n                } else {\n                    $.each( me.request( 'get-files', [ Status.INITED ] ), function() {\n                        this.setStatus( Status.QUEUED );\n                    });\n                }\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                var files = [];\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        files.push(file);\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                var file;\n                while ( (file = files.shift()) ) {\n                    file.setStatus( Status.PROGRESS );\n                }\n    \n                file || $.each( me.request( 'get-files',\n                        Status.INTERRUPT ), function() {\n                    this.setStatus( Status.PROGRESS );\n                });\n    \n                me._trigged = false;\n                Base.nextTick( me.__tick );\n                me.owner.trigger('startUpload');\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             *\n             * 如果第一个参数是文件，则只暂停指定文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @grammar stop( file ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stopUpload: function( file, interrupt ) {\n                var me = this;\n    \n                if (file === true) {\n                    interrupt = file;\n                    file = null;\n                }\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                // 如果只是暂停某个文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if ( file.getStatus() !== Status.PROGRESS &&\n                            file.getStatus() !== Status.QUEUED ) {\n                        return;\n                    }\n    \n                    file.setStatus( Status.INTERRUPT );\n                    $.each( me.pool, function( _, v ) {\n    \n                        // 只 abort 指定的文件。\n                        if (v.file !== file) {\n                            return;\n                        }\n    \n                        v.transport && v.transport.abort();\n                        me._putback(v);\n                        me._popBlock(v);\n                    });\n    \n                    return Base.nextTick( me.__tick );\n                }\n    \n                me.runing = false;\n    \n                if (this._promise && this._promise.file) {\n                    this._promise.file.setStatus( Status.INTERRUPT );\n                }\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * @method cancelFile\n             * @grammar cancelFile( file ) => undefined\n             * @grammar cancelFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 标记文件状态为已取消, 同时将中断文件传输。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.cancelFile( file );\n             * })\n             */\n            cancelFile: function( file ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                file.setStatus( Status.CANCELLED );\n                this.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.progress;\n            },\n    \n            _getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me._getStats().numOfQueue &&\n                    !me._getStats().numofInterrupt ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _putback: function(block) {\n                var idx;\n    \n                block.cuted.unshift(block);\n                idx = this.stack.indexOf(block.cuted);\n    \n                if (!~idx) {\n                    this.stack.unshift(block.cuted);\n                }\n            },\n    \n            _getStack: function() {\n                var i = 0,\n                    act;\n    \n                while ( (act = this.stack[ i++ ]) ) {\n                    if ( act.has() && act.file.getStatus() === Status.PROGRESS ) {\n                        return act;\n                    } else if (!act.has() ||\n                            act.file.getStatus() !== Status.PROGRESS &&\n                            act.file.getStatus() !== Status.INTERRUPT ) {\n    \n                        // 把已经处理完了的，或者，状态为非 progress（上传中）、\n                        // interupt（暂停中） 的移除。\n                        this.stack.splice( --i, 1 );\n                    }\n                }\n    \n                return null;\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    opts = me.options,\n                    act, next, done, preparing;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( (act = this._getStack()) ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.shift();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me._getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me.stack.push(act);\n                        return act.shift();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    if ( isPromise( next) ) {\n                        preparing = next.file;\n                        next = next[ next.pipe ? 'pipe' : 'then' ]( done );\n                        next.file = preparing;\n                        return next;\n                    }\n    \n                    return done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.PROGRESS ||\n                            file.getStatus() === Status.INTERRUPT ) {\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    me.owner.trigger( 'uploadStart', file );\n                    file.setStatus( Status.PROGRESS );\n    \n                    promise.file = file;\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                // 有可能在 before-send-file 的 promise 期间改变了文件状态。\n                // 如：暂停，取消\n                // 我们不能中断 promise, 但是可以在 promise 完后，不做上传操作。\n                if ( file.getStatus() !== Status.PROGRESS ) {\n    \n                    // 如果是中断，则还需要放回去。\n                    if (file.getStatus() === Status.INTERRUPT) {\n                        me._putback(block);\n                    }\n    \n                    return;\n                }\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me.updateFileProgress( file );\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @param {Object} headers 可以扩展此对象来控制上传头部。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    block.percentage = percentage;\n                    me.updateFileProgress( file );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            },\n    \n            updateFileProgress: function(file) {\n                var totalPercent = 0,\n                    uploaded = 0;\n    \n                if (!file.blocks) {\n                    return;\n                }\n    \n                $.each( file.blocks, function( _, v ) {\n                    uploaded += (v.percentage || 0) * (v.end - v.start);\n                });\n    \n                totalPercent = uploaded / file.size;\n                this.owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 日志组件，主要用来收集错误信息，可以帮助 webuploader 更好的定位问题和发展。\n     *\n     * 如果您不想要启用此功能，请在打包的时候去掉 log 模块。\n     *\n     * 或者可以在初始化的时候通过 options.disableWidgets 属性禁用。\n     *\n     * 如：\n     * WebUploader.create({\n     *     ...\n     *\n     *     disableWidgets: 'log',\n     *\n     *     ...\n     * })\n     */\n    define('widgets/log',[\n        'base',\n        'uploader',\n        'widgets/widget'\n    ], function( Base, Uploader ) {\n        var $ = Base.$,\n            logUrl = ' http://static.tieba.baidu.com/tb/pms/img/st.gif??',\n            product = (location.hostname || location.host || 'protected').toLowerCase(),\n    \n            // 只针对 baidu 内部产品用户做统计功能。\n            enable = product && /baidu/i.exec(product),\n            base;\n    \n        if (!enable) {\n            return;\n        }\n    \n        base = {\n            dv: 3,\n            master: 'webuploader',\n            online: /test/.exec(product) ? 0 : 1,\n            module: '',\n            product: product,\n            type: 0\n        };\n    \n        function send(data) {\n            var obj = $.extend({}, base, data),\n                url = logUrl.replace(/^(.*)\\?/, '$1' + $.param( obj )),\n                image = new Image();\n    \n            image.src = url;\n        }\n    \n        return Uploader.register({\n            name: 'log',\n    \n            init: function() {\n                var owner = this.owner,\n                    count = 0,\n                    size = 0;\n    \n                owner\n                    .on('error', function(code) {\n                        send({\n                            type: 2,\n                            c_error_code: code\n                        });\n                    })\n                    .on('uploadError', function(file, reason) {\n                        send({\n                            type: 2,\n                            c_error_code: 'UPLOAD_ERROR',\n                            c_reason: '' + reason\n                        });\n                    })\n                    .on('uploadComplete', function(file) {\n                        count++;\n                        size += file.size;\n                    }).\n                    on('uploadFinished', function() {\n                        send({\n                            c_count: count,\n                            c_size: size\n                        });\n                        count = size = 0;\n                    });\n    \n                send({\n                    c_usage: 1\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destroy = this.destroy;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\r\n     * @fileOverview FilePicker\r\n     */\r\n    define('runtime/html5/filepicker',[\r\n        'base',\r\n        'runtime/html5/runtime'\r\n    ], function( Base, Html5Runtime ) {\r\n    \r\n        var $ = Base.$;\r\n    \r\n        return Html5Runtime.register( 'FilePicker', {\r\n            init: function() {\r\n                var container = this.getRuntime().getContainer(),\r\n                    me = this,\r\n                    owner = me.owner,\r\n                    opts = me.options,\r\n                    label = this.label = $( document.createElement('label') ),\r\n                    input =  this.input = $( document.createElement('input') ),\r\n                    arr, i, len, mouseHandler;\r\n    \r\n                input.attr( 'type', 'file' );\r\n                input.attr( 'name', opts.name );\r\n                input.addClass('webuploader-element-invisible');\r\n    \r\n                label.on( 'click', function() {\r\n                    input.trigger('click');\r\n                });\r\n    \r\n                label.css({\r\n                    opacity: 0,\r\n                    width: '100%',\r\n                    height: '100%',\r\n                    display: 'block',\r\n                    cursor: 'pointer',\r\n                    background: '#ffffff'\r\n                });\r\n    \r\n                if ( opts.multiple ) {\r\n                    input.attr( 'multiple', 'multiple' );\r\n                }\r\n    \r\n                // @todo Firefox不支持单独指定后缀\r\n                if ( opts.accept && opts.accept.length > 0 ) {\r\n                    arr = [];\r\n    \r\n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\r\n                        arr.push( opts.accept[ i ].mimeTypes );\r\n                    }\r\n    \r\n                    input.attr( 'accept', arr.join(',') );\r\n                }\r\n    \r\n                container.append( input );\r\n                container.append( label );\r\n    \r\n                mouseHandler = function( e ) {\r\n                    owner.trigger( e.type );\r\n                };\r\n    \r\n                input.on( 'change', function( e ) {\r\n                    var fn = arguments.callee,\r\n                        clone;\r\n    \r\n                    me.files = e.target.files;\r\n    \r\n                    // reset input\r\n                    clone = this.cloneNode( true );\r\n                    clone.value = null;\r\n                    this.parentNode.replaceChild( clone, this );\r\n    \r\n                    input.off();\r\n                    input = $( clone ).on( 'change', fn )\r\n                            .on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n                    owner.trigger('change');\r\n                });\r\n    \r\n                label.on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n            },\r\n    \r\n    \r\n            getFiles: function() {\r\n                return this.files;\r\n            },\r\n    \r\n            destroy: function() {\r\n                this.input.off();\r\n                this.label.off();\r\n            }\r\n        });\r\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/util',[\n        'base'\n    ], function( Base ) {\n    \n        var urlAPI = window.createObjectURL && window ||\n                window.URL && URL.revokeObjectURL && URL ||\n                window.webkitURL,\n            createObjectURL = Base.noop,\n            revokeObjectURL = createObjectURL;\n    \n        if ( urlAPI ) {\n    \n            // 更安全的方式调用，比如android里面就能把context改成其他的对象。\n            createObjectURL = function() {\n                return urlAPI.createObjectURL.apply( urlAPI, arguments );\n            };\n    \n            revokeObjectURL = function() {\n                return urlAPI.revokeObjectURL.apply( urlAPI, arguments );\n            };\n        }\n    \n        return {\n            createObjectURL: createObjectURL,\n            revokeObjectURL: revokeObjectURL,\n    \n            dataURL2Blob: function( dataURI ) {\n                var byteStr, intArray, ab, i, mimetype, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                ab = new ArrayBuffer( byteStr.length );\n                intArray = new Uint8Array( ab );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ];\n    \n                return this.arrayBufferToBlob( ab, mimetype );\n            },\n    \n            dataURL2ArrayBuffer: function( dataURI ) {\n                var byteStr, intArray, i, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                intArray = new Uint8Array( byteStr.length );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                return intArray.buffer;\n            },\n    \n            arrayBufferToBlob: function( buffer, type ) {\n                var builder = window.BlobBuilder || window.WebKitBlobBuilder,\n                    bb;\n    \n                // android不支持直接new Blob, 只能借助blobbuilder.\n                if ( builder ) {\n                    bb = new builder();\n                    bb.append( buffer );\n                    return bb.getBlob( type );\n                }\n    \n                return new Blob([ buffer ], type ? { type: type } : {} );\n            },\n    \n            // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg.\n            // 你得到的结果是png.\n            canvasToDataUrl: function( canvas, type, quality ) {\n                return canvas.toDataURL( type, quality / 100 );\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            parseMeta: function( blob, callback ) {\n                callback( false, {});\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            updateImageHead: function( data ) {\n                return data;\n            }\n        };\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/imagemeta',[\n        'runtime/html5/util'\n    ], function( Util ) {\n    \n        var api;\n    \n        api = {\n            parsers: {\n                0xffe1: []\n            },\n    \n            maxMetaDataSize: 262144,\n    \n            parse: function( blob, cb ) {\n                var me = this,\n                    fr = new FileReader();\n    \n                fr.onload = function() {\n                    cb( false, me._parse( this.result ) );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                fr.onerror = function( e ) {\n                    cb( e.message );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                blob = blob.slice( 0, me.maxMetaDataSize );\n                fr.readAsArrayBuffer( blob.getSource() );\n            },\n    \n            _parse: function( buffer, noParse ) {\n                if ( buffer.byteLength < 6 ) {\n                    return;\n                }\n    \n                var dataview = new DataView( buffer ),\n                    offset = 2,\n                    maxOffset = dataview.byteLength - 4,\n                    headLength = offset,\n                    ret = {},\n                    markerBytes, markerLength, parsers, i;\n    \n                if ( dataview.getUint16( 0 ) === 0xffd8 ) {\n    \n                    while ( offset < maxOffset ) {\n                        markerBytes = dataview.getUint16( offset );\n    \n                        if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef ||\n                                markerBytes === 0xfffe ) {\n    \n                            markerLength = dataview.getUint16( offset + 2 ) + 2;\n    \n                            if ( offset + markerLength > dataview.byteLength ) {\n                                break;\n                            }\n    \n                            parsers = api.parsers[ markerBytes ];\n    \n                            if ( !noParse && parsers ) {\n                                for ( i = 0; i < parsers.length; i += 1 ) {\n                                    parsers[ i ].call( api, dataview, offset,\n                                            markerLength, ret );\n                                }\n                            }\n    \n                            offset += markerLength;\n                            headLength = offset;\n                        } else {\n                            break;\n                        }\n                    }\n    \n                    if ( headLength > 6 ) {\n                        if ( buffer.slice ) {\n                            ret.imageHead = buffer.slice( 2, headLength );\n                        } else {\n                            // Workaround for IE10, which does not yet\n                            // support ArrayBuffer.slice:\n                            ret.imageHead = new Uint8Array( buffer )\n                                    .subarray( 2, headLength );\n                        }\n                    }\n                }\n    \n                return ret;\n            },\n    \n            updateImageHead: function( buffer, head ) {\n                var data = this._parse( buffer, true ),\n                    buf1, buf2, bodyoffset;\n    \n    \n                bodyoffset = 2;\n                if ( data.imageHead ) {\n                    bodyoffset = 2 + data.imageHead.byteLength;\n                }\n    \n                if ( buffer.slice ) {\n                    buf2 = buffer.slice( bodyoffset );\n                } else {\n                    buf2 = new Uint8Array( buffer ).subarray( bodyoffset );\n                }\n    \n                buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength );\n    \n                buf1[ 0 ] = 0xFF;\n                buf1[ 1 ] = 0xD8;\n                buf1.set( new Uint8Array( head ), 2 );\n                buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 );\n    \n                return buf1.buffer;\n            }\n        };\n    \n        Util.parseMeta = function() {\n            return api.parse.apply( api, arguments );\n        };\n    \n        Util.updateImageHead = function() {\n            return api.updateImageHead.apply( api, arguments );\n        };\n    \n        return api;\n    });\n    /**\n     * 代码来自于：https://github.com/blueimp/JavaScript-Load-Image\n     * 暂时项目中只用了orientation.\n     *\n     * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail.\n     * @fileOverview EXIF解析\n     */\n    \n    // Sample\n    // ====================================\n    // Make : Apple\n    // Model : iPhone 4S\n    // Orientation : 1\n    // XResolution : 72 [72/1]\n    // YResolution : 72 [72/1]\n    // ResolutionUnit : 2\n    // Software : QuickTime 7.7.1\n    // DateTime : 2013:09:01 22:53:55\n    // ExifIFDPointer : 190\n    // ExposureTime : 0.058823529411764705 [1/17]\n    // FNumber : 2.4 [12/5]\n    // ExposureProgram : Normal program\n    // ISOSpeedRatings : 800\n    // ExifVersion : 0220\n    // DateTimeOriginal : 2013:09:01 22:52:51\n    // DateTimeDigitized : 2013:09:01 22:52:51\n    // ComponentsConfiguration : YCbCr\n    // ShutterSpeedValue : 4.058893515764426\n    // ApertureValue : 2.5260688216892597 [4845/1918]\n    // BrightnessValue : -0.3126686601998395\n    // MeteringMode : Pattern\n    // Flash : Flash did not fire, compulsory flash mode\n    // FocalLength : 4.28 [107/25]\n    // SubjectArea : [4 values]\n    // FlashpixVersion : 0100\n    // ColorSpace : 1\n    // PixelXDimension : 2448\n    // PixelYDimension : 3264\n    // SensingMethod : One-chip color area sensor\n    // ExposureMode : 0\n    // WhiteBalance : Auto white balance\n    // FocalLengthIn35mmFilm : 35\n    // SceneCaptureType : Standard\n    define('runtime/html5/imagemeta/exif',[\n        'base',\n        'runtime/html5/imagemeta'\n    ], function( Base, ImageMeta ) {\n    \n        var EXIF = {};\n    \n        EXIF.ExifMap = function() {\n            return this;\n        };\n    \n        EXIF.ExifMap.prototype.map = {\n            'Orientation': 0x0112\n        };\n    \n        EXIF.ExifMap.prototype.get = function( id ) {\n            return this[ id ] || this[ this.map[ id ] ];\n        };\n    \n        EXIF.exifTagTypes = {\n            // byte, 8-bit unsigned int:\n            1: {\n                getValue: function( dataView, dataOffset ) {\n                    return dataView.getUint8( dataOffset );\n                },\n                size: 1\n            },\n    \n            // ascii, 8-bit byte:\n            2: {\n                getValue: function( dataView, dataOffset ) {\n                    return String.fromCharCode( dataView.getUint8( dataOffset ) );\n                },\n                size: 1,\n                ascii: true\n            },\n    \n            // short, 16 bit int:\n            3: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint16( dataOffset, littleEndian );\n                },\n                size: 2\n            },\n    \n            // long, 32 bit int:\n            4: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // rational = two long values,\n            // first is numerator, second is denominator:\n            5: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian ) /\n                        dataView.getUint32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            },\n    \n            // slong, 32 bit signed int:\n            9: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // srational, two slongs, first is numerator, second is denominator:\n            10: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian ) /\n                        dataView.getInt32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            }\n        };\n    \n        // undefined, 8-bit byte, value depending on field:\n        EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ];\n    \n        EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length,\n                littleEndian ) {\n    \n            var tagType = EXIF.exifTagTypes[ type ],\n                tagSize, dataOffset, values, i, str, c;\n    \n            if ( !tagType ) {\n                Base.log('Invalid Exif data: Invalid tag type.');\n                return;\n            }\n    \n            tagSize = tagType.size * length;\n    \n            // Determine if the value is contained in the dataOffset bytes,\n            // or if the value at the dataOffset is a pointer to the actual data:\n            dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8,\n                    littleEndian ) : (offset + 8);\n    \n            if ( dataOffset + tagSize > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid data offset.');\n                return;\n            }\n    \n            if ( length === 1 ) {\n                return tagType.getValue( dataView, dataOffset, littleEndian );\n            }\n    \n            values = [];\n    \n            for ( i = 0; i < length; i += 1 ) {\n                values[ i ] = tagType.getValue( dataView,\n                        dataOffset + i * tagType.size, littleEndian );\n            }\n    \n            if ( tagType.ascii ) {\n                str = '';\n    \n                // Concatenate the chars:\n                for ( i = 0; i < values.length; i += 1 ) {\n                    c = values[ i ];\n    \n                    // Ignore the terminating NULL byte(s):\n                    if ( c === '\\u0000' ) {\n                        break;\n                    }\n                    str += c;\n                }\n    \n                return str;\n            }\n            return values;\n        };\n    \n        EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian,\n                data ) {\n    \n            var tag = dataView.getUint16( offset, littleEndian );\n            data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset,\n                    dataView.getUint16( offset + 2, littleEndian ),    // tag type\n                    dataView.getUint32( offset + 4, littleEndian ),    // tag length\n                    littleEndian );\n        };\n    \n        EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset,\n                littleEndian, data ) {\n    \n            var tagsNumber, dirEndOffset, i;\n    \n            if ( dirOffset + 6 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory offset.');\n                return;\n            }\n    \n            tagsNumber = dataView.getUint16( dirOffset, littleEndian );\n            dirEndOffset = dirOffset + 2 + 12 * tagsNumber;\n    \n            if ( dirEndOffset + 4 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory size.');\n                return;\n            }\n    \n            for ( i = 0; i < tagsNumber; i += 1 ) {\n                this.parseExifTag( dataView, tiffOffset,\n                        dirOffset + 2 + 12 * i,    // tag offset\n                        littleEndian, data );\n            }\n    \n            // Return the offset to the next directory:\n            return dataView.getUint32( dirEndOffset, littleEndian );\n        };\n    \n        // EXIF.getExifThumbnail = function(dataView, offset, length) {\n        //     var hexData,\n        //         i,\n        //         b;\n        //     if (!length || offset + length > dataView.byteLength) {\n        //         Base.log('Invalid Exif data: Invalid thumbnail data.');\n        //         return;\n        //     }\n        //     hexData = [];\n        //     for (i = 0; i < length; i += 1) {\n        //         b = dataView.getUint8(offset + i);\n        //         hexData.push((b < 16 ? '0' : '') + b.toString(16));\n        //     }\n        //     return 'data:image/jpeg,%' + hexData.join('%');\n        // };\n    \n        EXIF.parseExifData = function( dataView, offset, length, data ) {\n    \n            var tiffOffset = offset + 10,\n                littleEndian, dirOffset;\n    \n            // Check for the ASCII code for \"Exif\" (0x45786966):\n            if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) {\n                // No Exif data, might be XMP data instead\n                return;\n            }\n            if ( tiffOffset + 8 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid segment size.');\n                return;\n            }\n    \n            // Check for the two null bytes:\n            if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) {\n                Base.log('Invalid Exif data: Missing byte alignment offset.');\n                return;\n            }\n    \n            // Check the byte alignment:\n            switch ( dataView.getUint16( tiffOffset ) ) {\n                case 0x4949:\n                    littleEndian = true;\n                    break;\n    \n                case 0x4D4D:\n                    littleEndian = false;\n                    break;\n    \n                default:\n                    Base.log('Invalid Exif data: Invalid byte alignment marker.');\n                    return;\n            }\n    \n            // Check for the TIFF tag marker (0x002A):\n            if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) {\n                Base.log('Invalid Exif data: Missing TIFF marker.');\n                return;\n            }\n    \n            // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal:\n            dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian );\n            // Create the exif object to store the tags:\n            data.exif = new EXIF.ExifMap();\n            // Parse the tags of the main image directory and retrieve the\n            // offset to the next directory, usually the thumbnail directory:\n            dirOffset = EXIF.parseExifTags( dataView, tiffOffset,\n                    tiffOffset + dirOffset, littleEndian, data );\n    \n            // 尝试读取缩略图\n            // if ( dirOffset ) {\n            //     thumbnailData = {exif: {}};\n            //     dirOffset = EXIF.parseExifTags(\n            //         dataView,\n            //         tiffOffset,\n            //         tiffOffset + dirOffset,\n            //         littleEndian,\n            //         thumbnailData\n            //     );\n    \n            //     // Check for JPEG Thumbnail offset:\n            //     if (thumbnailData.exif[0x0201]) {\n            //         data.exif.Thumbnail = EXIF.getExifThumbnail(\n            //             dataView,\n            //             tiffOffset + thumbnailData.exif[0x0201],\n            //             thumbnailData.exif[0x0202] // Thumbnail data length\n            //         );\n            //     }\n            // }\n        };\n    \n        ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData );\n        return EXIF;\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('runtime/html5/image',[\n        'base',\n        'runtime/html5/runtime',\n        'runtime/html5/util'\n    ], function( Base, Html5Runtime, Util ) {\n    \n        var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';\n    \n        return Html5Runtime.register( 'Image', {\n    \n            // flag: 标记是否被修改过。\n            modified: false,\n    \n            init: function() {\n                var me = this,\n                    img = new Image();\n    \n                img.onload = function() {\n    \n                    me._info = {\n                        type: me.type,\n                        width: this.width,\n                        height: this.height\n                    };\n    \n                    // 读取meta信息。\n                    if ( !me._metas && 'image/jpeg' === me.type ) {\n                        Util.parseMeta( me._blob, function( error, ret ) {\n                            me._metas = ret;\n                            me.owner.trigger('load');\n                        });\n                    } else {\n                        me.owner.trigger('load');\n                    }\n                };\n    \n                img.onerror = function() {\n                    me.owner.trigger('error');\n                };\n    \n                me._img = img;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    img = me._img;\n    \n                me._blob = blob;\n                me.type = blob.type;\n                img.src = Util.createObjectURL( blob.getSource() );\n                me.owner.once( 'load', function() {\n                    Util.revokeObjectURL( img.src );\n                });\n            },\n    \n            resize: function( width, height ) {\n                var canvas = this._canvas ||\n                        (this._canvas = document.createElement('canvas'));\n    \n                this._resize( this._img, canvas, width, height );\n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger( 'complete', 'resize' );\n            },\n    \n            crop: function( x, y, w, h, s ) {\n                var cvs = this._canvas ||\n                        (this._canvas = document.createElement('canvas')),\n                    opts = this.options,\n                    img = this._img,\n                    iw = img.naturalWidth,\n                    ih = img.naturalHeight,\n                    orientation = this.getOrientation();\n    \n                s = s || 1;\n    \n                // todo 解决 orientation 的问题。\n                // values that require 90 degree rotation\n                // if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                //     switch ( orientation ) {\n                //         case 6:\n                //             tmp = x;\n                //             x = y;\n                //             y = iw * s - tmp - w;\n                //             console.log(ih * s, tmp, w)\n                //             break;\n                //     }\n    \n                //     (w ^= h, h ^= w, w ^= h);\n                // }\n    \n                cvs.width = w;\n                cvs.height = h;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n                this._renderImageToCanvas( cvs, img, -x, -y, iw * s, ih * s );\n    \n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger( 'complete', 'crop' );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this._blob,\n                    opts = this.options,\n                    canvas;\n    \n                type = type || this.type;\n    \n                // blob需要重新生成。\n                if ( this.modified || this.type !== type ) {\n                    canvas = this._canvas;\n    \n                    if ( type === 'image/jpeg' ) {\n    \n                        blob = Util.canvasToDataUrl( canvas, type, opts.quality );\n    \n                        if ( opts.preserveHeaders && this._metas &&\n                                this._metas.imageHead ) {\n    \n                            blob = Util.dataURL2ArrayBuffer( blob );\n                            blob = Util.updateImageHead( blob,\n                                    this._metas.imageHead );\n                            blob = Util.arrayBufferToBlob( blob, type );\n                            return blob;\n                        }\n                    } else {\n                        blob = Util.canvasToDataUrl( canvas, type );\n                    }\n    \n                    blob = Util.dataURL2Blob( blob );\n                }\n    \n                return blob;\n            },\n    \n            getAsDataUrl: function( type ) {\n                var opts = this.options;\n    \n                type = type || this.type;\n    \n                if ( type === 'image/jpeg' ) {\n                    return Util.canvasToDataUrl( this._canvas, type, opts.quality );\n                } else {\n                    return this._canvas.toDataURL( type );\n                }\n            },\n    \n            getOrientation: function() {\n                return this._metas && this._metas.exif &&\n                        this._metas.exif.get('Orientation') || 1;\n            },\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            destroy: function() {\n                var canvas = this._canvas;\n                this._img.onload = null;\n    \n                if ( canvas ) {\n                    canvas.getContext('2d')\n                            .clearRect( 0, 0, canvas.width, canvas.height );\n                    canvas.width = canvas.height = 0;\n                    this._canvas = null;\n                }\n    \n                // 释放内存。非常重要，否则释放不了image的内存。\n                this._img.src = BLANK;\n                this._img = this._blob = null;\n            },\n    \n            _resize: function( img, cvs, width, height ) {\n                var opts = this.options,\n                    naturalWidth = img.width,\n                    naturalHeight = img.height,\n                    orientation = this.getOrientation(),\n                    scale, w, h, x, y;\n    \n                // values that require 90 degree rotation\n                if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                    // 交换width, height的值。\n                    width ^= height;\n                    height ^= width;\n                    width ^= height;\n                }\n    \n                scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth,\n                        height / naturalHeight );\n    \n                // 不允许放大。\n                opts.allowMagnify || (scale = Math.min( 1, scale ));\n    \n                w = naturalWidth * scale;\n                h = naturalHeight * scale;\n    \n                if ( opts.crop ) {\n                    cvs.width = width;\n                    cvs.height = height;\n                } else {\n                    cvs.width = w;\n                    cvs.height = h;\n                }\n    \n                x = (cvs.width - w) / 2;\n                y = (cvs.height - h) / 2;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n    \n                this._renderImageToCanvas( cvs, img, x, y, w, h );\n            },\n    \n            _rotate2Orientaion: function( canvas, orientation ) {\n                var width = canvas.width,\n                    height = canvas.height,\n                    ctx = canvas.getContext('2d');\n    \n                switch ( orientation ) {\n                    case 5:\n                    case 6:\n                    case 7:\n                    case 8:\n                        canvas.width = height;\n                        canvas.height = width;\n                        break;\n                }\n    \n                switch ( orientation ) {\n                    case 2:    // horizontal flip\n                        ctx.translate( width, 0 );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 3:    // 180 rotate left\n                        ctx.translate( width, height );\n                        ctx.rotate( Math.PI );\n                        break;\n    \n                    case 4:    // vertical flip\n                        ctx.translate( 0, height );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 5:    // vertical flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 6:    // 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( 0, -height );\n                        break;\n    \n                    case 7:    // horizontal flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( width, -height );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 8:    // 90 rotate left\n                        ctx.rotate( -0.5 * Math.PI );\n                        ctx.translate( -width, 0 );\n                        break;\n                }\n            },\n    \n            // https://github.com/stomita/ios-imagefile-megapixel/\n            // blob/master/src/megapix-image.js\n            _renderImageToCanvas: (function() {\n    \n                // 如果不是ios, 不需要这么复杂！\n                if ( !Base.os.ios ) {\n                    return function( canvas ) {\n                        var args = Base.slice( arguments, 1 ),\n                            ctx = canvas.getContext('2d');\n    \n                        ctx.drawImage.apply( ctx, args );\n                    };\n                }\n    \n                /**\n                 * Detecting vertical squash in loaded image.\n                 * Fixes a bug which squash image vertically while drawing into\n                 * canvas for some images.\n                 */\n                function detectVerticalSquash( img, iw, ih ) {\n                    var canvas = document.createElement('canvas'),\n                        ctx = canvas.getContext('2d'),\n                        sy = 0,\n                        ey = ih,\n                        py = ih,\n                        data, alpha, ratio;\n    \n    \n                    canvas.width = 1;\n                    canvas.height = ih;\n                    ctx.drawImage( img, 0, 0 );\n                    data = ctx.getImageData( 0, 0, 1, ih ).data;\n    \n                    // search image edge pixel position in case\n                    // it is squashed vertically.\n                    while ( py > sy ) {\n                        alpha = data[ (py - 1) * 4 + 3 ];\n    \n                        if ( alpha === 0 ) {\n                            ey = py;\n                        } else {\n                            sy = py;\n                        }\n    \n                        py = (ey + sy) >> 1;\n                    }\n    \n                    ratio = (py / ih);\n                    return (ratio === 0) ? 1 : ratio;\n                }\n    \n                // fix ie7 bug\n                // http://stackoverflow.com/questions/11929099/\n                // html5-canvas-drawimage-ratio-bug-ios\n                if ( Base.os.ios >= 7 ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        var iw = img.naturalWidth,\n                            ih = img.naturalHeight,\n                            vertSquashRatio = detectVerticalSquash( img, iw, ih );\n    \n                        return canvas.getContext('2d').drawImage( img, 0, 0,\n                                iw * vertSquashRatio, ih * vertSquashRatio,\n                                x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detect subsampling in loaded image.\n                 * In iOS, larger images than 2M pixels may be\n                 * subsampled in rendering.\n                 */\n                function detectSubsampling( img ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        canvas, ctx;\n    \n                    // subsampling may happen overmegapixel image\n                    if ( iw * ih > 1024 * 1024 ) {\n                        canvas = document.createElement('canvas');\n                        canvas.width = canvas.height = 1;\n                        ctx = canvas.getContext('2d');\n                        ctx.drawImage( img, -iw + 1, 0 );\n    \n                        // subsampled image becomes half smaller in rendering size.\n                        // check alpha channel value to confirm image is covering\n                        // edge pixel or not. if alpha value is 0\n                        // image is not covering, hence subsampled.\n                        return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0;\n                    } else {\n                        return false;\n                    }\n                }\n    \n    \n                return function( canvas, img, x, y, width, height ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        ctx = canvas.getContext('2d'),\n                        subsampled = detectSubsampling( img ),\n                        doSquash = this.type === 'image/jpeg',\n                        d = 1024,\n                        sy = 0,\n                        dy = 0,\n                        tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx;\n    \n                    if ( subsampled ) {\n                        iw /= 2;\n                        ih /= 2;\n                    }\n    \n                    ctx.save();\n                    tmpCanvas = document.createElement('canvas');\n                    tmpCanvas.width = tmpCanvas.height = d;\n    \n                    tmpCtx = tmpCanvas.getContext('2d');\n                    vertSquashRatio = doSquash ?\n                            detectVerticalSquash( img, iw, ih ) : 1;\n    \n                    dw = Math.ceil( d * width / iw );\n                    dh = Math.ceil( d * height / ih / vertSquashRatio );\n    \n                    while ( sy < ih ) {\n                        sx = 0;\n                        dx = 0;\n                        while ( sx < iw ) {\n                            tmpCtx.clearRect( 0, 0, d, d );\n                            tmpCtx.drawImage( img, -sx, -sy );\n                            ctx.drawImage( tmpCanvas, 0, 0, d, d,\n                                    x + dx, y + dy, dw, dh );\n                            sx += d;\n                            dx += dw;\n                        }\n                        sy += d;\n                        dy += dh;\n                    }\n                    ctx.restore();\n                    tmpCanvas = tmpCtx = null;\n                };\n            })()\n        });\n    });\n    /**\n     * 这个方式性能不行，但是可以解决android里面的toDataUrl的bug\n     * android里面toDataUrl('image/jpege')得到的结果却是png.\n     *\n     * 所以这里没辙，只能借助这个工具\n     * @fileOverview jpeg encoder\n     */\n    define('runtime/html5/jpegencoder',[], function( require, exports, module ) {\n    \n        /*\n          Copyright (c) 2008, Adobe Systems Incorporated\n          All rights reserved.\n    \n          Redistribution and use in source and binary forms, with or without\n          modification, are permitted provided that the following conditions are\n          met:\n    \n          * Redistributions of source code must retain the above copyright notice,\n            this list of conditions and the following disclaimer.\n    \n          * Redistributions in binary form must reproduce the above copyright\n            notice, this list of conditions and the following disclaimer in the\n            documentation and/or other materials provided with the distribution.\n    \n          * Neither the name of Adobe Systems Incorporated nor the names of its\n            contributors may be used to endorse or promote products derived from\n            this software without specific prior written permission.\n    \n          THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n          IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n          THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n          PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n          CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n          EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n          PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n          PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n          LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n          NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n          SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n        */\n        /*\n        JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n    \n        Basic GUI blocking jpeg encoder\n        */\n    \n        function JPEGEncoder(quality) {\n          var self = this;\n            var fround = Math.round;\n            var ffloor = Math.floor;\n            var YTable = new Array(64);\n            var UVTable = new Array(64);\n            var fdtbl_Y = new Array(64);\n            var fdtbl_UV = new Array(64);\n            var YDC_HT;\n            var UVDC_HT;\n            var YAC_HT;\n            var UVAC_HT;\n    \n            var bitcode = new Array(65535);\n            var category = new Array(65535);\n            var outputfDCTQuant = new Array(64);\n            var DU = new Array(64);\n            var byteout = [];\n            var bytenew = 0;\n            var bytepos = 7;\n    \n            var YDU = new Array(64);\n            var UDU = new Array(64);\n            var VDU = new Array(64);\n            var clt = new Array(256);\n            var RGB_YUV_TABLE = new Array(2048);\n            var currentQuality;\n    \n            var ZigZag = [\n                     0, 1, 5, 6,14,15,27,28,\n                     2, 4, 7,13,16,26,29,42,\n                     3, 8,12,17,25,30,41,43,\n                     9,11,18,24,31,40,44,53,\n                    10,19,23,32,39,45,52,54,\n                    20,22,33,38,46,51,55,60,\n                    21,34,37,47,50,56,59,61,\n                    35,36,48,49,57,58,62,63\n                ];\n    \n            var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];\n            var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];\n            var std_ac_luminance_values = [\n                    0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,\n                    0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,\n                    0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n                    0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,\n                    0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,\n                    0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n                    0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,\n                    0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\n                    0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n                    0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\n                    0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,\n                    0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n                    0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,\n                    0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,\n                    0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n                    0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,\n                    0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,\n                    0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n                    0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,\n                    0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];\n            var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];\n            var std_ac_chrominance_values = [\n                    0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,\n                    0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,\n                    0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n                    0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,\n                    0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,\n                    0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n                    0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,\n                    0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,\n                    0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n                    0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,\n                    0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,\n                    0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n                    0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,\n                    0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,\n                    0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n                    0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,\n                    0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,\n                    0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n                    0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,\n                    0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            function initQuantTables(sf){\n                    var YQT = [\n                        16, 11, 10, 16, 24, 40, 51, 61,\n                        12, 12, 14, 19, 26, 58, 60, 55,\n                        14, 13, 16, 24, 40, 57, 69, 56,\n                        14, 17, 22, 29, 51, 87, 80, 62,\n                        18, 22, 37, 56, 68,109,103, 77,\n                        24, 35, 55, 64, 81,104,113, 92,\n                        49, 64, 78, 87,103,121,120,101,\n                        72, 92, 95, 98,112,100,103, 99\n                    ];\n    \n                    for (var i = 0; i < 64; i++) {\n                        var t = ffloor((YQT[i]*sf+50)/100);\n                        if (t < 1) {\n                            t = 1;\n                        } else if (t > 255) {\n                            t = 255;\n                        }\n                        YTable[ZigZag[i]] = t;\n                    }\n                    var UVQT = [\n                        17, 18, 24, 47, 99, 99, 99, 99,\n                        18, 21, 26, 66, 99, 99, 99, 99,\n                        24, 26, 56, 99, 99, 99, 99, 99,\n                        47, 66, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99\n                    ];\n                    for (var j = 0; j < 64; j++) {\n                        var u = ffloor((UVQT[j]*sf+50)/100);\n                        if (u < 1) {\n                            u = 1;\n                        } else if (u > 255) {\n                            u = 255;\n                        }\n                        UVTable[ZigZag[j]] = u;\n                    }\n                    var aasf = [\n                        1.0, 1.387039845, 1.306562965, 1.175875602,\n                        1.0, 0.785694958, 0.541196100, 0.275899379\n                    ];\n                    var k = 0;\n                    for (var row = 0; row < 8; row++)\n                    {\n                        for (var col = 0; col < 8; col++)\n                        {\n                            fdtbl_Y[k]  = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            k++;\n                        }\n                    }\n                }\n    \n                function computeHuffmanTbl(nrcodes, std_table){\n                    var codevalue = 0;\n                    var pos_in_table = 0;\n                    var HT = new Array();\n                    for (var k = 1; k <= 16; k++) {\n                        for (var j = 1; j <= nrcodes[k]; j++) {\n                            HT[std_table[pos_in_table]] = [];\n                            HT[std_table[pos_in_table]][0] = codevalue;\n                            HT[std_table[pos_in_table]][1] = k;\n                            pos_in_table++;\n                            codevalue++;\n                        }\n                        codevalue*=2;\n                    }\n                    return HT;\n                }\n    \n                function initHuffmanTbl()\n                {\n                    YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);\n                    UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);\n                    YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);\n                    UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);\n                }\n    \n                function initCategoryNumber()\n                {\n                    var nrlower = 1;\n                    var nrupper = 2;\n                    for (var cat = 1; cat <= 15; cat++) {\n                        //Positive numbers\n                        for (var nr = nrlower; nr<nrupper; nr++) {\n                            category[32767+nr] = cat;\n                            bitcode[32767+nr] = [];\n                            bitcode[32767+nr][1] = cat;\n                            bitcode[32767+nr][0] = nr;\n                        }\n                        //Negative numbers\n                        for (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) {\n                            category[32767+nrneg] = cat;\n                            bitcode[32767+nrneg] = [];\n                            bitcode[32767+nrneg][1] = cat;\n                            bitcode[32767+nrneg][0] = nrupper-1+nrneg;\n                        }\n                        nrlower <<= 1;\n                        nrupper <<= 1;\n                    }\n                }\n    \n                function initRGBYUVTable() {\n                    for(var i = 0; i < 256;i++) {\n                        RGB_YUV_TABLE[i]            =  19595 * i;\n                        RGB_YUV_TABLE[(i+ 256)>>0]  =  38470 * i;\n                        RGB_YUV_TABLE[(i+ 512)>>0]  =   7471 * i + 0x8000;\n                        RGB_YUV_TABLE[(i+ 768)>>0]  = -11059 * i;\n                        RGB_YUV_TABLE[(i+1024)>>0]  = -21709 * i;\n                        RGB_YUV_TABLE[(i+1280)>>0]  =  32768 * i + 0x807FFF;\n                        RGB_YUV_TABLE[(i+1536)>>0]  = -27439 * i;\n                        RGB_YUV_TABLE[(i+1792)>>0]  = - 5329 * i;\n                    }\n                }\n    \n                // IO functions\n                function writeBits(bs)\n                {\n                    var value = bs[0];\n                    var posval = bs[1]-1;\n                    while ( posval >= 0 ) {\n                        if (value & (1 << posval) ) {\n                            bytenew |= (1 << bytepos);\n                        }\n                        posval--;\n                        bytepos--;\n                        if (bytepos < 0) {\n                            if (bytenew == 0xFF) {\n                                writeByte(0xFF);\n                                writeByte(0);\n                            }\n                            else {\n                                writeByte(bytenew);\n                            }\n                            bytepos=7;\n                            bytenew=0;\n                        }\n                    }\n                }\n    \n                function writeByte(value)\n                {\n                    byteout.push(clt[value]); // write char directly instead of converting later\n                }\n    \n                function writeWord(value)\n                {\n                    writeByte((value>>8)&0xFF);\n                    writeByte((value   )&0xFF);\n                }\n    \n                // DCT & quantization core\n                function fDCTQuant(data, fdtbl)\n                {\n                    var d0, d1, d2, d3, d4, d5, d6, d7;\n                    /* Pass 1: process rows. */\n                    var dataOff=0;\n                    var i;\n                    var I8 = 8;\n                    var I64 = 64;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff+1];\n                        d2 = data[dataOff+2];\n                        d3 = data[dataOff+3];\n                        d4 = data[dataOff+4];\n                        d5 = data[dataOff+5];\n                        d6 = data[dataOff+6];\n                        d7 = data[dataOff+7];\n    \n                        var tmp0 = d0 + d7;\n                        var tmp7 = d0 - d7;\n                        var tmp1 = d1 + d6;\n                        var tmp6 = d1 - d6;\n                        var tmp2 = d2 + d5;\n                        var tmp5 = d2 - d5;\n                        var tmp3 = d3 + d4;\n                        var tmp4 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10 = tmp0 + tmp3;    /* phase 2 */\n                        var tmp13 = tmp0 - tmp3;\n                        var tmp11 = tmp1 + tmp2;\n                        var tmp12 = tmp1 - tmp2;\n    \n                        data[dataOff] = tmp10 + tmp11; /* phase 3 */\n                        data[dataOff+4] = tmp10 - tmp11;\n    \n                        var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n                        data[dataOff+2] = tmp13 + z1; /* phase 5 */\n                        data[dataOff+6] = tmp13 - z1;\n    \n                        /* Odd part */\n                        tmp10 = tmp4 + tmp5; /* phase 2 */\n                        tmp11 = tmp5 + tmp6;\n                        tmp12 = tmp6 + tmp7;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n                        var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */\n                        var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n                        var z3 = tmp11 * 0.707106781; /* c4 */\n    \n                        var z11 = tmp7 + z3;    /* phase 5 */\n                        var z13 = tmp7 - z3;\n    \n                        data[dataOff+5] = z13 + z2; /* phase 6 */\n                        data[dataOff+3] = z13 - z2;\n                        data[dataOff+1] = z11 + z4;\n                        data[dataOff+7] = z11 - z4;\n    \n                        dataOff += 8; /* advance pointer to next row */\n                    }\n    \n                    /* Pass 2: process columns. */\n                    dataOff = 0;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff + 8];\n                        d2 = data[dataOff + 16];\n                        d3 = data[dataOff + 24];\n                        d4 = data[dataOff + 32];\n                        d5 = data[dataOff + 40];\n                        d6 = data[dataOff + 48];\n                        d7 = data[dataOff + 56];\n    \n                        var tmp0p2 = d0 + d7;\n                        var tmp7p2 = d0 - d7;\n                        var tmp1p2 = d1 + d6;\n                        var tmp6p2 = d1 - d6;\n                        var tmp2p2 = d2 + d5;\n                        var tmp5p2 = d2 - d5;\n                        var tmp3p2 = d3 + d4;\n                        var tmp4p2 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10p2 = tmp0p2 + tmp3p2;  /* phase 2 */\n                        var tmp13p2 = tmp0p2 - tmp3p2;\n                        var tmp11p2 = tmp1p2 + tmp2p2;\n                        var tmp12p2 = tmp1p2 - tmp2p2;\n    \n                        data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n                        data[dataOff+32] = tmp10p2 - tmp11p2;\n    \n                        var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n                        data[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */\n                        data[dataOff+48] = tmp13p2 - z1p2;\n    \n                        /* Odd part */\n                        tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n                        tmp11p2 = tmp5p2 + tmp6p2;\n                        tmp12p2 = tmp6p2 + tmp7p2;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n                        var z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */\n                        var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n                        var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n    \n                        var z11p2 = tmp7p2 + z3p2;  /* phase 5 */\n                        var z13p2 = tmp7p2 - z3p2;\n    \n                        data[dataOff+40] = z13p2 + z2p2; /* phase 6 */\n                        data[dataOff+24] = z13p2 - z2p2;\n                        data[dataOff+ 8] = z11p2 + z4p2;\n                        data[dataOff+56] = z11p2 - z4p2;\n    \n                        dataOff++; /* advance pointer to next column */\n                    }\n    \n                    // Quantize/descale the coefficients\n                    var fDCTQuant;\n                    for (i=0; i<I64; ++i)\n                    {\n                        // Apply the quantization and scaling factor & Round to nearest integer\n                        fDCTQuant = data[i]*fdtbl[i];\n                        outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0);\n                        //outputfDCTQuant[i] = fround(fDCTQuant);\n    \n                    }\n                    return outputfDCTQuant;\n                }\n    \n                function writeAPP0()\n                {\n                    writeWord(0xFFE0); // marker\n                    writeWord(16); // length\n                    writeByte(0x4A); // J\n                    writeByte(0x46); // F\n                    writeByte(0x49); // I\n                    writeByte(0x46); // F\n                    writeByte(0); // = \"JFIF\",'\\0'\n                    writeByte(1); // versionhi\n                    writeByte(1); // versionlo\n                    writeByte(0); // xyunits\n                    writeWord(1); // xdensity\n                    writeWord(1); // ydensity\n                    writeByte(0); // thumbnwidth\n                    writeByte(0); // thumbnheight\n                }\n    \n                function writeSOF0(width, height)\n                {\n                    writeWord(0xFFC0); // marker\n                    writeWord(17);   // length, truecolor YUV JPG\n                    writeByte(8);    // precision\n                    writeWord(height);\n                    writeWord(width);\n                    writeByte(3);    // nrofcomponents\n                    writeByte(1);    // IdY\n                    writeByte(0x11); // HVY\n                    writeByte(0);    // QTY\n                    writeByte(2);    // IdU\n                    writeByte(0x11); // HVU\n                    writeByte(1);    // QTU\n                    writeByte(3);    // IdV\n                    writeByte(0x11); // HVV\n                    writeByte(1);    // QTV\n                }\n    \n                function writeDQT()\n                {\n                    writeWord(0xFFDB); // marker\n                    writeWord(132);    // length\n                    writeByte(0);\n                    for (var i=0; i<64; i++) {\n                        writeByte(YTable[i]);\n                    }\n                    writeByte(1);\n                    for (var j=0; j<64; j++) {\n                        writeByte(UVTable[j]);\n                    }\n                }\n    \n                function writeDHT()\n                {\n                    writeWord(0xFFC4); // marker\n                    writeWord(0x01A2); // length\n    \n                    writeByte(0); // HTYDCinfo\n                    for (var i=0; i<16; i++) {\n                        writeByte(std_dc_luminance_nrcodes[i+1]);\n                    }\n                    for (var j=0; j<=11; j++) {\n                        writeByte(std_dc_luminance_values[j]);\n                    }\n    \n                    writeByte(0x10); // HTYACinfo\n                    for (var k=0; k<16; k++) {\n                        writeByte(std_ac_luminance_nrcodes[k+1]);\n                    }\n                    for (var l=0; l<=161; l++) {\n                        writeByte(std_ac_luminance_values[l]);\n                    }\n    \n                    writeByte(1); // HTUDCinfo\n                    for (var m=0; m<16; m++) {\n                        writeByte(std_dc_chrominance_nrcodes[m+1]);\n                    }\n                    for (var n=0; n<=11; n++) {\n                        writeByte(std_dc_chrominance_values[n]);\n                    }\n    \n                    writeByte(0x11); // HTUACinfo\n                    for (var o=0; o<16; o++) {\n                        writeByte(std_ac_chrominance_nrcodes[o+1]);\n                    }\n                    for (var p=0; p<=161; p++) {\n                        writeByte(std_ac_chrominance_values[p]);\n                    }\n                }\n    \n                function writeSOS()\n                {\n                    writeWord(0xFFDA); // marker\n                    writeWord(12); // length\n                    writeByte(3); // nrofcomponents\n                    writeByte(1); // IdY\n                    writeByte(0); // HTY\n                    writeByte(2); // IdU\n                    writeByte(0x11); // HTU\n                    writeByte(3); // IdV\n                    writeByte(0x11); // HTV\n                    writeByte(0); // Ss\n                    writeByte(0x3f); // Se\n                    writeByte(0); // Bf\n                }\n    \n                function processDU(CDU, fdtbl, DC, HTDC, HTAC){\n                    var EOB = HTAC[0x00];\n                    var M16zeroes = HTAC[0xF0];\n                    var pos;\n                    var I16 = 16;\n                    var I63 = 63;\n                    var I64 = 64;\n                    var DU_DCT = fDCTQuant(CDU, fdtbl);\n                    //ZigZag reorder\n                    for (var j=0;j<I64;++j) {\n                        DU[ZigZag[j]]=DU_DCT[j];\n                    }\n                    var Diff = DU[0] - DC; DC = DU[0];\n                    //Encode DC\n                    if (Diff==0) {\n                        writeBits(HTDC[0]); // Diff might be 0\n                    } else {\n                        pos = 32767+Diff;\n                        writeBits(HTDC[category[pos]]);\n                        writeBits(bitcode[pos]);\n                    }\n                    //Encode ACs\n                    var end0pos = 63; // was const... which is crazy\n                    for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {};\n                    //end0pos = first element in reverse order !=0\n                    if ( end0pos == 0) {\n                        writeBits(EOB);\n                        return DC;\n                    }\n                    var i = 1;\n                    var lng;\n                    while ( i <= end0pos ) {\n                        var startpos = i;\n                        for (; (DU[i]==0) && (i<=end0pos); ++i) {}\n                        var nrzeroes = i-startpos;\n                        if ( nrzeroes >= I16 ) {\n                            lng = nrzeroes>>4;\n                            for (var nrmarker=1; nrmarker <= lng; ++nrmarker)\n                                writeBits(M16zeroes);\n                            nrzeroes = nrzeroes&0xF;\n                        }\n                        pos = 32767+DU[i];\n                        writeBits(HTAC[(nrzeroes<<4)+category[pos]]);\n                        writeBits(bitcode[pos]);\n                        i++;\n                    }\n                    if ( end0pos != I63 ) {\n                        writeBits(EOB);\n                    }\n                    return DC;\n                }\n    \n                function initCharLookupTable(){\n                    var sfcc = String.fromCharCode;\n                    for(var i=0; i < 256; i++){ ///// ACHTUNG // 255\n                        clt[i] = sfcc(i);\n                    }\n                }\n    \n                this.encode = function(image,quality) // image data object\n                {\n                    // var time_start = new Date().getTime();\n    \n                    if(quality) setQuality(quality);\n    \n                    // Initialize bit writer\n                    byteout = new Array();\n                    bytenew=0;\n                    bytepos=7;\n    \n                    // Add JPEG headers\n                    writeWord(0xFFD8); // SOI\n                    writeAPP0();\n                    writeDQT();\n                    writeSOF0(image.width,image.height);\n                    writeDHT();\n                    writeSOS();\n    \n    \n                    // Encode 8x8 macroblocks\n                    var DCY=0;\n                    var DCU=0;\n                    var DCV=0;\n    \n                    bytenew=0;\n                    bytepos=7;\n    \n    \n                    this.encode.displayName = \"_encode_\";\n    \n                    var imageData = image.data;\n                    var width = image.width;\n                    var height = image.height;\n    \n                    var quadWidth = width*4;\n                    var tripleWidth = width*3;\n    \n                    var x, y = 0;\n                    var r, g, b;\n                    var start,p, col,row,pos;\n                    while(y < height){\n                        x = 0;\n                        while(x < quadWidth){\n                        start = quadWidth * y + x;\n                        p = start;\n                        col = -1;\n                        row = 0;\n    \n                        for(pos=0; pos < 64; pos++){\n                            row = pos >> 3;// /8\n                            col = ( pos & 7 ) * 4; // %8\n                            p = start + ( row * quadWidth ) + col;\n    \n                            if(y+row >= height){ // padding bottom\n                                p-= (quadWidth*(y+1+row-height));\n                            }\n    \n                            if(x+col >= quadWidth){ // padding right\n                                p-= ((x+col) - quadWidth +4)\n                            }\n    \n                            r = imageData[ p++ ];\n                            g = imageData[ p++ ];\n                            b = imageData[ p++ ];\n    \n    \n                            /* // calculate YUV values dynamically\n                            YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n                            UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n                            VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n                            */\n    \n                            // use lookup table (slightly faster)\n                            YDU[pos] = ((RGB_YUV_TABLE[r]             + RGB_YUV_TABLE[(g +  256)>>0] + RGB_YUV_TABLE[(b +  512)>>0]) >> 16)-128;\n                            UDU[pos] = ((RGB_YUV_TABLE[(r +  768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128;\n                            VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128;\n    \n                        }\n    \n                        DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n                        DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n                        DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n                        x+=32;\n                        }\n                        y+=8;\n                    }\n    \n    \n                    ////////////////////////////////////////////////////////////////\n    \n                    // Do the bit alignment of the EOI marker\n                    if ( bytepos >= 0 ) {\n                        var fillbits = [];\n                        fillbits[1] = bytepos+1;\n                        fillbits[0] = (1<<(bytepos+1))-1;\n                        writeBits(fillbits);\n                    }\n    \n                    writeWord(0xFFD9); //EOI\n    \n                    var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join(''));\n    \n                    byteout = [];\n    \n                    // benchmarking\n                    // var duration = new Date().getTime() - time_start;\n                    // console.log('Encoding time: '+ currentQuality + 'ms');\n                    //\n    \n                    return jpegDataUri\n            }\n    \n            function setQuality(quality){\n                if (quality <= 0) {\n                    quality = 1;\n                }\n                if (quality > 100) {\n                    quality = 100;\n                }\n    \n                if(currentQuality == quality) return // don't recalc if unchanged\n    \n                var sf = 0;\n                if (quality < 50) {\n                    sf = Math.floor(5000 / quality);\n                } else {\n                    sf = Math.floor(200 - quality*2);\n                }\n    \n                initQuantTables(sf);\n                currentQuality = quality;\n                // console.log('Quality set to: '+quality +'%');\n            }\n    \n            function init(){\n                // var time_start = new Date().getTime();\n                if(!quality) quality = 50;\n                // Create tables\n                initCharLookupTable()\n                initHuffmanTbl();\n                initCategoryNumber();\n                initRGBYUVTable();\n    \n                setQuality(quality);\n                // var duration = new Date().getTime() - time_start;\n                // console.log('Initialization '+ duration + 'ms');\n            }\n    \n            init();\n    \n        };\n    \n        JPEGEncoder.encode = function( data, quality ) {\n            var encoder = new JPEGEncoder( quality );\n    \n            return encoder.encode( data );\n        }\n    \n        return JPEGEncoder;\n    });\n    /**\n     * @fileOverview Fix android canvas.toDataUrl bug.\n     */\n    define('runtime/html5/androidpatch',[\n        'runtime/html5/util',\n        'runtime/html5/jpegencoder',\n        'base'\n    ], function( Util, encoder, Base ) {\n        var origin = Util.canvasToDataUrl,\n            supportJpeg;\n    \n        Util.canvasToDataUrl = function( canvas, type, quality ) {\n            var ctx, w, h, fragement, parts;\n    \n            // 非android手机直接跳过。\n            if ( !Base.os.android ) {\n                return origin.apply( null, arguments );\n            }\n    \n            // 检测是否canvas支持jpeg导出，根据数据格式来判断。\n            // JPEG 前两位分别是：255, 216\n            if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) {\n                fragement = origin.apply( null, arguments );\n    \n                parts = fragement.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    fragement = atob( parts[ 1 ] );\n                } else {\n                    fragement = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                fragement = fragement.substring( 0, 2 );\n    \n                supportJpeg = fragement.charCodeAt( 0 ) === 255 &&\n                        fragement.charCodeAt( 1 ) === 216;\n            }\n    \n            // 只有在android环境下才修复\n            if ( type === 'image/jpeg' && !supportJpeg ) {\n                w = canvas.width;\n                h = canvas.height;\n                ctx = canvas.getContext('2d');\n    \n                return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality );\n            }\n    \n            return origin.apply( null, arguments );\n        };\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    // 强制设置成 content-type 为文件流。\n                    xhr.overrideMimeType &&\n                            xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    define('webuploader',[\n        'base',\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/log',\n        'runtime/html5/blob',\n        'runtime/html5/filepicker',\n        'runtime/html5/imagemeta/exif',\n        'runtime/html5/image',\n        'runtime/html5/androidpatch',\n        'runtime/html5/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.custom.min.js",
    "content": "/* WebUploader 0.1.5 */!function(a,b){var c,d={},e=function(a,b){var c,d,e;if(\"string\"==typeof a)return h(a);for(c=[],d=a.length,e=0;d>e;e++)c.push(h(a[e]));return b.apply(null,c)},f=function(a,b,c){2===arguments.length&&(c=b,b=null),e(b||[],function(){g(a,c,arguments)})},g=function(a,b,c){var f,g={exports:b};\"function\"==typeof b&&(c.length||(c=[e,g.exports,g]),f=b.apply(null,c),void 0!==f&&(g.exports=f)),d[a]=g.exports},h=function(b){var c=d[b]||a[b];if(!c)throw new Error(\"`\"+b+\"` is undefined\");return c},i=function(a){var b,c,e,f,g,h;h=function(a){return a&&a.charAt(0).toUpperCase()+a.substr(1)};for(b in d)if(c=a,d.hasOwnProperty(b)){for(e=b.split(\"/\"),g=h(e.pop());f=h(e.shift());)c[f]=c[f]||{},c=c[f];c[g]=d[b]}return a},j=function(c){return a.__dollar=c,i(b(a,f,e))};\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=j():\"function\"==typeof define&&define.amd?define([\"jquery\"],j):(c=a.WebUploader,a.WebUploader=j(),a.WebUploader.noConflict=function(){a.WebUploader=c})}(window,function(a,b,c){return b(\"dollar-third\",[],function(){var b=a.__dollar||a.jQuery||a.Zepto;if(!b)throw new Error(\"jQuery or Zepto not found!\");return b}),b(\"dollar\",[\"dollar-third\"],function(a){return a}),b(\"promise-builtin\",[\"dollar\"],function(a){function b(b){var c,d,e,f,g,h,i=[],j=!b&&[],k=function(a){for(h=a,c=!0,g=e||0,e=0,f=i.length,d=!0;i&&f>g;g++)i[g].apply(a[0],a[1]);d=!1,i&&(j?j.length&&k(j.shift()):i=[])},l={add:function(){if(i){var b=i.length;!function c(b){a.each(b,function(b,d){var e=a.type(d);\"function\"===e?i.push(d):d&&d.length&&\"string\"!==e&&c(d)})}(arguments),d?f=i.length:h&&(e=b,k(h))}return this},disable:function(){return i=j=h=void 0,this},lock:function(){return j=void 0,h||l.disable(),this},fireWith:function(a,b){return!i||c&&!j||(b=b||[],b=[a,b.slice?b.slice():b],d?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this}};return l}function c(d){var e=[[\"resolve\",\"done\",b(!0),\"resolved\"],[\"reject\",\"fail\",b(!0),\"rejected\"],[\"notify\",\"progress\",b()]],f=\"pending\",g={state:function(){return f},always:function(){return h.done(arguments).fail(arguments),this},then:function(){var b=arguments;return c(function(c){a.each(e,function(d,e){var f=e[0],i=a.isFunction(b[d])&&b[d];h[e[1]](function(){var b;b=i&&i.apply(this,arguments),b&&a.isFunction(b.promise)?b.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+\"With\"](this===g?c.promise():this,i?[b]:arguments)})}),b=null}).promise()},promise:function(b){return null!=b?a.extend(b,g):g}},h={};return g.pipe=g.then,a.each(e,function(a,b){var c=b[2],d=b[3];g[b[1]]=c.add,d&&c.add(function(){f=d},e[1^a][2].disable,e[2][2].lock),h[b[0]]=function(){return h[b[0]+\"With\"](this===h?g:this,arguments),this},h[b[0]+\"With\"]=c.fireWith}),g.promise(h),d&&d.call(h,h),h}var d;return d={Deferred:c,isPromise:function(a){return a&&\"function\"==typeof a.then},when:function(b){var d,e,f,g=0,h=[].slice,i=h.call(arguments),j=i.length,k=1!==j||b&&a.isFunction(b.promise)?j:0,l=1===k?b:c(),m=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?h.call(arguments):e,c===d?l.notifyWith(b,c):--k||l.resolveWith(b,c)}};if(j>1)for(d=new Array(j),e=new Array(j),f=new Array(j);j>g;g++)i[g]&&a.isFunction(i[g].promise)?i[g].promise().done(m(g,f,i)).fail(l.reject).progress(m(g,e,d)):--k;return k||l.resolveWith(f,i),l.promise()}}}),b(\"promise\",[\"promise-builtin\"],function(a){return a}),b(\"base\",[\"dollar\",\"promise\"],function(b,c){function d(a){return function(){return h.apply(a,arguments)}}function e(a,b){return function(){return a.apply(b,arguments)}}function f(a){var b;return Object.create?Object.create(a):(b=function(){},b.prototype=a,new b)}var g=function(){},h=Function.call;return{version:\"0.1.5\",$:b,Deferred:c.Deferred,isPromise:c.isPromise,when:c.when,browser:function(a){var b={},c=a.match(/WebKit\\/([\\d.]+)/),d=a.match(/Chrome\\/([\\d.]+)/)||a.match(/CriOS\\/([\\d.]+)/),e=a.match(/MSIE\\s([\\d\\.]+)/)||a.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),f=a.match(/Firefox\\/([\\d.]+)/),g=a.match(/Safari\\/([\\d.]+)/),h=a.match(/OPR\\/([\\d.]+)/);return c&&(b.webkit=parseFloat(c[1])),d&&(b.chrome=parseFloat(d[1])),e&&(b.ie=parseFloat(e[1])),f&&(b.firefox=parseFloat(f[1])),g&&(b.safari=parseFloat(g[1])),h&&(b.opera=parseFloat(h[1])),b}(navigator.userAgent),os:function(a){var b={},c=a.match(/(?:Android);?[\\s\\/]+([\\d.]+)?/),d=a.match(/(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/);return c&&(b.android=parseFloat(c[1])),d&&(b.ios=parseFloat(d[1].replace(/_/g,\".\"))),b}(navigator.userAgent),inherits:function(a,c,d){var e;return\"function\"==typeof c?(e=c,c=null):e=c&&c.hasOwnProperty(\"constructor\")?c.constructor:function(){return a.apply(this,arguments)},b.extend(!0,e,a,d||{}),e.__super__=a.prototype,e.prototype=f(a.prototype),c&&b.extend(!0,e.prototype,c),e},noop:g,bindFn:e,log:function(){return a.console?e(console.log,console):g}(),nextTick:function(){return function(a){setTimeout(a,1)}}(),slice:d([].slice),guid:function(){var a=0;return function(b){for(var c=(+new Date).toString(32),d=0;5>d;d++)c+=Math.floor(65535*Math.random()).toString(32);return(b||\"wu_\")+c+(a++).toString(32)}}(),formatSize:function(a,b,c){var d;for(c=c||[\"B\",\"K\",\"M\",\"G\",\"TB\"];(d=c.shift())&&a>1024;)a/=1024;return(\"B\"===d?a:a.toFixed(b||2))+d}}}),b(\"mediator\",[\"base\"],function(a){function b(a,b,c,d){return f.grep(a,function(a){return!(!a||b&&a.e!==b||c&&a.cb!==c&&a.cb._cb!==c||d&&a.ctx!==d)})}function c(a,b,c){f.each((a||\"\").split(h),function(a,d){c(d,b)})}function d(a,b){for(var c,d=!1,e=-1,f=a.length;++e<f;)if(c=a[e],c.cb.apply(c.ctx2,b)===!1){d=!0;break}return!d}var e,f=a.$,g=[].slice,h=/\\s+/;return e={on:function(a,b,d){var e,f=this;return b?(e=this._events||(this._events=[]),c(a,b,function(a,b){var c={e:a};c.cb=b,c.ctx=d,c.ctx2=d||f,c.id=e.length,e.push(c)}),this):this},once:function(a,b,d){var e=this;return b?(c(a,b,function(a,b){var c=function(){return e.off(a,c),b.apply(d||e,arguments)};c._cb=b,e.on(a,c,d)}),e):e},off:function(a,d,e){var g=this._events;return g?a||d||e?(c(a,d,function(a,c){f.each(b(g,a,c,e),function(){delete g[this.id]})}),this):(this._events=[],this):this},trigger:function(a){var c,e,f;return this._events&&a?(c=g.call(arguments,1),e=b(this._events,a),f=b(this._events,\"all\"),d(e,c)&&d(f,arguments)):this}},f.extend({installTo:function(a){return f.extend(a,e)}},e)}),b(\"uploader\",[\"base\",\"mediator\"],function(a,b){function c(a){this.options=d.extend(!0,{},c.options,a),this._init(this.options)}var d=a.$;return c.options={},b.installTo(c.prototype),d.each({upload:\"start-upload\",stop:\"stop-upload\",getFile:\"get-file\",getFiles:\"get-files\",addFile:\"add-file\",addFiles:\"add-file\",sort:\"sort-files\",removeFile:\"remove-file\",cancelFile:\"cancel-file\",skipFile:\"skip-file\",retry:\"retry\",isInProgress:\"is-in-progress\",makeThumb:\"make-thumb\",md5File:\"md5-file\",getDimension:\"get-dimension\",addButton:\"add-btn\",predictRuntimeType:\"predict-runtime-type\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\",reset:\"reset\"},function(a,b){c.prototype[a]=function(){return this.request(b,arguments)}}),d.extend(c.prototype,{state:\"pending\",_init:function(a){var b=this;b.request(\"init\",a,function(){b.state=\"ready\",b.trigger(\"ready\")})},option:function(a,b){var c=this.options;return arguments.length>1?void(d.isPlainObject(b)&&d.isPlainObject(c[a])?d.extend(c[a],b):c[a]=b):a?c[a]:c},getStats:function(){var a=this.request(\"get-stats\");return a?{successNum:a.numOfSuccess,progressNum:a.numOfProgress,cancelNum:a.numOfCancel,invalidNum:a.numOfInvalid,uploadFailNum:a.numOfUploadFailed,queueNum:a.numOfQueue,interruptNum:a.numofInterrupt}:{}},trigger:function(a){var c=[].slice.call(arguments,1),e=this.options,f=\"on\"+a.substring(0,1).toUpperCase()+a.substring(1);return b.trigger.apply(this,arguments)===!1||d.isFunction(e[f])&&e[f].apply(this,c)===!1||d.isFunction(this[f])&&this[f].apply(this,c)===!1||b.trigger.apply(b,[this,a].concat(c))===!1?!1:!0},destroy:function(){this.request(\"destroy\",arguments),this.off()},request:a.noop}),a.create=c.create=function(a){return new c(a)},a.Uploader=c,c}),b(\"runtime/runtime\",[\"base\",\"mediator\"],function(a,b){function c(b){this.options=d.extend({container:document.body},b),this.uid=a.guid(\"rt_\")}var d=a.$,e={},f=function(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null};return d.extend(c.prototype,{getContainer:function(){var a,b,c=this.options;return this._container?this._container:(a=d(c.container||document.body),b=d(document.createElement(\"div\")),b.attr(\"id\",\"rt_\"+this.uid),b.css({position:\"absolute\",top:\"0px\",left:\"0px\",width:\"1px\",height:\"1px\",overflow:\"hidden\"}),a.append(b),a.addClass(\"webuploader-container\"),this._container=b,this._parent=a,b)},init:a.noop,exec:a.noop,destroy:function(){this._container&&this._container.remove(),this._parent&&this._parent.removeClass(\"webuploader-container\"),this.off()}}),c.orders=\"html5,flash\",c.addRuntime=function(a,b){e[a]=b},c.hasRuntime=function(a){return!!(a?e[a]:f(e))},c.create=function(a,b){var g,h;if(b=b||c.orders,d.each(b.split(/\\s*,\\s*/g),function(){return e[this]?(g=this,!1):void 0}),g=g||f(e),!g)throw new Error(\"Runtime Error\");return h=new e[g](a)},b.installTo(c.prototype),c}),b(\"runtime/client\",[\"base\",\"mediator\",\"runtime/runtime\"],function(a,b,c){function d(b,d){var f,g=a.Deferred();this.uid=a.guid(\"client_\"),this.runtimeReady=function(a){return g.done(a)},this.connectRuntime=function(b,h){if(f)throw new Error(\"already connected!\");return g.done(h),\"string\"==typeof b&&e.get(b)&&(f=e.get(b)),f=f||e.get(null,d),f?(a.$.extend(f.options,b),f.__promise.then(g.resolve),f.__client++):(f=c.create(b,b.runtimeOrder),f.__promise=g.promise(),f.once(\"ready\",g.resolve),f.init(),e.add(f),f.__client=1),d&&(f.__standalone=d),f},this.getRuntime=function(){return f},this.disconnectRuntime=function(){f&&(f.__client--,f.__client<=0&&(e.remove(f),delete f.__promise,f.destroy()),f=null)},this.exec=function(){if(f){var c=a.slice(arguments);return b&&c.unshift(b),f.exec.apply(this,c)}},this.getRuid=function(){return f&&f.uid},this.destroy=function(a){return function(){a&&a.apply(this,arguments),this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()}}(this.destroy)}var e;return e=function(){var a={};return{add:function(b){a[b.uid]=b},get:function(b,c){var d;if(b)return a[b];for(d in a)if(!c||!a[d].__standalone)return a[d];return null},remove:function(b){delete a[b.uid]}}}(),b.installTo(d.prototype),d}),b(\"lib/blob\",[\"base\",\"runtime/client\"],function(a,b){function c(a,c){var d=this;d.source=c,d.ruid=a,this.size=c.size||0,this.type=!c.type&&this.ext&&~\"jpg,jpeg,png,gif,bmp\".indexOf(this.ext)?\"image/\"+(\"jpg\"===this.ext?\"jpeg\":this.ext):c.type||\"application/octet-stream\",b.call(d,\"Blob\"),this.uid=c.uid||this.uid,a&&d.connectRuntime(a)}return a.inherits(b,{constructor:c,slice:function(a,b){return this.exec(\"slice\",a,b)},getSource:function(){return this.source}}),c}),b(\"lib/file\",[\"base\",\"lib/blob\"],function(a,b){function c(a,c){var f;this.name=c.name||\"untitled\"+d++,f=e.exec(c.name)?RegExp.$1.toLowerCase():\"\",!f&&c.type&&(f=/\\/(jpg|jpeg|png|gif|bmp)$/i.exec(c.type)?RegExp.$1.toLowerCase():\"\",this.name+=\".\"+f),this.ext=f,this.lastModifiedDate=c.lastModifiedDate||(new Date).toLocaleString(),b.apply(this,arguments)}var d=1,e=/\\.([^.]+)$/;return a.inherits(b,c)}),b(\"lib/filepicker\",[\"base\",\"runtime/client\",\"lib/file\"],function(b,c,d){function e(a){if(a=this.options=f.extend({},e.options,a),a.container=f(a.id),!a.container.length)throw new Error(\"按钮指定错误\");a.innerHTML=a.innerHTML||a.label||a.container.html()||\"\",a.button=f(a.button||document.createElement(\"div\")),a.button.html(a.innerHTML),a.container.html(a.button),c.call(this,\"FilePicker\",!0)}var f=b.$;return e.options={button:null,container:null,label:null,innerHTML:null,multiple:!0,accept:null,name:\"file\"},b.inherits(c,{constructor:e,init:function(){var c=this,e=c.options,g=e.button;g.addClass(\"webuploader-pick\"),c.on(\"all\",function(a){var b;switch(a){case\"mouseenter\":g.addClass(\"webuploader-pick-hover\");break;case\"mouseleave\":g.removeClass(\"webuploader-pick-hover\");break;case\"change\":b=c.exec(\"getFiles\"),c.trigger(\"select\",f.map(b,function(a){return a=new d(c.getRuid(),a),a._refer=e.container,a}),e.container)}}),c.connectRuntime(e,function(){c.refresh(),c.exec(\"init\",e),c.trigger(\"ready\")}),this._resizeHandler=b.bindFn(this.refresh,this),f(a).on(\"resize\",this._resizeHandler)},refresh:function(){var a=this.getRuntime().getContainer(),b=this.options.button,c=b.outerWidth?b.outerWidth():b.width(),d=b.outerHeight?b.outerHeight():b.height(),e=b.offset();c&&d&&a.css({bottom:\"auto\",right:\"auto\",width:c+\"px\",height:d+\"px\"}).offset(e)},enable:function(){var a=this.options.button;a.removeClass(\"webuploader-pick-disable\"),this.refresh()},disable:function(){var a=this.options.button;this.getRuntime().getContainer().css({top:\"-99999px\"}),a.addClass(\"webuploader-pick-disable\")},destroy:function(){var b=this.options.button;f(a).off(\"resize\",this._resizeHandler),b.removeClass(\"webuploader-pick-disable webuploader-pick-hover webuploader-pick\")}}),e}),b(\"widgets/widget\",[\"base\",\"uploader\"],function(a,b){function c(a){if(!a)return!1;var b=a.length,c=e.type(a);return 1===a.nodeType&&b?!0:\"array\"===c||\"function\"!==c&&\"string\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a)}function d(a){this.owner=a,this.options=a.options}var e=a.$,f=b.prototype._init,g=b.prototype.destroy,h={},i=[];return e.extend(d.prototype,{init:a.noop,invoke:function(a,b){var c=this.responseMap;return c&&a in c&&c[a]in this&&e.isFunction(this[c[a]])?this[c[a]].apply(this,b):h},request:function(){return this.owner.request.apply(this.owner,arguments)}}),e.extend(b.prototype,{_init:function(){var a=this,b=a._widgets=[],c=a.options.disableWidgets||\"\";return e.each(i,function(d,e){(!c||!~c.indexOf(e._name))&&b.push(new e(a))}),f.apply(a,arguments)},request:function(b,d,e){var f,g,i,j,k=0,l=this._widgets,m=l&&l.length,n=[],o=[];for(d=c(d)?d:[d];m>k;k++)f=l[k],g=f.invoke(b,d),g!==h&&(a.isPromise(g)?o.push(g):n.push(g));return e||o.length?(i=a.when.apply(a,o),j=i.pipe?\"pipe\":\"then\",i[j](function(){var b=a.Deferred(),c=arguments;return 1===c.length&&(c=c[0]),setTimeout(function(){b.resolve(c)},1),b.promise()})[e?j:\"done\"](e||a.noop)):n[0]},destroy:function(){g.apply(this,arguments),this._widgets=null}}),b.register=d.register=function(b,c){var f,g={init:\"init\",destroy:\"destroy\",name:\"anonymous\"};return 1===arguments.length?(c=b,e.each(c,function(a){return\"_\"===a[0]||\"name\"===a?void(\"name\"===a&&(g.name=c.name)):void(g[a.replace(/[A-Z]/g,\"-$&\").toLowerCase()]=a)})):g=e.extend(g,b),c.responseMap=g,f=a.inherits(d,c),f._name=g.name,i.push(f),f},b.unRegister=d.unRegister=function(a){if(a&&\"anonymous\"!==a)for(var b=i.length;b--;)i[b]._name===a&&i.splice(b,1)},d}),b(\"widgets/filepicker\",[\"base\",\"uploader\",\"lib/filepicker\",\"widgets/widget\"],function(a,b,c){var d=a.$;return d.extend(b.options,{pick:null,accept:null}),b.register({name:\"picker\",init:function(a){return this.pickers=[],a.pick&&this.addBtn(a.pick)},refresh:function(){d.each(this.pickers,function(){this.refresh()})},addBtn:function(b){var e=this,f=e.options,g=f.accept,h=[];if(b)return d.isPlainObject(b)||(b={id:b}),d(b.id).each(function(){var i,j,k;k=a.Deferred(),i=d.extend({},b,{accept:d.isPlainObject(g)?[g]:g,swf:f.swf,runtimeOrder:f.runtimeOrder,id:this}),j=new c(i),j.once(\"ready\",k.resolve),j.on(\"select\",function(a){e.owner.request(\"add-file\",[a])}),j.init(),e.pickers.push(j),h.push(k.promise())}),a.when.apply(a,h)},disable:function(){d.each(this.pickers,function(){this.disable()})},enable:function(){d.each(this.pickers,function(){this.enable()})},destroy:function(){d.each(this.pickers,function(){this.destroy()}),this.pickers=null}})}),b(\"lib/image\",[\"base\",\"runtime/client\",\"lib/blob\"],function(a,b,c){function d(a){this.options=e.extend({},d.options,a),b.call(this,\"Image\"),this.on(\"load\",function(){this._info=this.exec(\"info\"),this._meta=this.exec(\"meta\")})}var e=a.$;return d.options={quality:90,crop:!1,preserveHeaders:!1,allowMagnify:!1},a.inherits(b,{constructor:d,info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},loadFromBlob:function(a){var b=this,c=a.getRuid();this.connectRuntime(c,function(){b.exec(\"init\",b.options),b.exec(\"loadFromBlob\",a)})},resize:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"resize\"].concat(b))},crop:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"crop\"].concat(b))},getAsDataUrl:function(a){return this.exec(\"getAsDataUrl\",a)},getAsBlob:function(a){var b=this.exec(\"getAsBlob\",a);return new c(this.getRuid(),b)}}),d}),b(\"widgets/image\",[\"base\",\"uploader\",\"lib/image\",\"widgets/widget\"],function(a,b,c){var d,e=a.$;return d=function(a){var b=0,c=[],d=function(){for(var d;c.length&&a>b;)d=c.shift(),b+=d[0],d[1]()};return function(a,e,f){c.push([e,f]),a.once(\"destroy\",function(){b-=e,setTimeout(d,1)}),setTimeout(d,1)}}(5242880),e.extend(b.options,{thumb:{width:110,height:110,quality:70,allowMagnify:!0,crop:!0,preserveHeaders:!1,type:\"image/jpeg\"},compress:{width:1600,height:1600,quality:90,allowMagnify:!1,crop:!1,preserveHeaders:!0}}),b.register({name:\"image\",makeThumb:function(a,b,f,g){var h,i;return a=this.request(\"get-file\",a),a.type.match(/^image/)?(h=e.extend({},this.options.thumb),e.isPlainObject(f)&&(h=e.extend(h,f),f=null),f=f||h.width,g=g||h.height,i=new c(h),i.once(\"load\",function(){a._info=a._info||i.info(),a._meta=a._meta||i.meta(),1>=f&&f>0&&(f=a._info.width*f),1>=g&&g>0&&(g=a._info.height*g),i.resize(f,g)}),i.once(\"complete\",function(){b(!1,i.getAsDataUrl(h.type)),i.destroy()}),i.once(\"error\",function(a){b(a||!0),i.destroy()}),void d(i,a.source.size,function(){a._info&&i.info(a._info),a._meta&&i.meta(a._meta),i.loadFromBlob(a.source)})):void b(!0)},beforeSendFile:function(b){var d,f,g=this.options.compress||this.options.resize,h=g&&g.compressSize||0,i=g&&g.noCompressIfLarger||!1;return b=this.request(\"get-file\",b),!g||!~\"image/jpeg,image/jpg\".indexOf(b.type)||b.size<h||b._compressed?void 0:(g=e.extend({},g),f=a.Deferred(),d=new c(g),f.always(function(){d.destroy(),d=null}),d.once(\"error\",f.reject),d.once(\"load\",function(){var a=g.width,c=g.height;b._info=b._info||d.info(),b._meta=b._meta||d.meta(),1>=a&&a>0&&(a=b._info.width*a),1>=c&&c>0&&(c=b._info.height*c),d.resize(a,c)}),d.once(\"complete\",function(){var a,c;try{a=d.getAsBlob(g.type),c=b.size,(!i||a.size<c)&&(b.source=a,b.size=a.size,b.trigger(\"resize\",a.size,c)),b._compressed=!0,f.resolve()}catch(e){f.resolve()}}),b._info&&d.info(b._info),b._meta&&d.meta(b._meta),d.loadFromBlob(b.source),f.promise())}})}),b(\"file\",[\"base\",\"mediator\"],function(a,b){function c(){return f+g++}function d(a){this.name=a.name||\"Untitled\",this.size=a.size||0,this.type=a.type||\"application/octet-stream\",this.lastModifiedDate=a.lastModifiedDate||1*new Date,this.id=c(),this.ext=h.exec(this.name)?RegExp.$1:\"\",this.statusText=\"\",i[this.id]=d.Status.INITED,this.source=a,this.loaded=0,this.on(\"error\",function(a){this.setStatus(d.Status.ERROR,a)})}var e=a.$,f=\"WU_FILE_\",g=0,h=/\\.([^.]+)$/,i={};return e.extend(d.prototype,{setStatus:function(a,b){var c=i[this.id];\"undefined\"!=typeof b&&(this.statusText=b),a!==c&&(i[this.id]=a,this.trigger(\"statuschange\",a,c))},getStatus:function(){return i[this.id]},getSource:function(){return this.source},destroy:function(){this.off(),delete i[this.id]}}),b.installTo(d.prototype),d.Status={INITED:\"inited\",QUEUED:\"queued\",PROGRESS:\"progress\",ERROR:\"error\",COMPLETE:\"complete\",CANCELLED:\"cancelled\",INTERRUPT:\"interrupt\",INVALID:\"invalid\"},d}),b(\"queue\",[\"base\",\"mediator\",\"file\"],function(a,b,c){function d(){this.stats={numOfQueue:0,numOfSuccess:0,numOfCancel:0,numOfProgress:0,numOfUploadFailed:0,numOfInvalid:0,numofDeleted:0,numofInterrupt:0},this._queue=[],this._map={}}var e=a.$,f=c.Status;return e.extend(d.prototype,{append:function(a){return this._queue.push(a),this._fileAdded(a),this},prepend:function(a){return this._queue.unshift(a),this._fileAdded(a),this},getFile:function(a){return\"string\"!=typeof a?a:this._map[a]},fetch:function(a){var b,c,d=this._queue.length;for(a=a||f.QUEUED,b=0;d>b;b++)if(c=this._queue[b],a===c.getStatus())return c;return null},sort:function(a){\"function\"==typeof a&&this._queue.sort(a)},getFiles:function(){for(var a,b=[].slice.call(arguments,0),c=[],d=0,f=this._queue.length;f>d;d++)a=this._queue[d],(!b.length||~e.inArray(a.getStatus(),b))&&c.push(a);return c},removeFile:function(a){var b=this._map[a.id];b&&(delete this._map[a.id],a.destroy(),this.stats.numofDeleted++)},_fileAdded:function(a){var b=this,c=this._map[a.id];c||(this._map[a.id]=a,a.on(\"statuschange\",function(a,c){b._onFileStatusChange(a,c)}))},_onFileStatusChange:function(a,b){var c=this.stats;switch(b){case f.PROGRESS:c.numOfProgress--;break;case f.QUEUED:c.numOfQueue--;break;case f.ERROR:c.numOfUploadFailed--;break;case f.INVALID:c.numOfInvalid--;break;case f.INTERRUPT:c.numofInterrupt--}switch(a){case f.QUEUED:c.numOfQueue++;break;case f.PROGRESS:c.numOfProgress++;break;case f.ERROR:c.numOfUploadFailed++;break;case f.COMPLETE:c.numOfSuccess++;break;case f.CANCELLED:c.numOfCancel++;break;case f.INVALID:c.numOfInvalid++;break;case f.INTERRUPT:c.numofInterrupt++}}}),b.installTo(d.prototype),d}),b(\"widgets/queue\",[\"base\",\"uploader\",\"queue\",\"file\",\"lib/file\",\"runtime/client\",\"widgets/widget\"],function(a,b,c,d,e,f){var g=a.$,h=/\\.\\w+$/,i=d.Status;return b.register({name:\"queue\",init:function(b){var d,e,h,i,j,k,l,m=this;if(g.isPlainObject(b.accept)&&(b.accept=[b.accept]),b.accept){for(j=[],h=0,e=b.accept.length;e>h;h++)i=b.accept[h].extensions,i&&j.push(i);j.length&&(k=\"\\\\.\"+j.join(\",\").replace(/,/g,\"$|\\\\.\").replace(/\\*/g,\".*\")+\"$\"),m.accept=new RegExp(k,\"i\")}return m.queue=new c,m.stats=m.queue.stats,\"html5\"===this.request(\"predict-runtime-type\")?(d=a.Deferred(),this.placeholder=l=new f(\"Placeholder\"),l.connectRuntime({runtimeOrder:\"html5\"},function(){m._ruid=l.getRuid(),d.resolve()}),d.promise()):void 0},_wrapFile:function(a){if(!(a instanceof d)){if(!(a instanceof e)){if(!this._ruid)throw new Error(\"Can't add external files.\");a=new e(this._ruid,a)}a=new d(a)}return a},acceptFile:function(a){var b=!a||!a.size||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b},_addFile:function(a){var b=this;return a=b._wrapFile(a),b.owner.trigger(\"beforeFileQueued\",a)?b.acceptFile(a)?(b.queue.append(a),b.owner.trigger(\"fileQueued\",a),a):void b.owner.trigger(\"error\",\"Q_TYPE_DENIED\",a):void 0},getFile:function(a){return this.queue.getFile(a)},addFile:function(a){var b=this;a.length||(a=[a]),a=g.map(a,function(a){return b._addFile(a)}),b.owner.trigger(\"filesQueued\",a),b.options.auto&&setTimeout(function(){b.request(\"start-upload\")},20)},getStats:function(){return this.stats},removeFile:function(a,b){var c=this;a=a.id?a:c.queue.getFile(a),this.request(\"cancel-file\",a),b&&this.queue.removeFile(a)},getFiles:function(){return this.queue.getFiles.apply(this.queue,arguments)},fetchFile:function(){return this.queue.fetch.apply(this.queue,arguments)},retry:function(a,b){var c,d,e,f=this;if(a)return a=a.id?a:f.queue.getFile(a),a.setStatus(i.QUEUED),void(b||f.request(\"start-upload\"));for(c=f.queue.getFiles(i.ERROR),d=0,e=c.length;e>d;d++)a=c[d],a.setStatus(i.QUEUED);f.request(\"start-upload\")},sortFiles:function(){return this.queue.sort.apply(this.queue,arguments)},reset:function(){this.owner.trigger(\"reset\"),this.queue=new c,this.stats=this.queue.stats},destroy:function(){this.reset(),this.placeholder&&this.placeholder.destroy()}})}),b(\"widgets/runtime\",[\"uploader\",\"runtime/runtime\",\"widgets/widget\"],function(a,b){return a.support=function(){return b.hasRuntime.apply(b,arguments)},a.register({name:\"runtime\",init:function(){if(!this.predictRuntimeType())throw Error(\"Runtime Error\")},predictRuntimeType:function(){var a,c,d=this.options.runtimeOrder||b.orders,e=this.type;if(!e)for(d=d.split(/\\s*,\\s*/g),a=0,c=d.length;c>a;a++)if(b.hasRuntime(d[a])){this.type=e=d[a];break}return e}})}),b(\"lib/transport\",[\"base\",\"runtime/client\",\"mediator\"],function(a,b,c){function d(a){var c=this;a=c.options=e.extend(!0,{},d.options,a||{}),b.call(this,\"Transport\"),this._blob=null,this._formData=a.formData||{},this._headers=a.headers||{},this.on(\"progress\",this._timeout),this.on(\"load error\",function(){c.trigger(\"progress\",1),clearTimeout(c._timer)})}var e=a.$;return d.options={server:\"\",method:\"POST\",withCredentials:!1,fileVal:\"file\",timeout:12e4,formData:{},headers:{},sendAsBinary:!1},e.extend(d.prototype,{appendBlob:function(a,b,c){var d=this,e=d.options;d.getRuid()&&d.disconnectRuntime(),d.connectRuntime(b.ruid,function(){d.exec(\"init\")}),d._blob=b,e.fileVal=a||e.fileVal,e.filename=c||e.filename},append:function(a,b){\"object\"==typeof a?e.extend(this._formData,a):this._formData[a]=b},setRequestHeader:function(a,b){\"object\"==typeof a?e.extend(this._headers,a):this._headers[a]=b},send:function(a){this.exec(\"send\",a),this._timeout()},abort:function(){return clearTimeout(this._timer),this.exec(\"abort\")},destroy:function(){this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()},getResponse:function(){return this.exec(\"getResponse\")},getResponseAsJson:function(){return this.exec(\"getResponseAsJson\")},getStatus:function(){return this.exec(\"getStatus\")},_timeout:function(){var a=this,b=a.options.timeout;b&&(clearTimeout(a._timer),a._timer=setTimeout(function(){a.abort(),a.trigger(\"error\",\"timeout\")},b))}}),c.installTo(d.prototype),d}),b(\"widgets/upload\",[\"base\",\"uploader\",\"file\",\"lib/transport\",\"widgets/widget\"],function(a,b,c,d){function e(a,b){var c,d,e=[],f=a.source,g=f.size,h=b?Math.ceil(g/b):1,i=0,j=0;for(d={file:a,has:function(){return!!e.length},shift:function(){return e.shift()},unshift:function(a){e.unshift(a)}};h>j;)c=Math.min(b,g-i),e.push({file:a,start:i,end:b?i+c:g,total:g,chunks:h,chunk:j++,cuted:d}),i+=c;return a.blocks=e.concat(),a.remaning=e.length,d}var f=a.$,g=a.isPromise,h=c.Status;f.extend(b.options,{prepareNextFile:!1,chunked:!1,chunkSize:5242880,chunkRetry:2,threads:3,formData:{}}),b.register({name:\"upload\",init:function(){var b=this.owner,c=this;this.runing=!1,this.progress=!1,b.on(\"startUpload\",function(){c.progress=!0}).on(\"uploadFinished\",function(){c.progress=!1}),this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this.__tick=a.bindFn(this._tick,this),b.on(\"uploadComplete\",function(a){a.blocks&&f.each(a.blocks,function(a,b){b.transport&&(b.transport.abort(),b.transport.destroy()),delete b.transport}),delete a.blocks,delete a.remaning})},reset:function(){this.request(\"stop-upload\",!0),this.runing=!1,this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this._trigged=!1,this._promise=null},startUpload:function(b){var c=this;if(f.each(c.request(\"get-files\",h.INVALID),function(){c.request(\"remove-file\",this)}),b)if(b=b.id?b:c.request(\"get-file\",b),b.getStatus()===h.INTERRUPT)f.each(c.pool,function(a,c){c.file===b&&c.transport&&c.transport.send()}),b.setStatus(h.QUEUED);else{if(b.getStatus()===h.PROGRESS)return;b.setStatus(h.QUEUED)}else f.each(c.request(\"get-files\",[h.INITED]),function(){this.setStatus(h.QUEUED)});if(!c.runing){c.runing=!0;var d=[];f.each(c.pool,function(a,b){var e=b.file;e.getStatus()===h.INTERRUPT&&(d.push(e),c._trigged=!1,b.transport&&b.transport.send())});for(var b;b=d.shift();)b.setStatus(h.PROGRESS);b||f.each(c.request(\"get-files\",h.INTERRUPT),function(){this.setStatus(h.PROGRESS)}),c._trigged=!1,a.nextTick(c.__tick),c.owner.trigger(\"startUpload\")}},stopUpload:function(b,c){var d=this;if(b===!0&&(c=b,b=null),d.runing!==!1){if(b){if(b=b.id?b:d.request(\"get-file\",b),b.getStatus()!==h.PROGRESS&&b.getStatus()!==h.QUEUED)return;return b.setStatus(h.INTERRUPT),f.each(d.pool,function(a,c){c.file===b&&(c.transport&&c.transport.abort(),d._putback(c),d._popBlock(c))}),a.nextTick(d.__tick)}d.runing=!1,this._promise&&this._promise.file&&this._promise.file.setStatus(h.INTERRUPT),c&&f.each(d.pool,function(a,b){b.transport&&b.transport.abort(),b.file.setStatus(h.INTERRUPT)}),d.owner.trigger(\"stopUpload\")}},cancelFile:function(a){a=a.id?a:this.request(\"get-file\",a),a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),a.setStatus(h.CANCELLED),this.owner.trigger(\"fileDequeued\",a)},isInProgress:function(){return!!this.progress},_getStats:function(){return this.request(\"get-stats\")},skipFile:function(a,b){a=a.id?a:this.request(\"get-file\",a),a.setStatus(b||h.COMPLETE),a.skipped=!0,a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),this.owner.trigger(\"uploadSkip\",a)},_tick:function(){var b,c,d=this,e=d.options;return d._promise?d._promise.always(d.__tick):void(d.pool.length<e.threads&&(c=d._nextBlock())?(d._trigged=!1,b=function(b){d._promise=null,b&&b.file&&d._startSend(b),a.nextTick(d.__tick)},d._promise=g(c)?c.always(b):b(c)):d.remaning||d._getStats().numOfQueue||d._getStats().numofInterrupt||(d.runing=!1,d._trigged||a.nextTick(function(){d.owner.trigger(\"uploadFinished\")}),d._trigged=!0))},_putback:function(a){var b;a.cuted.unshift(a),b=this.stack.indexOf(a.cuted),~b||this.stack.unshift(a.cuted)},_getStack:function(){for(var a,b=0;a=this.stack[b++];){if(a.has()&&a.file.getStatus()===h.PROGRESS)return a;(!a.has()||a.file.getStatus()!==h.PROGRESS&&a.file.getStatus()!==h.INTERRUPT)&&this.stack.splice(--b,1)}return null},_nextBlock:function(){var a,b,c,d,f=this,h=f.options;return(a=this._getStack())?(h.prepareNextFile&&!f.pending.length&&f._prepareNextFile(),a.shift()):f.runing?(!f.pending.length&&f._getStats().numOfQueue&&f._prepareNextFile(),b=f.pending.shift(),c=function(b){return b?(a=e(b,h.chunked?h.chunkSize:0),f.stack.push(a),a.shift()):null},g(b)?(d=b.file,b=b[b.pipe?\"pipe\":\"then\"](c),b.file=d,b):c(b)):void 0},_prepareNextFile:function(){var a,b=this,c=b.request(\"fetch-file\"),d=b.pending;c&&(a=b.request(\"before-send-file\",c,function(){return c.getStatus()===h.PROGRESS||c.getStatus()===h.INTERRUPT?c:b._finishFile(c)}),b.owner.trigger(\"uploadStart\",c),c.setStatus(h.PROGRESS),a.file=c,a.done(function(){var b=f.inArray(a,d);~b&&d.splice(b,1,c)}),a.fail(function(a){c.setStatus(h.ERROR,a),b.owner.trigger(\"uploadError\",c,a),b.owner.trigger(\"uploadComplete\",c)}),d.push(a))},_popBlock:function(a){var b=f.inArray(a,this.pool);this.pool.splice(b,1),a.file.remaning--,this.remaning--},_startSend:function(b){var c,d=this,e=b.file;return e.getStatus()!==h.PROGRESS?void(e.getStatus()===h.INTERRUPT&&d._putback(b)):(d.pool.push(b),d.remaning++,b.blob=1===b.chunks?e.source:e.source.slice(b.start,b.end),c=d.request(\"before-send\",b,function(){e.getStatus()===h.PROGRESS?d._doSend(b):(d._popBlock(b),a.nextTick(d.__tick))}),void c.fail(function(){1===e.remaning?d._finishFile(e).always(function(){b.percentage=1,d._popBlock(b),d.owner.trigger(\"uploadComplete\",e),a.nextTick(d.__tick)}):(b.percentage=1,d.updateFileProgress(e),d._popBlock(b),a.nextTick(d.__tick))}))},_doSend:function(b){var c,e,g=this,i=g.owner,j=g.options,k=b.file,l=new d(j),m=f.extend({},j.formData),n=f.extend({},j.headers);b.transport=l,l.on(\"destroy\",function(){delete b.transport,g._popBlock(b),a.nextTick(g.__tick)}),l.on(\"progress\",function(a){b.percentage=a,g.updateFileProgress(k)}),c=function(a){var c;return e=l.getResponseAsJson()||{},e._raw=l.getResponse(),c=function(b){a=b},i.trigger(\"uploadAccept\",b,e,c)||(a=a||\"server\"),a},l.on(\"error\",function(a,d){b.retried=b.retried||0,b.chunks>1&&~\"http,abort\".indexOf(a)&&b.retried<j.chunkRetry?(b.retried++,l.send()):(d||\"server\"!==a||(a=c(a)),k.setStatus(h.ERROR,a),i.trigger(\"uploadError\",k,a),i.trigger(\"uploadComplete\",k))}),l.on(\"load\",function(){var a;return(a=c())?void l.trigger(\"error\",a,!0):void(1===k.remaning?g._finishFile(k,e):l.destroy())}),m=f.extend(m,{id:k.id,name:k.name,type:k.type,lastModifiedDate:k.lastModifiedDate,size:k.size}),b.chunks>1&&f.extend(m,{chunks:b.chunks,chunk:b.chunk}),i.trigger(\"uploadBeforeSend\",b,m,n),l.appendBlob(j.fileVal,b.blob,k.name),l.append(m),l.setRequestHeader(n),l.send()},_finishFile:function(a,b,c){var d=this.owner;return d.request(\"after-send-file\",arguments,function(){a.setStatus(h.COMPLETE),d.trigger(\"uploadSuccess\",a,b,c)\n}).fail(function(b){a.getStatus()===h.PROGRESS&&a.setStatus(h.ERROR,b),d.trigger(\"uploadError\",a,b)}).always(function(){d.trigger(\"uploadComplete\",a)})},updateFileProgress:function(a){var b=0,c=0;a.blocks&&(f.each(a.blocks,function(a,b){c+=(b.percentage||0)*(b.end-b.start)}),b=c/a.size,this.owner.trigger(\"uploadProgress\",a,b||0))}})}),b(\"widgets/log\",[\"base\",\"uploader\",\"widgets/widget\"],function(a,b){function c(a){var b=e.extend({},d,a),c=f.replace(/^(.*)\\?/,\"$1\"+e.param(b)),g=new Image;g.src=c}var d,e=a.$,f=\" http://static.tieba.baidu.com/tb/pms/img/st.gif??\",g=(location.hostname||location.host||\"protected\").toLowerCase(),h=g&&/baidu/i.exec(g);if(h)return d={dv:3,master:\"webuploader\",online:/test/.exec(g)?0:1,module:\"\",product:g,type:0},b.register({name:\"log\",init:function(){var a=this.owner,b=0,d=0;a.on(\"error\",function(a){c({type:2,c_error_code:a})}).on(\"uploadError\",function(a,b){c({type:2,c_error_code:\"UPLOAD_ERROR\",c_reason:\"\"+b})}).on(\"uploadComplete\",function(a){b++,d+=a.size}).on(\"uploadFinished\",function(){c({c_count:b,c_size:d}),b=d=0}),c({c_usage:1})}})}),b(\"runtime/compbase\",[],function(){function a(a,b){this.owner=a,this.options=a.options,this.getRuntime=function(){return b},this.getRuid=function(){return b.uid},this.trigger=function(){return a.trigger.apply(a,arguments)}}return a}),b(\"runtime/html5/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a={},d=this,e=this.destroy;c.apply(d,arguments),d.type=f,d.exec=function(c,e){var f,h=this,i=h.uid,j=b.slice(arguments,2);return g[c]&&(f=a[i]=a[i]||new g[c](h,d),f[e])?f[e].apply(f,j):void 0},d.destroy=function(){return e&&e.apply(this,arguments)}}var f=\"html5\",g={};return b.inherits(c,{constructor:e,init:function(){var a=this;setTimeout(function(){a.trigger(\"ready\")},1)}}),e.register=function(a,c){var e=g[a]=b.inherits(d,c);return e},a.Blob&&a.FileReader&&a.DataView&&c.addRuntime(f,e),e}),b(\"runtime/html5/blob\",[\"runtime/html5/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.owner.source,e=d.slice||d.webkitSlice||d.mozSlice;return d=e.call(d,a,c),new b(this.getRuid(),d)}})}),b(\"runtime/html5/filepicker\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(){var a,b,d,e,f=this.getRuntime().getContainer(),g=this,h=g.owner,i=g.options,j=this.label=c(document.createElement(\"label\")),k=this.input=c(document.createElement(\"input\"));if(k.attr(\"type\",\"file\"),k.attr(\"name\",i.name),k.addClass(\"webuploader-element-invisible\"),j.on(\"click\",function(){k.trigger(\"click\")}),j.css({opacity:0,width:\"100%\",height:\"100%\",display:\"block\",cursor:\"pointer\",background:\"#ffffff\"}),i.multiple&&k.attr(\"multiple\",\"multiple\"),i.accept&&i.accept.length>0){for(a=[],b=0,d=i.accept.length;d>b;b++)a.push(i.accept[b].mimeTypes);k.attr(\"accept\",a.join(\",\"))}f.append(k),f.append(j),e=function(a){h.trigger(a.type)},k.on(\"change\",function(a){var b,d=arguments.callee;g.files=a.target.files,b=this.cloneNode(!0),b.value=null,this.parentNode.replaceChild(b,this),k.off(),k=c(b).on(\"change\",d).on(\"mouseenter mouseleave\",e),h.trigger(\"change\")}),j.on(\"mouseenter mouseleave\",e)},getFiles:function(){return this.files},destroy:function(){this.input.off(),this.label.off()}})}),b(\"runtime/html5/util\",[\"base\"],function(b){var c=a.createObjectURL&&a||a.URL&&URL.revokeObjectURL&&URL||a.webkitURL,d=b.noop,e=d;return c&&(d=function(){return c.createObjectURL.apply(c,arguments)},e=function(){return c.revokeObjectURL.apply(c,arguments)}),{createObjectURL:d,revokeObjectURL:e,dataURL2Blob:function(a){var b,c,d,e,f,g;for(g=a.split(\",\"),b=~g[0].indexOf(\"base64\")?atob(g[1]):decodeURIComponent(g[1]),d=new ArrayBuffer(b.length),c=new Uint8Array(d),e=0;e<b.length;e++)c[e]=b.charCodeAt(e);return f=g[0].split(\":\")[1].split(\";\")[0],this.arrayBufferToBlob(d,f)},dataURL2ArrayBuffer:function(a){var b,c,d,e;for(e=a.split(\",\"),b=~e[0].indexOf(\"base64\")?atob(e[1]):decodeURIComponent(e[1]),c=new Uint8Array(b.length),d=0;d<b.length;d++)c[d]=b.charCodeAt(d);return c.buffer},arrayBufferToBlob:function(b,c){var d,e=a.BlobBuilder||a.WebKitBlobBuilder;return e?(d=new e,d.append(b),d.getBlob(c)):new Blob([b],c?{type:c}:{})},canvasToDataUrl:function(a,b,c){return a.toDataURL(b,c/100)},parseMeta:function(a,b){b(!1,{})},updateImageHead:function(a){return a}}}),b(\"runtime/html5/imagemeta\",[\"runtime/html5/util\"],function(a){var b;return b={parsers:{65505:[]},maxMetaDataSize:262144,parse:function(a,b){var c=this,d=new FileReader;d.onload=function(){b(!1,c._parse(this.result)),d=d.onload=d.onerror=null},d.onerror=function(a){b(a.message),d=d.onload=d.onerror=null},a=a.slice(0,c.maxMetaDataSize),d.readAsArrayBuffer(a.getSource())},_parse:function(a,c){if(!(a.byteLength<6)){var d,e,f,g,h=new DataView(a),i=2,j=h.byteLength-4,k=i,l={};if(65496===h.getUint16(0)){for(;j>i&&(d=h.getUint16(i),d>=65504&&65519>=d||65534===d)&&(e=h.getUint16(i+2)+2,!(i+e>h.byteLength));){if(f=b.parsers[d],!c&&f)for(g=0;g<f.length;g+=1)f[g].call(b,h,i,e,l);i+=e,k=i}k>6&&(l.imageHead=a.slice?a.slice(2,k):new Uint8Array(a).subarray(2,k))}return l}},updateImageHead:function(a,b){var c,d,e,f=this._parse(a,!0);return e=2,f.imageHead&&(e=2+f.imageHead.byteLength),d=a.slice?a.slice(e):new Uint8Array(a).subarray(e),c=new Uint8Array(b.byteLength+2+d.byteLength),c[0]=255,c[1]=216,c.set(new Uint8Array(b),2),c.set(new Uint8Array(d),b.byteLength+2),c.buffer}},a.parseMeta=function(){return b.parse.apply(b,arguments)},a.updateImageHead=function(){return b.updateImageHead.apply(b,arguments)},b}),b(\"runtime/html5/imagemeta/exif\",[\"base\",\"runtime/html5/imagemeta\"],function(a,b){var c={};return c.ExifMap=function(){return this},c.ExifMap.prototype.map={Orientation:274},c.ExifMap.prototype.get=function(a){return this[a]||this[this.map[a]]},c.exifTagTypes={1:{getValue:function(a,b){return a.getUint8(b)},size:1},2:{getValue:function(a,b){return String.fromCharCode(a.getUint8(b))},size:1,ascii:!0},3:{getValue:function(a,b,c){return a.getUint16(b,c)},size:2},4:{getValue:function(a,b,c){return a.getUint32(b,c)},size:4},5:{getValue:function(a,b,c){return a.getUint32(b,c)/a.getUint32(b+4,c)},size:8},9:{getValue:function(a,b,c){return a.getInt32(b,c)},size:4},10:{getValue:function(a,b,c){return a.getInt32(b,c)/a.getInt32(b+4,c)},size:8}},c.exifTagTypes[7]=c.exifTagTypes[1],c.getExifValue=function(b,d,e,f,g,h){var i,j,k,l,m,n,o=c.exifTagTypes[f];if(!o)return void a.log(\"Invalid Exif data: Invalid tag type.\");if(i=o.size*g,j=i>4?d+b.getUint32(e+8,h):e+8,j+i>b.byteLength)return void a.log(\"Invalid Exif data: Invalid data offset.\");if(1===g)return o.getValue(b,j,h);for(k=[],l=0;g>l;l+=1)k[l]=o.getValue(b,j+l*o.size,h);if(o.ascii){for(m=\"\",l=0;l<k.length&&(n=k[l],\"\\x00\"!==n);l+=1)m+=n;return m}return k},c.parseExifTag=function(a,b,d,e,f){var g=a.getUint16(d,e);f.exif[g]=c.getExifValue(a,b,d,a.getUint16(d+2,e),a.getUint32(d+4,e),e)},c.parseExifTags=function(b,c,d,e,f){var g,h,i;if(d+6>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory offset.\");if(g=b.getUint16(d,e),h=d+2+12*g,h+4>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory size.\");for(i=0;g>i;i+=1)this.parseExifTag(b,c,d+2+12*i,e,f);return b.getUint32(h,e)},c.parseExifData=function(b,d,e,f){var g,h,i=d+10;if(1165519206===b.getUint32(d+4)){if(i+8>b.byteLength)return void a.log(\"Invalid Exif data: Invalid segment size.\");if(0!==b.getUint16(d+8))return void a.log(\"Invalid Exif data: Missing byte alignment offset.\");switch(b.getUint16(i)){case 18761:g=!0;break;case 19789:g=!1;break;default:return void a.log(\"Invalid Exif data: Invalid byte alignment marker.\")}if(42!==b.getUint16(i+2,g))return void a.log(\"Invalid Exif data: Missing TIFF marker.\");h=b.getUint32(i+4,g),f.exif=new c.ExifMap,h=c.parseExifTags(b,i,i+h,g,f)}},b.parsers[65505].push(c.parseExifData),c}),b(\"runtime/html5/image\",[\"base\",\"runtime/html5/runtime\",\"runtime/html5/util\"],function(a,b,c){var d=\"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D\";return b.register(\"Image\",{modified:!1,init:function(){var a=this,b=new Image;b.onload=function(){a._info={type:a.type,width:this.width,height:this.height},a._metas||\"image/jpeg\"!==a.type?a.owner.trigger(\"load\"):c.parseMeta(a._blob,function(b,c){a._metas=c,a.owner.trigger(\"load\")})},b.onerror=function(){a.owner.trigger(\"error\")},a._img=b},loadFromBlob:function(a){var b=this,d=b._img;b._blob=a,b.type=a.type,d.src=c.createObjectURL(a.getSource()),b.owner.once(\"load\",function(){c.revokeObjectURL(d.src)})},resize:function(a,b){var c=this._canvas||(this._canvas=document.createElement(\"canvas\"));this._resize(this._img,c,a,b),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"resize\")},crop:function(a,b,c,d,e){var f=this._canvas||(this._canvas=document.createElement(\"canvas\")),g=this.options,h=this._img,i=h.naturalWidth,j=h.naturalHeight,k=this.getOrientation();e=e||1,f.width=c,f.height=d,g.preserveHeaders||this._rotate2Orientaion(f,k),this._renderImageToCanvas(f,h,-a,-b,i*e,j*e),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"crop\")},getAsBlob:function(a){var b,d=this._blob,e=this.options;if(a=a||this.type,this.modified||this.type!==a){if(b=this._canvas,\"image/jpeg\"===a){if(d=c.canvasToDataUrl(b,a,e.quality),e.preserveHeaders&&this._metas&&this._metas.imageHead)return d=c.dataURL2ArrayBuffer(d),d=c.updateImageHead(d,this._metas.imageHead),d=c.arrayBufferToBlob(d,a)}else d=c.canvasToDataUrl(b,a);d=c.dataURL2Blob(d)}return d},getAsDataUrl:function(a){var b=this.options;return a=a||this.type,\"image/jpeg\"===a?c.canvasToDataUrl(this._canvas,a,b.quality):this._canvas.toDataURL(a)},getOrientation:function(){return this._metas&&this._metas.exif&&this._metas.exif.get(\"Orientation\")||1},info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},destroy:function(){var a=this._canvas;this._img.onload=null,a&&(a.getContext(\"2d\").clearRect(0,0,a.width,a.height),a.width=a.height=0,this._canvas=null),this._img.src=d,this._img=this._blob=null},_resize:function(a,b,c,d){var e,f,g,h,i,j=this.options,k=a.width,l=a.height,m=this.getOrientation();~[5,6,7,8].indexOf(m)&&(c^=d,d^=c,c^=d),e=Math[j.crop?\"max\":\"min\"](c/k,d/l),j.allowMagnify||(e=Math.min(1,e)),f=k*e,g=l*e,j.crop?(b.width=c,b.height=d):(b.width=f,b.height=g),h=(b.width-f)/2,i=(b.height-g)/2,j.preserveHeaders||this._rotate2Orientaion(b,m),this._renderImageToCanvas(b,a,h,i,f,g)},_rotate2Orientaion:function(a,b){var c=a.width,d=a.height,e=a.getContext(\"2d\");switch(b){case 5:case 6:case 7:case 8:a.width=d,a.height=c}switch(b){case 2:e.translate(c,0),e.scale(-1,1);break;case 3:e.translate(c,d),e.rotate(Math.PI);break;case 4:e.translate(0,d),e.scale(1,-1);break;case 5:e.rotate(.5*Math.PI),e.scale(1,-1);break;case 6:e.rotate(.5*Math.PI),e.translate(0,-d);break;case 7:e.rotate(.5*Math.PI),e.translate(c,-d),e.scale(-1,1);break;case 8:e.rotate(-.5*Math.PI),e.translate(-c,0)}},_renderImageToCanvas:function(){function b(a,b,c){var d,e,f,g=document.createElement(\"canvas\"),h=g.getContext(\"2d\"),i=0,j=c,k=c;for(g.width=1,g.height=c,h.drawImage(a,0,0),d=h.getImageData(0,0,1,c).data;k>i;)e=d[4*(k-1)+3],0===e?j=k:i=k,k=j+i>>1;return f=k/c,0===f?1:f}function c(a){var b,c,d=a.naturalWidth,e=a.naturalHeight;return d*e>1048576?(b=document.createElement(\"canvas\"),b.width=b.height=1,c=b.getContext(\"2d\"),c.drawImage(a,-d+1,0),0===c.getImageData(0,0,1,1).data[3]):!1}return a.os.ios?a.os.ios>=7?function(a,c,d,e,f,g){var h=c.naturalWidth,i=c.naturalHeight,j=b(c,h,i);return a.getContext(\"2d\").drawImage(c,0,0,h*j,i*j,d,e,f,g)}:function(a,d,e,f,g,h){var i,j,k,l,m,n,o,p=d.naturalWidth,q=d.naturalHeight,r=a.getContext(\"2d\"),s=c(d),t=\"image/jpeg\"===this.type,u=1024,v=0,w=0;for(s&&(p/=2,q/=2),r.save(),i=document.createElement(\"canvas\"),i.width=i.height=u,j=i.getContext(\"2d\"),k=t?b(d,p,q):1,l=Math.ceil(u*g/p),m=Math.ceil(u*h/q/k);q>v;){for(n=0,o=0;p>n;)j.clearRect(0,0,u,u),j.drawImage(d,-n,-v),r.drawImage(i,0,0,u,u,e+o,f+w,l,m),n+=u,o+=l;v+=u,w+=m}r.restore(),i=j=null}:function(b){var c=a.slice(arguments,1),d=b.getContext(\"2d\");d.drawImage.apply(d,c)}}()})}),b(\"runtime/html5/jpegencoder\",[],function(){function a(a){function b(a){for(var b=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],c=0;64>c;c++){var d=y((b[c]*a+50)/100);1>d?d=1:d>255&&(d=255),z[P[c]]=d}for(var e=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],f=0;64>f;f++){var g=y((e[f]*a+50)/100);1>g?g=1:g>255&&(g=255),A[P[f]]=g}for(var h=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],i=0,j=0;8>j;j++)for(var k=0;8>k;k++)B[i]=1/(z[P[i]]*h[j]*h[k]*8),C[i]=1/(A[P[i]]*h[j]*h[k]*8),i++}function c(a,b){for(var c=0,d=0,e=new Array,f=1;16>=f;f++){for(var g=1;g<=a[f];g++)e[b[d]]=[],e[b[d]][0]=c,e[b[d]][1]=f,d++,c++;c*=2}return e}function d(){t=c(Q,R),u=c(U,V),v=c(S,T),w=c(W,X)}function e(){for(var a=1,b=2,c=1;15>=c;c++){for(var d=a;b>d;d++)E[32767+d]=c,D[32767+d]=[],D[32767+d][1]=c,D[32767+d][0]=d;for(var e=-(b-1);-a>=e;e++)E[32767+e]=c,D[32767+e]=[],D[32767+e][1]=c,D[32767+e][0]=b-1+e;a<<=1,b<<=1}}function f(){for(var a=0;256>a;a++)O[a]=19595*a,O[a+256>>0]=38470*a,O[a+512>>0]=7471*a+32768,O[a+768>>0]=-11059*a,O[a+1024>>0]=-21709*a,O[a+1280>>0]=32768*a+8421375,O[a+1536>>0]=-27439*a,O[a+1792>>0]=-5329*a}function g(a){for(var b=a[0],c=a[1]-1;c>=0;)b&1<<c&&(I|=1<<J),c--,J--,0>J&&(255==I?(h(255),h(0)):h(I),J=7,I=0)}function h(a){H.push(N[a])}function i(a){h(a>>8&255),h(255&a)}function j(a,b){var c,d,e,f,g,h,i,j,k,l=0,m=8,n=64;for(k=0;m>k;++k){c=a[l],d=a[l+1],e=a[l+2],f=a[l+3],g=a[l+4],h=a[l+5],i=a[l+6],j=a[l+7];var o=c+j,p=c-j,q=d+i,r=d-i,s=e+h,t=e-h,u=f+g,v=f-g,w=o+u,x=o-u,y=q+s,z=q-s;a[l]=w+y,a[l+4]=w-y;var A=.707106781*(z+x);a[l+2]=x+A,a[l+6]=x-A,w=v+t,y=t+r,z=r+p;var B=.382683433*(w-z),C=.5411961*w+B,D=1.306562965*z+B,E=.707106781*y,G=p+E,H=p-E;a[l+5]=H+C,a[l+3]=H-C,a[l+1]=G+D,a[l+7]=G-D,l+=8}for(l=0,k=0;m>k;++k){c=a[l],d=a[l+8],e=a[l+16],f=a[l+24],g=a[l+32],h=a[l+40],i=a[l+48],j=a[l+56];var I=c+j,J=c-j,K=d+i,L=d-i,M=e+h,N=e-h,O=f+g,P=f-g,Q=I+O,R=I-O,S=K+M,T=K-M;a[l]=Q+S,a[l+32]=Q-S;var U=.707106781*(T+R);a[l+16]=R+U,a[l+48]=R-U,Q=P+N,S=N+L,T=L+J;var V=.382683433*(Q-T),W=.5411961*Q+V,X=1.306562965*T+V,Y=.707106781*S,Z=J+Y,$=J-Y;a[l+40]=$+W,a[l+24]=$-W,a[l+8]=Z+X,a[l+56]=Z-X,l++}var _;for(k=0;n>k;++k)_=a[k]*b[k],F[k]=_>0?_+.5|0:_-.5|0;return F}function k(){i(65504),i(16),h(74),h(70),h(73),h(70),h(0),h(1),h(1),h(0),i(1),i(1),h(0),h(0)}function l(a,b){i(65472),i(17),h(8),i(b),i(a),h(3),h(1),h(17),h(0),h(2),h(17),h(1),h(3),h(17),h(1)}function m(){i(65499),i(132),h(0);for(var a=0;64>a;a++)h(z[a]);h(1);for(var b=0;64>b;b++)h(A[b])}function n(){i(65476),i(418),h(0);for(var a=0;16>a;a++)h(Q[a+1]);for(var b=0;11>=b;b++)h(R[b]);h(16);for(var c=0;16>c;c++)h(S[c+1]);for(var d=0;161>=d;d++)h(T[d]);h(1);for(var e=0;16>e;e++)h(U[e+1]);for(var f=0;11>=f;f++)h(V[f]);h(17);for(var g=0;16>g;g++)h(W[g+1]);for(var j=0;161>=j;j++)h(X[j])}function o(){i(65498),i(12),h(3),h(1),h(0),h(2),h(17),h(3),h(17),h(0),h(63),h(0)}function p(a,b,c,d,e){for(var f,h=e[0],i=e[240],k=16,l=63,m=64,n=j(a,b),o=0;m>o;++o)G[P[o]]=n[o];var p=G[0]-c;c=G[0],0==p?g(d[0]):(f=32767+p,g(d[E[f]]),g(D[f]));for(var q=63;q>0&&0==G[q];q--);if(0==q)return g(h),c;for(var r,s=1;q>=s;){for(var t=s;0==G[s]&&q>=s;++s);var u=s-t;if(u>=k){r=u>>4;for(var v=1;r>=v;++v)g(i);u=15&u}f=32767+G[s],g(e[(u<<4)+E[f]]),g(D[f]),s++}return q!=l&&g(h),c}function q(){for(var a=String.fromCharCode,b=0;256>b;b++)N[b]=a(b)}function r(a){if(0>=a&&(a=1),a>100&&(a=100),x!=a){var c=0;c=Math.floor(50>a?5e3/a:200-2*a),b(c),x=a}}function s(){a||(a=50),q(),d(),e(),f(),r(a)}var t,u,v,w,x,y=(Math.round,Math.floor),z=new Array(64),A=new Array(64),B=new Array(64),C=new Array(64),D=new Array(65535),E=new Array(65535),F=new Array(64),G=new Array(64),H=[],I=0,J=7,K=new Array(64),L=new Array(64),M=new Array(64),N=new Array(256),O=new Array(2048),P=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],Q=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],R=[0,1,2,3,4,5,6,7,8,9,10,11],S=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],T=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],U=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],V=[0,1,2,3,4,5,6,7,8,9,10,11],W=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],X=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];this.encode=function(a,b){b&&r(b),H=new Array,I=0,J=7,i(65496),k(),m(),l(a.width,a.height),n(),o();var c=0,d=0,e=0;I=0,J=7,this.encode.displayName=\"_encode_\";for(var f,h,j,q,s,x,y,z,A,D=a.data,E=a.width,F=a.height,G=4*E,N=0;F>N;){for(f=0;G>f;){for(s=G*N+f,x=s,y=-1,z=0,A=0;64>A;A++)z=A>>3,y=4*(7&A),x=s+z*G+y,N+z>=F&&(x-=G*(N+1+z-F)),f+y>=G&&(x-=f+y-G+4),h=D[x++],j=D[x++],q=D[x++],K[A]=(O[h]+O[j+256>>0]+O[q+512>>0]>>16)-128,L[A]=(O[h+768>>0]+O[j+1024>>0]+O[q+1280>>0]>>16)-128,M[A]=(O[h+1280>>0]+O[j+1536>>0]+O[q+1792>>0]>>16)-128;c=p(K,B,c,t,v),d=p(L,C,d,u,w),e=p(M,C,e,u,w),f+=32}N+=8}if(J>=0){var P=[];P[1]=J+1,P[0]=(1<<J+1)-1,g(P)}i(65497);var Q=\"data:image/jpeg;base64,\"+btoa(H.join(\"\"));return H=[],Q},s()}return a.encode=function(b,c){var d=new a(c);return d.encode(b)},a}),b(\"runtime/html5/androidpatch\",[\"runtime/html5/util\",\"runtime/html5/jpegencoder\",\"base\"],function(a,b,c){var d,e=a.canvasToDataUrl;a.canvasToDataUrl=function(a,f,g){var h,i,j,k,l;return c.os.android?(\"image/jpeg\"===f&&\"undefined\"==typeof d&&(k=e.apply(null,arguments),l=k.split(\",\"),k=~l[0].indexOf(\"base64\")?atob(l[1]):decodeURIComponent(l[1]),k=k.substring(0,2),d=255===k.charCodeAt(0)&&216===k.charCodeAt(1)),\"image/jpeg\"!==f||d?e.apply(null,arguments):(i=a.width,j=a.height,h=a.getContext(\"2d\"),b.encode(h.getImageData(0,0,i,j),g))):e.apply(null,arguments)}}),b(\"runtime/html5/transport\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.noop,d=a.$;return b.register(\"Transport\",{init:function(){this._status=0,this._response=null},send:function(){var b,c,e,f=this.owner,g=this.options,h=this._initAjax(),i=f._blob,j=g.server;g.sendAsBinary?(j+=(/\\?/.test(j)?\"&\":\"?\")+d.param(f._formData),c=i.getSource()):(b=new FormData,d.each(f._formData,function(a,c){b.append(a,c)}),b.append(g.fileVal,i.getSource(),g.filename||f._formData.name||\"\")),g.withCredentials&&\"withCredentials\"in h?(h.open(g.method,j,!0),h.withCredentials=!0):h.open(g.method,j),this._setRequestHeader(h,g.headers),c?(h.overrideMimeType&&h.overrideMimeType(\"application/octet-stream\"),a.os.android?(e=new FileReader,e.onload=function(){h.send(this.result),e=e.onload=null},e.readAsArrayBuffer(c)):h.send(c)):h.send(b)},getResponse:function(){return this._response},getResponseAsJson:function(){return this._parseJson(this._response)},getStatus:function(){return this._status},abort:function(){var a=this._xhr;a&&(a.upload.onprogress=c,a.onreadystatechange=c,a.abort(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var a=this,b=new XMLHttpRequest,d=this.options;return!d.withCredentials||\"withCredentials\"in b||\"undefined\"==typeof XDomainRequest||(b=new XDomainRequest),b.upload.onprogress=function(b){var c=0;return b.lengthComputable&&(c=b.loaded/b.total),a.trigger(\"progress\",c)},b.onreadystatechange=function(){return 4===b.readyState?(b.upload.onprogress=c,b.onreadystatechange=c,a._xhr=null,a._status=b.status,b.status>=200&&b.status<300?(a._response=b.responseText,a.trigger(\"load\")):b.status>=500&&b.status<600?(a._response=b.responseText,a.trigger(\"error\",\"server\")):a.trigger(\"error\",a._status?\"http\":\"abort\")):void 0},a._xhr=b,b},_setRequestHeader:function(a,b){d.each(b,function(b,c){a.setRequestHeader(b,c)})},_parseJson:function(a){var b;try{b=JSON.parse(a)}catch(c){b={}}return b}})}),b(\"webuploader\",[\"base\",\"widgets/filepicker\",\"widgets/image\",\"widgets/queue\",\"widgets/runtime\",\"widgets/upload\",\"widgets/log\",\"runtime/html5/blob\",\"runtime/html5/filepicker\",\"runtime/html5/imagemeta/exif\",\"runtime/html5/image\",\"runtime/html5/androidpatch\",\"runtime/html5/transport\"],function(a){return a}),c(\"webuploader\")});"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.fis.js",
    "content": "/*! WebUploader 0.1.5 */\n\n\nvar jQuery = require('example:widget/ui/jquery/jquery.js')\n\nreturn (function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n\n            return obj;\n        },\n\n        makeExport = function( dollar ) {\n            root.__dollar = dollar;\n\n            // exports every module.\n            return exportsTo( factory( root, _define, _require ) );\n        };\n\n    return makeExport( jQuery );\n})( window, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        var $ = window.__dollar || window.jQuery || window.Zepto;\n    \n        if ( !$ ) {\n            throw new Error('jQuery or Zepto not found!');\n        }\n    \n        return $;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id为该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.5',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match( /(?:trident)(?:.*rv:([\\w.]+))?/i ),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数noop](#WebUploader:Base.noop)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            cancelFile: 'cancel-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            md5File: 'md5-file',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            predictRuntimeType: 'predict-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     compress: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.option( 'compress', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `progressNum` 上传中的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `queueNum` 还在队列中的文件数\n             * * `interruptNum` 被暂停的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return stats ? {\n                    successNum: stats.numOfSuccess,\n                    progressNum: stats.numOfProgress,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue,\n                    interruptNum: stats.numofInterrupt\n                } : {};\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            /**\n             * 销毁 webuploader 实例\n             * @method destroy\n             * @grammar destroy() => undefined\n             */\n            destroy: function() {\n                this.request( 'destroy', arguments );\n                this.off();\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                this._parent = parent;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                this._container && this._container.remove();\n                this._parent && this._parent.removeClass('webuploader-container');\n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            _destroy = Uploader.prototype.destroy,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            /**\n             * @property {String | Array} [disableWidgets=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 默认所有 Uploader.register 了的 widget 都会被加载，如果禁用某一部分，请通过此 option 指定黑名单。\n             */\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [],\n                    deactives = me.options.disableWidgets || '';\n    \n                $.each( widgetClass, function( _, klass ) {\n                    (!deactives || !~deactives.indexOf( klass._name )) &&\n                        widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets && widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个 tick 中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                if ( args.length === 1 ) {\n                                    args = args[ 0 ];\n                                }\n    \n                                setTimeout(function() {\n                                    deferred.resolve( args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ callback ? key : 'done' ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            },\n    \n            destroy: function() {\n                _destroy.apply( this, arguments );\n                this._widgets = null;\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @grammar Uploader.register(proto);\n         * @grammar Uploader.register(map, proto);\n         * @param  {object} responseMap API 名称与函数实现的映射\n         * @param  {object} proto 组件原型，构造函数通过 constructor 属性定义\n         * @method Uploader.register\n         * @for Uploader\n         * @example\n         * Uploader.register({\n         *     'make-thumb': 'makeThumb'\n         * }, {\n         *     init: function( options ) {},\n         *     makeThumb: function() {}\n         * });\n         *\n         * Uploader.register({\n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init', destroy: 'destroy', name: 'anonymous' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n    \n                // 自动生成 map 表。\n                $.each(widgetProto, function(key) {\n                    if ( key[0] === '_' || key === 'name' ) {\n                        key === 'name' && (map.name = widgetProto.name);\n                        return;\n                    }\n    \n                    map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key;\n                });\n    \n            } else {\n                map = $.extend( map, responseMap );\n            }\n    \n            widgetProto.responseMap = map;\n            klass = Base.inherits( Widget, widgetProto );\n            klass._name = map.name;\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        /**\n         * 删除插件，只有在注册时指定了名字的才能被删除。\n         * @grammar Uploader.unRegister(name);\n         * @param  {string} name 组件名字\n         * @method Uploader.unRegister\n         * @for Uploader\n         * @example\n         *\n         * Uploader.register({\n         *     name: 'custom',\n         *     \n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         *\n         * Uploader.unRegister('custom');\n         */\n        Uploader.unRegister = Widget.unRegister = function( name ) {\n            if ( !name || name === 'anonymous' ) {\n                return;\n            }\n            \n            // 删除指定的插件。\n            for ( var i = widgetClass.length; i--; ) {\n                if ( widgetClass[i]._name === name ) {\n                    widgetClass.splice(i, 1)\n                }\n            }\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n        \n        /**\n         * @property {Selector} [disableGlobalDnd=false]  是否禁掉整个页面的拖拽功能，如果不禁用，图片拖进来的时候会默认被浏览器打开。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            name: 'dnd',\n            \n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                this.dnd = dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.dnd && this.dnd.destroy();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            name: 'paste',\n            \n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                this.paste = paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.paste && this.paste.destroy();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n            this.size = source.size || 0;\n    \n            // 如果没有指定 mimetype, 但是知道文件后缀。\n            if ( !source.type && this.ext &&\n                    ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) {\n                this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext);\n            } else {\n                this.type = source.type || 'application/octet-stream';\n            }\n    \n            RuntimeClient.call( me, 'Blob' );\n            this.uid = source.uid || this.uid;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n            // 如果有 mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && file.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n    \n            Blob.apply( this, arguments );\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                this._resizeHandler = Base.bindFn( this.refresh, this );\n                $( window ).on( 'resize', this._resizeHandler );\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                var btn = this.options.button;\n                $( window ).off( 'resize', this._resizeHandler );\n                btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' +\n                    'webuploader-pick');\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor|dom} 指定选择文件的按钮容器，不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            name: 'picker',\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addBtn( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addBtn: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    promises = [];\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                $( pick.id ).each(function() {\n                    var options, picker, deferred;\n    \n                    deferred = Base.Deferred();\n    \n                    options = $.extend({}, pick, {\n                        accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                        swf: opts.swf,\n                        runtimeOrder: opts.runtimeOrder,\n                        id: this\n                    });\n    \n                    picker = new FilePicker( options );\n    \n                    picker.once( 'ready', deferred.resolve );\n                    picker.on( 'select', function( files ) {\n                        me.owner.request( 'add-file', [ files ]);\n                    });\n                    picker.init();\n    \n                    me.pickers.push( picker );\n    \n                    promises.push( deferred.promise() );\n                });\n    \n                return Base.when.apply( Base, promises );\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            },\n    \n            destroy: function() {\n                $.each( this.pickers, function() {\n                    this.destroy();\n                });\n                this.pickers = null;\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: false,\n    \n            // 是否允许放大。\n            allowMagnify: false\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            crop: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'crop' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true,\n             *\n             *     // 如果发现压缩后文件大小比原来还大，则使用原来图片\n             *     // 此属性可能会影响图片自动纠正功能\n             *     noCompressIfLarger: false,\n             *\n             *     // 单位字节，如果图片大小小于此值，不会采用压缩。\n             *     compressSize: 0\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n    \n            name: 'image',\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * 当 width 或者 height 的值介于 0 - 1 时，被当成百分比使用。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             * 也可以借助服务端，将 base64 数据传给服务端，生成一个临时文件供预览。\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n    \n                    // 如果 width 的值介于 0 - 1\n                    // 说明设置的是百分比。\n                    if ( width <= 1 && width > 0 ) {\n                        width = file._info.width * width;\n                    }\n    \n                    // 同样的规则应用于 height\n                    if ( height <= 1 && height > 0 ) {\n                        height = file._info.height * height;\n                    }\n    \n                    image.resize( width, height );\n                });\n    \n                // 当 resize 完后\n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function( reason ) {\n                    cb( reason || true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            beforeSendFile: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 0,\n                    noCompressIfLarger = opts && opts.noCompressIfLarger || false,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只压缩 jpeg 图片格式。\n                // gif 可能会丢失针\n                // bmp png 基本上尺寸都不大，且压缩比比较小。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    var width = opts.width,\n                        height = opts.height;\n    \n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n    \n                    // 如果 width 的值介于 0 - 1\n                    // 说明设置的是百分比。\n                    if ( width <= 1 && width > 0 ) {\n                        width = file._info.width * width;\n                    }\n    \n                    // 同样的规则应用于 height\n                    if ( height <= 1 && height > 0 ) {\n                        height = file._info.height * height;\n                    }\n    \n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( !noCompressIfLarger || blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application/octet-stream'\n             */\n            this.type = source.type || 'application/octet-stream';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destroy: function() {\n                this.off();\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被取消的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * * `numofDeleted` 被移除的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0,\n                numofDeleted: 0,\n                numofInterrupt: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            /**\n             * 在队列中删除文件。\n             * @grammar removeFile( file ) => Array\n             * @method removeFile\n             * @param {File} 文件对象。\n             */\n            removeFile: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( existing ) {\n                    delete this._map[ file.id ];\n                    file.destroy();\n                    this.stats.numofDeleted++;\n                }\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            name: 'queue',\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                this.placeholder = runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || !file.size || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n            \n            /**\n             * @property {Boolean} [auto=false]\n             * @namespace options\n             * @for Uploader\n             * @description 设置为 true 后，不需要手动调用上传，有文件选择即开始上传。\n             * \n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFile: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    setTimeout(function() {\n                        me.request('start-upload');\n                    }, 20 );\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n             /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @grammar removeFile( file, true ) => undefined\n             * @grammar removeFile( id, true ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件, 默认只会标记文件状态为已取消，如果第二个参数为 `true` 则会从 queue 中移除。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file, remove ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                this.request( 'cancel-file', file );\n    \n                if ( remove ) {\n                    this.queue.removeFile( file );\n                }\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @event reset\n             * @description 当 uploader 被重置的时候触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.owner.trigger('reset');\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            },\n    \n            destroy: function() {\n                this.reset();\n                this.placeholder && this.placeholder.destroy();\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        /**\n         * @property {Object} [runtimeOrder=html5,flash]\n         * @namespace options\n         * @for Uploader\n         * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持，如果支持则使用 html5, 否则则使用 flash.\n         *\n         * 可以将此值设置成 `flash`，来强制使用 flash 运行时。\n         */\n    \n        return Uploader.register({\n            name: 'runtime',\n    \n            init: function() {\n                if ( !this.predictRuntimeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntimeType() => String\n             * @method predictRuntimeType\n             * @for  Uploader\n             */\n            predictRuntimeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData={}]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: {}\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len, api;\n    \n            api = {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                shift: function() {\n                    return pending.shift();\n                },\n    \n                unshift: function( block ) {\n                    pending.unshift( block );\n                }\n            };\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++,\n                    cuted: api\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return api;\n        }\n    \n        Uploader.register({\n            name: 'upload',\n    \n            init: function() {\n                var owner = this.owner,\n                    me = this;\n    \n                this.runing = false;\n                this.progress = false;\n    \n                owner\n                    .on( 'startUpload', function() {\n                        me.progress = true;\n                    })\n                    .on( 'uploadFinished', function() {\n                        me.progress = false;\n                    });\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存分好片的文件。\n                this.stack = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片在上传中但是没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n    \n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            reset: function() {\n                this.request( 'stop-upload', true );\n                this.runing = false;\n                this.pool = [];\n                this.stack = [];\n                this.pending = [];\n                this.remaning = 0;\n                this._trigged = false;\n                this._promise = null;\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             *\n             * 可以指定开始某一个文件。\n             * @grammar upload() => undefined\n             * @grammar upload( file | fileId) => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            startUpload: function(file) {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                // 如果指定了开始某个文件，则只开始指定文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if (file.getStatus() === Status.INTERRUPT) {\n                        $.each( me.pool, function( _, v ) {\n    \n                            // 之前暂停过。\n                            if (v.file !== file) {\n                                return;\n                            }\n    \n                            v.transport && v.transport.send();\n                        });\n    \n                        file.setStatus( Status.QUEUED );\n                    } else if (file.getStatus() === Status.PROGRESS) {\n                        return;\n                    } else {\n                        file.setStatus( Status.QUEUED );\n                    }\n                } else {\n                    $.each( me.request( 'get-files', [ Status.INITED ] ), function() {\n                        this.setStatus( Status.QUEUED );\n                    });\n                }\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                var files = [];\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        files.push(file);\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                var file;\n                while ( (file = files.shift()) ) {\n                    file.setStatus( Status.PROGRESS );\n                }\n    \n                file || $.each( me.request( 'get-files',\n                        Status.INTERRUPT ), function() {\n                    this.setStatus( Status.PROGRESS );\n                });\n    \n                me._trigged = false;\n                Base.nextTick( me.__tick );\n                me.owner.trigger('startUpload');\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             *\n             * 如果第一个参数是文件，则只暂停指定文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @grammar stop( file ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stopUpload: function( file, interrupt ) {\n                var me = this;\n    \n                if (file === true) {\n                    interrupt = file;\n                    file = null;\n                }\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                // 如果只是暂停某个文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if ( file.getStatus() !== Status.PROGRESS &&\n                            file.getStatus() !== Status.QUEUED ) {\n                        return;\n                    }\n    \n                    file.setStatus( Status.INTERRUPT );\n                    $.each( me.pool, function( _, v ) {\n    \n                        // 只 abort 指定的文件。\n                        if (v.file !== file) {\n                            return;\n                        }\n    \n                        v.transport && v.transport.abort();\n                        me._putback(v);\n                        me._popBlock(v);\n                    });\n    \n                    return Base.nextTick( me.__tick );\n                }\n    \n                me.runing = false;\n    \n                if (this._promise && this._promise.file) {\n                    this._promise.file.setStatus( Status.INTERRUPT );\n                }\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * @method cancelFile\n             * @grammar cancelFile( file ) => undefined\n             * @grammar cancelFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 标记文件状态为已取消, 同时将中断文件传输。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.cancelFile( file );\n             * })\n             */\n            cancelFile: function( file ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                file.setStatus( Status.CANCELLED );\n                this.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.progress;\n            },\n    \n            _getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me._getStats().numOfQueue &&\n                    !me._getStats().numofInterrupt ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _putback: function(block) {\n                var idx;\n    \n                block.cuted.unshift(block);\n                idx = this.stack.indexOf(block.cuted);\n    \n                if (!~idx) {\n                    this.stack.unshift(block.cuted);\n                }\n            },\n    \n            _getStack: function() {\n                var i = 0,\n                    act;\n    \n                while ( (act = this.stack[ i++ ]) ) {\n                    if ( act.has() && act.file.getStatus() === Status.PROGRESS ) {\n                        return act;\n                    } else if (!act.has() ||\n                            act.file.getStatus() !== Status.PROGRESS &&\n                            act.file.getStatus() !== Status.INTERRUPT ) {\n    \n                        // 把已经处理完了的，或者，状态为非 progress（上传中）、\n                        // interupt（暂停中） 的移除。\n                        this.stack.splice( --i, 1 );\n                    }\n                }\n    \n                return null;\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    opts = me.options,\n                    act, next, done, preparing;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( (act = this._getStack()) ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.shift();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me._getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me.stack.push(act);\n                        return act.shift();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    if ( isPromise( next) ) {\n                        preparing = next.file;\n                        next = next[ next.pipe ? 'pipe' : 'then' ]( done );\n                        next.file = preparing;\n                        return next;\n                    }\n    \n                    return done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.PROGRESS ||\n                            file.getStatus() === Status.INTERRUPT ) {\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    me.owner.trigger( 'uploadStart', file );\n                    file.setStatus( Status.PROGRESS );\n    \n                    promise.file = file;\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                // 有可能在 before-send-file 的 promise 期间改变了文件状态。\n                // 如：暂停，取消\n                // 我们不能中断 promise, 但是可以在 promise 完后，不做上传操作。\n                if ( file.getStatus() !== Status.PROGRESS ) {\n    \n                    // 如果是中断，则还需要放回去。\n                    if (file.getStatus() === Status.INTERRUPT) {\n                        me._putback(block);\n                    }\n    \n                    return;\n                }\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me.updateFileProgress( file );\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @param {Object} headers 可以扩展此对象来控制上传头部。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    block.percentage = percentage;\n                    me.updateFileProgress( file );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            },\n    \n            updateFileProgress: function(file) {\n                var totalPercent = 0,\n                    uploaded = 0;\n    \n                if (!file.blocks) {\n                    return;\n                }\n    \n                $.each( file.blocks, function( _, v ) {\n                    uploaded += (v.percentage || 0) * (v.end - v.start);\n                });\n    \n                totalPercent = uploaded / file.size;\n                this.owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            name: 'validator',\n    \n            init: function() {\n                var me = this;\n                Base.nextTick(function() {\n                    $.each( validators, function() {\n                        this.call( me.owner );\n                    });\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileNumLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileSizeLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', max, file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {Boolean} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n    \n            uploader.on( 'reset', function() {\n                mapping = {};\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Md5\n     */\n    define('lib/md5',[\n        'runtime/client',\n        'mediator'\n    ], function( RuntimeClient, Mediator ) {\n    \n        function Md5() {\n            RuntimeClient.call( this, 'Md5' );\n        }\n    \n        // 让 Md5 具备事件功能。\n        Mediator.installTo( Md5.prototype );\n    \n        Md5.prototype.loadFromBlob = function( blob ) {\n            var me = this;\n    \n            if ( me.getRuid() ) {\n                me.disconnectRuntime();\n            }\n    \n            // 连接到blob归属的同一个runtime.\n            me.connectRuntime( blob.ruid, function() {\n                me.exec('init');\n                me.exec( 'loadFromBlob', blob );\n            });\n        };\n    \n        Md5.prototype.getResult = function() {\n            return this.exec('getResult');\n        };\n    \n        return Md5;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/md5',[\n        'base',\n        'uploader',\n        'lib/md5',\n        'lib/blob',\n        'widgets/widget'\n    ], function( Base, Uploader, Md5, Blob ) {\n    \n        return Uploader.register({\n            name: 'md5',\n    \n    \n            /**\n             * 计算文件 md5 值，返回一个 promise 对象，可以监听 progress 进度。\n             *\n             *\n             * @method md5File\n             * @grammar md5File( file[, start[, end]] ) => promise\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.md5File( file )\n             *\n             *         // 及时显示进度\n             *         .progress(function(percentage) {\n             *             console.log('Percentage:', percentage);\n             *         })\n             *\n             *         // 完成\n             *         .then(function(val) {\n             *             console.log('md5 result:', val);\n             *         });\n             *\n             * });\n             */\n            md5File: function( file, start, end ) {\n                var md5 = new Md5(),\n                    deferred = Base.Deferred(),\n                    blob = (file instanceof Blob) ? file :\n                        this.request( 'get-file', file ).source;\n    \n                md5.on( 'progress load', function( e ) {\n                    e = e || {};\n                    deferred.notify( e.total ? e.loaded / e.total : 1 );\n                });\n    \n                md5.on( 'complete', function() {\n                    deferred.resolve( md5.getResult() );\n                });\n    \n                md5.on( 'error', function( reason ) {\n                    deferred.reject( reason );\n                });\n    \n                if ( arguments.length > 1 ) {\n                    start = start || 0;\n                    end = end || 0;\n                    start < 0 && (start = blob.size + start);\n                    end < 0 && (end = blob.size + end);\n                    end = Math.min( end, blob.size );\n                    blob = blob.slice( start, end );\n                }\n    \n                md5.loadFromBlob( blob );\n    \n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destroy = this.destroy;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\r\n     * @fileOverview FilePaste\r\n     */\r\n    define('runtime/html5/dnd',[\r\n        'base',\r\n        'runtime/html5/runtime',\r\n        'lib/file'\r\n    ], function( Base, Html5Runtime, File ) {\r\n    \r\n        var $ = Base.$,\r\n            prefix = 'webuploader-dnd-';\r\n    \r\n        return Html5Runtime.register( 'DragAndDrop', {\r\n            init: function() {\r\n                var elem = this.elem = this.options.container;\r\n    \r\n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\r\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\r\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\r\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\r\n                this.dndOver = false;\r\n    \r\n                elem.on( 'dragenter', this.dragEnterHandler );\r\n                elem.on( 'dragover', this.dragOverHandler );\r\n                elem.on( 'dragleave', this.dragLeaveHandler );\r\n                elem.on( 'drop', this.dropHandler );\r\n    \r\n                if ( this.options.disableGlobalDnd ) {\r\n                    $( document ).on( 'dragover', this.dragOverHandler );\r\n                    $( document ).on( 'drop', this.dropHandler );\r\n                }\r\n            },\r\n    \r\n            _dragEnterHandler: function( e ) {\r\n                var me = this,\r\n                    denied = me._denied || false,\r\n                    items;\r\n    \r\n                e = e.originalEvent || e;\r\n    \r\n                if ( !me.dndOver ) {\r\n                    me.dndOver = true;\r\n    \r\n                    // 注意只有 chrome 支持。\r\n                    items = e.dataTransfer.items;\r\n    \r\n                    if ( items && items.length ) {\r\n                        me._denied = denied = !me.trigger( 'accept', items );\r\n                    }\r\n    \r\n                    me.elem.addClass( prefix + 'over' );\r\n                    me.elem[ denied ? 'addClass' :\r\n                            'removeClass' ]( prefix + 'denied' );\r\n                }\r\n    \r\n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\r\n    \r\n                return false;\r\n            },\r\n    \r\n            _dragOverHandler: function( e ) {\r\n                // 只处理框内的。\r\n                var parentElem = this.elem.parent().get( 0 );\r\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\r\n                    return false;\r\n                }\r\n    \r\n                clearTimeout( this._leaveTimer );\r\n                this._dragEnterHandler.call( this, e );\r\n    \r\n                return false;\r\n            },\r\n    \r\n            _dragLeaveHandler: function() {\r\n                var me = this,\r\n                    handler;\r\n    \r\n                handler = function() {\r\n                    me.dndOver = false;\r\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\r\n                };\r\n    \r\n                clearTimeout( me._leaveTimer );\r\n                me._leaveTimer = setTimeout( handler, 100 );\r\n                return false;\r\n            },\r\n    \r\n            _dropHandler: function( e ) {\r\n                var me = this,\r\n                    ruid = me.getRuid(),\r\n                    parentElem = me.elem.parent().get( 0 ),\r\n                    dataTransfer, data;\r\n    \r\n                // 只处理框内的。\r\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\r\n                    return false;\r\n                }\r\n    \r\n                e = e.originalEvent || e;\r\n                dataTransfer = e.dataTransfer;\r\n    \r\n                // 如果是页面内拖拽，还不能处理，不阻止事件。\r\n                // 此处 ie11 下会报参数错误，\r\n                try {\r\n                    data = dataTransfer.getData('text/html');\r\n                } catch( err ) {\r\n                }\r\n    \r\n                if ( data ) {\r\n                    return;\r\n                }\r\n    \r\n                me._getTansferFiles( dataTransfer, function( results ) {\r\n                    me.trigger( 'drop', $.map( results, function( file ) {\r\n                        return new File( ruid, file );\r\n                    }) );\r\n                });\r\n    \r\n                me.dndOver = false;\r\n                me.elem.removeClass( prefix + 'over' );\r\n                return false;\r\n            },\r\n    \r\n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\r\n            _getTansferFiles: function( dataTransfer, callback ) {\r\n                var results  = [],\r\n                    promises = [],\r\n                    items, files, file, item, i, len, canAccessFolder;\r\n    \r\n                items = dataTransfer.items;\r\n                files = dataTransfer.files;\r\n    \r\n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\r\n    \r\n                for ( i = 0, len = files.length; i < len; i++ ) {\r\n                    file = files[ i ];\r\n                    item = items && items[ i ];\r\n    \r\n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\r\n    \r\n                        promises.push( this._traverseDirectoryTree(\r\n                                item.webkitGetAsEntry(), results ) );\r\n                    } else {\r\n                        results.push( file );\r\n                    }\r\n                }\r\n    \r\n                Base.when.apply( Base, promises ).done(function() {\r\n    \r\n                    if ( !results.length ) {\r\n                        return;\r\n                    }\r\n    \r\n                    callback( results );\r\n                });\r\n            },\r\n    \r\n            _traverseDirectoryTree: function( entry, results ) {\r\n                var deferred = Base.Deferred(),\r\n                    me = this;\r\n    \r\n                if ( entry.isFile ) {\r\n                    entry.file(function( file ) {\r\n                        results.push( file );\r\n                        deferred.resolve();\r\n                    });\r\n                } else if ( entry.isDirectory ) {\r\n                    entry.createReader().readEntries(function( entries ) {\r\n                        var len = entries.length,\r\n                            promises = [],\r\n                            arr = [],    // 为了保证顺序。\r\n                            i;\r\n    \r\n                        for ( i = 0; i < len; i++ ) {\r\n                            promises.push( me._traverseDirectoryTree(\r\n                                    entries[ i ], arr ) );\r\n                        }\r\n    \r\n                        Base.when.apply( Base, promises ).then(function() {\r\n                            results.push.apply( results, arr );\r\n                            deferred.resolve();\r\n                        }, deferred.reject );\r\n                    });\r\n                }\r\n    \r\n                return deferred.promise();\r\n            },\r\n    \r\n            destroy: function() {\r\n                var elem = this.elem;\r\n    \r\n                // 还没 init 就调用 destroy\r\n                if (!elem) {\r\n                    return;\r\n                }\r\n                \r\n                elem.off( 'dragenter', this.dragEnterHandler );\r\n                elem.off( 'dragover', this.dragOverHandler );\r\n                elem.off( 'dragleave', this.dragLeaveHandler );\r\n                elem.off( 'drop', this.dropHandler );\r\n    \r\n                if ( this.options.disableGlobalDnd ) {\r\n                    $( document ).off( 'dragover', this.dragOverHandler );\r\n                    $( document ).off( 'drop', this.dropHandler );\r\n                }\r\n            }\r\n        });\r\n    });\r\n    \n    /**\r\n     * @fileOverview FilePaste\r\n     */\r\n    define('runtime/html5/filepaste',[\r\n        'base',\r\n        'runtime/html5/runtime',\r\n        'lib/file'\r\n    ], function( Base, Html5Runtime, File ) {\r\n    \r\n        return Html5Runtime.register( 'FilePaste', {\r\n            init: function() {\r\n                var opts = this.options,\r\n                    elem = this.elem = opts.container,\r\n                    accept = '.*',\r\n                    arr, i, len, item;\r\n    \r\n                // accetp的mimeTypes中生成匹配正则。\r\n                if ( opts.accept ) {\r\n                    arr = [];\r\n    \r\n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\r\n                        item = opts.accept[ i ].mimeTypes;\r\n                        item && arr.push( item );\r\n                    }\r\n    \r\n                    if ( arr.length ) {\r\n                        accept = arr.join(',');\r\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\r\n                    }\r\n                }\r\n                this.accept = accept = new RegExp( accept, 'i' );\r\n                this.hander = Base.bindFn( this._pasteHander, this );\r\n                elem.on( 'paste', this.hander );\r\n            },\r\n    \r\n            _pasteHander: function( e ) {\r\n                var allowed = [],\r\n                    ruid = this.getRuid(),\r\n                    items, item, blob, i, len;\r\n    \r\n                e = e.originalEvent || e;\r\n                items = e.clipboardData.items;\r\n    \r\n                for ( i = 0, len = items.length; i < len; i++ ) {\r\n                    item = items[ i ];\r\n    \r\n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\r\n                        continue;\r\n                    }\r\n    \r\n                    allowed.push( new File( ruid, blob ) );\r\n                }\r\n    \r\n                if ( allowed.length ) {\r\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\r\n                    e.preventDefault();\r\n                    e.stopPropagation();\r\n                    this.trigger( 'paste', allowed );\r\n                }\r\n            },\r\n    \r\n            destroy: function() {\r\n                this.elem.off( 'paste', this.hander );\r\n            }\r\n        });\r\n    });\r\n    \n    /**\r\n     * @fileOverview FilePicker\r\n     */\r\n    define('runtime/html5/filepicker',[\r\n        'base',\r\n        'runtime/html5/runtime'\r\n    ], function( Base, Html5Runtime ) {\r\n    \r\n        var $ = Base.$;\r\n    \r\n        return Html5Runtime.register( 'FilePicker', {\r\n            init: function() {\r\n                var container = this.getRuntime().getContainer(),\r\n                    me = this,\r\n                    owner = me.owner,\r\n                    opts = me.options,\r\n                    label = this.label = $( document.createElement('label') ),\r\n                    input =  this.input = $( document.createElement('input') ),\r\n                    arr, i, len, mouseHandler;\r\n    \r\n                input.attr( 'type', 'file' );\r\n                input.attr( 'name', opts.name );\r\n                input.addClass('webuploader-element-invisible');\r\n    \r\n                label.on( 'click', function() {\r\n                    input.trigger('click');\r\n                });\r\n    \r\n                label.css({\r\n                    opacity: 0,\r\n                    width: '100%',\r\n                    height: '100%',\r\n                    display: 'block',\r\n                    cursor: 'pointer',\r\n                    background: '#ffffff'\r\n                });\r\n    \r\n                if ( opts.multiple ) {\r\n                    input.attr( 'multiple', 'multiple' );\r\n                }\r\n    \r\n                // @todo Firefox不支持单独指定后缀\r\n                if ( opts.accept && opts.accept.length > 0 ) {\r\n                    arr = [];\r\n    \r\n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\r\n                        arr.push( opts.accept[ i ].mimeTypes );\r\n                    }\r\n    \r\n                    input.attr( 'accept', arr.join(',') );\r\n                }\r\n    \r\n                container.append( input );\r\n                container.append( label );\r\n    \r\n                mouseHandler = function( e ) {\r\n                    owner.trigger( e.type );\r\n                };\r\n    \r\n                input.on( 'change', function( e ) {\r\n                    var fn = arguments.callee,\r\n                        clone;\r\n    \r\n                    me.files = e.target.files;\r\n    \r\n                    // reset input\r\n                    clone = this.cloneNode( true );\r\n                    clone.value = null;\r\n                    this.parentNode.replaceChild( clone, this );\r\n    \r\n                    input.off();\r\n                    input = $( clone ).on( 'change', fn )\r\n                            .on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n                    owner.trigger('change');\r\n                });\r\n    \r\n                label.on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n            },\r\n    \r\n    \r\n            getFiles: function() {\r\n                return this.files;\r\n            },\r\n    \r\n            destroy: function() {\r\n                this.input.off();\r\n                this.label.off();\r\n            }\r\n        });\r\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/util',[\n        'base'\n    ], function( Base ) {\n    \n        var urlAPI = window.createObjectURL && window ||\n                window.URL && URL.revokeObjectURL && URL ||\n                window.webkitURL,\n            createObjectURL = Base.noop,\n            revokeObjectURL = createObjectURL;\n    \n        if ( urlAPI ) {\n    \n            // 更安全的方式调用，比如android里面就能把context改成其他的对象。\n            createObjectURL = function() {\n                return urlAPI.createObjectURL.apply( urlAPI, arguments );\n            };\n    \n            revokeObjectURL = function() {\n                return urlAPI.revokeObjectURL.apply( urlAPI, arguments );\n            };\n        }\n    \n        return {\n            createObjectURL: createObjectURL,\n            revokeObjectURL: revokeObjectURL,\n    \n            dataURL2Blob: function( dataURI ) {\n                var byteStr, intArray, ab, i, mimetype, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                ab = new ArrayBuffer( byteStr.length );\n                intArray = new Uint8Array( ab );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ];\n    \n                return this.arrayBufferToBlob( ab, mimetype );\n            },\n    \n            dataURL2ArrayBuffer: function( dataURI ) {\n                var byteStr, intArray, i, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                intArray = new Uint8Array( byteStr.length );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                return intArray.buffer;\n            },\n    \n            arrayBufferToBlob: function( buffer, type ) {\n                var builder = window.BlobBuilder || window.WebKitBlobBuilder,\n                    bb;\n    \n                // android不支持直接new Blob, 只能借助blobbuilder.\n                if ( builder ) {\n                    bb = new builder();\n                    bb.append( buffer );\n                    return bb.getBlob( type );\n                }\n    \n                return new Blob([ buffer ], type ? { type: type } : {} );\n            },\n    \n            // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg.\n            // 你得到的结果是png.\n            canvasToDataUrl: function( canvas, type, quality ) {\n                return canvas.toDataURL( type, quality / 100 );\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            parseMeta: function( blob, callback ) {\n                callback( false, {});\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            updateImageHead: function( data ) {\n                return data;\n            }\n        };\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/imagemeta',[\n        'runtime/html5/util'\n    ], function( Util ) {\n    \n        var api;\n    \n        api = {\n            parsers: {\n                0xffe1: []\n            },\n    \n            maxMetaDataSize: 262144,\n    \n            parse: function( blob, cb ) {\n                var me = this,\n                    fr = new FileReader();\n    \n                fr.onload = function() {\n                    cb( false, me._parse( this.result ) );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                fr.onerror = function( e ) {\n                    cb( e.message );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                blob = blob.slice( 0, me.maxMetaDataSize );\n                fr.readAsArrayBuffer( blob.getSource() );\n            },\n    \n            _parse: function( buffer, noParse ) {\n                if ( buffer.byteLength < 6 ) {\n                    return;\n                }\n    \n                var dataview = new DataView( buffer ),\n                    offset = 2,\n                    maxOffset = dataview.byteLength - 4,\n                    headLength = offset,\n                    ret = {},\n                    markerBytes, markerLength, parsers, i;\n    \n                if ( dataview.getUint16( 0 ) === 0xffd8 ) {\n    \n                    while ( offset < maxOffset ) {\n                        markerBytes = dataview.getUint16( offset );\n    \n                        if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef ||\n                                markerBytes === 0xfffe ) {\n    \n                            markerLength = dataview.getUint16( offset + 2 ) + 2;\n    \n                            if ( offset + markerLength > dataview.byteLength ) {\n                                break;\n                            }\n    \n                            parsers = api.parsers[ markerBytes ];\n    \n                            if ( !noParse && parsers ) {\n                                for ( i = 0; i < parsers.length; i += 1 ) {\n                                    parsers[ i ].call( api, dataview, offset,\n                                            markerLength, ret );\n                                }\n                            }\n    \n                            offset += markerLength;\n                            headLength = offset;\n                        } else {\n                            break;\n                        }\n                    }\n    \n                    if ( headLength > 6 ) {\n                        if ( buffer.slice ) {\n                            ret.imageHead = buffer.slice( 2, headLength );\n                        } else {\n                            // Workaround for IE10, which does not yet\n                            // support ArrayBuffer.slice:\n                            ret.imageHead = new Uint8Array( buffer )\n                                    .subarray( 2, headLength );\n                        }\n                    }\n                }\n    \n                return ret;\n            },\n    \n            updateImageHead: function( buffer, head ) {\n                var data = this._parse( buffer, true ),\n                    buf1, buf2, bodyoffset;\n    \n    \n                bodyoffset = 2;\n                if ( data.imageHead ) {\n                    bodyoffset = 2 + data.imageHead.byteLength;\n                }\n    \n                if ( buffer.slice ) {\n                    buf2 = buffer.slice( bodyoffset );\n                } else {\n                    buf2 = new Uint8Array( buffer ).subarray( bodyoffset );\n                }\n    \n                buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength );\n    \n                buf1[ 0 ] = 0xFF;\n                buf1[ 1 ] = 0xD8;\n                buf1.set( new Uint8Array( head ), 2 );\n                buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 );\n    \n                return buf1.buffer;\n            }\n        };\n    \n        Util.parseMeta = function() {\n            return api.parse.apply( api, arguments );\n        };\n    \n        Util.updateImageHead = function() {\n            return api.updateImageHead.apply( api, arguments );\n        };\n    \n        return api;\n    });\n    /**\n     * 代码来自于：https://github.com/blueimp/JavaScript-Load-Image\n     * 暂时项目中只用了orientation.\n     *\n     * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail.\n     * @fileOverview EXIF解析\n     */\n    \n    // Sample\n    // ====================================\n    // Make : Apple\n    // Model : iPhone 4S\n    // Orientation : 1\n    // XResolution : 72 [72/1]\n    // YResolution : 72 [72/1]\n    // ResolutionUnit : 2\n    // Software : QuickTime 7.7.1\n    // DateTime : 2013:09:01 22:53:55\n    // ExifIFDPointer : 190\n    // ExposureTime : 0.058823529411764705 [1/17]\n    // FNumber : 2.4 [12/5]\n    // ExposureProgram : Normal program\n    // ISOSpeedRatings : 800\n    // ExifVersion : 0220\n    // DateTimeOriginal : 2013:09:01 22:52:51\n    // DateTimeDigitized : 2013:09:01 22:52:51\n    // ComponentsConfiguration : YCbCr\n    // ShutterSpeedValue : 4.058893515764426\n    // ApertureValue : 2.5260688216892597 [4845/1918]\n    // BrightnessValue : -0.3126686601998395\n    // MeteringMode : Pattern\n    // Flash : Flash did not fire, compulsory flash mode\n    // FocalLength : 4.28 [107/25]\n    // SubjectArea : [4 values]\n    // FlashpixVersion : 0100\n    // ColorSpace : 1\n    // PixelXDimension : 2448\n    // PixelYDimension : 3264\n    // SensingMethod : One-chip color area sensor\n    // ExposureMode : 0\n    // WhiteBalance : Auto white balance\n    // FocalLengthIn35mmFilm : 35\n    // SceneCaptureType : Standard\n    define('runtime/html5/imagemeta/exif',[\n        'base',\n        'runtime/html5/imagemeta'\n    ], function( Base, ImageMeta ) {\n    \n        var EXIF = {};\n    \n        EXIF.ExifMap = function() {\n            return this;\n        };\n    \n        EXIF.ExifMap.prototype.map = {\n            'Orientation': 0x0112\n        };\n    \n        EXIF.ExifMap.prototype.get = function( id ) {\n            return this[ id ] || this[ this.map[ id ] ];\n        };\n    \n        EXIF.exifTagTypes = {\n            // byte, 8-bit unsigned int:\n            1: {\n                getValue: function( dataView, dataOffset ) {\n                    return dataView.getUint8( dataOffset );\n                },\n                size: 1\n            },\n    \n            // ascii, 8-bit byte:\n            2: {\n                getValue: function( dataView, dataOffset ) {\n                    return String.fromCharCode( dataView.getUint8( dataOffset ) );\n                },\n                size: 1,\n                ascii: true\n            },\n    \n            // short, 16 bit int:\n            3: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint16( dataOffset, littleEndian );\n                },\n                size: 2\n            },\n    \n            // long, 32 bit int:\n            4: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // rational = two long values,\n            // first is numerator, second is denominator:\n            5: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian ) /\n                        dataView.getUint32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            },\n    \n            // slong, 32 bit signed int:\n            9: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // srational, two slongs, first is numerator, second is denominator:\n            10: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian ) /\n                        dataView.getInt32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            }\n        };\n    \n        // undefined, 8-bit byte, value depending on field:\n        EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ];\n    \n        EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length,\n                littleEndian ) {\n    \n            var tagType = EXIF.exifTagTypes[ type ],\n                tagSize, dataOffset, values, i, str, c;\n    \n            if ( !tagType ) {\n                Base.log('Invalid Exif data: Invalid tag type.');\n                return;\n            }\n    \n            tagSize = tagType.size * length;\n    \n            // Determine if the value is contained in the dataOffset bytes,\n            // or if the value at the dataOffset is a pointer to the actual data:\n            dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8,\n                    littleEndian ) : (offset + 8);\n    \n            if ( dataOffset + tagSize > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid data offset.');\n                return;\n            }\n    \n            if ( length === 1 ) {\n                return tagType.getValue( dataView, dataOffset, littleEndian );\n            }\n    \n            values = [];\n    \n            for ( i = 0; i < length; i += 1 ) {\n                values[ i ] = tagType.getValue( dataView,\n                        dataOffset + i * tagType.size, littleEndian );\n            }\n    \n            if ( tagType.ascii ) {\n                str = '';\n    \n                // Concatenate the chars:\n                for ( i = 0; i < values.length; i += 1 ) {\n                    c = values[ i ];\n    \n                    // Ignore the terminating NULL byte(s):\n                    if ( c === '\\u0000' ) {\n                        break;\n                    }\n                    str += c;\n                }\n    \n                return str;\n            }\n            return values;\n        };\n    \n        EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian,\n                data ) {\n    \n            var tag = dataView.getUint16( offset, littleEndian );\n            data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset,\n                    dataView.getUint16( offset + 2, littleEndian ),    // tag type\n                    dataView.getUint32( offset + 4, littleEndian ),    // tag length\n                    littleEndian );\n        };\n    \n        EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset,\n                littleEndian, data ) {\n    \n            var tagsNumber, dirEndOffset, i;\n    \n            if ( dirOffset + 6 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory offset.');\n                return;\n            }\n    \n            tagsNumber = dataView.getUint16( dirOffset, littleEndian );\n            dirEndOffset = dirOffset + 2 + 12 * tagsNumber;\n    \n            if ( dirEndOffset + 4 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory size.');\n                return;\n            }\n    \n            for ( i = 0; i < tagsNumber; i += 1 ) {\n                this.parseExifTag( dataView, tiffOffset,\n                        dirOffset + 2 + 12 * i,    // tag offset\n                        littleEndian, data );\n            }\n    \n            // Return the offset to the next directory:\n            return dataView.getUint32( dirEndOffset, littleEndian );\n        };\n    \n        // EXIF.getExifThumbnail = function(dataView, offset, length) {\n        //     var hexData,\n        //         i,\n        //         b;\n        //     if (!length || offset + length > dataView.byteLength) {\n        //         Base.log('Invalid Exif data: Invalid thumbnail data.');\n        //         return;\n        //     }\n        //     hexData = [];\n        //     for (i = 0; i < length; i += 1) {\n        //         b = dataView.getUint8(offset + i);\n        //         hexData.push((b < 16 ? '0' : '') + b.toString(16));\n        //     }\n        //     return 'data:image/jpeg,%' + hexData.join('%');\n        // };\n    \n        EXIF.parseExifData = function( dataView, offset, length, data ) {\n    \n            var tiffOffset = offset + 10,\n                littleEndian, dirOffset;\n    \n            // Check for the ASCII code for \"Exif\" (0x45786966):\n            if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) {\n                // No Exif data, might be XMP data instead\n                return;\n            }\n            if ( tiffOffset + 8 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid segment size.');\n                return;\n            }\n    \n            // Check for the two null bytes:\n            if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) {\n                Base.log('Invalid Exif data: Missing byte alignment offset.');\n                return;\n            }\n    \n            // Check the byte alignment:\n            switch ( dataView.getUint16( tiffOffset ) ) {\n                case 0x4949:\n                    littleEndian = true;\n                    break;\n    \n                case 0x4D4D:\n                    littleEndian = false;\n                    break;\n    \n                default:\n                    Base.log('Invalid Exif data: Invalid byte alignment marker.');\n                    return;\n            }\n    \n            // Check for the TIFF tag marker (0x002A):\n            if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) {\n                Base.log('Invalid Exif data: Missing TIFF marker.');\n                return;\n            }\n    \n            // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal:\n            dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian );\n            // Create the exif object to store the tags:\n            data.exif = new EXIF.ExifMap();\n            // Parse the tags of the main image directory and retrieve the\n            // offset to the next directory, usually the thumbnail directory:\n            dirOffset = EXIF.parseExifTags( dataView, tiffOffset,\n                    tiffOffset + dirOffset, littleEndian, data );\n    \n            // 尝试读取缩略图\n            // if ( dirOffset ) {\n            //     thumbnailData = {exif: {}};\n            //     dirOffset = EXIF.parseExifTags(\n            //         dataView,\n            //         tiffOffset,\n            //         tiffOffset + dirOffset,\n            //         littleEndian,\n            //         thumbnailData\n            //     );\n    \n            //     // Check for JPEG Thumbnail offset:\n            //     if (thumbnailData.exif[0x0201]) {\n            //         data.exif.Thumbnail = EXIF.getExifThumbnail(\n            //             dataView,\n            //             tiffOffset + thumbnailData.exif[0x0201],\n            //             thumbnailData.exif[0x0202] // Thumbnail data length\n            //         );\n            //     }\n            // }\n        };\n    \n        ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData );\n        return EXIF;\n    });\n    /**\n     * 这个方式性能不行，但是可以解决android里面的toDataUrl的bug\n     * android里面toDataUrl('image/jpege')得到的结果却是png.\n     *\n     * 所以这里没辙，只能借助这个工具\n     * @fileOverview jpeg encoder\n     */\n    define('runtime/html5/jpegencoder',[], function( require, exports, module ) {\n    \n        /*\n          Copyright (c) 2008, Adobe Systems Incorporated\n          All rights reserved.\n    \n          Redistribution and use in source and binary forms, with or without\n          modification, are permitted provided that the following conditions are\n          met:\n    \n          * Redistributions of source code must retain the above copyright notice,\n            this list of conditions and the following disclaimer.\n    \n          * Redistributions in binary form must reproduce the above copyright\n            notice, this list of conditions and the following disclaimer in the\n            documentation and/or other materials provided with the distribution.\n    \n          * Neither the name of Adobe Systems Incorporated nor the names of its\n            contributors may be used to endorse or promote products derived from\n            this software without specific prior written permission.\n    \n          THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n          IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n          THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n          PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n          CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n          EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n          PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n          PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n          LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n          NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n          SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n        */\n        /*\n        JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n    \n        Basic GUI blocking jpeg encoder\n        */\n    \n        function JPEGEncoder(quality) {\n          var self = this;\n            var fround = Math.round;\n            var ffloor = Math.floor;\n            var YTable = new Array(64);\n            var UVTable = new Array(64);\n            var fdtbl_Y = new Array(64);\n            var fdtbl_UV = new Array(64);\n            var YDC_HT;\n            var UVDC_HT;\n            var YAC_HT;\n            var UVAC_HT;\n    \n            var bitcode = new Array(65535);\n            var category = new Array(65535);\n            var outputfDCTQuant = new Array(64);\n            var DU = new Array(64);\n            var byteout = [];\n            var bytenew = 0;\n            var bytepos = 7;\n    \n            var YDU = new Array(64);\n            var UDU = new Array(64);\n            var VDU = new Array(64);\n            var clt = new Array(256);\n            var RGB_YUV_TABLE = new Array(2048);\n            var currentQuality;\n    \n            var ZigZag = [\n                     0, 1, 5, 6,14,15,27,28,\n                     2, 4, 7,13,16,26,29,42,\n                     3, 8,12,17,25,30,41,43,\n                     9,11,18,24,31,40,44,53,\n                    10,19,23,32,39,45,52,54,\n                    20,22,33,38,46,51,55,60,\n                    21,34,37,47,50,56,59,61,\n                    35,36,48,49,57,58,62,63\n                ];\n    \n            var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];\n            var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];\n            var std_ac_luminance_values = [\n                    0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,\n                    0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,\n                    0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n                    0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,\n                    0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,\n                    0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n                    0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,\n                    0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\n                    0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n                    0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\n                    0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,\n                    0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n                    0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,\n                    0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,\n                    0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n                    0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,\n                    0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,\n                    0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n                    0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,\n                    0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];\n            var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];\n            var std_ac_chrominance_values = [\n                    0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,\n                    0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,\n                    0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n                    0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,\n                    0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,\n                    0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n                    0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,\n                    0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,\n                    0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n                    0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,\n                    0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,\n                    0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n                    0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,\n                    0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,\n                    0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n                    0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,\n                    0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,\n                    0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n                    0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,\n                    0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            function initQuantTables(sf){\n                    var YQT = [\n                        16, 11, 10, 16, 24, 40, 51, 61,\n                        12, 12, 14, 19, 26, 58, 60, 55,\n                        14, 13, 16, 24, 40, 57, 69, 56,\n                        14, 17, 22, 29, 51, 87, 80, 62,\n                        18, 22, 37, 56, 68,109,103, 77,\n                        24, 35, 55, 64, 81,104,113, 92,\n                        49, 64, 78, 87,103,121,120,101,\n                        72, 92, 95, 98,112,100,103, 99\n                    ];\n    \n                    for (var i = 0; i < 64; i++) {\n                        var t = ffloor((YQT[i]*sf+50)/100);\n                        if (t < 1) {\n                            t = 1;\n                        } else if (t > 255) {\n                            t = 255;\n                        }\n                        YTable[ZigZag[i]] = t;\n                    }\n                    var UVQT = [\n                        17, 18, 24, 47, 99, 99, 99, 99,\n                        18, 21, 26, 66, 99, 99, 99, 99,\n                        24, 26, 56, 99, 99, 99, 99, 99,\n                        47, 66, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99\n                    ];\n                    for (var j = 0; j < 64; j++) {\n                        var u = ffloor((UVQT[j]*sf+50)/100);\n                        if (u < 1) {\n                            u = 1;\n                        } else if (u > 255) {\n                            u = 255;\n                        }\n                        UVTable[ZigZag[j]] = u;\n                    }\n                    var aasf = [\n                        1.0, 1.387039845, 1.306562965, 1.175875602,\n                        1.0, 0.785694958, 0.541196100, 0.275899379\n                    ];\n                    var k = 0;\n                    for (var row = 0; row < 8; row++)\n                    {\n                        for (var col = 0; col < 8; col++)\n                        {\n                            fdtbl_Y[k]  = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            k++;\n                        }\n                    }\n                }\n    \n                function computeHuffmanTbl(nrcodes, std_table){\n                    var codevalue = 0;\n                    var pos_in_table = 0;\n                    var HT = new Array();\n                    for (var k = 1; k <= 16; k++) {\n                        for (var j = 1; j <= nrcodes[k]; j++) {\n                            HT[std_table[pos_in_table]] = [];\n                            HT[std_table[pos_in_table]][0] = codevalue;\n                            HT[std_table[pos_in_table]][1] = k;\n                            pos_in_table++;\n                            codevalue++;\n                        }\n                        codevalue*=2;\n                    }\n                    return HT;\n                }\n    \n                function initHuffmanTbl()\n                {\n                    YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);\n                    UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);\n                    YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);\n                    UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);\n                }\n    \n                function initCategoryNumber()\n                {\n                    var nrlower = 1;\n                    var nrupper = 2;\n                    for (var cat = 1; cat <= 15; cat++) {\n                        //Positive numbers\n                        for (var nr = nrlower; nr<nrupper; nr++) {\n                            category[32767+nr] = cat;\n                            bitcode[32767+nr] = [];\n                            bitcode[32767+nr][1] = cat;\n                            bitcode[32767+nr][0] = nr;\n                        }\n                        //Negative numbers\n                        for (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) {\n                            category[32767+nrneg] = cat;\n                            bitcode[32767+nrneg] = [];\n                            bitcode[32767+nrneg][1] = cat;\n                            bitcode[32767+nrneg][0] = nrupper-1+nrneg;\n                        }\n                        nrlower <<= 1;\n                        nrupper <<= 1;\n                    }\n                }\n    \n                function initRGBYUVTable() {\n                    for(var i = 0; i < 256;i++) {\n                        RGB_YUV_TABLE[i]            =  19595 * i;\n                        RGB_YUV_TABLE[(i+ 256)>>0]  =  38470 * i;\n                        RGB_YUV_TABLE[(i+ 512)>>0]  =   7471 * i + 0x8000;\n                        RGB_YUV_TABLE[(i+ 768)>>0]  = -11059 * i;\n                        RGB_YUV_TABLE[(i+1024)>>0]  = -21709 * i;\n                        RGB_YUV_TABLE[(i+1280)>>0]  =  32768 * i + 0x807FFF;\n                        RGB_YUV_TABLE[(i+1536)>>0]  = -27439 * i;\n                        RGB_YUV_TABLE[(i+1792)>>0]  = - 5329 * i;\n                    }\n                }\n    \n                // IO functions\n                function writeBits(bs)\n                {\n                    var value = bs[0];\n                    var posval = bs[1]-1;\n                    while ( posval >= 0 ) {\n                        if (value & (1 << posval) ) {\n                            bytenew |= (1 << bytepos);\n                        }\n                        posval--;\n                        bytepos--;\n                        if (bytepos < 0) {\n                            if (bytenew == 0xFF) {\n                                writeByte(0xFF);\n                                writeByte(0);\n                            }\n                            else {\n                                writeByte(bytenew);\n                            }\n                            bytepos=7;\n                            bytenew=0;\n                        }\n                    }\n                }\n    \n                function writeByte(value)\n                {\n                    byteout.push(clt[value]); // write char directly instead of converting later\n                }\n    \n                function writeWord(value)\n                {\n                    writeByte((value>>8)&0xFF);\n                    writeByte((value   )&0xFF);\n                }\n    \n                // DCT & quantization core\n                function fDCTQuant(data, fdtbl)\n                {\n                    var d0, d1, d2, d3, d4, d5, d6, d7;\n                    /* Pass 1: process rows. */\n                    var dataOff=0;\n                    var i;\n                    var I8 = 8;\n                    var I64 = 64;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff+1];\n                        d2 = data[dataOff+2];\n                        d3 = data[dataOff+3];\n                        d4 = data[dataOff+4];\n                        d5 = data[dataOff+5];\n                        d6 = data[dataOff+6];\n                        d7 = data[dataOff+7];\n    \n                        var tmp0 = d0 + d7;\n                        var tmp7 = d0 - d7;\n                        var tmp1 = d1 + d6;\n                        var tmp6 = d1 - d6;\n                        var tmp2 = d2 + d5;\n                        var tmp5 = d2 - d5;\n                        var tmp3 = d3 + d4;\n                        var tmp4 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10 = tmp0 + tmp3;    /* phase 2 */\n                        var tmp13 = tmp0 - tmp3;\n                        var tmp11 = tmp1 + tmp2;\n                        var tmp12 = tmp1 - tmp2;\n    \n                        data[dataOff] = tmp10 + tmp11; /* phase 3 */\n                        data[dataOff+4] = tmp10 - tmp11;\n    \n                        var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n                        data[dataOff+2] = tmp13 + z1; /* phase 5 */\n                        data[dataOff+6] = tmp13 - z1;\n    \n                        /* Odd part */\n                        tmp10 = tmp4 + tmp5; /* phase 2 */\n                        tmp11 = tmp5 + tmp6;\n                        tmp12 = tmp6 + tmp7;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n                        var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */\n                        var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n                        var z3 = tmp11 * 0.707106781; /* c4 */\n    \n                        var z11 = tmp7 + z3;    /* phase 5 */\n                        var z13 = tmp7 - z3;\n    \n                        data[dataOff+5] = z13 + z2; /* phase 6 */\n                        data[dataOff+3] = z13 - z2;\n                        data[dataOff+1] = z11 + z4;\n                        data[dataOff+7] = z11 - z4;\n    \n                        dataOff += 8; /* advance pointer to next row */\n                    }\n    \n                    /* Pass 2: process columns. */\n                    dataOff = 0;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff + 8];\n                        d2 = data[dataOff + 16];\n                        d3 = data[dataOff + 24];\n                        d4 = data[dataOff + 32];\n                        d5 = data[dataOff + 40];\n                        d6 = data[dataOff + 48];\n                        d7 = data[dataOff + 56];\n    \n                        var tmp0p2 = d0 + d7;\n                        var tmp7p2 = d0 - d7;\n                        var tmp1p2 = d1 + d6;\n                        var tmp6p2 = d1 - d6;\n                        var tmp2p2 = d2 + d5;\n                        var tmp5p2 = d2 - d5;\n                        var tmp3p2 = d3 + d4;\n                        var tmp4p2 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10p2 = tmp0p2 + tmp3p2;  /* phase 2 */\n                        var tmp13p2 = tmp0p2 - tmp3p2;\n                        var tmp11p2 = tmp1p2 + tmp2p2;\n                        var tmp12p2 = tmp1p2 - tmp2p2;\n    \n                        data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n                        data[dataOff+32] = tmp10p2 - tmp11p2;\n    \n                        var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n                        data[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */\n                        data[dataOff+48] = tmp13p2 - z1p2;\n    \n                        /* Odd part */\n                        tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n                        tmp11p2 = tmp5p2 + tmp6p2;\n                        tmp12p2 = tmp6p2 + tmp7p2;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n                        var z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */\n                        var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n                        var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n    \n                        var z11p2 = tmp7p2 + z3p2;  /* phase 5 */\n                        var z13p2 = tmp7p2 - z3p2;\n    \n                        data[dataOff+40] = z13p2 + z2p2; /* phase 6 */\n                        data[dataOff+24] = z13p2 - z2p2;\n                        data[dataOff+ 8] = z11p2 + z4p2;\n                        data[dataOff+56] = z11p2 - z4p2;\n    \n                        dataOff++; /* advance pointer to next column */\n                    }\n    \n                    // Quantize/descale the coefficients\n                    var fDCTQuant;\n                    for (i=0; i<I64; ++i)\n                    {\n                        // Apply the quantization and scaling factor & Round to nearest integer\n                        fDCTQuant = data[i]*fdtbl[i];\n                        outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0);\n                        //outputfDCTQuant[i] = fround(fDCTQuant);\n    \n                    }\n                    return outputfDCTQuant;\n                }\n    \n                function writeAPP0()\n                {\n                    writeWord(0xFFE0); // marker\n                    writeWord(16); // length\n                    writeByte(0x4A); // J\n                    writeByte(0x46); // F\n                    writeByte(0x49); // I\n                    writeByte(0x46); // F\n                    writeByte(0); // = \"JFIF\",'\\0'\n                    writeByte(1); // versionhi\n                    writeByte(1); // versionlo\n                    writeByte(0); // xyunits\n                    writeWord(1); // xdensity\n                    writeWord(1); // ydensity\n                    writeByte(0); // thumbnwidth\n                    writeByte(0); // thumbnheight\n                }\n    \n                function writeSOF0(width, height)\n                {\n                    writeWord(0xFFC0); // marker\n                    writeWord(17);   // length, truecolor YUV JPG\n                    writeByte(8);    // precision\n                    writeWord(height);\n                    writeWord(width);\n                    writeByte(3);    // nrofcomponents\n                    writeByte(1);    // IdY\n                    writeByte(0x11); // HVY\n                    writeByte(0);    // QTY\n                    writeByte(2);    // IdU\n                    writeByte(0x11); // HVU\n                    writeByte(1);    // QTU\n                    writeByte(3);    // IdV\n                    writeByte(0x11); // HVV\n                    writeByte(1);    // QTV\n                }\n    \n                function writeDQT()\n                {\n                    writeWord(0xFFDB); // marker\n                    writeWord(132);    // length\n                    writeByte(0);\n                    for (var i=0; i<64; i++) {\n                        writeByte(YTable[i]);\n                    }\n                    writeByte(1);\n                    for (var j=0; j<64; j++) {\n                        writeByte(UVTable[j]);\n                    }\n                }\n    \n                function writeDHT()\n                {\n                    writeWord(0xFFC4); // marker\n                    writeWord(0x01A2); // length\n    \n                    writeByte(0); // HTYDCinfo\n                    for (var i=0; i<16; i++) {\n                        writeByte(std_dc_luminance_nrcodes[i+1]);\n                    }\n                    for (var j=0; j<=11; j++) {\n                        writeByte(std_dc_luminance_values[j]);\n                    }\n    \n                    writeByte(0x10); // HTYACinfo\n                    for (var k=0; k<16; k++) {\n                        writeByte(std_ac_luminance_nrcodes[k+1]);\n                    }\n                    for (var l=0; l<=161; l++) {\n                        writeByte(std_ac_luminance_values[l]);\n                    }\n    \n                    writeByte(1); // HTUDCinfo\n                    for (var m=0; m<16; m++) {\n                        writeByte(std_dc_chrominance_nrcodes[m+1]);\n                    }\n                    for (var n=0; n<=11; n++) {\n                        writeByte(std_dc_chrominance_values[n]);\n                    }\n    \n                    writeByte(0x11); // HTUACinfo\n                    for (var o=0; o<16; o++) {\n                        writeByte(std_ac_chrominance_nrcodes[o+1]);\n                    }\n                    for (var p=0; p<=161; p++) {\n                        writeByte(std_ac_chrominance_values[p]);\n                    }\n                }\n    \n                function writeSOS()\n                {\n                    writeWord(0xFFDA); // marker\n                    writeWord(12); // length\n                    writeByte(3); // nrofcomponents\n                    writeByte(1); // IdY\n                    writeByte(0); // HTY\n                    writeByte(2); // IdU\n                    writeByte(0x11); // HTU\n                    writeByte(3); // IdV\n                    writeByte(0x11); // HTV\n                    writeByte(0); // Ss\n                    writeByte(0x3f); // Se\n                    writeByte(0); // Bf\n                }\n    \n                function processDU(CDU, fdtbl, DC, HTDC, HTAC){\n                    var EOB = HTAC[0x00];\n                    var M16zeroes = HTAC[0xF0];\n                    var pos;\n                    var I16 = 16;\n                    var I63 = 63;\n                    var I64 = 64;\n                    var DU_DCT = fDCTQuant(CDU, fdtbl);\n                    //ZigZag reorder\n                    for (var j=0;j<I64;++j) {\n                        DU[ZigZag[j]]=DU_DCT[j];\n                    }\n                    var Diff = DU[0] - DC; DC = DU[0];\n                    //Encode DC\n                    if (Diff==0) {\n                        writeBits(HTDC[0]); // Diff might be 0\n                    } else {\n                        pos = 32767+Diff;\n                        writeBits(HTDC[category[pos]]);\n                        writeBits(bitcode[pos]);\n                    }\n                    //Encode ACs\n                    var end0pos = 63; // was const... which is crazy\n                    for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {};\n                    //end0pos = first element in reverse order !=0\n                    if ( end0pos == 0) {\n                        writeBits(EOB);\n                        return DC;\n                    }\n                    var i = 1;\n                    var lng;\n                    while ( i <= end0pos ) {\n                        var startpos = i;\n                        for (; (DU[i]==0) && (i<=end0pos); ++i) {}\n                        var nrzeroes = i-startpos;\n                        if ( nrzeroes >= I16 ) {\n                            lng = nrzeroes>>4;\n                            for (var nrmarker=1; nrmarker <= lng; ++nrmarker)\n                                writeBits(M16zeroes);\n                            nrzeroes = nrzeroes&0xF;\n                        }\n                        pos = 32767+DU[i];\n                        writeBits(HTAC[(nrzeroes<<4)+category[pos]]);\n                        writeBits(bitcode[pos]);\n                        i++;\n                    }\n                    if ( end0pos != I63 ) {\n                        writeBits(EOB);\n                    }\n                    return DC;\n                }\n    \n                function initCharLookupTable(){\n                    var sfcc = String.fromCharCode;\n                    for(var i=0; i < 256; i++){ ///// ACHTUNG // 255\n                        clt[i] = sfcc(i);\n                    }\n                }\n    \n                this.encode = function(image,quality) // image data object\n                {\n                    // var time_start = new Date().getTime();\n    \n                    if(quality) setQuality(quality);\n    \n                    // Initialize bit writer\n                    byteout = new Array();\n                    bytenew=0;\n                    bytepos=7;\n    \n                    // Add JPEG headers\n                    writeWord(0xFFD8); // SOI\n                    writeAPP0();\n                    writeDQT();\n                    writeSOF0(image.width,image.height);\n                    writeDHT();\n                    writeSOS();\n    \n    \n                    // Encode 8x8 macroblocks\n                    var DCY=0;\n                    var DCU=0;\n                    var DCV=0;\n    \n                    bytenew=0;\n                    bytepos=7;\n    \n    \n                    this.encode.displayName = \"_encode_\";\n    \n                    var imageData = image.data;\n                    var width = image.width;\n                    var height = image.height;\n    \n                    var quadWidth = width*4;\n                    var tripleWidth = width*3;\n    \n                    var x, y = 0;\n                    var r, g, b;\n                    var start,p, col,row,pos;\n                    while(y < height){\n                        x = 0;\n                        while(x < quadWidth){\n                        start = quadWidth * y + x;\n                        p = start;\n                        col = -1;\n                        row = 0;\n    \n                        for(pos=0; pos < 64; pos++){\n                            row = pos >> 3;// /8\n                            col = ( pos & 7 ) * 4; // %8\n                            p = start + ( row * quadWidth ) + col;\n    \n                            if(y+row >= height){ // padding bottom\n                                p-= (quadWidth*(y+1+row-height));\n                            }\n    \n                            if(x+col >= quadWidth){ // padding right\n                                p-= ((x+col) - quadWidth +4)\n                            }\n    \n                            r = imageData[ p++ ];\n                            g = imageData[ p++ ];\n                            b = imageData[ p++ ];\n    \n    \n                            /* // calculate YUV values dynamically\n                            YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n                            UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n                            VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n                            */\n    \n                            // use lookup table (slightly faster)\n                            YDU[pos] = ((RGB_YUV_TABLE[r]             + RGB_YUV_TABLE[(g +  256)>>0] + RGB_YUV_TABLE[(b +  512)>>0]) >> 16)-128;\n                            UDU[pos] = ((RGB_YUV_TABLE[(r +  768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128;\n                            VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128;\n    \n                        }\n    \n                        DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n                        DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n                        DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n                        x+=32;\n                        }\n                        y+=8;\n                    }\n    \n    \n                    ////////////////////////////////////////////////////////////////\n    \n                    // Do the bit alignment of the EOI marker\n                    if ( bytepos >= 0 ) {\n                        var fillbits = [];\n                        fillbits[1] = bytepos+1;\n                        fillbits[0] = (1<<(bytepos+1))-1;\n                        writeBits(fillbits);\n                    }\n    \n                    writeWord(0xFFD9); //EOI\n    \n                    var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join(''));\n    \n                    byteout = [];\n    \n                    // benchmarking\n                    // var duration = new Date().getTime() - time_start;\n                    // console.log('Encoding time: '+ currentQuality + 'ms');\n                    //\n    \n                    return jpegDataUri\n            }\n    \n            function setQuality(quality){\n                if (quality <= 0) {\n                    quality = 1;\n                }\n                if (quality > 100) {\n                    quality = 100;\n                }\n    \n                if(currentQuality == quality) return // don't recalc if unchanged\n    \n                var sf = 0;\n                if (quality < 50) {\n                    sf = Math.floor(5000 / quality);\n                } else {\n                    sf = Math.floor(200 - quality*2);\n                }\n    \n                initQuantTables(sf);\n                currentQuality = quality;\n                // console.log('Quality set to: '+quality +'%');\n            }\n    \n            function init(){\n                // var time_start = new Date().getTime();\n                if(!quality) quality = 50;\n                // Create tables\n                initCharLookupTable()\n                initHuffmanTbl();\n                initCategoryNumber();\n                initRGBYUVTable();\n    \n                setQuality(quality);\n                // var duration = new Date().getTime() - time_start;\n                // console.log('Initialization '+ duration + 'ms');\n            }\n    \n            init();\n    \n        };\n    \n        JPEGEncoder.encode = function( data, quality ) {\n            var encoder = new JPEGEncoder( quality );\n    \n            return encoder.encode( data );\n        }\n    \n        return JPEGEncoder;\n    });\n    /**\n     * @fileOverview Fix android canvas.toDataUrl bug.\n     */\n    define('runtime/html5/androidpatch',[\n        'runtime/html5/util',\n        'runtime/html5/jpegencoder',\n        'base'\n    ], function( Util, encoder, Base ) {\n        var origin = Util.canvasToDataUrl,\n            supportJpeg;\n    \n        Util.canvasToDataUrl = function( canvas, type, quality ) {\n            var ctx, w, h, fragement, parts;\n    \n            // 非android手机直接跳过。\n            if ( !Base.os.android ) {\n                return origin.apply( null, arguments );\n            }\n    \n            // 检测是否canvas支持jpeg导出，根据数据格式来判断。\n            // JPEG 前两位分别是：255, 216\n            if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) {\n                fragement = origin.apply( null, arguments );\n    \n                parts = fragement.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    fragement = atob( parts[ 1 ] );\n                } else {\n                    fragement = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                fragement = fragement.substring( 0, 2 );\n    \n                supportJpeg = fragement.charCodeAt( 0 ) === 255 &&\n                        fragement.charCodeAt( 1 ) === 216;\n            }\n    \n            // 只有在android环境下才修复\n            if ( type === 'image/jpeg' && !supportJpeg ) {\n                w = canvas.width;\n                h = canvas.height;\n                ctx = canvas.getContext('2d');\n    \n                return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality );\n            }\n    \n            return origin.apply( null, arguments );\n        };\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('runtime/html5/image',[\n        'base',\n        'runtime/html5/runtime',\n        'runtime/html5/util'\n    ], function( Base, Html5Runtime, Util ) {\n    \n        var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';\n    \n        return Html5Runtime.register( 'Image', {\n    \n            // flag: 标记是否被修改过。\n            modified: false,\n    \n            init: function() {\n                var me = this,\n                    img = new Image();\n    \n                img.onload = function() {\n    \n                    me._info = {\n                        type: me.type,\n                        width: this.width,\n                        height: this.height\n                    };\n    \n                    // 读取meta信息。\n                    if ( !me._metas && 'image/jpeg' === me.type ) {\n                        Util.parseMeta( me._blob, function( error, ret ) {\n                            me._metas = ret;\n                            me.owner.trigger('load');\n                        });\n                    } else {\n                        me.owner.trigger('load');\n                    }\n                };\n    \n                img.onerror = function() {\n                    me.owner.trigger('error');\n                };\n    \n                me._img = img;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    img = me._img;\n    \n                me._blob = blob;\n                me.type = blob.type;\n                img.src = Util.createObjectURL( blob.getSource() );\n                me.owner.once( 'load', function() {\n                    Util.revokeObjectURL( img.src );\n                });\n            },\n    \n            resize: function( width, height ) {\n                var canvas = this._canvas ||\n                        (this._canvas = document.createElement('canvas'));\n    \n                this._resize( this._img, canvas, width, height );\n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger( 'complete', 'resize' );\n            },\n    \n            crop: function( x, y, w, h, s ) {\n                var cvs = this._canvas ||\n                        (this._canvas = document.createElement('canvas')),\n                    opts = this.options,\n                    img = this._img,\n                    iw = img.naturalWidth,\n                    ih = img.naturalHeight,\n                    orientation = this.getOrientation();\n    \n                s = s || 1;\n    \n                // todo 解决 orientation 的问题。\n                // values that require 90 degree rotation\n                // if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                //     switch ( orientation ) {\n                //         case 6:\n                //             tmp = x;\n                //             x = y;\n                //             y = iw * s - tmp - w;\n                //             console.log(ih * s, tmp, w)\n                //             break;\n                //     }\n    \n                //     (w ^= h, h ^= w, w ^= h);\n                // }\n    \n                cvs.width = w;\n                cvs.height = h;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n                this._renderImageToCanvas( cvs, img, -x, -y, iw * s, ih * s );\n    \n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger( 'complete', 'crop' );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this._blob,\n                    opts = this.options,\n                    canvas;\n    \n                type = type || this.type;\n    \n                // blob需要重新生成。\n                if ( this.modified || this.type !== type ) {\n                    canvas = this._canvas;\n    \n                    if ( type === 'image/jpeg' ) {\n    \n                        blob = Util.canvasToDataUrl( canvas, type, opts.quality );\n    \n                        if ( opts.preserveHeaders && this._metas &&\n                                this._metas.imageHead ) {\n    \n                            blob = Util.dataURL2ArrayBuffer( blob );\n                            blob = Util.updateImageHead( blob,\n                                    this._metas.imageHead );\n                            blob = Util.arrayBufferToBlob( blob, type );\n                            return blob;\n                        }\n                    } else {\n                        blob = Util.canvasToDataUrl( canvas, type );\n                    }\n    \n                    blob = Util.dataURL2Blob( blob );\n                }\n    \n                return blob;\n            },\n    \n            getAsDataUrl: function( type ) {\n                var opts = this.options;\n    \n                type = type || this.type;\n    \n                if ( type === 'image/jpeg' ) {\n                    return Util.canvasToDataUrl( this._canvas, type, opts.quality );\n                } else {\n                    return this._canvas.toDataURL( type );\n                }\n            },\n    \n            getOrientation: function() {\n                return this._metas && this._metas.exif &&\n                        this._metas.exif.get('Orientation') || 1;\n            },\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            destroy: function() {\n                var canvas = this._canvas;\n                this._img.onload = null;\n    \n                if ( canvas ) {\n                    canvas.getContext('2d')\n                            .clearRect( 0, 0, canvas.width, canvas.height );\n                    canvas.width = canvas.height = 0;\n                    this._canvas = null;\n                }\n    \n                // 释放内存。非常重要，否则释放不了image的内存。\n                this._img.src = BLANK;\n                this._img = this._blob = null;\n            },\n    \n            _resize: function( img, cvs, width, height ) {\n                var opts = this.options,\n                    naturalWidth = img.width,\n                    naturalHeight = img.height,\n                    orientation = this.getOrientation(),\n                    scale, w, h, x, y;\n    \n                // values that require 90 degree rotation\n                if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                    // 交换width, height的值。\n                    width ^= height;\n                    height ^= width;\n                    width ^= height;\n                }\n    \n                scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth,\n                        height / naturalHeight );\n    \n                // 不允许放大。\n                opts.allowMagnify || (scale = Math.min( 1, scale ));\n    \n                w = naturalWidth * scale;\n                h = naturalHeight * scale;\n    \n                if ( opts.crop ) {\n                    cvs.width = width;\n                    cvs.height = height;\n                } else {\n                    cvs.width = w;\n                    cvs.height = h;\n                }\n    \n                x = (cvs.width - w) / 2;\n                y = (cvs.height - h) / 2;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n    \n                this._renderImageToCanvas( cvs, img, x, y, w, h );\n            },\n    \n            _rotate2Orientaion: function( canvas, orientation ) {\n                var width = canvas.width,\n                    height = canvas.height,\n                    ctx = canvas.getContext('2d');\n    \n                switch ( orientation ) {\n                    case 5:\n                    case 6:\n                    case 7:\n                    case 8:\n                        canvas.width = height;\n                        canvas.height = width;\n                        break;\n                }\n    \n                switch ( orientation ) {\n                    case 2:    // horizontal flip\n                        ctx.translate( width, 0 );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 3:    // 180 rotate left\n                        ctx.translate( width, height );\n                        ctx.rotate( Math.PI );\n                        break;\n    \n                    case 4:    // vertical flip\n                        ctx.translate( 0, height );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 5:    // vertical flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 6:    // 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( 0, -height );\n                        break;\n    \n                    case 7:    // horizontal flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( width, -height );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 8:    // 90 rotate left\n                        ctx.rotate( -0.5 * Math.PI );\n                        ctx.translate( -width, 0 );\n                        break;\n                }\n            },\n    \n            // https://github.com/stomita/ios-imagefile-megapixel/\n            // blob/master/src/megapix-image.js\n            _renderImageToCanvas: (function() {\n    \n                // 如果不是ios, 不需要这么复杂！\n                if ( !Base.os.ios ) {\n                    return function( canvas ) {\n                        var args = Base.slice( arguments, 1 ),\n                            ctx = canvas.getContext('2d');\n    \n                        ctx.drawImage.apply( ctx, args );\n                    };\n                }\n    \n                /**\n                 * Detecting vertical squash in loaded image.\n                 * Fixes a bug which squash image vertically while drawing into\n                 * canvas for some images.\n                 */\n                function detectVerticalSquash( img, iw, ih ) {\n                    var canvas = document.createElement('canvas'),\n                        ctx = canvas.getContext('2d'),\n                        sy = 0,\n                        ey = ih,\n                        py = ih,\n                        data, alpha, ratio;\n    \n    \n                    canvas.width = 1;\n                    canvas.height = ih;\n                    ctx.drawImage( img, 0, 0 );\n                    data = ctx.getImageData( 0, 0, 1, ih ).data;\n    \n                    // search image edge pixel position in case\n                    // it is squashed vertically.\n                    while ( py > sy ) {\n                        alpha = data[ (py - 1) * 4 + 3 ];\n    \n                        if ( alpha === 0 ) {\n                            ey = py;\n                        } else {\n                            sy = py;\n                        }\n    \n                        py = (ey + sy) >> 1;\n                    }\n    \n                    ratio = (py / ih);\n                    return (ratio === 0) ? 1 : ratio;\n                }\n    \n                // fix ie7 bug\n                // http://stackoverflow.com/questions/11929099/\n                // html5-canvas-drawimage-ratio-bug-ios\n                if ( Base.os.ios >= 7 ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        var iw = img.naturalWidth,\n                            ih = img.naturalHeight,\n                            vertSquashRatio = detectVerticalSquash( img, iw, ih );\n    \n                        return canvas.getContext('2d').drawImage( img, 0, 0,\n                                iw * vertSquashRatio, ih * vertSquashRatio,\n                                x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detect subsampling in loaded image.\n                 * In iOS, larger images than 2M pixels may be\n                 * subsampled in rendering.\n                 */\n                function detectSubsampling( img ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        canvas, ctx;\n    \n                    // subsampling may happen overmegapixel image\n                    if ( iw * ih > 1024 * 1024 ) {\n                        canvas = document.createElement('canvas');\n                        canvas.width = canvas.height = 1;\n                        ctx = canvas.getContext('2d');\n                        ctx.drawImage( img, -iw + 1, 0 );\n    \n                        // subsampled image becomes half smaller in rendering size.\n                        // check alpha channel value to confirm image is covering\n                        // edge pixel or not. if alpha value is 0\n                        // image is not covering, hence subsampled.\n                        return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0;\n                    } else {\n                        return false;\n                    }\n                }\n    \n    \n                return function( canvas, img, x, y, width, height ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        ctx = canvas.getContext('2d'),\n                        subsampled = detectSubsampling( img ),\n                        doSquash = this.type === 'image/jpeg',\n                        d = 1024,\n                        sy = 0,\n                        dy = 0,\n                        tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx;\n    \n                    if ( subsampled ) {\n                        iw /= 2;\n                        ih /= 2;\n                    }\n    \n                    ctx.save();\n                    tmpCanvas = document.createElement('canvas');\n                    tmpCanvas.width = tmpCanvas.height = d;\n    \n                    tmpCtx = tmpCanvas.getContext('2d');\n                    vertSquashRatio = doSquash ?\n                            detectVerticalSquash( img, iw, ih ) : 1;\n    \n                    dw = Math.ceil( d * width / iw );\n                    dh = Math.ceil( d * height / ih / vertSquashRatio );\n    \n                    while ( sy < ih ) {\n                        sx = 0;\n                        dx = 0;\n                        while ( sx < iw ) {\n                            tmpCtx.clearRect( 0, 0, d, d );\n                            tmpCtx.drawImage( img, -sx, -sy );\n                            ctx.drawImage( tmpCanvas, 0, 0, d, d,\n                                    x + dx, y + dy, dw, dh );\n                            sx += d;\n                            dx += dw;\n                        }\n                        sy += d;\n                        dy += dh;\n                    }\n                    ctx.restore();\n                    tmpCanvas = tmpCtx = null;\n                };\n            })()\n        });\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    // 强制设置成 content-type 为文件流。\n                    xhr.overrideMimeType &&\n                            xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/html5/md5',[\n        'runtime/html5/runtime'\n    ], function( FlashRuntime ) {\n    \n        /*\n         * Fastest md5 implementation around (JKM md5)\n         * Credits: Joseph Myers\n         *\n         * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n         * @see http://jsperf.com/md5-shootout/7\n         */\n    \n        /* this function is much faster,\n          so if possible we use it. Some IEs\n          are the only ones I know of that\n          need the idiotic second function,\n          generated by an if clause.  */\n        var add32 = function (a, b) {\n            return (a + b) & 0xFFFFFFFF;\n        },\n    \n        cmn = function (q, a, b, x, s, t) {\n            a = add32(add32(a, q), add32(x, t));\n            return add32((a << s) | (a >>> (32 - s)), b);\n        },\n    \n        ff = function (a, b, c, d, x, s, t) {\n            return cmn((b & c) | ((~b) & d), a, b, x, s, t);\n        },\n    \n        gg = function (a, b, c, d, x, s, t) {\n            return cmn((b & d) | (c & (~d)), a, b, x, s, t);\n        },\n    \n        hh = function (a, b, c, d, x, s, t) {\n            return cmn(b ^ c ^ d, a, b, x, s, t);\n        },\n    \n        ii = function (a, b, c, d, x, s, t) {\n            return cmn(c ^ (b | (~d)), a, b, x, s, t);\n        },\n    \n        md5cycle = function (x, k) {\n            var a = x[0],\n                b = x[1],\n                c = x[2],\n                d = x[3];\n    \n            a = ff(a, b, c, d, k[0], 7, -680876936);\n            d = ff(d, a, b, c, k[1], 12, -389564586);\n            c = ff(c, d, a, b, k[2], 17, 606105819);\n            b = ff(b, c, d, a, k[3], 22, -1044525330);\n            a = ff(a, b, c, d, k[4], 7, -176418897);\n            d = ff(d, a, b, c, k[5], 12, 1200080426);\n            c = ff(c, d, a, b, k[6], 17, -1473231341);\n            b = ff(b, c, d, a, k[7], 22, -45705983);\n            a = ff(a, b, c, d, k[8], 7, 1770035416);\n            d = ff(d, a, b, c, k[9], 12, -1958414417);\n            c = ff(c, d, a, b, k[10], 17, -42063);\n            b = ff(b, c, d, a, k[11], 22, -1990404162);\n            a = ff(a, b, c, d, k[12], 7, 1804603682);\n            d = ff(d, a, b, c, k[13], 12, -40341101);\n            c = ff(c, d, a, b, k[14], 17, -1502002290);\n            b = ff(b, c, d, a, k[15], 22, 1236535329);\n    \n            a = gg(a, b, c, d, k[1], 5, -165796510);\n            d = gg(d, a, b, c, k[6], 9, -1069501632);\n            c = gg(c, d, a, b, k[11], 14, 643717713);\n            b = gg(b, c, d, a, k[0], 20, -373897302);\n            a = gg(a, b, c, d, k[5], 5, -701558691);\n            d = gg(d, a, b, c, k[10], 9, 38016083);\n            c = gg(c, d, a, b, k[15], 14, -660478335);\n            b = gg(b, c, d, a, k[4], 20, -405537848);\n            a = gg(a, b, c, d, k[9], 5, 568446438);\n            d = gg(d, a, b, c, k[14], 9, -1019803690);\n            c = gg(c, d, a, b, k[3], 14, -187363961);\n            b = gg(b, c, d, a, k[8], 20, 1163531501);\n            a = gg(a, b, c, d, k[13], 5, -1444681467);\n            d = gg(d, a, b, c, k[2], 9, -51403784);\n            c = gg(c, d, a, b, k[7], 14, 1735328473);\n            b = gg(b, c, d, a, k[12], 20, -1926607734);\n    \n            a = hh(a, b, c, d, k[5], 4, -378558);\n            d = hh(d, a, b, c, k[8], 11, -2022574463);\n            c = hh(c, d, a, b, k[11], 16, 1839030562);\n            b = hh(b, c, d, a, k[14], 23, -35309556);\n            a = hh(a, b, c, d, k[1], 4, -1530992060);\n            d = hh(d, a, b, c, k[4], 11, 1272893353);\n            c = hh(c, d, a, b, k[7], 16, -155497632);\n            b = hh(b, c, d, a, k[10], 23, -1094730640);\n            a = hh(a, b, c, d, k[13], 4, 681279174);\n            d = hh(d, a, b, c, k[0], 11, -358537222);\n            c = hh(c, d, a, b, k[3], 16, -722521979);\n            b = hh(b, c, d, a, k[6], 23, 76029189);\n            a = hh(a, b, c, d, k[9], 4, -640364487);\n            d = hh(d, a, b, c, k[12], 11, -421815835);\n            c = hh(c, d, a, b, k[15], 16, 530742520);\n            b = hh(b, c, d, a, k[2], 23, -995338651);\n    \n            a = ii(a, b, c, d, k[0], 6, -198630844);\n            d = ii(d, a, b, c, k[7], 10, 1126891415);\n            c = ii(c, d, a, b, k[14], 15, -1416354905);\n            b = ii(b, c, d, a, k[5], 21, -57434055);\n            a = ii(a, b, c, d, k[12], 6, 1700485571);\n            d = ii(d, a, b, c, k[3], 10, -1894986606);\n            c = ii(c, d, a, b, k[10], 15, -1051523);\n            b = ii(b, c, d, a, k[1], 21, -2054922799);\n            a = ii(a, b, c, d, k[8], 6, 1873313359);\n            d = ii(d, a, b, c, k[15], 10, -30611744);\n            c = ii(c, d, a, b, k[6], 15, -1560198380);\n            b = ii(b, c, d, a, k[13], 21, 1309151649);\n            a = ii(a, b, c, d, k[4], 6, -145523070);\n            d = ii(d, a, b, c, k[11], 10, -1120210379);\n            c = ii(c, d, a, b, k[2], 15, 718787259);\n            b = ii(b, c, d, a, k[9], 21, -343485551);\n    \n            x[0] = add32(a, x[0]);\n            x[1] = add32(b, x[1]);\n            x[2] = add32(c, x[2]);\n            x[3] = add32(d, x[3]);\n        },\n    \n        /* there needs to be support for Unicode here,\n           * unless we pretend that we can redefine the MD-5\n           * algorithm for multi-byte characters (perhaps\n           * by adding every four 16-bit characters and\n           * shortening the sum to 32 bits). Otherwise\n           * I suggest performing MD-5 as if every character\n           * was two bytes--e.g., 0040 0025 = @%--but then\n           * how will an ordinary MD-5 sum be matched?\n           * There is no way to standardize text to something\n           * like UTF-8 before transformation; speed cost is\n           * utterly prohibitive. The JavaScript standard\n           * itself needs to look at this: it should start\n           * providing access to strings as preformed UTF-8\n           * 8-bit unsigned value arrays.\n           */\n        md5blk = function (s) {\n            var md5blks = [],\n                i; /* Andy King said do it this way. */\n    \n            for (i = 0; i < 64; i += 4) {\n                md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n            }\n            return md5blks;\n        },\n    \n        md5blk_array = function (a) {\n            var md5blks = [],\n                i; /* Andy King said do it this way. */\n    \n            for (i = 0; i < 64; i += 4) {\n                md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n            }\n            return md5blks;\n        },\n    \n        md51 = function (s) {\n            var n = s.length,\n                state = [1732584193, -271733879, -1732584194, 271733878],\n                i,\n                length,\n                tail,\n                tmp,\n                lo,\n                hi;\n    \n            for (i = 64; i <= n; i += 64) {\n                md5cycle(state, md5blk(s.substring(i - 64, i)));\n            }\n            s = s.substring(i - 64);\n            length = s.length;\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n            }\n            tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n            if (i > 55) {\n                md5cycle(state, tail);\n                for (i = 0; i < 16; i += 1) {\n                    tail[i] = 0;\n                }\n            }\n    \n            // Beware that the final length might not fit in 32 bits so we take care of that\n            tmp = n * 8;\n            tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n            lo = parseInt(tmp[2], 16);\n            hi = parseInt(tmp[1], 16) || 0;\n    \n            tail[14] = lo;\n            tail[15] = hi;\n    \n            md5cycle(state, tail);\n            return state;\n        },\n    \n        md51_array = function (a) {\n            var n = a.length,\n                state = [1732584193, -271733879, -1732584194, 271733878],\n                i,\n                length,\n                tail,\n                tmp,\n                lo,\n                hi;\n    \n            for (i = 64; i <= n; i += 64) {\n                md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n            }\n    \n            // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n            // containing the last element of the parent array if the sub array specified starts\n            // beyond the length of the parent array - weird.\n            // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n            a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n    \n            length = a.length;\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= a[i] << ((i % 4) << 3);\n            }\n    \n            tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n            if (i > 55) {\n                md5cycle(state, tail);\n                for (i = 0; i < 16; i += 1) {\n                    tail[i] = 0;\n                }\n            }\n    \n            // Beware that the final length might not fit in 32 bits so we take care of that\n            tmp = n * 8;\n            tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n            lo = parseInt(tmp[2], 16);\n            hi = parseInt(tmp[1], 16) || 0;\n    \n            tail[14] = lo;\n            tail[15] = hi;\n    \n            md5cycle(state, tail);\n    \n            return state;\n        },\n    \n        hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'],\n    \n        rhex = function (n) {\n            var s = '',\n                j;\n            for (j = 0; j < 4; j += 1) {\n                s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n            }\n            return s;\n        },\n    \n        hex = function (x) {\n            var i;\n            for (i = 0; i < x.length; i += 1) {\n                x[i] = rhex(x[i]);\n            }\n            return x.join('');\n        },\n    \n        md5 = function (s) {\n            return hex(md51(s));\n        },\n    \n    \n    \n        ////////////////////////////////////////////////////////////////////////////\n    \n        /**\n         * SparkMD5 OOP implementation.\n         *\n         * Use this class to perform an incremental md5, otherwise use the\n         * static methods instead.\n         */\n        SparkMD5 = function () {\n            // call reset to init the instance\n            this.reset();\n        };\n    \n    \n        // In some cases the fast add32 function cannot be used..\n        if (md5('hello') !== '5d41402abc4b2a76b9719d911017c592') {\n            add32 = function (x, y) {\n                var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n                    msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n                return (msw << 16) | (lsw & 0xFFFF);\n            };\n        }\n    \n    \n        /**\n         * Appends a string.\n         * A conversion will be applied if an utf8 string is detected.\n         *\n         * @param {String} str The string to be appended\n         *\n         * @return {SparkMD5} The instance itself\n         */\n        SparkMD5.prototype.append = function (str) {\n            // converts the string to utf8 bytes if necessary\n            if (/[\\u0080-\\uFFFF]/.test(str)) {\n                str = unescape(encodeURIComponent(str));\n            }\n    \n            // then append as binary\n            this.appendBinary(str);\n    \n            return this;\n        };\n    \n        /**\n         * Appends a binary string.\n         *\n         * @param {String} contents The binary string to be appended\n         *\n         * @return {SparkMD5} The instance itself\n         */\n        SparkMD5.prototype.appendBinary = function (contents) {\n            this._buff += contents;\n            this._length += contents.length;\n    \n            var length = this._buff.length,\n                i;\n    \n            for (i = 64; i <= length; i += 64) {\n                md5cycle(this._state, md5blk(this._buff.substring(i - 64, i)));\n            }\n    \n            this._buff = this._buff.substr(i - 64);\n    \n            return this;\n        };\n    \n        /**\n         * Finishes the incremental computation, reseting the internal state and\n         * returning the result.\n         * Use the raw parameter to obtain the raw result instead of the hex one.\n         *\n         * @param {Boolean} raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.prototype.end = function (raw) {\n            var buff = this._buff,\n                length = buff.length,\n                i,\n                tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                ret;\n    \n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n            }\n    \n            this._finish(tail, length);\n            ret = !!raw ? this._state : hex(this._state);\n    \n            this.reset();\n    \n            return ret;\n        };\n    \n        /**\n         * Finish the final calculation based on the tail.\n         *\n         * @param {Array}  tail   The tail (will be modified)\n         * @param {Number} length The length of the remaining buffer\n         */\n        SparkMD5.prototype._finish = function (tail, length) {\n            var i = length,\n                tmp,\n                lo,\n                hi;\n    \n            tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n            if (i > 55) {\n                md5cycle(this._state, tail);\n                for (i = 0; i < 16; i += 1) {\n                    tail[i] = 0;\n                }\n            }\n    \n            // Do the final computation based on the tail and length\n            // Beware that the final length may not fit in 32 bits so we take care of that\n            tmp = this._length * 8;\n            tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n            lo = parseInt(tmp[2], 16);\n            hi = parseInt(tmp[1], 16) || 0;\n    \n            tail[14] = lo;\n            tail[15] = hi;\n            md5cycle(this._state, tail);\n        };\n    \n        /**\n         * Resets the internal state of the computation.\n         *\n         * @return {SparkMD5} The instance itself\n         */\n        SparkMD5.prototype.reset = function () {\n            this._buff = \"\";\n            this._length = 0;\n            this._state = [1732584193, -271733879, -1732584194, 271733878];\n    \n            return this;\n        };\n    \n        /**\n         * Releases memory used by the incremental buffer and other aditional\n         * resources. If you plan to use the instance again, use reset instead.\n         */\n        SparkMD5.prototype.destroy = function () {\n            delete this._state;\n            delete this._buff;\n            delete this._length;\n        };\n    \n    \n        /**\n         * Performs the md5 hash on a string.\n         * A conversion will be applied if utf8 string is detected.\n         *\n         * @param {String}  str The string\n         * @param {Boolean} raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.hash = function (str, raw) {\n            // converts the string to utf8 bytes if necessary\n            if (/[\\u0080-\\uFFFF]/.test(str)) {\n                str = unescape(encodeURIComponent(str));\n            }\n    \n            var hash = md51(str);\n    \n            return !!raw ? hash : hex(hash);\n        };\n    \n        /**\n         * Performs the md5 hash on a binary string.\n         *\n         * @param {String}  content The binary string\n         * @param {Boolean} raw     True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.hashBinary = function (content, raw) {\n            var hash = md51(content);\n    \n            return !!raw ? hash : hex(hash);\n        };\n    \n        /**\n         * SparkMD5 OOP implementation for array buffers.\n         *\n         * Use this class to perform an incremental md5 ONLY for array buffers.\n         */\n        SparkMD5.ArrayBuffer = function () {\n            // call reset to init the instance\n            this.reset();\n        };\n    \n        ////////////////////////////////////////////////////////////////////////////\n    \n        /**\n         * Appends an array buffer.\n         *\n         * @param {ArrayBuffer} arr The array to be appended\n         *\n         * @return {SparkMD5.ArrayBuffer} The instance itself\n         */\n        SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n            // TODO: we could avoid the concatenation here but the algorithm would be more complex\n            //       if you find yourself needing extra performance, please make a PR.\n            var buff = this._concatArrayBuffer(this._buff, arr),\n                length = buff.length,\n                i;\n    \n            this._length += arr.byteLength;\n    \n            for (i = 64; i <= length; i += 64) {\n                md5cycle(this._state, md5blk_array(buff.subarray(i - 64, i)));\n            }\n    \n            // Avoids IE10 weirdness (documented above)\n            this._buff = (i - 64) < length ? buff.subarray(i - 64) : new Uint8Array(0);\n    \n            return this;\n        };\n    \n        /**\n         * Finishes the incremental computation, reseting the internal state and\n         * returning the result.\n         * Use the raw parameter to obtain the raw result instead of the hex one.\n         *\n         * @param {Boolean} raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n            var buff = this._buff,\n                length = buff.length,\n                tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                i,\n                ret;\n    \n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n            }\n    \n            this._finish(tail, length);\n            ret = !!raw ? this._state : hex(this._state);\n    \n            this.reset();\n    \n            return ret;\n        };\n    \n        SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n    \n        /**\n         * Resets the internal state of the computation.\n         *\n         * @return {SparkMD5.ArrayBuffer} The instance itself\n         */\n        SparkMD5.ArrayBuffer.prototype.reset = function () {\n            this._buff = new Uint8Array(0);\n            this._length = 0;\n            this._state = [1732584193, -271733879, -1732584194, 271733878];\n    \n            return this;\n        };\n    \n        /**\n         * Releases memory used by the incremental buffer and other aditional\n         * resources. If you plan to use the instance again, use reset instead.\n         */\n        SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n    \n        /**\n         * Concats two array buffers, returning a new one.\n         *\n         * @param  {ArrayBuffer} first  The first array buffer\n         * @param  {ArrayBuffer} second The second array buffer\n         *\n         * @return {ArrayBuffer} The new array buffer\n         */\n        SparkMD5.ArrayBuffer.prototype._concatArrayBuffer = function (first, second) {\n            var firstLength = first.length,\n                result = new Uint8Array(firstLength + second.byteLength);\n    \n            result.set(first);\n            result.set(new Uint8Array(second), firstLength);\n    \n            return result;\n        };\n    \n        /**\n         * Performs the md5 hash on an array buffer.\n         *\n         * @param {ArrayBuffer} arr The array buffer\n         * @param {Boolean}     raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n            var hash = md51_array(new Uint8Array(arr));\n    \n            return !!raw ? hash : hex(hash);\n        };\n        \n        return FlashRuntime.register( 'Md5', {\n            init: function() {\n                // do nothing.\n            },\n    \n            loadFromBlob: function( file ) {\n                var blob = file.getSource(),\n                    chunkSize = 2 * 1024 * 1024,\n                    chunks = Math.ceil( blob.size / chunkSize ),\n                    chunk = 0,\n                    owner = this.owner,\n                    spark = new SparkMD5.ArrayBuffer(),\n                    me = this,\n                    blobSlice = blob.mozSlice || blob.webkitSlice || blob.slice,\n                    loadNext, fr;\n    \n                fr = new FileReader();\n    \n                loadNext = function() {\n                    var start, end;\n    \n                    start = chunk * chunkSize;\n                    end = Math.min( start + chunkSize, blob.size );\n    \n                    fr.onload = function( e ) {\n                        spark.append( e.target.result );\n                        owner.trigger( 'progress', {\n                            total: file.size,\n                            loaded: end\n                        });\n                    };\n    \n                    fr.onloadend = function() {\n                        fr.onloadend = fr.onload = null;\n    \n                        if ( ++chunk < chunks ) {\n                            setTimeout( loadNext, 1 );\n                        } else {\n                            setTimeout(function(){\n                                owner.trigger('load');\n                                me.result = spark.end();\n                                loadNext = file = blob = spark = null;\n                                owner.trigger('complete');\n                            }, 50 );\n                        }\n                    };\n    \n                    fr.readAsArrayBuffer( blobSlice.call( blob, start, end ) );\n                };\n    \n                loadNext();\n            },\n    \n            getResult: function() {\n                return this.result;\n            }\n        });\n    });\n    /**\n     * @fileOverview FlashRuntime\n     */\n    define('runtime/flash/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var $ = Base.$,\n            type = 'flash',\n            components = {};\n    \n    \n        function getFlashVersion() {\n            var version;\n    \n            try {\n                version = navigator.plugins[ 'Shockwave Flash' ];\n                version = version.description;\n            } catch ( ex ) {\n                try {\n                    version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                            .GetVariable('$version');\n                } catch ( ex2 ) {\n                    version = '0.0';\n                }\n            }\n            version = version.match( /\\d+/g );\n            return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );\n        }\n    \n        function FlashRuntime() {\n            var pool = {},\n                clients = {},\n                destroy = this.destroy,\n                me = this,\n                jsreciver = Base.guid('webuploader_');\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/ ) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                clients[ uid ] = client;\n    \n                if ( components[ comp ] ) {\n                    if ( !pool[ uid ] ) {\n                        pool[ uid ] = new components[ comp ]( client, me );\n                    }\n    \n                    instance = pool[ uid ];\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n    \n                return me.flashExec.apply( client, arguments );\n            };\n    \n            function handler( evt, obj ) {\n                var type = evt.type || evt,\n                    parts, uid;\n    \n                parts = type.split('::');\n                uid = parts[ 0 ];\n                type = parts[ 1 ];\n    \n                // console.log.apply( console, arguments );\n    \n                if ( type === 'Ready' && uid === me.uid ) {\n                    me.trigger('ready');\n                } else if ( clients[ uid ] ) {\n                    clients[ uid ].trigger( type.toLowerCase(), evt, obj );\n                }\n    \n                // Base.log( evt, obj );\n            }\n    \n            // flash的接受器。\n            window[ jsreciver ] = function() {\n                var args = arguments;\n    \n                // 为了能捕获得到。\n                setTimeout(function() {\n                    handler.apply( null, args );\n                }, 1 );\n            };\n    \n            this.jsreciver = jsreciver;\n    \n            this.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n    \n            this.flashExec = function( comp, fn ) {\n                var flash = me.getFlash(),\n                    args = Base.slice( arguments, 2 );\n    \n                return flash.exec( this.uid, comp, fn, args );\n            };\n    \n            // @todo\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: FlashRuntime,\n    \n            init: function() {\n                var container = this.getContainer(),\n                    opts = this.options,\n                    html;\n    \n                // if not the minimal height, shims are not initialized\n                // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc)\n                container.css({\n                    position: 'absolute',\n                    top: '-8px',\n                    left: '-8px',\n                    width: '9px',\n                    height: '9px',\n                    overflow: 'hidden'\n                });\n    \n                // insert flash object\n                html = '<object id=\"' + this.uid + '\" type=\"application/' +\n                        'x-shockwave-flash\" data=\"' +  opts.swf + '\" ';\n    \n                if ( Base.browser.ie ) {\n                    html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                }\n    \n                html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">'  +\n                    '<param name=\"movie\" value=\"' + opts.swf + '\" />' +\n                    '<param name=\"flashvars\" value=\"uid=' + this.uid +\n                    '&jsreciver=' + this.jsreciver + '\" />' +\n                    '<param name=\"wmode\" value=\"transparent\" />' +\n                    '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                '</object>';\n    \n                container.html( html );\n            },\n    \n            getFlash: function() {\n                if ( this._flash ) {\n                    return this._flash;\n                }\n    \n                this._flash = $( '#' + this.uid ).get( 0 );\n                return this._flash;\n            }\n    \n        });\n    \n        FlashRuntime.register = function( name, component ) {\n            component = components[ name ] = Base.inherits( CompBase, $.extend({\n    \n                // @todo fix this later\n                flashExec: function() {\n                    var owner = this.owner,\n                        runtime = this.getRuntime();\n    \n                    return runtime.flashExec.apply( owner, arguments );\n                }\n            }, component ) );\n    \n            return component;\n        };\n    \n        if ( getFlashVersion() >= 11.4 ) {\n            Runtime.addRuntime( type, FlashRuntime );\n        }\n    \n        return FlashRuntime;\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/flash/filepicker',[\n        'base',\n        'runtime/flash/runtime'\n    ], function( Base, FlashRuntime ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'FilePicker', {\n            init: function( opts ) {\n                var copy = $.extend({}, opts ),\n                    len, i;\n    \n                // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug.\n                len = copy.accept && copy.accept.length;\n                for (  i = 0; i < len; i++ ) {\n                    if ( !copy.accept[ i ].title ) {\n                        copy.accept[ i ].title = 'Files';\n                    }\n                }\n    \n                delete copy.button;\n                delete copy.id;\n                delete copy.container;\n    \n                this.flashExec( 'FilePicker', 'init', copy );\n            },\n    \n            destroy: function() {\n                this.flashExec( 'FilePicker', 'destroy' );\n            }\n        });\n    });\n    /**\n     * @fileOverview 图片压缩\n     */\n    define('runtime/flash/image',[\n        'runtime/flash/runtime'\n    ], function( FlashRuntime ) {\n    \n        return FlashRuntime.register( 'Image', {\n            // init: function( options ) {\n            //     var owner = this.owner;\n    \n            //     this.flashExec( 'Image', 'init', options );\n            //     owner.on( 'load', function() {\n            //         debugger;\n            //     });\n            // },\n    \n            loadFromBlob: function( blob ) {\n                var owner = this.owner;\n    \n                owner.info() && this.flashExec( 'Image', 'info', owner.info() );\n                owner.meta() && this.flashExec( 'Image', 'meta', owner.meta() );\n    \n                this.flashExec( 'Image', 'loadFromBlob', blob.uid );\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/flash/transport',[\n        'base',\n        'runtime/flash/runtime',\n        'runtime/client'\n    ], function( Base, FlashRuntime, RuntimeClient ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n                this._responseJson = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    binary;\n    \n                xhr.connectRuntime( blob.ruid );\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.uid;\n                } else {\n                    $.each( owner._formData, function( k, v ) {\n                        xhr.exec( 'append', k, v );\n                    });\n    \n                    xhr.exec( 'appendBlob', opts.fileVal, blob.uid,\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n                xhr.exec( 'send', {\n                    method: opts.method,\n                    url: server,\n                    forceURLStream: opts.forceURLStream,\n                    mimeType: 'application/octet-stream'\n                }, binary );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            getResponse: function() {\n                return this._response || '';\n            },\n    \n            getResponseAsJson: function() {\n                return this._responseJson;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.exec('abort');\n                    xhr.destroy();\n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new RuntimeClient('XMLHttpRequest');\n    \n                xhr.on( 'uploadprogress progress', function( e ) {\n                    var percent = e.loaded / e.total;\n                    percent = Math.min( 1, Math.max( 0, percent ) );\n                    return me.trigger( 'progress', percent );\n                });\n    \n                xhr.on( 'load', function() {\n                    var status = xhr.exec('getStatus'),\n                        readBody = false,\n                        err = '',\n                        p;\n    \n                    xhr.off();\n                    me._xhr = null;\n    \n                    if ( status >= 200 && status < 300 ) {\n                        readBody = true;\n                    } else if ( status >= 500 && status < 600 ) {\n                        readBody = true;\n                        err = 'server';\n                    } else {\n                        err = 'http';\n                    }\n    \n                    if ( readBody ) {\n                        me._response = xhr.exec('getResponse');\n                        me._response = decodeURIComponent( me._response );\n    \n                        // flash 处理可能存在 bug, 没辙只能靠 js 了\n                        // try {\n                        //     me._responseJson = xhr.exec('getResponseAsJson');\n                        // } catch ( error ) {\n                            \n                        p = window.JSON && window.JSON.parse || function( s ) {\n                            try {\n                                return new Function('return ' + s).call();\n                            } catch ( err ) {\n                                return {};\n                            }\n                        };\n                        me._responseJson  = me._response ? p(me._response) : {};\n                            \n                        // }\n                    }\n                    \n                    xhr.destroy();\n                    xhr = null;\n    \n                    return err ? me.trigger( 'error', err ) : me.trigger('load');\n                });\n    \n                xhr.on( 'error', function() {\n                    xhr.off();\n                    me._xhr = null;\n                    me.trigger( 'error', 'http' );\n                });\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.exec( 'setRequestHeader', key, val );\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/flash/blob',[\n        'runtime/flash/runtime',\n        'lib/blob'\n    ], function( FlashRuntime, Blob ) {\n    \n        return FlashRuntime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.flashExec( 'Blob', 'slice', start, end );\n    \n                return new Blob( blob.uid, blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview  Md5 flash实现\n     */\n    define('runtime/flash/md5',[\n        'runtime/flash/runtime'\n    ], function( FlashRuntime ) {\n        \n        return FlashRuntime.register( 'Md5', {\n            init: function() {\n                // do nothing.\n            },\n    \n            loadFromBlob: function( blob ) {\n                return this.flashExec( 'Md5', 'loadFromBlob', blob.uid );\n            }\n        });\n    });\n    /**\n     * @fileOverview 完全版本。\n     */\n    define('preset/all',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n        'widgets/md5',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/imagemeta/exif',\n        'runtime/html5/androidpatch',\n        'runtime/html5/image',\n        'runtime/html5/transport',\n        'runtime/html5/md5',\n    \n        // flash\n        'runtime/flash/filepicker',\n        'runtime/flash/image',\n        'runtime/flash/transport',\n        'runtime/flash/blob',\n        'runtime/flash/md5'\n    ], function( Base ) {\n        return Base;\n    });\n    /**\n     * @fileOverview 日志组件，主要用来收集错误信息，可以帮助 webuploader 更好的定位问题和发展。\n     *\n     * 如果您不想要启用此功能，请在打包的时候去掉 log 模块。\n     *\n     * 或者可以在初始化的时候通过 options.disableWidgets 属性禁用。\n     *\n     * 如：\n     * WebUploader.create({\n     *     ...\n     *\n     *     disableWidgets: 'log',\n     *\n     *     ...\n     * })\n     */\n    define('widgets/log',[\n        'base',\n        'uploader',\n        'widgets/widget'\n    ], function( Base, Uploader ) {\n        var $ = Base.$,\n            logUrl = ' http://static.tieba.baidu.com/tb/pms/img/st.gif??',\n            product = (location.hostname || location.host || 'protected').toLowerCase(),\n    \n            // 只针对 baidu 内部产品用户做统计功能。\n            enable = product && /baidu/i.exec(product),\n            base;\n    \n        if (!enable) {\n            return;\n        }\n    \n        base = {\n            dv: 3,\n            master: 'webuploader',\n            online: /test/.exec(product) ? 0 : 1,\n            module: '',\n            product: product,\n            type: 0\n        };\n    \n        function send(data) {\n            var obj = $.extend({}, base, data),\n                url = logUrl.replace(/^(.*)\\?/, '$1' + $.param( obj )),\n                image = new Image();\n    \n            image.src = url;\n        }\n    \n        return Uploader.register({\n            name: 'log',\n    \n            init: function() {\n                var owner = this.owner,\n                    count = 0,\n                    size = 0;\n    \n                owner\n                    .on('error', function(code) {\n                        send({\n                            type: 2,\n                            c_error_code: code\n                        });\n                    })\n                    .on('uploadError', function(file, reason) {\n                        send({\n                            type: 2,\n                            c_error_code: 'UPLOAD_ERROR',\n                            c_reason: '' + reason\n                        });\n                    })\n                    .on('uploadComplete', function(file) {\n                        count++;\n                        size += file.size;\n                    }).\n                    on('uploadFinished', function() {\n                        send({\n                            c_count: count,\n                            c_size: size\n                        });\n                        count = size = 0;\n                    });\n    \n                send({\n                    c_usage: 1\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('webuploader',[\n        'preset/all',\n        'widgets/log'\n    ], function( preset ) {\n        return preset;\n    });\n\n    var _require = require;\n    return _require('webuploader');\n});\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.flashonly.js",
    "content": "/*! WebUploader 0.1.5 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n\n            return obj;\n        },\n\n        makeExport = function( dollar ) {\n            root.__dollar = dollar;\n\n            // exports every module.\n            return exportsTo( factory( root, _define, _require ) );\n        },\n\n        origin;\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = makeExport();\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([ 'jquery' ], makeExport );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = makeExport();\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( window, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        var $ = window.__dollar || window.jQuery || window.Zepto;\n    \n        if ( !$ ) {\n            throw new Error('jQuery or Zepto not found!');\n        }\n    \n        return $;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id为该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.5',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match( /(?:trident)(?:.*rv:([\\w.]+))?/i ),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数noop](#WebUploader:Base.noop)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            cancelFile: 'cancel-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            md5File: 'md5-file',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            predictRuntimeType: 'predict-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     compress: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.option( 'compress', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `progressNum` 上传中的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `queueNum` 还在队列中的文件数\n             * * `interruptNum` 被暂停的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return stats ? {\n                    successNum: stats.numOfSuccess,\n                    progressNum: stats.numOfProgress,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue,\n                    interruptNum: stats.numofInterrupt\n                } : {};\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            /**\n             * 销毁 webuploader 实例\n             * @method destroy\n             * @grammar destroy() => undefined\n             */\n            destroy: function() {\n                this.request( 'destroy', arguments );\n                this.off();\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                this._parent = parent;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                this._container && this._container.remove();\n                this._parent && this._parent.removeClass('webuploader-container');\n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n            this.size = source.size || 0;\n    \n            // 如果没有指定 mimetype, 但是知道文件后缀。\n            if ( !source.type && this.ext &&\n                    ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) {\n                this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext);\n            } else {\n                this.type = source.type || 'application/octet-stream';\n            }\n    \n            RuntimeClient.call( me, 'Blob' );\n            this.uid = source.uid || this.uid;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n            // 如果有 mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && file.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n    \n            Blob.apply( this, arguments );\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                this._resizeHandler = Base.bindFn( this.refresh, this );\n                $( window ).on( 'resize', this._resizeHandler );\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                var btn = this.options.button;\n                $( window ).off( 'resize', this._resizeHandler );\n                btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' +\n                    'webuploader-pick');\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            _destroy = Uploader.prototype.destroy,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            /**\n             * @property {String | Array} [disableWidgets=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 默认所有 Uploader.register 了的 widget 都会被加载，如果禁用某一部分，请通过此 option 指定黑名单。\n             */\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [],\n                    deactives = me.options.disableWidgets || '';\n    \n                $.each( widgetClass, function( _, klass ) {\n                    (!deactives || !~deactives.indexOf( klass._name )) &&\n                        widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets && widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个 tick 中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                if ( args.length === 1 ) {\n                                    args = args[ 0 ];\n                                }\n    \n                                setTimeout(function() {\n                                    deferred.resolve( args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ callback ? key : 'done' ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            },\n    \n            destroy: function() {\n                _destroy.apply( this, arguments );\n                this._widgets = null;\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @grammar Uploader.register(proto);\n         * @grammar Uploader.register(map, proto);\n         * @param  {object} responseMap API 名称与函数实现的映射\n         * @param  {object} proto 组件原型，构造函数通过 constructor 属性定义\n         * @method Uploader.register\n         * @for Uploader\n         * @example\n         * Uploader.register({\n         *     'make-thumb': 'makeThumb'\n         * }, {\n         *     init: function( options ) {},\n         *     makeThumb: function() {}\n         * });\n         *\n         * Uploader.register({\n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init', destroy: 'destroy', name: 'anonymous' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n    \n                // 自动生成 map 表。\n                $.each(widgetProto, function(key) {\n                    if ( key[0] === '_' || key === 'name' ) {\n                        key === 'name' && (map.name = widgetProto.name);\n                        return;\n                    }\n    \n                    map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key;\n                });\n    \n            } else {\n                map = $.extend( map, responseMap );\n            }\n    \n            widgetProto.responseMap = map;\n            klass = Base.inherits( Widget, widgetProto );\n            klass._name = map.name;\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        /**\n         * 删除插件，只有在注册时指定了名字的才能被删除。\n         * @grammar Uploader.unRegister(name);\n         * @param  {string} name 组件名字\n         * @method Uploader.unRegister\n         * @for Uploader\n         * @example\n         *\n         * Uploader.register({\n         *     name: 'custom',\n         *     \n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         *\n         * Uploader.unRegister('custom');\n         */\n        Uploader.unRegister = Widget.unRegister = function( name ) {\n            if ( !name || name === 'anonymous' ) {\n                return;\n            }\n            \n            // 删除指定的插件。\n            for ( var i = widgetClass.length; i--; ) {\n                if ( widgetClass[i]._name === name ) {\n                    widgetClass.splice(i, 1)\n                }\n            }\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor|dom} 指定选择文件的按钮容器，不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            name: 'picker',\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addBtn( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addBtn: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    promises = [];\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                $( pick.id ).each(function() {\n                    var options, picker, deferred;\n    \n                    deferred = Base.Deferred();\n    \n                    options = $.extend({}, pick, {\n                        accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                        swf: opts.swf,\n                        runtimeOrder: opts.runtimeOrder,\n                        id: this\n                    });\n    \n                    picker = new FilePicker( options );\n    \n                    picker.once( 'ready', deferred.resolve );\n                    picker.on( 'select', function( files ) {\n                        me.owner.request( 'add-file', [ files ]);\n                    });\n                    picker.init();\n    \n                    me.pickers.push( picker );\n    \n                    promises.push( deferred.promise() );\n                });\n    \n                return Base.when.apply( Base, promises );\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            },\n    \n            destroy: function() {\n                $.each( this.pickers, function() {\n                    this.destroy();\n                });\n                this.pickers = null;\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: false,\n    \n            // 是否允许放大。\n            allowMagnify: false\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            crop: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'crop' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true,\n             *\n             *     // 如果发现压缩后文件大小比原来还大，则使用原来图片\n             *     // 此属性可能会影响图片自动纠正功能\n             *     noCompressIfLarger: false,\n             *\n             *     // 单位字节，如果图片大小小于此值，不会采用压缩。\n             *     compressSize: 0\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n    \n            name: 'image',\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * 当 width 或者 height 的值介于 0 - 1 时，被当成百分比使用。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             * 也可以借助服务端，将 base64 数据传给服务端，生成一个临时文件供预览。\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n    \n                    // 如果 width 的值介于 0 - 1\n                    // 说明设置的是百分比。\n                    if ( width <= 1 && width > 0 ) {\n                        width = file._info.width * width;\n                    }\n    \n                    // 同样的规则应用于 height\n                    if ( height <= 1 && height > 0 ) {\n                        height = file._info.height * height;\n                    }\n    \n                    image.resize( width, height );\n                });\n    \n                // 当 resize 完后\n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function( reason ) {\n                    cb( reason || true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            beforeSendFile: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 0,\n                    noCompressIfLarger = opts && opts.noCompressIfLarger || false,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只压缩 jpeg 图片格式。\n                // gif 可能会丢失针\n                // bmp png 基本上尺寸都不大，且压缩比比较小。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    var width = opts.width,\n                        height = opts.height;\n    \n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n    \n                    // 如果 width 的值介于 0 - 1\n                    // 说明设置的是百分比。\n                    if ( width <= 1 && width > 0 ) {\n                        width = file._info.width * width;\n                    }\n    \n                    // 同样的规则应用于 height\n                    if ( height <= 1 && height > 0 ) {\n                        height = file._info.height * height;\n                    }\n    \n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( !noCompressIfLarger || blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application/octet-stream'\n             */\n            this.type = source.type || 'application/octet-stream';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destroy: function() {\n                this.off();\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被取消的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * * `numofDeleted` 被移除的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0,\n                numofDeleted: 0,\n                numofInterrupt: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            /**\n             * 在队列中删除文件。\n             * @grammar removeFile( file ) => Array\n             * @method removeFile\n             * @param {File} 文件对象。\n             */\n            removeFile: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( existing ) {\n                    delete this._map[ file.id ];\n                    file.destroy();\n                    this.stats.numofDeleted++;\n                }\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            name: 'queue',\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                this.placeholder = runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || !file.size || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n            \n            /**\n             * @property {Boolean} [auto=false]\n             * @namespace options\n             * @for Uploader\n             * @description 设置为 true 后，不需要手动调用上传，有文件选择即开始上传。\n             * \n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFile: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    setTimeout(function() {\n                        me.request('start-upload');\n                    }, 20 );\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n             /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @grammar removeFile( file, true ) => undefined\n             * @grammar removeFile( id, true ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件, 默认只会标记文件状态为已取消，如果第二个参数为 `true` 则会从 queue 中移除。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file, remove ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                this.request( 'cancel-file', file );\n    \n                if ( remove ) {\n                    this.queue.removeFile( file );\n                }\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @event reset\n             * @description 当 uploader 被重置的时候触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.owner.trigger('reset');\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            },\n    \n            destroy: function() {\n                this.reset();\n                this.placeholder && this.placeholder.destroy();\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        /**\n         * @property {Object} [runtimeOrder=html5,flash]\n         * @namespace options\n         * @for Uploader\n         * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持，如果支持则使用 html5, 否则则使用 flash.\n         *\n         * 可以将此值设置成 `flash`，来强制使用 flash 运行时。\n         */\n    \n        return Uploader.register({\n            name: 'runtime',\n    \n            init: function() {\n                if ( !this.predictRuntimeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntimeType() => String\n             * @method predictRuntimeType\n             * @for  Uploader\n             */\n            predictRuntimeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData={}]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: {}\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len, api;\n    \n            api = {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                shift: function() {\n                    return pending.shift();\n                },\n    \n                unshift: function( block ) {\n                    pending.unshift( block );\n                }\n            };\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++,\n                    cuted: api\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return api;\n        }\n    \n        Uploader.register({\n            name: 'upload',\n    \n            init: function() {\n                var owner = this.owner,\n                    me = this;\n    \n                this.runing = false;\n                this.progress = false;\n    \n                owner\n                    .on( 'startUpload', function() {\n                        me.progress = true;\n                    })\n                    .on( 'uploadFinished', function() {\n                        me.progress = false;\n                    });\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存分好片的文件。\n                this.stack = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片在上传中但是没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n    \n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            reset: function() {\n                this.request( 'stop-upload', true );\n                this.runing = false;\n                this.pool = [];\n                this.stack = [];\n                this.pending = [];\n                this.remaning = 0;\n                this._trigged = false;\n                this._promise = null;\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             *\n             * 可以指定开始某一个文件。\n             * @grammar upload() => undefined\n             * @grammar upload( file | fileId) => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            startUpload: function(file) {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                // 如果指定了开始某个文件，则只开始指定文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if (file.getStatus() === Status.INTERRUPT) {\n                        $.each( me.pool, function( _, v ) {\n    \n                            // 之前暂停过。\n                            if (v.file !== file) {\n                                return;\n                            }\n    \n                            v.transport && v.transport.send();\n                        });\n    \n                        file.setStatus( Status.QUEUED );\n                    } else if (file.getStatus() === Status.PROGRESS) {\n                        return;\n                    } else {\n                        file.setStatus( Status.QUEUED );\n                    }\n                } else {\n                    $.each( me.request( 'get-files', [ Status.INITED ] ), function() {\n                        this.setStatus( Status.QUEUED );\n                    });\n                }\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                var files = [];\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        files.push(file);\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                var file;\n                while ( (file = files.shift()) ) {\n                    file.setStatus( Status.PROGRESS );\n                }\n    \n                file || $.each( me.request( 'get-files',\n                        Status.INTERRUPT ), function() {\n                    this.setStatus( Status.PROGRESS );\n                });\n    \n                me._trigged = false;\n                Base.nextTick( me.__tick );\n                me.owner.trigger('startUpload');\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             *\n             * 如果第一个参数是文件，则只暂停指定文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @grammar stop( file ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stopUpload: function( file, interrupt ) {\n                var me = this;\n    \n                if (file === true) {\n                    interrupt = file;\n                    file = null;\n                }\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                // 如果只是暂停某个文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if ( file.getStatus() !== Status.PROGRESS &&\n                            file.getStatus() !== Status.QUEUED ) {\n                        return;\n                    }\n    \n                    file.setStatus( Status.INTERRUPT );\n                    $.each( me.pool, function( _, v ) {\n    \n                        // 只 abort 指定的文件。\n                        if (v.file !== file) {\n                            return;\n                        }\n    \n                        v.transport && v.transport.abort();\n                        me._putback(v);\n                        me._popBlock(v);\n                    });\n    \n                    return Base.nextTick( me.__tick );\n                }\n    \n                me.runing = false;\n    \n                if (this._promise && this._promise.file) {\n                    this._promise.file.setStatus( Status.INTERRUPT );\n                }\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * @method cancelFile\n             * @grammar cancelFile( file ) => undefined\n             * @grammar cancelFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 标记文件状态为已取消, 同时将中断文件传输。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.cancelFile( file );\n             * })\n             */\n            cancelFile: function( file ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                file.setStatus( Status.CANCELLED );\n                this.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.progress;\n            },\n    \n            _getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me._getStats().numOfQueue &&\n                    !me._getStats().numofInterrupt ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _putback: function(block) {\n                var idx;\n    \n                block.cuted.unshift(block);\n                idx = this.stack.indexOf(block.cuted);\n    \n                if (!~idx) {\n                    this.stack.unshift(block.cuted);\n                }\n            },\n    \n            _getStack: function() {\n                var i = 0,\n                    act;\n    \n                while ( (act = this.stack[ i++ ]) ) {\n                    if ( act.has() && act.file.getStatus() === Status.PROGRESS ) {\n                        return act;\n                    } else if (!act.has() ||\n                            act.file.getStatus() !== Status.PROGRESS &&\n                            act.file.getStatus() !== Status.INTERRUPT ) {\n    \n                        // 把已经处理完了的，或者，状态为非 progress（上传中）、\n                        // interupt（暂停中） 的移除。\n                        this.stack.splice( --i, 1 );\n                    }\n                }\n    \n                return null;\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    opts = me.options,\n                    act, next, done, preparing;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( (act = this._getStack()) ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.shift();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me._getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me.stack.push(act);\n                        return act.shift();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    if ( isPromise( next) ) {\n                        preparing = next.file;\n                        next = next[ next.pipe ? 'pipe' : 'then' ]( done );\n                        next.file = preparing;\n                        return next;\n                    }\n    \n                    return done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.PROGRESS ||\n                            file.getStatus() === Status.INTERRUPT ) {\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    me.owner.trigger( 'uploadStart', file );\n                    file.setStatus( Status.PROGRESS );\n    \n                    promise.file = file;\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                // 有可能在 before-send-file 的 promise 期间改变了文件状态。\n                // 如：暂停，取消\n                // 我们不能中断 promise, 但是可以在 promise 完后，不做上传操作。\n                if ( file.getStatus() !== Status.PROGRESS ) {\n    \n                    // 如果是中断，则还需要放回去。\n                    if (file.getStatus() === Status.INTERRUPT) {\n                        me._putback(block);\n                    }\n    \n                    return;\n                }\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me.updateFileProgress( file );\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @param {Object} headers 可以扩展此对象来控制上传头部。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    block.percentage = percentage;\n                    me.updateFileProgress( file );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            },\n    \n            updateFileProgress: function(file) {\n                var totalPercent = 0,\n                    uploaded = 0;\n    \n                if (!file.blocks) {\n                    return;\n                }\n    \n                $.each( file.blocks, function( _, v ) {\n                    uploaded += (v.percentage || 0) * (v.end - v.start);\n                });\n    \n                totalPercent = uploaded / file.size;\n                this.owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            name: 'validator',\n    \n            init: function() {\n                var me = this;\n                Base.nextTick(function() {\n                    $.each( validators, function() {\n                        this.call( me.owner );\n                    });\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileNumLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileSizeLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', max, file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {Boolean} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n    \n            uploader.on( 'reset', function() {\n                mapping = {};\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview FlashRuntime\n     */\n    define('runtime/flash/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var $ = Base.$,\n            type = 'flash',\n            components = {};\n    \n    \n        function getFlashVersion() {\n            var version;\n    \n            try {\n                version = navigator.plugins[ 'Shockwave Flash' ];\n                version = version.description;\n            } catch ( ex ) {\n                try {\n                    version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                            .GetVariable('$version');\n                } catch ( ex2 ) {\n                    version = '0.0';\n                }\n            }\n            version = version.match( /\\d+/g );\n            return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );\n        }\n    \n        function FlashRuntime() {\n            var pool = {},\n                clients = {},\n                destroy = this.destroy,\n                me = this,\n                jsreciver = Base.guid('webuploader_');\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/ ) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                clients[ uid ] = client;\n    \n                if ( components[ comp ] ) {\n                    if ( !pool[ uid ] ) {\n                        pool[ uid ] = new components[ comp ]( client, me );\n                    }\n    \n                    instance = pool[ uid ];\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n    \n                return me.flashExec.apply( client, arguments );\n            };\n    \n            function handler( evt, obj ) {\n                var type = evt.type || evt,\n                    parts, uid;\n    \n                parts = type.split('::');\n                uid = parts[ 0 ];\n                type = parts[ 1 ];\n    \n                // console.log.apply( console, arguments );\n    \n                if ( type === 'Ready' && uid === me.uid ) {\n                    me.trigger('ready');\n                } else if ( clients[ uid ] ) {\n                    clients[ uid ].trigger( type.toLowerCase(), evt, obj );\n                }\n    \n                // Base.log( evt, obj );\n            }\n    \n            // flash的接受器。\n            window[ jsreciver ] = function() {\n                var args = arguments;\n    \n                // 为了能捕获得到。\n                setTimeout(function() {\n                    handler.apply( null, args );\n                }, 1 );\n            };\n    \n            this.jsreciver = jsreciver;\n    \n            this.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n    \n            this.flashExec = function( comp, fn ) {\n                var flash = me.getFlash(),\n                    args = Base.slice( arguments, 2 );\n    \n                return flash.exec( this.uid, comp, fn, args );\n            };\n    \n            // @todo\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: FlashRuntime,\n    \n            init: function() {\n                var container = this.getContainer(),\n                    opts = this.options,\n                    html;\n    \n                // if not the minimal height, shims are not initialized\n                // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc)\n                container.css({\n                    position: 'absolute',\n                    top: '-8px',\n                    left: '-8px',\n                    width: '9px',\n                    height: '9px',\n                    overflow: 'hidden'\n                });\n    \n                // insert flash object\n                html = '<object id=\"' + this.uid + '\" type=\"application/' +\n                        'x-shockwave-flash\" data=\"' +  opts.swf + '\" ';\n    \n                if ( Base.browser.ie ) {\n                    html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                }\n    \n                html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">'  +\n                    '<param name=\"movie\" value=\"' + opts.swf + '\" />' +\n                    '<param name=\"flashvars\" value=\"uid=' + this.uid +\n                    '&jsreciver=' + this.jsreciver + '\" />' +\n                    '<param name=\"wmode\" value=\"transparent\" />' +\n                    '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                '</object>';\n    \n                container.html( html );\n            },\n    \n            getFlash: function() {\n                if ( this._flash ) {\n                    return this._flash;\n                }\n    \n                this._flash = $( '#' + this.uid ).get( 0 );\n                return this._flash;\n            }\n    \n        });\n    \n        FlashRuntime.register = function( name, component ) {\n            component = components[ name ] = Base.inherits( CompBase, $.extend({\n    \n                // @todo fix this later\n                flashExec: function() {\n                    var owner = this.owner,\n                        runtime = this.getRuntime();\n    \n                    return runtime.flashExec.apply( owner, arguments );\n                }\n            }, component ) );\n    \n            return component;\n        };\n    \n        if ( getFlashVersion() >= 11.4 ) {\n            Runtime.addRuntime( type, FlashRuntime );\n        }\n    \n        return FlashRuntime;\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/flash/filepicker',[\n        'base',\n        'runtime/flash/runtime'\n    ], function( Base, FlashRuntime ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'FilePicker', {\n            init: function( opts ) {\n                var copy = $.extend({}, opts ),\n                    len, i;\n    \n                // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug.\n                len = copy.accept && copy.accept.length;\n                for (  i = 0; i < len; i++ ) {\n                    if ( !copy.accept[ i ].title ) {\n                        copy.accept[ i ].title = 'Files';\n                    }\n                }\n    \n                delete copy.button;\n                delete copy.id;\n                delete copy.container;\n    \n                this.flashExec( 'FilePicker', 'init', copy );\n            },\n    \n            destroy: function() {\n                this.flashExec( 'FilePicker', 'destroy' );\n            }\n        });\n    });\n    /**\n     * @fileOverview 图片压缩\n     */\n    define('runtime/flash/image',[\n        'runtime/flash/runtime'\n    ], function( FlashRuntime ) {\n    \n        return FlashRuntime.register( 'Image', {\n            // init: function( options ) {\n            //     var owner = this.owner;\n    \n            //     this.flashExec( 'Image', 'init', options );\n            //     owner.on( 'load', function() {\n            //         debugger;\n            //     });\n            // },\n    \n            loadFromBlob: function( blob ) {\n                var owner = this.owner;\n    \n                owner.info() && this.flashExec( 'Image', 'info', owner.info() );\n                owner.meta() && this.flashExec( 'Image', 'meta', owner.meta() );\n    \n                this.flashExec( 'Image', 'loadFromBlob', blob.uid );\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/flash/blob',[\n        'runtime/flash/runtime',\n        'lib/blob'\n    ], function( FlashRuntime, Blob ) {\n    \n        return FlashRuntime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.flashExec( 'Blob', 'slice', start, end );\n    \n                return new Blob( blob.uid, blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/flash/transport',[\n        'base',\n        'runtime/flash/runtime',\n        'runtime/client'\n    ], function( Base, FlashRuntime, RuntimeClient ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n                this._responseJson = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    binary;\n    \n                xhr.connectRuntime( blob.ruid );\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.uid;\n                } else {\n                    $.each( owner._formData, function( k, v ) {\n                        xhr.exec( 'append', k, v );\n                    });\n    \n                    xhr.exec( 'appendBlob', opts.fileVal, blob.uid,\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n                xhr.exec( 'send', {\n                    method: opts.method,\n                    url: server,\n                    forceURLStream: opts.forceURLStream,\n                    mimeType: 'application/octet-stream'\n                }, binary );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            getResponse: function() {\n                return this._response || '';\n            },\n    \n            getResponseAsJson: function() {\n                return this._responseJson;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.exec('abort');\n                    xhr.destroy();\n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new RuntimeClient('XMLHttpRequest');\n    \n                xhr.on( 'uploadprogress progress', function( e ) {\n                    var percent = e.loaded / e.total;\n                    percent = Math.min( 1, Math.max( 0, percent ) );\n                    return me.trigger( 'progress', percent );\n                });\n    \n                xhr.on( 'load', function() {\n                    var status = xhr.exec('getStatus'),\n                        readBody = false,\n                        err = '',\n                        p;\n    \n                    xhr.off();\n                    me._xhr = null;\n    \n                    if ( status >= 200 && status < 300 ) {\n                        readBody = true;\n                    } else if ( status >= 500 && status < 600 ) {\n                        readBody = true;\n                        err = 'server';\n                    } else {\n                        err = 'http';\n                    }\n    \n                    if ( readBody ) {\n                        me._response = xhr.exec('getResponse');\n                        me._response = decodeURIComponent( me._response );\n    \n                        // flash 处理可能存在 bug, 没辙只能靠 js 了\n                        // try {\n                        //     me._responseJson = xhr.exec('getResponseAsJson');\n                        // } catch ( error ) {\n                            \n                        p = window.JSON && window.JSON.parse || function( s ) {\n                            try {\n                                return new Function('return ' + s).call();\n                            } catch ( err ) {\n                                return {};\n                            }\n                        };\n                        me._responseJson  = me._response ? p(me._response) : {};\n                            \n                        // }\n                    }\n                    \n                    xhr.destroy();\n                    xhr = null;\n    \n                    return err ? me.trigger( 'error', err ) : me.trigger('load');\n                });\n    \n                xhr.on( 'error', function() {\n                    xhr.off();\n                    me._xhr = null;\n                    me.trigger( 'error', 'http' );\n                });\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.exec( 'setRequestHeader', key, val );\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview 只有flash实现的文件版本。\n     */\n    define('preset/flashonly',[\n        'base',\n    \n        // widgets\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n    \n        // flash\n        'runtime/flash/filepicker',\n        'runtime/flash/image',\n        'runtime/flash/blob',\n        'runtime/flash/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/flashonly'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.flashonly.min.js",
    "content": "/* WebUploader 0.1.5 */!function(a,b){var c,d={},e=function(a,b){var c,d,e;if(\"string\"==typeof a)return h(a);for(c=[],d=a.length,e=0;d>e;e++)c.push(h(a[e]));return b.apply(null,c)},f=function(a,b,c){2===arguments.length&&(c=b,b=null),e(b||[],function(){g(a,c,arguments)})},g=function(a,b,c){var f,g={exports:b};\"function\"==typeof b&&(c.length||(c=[e,g.exports,g]),f=b.apply(null,c),void 0!==f&&(g.exports=f)),d[a]=g.exports},h=function(b){var c=d[b]||a[b];if(!c)throw new Error(\"`\"+b+\"` is undefined\");return c},i=function(a){var b,c,e,f,g,h;h=function(a){return a&&a.charAt(0).toUpperCase()+a.substr(1)};for(b in d)if(c=a,d.hasOwnProperty(b)){for(e=b.split(\"/\"),g=h(e.pop());f=h(e.shift());)c[f]=c[f]||{},c=c[f];c[g]=d[b]}return a},j=function(c){return a.__dollar=c,i(b(a,f,e))};\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=j():\"function\"==typeof define&&define.amd?define([\"jquery\"],j):(c=a.WebUploader,a.WebUploader=j(),a.WebUploader.noConflict=function(){a.WebUploader=c})}(window,function(a,b,c){return b(\"dollar-third\",[],function(){var b=a.__dollar||a.jQuery||a.Zepto;if(!b)throw new Error(\"jQuery or Zepto not found!\");return b}),b(\"dollar\",[\"dollar-third\"],function(a){return a}),b(\"promise-third\",[\"dollar\"],function(a){return{Deferred:a.Deferred,when:a.when,isPromise:function(a){return a&&\"function\"==typeof a.then}}}),b(\"promise\",[\"promise-third\"],function(a){return a}),b(\"base\",[\"dollar\",\"promise\"],function(b,c){function d(a){return function(){return h.apply(a,arguments)}}function e(a,b){return function(){return a.apply(b,arguments)}}function f(a){var b;return Object.create?Object.create(a):(b=function(){},b.prototype=a,new b)}var g=function(){},h=Function.call;return{version:\"0.1.5\",$:b,Deferred:c.Deferred,isPromise:c.isPromise,when:c.when,browser:function(a){var b={},c=a.match(/WebKit\\/([\\d.]+)/),d=a.match(/Chrome\\/([\\d.]+)/)||a.match(/CriOS\\/([\\d.]+)/),e=a.match(/MSIE\\s([\\d\\.]+)/)||a.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),f=a.match(/Firefox\\/([\\d.]+)/),g=a.match(/Safari\\/([\\d.]+)/),h=a.match(/OPR\\/([\\d.]+)/);return c&&(b.webkit=parseFloat(c[1])),d&&(b.chrome=parseFloat(d[1])),e&&(b.ie=parseFloat(e[1])),f&&(b.firefox=parseFloat(f[1])),g&&(b.safari=parseFloat(g[1])),h&&(b.opera=parseFloat(h[1])),b}(navigator.userAgent),os:function(a){var b={},c=a.match(/(?:Android);?[\\s\\/]+([\\d.]+)?/),d=a.match(/(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/);return c&&(b.android=parseFloat(c[1])),d&&(b.ios=parseFloat(d[1].replace(/_/g,\".\"))),b}(navigator.userAgent),inherits:function(a,c,d){var e;return\"function\"==typeof c?(e=c,c=null):e=c&&c.hasOwnProperty(\"constructor\")?c.constructor:function(){return a.apply(this,arguments)},b.extend(!0,e,a,d||{}),e.__super__=a.prototype,e.prototype=f(a.prototype),c&&b.extend(!0,e.prototype,c),e},noop:g,bindFn:e,log:function(){return a.console?e(console.log,console):g}(),nextTick:function(){return function(a){setTimeout(a,1)}}(),slice:d([].slice),guid:function(){var a=0;return function(b){for(var c=(+new Date).toString(32),d=0;5>d;d++)c+=Math.floor(65535*Math.random()).toString(32);return(b||\"wu_\")+c+(a++).toString(32)}}(),formatSize:function(a,b,c){var d;for(c=c||[\"B\",\"K\",\"M\",\"G\",\"TB\"];(d=c.shift())&&a>1024;)a/=1024;return(\"B\"===d?a:a.toFixed(b||2))+d}}}),b(\"mediator\",[\"base\"],function(a){function b(a,b,c,d){return f.grep(a,function(a){return!(!a||b&&a.e!==b||c&&a.cb!==c&&a.cb._cb!==c||d&&a.ctx!==d)})}function c(a,b,c){f.each((a||\"\").split(h),function(a,d){c(d,b)})}function d(a,b){for(var c,d=!1,e=-1,f=a.length;++e<f;)if(c=a[e],c.cb.apply(c.ctx2,b)===!1){d=!0;break}return!d}var e,f=a.$,g=[].slice,h=/\\s+/;return e={on:function(a,b,d){var e,f=this;return b?(e=this._events||(this._events=[]),c(a,b,function(a,b){var c={e:a};c.cb=b,c.ctx=d,c.ctx2=d||f,c.id=e.length,e.push(c)}),this):this},once:function(a,b,d){var e=this;return b?(c(a,b,function(a,b){var c=function(){return e.off(a,c),b.apply(d||e,arguments)};c._cb=b,e.on(a,c,d)}),e):e},off:function(a,d,e){var g=this._events;return g?a||d||e?(c(a,d,function(a,c){f.each(b(g,a,c,e),function(){delete g[this.id]})}),this):(this._events=[],this):this},trigger:function(a){var c,e,f;return this._events&&a?(c=g.call(arguments,1),e=b(this._events,a),f=b(this._events,\"all\"),d(e,c)&&d(f,arguments)):this}},f.extend({installTo:function(a){return f.extend(a,e)}},e)}),b(\"uploader\",[\"base\",\"mediator\"],function(a,b){function c(a){this.options=d.extend(!0,{},c.options,a),this._init(this.options)}var d=a.$;return c.options={},b.installTo(c.prototype),d.each({upload:\"start-upload\",stop:\"stop-upload\",getFile:\"get-file\",getFiles:\"get-files\",addFile:\"add-file\",addFiles:\"add-file\",sort:\"sort-files\",removeFile:\"remove-file\",cancelFile:\"cancel-file\",skipFile:\"skip-file\",retry:\"retry\",isInProgress:\"is-in-progress\",makeThumb:\"make-thumb\",md5File:\"md5-file\",getDimension:\"get-dimension\",addButton:\"add-btn\",predictRuntimeType:\"predict-runtime-type\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\",reset:\"reset\"},function(a,b){c.prototype[a]=function(){return this.request(b,arguments)}}),d.extend(c.prototype,{state:\"pending\",_init:function(a){var b=this;b.request(\"init\",a,function(){b.state=\"ready\",b.trigger(\"ready\")})},option:function(a,b){var c=this.options;return arguments.length>1?void(d.isPlainObject(b)&&d.isPlainObject(c[a])?d.extend(c[a],b):c[a]=b):a?c[a]:c},getStats:function(){var a=this.request(\"get-stats\");return a?{successNum:a.numOfSuccess,progressNum:a.numOfProgress,cancelNum:a.numOfCancel,invalidNum:a.numOfInvalid,uploadFailNum:a.numOfUploadFailed,queueNum:a.numOfQueue,interruptNum:a.numofInterrupt}:{}},trigger:function(a){var c=[].slice.call(arguments,1),e=this.options,f=\"on\"+a.substring(0,1).toUpperCase()+a.substring(1);return b.trigger.apply(this,arguments)===!1||d.isFunction(e[f])&&e[f].apply(this,c)===!1||d.isFunction(this[f])&&this[f].apply(this,c)===!1||b.trigger.apply(b,[this,a].concat(c))===!1?!1:!0},destroy:function(){this.request(\"destroy\",arguments),this.off()},request:a.noop}),a.create=c.create=function(a){return new c(a)},a.Uploader=c,c}),b(\"runtime/runtime\",[\"base\",\"mediator\"],function(a,b){function c(b){this.options=d.extend({container:document.body},b),this.uid=a.guid(\"rt_\")}var d=a.$,e={},f=function(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null};return d.extend(c.prototype,{getContainer:function(){var a,b,c=this.options;return this._container?this._container:(a=d(c.container||document.body),b=d(document.createElement(\"div\")),b.attr(\"id\",\"rt_\"+this.uid),b.css({position:\"absolute\",top:\"0px\",left:\"0px\",width:\"1px\",height:\"1px\",overflow:\"hidden\"}),a.append(b),a.addClass(\"webuploader-container\"),this._container=b,this._parent=a,b)},init:a.noop,exec:a.noop,destroy:function(){this._container&&this._container.remove(),this._parent&&this._parent.removeClass(\"webuploader-container\"),this.off()}}),c.orders=\"html5,flash\",c.addRuntime=function(a,b){e[a]=b},c.hasRuntime=function(a){return!!(a?e[a]:f(e))},c.create=function(a,b){var g,h;if(b=b||c.orders,d.each(b.split(/\\s*,\\s*/g),function(){return e[this]?(g=this,!1):void 0}),g=g||f(e),!g)throw new Error(\"Runtime Error\");return h=new e[g](a)},b.installTo(c.prototype),c}),b(\"runtime/client\",[\"base\",\"mediator\",\"runtime/runtime\"],function(a,b,c){function d(b,d){var f,g=a.Deferred();this.uid=a.guid(\"client_\"),this.runtimeReady=function(a){return g.done(a)},this.connectRuntime=function(b,h){if(f)throw new Error(\"already connected!\");return g.done(h),\"string\"==typeof b&&e.get(b)&&(f=e.get(b)),f=f||e.get(null,d),f?(a.$.extend(f.options,b),f.__promise.then(g.resolve),f.__client++):(f=c.create(b,b.runtimeOrder),f.__promise=g.promise(),f.once(\"ready\",g.resolve),f.init(),e.add(f),f.__client=1),d&&(f.__standalone=d),f},this.getRuntime=function(){return f},this.disconnectRuntime=function(){f&&(f.__client--,f.__client<=0&&(e.remove(f),delete f.__promise,f.destroy()),f=null)},this.exec=function(){if(f){var c=a.slice(arguments);return b&&c.unshift(b),f.exec.apply(this,c)}},this.getRuid=function(){return f&&f.uid},this.destroy=function(a){return function(){a&&a.apply(this,arguments),this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()}}(this.destroy)}var e;return e=function(){var a={};return{add:function(b){a[b.uid]=b},get:function(b,c){var d;if(b)return a[b];for(d in a)if(!c||!a[d].__standalone)return a[d];return null},remove:function(b){delete a[b.uid]}}}(),b.installTo(d.prototype),d}),b(\"lib/blob\",[\"base\",\"runtime/client\"],function(a,b){function c(a,c){var d=this;d.source=c,d.ruid=a,this.size=c.size||0,this.type=!c.type&&this.ext&&~\"jpg,jpeg,png,gif,bmp\".indexOf(this.ext)?\"image/\"+(\"jpg\"===this.ext?\"jpeg\":this.ext):c.type||\"application/octet-stream\",b.call(d,\"Blob\"),this.uid=c.uid||this.uid,a&&d.connectRuntime(a)}return a.inherits(b,{constructor:c,slice:function(a,b){return this.exec(\"slice\",a,b)},getSource:function(){return this.source}}),c}),b(\"lib/file\",[\"base\",\"lib/blob\"],function(a,b){function c(a,c){var f;this.name=c.name||\"untitled\"+d++,f=e.exec(c.name)?RegExp.$1.toLowerCase():\"\",!f&&c.type&&(f=/\\/(jpg|jpeg|png|gif|bmp)$/i.exec(c.type)?RegExp.$1.toLowerCase():\"\",this.name+=\".\"+f),this.ext=f,this.lastModifiedDate=c.lastModifiedDate||(new Date).toLocaleString(),b.apply(this,arguments)}var d=1,e=/\\.([^.]+)$/;return a.inherits(b,c)}),b(\"lib/filepicker\",[\"base\",\"runtime/client\",\"lib/file\"],function(b,c,d){function e(a){if(a=this.options=f.extend({},e.options,a),a.container=f(a.id),!a.container.length)throw new Error(\"按钮指定错误\");a.innerHTML=a.innerHTML||a.label||a.container.html()||\"\",a.button=f(a.button||document.createElement(\"div\")),a.button.html(a.innerHTML),a.container.html(a.button),c.call(this,\"FilePicker\",!0)}var f=b.$;return e.options={button:null,container:null,label:null,innerHTML:null,multiple:!0,accept:null,name:\"file\"},b.inherits(c,{constructor:e,init:function(){var c=this,e=c.options,g=e.button;g.addClass(\"webuploader-pick\"),c.on(\"all\",function(a){var b;switch(a){case\"mouseenter\":g.addClass(\"webuploader-pick-hover\");break;case\"mouseleave\":g.removeClass(\"webuploader-pick-hover\");break;case\"change\":b=c.exec(\"getFiles\"),c.trigger(\"select\",f.map(b,function(a){return a=new d(c.getRuid(),a),a._refer=e.container,a}),e.container)}}),c.connectRuntime(e,function(){c.refresh(),c.exec(\"init\",e),c.trigger(\"ready\")}),this._resizeHandler=b.bindFn(this.refresh,this),f(a).on(\"resize\",this._resizeHandler)},refresh:function(){var a=this.getRuntime().getContainer(),b=this.options.button,c=b.outerWidth?b.outerWidth():b.width(),d=b.outerHeight?b.outerHeight():b.height(),e=b.offset();c&&d&&a.css({bottom:\"auto\",right:\"auto\",width:c+\"px\",height:d+\"px\"}).offset(e)},enable:function(){var a=this.options.button;a.removeClass(\"webuploader-pick-disable\"),this.refresh()},disable:function(){var a=this.options.button;this.getRuntime().getContainer().css({top:\"-99999px\"}),a.addClass(\"webuploader-pick-disable\")},destroy:function(){var b=this.options.button;f(a).off(\"resize\",this._resizeHandler),b.removeClass(\"webuploader-pick-disable webuploader-pick-hover webuploader-pick\")}}),e}),b(\"widgets/widget\",[\"base\",\"uploader\"],function(a,b){function c(a){if(!a)return!1;var b=a.length,c=e.type(a);return 1===a.nodeType&&b?!0:\"array\"===c||\"function\"!==c&&\"string\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a)}function d(a){this.owner=a,this.options=a.options}var e=a.$,f=b.prototype._init,g=b.prototype.destroy,h={},i=[];return e.extend(d.prototype,{init:a.noop,invoke:function(a,b){var c=this.responseMap;return c&&a in c&&c[a]in this&&e.isFunction(this[c[a]])?this[c[a]].apply(this,b):h},request:function(){return this.owner.request.apply(this.owner,arguments)}}),e.extend(b.prototype,{_init:function(){var a=this,b=a._widgets=[],c=a.options.disableWidgets||\"\";return e.each(i,function(d,e){(!c||!~c.indexOf(e._name))&&b.push(new e(a))}),f.apply(a,arguments)},request:function(b,d,e){var f,g,i,j,k=0,l=this._widgets,m=l&&l.length,n=[],o=[];for(d=c(d)?d:[d];m>k;k++)f=l[k],g=f.invoke(b,d),g!==h&&(a.isPromise(g)?o.push(g):n.push(g));return e||o.length?(i=a.when.apply(a,o),j=i.pipe?\"pipe\":\"then\",i[j](function(){var b=a.Deferred(),c=arguments;return 1===c.length&&(c=c[0]),setTimeout(function(){b.resolve(c)},1),b.promise()})[e?j:\"done\"](e||a.noop)):n[0]},destroy:function(){g.apply(this,arguments),this._widgets=null}}),b.register=d.register=function(b,c){var f,g={init:\"init\",destroy:\"destroy\",name:\"anonymous\"};return 1===arguments.length?(c=b,e.each(c,function(a){return\"_\"===a[0]||\"name\"===a?void(\"name\"===a&&(g.name=c.name)):void(g[a.replace(/[A-Z]/g,\"-$&\").toLowerCase()]=a)})):g=e.extend(g,b),c.responseMap=g,f=a.inherits(d,c),f._name=g.name,i.push(f),f},b.unRegister=d.unRegister=function(a){if(a&&\"anonymous\"!==a)for(var b=i.length;b--;)i[b]._name===a&&i.splice(b,1)},d}),b(\"widgets/filepicker\",[\"base\",\"uploader\",\"lib/filepicker\",\"widgets/widget\"],function(a,b,c){var d=a.$;return d.extend(b.options,{pick:null,accept:null}),b.register({name:\"picker\",init:function(a){return this.pickers=[],a.pick&&this.addBtn(a.pick)},refresh:function(){d.each(this.pickers,function(){this.refresh()})},addBtn:function(b){var e=this,f=e.options,g=f.accept,h=[];if(b)return d.isPlainObject(b)||(b={id:b}),d(b.id).each(function(){var i,j,k;k=a.Deferred(),i=d.extend({},b,{accept:d.isPlainObject(g)?[g]:g,swf:f.swf,runtimeOrder:f.runtimeOrder,id:this}),j=new c(i),j.once(\"ready\",k.resolve),j.on(\"select\",function(a){e.owner.request(\"add-file\",[a])}),j.init(),e.pickers.push(j),h.push(k.promise())}),a.when.apply(a,h)},disable:function(){d.each(this.pickers,function(){this.disable()})},enable:function(){d.each(this.pickers,function(){this.enable()})},destroy:function(){d.each(this.pickers,function(){this.destroy()}),this.pickers=null}})}),b(\"lib/image\",[\"base\",\"runtime/client\",\"lib/blob\"],function(a,b,c){function d(a){this.options=e.extend({},d.options,a),b.call(this,\"Image\"),this.on(\"load\",function(){this._info=this.exec(\"info\"),this._meta=this.exec(\"meta\")})}var e=a.$;return d.options={quality:90,crop:!1,preserveHeaders:!1,allowMagnify:!1},a.inherits(b,{constructor:d,info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},loadFromBlob:function(a){var b=this,c=a.getRuid();this.connectRuntime(c,function(){b.exec(\"init\",b.options),b.exec(\"loadFromBlob\",a)})},resize:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"resize\"].concat(b))},crop:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"crop\"].concat(b))},getAsDataUrl:function(a){return this.exec(\"getAsDataUrl\",a)},getAsBlob:function(a){var b=this.exec(\"getAsBlob\",a);return new c(this.getRuid(),b)}}),d}),b(\"widgets/image\",[\"base\",\"uploader\",\"lib/image\",\"widgets/widget\"],function(a,b,c){var d,e=a.$;return d=function(a){var b=0,c=[],d=function(){for(var d;c.length&&a>b;)d=c.shift(),b+=d[0],d[1]()};return function(a,e,f){c.push([e,f]),a.once(\"destroy\",function(){b-=e,setTimeout(d,1)}),setTimeout(d,1)}}(5242880),e.extend(b.options,{thumb:{width:110,height:110,quality:70,allowMagnify:!0,crop:!0,preserveHeaders:!1,type:\"image/jpeg\"},compress:{width:1600,height:1600,quality:90,allowMagnify:!1,crop:!1,preserveHeaders:!0}}),b.register({name:\"image\",makeThumb:function(a,b,f,g){var h,i;return a=this.request(\"get-file\",a),a.type.match(/^image/)?(h=e.extend({},this.options.thumb),e.isPlainObject(f)&&(h=e.extend(h,f),f=null),f=f||h.width,g=g||h.height,i=new c(h),i.once(\"load\",function(){a._info=a._info||i.info(),a._meta=a._meta||i.meta(),1>=f&&f>0&&(f=a._info.width*f),1>=g&&g>0&&(g=a._info.height*g),i.resize(f,g)}),i.once(\"complete\",function(){b(!1,i.getAsDataUrl(h.type)),i.destroy()}),i.once(\"error\",function(a){b(a||!0),i.destroy()}),void d(i,a.source.size,function(){a._info&&i.info(a._info),a._meta&&i.meta(a._meta),i.loadFromBlob(a.source)})):void b(!0)},beforeSendFile:function(b){var d,f,g=this.options.compress||this.options.resize,h=g&&g.compressSize||0,i=g&&g.noCompressIfLarger||!1;return b=this.request(\"get-file\",b),!g||!~\"image/jpeg,image/jpg\".indexOf(b.type)||b.size<h||b._compressed?void 0:(g=e.extend({},g),f=a.Deferred(),d=new c(g),f.always(function(){d.destroy(),d=null}),d.once(\"error\",f.reject),d.once(\"load\",function(){var a=g.width,c=g.height;b._info=b._info||d.info(),b._meta=b._meta||d.meta(),1>=a&&a>0&&(a=b._info.width*a),1>=c&&c>0&&(c=b._info.height*c),d.resize(a,c)}),d.once(\"complete\",function(){var a,c;try{a=d.getAsBlob(g.type),c=b.size,(!i||a.size<c)&&(b.source=a,b.size=a.size,b.trigger(\"resize\",a.size,c)),b._compressed=!0,f.resolve()}catch(e){f.resolve()}}),b._info&&d.info(b._info),b._meta&&d.meta(b._meta),d.loadFromBlob(b.source),f.promise())}})}),b(\"file\",[\"base\",\"mediator\"],function(a,b){function c(){return f+g++}function d(a){this.name=a.name||\"Untitled\",this.size=a.size||0,this.type=a.type||\"application/octet-stream\",this.lastModifiedDate=a.lastModifiedDate||1*new Date,this.id=c(),this.ext=h.exec(this.name)?RegExp.$1:\"\",this.statusText=\"\",i[this.id]=d.Status.INITED,this.source=a,this.loaded=0,this.on(\"error\",function(a){this.setStatus(d.Status.ERROR,a)})}var e=a.$,f=\"WU_FILE_\",g=0,h=/\\.([^.]+)$/,i={};return e.extend(d.prototype,{setStatus:function(a,b){var c=i[this.id];\"undefined\"!=typeof b&&(this.statusText=b),a!==c&&(i[this.id]=a,this.trigger(\"statuschange\",a,c))},getStatus:function(){return i[this.id]},getSource:function(){return this.source},destroy:function(){this.off(),delete i[this.id]}}),b.installTo(d.prototype),d.Status={INITED:\"inited\",QUEUED:\"queued\",PROGRESS:\"progress\",ERROR:\"error\",COMPLETE:\"complete\",CANCELLED:\"cancelled\",INTERRUPT:\"interrupt\",INVALID:\"invalid\"},d}),b(\"queue\",[\"base\",\"mediator\",\"file\"],function(a,b,c){function d(){this.stats={numOfQueue:0,numOfSuccess:0,numOfCancel:0,numOfProgress:0,numOfUploadFailed:0,numOfInvalid:0,numofDeleted:0,numofInterrupt:0},this._queue=[],this._map={}}var e=a.$,f=c.Status;return e.extend(d.prototype,{append:function(a){return this._queue.push(a),this._fileAdded(a),this},prepend:function(a){return this._queue.unshift(a),this._fileAdded(a),this},getFile:function(a){return\"string\"!=typeof a?a:this._map[a]},fetch:function(a){var b,c,d=this._queue.length;for(a=a||f.QUEUED,b=0;d>b;b++)if(c=this._queue[b],a===c.getStatus())return c;return null},sort:function(a){\"function\"==typeof a&&this._queue.sort(a)},getFiles:function(){for(var a,b=[].slice.call(arguments,0),c=[],d=0,f=this._queue.length;f>d;d++)a=this._queue[d],(!b.length||~e.inArray(a.getStatus(),b))&&c.push(a);return c},removeFile:function(a){var b=this._map[a.id];b&&(delete this._map[a.id],a.destroy(),this.stats.numofDeleted++)},_fileAdded:function(a){var b=this,c=this._map[a.id];c||(this._map[a.id]=a,a.on(\"statuschange\",function(a,c){b._onFileStatusChange(a,c)}))},_onFileStatusChange:function(a,b){var c=this.stats;switch(b){case f.PROGRESS:c.numOfProgress--;break;case f.QUEUED:c.numOfQueue--;break;case f.ERROR:c.numOfUploadFailed--;break;case f.INVALID:c.numOfInvalid--;break;case f.INTERRUPT:c.numofInterrupt--}switch(a){case f.QUEUED:c.numOfQueue++;break;case f.PROGRESS:c.numOfProgress++;break;case f.ERROR:c.numOfUploadFailed++;break;case f.COMPLETE:c.numOfSuccess++;break;case f.CANCELLED:c.numOfCancel++;break;case f.INVALID:c.numOfInvalid++;break;case f.INTERRUPT:c.numofInterrupt++}}}),b.installTo(d.prototype),d}),b(\"widgets/queue\",[\"base\",\"uploader\",\"queue\",\"file\",\"lib/file\",\"runtime/client\",\"widgets/widget\"],function(a,b,c,d,e,f){var g=a.$,h=/\\.\\w+$/,i=d.Status;return b.register({name:\"queue\",init:function(b){var d,e,h,i,j,k,l,m=this;if(g.isPlainObject(b.accept)&&(b.accept=[b.accept]),b.accept){for(j=[],h=0,e=b.accept.length;e>h;h++)i=b.accept[h].extensions,i&&j.push(i);j.length&&(k=\"\\\\.\"+j.join(\",\").replace(/,/g,\"$|\\\\.\").replace(/\\*/g,\".*\")+\"$\"),m.accept=new RegExp(k,\"i\")}return m.queue=new c,m.stats=m.queue.stats,\"html5\"===this.request(\"predict-runtime-type\")?(d=a.Deferred(),this.placeholder=l=new f(\"Placeholder\"),l.connectRuntime({runtimeOrder:\"html5\"},function(){m._ruid=l.getRuid(),d.resolve()}),d.promise()):void 0},_wrapFile:function(a){if(!(a instanceof d)){if(!(a instanceof e)){if(!this._ruid)throw new Error(\"Can't add external files.\");a=new e(this._ruid,a)}a=new d(a)}return a},acceptFile:function(a){var b=!a||!a.size||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b},_addFile:function(a){var b=this;return a=b._wrapFile(a),b.owner.trigger(\"beforeFileQueued\",a)?b.acceptFile(a)?(b.queue.append(a),b.owner.trigger(\"fileQueued\",a),a):void b.owner.trigger(\"error\",\"Q_TYPE_DENIED\",a):void 0},getFile:function(a){return this.queue.getFile(a)},addFile:function(a){var b=this;a.length||(a=[a]),a=g.map(a,function(a){return b._addFile(a)}),b.owner.trigger(\"filesQueued\",a),b.options.auto&&setTimeout(function(){b.request(\"start-upload\")},20)},getStats:function(){return this.stats},removeFile:function(a,b){var c=this;a=a.id?a:c.queue.getFile(a),this.request(\"cancel-file\",a),b&&this.queue.removeFile(a)},getFiles:function(){return this.queue.getFiles.apply(this.queue,arguments)},fetchFile:function(){return this.queue.fetch.apply(this.queue,arguments)},retry:function(a,b){var c,d,e,f=this;if(a)return a=a.id?a:f.queue.getFile(a),a.setStatus(i.QUEUED),void(b||f.request(\"start-upload\"));for(c=f.queue.getFiles(i.ERROR),d=0,e=c.length;e>d;d++)a=c[d],a.setStatus(i.QUEUED);f.request(\"start-upload\")},sortFiles:function(){return this.queue.sort.apply(this.queue,arguments)},reset:function(){this.owner.trigger(\"reset\"),this.queue=new c,this.stats=this.queue.stats},destroy:function(){this.reset(),this.placeholder&&this.placeholder.destroy()}})}),b(\"widgets/runtime\",[\"uploader\",\"runtime/runtime\",\"widgets/widget\"],function(a,b){return a.support=function(){return b.hasRuntime.apply(b,arguments)},a.register({name:\"runtime\",init:function(){if(!this.predictRuntimeType())throw Error(\"Runtime Error\")},predictRuntimeType:function(){var a,c,d=this.options.runtimeOrder||b.orders,e=this.type;if(!e)for(d=d.split(/\\s*,\\s*/g),a=0,c=d.length;c>a;a++)if(b.hasRuntime(d[a])){this.type=e=d[a];break}return e}})}),b(\"lib/transport\",[\"base\",\"runtime/client\",\"mediator\"],function(a,b,c){function d(a){var c=this;a=c.options=e.extend(!0,{},d.options,a||{}),b.call(this,\"Transport\"),this._blob=null,this._formData=a.formData||{},this._headers=a.headers||{},this.on(\"progress\",this._timeout),this.on(\"load error\",function(){c.trigger(\"progress\",1),clearTimeout(c._timer)})}var e=a.$;return d.options={server:\"\",method:\"POST\",withCredentials:!1,fileVal:\"file\",timeout:12e4,formData:{},headers:{},sendAsBinary:!1},e.extend(d.prototype,{appendBlob:function(a,b,c){var d=this,e=d.options;d.getRuid()&&d.disconnectRuntime(),d.connectRuntime(b.ruid,function(){d.exec(\"init\")}),d._blob=b,e.fileVal=a||e.fileVal,e.filename=c||e.filename},append:function(a,b){\"object\"==typeof a?e.extend(this._formData,a):this._formData[a]=b},setRequestHeader:function(a,b){\"object\"==typeof a?e.extend(this._headers,a):this._headers[a]=b},send:function(a){this.exec(\"send\",a),this._timeout()},abort:function(){return clearTimeout(this._timer),this.exec(\"abort\")},destroy:function(){this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()},getResponse:function(){return this.exec(\"getResponse\")},getResponseAsJson:function(){return this.exec(\"getResponseAsJson\")},getStatus:function(){return this.exec(\"getStatus\")},_timeout:function(){var a=this,b=a.options.timeout;b&&(clearTimeout(a._timer),a._timer=setTimeout(function(){a.abort(),a.trigger(\"error\",\"timeout\")},b))}}),c.installTo(d.prototype),d}),b(\"widgets/upload\",[\"base\",\"uploader\",\"file\",\"lib/transport\",\"widgets/widget\"],function(a,b,c,d){function e(a,b){var c,d,e=[],f=a.source,g=f.size,h=b?Math.ceil(g/b):1,i=0,j=0;for(d={file:a,has:function(){return!!e.length},shift:function(){return e.shift()},unshift:function(a){e.unshift(a)}};h>j;)c=Math.min(b,g-i),e.push({file:a,start:i,end:b?i+c:g,total:g,chunks:h,chunk:j++,cuted:d}),i+=c;return a.blocks=e.concat(),a.remaning=e.length,d}var f=a.$,g=a.isPromise,h=c.Status;f.extend(b.options,{prepareNextFile:!1,chunked:!1,chunkSize:5242880,chunkRetry:2,threads:3,formData:{}}),b.register({name:\"upload\",init:function(){var b=this.owner,c=this;this.runing=!1,this.progress=!1,b.on(\"startUpload\",function(){c.progress=!0}).on(\"uploadFinished\",function(){c.progress=!1}),this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this.__tick=a.bindFn(this._tick,this),b.on(\"uploadComplete\",function(a){a.blocks&&f.each(a.blocks,function(a,b){b.transport&&(b.transport.abort(),b.transport.destroy()),delete b.transport}),delete a.blocks,delete a.remaning})},reset:function(){this.request(\"stop-upload\",!0),this.runing=!1,this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this._trigged=!1,this._promise=null},startUpload:function(b){var c=this;if(f.each(c.request(\"get-files\",h.INVALID),function(){c.request(\"remove-file\",this)}),b)if(b=b.id?b:c.request(\"get-file\",b),b.getStatus()===h.INTERRUPT)f.each(c.pool,function(a,c){c.file===b&&c.transport&&c.transport.send()}),b.setStatus(h.QUEUED);else{if(b.getStatus()===h.PROGRESS)return;b.setStatus(h.QUEUED)}else f.each(c.request(\"get-files\",[h.INITED]),function(){this.setStatus(h.QUEUED)});if(!c.runing){c.runing=!0;var d=[];f.each(c.pool,function(a,b){var e=b.file;e.getStatus()===h.INTERRUPT&&(d.push(e),c._trigged=!1,b.transport&&b.transport.send())});for(var b;b=d.shift();)b.setStatus(h.PROGRESS);b||f.each(c.request(\"get-files\",h.INTERRUPT),function(){this.setStatus(h.PROGRESS)}),c._trigged=!1,a.nextTick(c.__tick),c.owner.trigger(\"startUpload\")}},stopUpload:function(b,c){var d=this;if(b===!0&&(c=b,b=null),d.runing!==!1){if(b){if(b=b.id?b:d.request(\"get-file\",b),b.getStatus()!==h.PROGRESS&&b.getStatus()!==h.QUEUED)return;return b.setStatus(h.INTERRUPT),f.each(d.pool,function(a,c){c.file===b&&(c.transport&&c.transport.abort(),d._putback(c),d._popBlock(c))}),a.nextTick(d.__tick)}d.runing=!1,this._promise&&this._promise.file&&this._promise.file.setStatus(h.INTERRUPT),c&&f.each(d.pool,function(a,b){b.transport&&b.transport.abort(),b.file.setStatus(h.INTERRUPT)}),d.owner.trigger(\"stopUpload\")}},cancelFile:function(a){a=a.id?a:this.request(\"get-file\",a),a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),a.setStatus(h.CANCELLED),this.owner.trigger(\"fileDequeued\",a)},isInProgress:function(){return!!this.progress},_getStats:function(){return this.request(\"get-stats\")},skipFile:function(a,b){a=a.id?a:this.request(\"get-file\",a),a.setStatus(b||h.COMPLETE),a.skipped=!0,a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),this.owner.trigger(\"uploadSkip\",a)},_tick:function(){var b,c,d=this,e=d.options;return d._promise?d._promise.always(d.__tick):void(d.pool.length<e.threads&&(c=d._nextBlock())?(d._trigged=!1,b=function(b){d._promise=null,b&&b.file&&d._startSend(b),a.nextTick(d.__tick)},d._promise=g(c)?c.always(b):b(c)):d.remaning||d._getStats().numOfQueue||d._getStats().numofInterrupt||(d.runing=!1,d._trigged||a.nextTick(function(){d.owner.trigger(\"uploadFinished\")}),d._trigged=!0))},_putback:function(a){var b;a.cuted.unshift(a),b=this.stack.indexOf(a.cuted),~b||this.stack.unshift(a.cuted)},_getStack:function(){for(var a,b=0;a=this.stack[b++];){if(a.has()&&a.file.getStatus()===h.PROGRESS)return a;(!a.has()||a.file.getStatus()!==h.PROGRESS&&a.file.getStatus()!==h.INTERRUPT)&&this.stack.splice(--b,1)}return null},_nextBlock:function(){var a,b,c,d,f=this,h=f.options;return(a=this._getStack())?(h.prepareNextFile&&!f.pending.length&&f._prepareNextFile(),a.shift()):f.runing?(!f.pending.length&&f._getStats().numOfQueue&&f._prepareNextFile(),b=f.pending.shift(),c=function(b){return b?(a=e(b,h.chunked?h.chunkSize:0),f.stack.push(a),a.shift()):null},g(b)?(d=b.file,b=b[b.pipe?\"pipe\":\"then\"](c),b.file=d,b):c(b)):void 0},_prepareNextFile:function(){var a,b=this,c=b.request(\"fetch-file\"),d=b.pending;c&&(a=b.request(\"before-send-file\",c,function(){return c.getStatus()===h.PROGRESS||c.getStatus()===h.INTERRUPT?c:b._finishFile(c)}),b.owner.trigger(\"uploadStart\",c),c.setStatus(h.PROGRESS),a.file=c,a.done(function(){var b=f.inArray(a,d);~b&&d.splice(b,1,c)}),a.fail(function(a){c.setStatus(h.ERROR,a),b.owner.trigger(\"uploadError\",c,a),b.owner.trigger(\"uploadComplete\",c)}),d.push(a))},_popBlock:function(a){var b=f.inArray(a,this.pool);this.pool.splice(b,1),a.file.remaning--,this.remaning--},_startSend:function(b){var c,d=this,e=b.file;return e.getStatus()!==h.PROGRESS?void(e.getStatus()===h.INTERRUPT&&d._putback(b)):(d.pool.push(b),d.remaning++,b.blob=1===b.chunks?e.source:e.source.slice(b.start,b.end),c=d.request(\"before-send\",b,function(){e.getStatus()===h.PROGRESS?d._doSend(b):(d._popBlock(b),a.nextTick(d.__tick))}),void c.fail(function(){1===e.remaning?d._finishFile(e).always(function(){b.percentage=1,d._popBlock(b),d.owner.trigger(\"uploadComplete\",e),a.nextTick(d.__tick)}):(b.percentage=1,d.updateFileProgress(e),d._popBlock(b),a.nextTick(d.__tick))}))},_doSend:function(b){var c,e,g=this,i=g.owner,j=g.options,k=b.file,l=new d(j),m=f.extend({},j.formData),n=f.extend({},j.headers);b.transport=l,l.on(\"destroy\",function(){delete b.transport,g._popBlock(b),a.nextTick(g.__tick)}),l.on(\"progress\",function(a){b.percentage=a,g.updateFileProgress(k)}),c=function(a){var c;return e=l.getResponseAsJson()||{},e._raw=l.getResponse(),c=function(b){a=b},i.trigger(\"uploadAccept\",b,e,c)||(a=a||\"server\"),a},l.on(\"error\",function(a,d){b.retried=b.retried||0,b.chunks>1&&~\"http,abort\".indexOf(a)&&b.retried<j.chunkRetry?(b.retried++,l.send()):(d||\"server\"!==a||(a=c(a)),k.setStatus(h.ERROR,a),i.trigger(\"uploadError\",k,a),i.trigger(\"uploadComplete\",k))}),l.on(\"load\",function(){var a;return(a=c())?void l.trigger(\"error\",a,!0):void(1===k.remaning?g._finishFile(k,e):l.destroy())}),m=f.extend(m,{id:k.id,name:k.name,type:k.type,lastModifiedDate:k.lastModifiedDate,size:k.size}),b.chunks>1&&f.extend(m,{chunks:b.chunks,chunk:b.chunk}),i.trigger(\"uploadBeforeSend\",b,m,n),l.appendBlob(j.fileVal,b.blob,k.name),l.append(m),l.setRequestHeader(n),l.send()},_finishFile:function(a,b,c){var d=this.owner;return d.request(\"after-send-file\",arguments,function(){a.setStatus(h.COMPLETE),d.trigger(\"uploadSuccess\",a,b,c)}).fail(function(b){a.getStatus()===h.PROGRESS&&a.setStatus(h.ERROR,b),d.trigger(\"uploadError\",a,b)}).always(function(){d.trigger(\"uploadComplete\",a)})},updateFileProgress:function(a){var b=0,c=0;a.blocks&&(f.each(a.blocks,function(a,b){c+=(b.percentage||0)*(b.end-b.start)}),b=c/a.size,this.owner.trigger(\"uploadProgress\",a,b||0))}})}),b(\"widgets/validator\",[\"base\",\"uploader\",\"file\",\"widgets/widget\"],function(a,b,c){var d,e=a.$,f={};return d={addValidator:function(a,b){f[a]=b},removeValidator:function(a){delete f[a]}},b.register({name:\"validator\",init:function(){var b=this;a.nextTick(function(){e.each(f,function(){this.call(b.owner)})})}}),d.addValidator(\"fileNumLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileNumLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){return c>=d&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_NUM_LIMIT\",d,a),setTimeout(function(){e=!0},1)),c>=d?!1:!0}),a.on(\"fileQueued\",function(){c++}),a.on(\"fileDequeued\",function(){c--}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSizeLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileSizeLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){var b=c+a.size>d;return b&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_SIZE_LIMIT\",d,a),setTimeout(function(){e=!0},1)),b?!1:!0}),a.on(\"fileQueued\",function(a){c+=a.size}),a.on(\"fileDequeued\",function(a){c-=a.size}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSingleSizeLimit\",function(){var a=this,b=a.options,d=b.fileSingleSizeLimit;d&&a.on(\"beforeFileQueued\",function(a){return a.size>d?(a.setStatus(c.Status.INVALID,\"exceed_size\"),this.trigger(\"error\",\"F_EXCEED_SIZE\",d,a),!1):void 0})}),d.addValidator(\"duplicate\",function(){function a(a){for(var b,c=0,d=0,e=a.length;e>d;d++)b=a.charCodeAt(d),c=b+(c<<6)+(c<<16)-c;return c}var b=this,c=b.options,d={};c.duplicate||(b.on(\"beforeFileQueued\",function(b){var c=b.__hash||(b.__hash=a(b.name+b.size+b.lastModifiedDate));\nreturn d[c]?(this.trigger(\"error\",\"F_DUPLICATE\",b),!1):void 0}),b.on(\"fileQueued\",function(a){var b=a.__hash;b&&(d[b]=!0)}),b.on(\"fileDequeued\",function(a){var b=a.__hash;b&&delete d[b]}),b.on(\"reset\",function(){d={}}))}),d}),b(\"runtime/compbase\",[],function(){function a(a,b){this.owner=a,this.options=a.options,this.getRuntime=function(){return b},this.getRuid=function(){return b.uid},this.trigger=function(){return a.trigger.apply(a,arguments)}}return a}),b(\"runtime/flash/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a;try{a=navigator.plugins[\"Shockwave Flash\"],a=a.description}catch(b){try{a=new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\").GetVariable(\"$version\")}catch(c){a=\"0.0\"}}return a=a.match(/\\d+/g),parseFloat(a[0]+\".\"+a[1],10)}function f(){function d(a,b){var c,d,e=a.type||a;c=e.split(\"::\"),d=c[0],e=c[1],\"Ready\"===e&&d===j.uid?j.trigger(\"ready\"):f[d]&&f[d].trigger(e.toLowerCase(),a,b)}var e={},f={},g=this.destroy,j=this,k=b.guid(\"webuploader_\");c.apply(j,arguments),j.type=h,j.exec=function(a,c){var d,g=this,h=g.uid,k=b.slice(arguments,2);return f[h]=g,i[a]&&(e[h]||(e[h]=new i[a](g,j)),d=e[h],d[c])?d[c].apply(d,k):j.flashExec.apply(g,arguments)},a[k]=function(){var a=arguments;setTimeout(function(){d.apply(null,a)},1)},this.jsreciver=k,this.destroy=function(){return g&&g.apply(this,arguments)},this.flashExec=function(a,c){var d=j.getFlash(),e=b.slice(arguments,2);return d.exec(this.uid,a,c,e)}}var g=b.$,h=\"flash\",i={};return b.inherits(c,{constructor:f,init:function(){var a,c=this.getContainer(),d=this.options;c.css({position:\"absolute\",top:\"-8px\",left:\"-8px\",width:\"9px\",height:\"9px\",overflow:\"hidden\"}),a='<object id=\"'+this.uid+'\" type=\"application/x-shockwave-flash\" data=\"'+d.swf+'\" ',b.browser.ie&&(a+='classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" '),a+='width=\"100%\" height=\"100%\" style=\"outline:0\"><param name=\"movie\" value=\"'+d.swf+'\" /><param name=\"flashvars\" value=\"uid='+this.uid+\"&jsreciver=\"+this.jsreciver+'\" /><param name=\"wmode\" value=\"transparent\" /><param name=\"allowscriptaccess\" value=\"always\" /></object>',c.html(a)},getFlash:function(){return this._flash?this._flash:(this._flash=g(\"#\"+this.uid).get(0),this._flash)}}),f.register=function(a,c){return c=i[a]=b.inherits(d,g.extend({flashExec:function(){var a=this.owner,b=this.getRuntime();return b.flashExec.apply(a,arguments)}},c))},e()>=11.4&&c.addRuntime(h,f),f}),b(\"runtime/flash/filepicker\",[\"base\",\"runtime/flash/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(a){var b,d,e=c.extend({},a);for(b=e.accept&&e.accept.length,d=0;b>d;d++)e.accept[d].title||(e.accept[d].title=\"Files\");delete e.button,delete e.id,delete e.container,this.flashExec(\"FilePicker\",\"init\",e)},destroy:function(){this.flashExec(\"FilePicker\",\"destroy\")}})}),b(\"runtime/flash/image\",[\"runtime/flash/runtime\"],function(a){return a.register(\"Image\",{loadFromBlob:function(a){var b=this.owner;b.info()&&this.flashExec(\"Image\",\"info\",b.info()),b.meta()&&this.flashExec(\"Image\",\"meta\",b.meta()),this.flashExec(\"Image\",\"loadFromBlob\",a.uid)}})}),b(\"runtime/flash/blob\",[\"runtime/flash/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.flashExec(\"Blob\",\"slice\",a,c);return new b(d.uid,d)}})}),b(\"runtime/flash/transport\",[\"base\",\"runtime/flash/runtime\",\"runtime/client\"],function(b,c,d){var e=b.$;return c.register(\"Transport\",{init:function(){this._status=0,this._response=null,this._responseJson=null},send:function(){var a,b=this.owner,c=this.options,d=this._initAjax(),f=b._blob,g=c.server;d.connectRuntime(f.ruid),c.sendAsBinary?(g+=(/\\?/.test(g)?\"&\":\"?\")+e.param(b._formData),a=f.uid):(e.each(b._formData,function(a,b){d.exec(\"append\",a,b)}),d.exec(\"appendBlob\",c.fileVal,f.uid,c.filename||b._formData.name||\"\")),this._setRequestHeader(d,c.headers),d.exec(\"send\",{method:c.method,url:g,forceURLStream:c.forceURLStream,mimeType:\"application/octet-stream\"},a)},getStatus:function(){return this._status},getResponse:function(){return this._response||\"\"},getResponseAsJson:function(){return this._responseJson},abort:function(){var a=this._xhr;a&&(a.exec(\"abort\"),a.destroy(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var b=this,c=new d(\"XMLHttpRequest\");return c.on(\"uploadprogress progress\",function(a){var c=a.loaded/a.total;return c=Math.min(1,Math.max(0,c)),b.trigger(\"progress\",c)}),c.on(\"load\",function(){var d,e=c.exec(\"getStatus\"),f=!1,g=\"\";return c.off(),b._xhr=null,e>=200&&300>e?f=!0:e>=500&&600>e?(f=!0,g=\"server\"):g=\"http\",f&&(b._response=c.exec(\"getResponse\"),b._response=decodeURIComponent(b._response),d=a.JSON&&a.JSON.parse||function(a){try{return new Function(\"return \"+a).call()}catch(b){return{}}},b._responseJson=b._response?d(b._response):{}),c.destroy(),c=null,g?b.trigger(\"error\",g):b.trigger(\"load\")}),c.on(\"error\",function(){c.off(),b._xhr=null,b.trigger(\"error\",\"http\")}),b._xhr=c,c},_setRequestHeader:function(a,b){e.each(b,function(b,c){a.exec(\"setRequestHeader\",b,c)})}})}),b(\"preset/flashonly\",[\"base\",\"widgets/filepicker\",\"widgets/image\",\"widgets/queue\",\"widgets/runtime\",\"widgets/upload\",\"widgets/validator\",\"runtime/flash/filepicker\",\"runtime/flash/image\",\"runtime/flash/blob\",\"runtime/flash/transport\"],function(a){return a}),b(\"webuploader\",[\"preset/flashonly\"],function(a){return a}),c(\"webuploader\")});"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.html5only.js",
    "content": "/*! WebUploader 0.1.5 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n\n            return obj;\n        },\n\n        makeExport = function( dollar ) {\n            root.__dollar = dollar;\n\n            // exports every module.\n            return exportsTo( factory( root, _define, _require ) );\n        },\n\n        origin;\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = makeExport();\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([ 'jquery' ], makeExport );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = makeExport();\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( window, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        var $ = window.__dollar || window.jQuery || window.Zepto;\n    \n        if ( !$ ) {\n            throw new Error('jQuery or Zepto not found!');\n        }\n    \n        return $;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id为该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.5',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match( /(?:trident)(?:.*rv:([\\w.]+))?/i ),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数noop](#WebUploader:Base.noop)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            cancelFile: 'cancel-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            md5File: 'md5-file',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            predictRuntimeType: 'predict-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     compress: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.option( 'compress', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `progressNum` 上传中的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `queueNum` 还在队列中的文件数\n             * * `interruptNum` 被暂停的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return stats ? {\n                    successNum: stats.numOfSuccess,\n                    progressNum: stats.numOfProgress,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue,\n                    interruptNum: stats.numofInterrupt\n                } : {};\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            /**\n             * 销毁 webuploader 实例\n             * @method destroy\n             * @grammar destroy() => undefined\n             */\n            destroy: function() {\n                this.request( 'destroy', arguments );\n                this.off();\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                this._parent = parent;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                this._container && this._container.remove();\n                this._parent && this._parent.removeClass('webuploader-container');\n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            _destroy = Uploader.prototype.destroy,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            /**\n             * @property {String | Array} [disableWidgets=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 默认所有 Uploader.register 了的 widget 都会被加载，如果禁用某一部分，请通过此 option 指定黑名单。\n             */\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [],\n                    deactives = me.options.disableWidgets || '';\n    \n                $.each( widgetClass, function( _, klass ) {\n                    (!deactives || !~deactives.indexOf( klass._name )) &&\n                        widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets && widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个 tick 中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                if ( args.length === 1 ) {\n                                    args = args[ 0 ];\n                                }\n    \n                                setTimeout(function() {\n                                    deferred.resolve( args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ callback ? key : 'done' ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            },\n    \n            destroy: function() {\n                _destroy.apply( this, arguments );\n                this._widgets = null;\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @grammar Uploader.register(proto);\n         * @grammar Uploader.register(map, proto);\n         * @param  {object} responseMap API 名称与函数实现的映射\n         * @param  {object} proto 组件原型，构造函数通过 constructor 属性定义\n         * @method Uploader.register\n         * @for Uploader\n         * @example\n         * Uploader.register({\n         *     'make-thumb': 'makeThumb'\n         * }, {\n         *     init: function( options ) {},\n         *     makeThumb: function() {}\n         * });\n         *\n         * Uploader.register({\n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init', destroy: 'destroy', name: 'anonymous' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n    \n                // 自动生成 map 表。\n                $.each(widgetProto, function(key) {\n                    if ( key[0] === '_' || key === 'name' ) {\n                        key === 'name' && (map.name = widgetProto.name);\n                        return;\n                    }\n    \n                    map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key;\n                });\n    \n            } else {\n                map = $.extend( map, responseMap );\n            }\n    \n            widgetProto.responseMap = map;\n            klass = Base.inherits( Widget, widgetProto );\n            klass._name = map.name;\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        /**\n         * 删除插件，只有在注册时指定了名字的才能被删除。\n         * @grammar Uploader.unRegister(name);\n         * @param  {string} name 组件名字\n         * @method Uploader.unRegister\n         * @for Uploader\n         * @example\n         *\n         * Uploader.register({\n         *     name: 'custom',\n         *     \n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         *\n         * Uploader.unRegister('custom');\n         */\n        Uploader.unRegister = Widget.unRegister = function( name ) {\n            if ( !name || name === 'anonymous' ) {\n                return;\n            }\n            \n            // 删除指定的插件。\n            for ( var i = widgetClass.length; i--; ) {\n                if ( widgetClass[i]._name === name ) {\n                    widgetClass.splice(i, 1)\n                }\n            }\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n        \n        /**\n         * @property {Selector} [disableGlobalDnd=false]  是否禁掉整个页面的拖拽功能，如果不禁用，图片拖进来的时候会默认被浏览器打开。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            name: 'dnd',\n            \n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                this.dnd = dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.dnd && this.dnd.destroy();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            name: 'paste',\n            \n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                this.paste = paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.paste && this.paste.destroy();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n            this.size = source.size || 0;\n    \n            // 如果没有指定 mimetype, 但是知道文件后缀。\n            if ( !source.type && this.ext &&\n                    ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) {\n                this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext);\n            } else {\n                this.type = source.type || 'application/octet-stream';\n            }\n    \n            RuntimeClient.call( me, 'Blob' );\n            this.uid = source.uid || this.uid;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n            // 如果有 mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && file.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n    \n            Blob.apply( this, arguments );\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                this._resizeHandler = Base.bindFn( this.refresh, this );\n                $( window ).on( 'resize', this._resizeHandler );\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                var btn = this.options.button;\n                $( window ).off( 'resize', this._resizeHandler );\n                btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' +\n                    'webuploader-pick');\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor|dom} 指定选择文件的按钮容器，不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            name: 'picker',\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addBtn( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addBtn: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    promises = [];\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                $( pick.id ).each(function() {\n                    var options, picker, deferred;\n    \n                    deferred = Base.Deferred();\n    \n                    options = $.extend({}, pick, {\n                        accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                        swf: opts.swf,\n                        runtimeOrder: opts.runtimeOrder,\n                        id: this\n                    });\n    \n                    picker = new FilePicker( options );\n    \n                    picker.once( 'ready', deferred.resolve );\n                    picker.on( 'select', function( files ) {\n                        me.owner.request( 'add-file', [ files ]);\n                    });\n                    picker.init();\n    \n                    me.pickers.push( picker );\n    \n                    promises.push( deferred.promise() );\n                });\n    \n                return Base.when.apply( Base, promises );\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            },\n    \n            destroy: function() {\n                $.each( this.pickers, function() {\n                    this.destroy();\n                });\n                this.pickers = null;\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: false,\n    \n            // 是否允许放大。\n            allowMagnify: false\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            crop: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'crop' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true,\n             *\n             *     // 如果发现压缩后文件大小比原来还大，则使用原来图片\n             *     // 此属性可能会影响图片自动纠正功能\n             *     noCompressIfLarger: false,\n             *\n             *     // 单位字节，如果图片大小小于此值，不会采用压缩。\n             *     compressSize: 0\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n    \n            name: 'image',\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * 当 width 或者 height 的值介于 0 - 1 时，被当成百分比使用。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             * 也可以借助服务端，将 base64 数据传给服务端，生成一个临时文件供预览。\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n    \n                    // 如果 width 的值介于 0 - 1\n                    // 说明设置的是百分比。\n                    if ( width <= 1 && width > 0 ) {\n                        width = file._info.width * width;\n                    }\n    \n                    // 同样的规则应用于 height\n                    if ( height <= 1 && height > 0 ) {\n                        height = file._info.height * height;\n                    }\n    \n                    image.resize( width, height );\n                });\n    \n                // 当 resize 完后\n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function( reason ) {\n                    cb( reason || true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            beforeSendFile: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 0,\n                    noCompressIfLarger = opts && opts.noCompressIfLarger || false,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只压缩 jpeg 图片格式。\n                // gif 可能会丢失针\n                // bmp png 基本上尺寸都不大，且压缩比比较小。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    var width = opts.width,\n                        height = opts.height;\n    \n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n    \n                    // 如果 width 的值介于 0 - 1\n                    // 说明设置的是百分比。\n                    if ( width <= 1 && width > 0 ) {\n                        width = file._info.width * width;\n                    }\n    \n                    // 同样的规则应用于 height\n                    if ( height <= 1 && height > 0 ) {\n                        height = file._info.height * height;\n                    }\n    \n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( !noCompressIfLarger || blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application/octet-stream'\n             */\n            this.type = source.type || 'application/octet-stream';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destroy: function() {\n                this.off();\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被取消的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * * `numofDeleted` 被移除的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0,\n                numofDeleted: 0,\n                numofInterrupt: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            /**\n             * 在队列中删除文件。\n             * @grammar removeFile( file ) => Array\n             * @method removeFile\n             * @param {File} 文件对象。\n             */\n            removeFile: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( existing ) {\n                    delete this._map[ file.id ];\n                    file.destroy();\n                    this.stats.numofDeleted++;\n                }\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            name: 'queue',\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                this.placeholder = runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || !file.size || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n            \n            /**\n             * @property {Boolean} [auto=false]\n             * @namespace options\n             * @for Uploader\n             * @description 设置为 true 后，不需要手动调用上传，有文件选择即开始上传。\n             * \n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFile: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    setTimeout(function() {\n                        me.request('start-upload');\n                    }, 20 );\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n             /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @grammar removeFile( file, true ) => undefined\n             * @grammar removeFile( id, true ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件, 默认只会标记文件状态为已取消，如果第二个参数为 `true` 则会从 queue 中移除。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file, remove ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                this.request( 'cancel-file', file );\n    \n                if ( remove ) {\n                    this.queue.removeFile( file );\n                }\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @event reset\n             * @description 当 uploader 被重置的时候触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.owner.trigger('reset');\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            },\n    \n            destroy: function() {\n                this.reset();\n                this.placeholder && this.placeholder.destroy();\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        /**\n         * @property {Object} [runtimeOrder=html5,flash]\n         * @namespace options\n         * @for Uploader\n         * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持，如果支持则使用 html5, 否则则使用 flash.\n         *\n         * 可以将此值设置成 `flash`，来强制使用 flash 运行时。\n         */\n    \n        return Uploader.register({\n            name: 'runtime',\n    \n            init: function() {\n                if ( !this.predictRuntimeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntimeType() => String\n             * @method predictRuntimeType\n             * @for  Uploader\n             */\n            predictRuntimeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData={}]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: {}\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len, api;\n    \n            api = {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                shift: function() {\n                    return pending.shift();\n                },\n    \n                unshift: function( block ) {\n                    pending.unshift( block );\n                }\n            };\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++,\n                    cuted: api\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return api;\n        }\n    \n        Uploader.register({\n            name: 'upload',\n    \n            init: function() {\n                var owner = this.owner,\n                    me = this;\n    \n                this.runing = false;\n                this.progress = false;\n    \n                owner\n                    .on( 'startUpload', function() {\n                        me.progress = true;\n                    })\n                    .on( 'uploadFinished', function() {\n                        me.progress = false;\n                    });\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存分好片的文件。\n                this.stack = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片在上传中但是没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n    \n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            reset: function() {\n                this.request( 'stop-upload', true );\n                this.runing = false;\n                this.pool = [];\n                this.stack = [];\n                this.pending = [];\n                this.remaning = 0;\n                this._trigged = false;\n                this._promise = null;\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             *\n             * 可以指定开始某一个文件。\n             * @grammar upload() => undefined\n             * @grammar upload( file | fileId) => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            startUpload: function(file) {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                // 如果指定了开始某个文件，则只开始指定文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if (file.getStatus() === Status.INTERRUPT) {\n                        $.each( me.pool, function( _, v ) {\n    \n                            // 之前暂停过。\n                            if (v.file !== file) {\n                                return;\n                            }\n    \n                            v.transport && v.transport.send();\n                        });\n    \n                        file.setStatus( Status.QUEUED );\n                    } else if (file.getStatus() === Status.PROGRESS) {\n                        return;\n                    } else {\n                        file.setStatus( Status.QUEUED );\n                    }\n                } else {\n                    $.each( me.request( 'get-files', [ Status.INITED ] ), function() {\n                        this.setStatus( Status.QUEUED );\n                    });\n                }\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                var files = [];\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        files.push(file);\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                var file;\n                while ( (file = files.shift()) ) {\n                    file.setStatus( Status.PROGRESS );\n                }\n    \n                file || $.each( me.request( 'get-files',\n                        Status.INTERRUPT ), function() {\n                    this.setStatus( Status.PROGRESS );\n                });\n    \n                me._trigged = false;\n                Base.nextTick( me.__tick );\n                me.owner.trigger('startUpload');\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             *\n             * 如果第一个参数是文件，则只暂停指定文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @grammar stop( file ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stopUpload: function( file, interrupt ) {\n                var me = this;\n    \n                if (file === true) {\n                    interrupt = file;\n                    file = null;\n                }\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                // 如果只是暂停某个文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if ( file.getStatus() !== Status.PROGRESS &&\n                            file.getStatus() !== Status.QUEUED ) {\n                        return;\n                    }\n    \n                    file.setStatus( Status.INTERRUPT );\n                    $.each( me.pool, function( _, v ) {\n    \n                        // 只 abort 指定的文件。\n                        if (v.file !== file) {\n                            return;\n                        }\n    \n                        v.transport && v.transport.abort();\n                        me._putback(v);\n                        me._popBlock(v);\n                    });\n    \n                    return Base.nextTick( me.__tick );\n                }\n    \n                me.runing = false;\n    \n                if (this._promise && this._promise.file) {\n                    this._promise.file.setStatus( Status.INTERRUPT );\n                }\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * @method cancelFile\n             * @grammar cancelFile( file ) => undefined\n             * @grammar cancelFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 标记文件状态为已取消, 同时将中断文件传输。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.cancelFile( file );\n             * })\n             */\n            cancelFile: function( file ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                file.setStatus( Status.CANCELLED );\n                this.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.progress;\n            },\n    \n            _getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me._getStats().numOfQueue &&\n                    !me._getStats().numofInterrupt ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _putback: function(block) {\n                var idx;\n    \n                block.cuted.unshift(block);\n                idx = this.stack.indexOf(block.cuted);\n    \n                if (!~idx) {\n                    this.stack.unshift(block.cuted);\n                }\n            },\n    \n            _getStack: function() {\n                var i = 0,\n                    act;\n    \n                while ( (act = this.stack[ i++ ]) ) {\n                    if ( act.has() && act.file.getStatus() === Status.PROGRESS ) {\n                        return act;\n                    } else if (!act.has() ||\n                            act.file.getStatus() !== Status.PROGRESS &&\n                            act.file.getStatus() !== Status.INTERRUPT ) {\n    \n                        // 把已经处理完了的，或者，状态为非 progress（上传中）、\n                        // interupt（暂停中） 的移除。\n                        this.stack.splice( --i, 1 );\n                    }\n                }\n    \n                return null;\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    opts = me.options,\n                    act, next, done, preparing;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( (act = this._getStack()) ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.shift();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me._getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me.stack.push(act);\n                        return act.shift();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    if ( isPromise( next) ) {\n                        preparing = next.file;\n                        next = next[ next.pipe ? 'pipe' : 'then' ]( done );\n                        next.file = preparing;\n                        return next;\n                    }\n    \n                    return done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.PROGRESS ||\n                            file.getStatus() === Status.INTERRUPT ) {\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    me.owner.trigger( 'uploadStart', file );\n                    file.setStatus( Status.PROGRESS );\n    \n                    promise.file = file;\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                // 有可能在 before-send-file 的 promise 期间改变了文件状态。\n                // 如：暂停，取消\n                // 我们不能中断 promise, 但是可以在 promise 完后，不做上传操作。\n                if ( file.getStatus() !== Status.PROGRESS ) {\n    \n                    // 如果是中断，则还需要放回去。\n                    if (file.getStatus() === Status.INTERRUPT) {\n                        me._putback(block);\n                    }\n    \n                    return;\n                }\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me.updateFileProgress( file );\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @param {Object} headers 可以扩展此对象来控制上传头部。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    block.percentage = percentage;\n                    me.updateFileProgress( file );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            },\n    \n            updateFileProgress: function(file) {\n                var totalPercent = 0,\n                    uploaded = 0;\n    \n                if (!file.blocks) {\n                    return;\n                }\n    \n                $.each( file.blocks, function( _, v ) {\n                    uploaded += (v.percentage || 0) * (v.end - v.start);\n                });\n    \n                totalPercent = uploaded / file.size;\n                this.owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            name: 'validator',\n    \n            init: function() {\n                var me = this;\n                Base.nextTick(function() {\n                    $.each( validators, function() {\n                        this.call( me.owner );\n                    });\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileNumLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileSizeLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', max, file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {Boolean} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n    \n            uploader.on( 'reset', function() {\n                mapping = {};\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destroy = this.destroy;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\r\n     * @fileOverview FilePaste\r\n     */\r\n    define('runtime/html5/dnd',[\r\n        'base',\r\n        'runtime/html5/runtime',\r\n        'lib/file'\r\n    ], function( Base, Html5Runtime, File ) {\r\n    \r\n        var $ = Base.$,\r\n            prefix = 'webuploader-dnd-';\r\n    \r\n        return Html5Runtime.register( 'DragAndDrop', {\r\n            init: function() {\r\n                var elem = this.elem = this.options.container;\r\n    \r\n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\r\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\r\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\r\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\r\n                this.dndOver = false;\r\n    \r\n                elem.on( 'dragenter', this.dragEnterHandler );\r\n                elem.on( 'dragover', this.dragOverHandler );\r\n                elem.on( 'dragleave', this.dragLeaveHandler );\r\n                elem.on( 'drop', this.dropHandler );\r\n    \r\n                if ( this.options.disableGlobalDnd ) {\r\n                    $( document ).on( 'dragover', this.dragOverHandler );\r\n                    $( document ).on( 'drop', this.dropHandler );\r\n                }\r\n            },\r\n    \r\n            _dragEnterHandler: function( e ) {\r\n                var me = this,\r\n                    denied = me._denied || false,\r\n                    items;\r\n    \r\n                e = e.originalEvent || e;\r\n    \r\n                if ( !me.dndOver ) {\r\n                    me.dndOver = true;\r\n    \r\n                    // 注意只有 chrome 支持。\r\n                    items = e.dataTransfer.items;\r\n    \r\n                    if ( items && items.length ) {\r\n                        me._denied = denied = !me.trigger( 'accept', items );\r\n                    }\r\n    \r\n                    me.elem.addClass( prefix + 'over' );\r\n                    me.elem[ denied ? 'addClass' :\r\n                            'removeClass' ]( prefix + 'denied' );\r\n                }\r\n    \r\n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\r\n    \r\n                return false;\r\n            },\r\n    \r\n            _dragOverHandler: function( e ) {\r\n                // 只处理框内的。\r\n                var parentElem = this.elem.parent().get( 0 );\r\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\r\n                    return false;\r\n                }\r\n    \r\n                clearTimeout( this._leaveTimer );\r\n                this._dragEnterHandler.call( this, e );\r\n    \r\n                return false;\r\n            },\r\n    \r\n            _dragLeaveHandler: function() {\r\n                var me = this,\r\n                    handler;\r\n    \r\n                handler = function() {\r\n                    me.dndOver = false;\r\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\r\n                };\r\n    \r\n                clearTimeout( me._leaveTimer );\r\n                me._leaveTimer = setTimeout( handler, 100 );\r\n                return false;\r\n            },\r\n    \r\n            _dropHandler: function( e ) {\r\n                var me = this,\r\n                    ruid = me.getRuid(),\r\n                    parentElem = me.elem.parent().get( 0 ),\r\n                    dataTransfer, data;\r\n    \r\n                // 只处理框内的。\r\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\r\n                    return false;\r\n                }\r\n    \r\n                e = e.originalEvent || e;\r\n                dataTransfer = e.dataTransfer;\r\n    \r\n                // 如果是页面内拖拽，还不能处理，不阻止事件。\r\n                // 此处 ie11 下会报参数错误，\r\n                try {\r\n                    data = dataTransfer.getData('text/html');\r\n                } catch( err ) {\r\n                }\r\n    \r\n                if ( data ) {\r\n                    return;\r\n                }\r\n    \r\n                me._getTansferFiles( dataTransfer, function( results ) {\r\n                    me.trigger( 'drop', $.map( results, function( file ) {\r\n                        return new File( ruid, file );\r\n                    }) );\r\n                });\r\n    \r\n                me.dndOver = false;\r\n                me.elem.removeClass( prefix + 'over' );\r\n                return false;\r\n            },\r\n    \r\n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\r\n            _getTansferFiles: function( dataTransfer, callback ) {\r\n                var results  = [],\r\n                    promises = [],\r\n                    items, files, file, item, i, len, canAccessFolder;\r\n    \r\n                items = dataTransfer.items;\r\n                files = dataTransfer.files;\r\n    \r\n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\r\n    \r\n                for ( i = 0, len = files.length; i < len; i++ ) {\r\n                    file = files[ i ];\r\n                    item = items && items[ i ];\r\n    \r\n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\r\n    \r\n                        promises.push( this._traverseDirectoryTree(\r\n                                item.webkitGetAsEntry(), results ) );\r\n                    } else {\r\n                        results.push( file );\r\n                    }\r\n                }\r\n    \r\n                Base.when.apply( Base, promises ).done(function() {\r\n    \r\n                    if ( !results.length ) {\r\n                        return;\r\n                    }\r\n    \r\n                    callback( results );\r\n                });\r\n            },\r\n    \r\n            _traverseDirectoryTree: function( entry, results ) {\r\n                var deferred = Base.Deferred(),\r\n                    me = this;\r\n    \r\n                if ( entry.isFile ) {\r\n                    entry.file(function( file ) {\r\n                        results.push( file );\r\n                        deferred.resolve();\r\n                    });\r\n                } else if ( entry.isDirectory ) {\r\n                    entry.createReader().readEntries(function( entries ) {\r\n                        var len = entries.length,\r\n                            promises = [],\r\n                            arr = [],    // 为了保证顺序。\r\n                            i;\r\n    \r\n                        for ( i = 0; i < len; i++ ) {\r\n                            promises.push( me._traverseDirectoryTree(\r\n                                    entries[ i ], arr ) );\r\n                        }\r\n    \r\n                        Base.when.apply( Base, promises ).then(function() {\r\n                            results.push.apply( results, arr );\r\n                            deferred.resolve();\r\n                        }, deferred.reject );\r\n                    });\r\n                }\r\n    \r\n                return deferred.promise();\r\n            },\r\n    \r\n            destroy: function() {\r\n                var elem = this.elem;\r\n    \r\n                // 还没 init 就调用 destroy\r\n                if (!elem) {\r\n                    return;\r\n                }\r\n                \r\n                elem.off( 'dragenter', this.dragEnterHandler );\r\n                elem.off( 'dragover', this.dragOverHandler );\r\n                elem.off( 'dragleave', this.dragLeaveHandler );\r\n                elem.off( 'drop', this.dropHandler );\r\n    \r\n                if ( this.options.disableGlobalDnd ) {\r\n                    $( document ).off( 'dragover', this.dragOverHandler );\r\n                    $( document ).off( 'drop', this.dropHandler );\r\n                }\r\n            }\r\n        });\r\n    });\r\n    \n    /**\r\n     * @fileOverview FilePaste\r\n     */\r\n    define('runtime/html5/filepaste',[\r\n        'base',\r\n        'runtime/html5/runtime',\r\n        'lib/file'\r\n    ], function( Base, Html5Runtime, File ) {\r\n    \r\n        return Html5Runtime.register( 'FilePaste', {\r\n            init: function() {\r\n                var opts = this.options,\r\n                    elem = this.elem = opts.container,\r\n                    accept = '.*',\r\n                    arr, i, len, item;\r\n    \r\n                // accetp的mimeTypes中生成匹配正则。\r\n                if ( opts.accept ) {\r\n                    arr = [];\r\n    \r\n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\r\n                        item = opts.accept[ i ].mimeTypes;\r\n                        item && arr.push( item );\r\n                    }\r\n    \r\n                    if ( arr.length ) {\r\n                        accept = arr.join(',');\r\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\r\n                    }\r\n                }\r\n                this.accept = accept = new RegExp( accept, 'i' );\r\n                this.hander = Base.bindFn( this._pasteHander, this );\r\n                elem.on( 'paste', this.hander );\r\n            },\r\n    \r\n            _pasteHander: function( e ) {\r\n                var allowed = [],\r\n                    ruid = this.getRuid(),\r\n                    items, item, blob, i, len;\r\n    \r\n                e = e.originalEvent || e;\r\n                items = e.clipboardData.items;\r\n    \r\n                for ( i = 0, len = items.length; i < len; i++ ) {\r\n                    item = items[ i ];\r\n    \r\n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\r\n                        continue;\r\n                    }\r\n    \r\n                    allowed.push( new File( ruid, blob ) );\r\n                }\r\n    \r\n                if ( allowed.length ) {\r\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\r\n                    e.preventDefault();\r\n                    e.stopPropagation();\r\n                    this.trigger( 'paste', allowed );\r\n                }\r\n            },\r\n    \r\n            destroy: function() {\r\n                this.elem.off( 'paste', this.hander );\r\n            }\r\n        });\r\n    });\r\n    \n    /**\r\n     * @fileOverview FilePicker\r\n     */\r\n    define('runtime/html5/filepicker',[\r\n        'base',\r\n        'runtime/html5/runtime'\r\n    ], function( Base, Html5Runtime ) {\r\n    \r\n        var $ = Base.$;\r\n    \r\n        return Html5Runtime.register( 'FilePicker', {\r\n            init: function() {\r\n                var container = this.getRuntime().getContainer(),\r\n                    me = this,\r\n                    owner = me.owner,\r\n                    opts = me.options,\r\n                    label = this.label = $( document.createElement('label') ),\r\n                    input =  this.input = $( document.createElement('input') ),\r\n                    arr, i, len, mouseHandler;\r\n    \r\n                input.attr( 'type', 'file' );\r\n                input.attr( 'name', opts.name );\r\n                input.addClass('webuploader-element-invisible');\r\n    \r\n                label.on( 'click', function() {\r\n                    input.trigger('click');\r\n                });\r\n    \r\n                label.css({\r\n                    opacity: 0,\r\n                    width: '100%',\r\n                    height: '100%',\r\n                    display: 'block',\r\n                    cursor: 'pointer',\r\n                    background: '#ffffff'\r\n                });\r\n    \r\n                if ( opts.multiple ) {\r\n                    input.attr( 'multiple', 'multiple' );\r\n                }\r\n    \r\n                // @todo Firefox不支持单独指定后缀\r\n                if ( opts.accept && opts.accept.length > 0 ) {\r\n                    arr = [];\r\n    \r\n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\r\n                        arr.push( opts.accept[ i ].mimeTypes );\r\n                    }\r\n    \r\n                    input.attr( 'accept', arr.join(',') );\r\n                }\r\n    \r\n                container.append( input );\r\n                container.append( label );\r\n    \r\n                mouseHandler = function( e ) {\r\n                    owner.trigger( e.type );\r\n                };\r\n    \r\n                input.on( 'change', function( e ) {\r\n                    var fn = arguments.callee,\r\n                        clone;\r\n    \r\n                    me.files = e.target.files;\r\n    \r\n                    // reset input\r\n                    clone = this.cloneNode( true );\r\n                    clone.value = null;\r\n                    this.parentNode.replaceChild( clone, this );\r\n    \r\n                    input.off();\r\n                    input = $( clone ).on( 'change', fn )\r\n                            .on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n                    owner.trigger('change');\r\n                });\r\n    \r\n                label.on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n            },\r\n    \r\n    \r\n            getFiles: function() {\r\n                return this.files;\r\n            },\r\n    \r\n            destroy: function() {\r\n                this.input.off();\r\n                this.label.off();\r\n            }\r\n        });\r\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/util',[\n        'base'\n    ], function( Base ) {\n    \n        var urlAPI = window.createObjectURL && window ||\n                window.URL && URL.revokeObjectURL && URL ||\n                window.webkitURL,\n            createObjectURL = Base.noop,\n            revokeObjectURL = createObjectURL;\n    \n        if ( urlAPI ) {\n    \n            // 更安全的方式调用，比如android里面就能把context改成其他的对象。\n            createObjectURL = function() {\n                return urlAPI.createObjectURL.apply( urlAPI, arguments );\n            };\n    \n            revokeObjectURL = function() {\n                return urlAPI.revokeObjectURL.apply( urlAPI, arguments );\n            };\n        }\n    \n        return {\n            createObjectURL: createObjectURL,\n            revokeObjectURL: revokeObjectURL,\n    \n            dataURL2Blob: function( dataURI ) {\n                var byteStr, intArray, ab, i, mimetype, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                ab = new ArrayBuffer( byteStr.length );\n                intArray = new Uint8Array( ab );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ];\n    \n                return this.arrayBufferToBlob( ab, mimetype );\n            },\n    \n            dataURL2ArrayBuffer: function( dataURI ) {\n                var byteStr, intArray, i, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                intArray = new Uint8Array( byteStr.length );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                return intArray.buffer;\n            },\n    \n            arrayBufferToBlob: function( buffer, type ) {\n                var builder = window.BlobBuilder || window.WebKitBlobBuilder,\n                    bb;\n    \n                // android不支持直接new Blob, 只能借助blobbuilder.\n                if ( builder ) {\n                    bb = new builder();\n                    bb.append( buffer );\n                    return bb.getBlob( type );\n                }\n    \n                return new Blob([ buffer ], type ? { type: type } : {} );\n            },\n    \n            // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg.\n            // 你得到的结果是png.\n            canvasToDataUrl: function( canvas, type, quality ) {\n                return canvas.toDataURL( type, quality / 100 );\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            parseMeta: function( blob, callback ) {\n                callback( false, {});\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            updateImageHead: function( data ) {\n                return data;\n            }\n        };\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/imagemeta',[\n        'runtime/html5/util'\n    ], function( Util ) {\n    \n        var api;\n    \n        api = {\n            parsers: {\n                0xffe1: []\n            },\n    \n            maxMetaDataSize: 262144,\n    \n            parse: function( blob, cb ) {\n                var me = this,\n                    fr = new FileReader();\n    \n                fr.onload = function() {\n                    cb( false, me._parse( this.result ) );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                fr.onerror = function( e ) {\n                    cb( e.message );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                blob = blob.slice( 0, me.maxMetaDataSize );\n                fr.readAsArrayBuffer( blob.getSource() );\n            },\n    \n            _parse: function( buffer, noParse ) {\n                if ( buffer.byteLength < 6 ) {\n                    return;\n                }\n    \n                var dataview = new DataView( buffer ),\n                    offset = 2,\n                    maxOffset = dataview.byteLength - 4,\n                    headLength = offset,\n                    ret = {},\n                    markerBytes, markerLength, parsers, i;\n    \n                if ( dataview.getUint16( 0 ) === 0xffd8 ) {\n    \n                    while ( offset < maxOffset ) {\n                        markerBytes = dataview.getUint16( offset );\n    \n                        if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef ||\n                                markerBytes === 0xfffe ) {\n    \n                            markerLength = dataview.getUint16( offset + 2 ) + 2;\n    \n                            if ( offset + markerLength > dataview.byteLength ) {\n                                break;\n                            }\n    \n                            parsers = api.parsers[ markerBytes ];\n    \n                            if ( !noParse && parsers ) {\n                                for ( i = 0; i < parsers.length; i += 1 ) {\n                                    parsers[ i ].call( api, dataview, offset,\n                                            markerLength, ret );\n                                }\n                            }\n    \n                            offset += markerLength;\n                            headLength = offset;\n                        } else {\n                            break;\n                        }\n                    }\n    \n                    if ( headLength > 6 ) {\n                        if ( buffer.slice ) {\n                            ret.imageHead = buffer.slice( 2, headLength );\n                        } else {\n                            // Workaround for IE10, which does not yet\n                            // support ArrayBuffer.slice:\n                            ret.imageHead = new Uint8Array( buffer )\n                                    .subarray( 2, headLength );\n                        }\n                    }\n                }\n    \n                return ret;\n            },\n    \n            updateImageHead: function( buffer, head ) {\n                var data = this._parse( buffer, true ),\n                    buf1, buf2, bodyoffset;\n    \n    \n                bodyoffset = 2;\n                if ( data.imageHead ) {\n                    bodyoffset = 2 + data.imageHead.byteLength;\n                }\n    \n                if ( buffer.slice ) {\n                    buf2 = buffer.slice( bodyoffset );\n                } else {\n                    buf2 = new Uint8Array( buffer ).subarray( bodyoffset );\n                }\n    \n                buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength );\n    \n                buf1[ 0 ] = 0xFF;\n                buf1[ 1 ] = 0xD8;\n                buf1.set( new Uint8Array( head ), 2 );\n                buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 );\n    \n                return buf1.buffer;\n            }\n        };\n    \n        Util.parseMeta = function() {\n            return api.parse.apply( api, arguments );\n        };\n    \n        Util.updateImageHead = function() {\n            return api.updateImageHead.apply( api, arguments );\n        };\n    \n        return api;\n    });\n    /**\n     * 代码来自于：https://github.com/blueimp/JavaScript-Load-Image\n     * 暂时项目中只用了orientation.\n     *\n     * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail.\n     * @fileOverview EXIF解析\n     */\n    \n    // Sample\n    // ====================================\n    // Make : Apple\n    // Model : iPhone 4S\n    // Orientation : 1\n    // XResolution : 72 [72/1]\n    // YResolution : 72 [72/1]\n    // ResolutionUnit : 2\n    // Software : QuickTime 7.7.1\n    // DateTime : 2013:09:01 22:53:55\n    // ExifIFDPointer : 190\n    // ExposureTime : 0.058823529411764705 [1/17]\n    // FNumber : 2.4 [12/5]\n    // ExposureProgram : Normal program\n    // ISOSpeedRatings : 800\n    // ExifVersion : 0220\n    // DateTimeOriginal : 2013:09:01 22:52:51\n    // DateTimeDigitized : 2013:09:01 22:52:51\n    // ComponentsConfiguration : YCbCr\n    // ShutterSpeedValue : 4.058893515764426\n    // ApertureValue : 2.5260688216892597 [4845/1918]\n    // BrightnessValue : -0.3126686601998395\n    // MeteringMode : Pattern\n    // Flash : Flash did not fire, compulsory flash mode\n    // FocalLength : 4.28 [107/25]\n    // SubjectArea : [4 values]\n    // FlashpixVersion : 0100\n    // ColorSpace : 1\n    // PixelXDimension : 2448\n    // PixelYDimension : 3264\n    // SensingMethod : One-chip color area sensor\n    // ExposureMode : 0\n    // WhiteBalance : Auto white balance\n    // FocalLengthIn35mmFilm : 35\n    // SceneCaptureType : Standard\n    define('runtime/html5/imagemeta/exif',[\n        'base',\n        'runtime/html5/imagemeta'\n    ], function( Base, ImageMeta ) {\n    \n        var EXIF = {};\n    \n        EXIF.ExifMap = function() {\n            return this;\n        };\n    \n        EXIF.ExifMap.prototype.map = {\n            'Orientation': 0x0112\n        };\n    \n        EXIF.ExifMap.prototype.get = function( id ) {\n            return this[ id ] || this[ this.map[ id ] ];\n        };\n    \n        EXIF.exifTagTypes = {\n            // byte, 8-bit unsigned int:\n            1: {\n                getValue: function( dataView, dataOffset ) {\n                    return dataView.getUint8( dataOffset );\n                },\n                size: 1\n            },\n    \n            // ascii, 8-bit byte:\n            2: {\n                getValue: function( dataView, dataOffset ) {\n                    return String.fromCharCode( dataView.getUint8( dataOffset ) );\n                },\n                size: 1,\n                ascii: true\n            },\n    \n            // short, 16 bit int:\n            3: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint16( dataOffset, littleEndian );\n                },\n                size: 2\n            },\n    \n            // long, 32 bit int:\n            4: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // rational = two long values,\n            // first is numerator, second is denominator:\n            5: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian ) /\n                        dataView.getUint32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            },\n    \n            // slong, 32 bit signed int:\n            9: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // srational, two slongs, first is numerator, second is denominator:\n            10: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian ) /\n                        dataView.getInt32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            }\n        };\n    \n        // undefined, 8-bit byte, value depending on field:\n        EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ];\n    \n        EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length,\n                littleEndian ) {\n    \n            var tagType = EXIF.exifTagTypes[ type ],\n                tagSize, dataOffset, values, i, str, c;\n    \n            if ( !tagType ) {\n                Base.log('Invalid Exif data: Invalid tag type.');\n                return;\n            }\n    \n            tagSize = tagType.size * length;\n    \n            // Determine if the value is contained in the dataOffset bytes,\n            // or if the value at the dataOffset is a pointer to the actual data:\n            dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8,\n                    littleEndian ) : (offset + 8);\n    \n            if ( dataOffset + tagSize > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid data offset.');\n                return;\n            }\n    \n            if ( length === 1 ) {\n                return tagType.getValue( dataView, dataOffset, littleEndian );\n            }\n    \n            values = [];\n    \n            for ( i = 0; i < length; i += 1 ) {\n                values[ i ] = tagType.getValue( dataView,\n                        dataOffset + i * tagType.size, littleEndian );\n            }\n    \n            if ( tagType.ascii ) {\n                str = '';\n    \n                // Concatenate the chars:\n                for ( i = 0; i < values.length; i += 1 ) {\n                    c = values[ i ];\n    \n                    // Ignore the terminating NULL byte(s):\n                    if ( c === '\\u0000' ) {\n                        break;\n                    }\n                    str += c;\n                }\n    \n                return str;\n            }\n            return values;\n        };\n    \n        EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian,\n                data ) {\n    \n            var tag = dataView.getUint16( offset, littleEndian );\n            data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset,\n                    dataView.getUint16( offset + 2, littleEndian ),    // tag type\n                    dataView.getUint32( offset + 4, littleEndian ),    // tag length\n                    littleEndian );\n        };\n    \n        EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset,\n                littleEndian, data ) {\n    \n            var tagsNumber, dirEndOffset, i;\n    \n            if ( dirOffset + 6 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory offset.');\n                return;\n            }\n    \n            tagsNumber = dataView.getUint16( dirOffset, littleEndian );\n            dirEndOffset = dirOffset + 2 + 12 * tagsNumber;\n    \n            if ( dirEndOffset + 4 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory size.');\n                return;\n            }\n    \n            for ( i = 0; i < tagsNumber; i += 1 ) {\n                this.parseExifTag( dataView, tiffOffset,\n                        dirOffset + 2 + 12 * i,    // tag offset\n                        littleEndian, data );\n            }\n    \n            // Return the offset to the next directory:\n            return dataView.getUint32( dirEndOffset, littleEndian );\n        };\n    \n        // EXIF.getExifThumbnail = function(dataView, offset, length) {\n        //     var hexData,\n        //         i,\n        //         b;\n        //     if (!length || offset + length > dataView.byteLength) {\n        //         Base.log('Invalid Exif data: Invalid thumbnail data.');\n        //         return;\n        //     }\n        //     hexData = [];\n        //     for (i = 0; i < length; i += 1) {\n        //         b = dataView.getUint8(offset + i);\n        //         hexData.push((b < 16 ? '0' : '') + b.toString(16));\n        //     }\n        //     return 'data:image/jpeg,%' + hexData.join('%');\n        // };\n    \n        EXIF.parseExifData = function( dataView, offset, length, data ) {\n    \n            var tiffOffset = offset + 10,\n                littleEndian, dirOffset;\n    \n            // Check for the ASCII code for \"Exif\" (0x45786966):\n            if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) {\n                // No Exif data, might be XMP data instead\n                return;\n            }\n            if ( tiffOffset + 8 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid segment size.');\n                return;\n            }\n    \n            // Check for the two null bytes:\n            if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) {\n                Base.log('Invalid Exif data: Missing byte alignment offset.');\n                return;\n            }\n    \n            // Check the byte alignment:\n            switch ( dataView.getUint16( tiffOffset ) ) {\n                case 0x4949:\n                    littleEndian = true;\n                    break;\n    \n                case 0x4D4D:\n                    littleEndian = false;\n                    break;\n    \n                default:\n                    Base.log('Invalid Exif data: Invalid byte alignment marker.');\n                    return;\n            }\n    \n            // Check for the TIFF tag marker (0x002A):\n            if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) {\n                Base.log('Invalid Exif data: Missing TIFF marker.');\n                return;\n            }\n    \n            // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal:\n            dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian );\n            // Create the exif object to store the tags:\n            data.exif = new EXIF.ExifMap();\n            // Parse the tags of the main image directory and retrieve the\n            // offset to the next directory, usually the thumbnail directory:\n            dirOffset = EXIF.parseExifTags( dataView, tiffOffset,\n                    tiffOffset + dirOffset, littleEndian, data );\n    \n            // 尝试读取缩略图\n            // if ( dirOffset ) {\n            //     thumbnailData = {exif: {}};\n            //     dirOffset = EXIF.parseExifTags(\n            //         dataView,\n            //         tiffOffset,\n            //         tiffOffset + dirOffset,\n            //         littleEndian,\n            //         thumbnailData\n            //     );\n    \n            //     // Check for JPEG Thumbnail offset:\n            //     if (thumbnailData.exif[0x0201]) {\n            //         data.exif.Thumbnail = EXIF.getExifThumbnail(\n            //             dataView,\n            //             tiffOffset + thumbnailData.exif[0x0201],\n            //             thumbnailData.exif[0x0202] // Thumbnail data length\n            //         );\n            //     }\n            // }\n        };\n    \n        ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData );\n        return EXIF;\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('runtime/html5/image',[\n        'base',\n        'runtime/html5/runtime',\n        'runtime/html5/util'\n    ], function( Base, Html5Runtime, Util ) {\n    \n        var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';\n    \n        return Html5Runtime.register( 'Image', {\n    \n            // flag: 标记是否被修改过。\n            modified: false,\n    \n            init: function() {\n                var me = this,\n                    img = new Image();\n    \n                img.onload = function() {\n    \n                    me._info = {\n                        type: me.type,\n                        width: this.width,\n                        height: this.height\n                    };\n    \n                    // 读取meta信息。\n                    if ( !me._metas && 'image/jpeg' === me.type ) {\n                        Util.parseMeta( me._blob, function( error, ret ) {\n                            me._metas = ret;\n                            me.owner.trigger('load');\n                        });\n                    } else {\n                        me.owner.trigger('load');\n                    }\n                };\n    \n                img.onerror = function() {\n                    me.owner.trigger('error');\n                };\n    \n                me._img = img;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    img = me._img;\n    \n                me._blob = blob;\n                me.type = blob.type;\n                img.src = Util.createObjectURL( blob.getSource() );\n                me.owner.once( 'load', function() {\n                    Util.revokeObjectURL( img.src );\n                });\n            },\n    \n            resize: function( width, height ) {\n                var canvas = this._canvas ||\n                        (this._canvas = document.createElement('canvas'));\n    \n                this._resize( this._img, canvas, width, height );\n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger( 'complete', 'resize' );\n            },\n    \n            crop: function( x, y, w, h, s ) {\n                var cvs = this._canvas ||\n                        (this._canvas = document.createElement('canvas')),\n                    opts = this.options,\n                    img = this._img,\n                    iw = img.naturalWidth,\n                    ih = img.naturalHeight,\n                    orientation = this.getOrientation();\n    \n                s = s || 1;\n    \n                // todo 解决 orientation 的问题。\n                // values that require 90 degree rotation\n                // if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                //     switch ( orientation ) {\n                //         case 6:\n                //             tmp = x;\n                //             x = y;\n                //             y = iw * s - tmp - w;\n                //             console.log(ih * s, tmp, w)\n                //             break;\n                //     }\n    \n                //     (w ^= h, h ^= w, w ^= h);\n                // }\n    \n                cvs.width = w;\n                cvs.height = h;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n                this._renderImageToCanvas( cvs, img, -x, -y, iw * s, ih * s );\n    \n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger( 'complete', 'crop' );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this._blob,\n                    opts = this.options,\n                    canvas;\n    \n                type = type || this.type;\n    \n                // blob需要重新生成。\n                if ( this.modified || this.type !== type ) {\n                    canvas = this._canvas;\n    \n                    if ( type === 'image/jpeg' ) {\n    \n                        blob = Util.canvasToDataUrl( canvas, type, opts.quality );\n    \n                        if ( opts.preserveHeaders && this._metas &&\n                                this._metas.imageHead ) {\n    \n                            blob = Util.dataURL2ArrayBuffer( blob );\n                            blob = Util.updateImageHead( blob,\n                                    this._metas.imageHead );\n                            blob = Util.arrayBufferToBlob( blob, type );\n                            return blob;\n                        }\n                    } else {\n                        blob = Util.canvasToDataUrl( canvas, type );\n                    }\n    \n                    blob = Util.dataURL2Blob( blob );\n                }\n    \n                return blob;\n            },\n    \n            getAsDataUrl: function( type ) {\n                var opts = this.options;\n    \n                type = type || this.type;\n    \n                if ( type === 'image/jpeg' ) {\n                    return Util.canvasToDataUrl( this._canvas, type, opts.quality );\n                } else {\n                    return this._canvas.toDataURL( type );\n                }\n            },\n    \n            getOrientation: function() {\n                return this._metas && this._metas.exif &&\n                        this._metas.exif.get('Orientation') || 1;\n            },\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            destroy: function() {\n                var canvas = this._canvas;\n                this._img.onload = null;\n    \n                if ( canvas ) {\n                    canvas.getContext('2d')\n                            .clearRect( 0, 0, canvas.width, canvas.height );\n                    canvas.width = canvas.height = 0;\n                    this._canvas = null;\n                }\n    \n                // 释放内存。非常重要，否则释放不了image的内存。\n                this._img.src = BLANK;\n                this._img = this._blob = null;\n            },\n    \n            _resize: function( img, cvs, width, height ) {\n                var opts = this.options,\n                    naturalWidth = img.width,\n                    naturalHeight = img.height,\n                    orientation = this.getOrientation(),\n                    scale, w, h, x, y;\n    \n                // values that require 90 degree rotation\n                if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                    // 交换width, height的值。\n                    width ^= height;\n                    height ^= width;\n                    width ^= height;\n                }\n    \n                scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth,\n                        height / naturalHeight );\n    \n                // 不允许放大。\n                opts.allowMagnify || (scale = Math.min( 1, scale ));\n    \n                w = naturalWidth * scale;\n                h = naturalHeight * scale;\n    \n                if ( opts.crop ) {\n                    cvs.width = width;\n                    cvs.height = height;\n                } else {\n                    cvs.width = w;\n                    cvs.height = h;\n                }\n    \n                x = (cvs.width - w) / 2;\n                y = (cvs.height - h) / 2;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n    \n                this._renderImageToCanvas( cvs, img, x, y, w, h );\n            },\n    \n            _rotate2Orientaion: function( canvas, orientation ) {\n                var width = canvas.width,\n                    height = canvas.height,\n                    ctx = canvas.getContext('2d');\n    \n                switch ( orientation ) {\n                    case 5:\n                    case 6:\n                    case 7:\n                    case 8:\n                        canvas.width = height;\n                        canvas.height = width;\n                        break;\n                }\n    \n                switch ( orientation ) {\n                    case 2:    // horizontal flip\n                        ctx.translate( width, 0 );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 3:    // 180 rotate left\n                        ctx.translate( width, height );\n                        ctx.rotate( Math.PI );\n                        break;\n    \n                    case 4:    // vertical flip\n                        ctx.translate( 0, height );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 5:    // vertical flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 6:    // 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( 0, -height );\n                        break;\n    \n                    case 7:    // horizontal flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( width, -height );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 8:    // 90 rotate left\n                        ctx.rotate( -0.5 * Math.PI );\n                        ctx.translate( -width, 0 );\n                        break;\n                }\n            },\n    \n            // https://github.com/stomita/ios-imagefile-megapixel/\n            // blob/master/src/megapix-image.js\n            _renderImageToCanvas: (function() {\n    \n                // 如果不是ios, 不需要这么复杂！\n                if ( !Base.os.ios ) {\n                    return function( canvas ) {\n                        var args = Base.slice( arguments, 1 ),\n                            ctx = canvas.getContext('2d');\n    \n                        ctx.drawImage.apply( ctx, args );\n                    };\n                }\n    \n                /**\n                 * Detecting vertical squash in loaded image.\n                 * Fixes a bug which squash image vertically while drawing into\n                 * canvas for some images.\n                 */\n                function detectVerticalSquash( img, iw, ih ) {\n                    var canvas = document.createElement('canvas'),\n                        ctx = canvas.getContext('2d'),\n                        sy = 0,\n                        ey = ih,\n                        py = ih,\n                        data, alpha, ratio;\n    \n    \n                    canvas.width = 1;\n                    canvas.height = ih;\n                    ctx.drawImage( img, 0, 0 );\n                    data = ctx.getImageData( 0, 0, 1, ih ).data;\n    \n                    // search image edge pixel position in case\n                    // it is squashed vertically.\n                    while ( py > sy ) {\n                        alpha = data[ (py - 1) * 4 + 3 ];\n    \n                        if ( alpha === 0 ) {\n                            ey = py;\n                        } else {\n                            sy = py;\n                        }\n    \n                        py = (ey + sy) >> 1;\n                    }\n    \n                    ratio = (py / ih);\n                    return (ratio === 0) ? 1 : ratio;\n                }\n    \n                // fix ie7 bug\n                // http://stackoverflow.com/questions/11929099/\n                // html5-canvas-drawimage-ratio-bug-ios\n                if ( Base.os.ios >= 7 ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        var iw = img.naturalWidth,\n                            ih = img.naturalHeight,\n                            vertSquashRatio = detectVerticalSquash( img, iw, ih );\n    \n                        return canvas.getContext('2d').drawImage( img, 0, 0,\n                                iw * vertSquashRatio, ih * vertSquashRatio,\n                                x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detect subsampling in loaded image.\n                 * In iOS, larger images than 2M pixels may be\n                 * subsampled in rendering.\n                 */\n                function detectSubsampling( img ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        canvas, ctx;\n    \n                    // subsampling may happen overmegapixel image\n                    if ( iw * ih > 1024 * 1024 ) {\n                        canvas = document.createElement('canvas');\n                        canvas.width = canvas.height = 1;\n                        ctx = canvas.getContext('2d');\n                        ctx.drawImage( img, -iw + 1, 0 );\n    \n                        // subsampled image becomes half smaller in rendering size.\n                        // check alpha channel value to confirm image is covering\n                        // edge pixel or not. if alpha value is 0\n                        // image is not covering, hence subsampled.\n                        return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0;\n                    } else {\n                        return false;\n                    }\n                }\n    \n    \n                return function( canvas, img, x, y, width, height ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        ctx = canvas.getContext('2d'),\n                        subsampled = detectSubsampling( img ),\n                        doSquash = this.type === 'image/jpeg',\n                        d = 1024,\n                        sy = 0,\n                        dy = 0,\n                        tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx;\n    \n                    if ( subsampled ) {\n                        iw /= 2;\n                        ih /= 2;\n                    }\n    \n                    ctx.save();\n                    tmpCanvas = document.createElement('canvas');\n                    tmpCanvas.width = tmpCanvas.height = d;\n    \n                    tmpCtx = tmpCanvas.getContext('2d');\n                    vertSquashRatio = doSquash ?\n                            detectVerticalSquash( img, iw, ih ) : 1;\n    \n                    dw = Math.ceil( d * width / iw );\n                    dh = Math.ceil( d * height / ih / vertSquashRatio );\n    \n                    while ( sy < ih ) {\n                        sx = 0;\n                        dx = 0;\n                        while ( sx < iw ) {\n                            tmpCtx.clearRect( 0, 0, d, d );\n                            tmpCtx.drawImage( img, -sx, -sy );\n                            ctx.drawImage( tmpCanvas, 0, 0, d, d,\n                                    x + dx, y + dy, dw, dh );\n                            sx += d;\n                            dx += dw;\n                        }\n                        sy += d;\n                        dy += dh;\n                    }\n                    ctx.restore();\n                    tmpCanvas = tmpCtx = null;\n                };\n            })()\n        });\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    // 强制设置成 content-type 为文件流。\n                    xhr.overrideMimeType &&\n                            xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    /**\n     * @fileOverview 只有html5实现的文件版本。\n     */\n    define('preset/html5only',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/imagemeta/exif',\n        'runtime/html5/image',\n        'runtime/html5/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/html5only'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.html5only.min.js",
    "content": "/* WebUploader 0.1.5 */!function(a,b){var c,d={},e=function(a,b){var c,d,e;if(\"string\"==typeof a)return h(a);for(c=[],d=a.length,e=0;d>e;e++)c.push(h(a[e]));return b.apply(null,c)},f=function(a,b,c){2===arguments.length&&(c=b,b=null),e(b||[],function(){g(a,c,arguments)})},g=function(a,b,c){var f,g={exports:b};\"function\"==typeof b&&(c.length||(c=[e,g.exports,g]),f=b.apply(null,c),void 0!==f&&(g.exports=f)),d[a]=g.exports},h=function(b){var c=d[b]||a[b];if(!c)throw new Error(\"`\"+b+\"` is undefined\");return c},i=function(a){var b,c,e,f,g,h;h=function(a){return a&&a.charAt(0).toUpperCase()+a.substr(1)};for(b in d)if(c=a,d.hasOwnProperty(b)){for(e=b.split(\"/\"),g=h(e.pop());f=h(e.shift());)c[f]=c[f]||{},c=c[f];c[g]=d[b]}return a},j=function(c){return a.__dollar=c,i(b(a,f,e))};\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=j():\"function\"==typeof define&&define.amd?define([\"jquery\"],j):(c=a.WebUploader,a.WebUploader=j(),a.WebUploader.noConflict=function(){a.WebUploader=c})}(window,function(a,b,c){return b(\"dollar-third\",[],function(){var b=a.__dollar||a.jQuery||a.Zepto;if(!b)throw new Error(\"jQuery or Zepto not found!\");return b}),b(\"dollar\",[\"dollar-third\"],function(a){return a}),b(\"promise-third\",[\"dollar\"],function(a){return{Deferred:a.Deferred,when:a.when,isPromise:function(a){return a&&\"function\"==typeof a.then}}}),b(\"promise\",[\"promise-third\"],function(a){return a}),b(\"base\",[\"dollar\",\"promise\"],function(b,c){function d(a){return function(){return h.apply(a,arguments)}}function e(a,b){return function(){return a.apply(b,arguments)}}function f(a){var b;return Object.create?Object.create(a):(b=function(){},b.prototype=a,new b)}var g=function(){},h=Function.call;return{version:\"0.1.5\",$:b,Deferred:c.Deferred,isPromise:c.isPromise,when:c.when,browser:function(a){var b={},c=a.match(/WebKit\\/([\\d.]+)/),d=a.match(/Chrome\\/([\\d.]+)/)||a.match(/CriOS\\/([\\d.]+)/),e=a.match(/MSIE\\s([\\d\\.]+)/)||a.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),f=a.match(/Firefox\\/([\\d.]+)/),g=a.match(/Safari\\/([\\d.]+)/),h=a.match(/OPR\\/([\\d.]+)/);return c&&(b.webkit=parseFloat(c[1])),d&&(b.chrome=parseFloat(d[1])),e&&(b.ie=parseFloat(e[1])),f&&(b.firefox=parseFloat(f[1])),g&&(b.safari=parseFloat(g[1])),h&&(b.opera=parseFloat(h[1])),b}(navigator.userAgent),os:function(a){var b={},c=a.match(/(?:Android);?[\\s\\/]+([\\d.]+)?/),d=a.match(/(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/);return c&&(b.android=parseFloat(c[1])),d&&(b.ios=parseFloat(d[1].replace(/_/g,\".\"))),b}(navigator.userAgent),inherits:function(a,c,d){var e;return\"function\"==typeof c?(e=c,c=null):e=c&&c.hasOwnProperty(\"constructor\")?c.constructor:function(){return a.apply(this,arguments)},b.extend(!0,e,a,d||{}),e.__super__=a.prototype,e.prototype=f(a.prototype),c&&b.extend(!0,e.prototype,c),e},noop:g,bindFn:e,log:function(){return a.console?e(console.log,console):g}(),nextTick:function(){return function(a){setTimeout(a,1)}}(),slice:d([].slice),guid:function(){var a=0;return function(b){for(var c=(+new Date).toString(32),d=0;5>d;d++)c+=Math.floor(65535*Math.random()).toString(32);return(b||\"wu_\")+c+(a++).toString(32)}}(),formatSize:function(a,b,c){var d;for(c=c||[\"B\",\"K\",\"M\",\"G\",\"TB\"];(d=c.shift())&&a>1024;)a/=1024;return(\"B\"===d?a:a.toFixed(b||2))+d}}}),b(\"mediator\",[\"base\"],function(a){function b(a,b,c,d){return f.grep(a,function(a){return!(!a||b&&a.e!==b||c&&a.cb!==c&&a.cb._cb!==c||d&&a.ctx!==d)})}function c(a,b,c){f.each((a||\"\").split(h),function(a,d){c(d,b)})}function d(a,b){for(var c,d=!1,e=-1,f=a.length;++e<f;)if(c=a[e],c.cb.apply(c.ctx2,b)===!1){d=!0;break}return!d}var e,f=a.$,g=[].slice,h=/\\s+/;return e={on:function(a,b,d){var e,f=this;return b?(e=this._events||(this._events=[]),c(a,b,function(a,b){var c={e:a};c.cb=b,c.ctx=d,c.ctx2=d||f,c.id=e.length,e.push(c)}),this):this},once:function(a,b,d){var e=this;return b?(c(a,b,function(a,b){var c=function(){return e.off(a,c),b.apply(d||e,arguments)};c._cb=b,e.on(a,c,d)}),e):e},off:function(a,d,e){var g=this._events;return g?a||d||e?(c(a,d,function(a,c){f.each(b(g,a,c,e),function(){delete g[this.id]})}),this):(this._events=[],this):this},trigger:function(a){var c,e,f;return this._events&&a?(c=g.call(arguments,1),e=b(this._events,a),f=b(this._events,\"all\"),d(e,c)&&d(f,arguments)):this}},f.extend({installTo:function(a){return f.extend(a,e)}},e)}),b(\"uploader\",[\"base\",\"mediator\"],function(a,b){function c(a){this.options=d.extend(!0,{},c.options,a),this._init(this.options)}var d=a.$;return c.options={},b.installTo(c.prototype),d.each({upload:\"start-upload\",stop:\"stop-upload\",getFile:\"get-file\",getFiles:\"get-files\",addFile:\"add-file\",addFiles:\"add-file\",sort:\"sort-files\",removeFile:\"remove-file\",cancelFile:\"cancel-file\",skipFile:\"skip-file\",retry:\"retry\",isInProgress:\"is-in-progress\",makeThumb:\"make-thumb\",md5File:\"md5-file\",getDimension:\"get-dimension\",addButton:\"add-btn\",predictRuntimeType:\"predict-runtime-type\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\",reset:\"reset\"},function(a,b){c.prototype[a]=function(){return this.request(b,arguments)}}),d.extend(c.prototype,{state:\"pending\",_init:function(a){var b=this;b.request(\"init\",a,function(){b.state=\"ready\",b.trigger(\"ready\")})},option:function(a,b){var c=this.options;return arguments.length>1?void(d.isPlainObject(b)&&d.isPlainObject(c[a])?d.extend(c[a],b):c[a]=b):a?c[a]:c},getStats:function(){var a=this.request(\"get-stats\");return a?{successNum:a.numOfSuccess,progressNum:a.numOfProgress,cancelNum:a.numOfCancel,invalidNum:a.numOfInvalid,uploadFailNum:a.numOfUploadFailed,queueNum:a.numOfQueue,interruptNum:a.numofInterrupt}:{}},trigger:function(a){var c=[].slice.call(arguments,1),e=this.options,f=\"on\"+a.substring(0,1).toUpperCase()+a.substring(1);return b.trigger.apply(this,arguments)===!1||d.isFunction(e[f])&&e[f].apply(this,c)===!1||d.isFunction(this[f])&&this[f].apply(this,c)===!1||b.trigger.apply(b,[this,a].concat(c))===!1?!1:!0},destroy:function(){this.request(\"destroy\",arguments),this.off()},request:a.noop}),a.create=c.create=function(a){return new c(a)},a.Uploader=c,c}),b(\"runtime/runtime\",[\"base\",\"mediator\"],function(a,b){function c(b){this.options=d.extend({container:document.body},b),this.uid=a.guid(\"rt_\")}var d=a.$,e={},f=function(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null};return d.extend(c.prototype,{getContainer:function(){var a,b,c=this.options;return this._container?this._container:(a=d(c.container||document.body),b=d(document.createElement(\"div\")),b.attr(\"id\",\"rt_\"+this.uid),b.css({position:\"absolute\",top:\"0px\",left:\"0px\",width:\"1px\",height:\"1px\",overflow:\"hidden\"}),a.append(b),a.addClass(\"webuploader-container\"),this._container=b,this._parent=a,b)},init:a.noop,exec:a.noop,destroy:function(){this._container&&this._container.remove(),this._parent&&this._parent.removeClass(\"webuploader-container\"),this.off()}}),c.orders=\"html5,flash\",c.addRuntime=function(a,b){e[a]=b},c.hasRuntime=function(a){return!!(a?e[a]:f(e))},c.create=function(a,b){var g,h;if(b=b||c.orders,d.each(b.split(/\\s*,\\s*/g),function(){return e[this]?(g=this,!1):void 0}),g=g||f(e),!g)throw new Error(\"Runtime Error\");return h=new e[g](a)},b.installTo(c.prototype),c}),b(\"runtime/client\",[\"base\",\"mediator\",\"runtime/runtime\"],function(a,b,c){function d(b,d){var f,g=a.Deferred();this.uid=a.guid(\"client_\"),this.runtimeReady=function(a){return g.done(a)},this.connectRuntime=function(b,h){if(f)throw new Error(\"already connected!\");return g.done(h),\"string\"==typeof b&&e.get(b)&&(f=e.get(b)),f=f||e.get(null,d),f?(a.$.extend(f.options,b),f.__promise.then(g.resolve),f.__client++):(f=c.create(b,b.runtimeOrder),f.__promise=g.promise(),f.once(\"ready\",g.resolve),f.init(),e.add(f),f.__client=1),d&&(f.__standalone=d),f},this.getRuntime=function(){return f},this.disconnectRuntime=function(){f&&(f.__client--,f.__client<=0&&(e.remove(f),delete f.__promise,f.destroy()),f=null)},this.exec=function(){if(f){var c=a.slice(arguments);return b&&c.unshift(b),f.exec.apply(this,c)}},this.getRuid=function(){return f&&f.uid},this.destroy=function(a){return function(){a&&a.apply(this,arguments),this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()}}(this.destroy)}var e;return e=function(){var a={};return{add:function(b){a[b.uid]=b},get:function(b,c){var d;if(b)return a[b];for(d in a)if(!c||!a[d].__standalone)return a[d];return null},remove:function(b){delete a[b.uid]}}}(),b.installTo(d.prototype),d}),b(\"lib/dnd\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},d.options,a),a.container=e(a.container),a.container.length&&c.call(this,\"DragAndDrop\")}var e=a.$;return d.options={accept:null,disableGlobalDnd:!1},a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/widget\",[\"base\",\"uploader\"],function(a,b){function c(a){if(!a)return!1;var b=a.length,c=e.type(a);return 1===a.nodeType&&b?!0:\"array\"===c||\"function\"!==c&&\"string\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a)}function d(a){this.owner=a,this.options=a.options}var e=a.$,f=b.prototype._init,g=b.prototype.destroy,h={},i=[];return e.extend(d.prototype,{init:a.noop,invoke:function(a,b){var c=this.responseMap;return c&&a in c&&c[a]in this&&e.isFunction(this[c[a]])?this[c[a]].apply(this,b):h},request:function(){return this.owner.request.apply(this.owner,arguments)}}),e.extend(b.prototype,{_init:function(){var a=this,b=a._widgets=[],c=a.options.disableWidgets||\"\";return e.each(i,function(d,e){(!c||!~c.indexOf(e._name))&&b.push(new e(a))}),f.apply(a,arguments)},request:function(b,d,e){var f,g,i,j,k=0,l=this._widgets,m=l&&l.length,n=[],o=[];for(d=c(d)?d:[d];m>k;k++)f=l[k],g=f.invoke(b,d),g!==h&&(a.isPromise(g)?o.push(g):n.push(g));return e||o.length?(i=a.when.apply(a,o),j=i.pipe?\"pipe\":\"then\",i[j](function(){var b=a.Deferred(),c=arguments;return 1===c.length&&(c=c[0]),setTimeout(function(){b.resolve(c)},1),b.promise()})[e?j:\"done\"](e||a.noop)):n[0]},destroy:function(){g.apply(this,arguments),this._widgets=null}}),b.register=d.register=function(b,c){var f,g={init:\"init\",destroy:\"destroy\",name:\"anonymous\"};return 1===arguments.length?(c=b,e.each(c,function(a){return\"_\"===a[0]||\"name\"===a?void(\"name\"===a&&(g.name=c.name)):void(g[a.replace(/[A-Z]/g,\"-$&\").toLowerCase()]=a)})):g=e.extend(g,b),c.responseMap=g,f=a.inherits(d,c),f._name=g.name,i.push(f),f},b.unRegister=d.unRegister=function(a){if(a&&\"anonymous\"!==a)for(var b=i.length;b--;)i[b]._name===a&&i.splice(b,1)},d}),b(\"widgets/filednd\",[\"base\",\"uploader\",\"lib/dnd\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.options.dnd=\"\",b.register({name:\"dnd\",init:function(b){if(b.dnd&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{disableGlobalDnd:b.disableGlobalDnd,container:b.dnd,accept:b.accept});return this.dnd=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"drop\",function(a){f.request(\"add-file\",[a])}),e.on(\"accept\",function(a){return f.owner.trigger(\"dndAccept\",a)}),e.init(),g.promise()}},destroy:function(){this.dnd&&this.dnd.destroy()}})}),b(\"lib/filepaste\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},a),a.container=e(a.container||document.body),c.call(this,\"FilePaste\")}var e=a.$;return a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/filepaste\",[\"base\",\"uploader\",\"lib/filepaste\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.register({name:\"paste\",init:function(b){if(b.paste&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{container:b.paste,accept:b.accept});return this.paste=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"paste\",function(a){f.owner.request(\"add-file\",[a])}),e.init(),g.promise()}},destroy:function(){this.paste&&this.paste.destroy()}})}),b(\"lib/blob\",[\"base\",\"runtime/client\"],function(a,b){function c(a,c){var d=this;d.source=c,d.ruid=a,this.size=c.size||0,this.type=!c.type&&this.ext&&~\"jpg,jpeg,png,gif,bmp\".indexOf(this.ext)?\"image/\"+(\"jpg\"===this.ext?\"jpeg\":this.ext):c.type||\"application/octet-stream\",b.call(d,\"Blob\"),this.uid=c.uid||this.uid,a&&d.connectRuntime(a)}return a.inherits(b,{constructor:c,slice:function(a,b){return this.exec(\"slice\",a,b)},getSource:function(){return this.source}}),c}),b(\"lib/file\",[\"base\",\"lib/blob\"],function(a,b){function c(a,c){var f;this.name=c.name||\"untitled\"+d++,f=e.exec(c.name)?RegExp.$1.toLowerCase():\"\",!f&&c.type&&(f=/\\/(jpg|jpeg|png|gif|bmp)$/i.exec(c.type)?RegExp.$1.toLowerCase():\"\",this.name+=\".\"+f),this.ext=f,this.lastModifiedDate=c.lastModifiedDate||(new Date).toLocaleString(),b.apply(this,arguments)}var d=1,e=/\\.([^.]+)$/;return a.inherits(b,c)}),b(\"lib/filepicker\",[\"base\",\"runtime/client\",\"lib/file\"],function(b,c,d){function e(a){if(a=this.options=f.extend({},e.options,a),a.container=f(a.id),!a.container.length)throw new Error(\"按钮指定错误\");a.innerHTML=a.innerHTML||a.label||a.container.html()||\"\",a.button=f(a.button||document.createElement(\"div\")),a.button.html(a.innerHTML),a.container.html(a.button),c.call(this,\"FilePicker\",!0)}var f=b.$;return e.options={button:null,container:null,label:null,innerHTML:null,multiple:!0,accept:null,name:\"file\"},b.inherits(c,{constructor:e,init:function(){var c=this,e=c.options,g=e.button;g.addClass(\"webuploader-pick\"),c.on(\"all\",function(a){var b;switch(a){case\"mouseenter\":g.addClass(\"webuploader-pick-hover\");break;case\"mouseleave\":g.removeClass(\"webuploader-pick-hover\");break;case\"change\":b=c.exec(\"getFiles\"),c.trigger(\"select\",f.map(b,function(a){return a=new d(c.getRuid(),a),a._refer=e.container,a}),e.container)}}),c.connectRuntime(e,function(){c.refresh(),c.exec(\"init\",e),c.trigger(\"ready\")}),this._resizeHandler=b.bindFn(this.refresh,this),f(a).on(\"resize\",this._resizeHandler)},refresh:function(){var a=this.getRuntime().getContainer(),b=this.options.button,c=b.outerWidth?b.outerWidth():b.width(),d=b.outerHeight?b.outerHeight():b.height(),e=b.offset();c&&d&&a.css({bottom:\"auto\",right:\"auto\",width:c+\"px\",height:d+\"px\"}).offset(e)},enable:function(){var a=this.options.button;a.removeClass(\"webuploader-pick-disable\"),this.refresh()},disable:function(){var a=this.options.button;this.getRuntime().getContainer().css({top:\"-99999px\"}),a.addClass(\"webuploader-pick-disable\")},destroy:function(){var b=this.options.button;f(a).off(\"resize\",this._resizeHandler),b.removeClass(\"webuploader-pick-disable webuploader-pick-hover webuploader-pick\")}}),e}),b(\"widgets/filepicker\",[\"base\",\"uploader\",\"lib/filepicker\",\"widgets/widget\"],function(a,b,c){var d=a.$;return d.extend(b.options,{pick:null,accept:null}),b.register({name:\"picker\",init:function(a){return this.pickers=[],a.pick&&this.addBtn(a.pick)},refresh:function(){d.each(this.pickers,function(){this.refresh()})},addBtn:function(b){var e=this,f=e.options,g=f.accept,h=[];if(b)return d.isPlainObject(b)||(b={id:b}),d(b.id).each(function(){var i,j,k;k=a.Deferred(),i=d.extend({},b,{accept:d.isPlainObject(g)?[g]:g,swf:f.swf,runtimeOrder:f.runtimeOrder,id:this}),j=new c(i),j.once(\"ready\",k.resolve),j.on(\"select\",function(a){e.owner.request(\"add-file\",[a])}),j.init(),e.pickers.push(j),h.push(k.promise())}),a.when.apply(a,h)},disable:function(){d.each(this.pickers,function(){this.disable()})},enable:function(){d.each(this.pickers,function(){this.enable()})},destroy:function(){d.each(this.pickers,function(){this.destroy()}),this.pickers=null}})}),b(\"lib/image\",[\"base\",\"runtime/client\",\"lib/blob\"],function(a,b,c){function d(a){this.options=e.extend({},d.options,a),b.call(this,\"Image\"),this.on(\"load\",function(){this._info=this.exec(\"info\"),this._meta=this.exec(\"meta\")})}var e=a.$;return d.options={quality:90,crop:!1,preserveHeaders:!1,allowMagnify:!1},a.inherits(b,{constructor:d,info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},loadFromBlob:function(a){var b=this,c=a.getRuid();this.connectRuntime(c,function(){b.exec(\"init\",b.options),b.exec(\"loadFromBlob\",a)})},resize:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"resize\"].concat(b))},crop:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"crop\"].concat(b))},getAsDataUrl:function(a){return this.exec(\"getAsDataUrl\",a)},getAsBlob:function(a){var b=this.exec(\"getAsBlob\",a);return new c(this.getRuid(),b)}}),d}),b(\"widgets/image\",[\"base\",\"uploader\",\"lib/image\",\"widgets/widget\"],function(a,b,c){var d,e=a.$;return d=function(a){var b=0,c=[],d=function(){for(var d;c.length&&a>b;)d=c.shift(),b+=d[0],d[1]()};return function(a,e,f){c.push([e,f]),a.once(\"destroy\",function(){b-=e,setTimeout(d,1)}),setTimeout(d,1)}}(5242880),e.extend(b.options,{thumb:{width:110,height:110,quality:70,allowMagnify:!0,crop:!0,preserveHeaders:!1,type:\"image/jpeg\"},compress:{width:1600,height:1600,quality:90,allowMagnify:!1,crop:!1,preserveHeaders:!0}}),b.register({name:\"image\",makeThumb:function(a,b,f,g){var h,i;return a=this.request(\"get-file\",a),a.type.match(/^image/)?(h=e.extend({},this.options.thumb),e.isPlainObject(f)&&(h=e.extend(h,f),f=null),f=f||h.width,g=g||h.height,i=new c(h),i.once(\"load\",function(){a._info=a._info||i.info(),a._meta=a._meta||i.meta(),1>=f&&f>0&&(f=a._info.width*f),1>=g&&g>0&&(g=a._info.height*g),i.resize(f,g)}),i.once(\"complete\",function(){b(!1,i.getAsDataUrl(h.type)),i.destroy()}),i.once(\"error\",function(a){b(a||!0),i.destroy()}),void d(i,a.source.size,function(){a._info&&i.info(a._info),a._meta&&i.meta(a._meta),i.loadFromBlob(a.source)})):void b(!0)},beforeSendFile:function(b){var d,f,g=this.options.compress||this.options.resize,h=g&&g.compressSize||0,i=g&&g.noCompressIfLarger||!1;return b=this.request(\"get-file\",b),!g||!~\"image/jpeg,image/jpg\".indexOf(b.type)||b.size<h||b._compressed?void 0:(g=e.extend({},g),f=a.Deferred(),d=new c(g),f.always(function(){d.destroy(),d=null}),d.once(\"error\",f.reject),d.once(\"load\",function(){var a=g.width,c=g.height;b._info=b._info||d.info(),b._meta=b._meta||d.meta(),1>=a&&a>0&&(a=b._info.width*a),1>=c&&c>0&&(c=b._info.height*c),d.resize(a,c)}),d.once(\"complete\",function(){var a,c;try{a=d.getAsBlob(g.type),c=b.size,(!i||a.size<c)&&(b.source=a,b.size=a.size,b.trigger(\"resize\",a.size,c)),b._compressed=!0,f.resolve()}catch(e){f.resolve()}}),b._info&&d.info(b._info),b._meta&&d.meta(b._meta),d.loadFromBlob(b.source),f.promise())}})}),b(\"file\",[\"base\",\"mediator\"],function(a,b){function c(){return f+g++}function d(a){this.name=a.name||\"Untitled\",this.size=a.size||0,this.type=a.type||\"application/octet-stream\",this.lastModifiedDate=a.lastModifiedDate||1*new Date,this.id=c(),this.ext=h.exec(this.name)?RegExp.$1:\"\",this.statusText=\"\",i[this.id]=d.Status.INITED,this.source=a,this.loaded=0,this.on(\"error\",function(a){this.setStatus(d.Status.ERROR,a)})}var e=a.$,f=\"WU_FILE_\",g=0,h=/\\.([^.]+)$/,i={};return e.extend(d.prototype,{setStatus:function(a,b){var c=i[this.id];\"undefined\"!=typeof b&&(this.statusText=b),a!==c&&(i[this.id]=a,this.trigger(\"statuschange\",a,c))},getStatus:function(){return i[this.id]},getSource:function(){return this.source},destroy:function(){this.off(),delete i[this.id]}}),b.installTo(d.prototype),d.Status={INITED:\"inited\",QUEUED:\"queued\",PROGRESS:\"progress\",ERROR:\"error\",COMPLETE:\"complete\",CANCELLED:\"cancelled\",INTERRUPT:\"interrupt\",INVALID:\"invalid\"},d}),b(\"queue\",[\"base\",\"mediator\",\"file\"],function(a,b,c){function d(){this.stats={numOfQueue:0,numOfSuccess:0,numOfCancel:0,numOfProgress:0,numOfUploadFailed:0,numOfInvalid:0,numofDeleted:0,numofInterrupt:0},this._queue=[],this._map={}}var e=a.$,f=c.Status;return e.extend(d.prototype,{append:function(a){return this._queue.push(a),this._fileAdded(a),this},prepend:function(a){return this._queue.unshift(a),this._fileAdded(a),this},getFile:function(a){return\"string\"!=typeof a?a:this._map[a]},fetch:function(a){var b,c,d=this._queue.length;for(a=a||f.QUEUED,b=0;d>b;b++)if(c=this._queue[b],a===c.getStatus())return c;return null},sort:function(a){\"function\"==typeof a&&this._queue.sort(a)},getFiles:function(){for(var a,b=[].slice.call(arguments,0),c=[],d=0,f=this._queue.length;f>d;d++)a=this._queue[d],(!b.length||~e.inArray(a.getStatus(),b))&&c.push(a);return c},removeFile:function(a){var b=this._map[a.id];b&&(delete this._map[a.id],a.destroy(),this.stats.numofDeleted++)},_fileAdded:function(a){var b=this,c=this._map[a.id];c||(this._map[a.id]=a,a.on(\"statuschange\",function(a,c){b._onFileStatusChange(a,c)}))},_onFileStatusChange:function(a,b){var c=this.stats;switch(b){case f.PROGRESS:c.numOfProgress--;break;case f.QUEUED:c.numOfQueue--;break;case f.ERROR:c.numOfUploadFailed--;break;case f.INVALID:c.numOfInvalid--;break;case f.INTERRUPT:c.numofInterrupt--}switch(a){case f.QUEUED:c.numOfQueue++;break;case f.PROGRESS:c.numOfProgress++;break;case f.ERROR:c.numOfUploadFailed++;break;case f.COMPLETE:c.numOfSuccess++;break;case f.CANCELLED:c.numOfCancel++;break;case f.INVALID:c.numOfInvalid++;break;case f.INTERRUPT:c.numofInterrupt++}}}),b.installTo(d.prototype),d}),b(\"widgets/queue\",[\"base\",\"uploader\",\"queue\",\"file\",\"lib/file\",\"runtime/client\",\"widgets/widget\"],function(a,b,c,d,e,f){var g=a.$,h=/\\.\\w+$/,i=d.Status;return b.register({name:\"queue\",init:function(b){var d,e,h,i,j,k,l,m=this;if(g.isPlainObject(b.accept)&&(b.accept=[b.accept]),b.accept){for(j=[],h=0,e=b.accept.length;e>h;h++)i=b.accept[h].extensions,i&&j.push(i);j.length&&(k=\"\\\\.\"+j.join(\",\").replace(/,/g,\"$|\\\\.\").replace(/\\*/g,\".*\")+\"$\"),m.accept=new RegExp(k,\"i\")}return m.queue=new c,m.stats=m.queue.stats,\"html5\"===this.request(\"predict-runtime-type\")?(d=a.Deferred(),this.placeholder=l=new f(\"Placeholder\"),l.connectRuntime({runtimeOrder:\"html5\"},function(){m._ruid=l.getRuid(),d.resolve()}),d.promise()):void 0},_wrapFile:function(a){if(!(a instanceof d)){if(!(a instanceof e)){if(!this._ruid)throw new Error(\"Can't add external files.\");a=new e(this._ruid,a)}a=new d(a)}return a},acceptFile:function(a){var b=!a||!a.size||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b},_addFile:function(a){var b=this;return a=b._wrapFile(a),b.owner.trigger(\"beforeFileQueued\",a)?b.acceptFile(a)?(b.queue.append(a),b.owner.trigger(\"fileQueued\",a),a):void b.owner.trigger(\"error\",\"Q_TYPE_DENIED\",a):void 0},getFile:function(a){return this.queue.getFile(a)},addFile:function(a){var b=this;a.length||(a=[a]),a=g.map(a,function(a){return b._addFile(a)}),b.owner.trigger(\"filesQueued\",a),b.options.auto&&setTimeout(function(){b.request(\"start-upload\")},20)},getStats:function(){return this.stats},removeFile:function(a,b){var c=this;a=a.id?a:c.queue.getFile(a),this.request(\"cancel-file\",a),b&&this.queue.removeFile(a)},getFiles:function(){return this.queue.getFiles.apply(this.queue,arguments)},fetchFile:function(){return this.queue.fetch.apply(this.queue,arguments)},retry:function(a,b){var c,d,e,f=this;if(a)return a=a.id?a:f.queue.getFile(a),a.setStatus(i.QUEUED),void(b||f.request(\"start-upload\"));for(c=f.queue.getFiles(i.ERROR),d=0,e=c.length;e>d;d++)a=c[d],a.setStatus(i.QUEUED);f.request(\"start-upload\")},sortFiles:function(){return this.queue.sort.apply(this.queue,arguments)},reset:function(){this.owner.trigger(\"reset\"),this.queue=new c,this.stats=this.queue.stats},destroy:function(){this.reset(),this.placeholder&&this.placeholder.destroy()}})}),b(\"widgets/runtime\",[\"uploader\",\"runtime/runtime\",\"widgets/widget\"],function(a,b){return a.support=function(){return b.hasRuntime.apply(b,arguments)},a.register({name:\"runtime\",init:function(){if(!this.predictRuntimeType())throw Error(\"Runtime Error\")},predictRuntimeType:function(){var a,c,d=this.options.runtimeOrder||b.orders,e=this.type;if(!e)for(d=d.split(/\\s*,\\s*/g),a=0,c=d.length;c>a;a++)if(b.hasRuntime(d[a])){this.type=e=d[a];break}return e}})}),b(\"lib/transport\",[\"base\",\"runtime/client\",\"mediator\"],function(a,b,c){function d(a){var c=this;a=c.options=e.extend(!0,{},d.options,a||{}),b.call(this,\"Transport\"),this._blob=null,this._formData=a.formData||{},this._headers=a.headers||{},this.on(\"progress\",this._timeout),this.on(\"load error\",function(){c.trigger(\"progress\",1),clearTimeout(c._timer)})}var e=a.$;return d.options={server:\"\",method:\"POST\",withCredentials:!1,fileVal:\"file\",timeout:12e4,formData:{},headers:{},sendAsBinary:!1},e.extend(d.prototype,{appendBlob:function(a,b,c){var d=this,e=d.options;d.getRuid()&&d.disconnectRuntime(),d.connectRuntime(b.ruid,function(){d.exec(\"init\")}),d._blob=b,e.fileVal=a||e.fileVal,e.filename=c||e.filename},append:function(a,b){\"object\"==typeof a?e.extend(this._formData,a):this._formData[a]=b},setRequestHeader:function(a,b){\"object\"==typeof a?e.extend(this._headers,a):this._headers[a]=b},send:function(a){this.exec(\"send\",a),this._timeout()},abort:function(){return clearTimeout(this._timer),this.exec(\"abort\")},destroy:function(){this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()},getResponse:function(){return this.exec(\"getResponse\")},getResponseAsJson:function(){return this.exec(\"getResponseAsJson\")},getStatus:function(){return this.exec(\"getStatus\")},_timeout:function(){var a=this,b=a.options.timeout;b&&(clearTimeout(a._timer),a._timer=setTimeout(function(){a.abort(),a.trigger(\"error\",\"timeout\")},b))}}),c.installTo(d.prototype),d}),b(\"widgets/upload\",[\"base\",\"uploader\",\"file\",\"lib/transport\",\"widgets/widget\"],function(a,b,c,d){function e(a,b){var c,d,e=[],f=a.source,g=f.size,h=b?Math.ceil(g/b):1,i=0,j=0;for(d={file:a,has:function(){return!!e.length},shift:function(){return e.shift()},unshift:function(a){e.unshift(a)}};h>j;)c=Math.min(b,g-i),e.push({file:a,start:i,end:b?i+c:g,total:g,chunks:h,chunk:j++,cuted:d}),i+=c;return a.blocks=e.concat(),a.remaning=e.length,d}var f=a.$,g=a.isPromise,h=c.Status;f.extend(b.options,{prepareNextFile:!1,chunked:!1,chunkSize:5242880,chunkRetry:2,threads:3,formData:{}}),b.register({name:\"upload\",init:function(){var b=this.owner,c=this;this.runing=!1,this.progress=!1,b.on(\"startUpload\",function(){c.progress=!0}).on(\"uploadFinished\",function(){c.progress=!1}),this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this.__tick=a.bindFn(this._tick,this),b.on(\"uploadComplete\",function(a){a.blocks&&f.each(a.blocks,function(a,b){b.transport&&(b.transport.abort(),b.transport.destroy()),delete b.transport}),delete a.blocks,delete a.remaning})},reset:function(){this.request(\"stop-upload\",!0),this.runing=!1,this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this._trigged=!1,this._promise=null},startUpload:function(b){var c=this;if(f.each(c.request(\"get-files\",h.INVALID),function(){c.request(\"remove-file\",this)}),b)if(b=b.id?b:c.request(\"get-file\",b),b.getStatus()===h.INTERRUPT)f.each(c.pool,function(a,c){c.file===b&&c.transport&&c.transport.send()}),b.setStatus(h.QUEUED);else{if(b.getStatus()===h.PROGRESS)return;b.setStatus(h.QUEUED)}else f.each(c.request(\"get-files\",[h.INITED]),function(){this.setStatus(h.QUEUED)});if(!c.runing){c.runing=!0;var d=[];f.each(c.pool,function(a,b){var e=b.file;e.getStatus()===h.INTERRUPT&&(d.push(e),c._trigged=!1,b.transport&&b.transport.send())});for(var b;b=d.shift();)b.setStatus(h.PROGRESS);b||f.each(c.request(\"get-files\",h.INTERRUPT),function(){this.setStatus(h.PROGRESS)}),c._trigged=!1,a.nextTick(c.__tick),c.owner.trigger(\"startUpload\")}},stopUpload:function(b,c){var d=this;if(b===!0&&(c=b,b=null),d.runing!==!1){if(b){if(b=b.id?b:d.request(\"get-file\",b),b.getStatus()!==h.PROGRESS&&b.getStatus()!==h.QUEUED)return;return b.setStatus(h.INTERRUPT),f.each(d.pool,function(a,c){c.file===b&&(c.transport&&c.transport.abort(),d._putback(c),d._popBlock(c))}),a.nextTick(d.__tick)}d.runing=!1,this._promise&&this._promise.file&&this._promise.file.setStatus(h.INTERRUPT),c&&f.each(d.pool,function(a,b){b.transport&&b.transport.abort(),b.file.setStatus(h.INTERRUPT)}),d.owner.trigger(\"stopUpload\")}},cancelFile:function(a){a=a.id?a:this.request(\"get-file\",a),a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),a.setStatus(h.CANCELLED),this.owner.trigger(\"fileDequeued\",a)},isInProgress:function(){return!!this.progress},_getStats:function(){return this.request(\"get-stats\")},skipFile:function(a,b){a=a.id?a:this.request(\"get-file\",a),a.setStatus(b||h.COMPLETE),a.skipped=!0,a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),this.owner.trigger(\"uploadSkip\",a)},_tick:function(){var b,c,d=this,e=d.options;return d._promise?d._promise.always(d.__tick):void(d.pool.length<e.threads&&(c=d._nextBlock())?(d._trigged=!1,b=function(b){d._promise=null,b&&b.file&&d._startSend(b),a.nextTick(d.__tick)},d._promise=g(c)?c.always(b):b(c)):d.remaning||d._getStats().numOfQueue||d._getStats().numofInterrupt||(d.runing=!1,d._trigged||a.nextTick(function(){d.owner.trigger(\"uploadFinished\")}),d._trigged=!0))},_putback:function(a){var b;a.cuted.unshift(a),b=this.stack.indexOf(a.cuted),~b||this.stack.unshift(a.cuted)},_getStack:function(){for(var a,b=0;a=this.stack[b++];){if(a.has()&&a.file.getStatus()===h.PROGRESS)return a;(!a.has()||a.file.getStatus()!==h.PROGRESS&&a.file.getStatus()!==h.INTERRUPT)&&this.stack.splice(--b,1)}return null},_nextBlock:function(){var a,b,c,d,f=this,h=f.options;return(a=this._getStack())?(h.prepareNextFile&&!f.pending.length&&f._prepareNextFile(),a.shift()):f.runing?(!f.pending.length&&f._getStats().numOfQueue&&f._prepareNextFile(),b=f.pending.shift(),c=function(b){return b?(a=e(b,h.chunked?h.chunkSize:0),f.stack.push(a),a.shift()):null},g(b)?(d=b.file,b=b[b.pipe?\"pipe\":\"then\"](c),b.file=d,b):c(b)):void 0},_prepareNextFile:function(){var a,b=this,c=b.request(\"fetch-file\"),d=b.pending;c&&(a=b.request(\"before-send-file\",c,function(){return c.getStatus()===h.PROGRESS||c.getStatus()===h.INTERRUPT?c:b._finishFile(c)}),b.owner.trigger(\"uploadStart\",c),c.setStatus(h.PROGRESS),a.file=c,a.done(function(){var b=f.inArray(a,d);~b&&d.splice(b,1,c)}),a.fail(function(a){c.setStatus(h.ERROR,a),b.owner.trigger(\"uploadError\",c,a),b.owner.trigger(\"uploadComplete\",c)}),d.push(a))},_popBlock:function(a){var b=f.inArray(a,this.pool);this.pool.splice(b,1),a.file.remaning--,this.remaning--},_startSend:function(b){var c,d=this,e=b.file;return e.getStatus()!==h.PROGRESS?void(e.getStatus()===h.INTERRUPT&&d._putback(b)):(d.pool.push(b),d.remaning++,b.blob=1===b.chunks?e.source:e.source.slice(b.start,b.end),c=d.request(\"before-send\",b,function(){e.getStatus()===h.PROGRESS?d._doSend(b):(d._popBlock(b),a.nextTick(d.__tick))}),void c.fail(function(){1===e.remaning?d._finishFile(e).always(function(){b.percentage=1,d._popBlock(b),d.owner.trigger(\"uploadComplete\",e),a.nextTick(d.__tick)}):(b.percentage=1,d.updateFileProgress(e),d._popBlock(b),a.nextTick(d.__tick))}))},_doSend:function(b){var c,e,g=this,i=g.owner,j=g.options,k=b.file,l=new d(j),m=f.extend({},j.formData),n=f.extend({},j.headers);b.transport=l,l.on(\"destroy\",function(){delete b.transport,g._popBlock(b),a.nextTick(g.__tick)}),l.on(\"progress\",function(a){b.percentage=a,g.updateFileProgress(k)}),c=function(a){var c;return e=l.getResponseAsJson()||{},e._raw=l.getResponse(),c=function(b){a=b},i.trigger(\"uploadAccept\",b,e,c)||(a=a||\"server\"),a},l.on(\"error\",function(a,d){b.retried=b.retried||0,b.chunks>1&&~\"http,abort\".indexOf(a)&&b.retried<j.chunkRetry?(b.retried++,l.send()):(d||\"server\"!==a||(a=c(a)),k.setStatus(h.ERROR,a),i.trigger(\"uploadError\",k,a),i.trigger(\"uploadComplete\",k))}),l.on(\"load\",function(){var a;return(a=c())?void l.trigger(\"error\",a,!0):void(1===k.remaning?g._finishFile(k,e):l.destroy())}),m=f.extend(m,{id:k.id,name:k.name,type:k.type,lastModifiedDate:k.lastModifiedDate,size:k.size}),b.chunks>1&&f.extend(m,{chunks:b.chunks,chunk:b.chunk}),i.trigger(\"uploadBeforeSend\",b,m,n),l.appendBlob(j.fileVal,b.blob,k.name),l.append(m),l.setRequestHeader(n),l.send()},_finishFile:function(a,b,c){var d=this.owner;return d.request(\"after-send-file\",arguments,function(){a.setStatus(h.COMPLETE),d.trigger(\"uploadSuccess\",a,b,c)}).fail(function(b){a.getStatus()===h.PROGRESS&&a.setStatus(h.ERROR,b),d.trigger(\"uploadError\",a,b)\n}).always(function(){d.trigger(\"uploadComplete\",a)})},updateFileProgress:function(a){var b=0,c=0;a.blocks&&(f.each(a.blocks,function(a,b){c+=(b.percentage||0)*(b.end-b.start)}),b=c/a.size,this.owner.trigger(\"uploadProgress\",a,b||0))}})}),b(\"widgets/validator\",[\"base\",\"uploader\",\"file\",\"widgets/widget\"],function(a,b,c){var d,e=a.$,f={};return d={addValidator:function(a,b){f[a]=b},removeValidator:function(a){delete f[a]}},b.register({name:\"validator\",init:function(){var b=this;a.nextTick(function(){e.each(f,function(){this.call(b.owner)})})}}),d.addValidator(\"fileNumLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileNumLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){return c>=d&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_NUM_LIMIT\",d,a),setTimeout(function(){e=!0},1)),c>=d?!1:!0}),a.on(\"fileQueued\",function(){c++}),a.on(\"fileDequeued\",function(){c--}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSizeLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileSizeLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){var b=c+a.size>d;return b&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_SIZE_LIMIT\",d,a),setTimeout(function(){e=!0},1)),b?!1:!0}),a.on(\"fileQueued\",function(a){c+=a.size}),a.on(\"fileDequeued\",function(a){c-=a.size}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSingleSizeLimit\",function(){var a=this,b=a.options,d=b.fileSingleSizeLimit;d&&a.on(\"beforeFileQueued\",function(a){return a.size>d?(a.setStatus(c.Status.INVALID,\"exceed_size\"),this.trigger(\"error\",\"F_EXCEED_SIZE\",d,a),!1):void 0})}),d.addValidator(\"duplicate\",function(){function a(a){for(var b,c=0,d=0,e=a.length;e>d;d++)b=a.charCodeAt(d),c=b+(c<<6)+(c<<16)-c;return c}var b=this,c=b.options,d={};c.duplicate||(b.on(\"beforeFileQueued\",function(b){var c=b.__hash||(b.__hash=a(b.name+b.size+b.lastModifiedDate));return d[c]?(this.trigger(\"error\",\"F_DUPLICATE\",b),!1):void 0}),b.on(\"fileQueued\",function(a){var b=a.__hash;b&&(d[b]=!0)}),b.on(\"fileDequeued\",function(a){var b=a.__hash;b&&delete d[b]}),b.on(\"reset\",function(){d={}}))}),d}),b(\"runtime/compbase\",[],function(){function a(a,b){this.owner=a,this.options=a.options,this.getRuntime=function(){return b},this.getRuid=function(){return b.uid},this.trigger=function(){return a.trigger.apply(a,arguments)}}return a}),b(\"runtime/html5/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a={},d=this,e=this.destroy;c.apply(d,arguments),d.type=f,d.exec=function(c,e){var f,h=this,i=h.uid,j=b.slice(arguments,2);return g[c]&&(f=a[i]=a[i]||new g[c](h,d),f[e])?f[e].apply(f,j):void 0},d.destroy=function(){return e&&e.apply(this,arguments)}}var f=\"html5\",g={};return b.inherits(c,{constructor:e,init:function(){var a=this;setTimeout(function(){a.trigger(\"ready\")},1)}}),e.register=function(a,c){var e=g[a]=b.inherits(d,c);return e},a.Blob&&a.FileReader&&a.DataView&&c.addRuntime(f,e),e}),b(\"runtime/html5/blob\",[\"runtime/html5/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.owner.source,e=d.slice||d.webkitSlice||d.mozSlice;return d=e.call(d,a,c),new b(this.getRuid(),d)}})}),b(\"runtime/html5/dnd\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){var d=a.$,e=\"webuploader-dnd-\";return b.register(\"DragAndDrop\",{init:function(){var b=this.elem=this.options.container;this.dragEnterHandler=a.bindFn(this._dragEnterHandler,this),this.dragOverHandler=a.bindFn(this._dragOverHandler,this),this.dragLeaveHandler=a.bindFn(this._dragLeaveHandler,this),this.dropHandler=a.bindFn(this._dropHandler,this),this.dndOver=!1,b.on(\"dragenter\",this.dragEnterHandler),b.on(\"dragover\",this.dragOverHandler),b.on(\"dragleave\",this.dragLeaveHandler),b.on(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).on(\"dragover\",this.dragOverHandler),d(document).on(\"drop\",this.dropHandler))},_dragEnterHandler:function(a){var b,c=this,d=c._denied||!1;return a=a.originalEvent||a,c.dndOver||(c.dndOver=!0,b=a.dataTransfer.items,b&&b.length&&(c._denied=d=!c.trigger(\"accept\",b)),c.elem.addClass(e+\"over\"),c.elem[d?\"addClass\":\"removeClass\"](e+\"denied\")),a.dataTransfer.dropEffect=d?\"none\":\"copy\",!1},_dragOverHandler:function(a){var b=this.elem.parent().get(0);return b&&!d.contains(b,a.currentTarget)?!1:(clearTimeout(this._leaveTimer),this._dragEnterHandler.call(this,a),!1)},_dragLeaveHandler:function(){var a,b=this;return a=function(){b.dndOver=!1,b.elem.removeClass(e+\"over \"+e+\"denied\")},clearTimeout(b._leaveTimer),b._leaveTimer=setTimeout(a,100),!1},_dropHandler:function(a){var b,f,g=this,h=g.getRuid(),i=g.elem.parent().get(0);if(i&&!d.contains(i,a.currentTarget))return!1;a=a.originalEvent||a,b=a.dataTransfer;try{f=b.getData(\"text/html\")}catch(j){}return f?void 0:(g._getTansferFiles(b,function(a){g.trigger(\"drop\",d.map(a,function(a){return new c(h,a)}))}),g.dndOver=!1,g.elem.removeClass(e+\"over\"),!1)},_getTansferFiles:function(b,c){var d,e,f,g,h,i,j,k=[],l=[];for(d=b.items,e=b.files,j=!(!d||!d[0].webkitGetAsEntry),h=0,i=e.length;i>h;h++)f=e[h],g=d&&d[h],j&&g.webkitGetAsEntry().isDirectory?l.push(this._traverseDirectoryTree(g.webkitGetAsEntry(),k)):k.push(f);a.when.apply(a,l).done(function(){k.length&&c(k)})},_traverseDirectoryTree:function(b,c){var d=a.Deferred(),e=this;return b.isFile?b.file(function(a){c.push(a),d.resolve()}):b.isDirectory&&b.createReader().readEntries(function(b){var f,g=b.length,h=[],i=[];for(f=0;g>f;f++)h.push(e._traverseDirectoryTree(b[f],i));a.when.apply(a,h).then(function(){c.push.apply(c,i),d.resolve()},d.reject)}),d.promise()},destroy:function(){var a=this.elem;a&&(a.off(\"dragenter\",this.dragEnterHandler),a.off(\"dragover\",this.dragOverHandler),a.off(\"dragleave\",this.dragLeaveHandler),a.off(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).off(\"dragover\",this.dragOverHandler),d(document).off(\"drop\",this.dropHandler)))}})}),b(\"runtime/html5/filepaste\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){return b.register(\"FilePaste\",{init:function(){var b,c,d,e,f=this.options,g=this.elem=f.container,h=\".*\";if(f.accept){for(b=[],c=0,d=f.accept.length;d>c;c++)e=f.accept[c].mimeTypes,e&&b.push(e);b.length&&(h=b.join(\",\"),h=h.replace(/,/g,\"|\").replace(/\\*/g,\".*\"))}this.accept=h=new RegExp(h,\"i\"),this.hander=a.bindFn(this._pasteHander,this),g.on(\"paste\",this.hander)},_pasteHander:function(a){var b,d,e,f,g,h=[],i=this.getRuid();for(a=a.originalEvent||a,b=a.clipboardData.items,f=0,g=b.length;g>f;f++)d=b[f],\"file\"===d.kind&&(e=d.getAsFile())&&h.push(new c(i,e));h.length&&(a.preventDefault(),a.stopPropagation(),this.trigger(\"paste\",h))},destroy:function(){this.elem.off(\"paste\",this.hander)}})}),b(\"runtime/html5/filepicker\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(){var a,b,d,e,f=this.getRuntime().getContainer(),g=this,h=g.owner,i=g.options,j=this.label=c(document.createElement(\"label\")),k=this.input=c(document.createElement(\"input\"));if(k.attr(\"type\",\"file\"),k.attr(\"name\",i.name),k.addClass(\"webuploader-element-invisible\"),j.on(\"click\",function(){k.trigger(\"click\")}),j.css({opacity:0,width:\"100%\",height:\"100%\",display:\"block\",cursor:\"pointer\",background:\"#ffffff\"}),i.multiple&&k.attr(\"multiple\",\"multiple\"),i.accept&&i.accept.length>0){for(a=[],b=0,d=i.accept.length;d>b;b++)a.push(i.accept[b].mimeTypes);k.attr(\"accept\",a.join(\",\"))}f.append(k),f.append(j),e=function(a){h.trigger(a.type)},k.on(\"change\",function(a){var b,d=arguments.callee;g.files=a.target.files,b=this.cloneNode(!0),b.value=null,this.parentNode.replaceChild(b,this),k.off(),k=c(b).on(\"change\",d).on(\"mouseenter mouseleave\",e),h.trigger(\"change\")}),j.on(\"mouseenter mouseleave\",e)},getFiles:function(){return this.files},destroy:function(){this.input.off(),this.label.off()}})}),b(\"runtime/html5/util\",[\"base\"],function(b){var c=a.createObjectURL&&a||a.URL&&URL.revokeObjectURL&&URL||a.webkitURL,d=b.noop,e=d;return c&&(d=function(){return c.createObjectURL.apply(c,arguments)},e=function(){return c.revokeObjectURL.apply(c,arguments)}),{createObjectURL:d,revokeObjectURL:e,dataURL2Blob:function(a){var b,c,d,e,f,g;for(g=a.split(\",\"),b=~g[0].indexOf(\"base64\")?atob(g[1]):decodeURIComponent(g[1]),d=new ArrayBuffer(b.length),c=new Uint8Array(d),e=0;e<b.length;e++)c[e]=b.charCodeAt(e);return f=g[0].split(\":\")[1].split(\";\")[0],this.arrayBufferToBlob(d,f)},dataURL2ArrayBuffer:function(a){var b,c,d,e;for(e=a.split(\",\"),b=~e[0].indexOf(\"base64\")?atob(e[1]):decodeURIComponent(e[1]),c=new Uint8Array(b.length),d=0;d<b.length;d++)c[d]=b.charCodeAt(d);return c.buffer},arrayBufferToBlob:function(b,c){var d,e=a.BlobBuilder||a.WebKitBlobBuilder;return e?(d=new e,d.append(b),d.getBlob(c)):new Blob([b],c?{type:c}:{})},canvasToDataUrl:function(a,b,c){return a.toDataURL(b,c/100)},parseMeta:function(a,b){b(!1,{})},updateImageHead:function(a){return a}}}),b(\"runtime/html5/imagemeta\",[\"runtime/html5/util\"],function(a){var b;return b={parsers:{65505:[]},maxMetaDataSize:262144,parse:function(a,b){var c=this,d=new FileReader;d.onload=function(){b(!1,c._parse(this.result)),d=d.onload=d.onerror=null},d.onerror=function(a){b(a.message),d=d.onload=d.onerror=null},a=a.slice(0,c.maxMetaDataSize),d.readAsArrayBuffer(a.getSource())},_parse:function(a,c){if(!(a.byteLength<6)){var d,e,f,g,h=new DataView(a),i=2,j=h.byteLength-4,k=i,l={};if(65496===h.getUint16(0)){for(;j>i&&(d=h.getUint16(i),d>=65504&&65519>=d||65534===d)&&(e=h.getUint16(i+2)+2,!(i+e>h.byteLength));){if(f=b.parsers[d],!c&&f)for(g=0;g<f.length;g+=1)f[g].call(b,h,i,e,l);i+=e,k=i}k>6&&(l.imageHead=a.slice?a.slice(2,k):new Uint8Array(a).subarray(2,k))}return l}},updateImageHead:function(a,b){var c,d,e,f=this._parse(a,!0);return e=2,f.imageHead&&(e=2+f.imageHead.byteLength),d=a.slice?a.slice(e):new Uint8Array(a).subarray(e),c=new Uint8Array(b.byteLength+2+d.byteLength),c[0]=255,c[1]=216,c.set(new Uint8Array(b),2),c.set(new Uint8Array(d),b.byteLength+2),c.buffer}},a.parseMeta=function(){return b.parse.apply(b,arguments)},a.updateImageHead=function(){return b.updateImageHead.apply(b,arguments)},b}),b(\"runtime/html5/imagemeta/exif\",[\"base\",\"runtime/html5/imagemeta\"],function(a,b){var c={};return c.ExifMap=function(){return this},c.ExifMap.prototype.map={Orientation:274},c.ExifMap.prototype.get=function(a){return this[a]||this[this.map[a]]},c.exifTagTypes={1:{getValue:function(a,b){return a.getUint8(b)},size:1},2:{getValue:function(a,b){return String.fromCharCode(a.getUint8(b))},size:1,ascii:!0},3:{getValue:function(a,b,c){return a.getUint16(b,c)},size:2},4:{getValue:function(a,b,c){return a.getUint32(b,c)},size:4},5:{getValue:function(a,b,c){return a.getUint32(b,c)/a.getUint32(b+4,c)},size:8},9:{getValue:function(a,b,c){return a.getInt32(b,c)},size:4},10:{getValue:function(a,b,c){return a.getInt32(b,c)/a.getInt32(b+4,c)},size:8}},c.exifTagTypes[7]=c.exifTagTypes[1],c.getExifValue=function(b,d,e,f,g,h){var i,j,k,l,m,n,o=c.exifTagTypes[f];if(!o)return void a.log(\"Invalid Exif data: Invalid tag type.\");if(i=o.size*g,j=i>4?d+b.getUint32(e+8,h):e+8,j+i>b.byteLength)return void a.log(\"Invalid Exif data: Invalid data offset.\");if(1===g)return o.getValue(b,j,h);for(k=[],l=0;g>l;l+=1)k[l]=o.getValue(b,j+l*o.size,h);if(o.ascii){for(m=\"\",l=0;l<k.length&&(n=k[l],\"\\x00\"!==n);l+=1)m+=n;return m}return k},c.parseExifTag=function(a,b,d,e,f){var g=a.getUint16(d,e);f.exif[g]=c.getExifValue(a,b,d,a.getUint16(d+2,e),a.getUint32(d+4,e),e)},c.parseExifTags=function(b,c,d,e,f){var g,h,i;if(d+6>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory offset.\");if(g=b.getUint16(d,e),h=d+2+12*g,h+4>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory size.\");for(i=0;g>i;i+=1)this.parseExifTag(b,c,d+2+12*i,e,f);return b.getUint32(h,e)},c.parseExifData=function(b,d,e,f){var g,h,i=d+10;if(1165519206===b.getUint32(d+4)){if(i+8>b.byteLength)return void a.log(\"Invalid Exif data: Invalid segment size.\");if(0!==b.getUint16(d+8))return void a.log(\"Invalid Exif data: Missing byte alignment offset.\");switch(b.getUint16(i)){case 18761:g=!0;break;case 19789:g=!1;break;default:return void a.log(\"Invalid Exif data: Invalid byte alignment marker.\")}if(42!==b.getUint16(i+2,g))return void a.log(\"Invalid Exif data: Missing TIFF marker.\");h=b.getUint32(i+4,g),f.exif=new c.ExifMap,h=c.parseExifTags(b,i,i+h,g,f)}},b.parsers[65505].push(c.parseExifData),c}),b(\"runtime/html5/image\",[\"base\",\"runtime/html5/runtime\",\"runtime/html5/util\"],function(a,b,c){var d=\"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D\";return b.register(\"Image\",{modified:!1,init:function(){var a=this,b=new Image;b.onload=function(){a._info={type:a.type,width:this.width,height:this.height},a._metas||\"image/jpeg\"!==a.type?a.owner.trigger(\"load\"):c.parseMeta(a._blob,function(b,c){a._metas=c,a.owner.trigger(\"load\")})},b.onerror=function(){a.owner.trigger(\"error\")},a._img=b},loadFromBlob:function(a){var b=this,d=b._img;b._blob=a,b.type=a.type,d.src=c.createObjectURL(a.getSource()),b.owner.once(\"load\",function(){c.revokeObjectURL(d.src)})},resize:function(a,b){var c=this._canvas||(this._canvas=document.createElement(\"canvas\"));this._resize(this._img,c,a,b),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"resize\")},crop:function(a,b,c,d,e){var f=this._canvas||(this._canvas=document.createElement(\"canvas\")),g=this.options,h=this._img,i=h.naturalWidth,j=h.naturalHeight,k=this.getOrientation();e=e||1,f.width=c,f.height=d,g.preserveHeaders||this._rotate2Orientaion(f,k),this._renderImageToCanvas(f,h,-a,-b,i*e,j*e),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"crop\")},getAsBlob:function(a){var b,d=this._blob,e=this.options;if(a=a||this.type,this.modified||this.type!==a){if(b=this._canvas,\"image/jpeg\"===a){if(d=c.canvasToDataUrl(b,a,e.quality),e.preserveHeaders&&this._metas&&this._metas.imageHead)return d=c.dataURL2ArrayBuffer(d),d=c.updateImageHead(d,this._metas.imageHead),d=c.arrayBufferToBlob(d,a)}else d=c.canvasToDataUrl(b,a);d=c.dataURL2Blob(d)}return d},getAsDataUrl:function(a){var b=this.options;return a=a||this.type,\"image/jpeg\"===a?c.canvasToDataUrl(this._canvas,a,b.quality):this._canvas.toDataURL(a)},getOrientation:function(){return this._metas&&this._metas.exif&&this._metas.exif.get(\"Orientation\")||1},info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},destroy:function(){var a=this._canvas;this._img.onload=null,a&&(a.getContext(\"2d\").clearRect(0,0,a.width,a.height),a.width=a.height=0,this._canvas=null),this._img.src=d,this._img=this._blob=null},_resize:function(a,b,c,d){var e,f,g,h,i,j=this.options,k=a.width,l=a.height,m=this.getOrientation();~[5,6,7,8].indexOf(m)&&(c^=d,d^=c,c^=d),e=Math[j.crop?\"max\":\"min\"](c/k,d/l),j.allowMagnify||(e=Math.min(1,e)),f=k*e,g=l*e,j.crop?(b.width=c,b.height=d):(b.width=f,b.height=g),h=(b.width-f)/2,i=(b.height-g)/2,j.preserveHeaders||this._rotate2Orientaion(b,m),this._renderImageToCanvas(b,a,h,i,f,g)},_rotate2Orientaion:function(a,b){var c=a.width,d=a.height,e=a.getContext(\"2d\");switch(b){case 5:case 6:case 7:case 8:a.width=d,a.height=c}switch(b){case 2:e.translate(c,0),e.scale(-1,1);break;case 3:e.translate(c,d),e.rotate(Math.PI);break;case 4:e.translate(0,d),e.scale(1,-1);break;case 5:e.rotate(.5*Math.PI),e.scale(1,-1);break;case 6:e.rotate(.5*Math.PI),e.translate(0,-d);break;case 7:e.rotate(.5*Math.PI),e.translate(c,-d),e.scale(-1,1);break;case 8:e.rotate(-.5*Math.PI),e.translate(-c,0)}},_renderImageToCanvas:function(){function b(a,b,c){var d,e,f,g=document.createElement(\"canvas\"),h=g.getContext(\"2d\"),i=0,j=c,k=c;for(g.width=1,g.height=c,h.drawImage(a,0,0),d=h.getImageData(0,0,1,c).data;k>i;)e=d[4*(k-1)+3],0===e?j=k:i=k,k=j+i>>1;return f=k/c,0===f?1:f}function c(a){var b,c,d=a.naturalWidth,e=a.naturalHeight;return d*e>1048576?(b=document.createElement(\"canvas\"),b.width=b.height=1,c=b.getContext(\"2d\"),c.drawImage(a,-d+1,0),0===c.getImageData(0,0,1,1).data[3]):!1}return a.os.ios?a.os.ios>=7?function(a,c,d,e,f,g){var h=c.naturalWidth,i=c.naturalHeight,j=b(c,h,i);return a.getContext(\"2d\").drawImage(c,0,0,h*j,i*j,d,e,f,g)}:function(a,d,e,f,g,h){var i,j,k,l,m,n,o,p=d.naturalWidth,q=d.naturalHeight,r=a.getContext(\"2d\"),s=c(d),t=\"image/jpeg\"===this.type,u=1024,v=0,w=0;for(s&&(p/=2,q/=2),r.save(),i=document.createElement(\"canvas\"),i.width=i.height=u,j=i.getContext(\"2d\"),k=t?b(d,p,q):1,l=Math.ceil(u*g/p),m=Math.ceil(u*h/q/k);q>v;){for(n=0,o=0;p>n;)j.clearRect(0,0,u,u),j.drawImage(d,-n,-v),r.drawImage(i,0,0,u,u,e+o,f+w,l,m),n+=u,o+=l;v+=u,w+=m}r.restore(),i=j=null}:function(b){var c=a.slice(arguments,1),d=b.getContext(\"2d\");d.drawImage.apply(d,c)}}()})}),b(\"runtime/html5/transport\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.noop,d=a.$;return b.register(\"Transport\",{init:function(){this._status=0,this._response=null},send:function(){var b,c,e,f=this.owner,g=this.options,h=this._initAjax(),i=f._blob,j=g.server;g.sendAsBinary?(j+=(/\\?/.test(j)?\"&\":\"?\")+d.param(f._formData),c=i.getSource()):(b=new FormData,d.each(f._formData,function(a,c){b.append(a,c)}),b.append(g.fileVal,i.getSource(),g.filename||f._formData.name||\"\")),g.withCredentials&&\"withCredentials\"in h?(h.open(g.method,j,!0),h.withCredentials=!0):h.open(g.method,j),this._setRequestHeader(h,g.headers),c?(h.overrideMimeType&&h.overrideMimeType(\"application/octet-stream\"),a.os.android?(e=new FileReader,e.onload=function(){h.send(this.result),e=e.onload=null},e.readAsArrayBuffer(c)):h.send(c)):h.send(b)},getResponse:function(){return this._response},getResponseAsJson:function(){return this._parseJson(this._response)},getStatus:function(){return this._status},abort:function(){var a=this._xhr;a&&(a.upload.onprogress=c,a.onreadystatechange=c,a.abort(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var a=this,b=new XMLHttpRequest,d=this.options;return!d.withCredentials||\"withCredentials\"in b||\"undefined\"==typeof XDomainRequest||(b=new XDomainRequest),b.upload.onprogress=function(b){var c=0;return b.lengthComputable&&(c=b.loaded/b.total),a.trigger(\"progress\",c)},b.onreadystatechange=function(){return 4===b.readyState?(b.upload.onprogress=c,b.onreadystatechange=c,a._xhr=null,a._status=b.status,b.status>=200&&b.status<300?(a._response=b.responseText,a.trigger(\"load\")):b.status>=500&&b.status<600?(a._response=b.responseText,a.trigger(\"error\",\"server\")):a.trigger(\"error\",a._status?\"http\":\"abort\")):void 0},a._xhr=b,b},_setRequestHeader:function(a,b){d.each(b,function(b,c){a.setRequestHeader(b,c)})},_parseJson:function(a){var b;try{b=JSON.parse(a)}catch(c){b={}}return b}})}),b(\"preset/html5only\",[\"base\",\"widgets/filednd\",\"widgets/filepaste\",\"widgets/filepicker\",\"widgets/image\",\"widgets/queue\",\"widgets/runtime\",\"widgets/upload\",\"widgets/validator\",\"runtime/html5/blob\",\"runtime/html5/dnd\",\"runtime/html5/filepaste\",\"runtime/html5/filepicker\",\"runtime/html5/imagemeta/exif\",\"runtime/html5/image\",\"runtime/html5/transport\"],function(a){return a}),b(\"webuploader\",[\"preset/html5only\"],function(a){return a}),c(\"webuploader\")});"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.js",
    "content": "/*! WebUploader 0.1.5 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n\n            return obj;\n        },\n\n        makeExport = function( dollar ) {\n            root.__dollar = dollar;\n\n            // exports every module.\n            return exportsTo( factory( root, _define, _require ) );\n        },\n\n        origin;\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = makeExport();\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([ 'jquery' ], makeExport );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = makeExport();\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( window, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        var $ = window.__dollar || window.jQuery || window.Zepto;\n    \n        if ( !$ ) {\n            throw new Error('jQuery or Zepto not found!');\n        }\n    \n        return $;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id为该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.5',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match( /(?:trident)(?:.*rv:([\\w.]+))?/i ),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数noop](#WebUploader:Base.noop)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            cancelFile: 'cancel-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            md5File: 'md5-file',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            predictRuntimeType: 'predict-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     compress: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.option( 'compress', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `progressNum` 上传中的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `queueNum` 还在队列中的文件数\n             * * `interruptNum` 被暂停的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return stats ? {\n                    successNum: stats.numOfSuccess,\n                    progressNum: stats.numOfProgress,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue,\n                    interruptNum: stats.numofInterrupt\n                } : {};\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            /**\n             * 销毁 webuploader 实例\n             * @method destroy\n             * @grammar destroy() => undefined\n             */\n            destroy: function() {\n                this.request( 'destroy', arguments );\n                this.off();\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                this._parent = parent;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                this._container && this._container.remove();\n                this._parent && this._parent.removeClass('webuploader-container');\n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            _destroy = Uploader.prototype.destroy,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            /**\n             * @property {String | Array} [disableWidgets=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 默认所有 Uploader.register 了的 widget 都会被加载，如果禁用某一部分，请通过此 option 指定黑名单。\n             */\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [],\n                    deactives = me.options.disableWidgets || '';\n    \n                $.each( widgetClass, function( _, klass ) {\n                    (!deactives || !~deactives.indexOf( klass._name )) &&\n                        widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets && widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个 tick 中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                if ( args.length === 1 ) {\n                                    args = args[ 0 ];\n                                }\n    \n                                setTimeout(function() {\n                                    deferred.resolve( args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ callback ? key : 'done' ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            },\n    \n            destroy: function() {\n                _destroy.apply( this, arguments );\n                this._widgets = null;\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @grammar Uploader.register(proto);\n         * @grammar Uploader.register(map, proto);\n         * @param  {object} responseMap API 名称与函数实现的映射\n         * @param  {object} proto 组件原型，构造函数通过 constructor 属性定义\n         * @method Uploader.register\n         * @for Uploader\n         * @example\n         * Uploader.register({\n         *     'make-thumb': 'makeThumb'\n         * }, {\n         *     init: function( options ) {},\n         *     makeThumb: function() {}\n         * });\n         *\n         * Uploader.register({\n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init', destroy: 'destroy', name: 'anonymous' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n    \n                // 自动生成 map 表。\n                $.each(widgetProto, function(key) {\n                    if ( key[0] === '_' || key === 'name' ) {\n                        key === 'name' && (map.name = widgetProto.name);\n                        return;\n                    }\n    \n                    map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key;\n                });\n    \n            } else {\n                map = $.extend( map, responseMap );\n            }\n    \n            widgetProto.responseMap = map;\n            klass = Base.inherits( Widget, widgetProto );\n            klass._name = map.name;\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        /**\n         * 删除插件，只有在注册时指定了名字的才能被删除。\n         * @grammar Uploader.unRegister(name);\n         * @param  {string} name 组件名字\n         * @method Uploader.unRegister\n         * @for Uploader\n         * @example\n         *\n         * Uploader.register({\n         *     name: 'custom',\n         *     \n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         *\n         * Uploader.unRegister('custom');\n         */\n        Uploader.unRegister = Widget.unRegister = function( name ) {\n            if ( !name || name === 'anonymous' ) {\n                return;\n            }\n            \n            // 删除指定的插件。\n            for ( var i = widgetClass.length; i--; ) {\n                if ( widgetClass[i]._name === name ) {\n                    widgetClass.splice(i, 1)\n                }\n            }\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n        \n        /**\n         * @property {Selector} [disableGlobalDnd=false]  是否禁掉整个页面的拖拽功能，如果不禁用，图片拖进来的时候会默认被浏览器打开。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            name: 'dnd',\n            \n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                this.dnd = dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.dnd && this.dnd.destroy();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            name: 'paste',\n            \n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                this.paste = paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.paste && this.paste.destroy();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n            this.size = source.size || 0;\n    \n            // 如果没有指定 mimetype, 但是知道文件后缀。\n            if ( !source.type && this.ext &&\n                    ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) {\n                this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext);\n            } else {\n                this.type = source.type || 'application/octet-stream';\n            }\n    \n            RuntimeClient.call( me, 'Blob' );\n            this.uid = source.uid || this.uid;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n            // 如果有 mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && file.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n    \n            Blob.apply( this, arguments );\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                this._resizeHandler = Base.bindFn( this.refresh, this );\n                $( window ).on( 'resize', this._resizeHandler );\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                var btn = this.options.button;\n                $( window ).off( 'resize', this._resizeHandler );\n                btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' +\n                    'webuploader-pick');\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor|dom} 指定选择文件的按钮容器，不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            name: 'picker',\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addBtn( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addBtn: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    promises = [];\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                $( pick.id ).each(function() {\n                    var options, picker, deferred;\n    \n                    deferred = Base.Deferred();\n    \n                    options = $.extend({}, pick, {\n                        accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                        swf: opts.swf,\n                        runtimeOrder: opts.runtimeOrder,\n                        id: this\n                    });\n    \n                    picker = new FilePicker( options );\n    \n                    picker.once( 'ready', deferred.resolve );\n                    picker.on( 'select', function( files ) {\n                        me.owner.request( 'add-file', [ files ]);\n                    });\n                    picker.init();\n    \n                    me.pickers.push( picker );\n    \n                    promises.push( deferred.promise() );\n                });\n    \n                return Base.when.apply( Base, promises );\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            },\n    \n            destroy: function() {\n                $.each( this.pickers, function() {\n                    this.destroy();\n                });\n                this.pickers = null;\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: false,\n    \n            // 是否允许放大。\n            allowMagnify: false\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            crop: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'crop' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true,\n             *\n             *     // 如果发现压缩后文件大小比原来还大，则使用原来图片\n             *     // 此属性可能会影响图片自动纠正功能\n             *     noCompressIfLarger: false,\n             *\n             *     // 单位字节，如果图片大小小于此值，不会采用压缩。\n             *     compressSize: 0\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n    \n            name: 'image',\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * 当 width 或者 height 的值介于 0 - 1 时，被当成百分比使用。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             * 也可以借助服务端，将 base64 数据传给服务端，生成一个临时文件供预览。\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n    \n                    // 如果 width 的值介于 0 - 1\n                    // 说明设置的是百分比。\n                    if ( width <= 1 && width > 0 ) {\n                        width = file._info.width * width;\n                    }\n    \n                    // 同样的规则应用于 height\n                    if ( height <= 1 && height > 0 ) {\n                        height = file._info.height * height;\n                    }\n    \n                    image.resize( width, height );\n                });\n    \n                // 当 resize 完后\n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function( reason ) {\n                    cb( reason || true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            beforeSendFile: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 0,\n                    noCompressIfLarger = opts && opts.noCompressIfLarger || false,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只压缩 jpeg 图片格式。\n                // gif 可能会丢失针\n                // bmp png 基本上尺寸都不大，且压缩比比较小。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    var width = opts.width,\n                        height = opts.height;\n    \n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n    \n                    // 如果 width 的值介于 0 - 1\n                    // 说明设置的是百分比。\n                    if ( width <= 1 && width > 0 ) {\n                        width = file._info.width * width;\n                    }\n    \n                    // 同样的规则应用于 height\n                    if ( height <= 1 && height > 0 ) {\n                        height = file._info.height * height;\n                    }\n    \n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( !noCompressIfLarger || blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application/octet-stream'\n             */\n            this.type = source.type || 'application/octet-stream';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destroy: function() {\n                this.off();\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被取消的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * * `numofDeleted` 被移除的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0,\n                numofDeleted: 0,\n                numofInterrupt: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            /**\n             * 在队列中删除文件。\n             * @grammar removeFile( file ) => Array\n             * @method removeFile\n             * @param {File} 文件对象。\n             */\n            removeFile: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( existing ) {\n                    delete this._map[ file.id ];\n                    file.destroy();\n                    this.stats.numofDeleted++;\n                }\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            name: 'queue',\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                this.placeholder = runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || !file.size || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n            \n            /**\n             * @property {Boolean} [auto=false]\n             * @namespace options\n             * @for Uploader\n             * @description 设置为 true 后，不需要手动调用上传，有文件选择即开始上传。\n             * \n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFile: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    setTimeout(function() {\n                        me.request('start-upload');\n                    }, 20 );\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n             /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @grammar removeFile( file, true ) => undefined\n             * @grammar removeFile( id, true ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件, 默认只会标记文件状态为已取消，如果第二个参数为 `true` 则会从 queue 中移除。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file, remove ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                this.request( 'cancel-file', file );\n    \n                if ( remove ) {\n                    this.queue.removeFile( file );\n                }\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @event reset\n             * @description 当 uploader 被重置的时候触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.owner.trigger('reset');\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            },\n    \n            destroy: function() {\n                this.reset();\n                this.placeholder && this.placeholder.destroy();\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        /**\n         * @property {Object} [runtimeOrder=html5,flash]\n         * @namespace options\n         * @for Uploader\n         * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持，如果支持则使用 html5, 否则则使用 flash.\n         *\n         * 可以将此值设置成 `flash`，来强制使用 flash 运行时。\n         */\n    \n        return Uploader.register({\n            name: 'runtime',\n    \n            init: function() {\n                if ( !this.predictRuntimeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntimeType() => String\n             * @method predictRuntimeType\n             * @for  Uploader\n             */\n            predictRuntimeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData={}]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: {}\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len, api;\n    \n            api = {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                shift: function() {\n                    return pending.shift();\n                },\n    \n                unshift: function( block ) {\n                    pending.unshift( block );\n                }\n            };\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++,\n                    cuted: api\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return api;\n        }\n    \n        Uploader.register({\n            name: 'upload',\n    \n            init: function() {\n                var owner = this.owner,\n                    me = this;\n    \n                this.runing = false;\n                this.progress = false;\n    \n                owner\n                    .on( 'startUpload', function() {\n                        me.progress = true;\n                    })\n                    .on( 'uploadFinished', function() {\n                        me.progress = false;\n                    });\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存分好片的文件。\n                this.stack = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片在上传中但是没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n    \n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            reset: function() {\n                this.request( 'stop-upload', true );\n                this.runing = false;\n                this.pool = [];\n                this.stack = [];\n                this.pending = [];\n                this.remaning = 0;\n                this._trigged = false;\n                this._promise = null;\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             *\n             * 可以指定开始某一个文件。\n             * @grammar upload() => undefined\n             * @grammar upload( file | fileId) => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            startUpload: function(file) {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                // 如果指定了开始某个文件，则只开始指定文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if (file.getStatus() === Status.INTERRUPT) {\n                        $.each( me.pool, function( _, v ) {\n    \n                            // 之前暂停过。\n                            if (v.file !== file) {\n                                return;\n                            }\n    \n                            v.transport && v.transport.send();\n                        });\n    \n                        file.setStatus( Status.QUEUED );\n                    } else if (file.getStatus() === Status.PROGRESS) {\n                        return;\n                    } else {\n                        file.setStatus( Status.QUEUED );\n                    }\n                } else {\n                    $.each( me.request( 'get-files', [ Status.INITED ] ), function() {\n                        this.setStatus( Status.QUEUED );\n                    });\n                }\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                var files = [];\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        files.push(file);\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                var file;\n                while ( (file = files.shift()) ) {\n                    file.setStatus( Status.PROGRESS );\n                }\n    \n                file || $.each( me.request( 'get-files',\n                        Status.INTERRUPT ), function() {\n                    this.setStatus( Status.PROGRESS );\n                });\n    \n                me._trigged = false;\n                Base.nextTick( me.__tick );\n                me.owner.trigger('startUpload');\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             *\n             * 如果第一个参数是文件，则只暂停指定文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @grammar stop( file ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stopUpload: function( file, interrupt ) {\n                var me = this;\n    \n                if (file === true) {\n                    interrupt = file;\n                    file = null;\n                }\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                // 如果只是暂停某个文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if ( file.getStatus() !== Status.PROGRESS &&\n                            file.getStatus() !== Status.QUEUED ) {\n                        return;\n                    }\n    \n                    file.setStatus( Status.INTERRUPT );\n                    $.each( me.pool, function( _, v ) {\n    \n                        // 只 abort 指定的文件。\n                        if (v.file !== file) {\n                            return;\n                        }\n    \n                        v.transport && v.transport.abort();\n                        me._putback(v);\n                        me._popBlock(v);\n                    });\n    \n                    return Base.nextTick( me.__tick );\n                }\n    \n                me.runing = false;\n    \n                if (this._promise && this._promise.file) {\n                    this._promise.file.setStatus( Status.INTERRUPT );\n                }\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * @method cancelFile\n             * @grammar cancelFile( file ) => undefined\n             * @grammar cancelFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 标记文件状态为已取消, 同时将中断文件传输。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.cancelFile( file );\n             * })\n             */\n            cancelFile: function( file ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                file.setStatus( Status.CANCELLED );\n                this.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.progress;\n            },\n    \n            _getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me._getStats().numOfQueue &&\n                    !me._getStats().numofInterrupt ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _putback: function(block) {\n                var idx;\n    \n                block.cuted.unshift(block);\n                idx = this.stack.indexOf(block.cuted);\n    \n                if (!~idx) {\n                    this.stack.unshift(block.cuted);\n                }\n            },\n    \n            _getStack: function() {\n                var i = 0,\n                    act;\n    \n                while ( (act = this.stack[ i++ ]) ) {\n                    if ( act.has() && act.file.getStatus() === Status.PROGRESS ) {\n                        return act;\n                    } else if (!act.has() ||\n                            act.file.getStatus() !== Status.PROGRESS &&\n                            act.file.getStatus() !== Status.INTERRUPT ) {\n    \n                        // 把已经处理完了的，或者，状态为非 progress（上传中）、\n                        // interupt（暂停中） 的移除。\n                        this.stack.splice( --i, 1 );\n                    }\n                }\n    \n                return null;\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    opts = me.options,\n                    act, next, done, preparing;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( (act = this._getStack()) ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.shift();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me._getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me.stack.push(act);\n                        return act.shift();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    if ( isPromise( next) ) {\n                        preparing = next.file;\n                        next = next[ next.pipe ? 'pipe' : 'then' ]( done );\n                        next.file = preparing;\n                        return next;\n                    }\n    \n                    return done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.PROGRESS ||\n                            file.getStatus() === Status.INTERRUPT ) {\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    me.owner.trigger( 'uploadStart', file );\n                    file.setStatus( Status.PROGRESS );\n    \n                    promise.file = file;\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                // 有可能在 before-send-file 的 promise 期间改变了文件状态。\n                // 如：暂停，取消\n                // 我们不能中断 promise, 但是可以在 promise 完后，不做上传操作。\n                if ( file.getStatus() !== Status.PROGRESS ) {\n    \n                    // 如果是中断，则还需要放回去。\n                    if (file.getStatus() === Status.INTERRUPT) {\n                        me._putback(block);\n                    }\n    \n                    return;\n                }\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me.updateFileProgress( file );\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @param {Object} headers 可以扩展此对象来控制上传头部。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    block.percentage = percentage;\n                    me.updateFileProgress( file );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            },\n    \n            updateFileProgress: function(file) {\n                var totalPercent = 0,\n                    uploaded = 0;\n    \n                if (!file.blocks) {\n                    return;\n                }\n    \n                $.each( file.blocks, function( _, v ) {\n                    uploaded += (v.percentage || 0) * (v.end - v.start);\n                });\n    \n                totalPercent = uploaded / file.size;\n                this.owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            name: 'validator',\n    \n            init: function() {\n                var me = this;\n                Base.nextTick(function() {\n                    $.each( validators, function() {\n                        this.call( me.owner );\n                    });\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileNumLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileSizeLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', max, file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {Boolean} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n    \n            uploader.on( 'reset', function() {\n                mapping = {};\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Md5\n     */\n    define('lib/md5',[\n        'runtime/client',\n        'mediator'\n    ], function( RuntimeClient, Mediator ) {\n    \n        function Md5() {\n            RuntimeClient.call( this, 'Md5' );\n        }\n    \n        // 让 Md5 具备事件功能。\n        Mediator.installTo( Md5.prototype );\n    \n        Md5.prototype.loadFromBlob = function( blob ) {\n            var me = this;\n    \n            if ( me.getRuid() ) {\n                me.disconnectRuntime();\n            }\n    \n            // 连接到blob归属的同一个runtime.\n            me.connectRuntime( blob.ruid, function() {\n                me.exec('init');\n                me.exec( 'loadFromBlob', blob );\n            });\n        };\n    \n        Md5.prototype.getResult = function() {\n            return this.exec('getResult');\n        };\n    \n        return Md5;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/md5',[\n        'base',\n        'uploader',\n        'lib/md5',\n        'lib/blob',\n        'widgets/widget'\n    ], function( Base, Uploader, Md5, Blob ) {\n    \n        return Uploader.register({\n            name: 'md5',\n    \n    \n            /**\n             * 计算文件 md5 值，返回一个 promise 对象，可以监听 progress 进度。\n             *\n             *\n             * @method md5File\n             * @grammar md5File( file[, start[, end]] ) => promise\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.md5File( file )\n             *\n             *         // 及时显示进度\n             *         .progress(function(percentage) {\n             *             console.log('Percentage:', percentage);\n             *         })\n             *\n             *         // 完成\n             *         .then(function(val) {\n             *             console.log('md5 result:', val);\n             *         });\n             *\n             * });\n             */\n            md5File: function( file, start, end ) {\n                var md5 = new Md5(),\n                    deferred = Base.Deferred(),\n                    blob = (file instanceof Blob) ? file :\n                        this.request( 'get-file', file ).source;\n    \n                md5.on( 'progress load', function( e ) {\n                    e = e || {};\n                    deferred.notify( e.total ? e.loaded / e.total : 1 );\n                });\n    \n                md5.on( 'complete', function() {\n                    deferred.resolve( md5.getResult() );\n                });\n    \n                md5.on( 'error', function( reason ) {\n                    deferred.reject( reason );\n                });\n    \n                if ( arguments.length > 1 ) {\n                    start = start || 0;\n                    end = end || 0;\n                    start < 0 && (start = blob.size + start);\n                    end < 0 && (end = blob.size + end);\n                    end = Math.min( end, blob.size );\n                    blob = blob.slice( start, end );\n                }\n    \n                md5.loadFromBlob( blob );\n    \n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destroy = this.destroy;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\r\n     * @fileOverview FilePaste\r\n     */\r\n    define('runtime/html5/dnd',[\r\n        'base',\r\n        'runtime/html5/runtime',\r\n        'lib/file'\r\n    ], function( Base, Html5Runtime, File ) {\r\n    \r\n        var $ = Base.$,\r\n            prefix = 'webuploader-dnd-';\r\n    \r\n        return Html5Runtime.register( 'DragAndDrop', {\r\n            init: function() {\r\n                var elem = this.elem = this.options.container;\r\n    \r\n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\r\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\r\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\r\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\r\n                this.dndOver = false;\r\n    \r\n                elem.on( 'dragenter', this.dragEnterHandler );\r\n                elem.on( 'dragover', this.dragOverHandler );\r\n                elem.on( 'dragleave', this.dragLeaveHandler );\r\n                elem.on( 'drop', this.dropHandler );\r\n    \r\n                if ( this.options.disableGlobalDnd ) {\r\n                    $( document ).on( 'dragover', this.dragOverHandler );\r\n                    $( document ).on( 'drop', this.dropHandler );\r\n                }\r\n            },\r\n    \r\n            _dragEnterHandler: function( e ) {\r\n                var me = this,\r\n                    denied = me._denied || false,\r\n                    items;\r\n    \r\n                e = e.originalEvent || e;\r\n    \r\n                if ( !me.dndOver ) {\r\n                    me.dndOver = true;\r\n    \r\n                    // 注意只有 chrome 支持。\r\n                    items = e.dataTransfer.items;\r\n    \r\n                    if ( items && items.length ) {\r\n                        me._denied = denied = !me.trigger( 'accept', items );\r\n                    }\r\n    \r\n                    me.elem.addClass( prefix + 'over' );\r\n                    me.elem[ denied ? 'addClass' :\r\n                            'removeClass' ]( prefix + 'denied' );\r\n                }\r\n    \r\n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\r\n    \r\n                return false;\r\n            },\r\n    \r\n            _dragOverHandler: function( e ) {\r\n                // 只处理框内的。\r\n                var parentElem = this.elem.parent().get( 0 );\r\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\r\n                    return false;\r\n                }\r\n    \r\n                clearTimeout( this._leaveTimer );\r\n                this._dragEnterHandler.call( this, e );\r\n    \r\n                return false;\r\n            },\r\n    \r\n            _dragLeaveHandler: function() {\r\n                var me = this,\r\n                    handler;\r\n    \r\n                handler = function() {\r\n                    me.dndOver = false;\r\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\r\n                };\r\n    \r\n                clearTimeout( me._leaveTimer );\r\n                me._leaveTimer = setTimeout( handler, 100 );\r\n                return false;\r\n            },\r\n    \r\n            _dropHandler: function( e ) {\r\n                var me = this,\r\n                    ruid = me.getRuid(),\r\n                    parentElem = me.elem.parent().get( 0 ),\r\n                    dataTransfer, data;\r\n    \r\n                // 只处理框内的。\r\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\r\n                    return false;\r\n                }\r\n    \r\n                e = e.originalEvent || e;\r\n                dataTransfer = e.dataTransfer;\r\n    \r\n                // 如果是页面内拖拽，还不能处理，不阻止事件。\r\n                // 此处 ie11 下会报参数错误，\r\n                try {\r\n                    data = dataTransfer.getData('text/html');\r\n                } catch( err ) {\r\n                }\r\n    \r\n                if ( data ) {\r\n                    return;\r\n                }\r\n    \r\n                me._getTansferFiles( dataTransfer, function( results ) {\r\n                    me.trigger( 'drop', $.map( results, function( file ) {\r\n                        return new File( ruid, file );\r\n                    }) );\r\n                });\r\n    \r\n                me.dndOver = false;\r\n                me.elem.removeClass( prefix + 'over' );\r\n                return false;\r\n            },\r\n    \r\n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\r\n            _getTansferFiles: function( dataTransfer, callback ) {\r\n                var results  = [],\r\n                    promises = [],\r\n                    items, files, file, item, i, len, canAccessFolder;\r\n    \r\n                items = dataTransfer.items;\r\n                files = dataTransfer.files;\r\n    \r\n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\r\n    \r\n                for ( i = 0, len = files.length; i < len; i++ ) {\r\n                    file = files[ i ];\r\n                    item = items && items[ i ];\r\n    \r\n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\r\n    \r\n                        promises.push( this._traverseDirectoryTree(\r\n                                item.webkitGetAsEntry(), results ) );\r\n                    } else {\r\n                        results.push( file );\r\n                    }\r\n                }\r\n    \r\n                Base.when.apply( Base, promises ).done(function() {\r\n    \r\n                    if ( !results.length ) {\r\n                        return;\r\n                    }\r\n    \r\n                    callback( results );\r\n                });\r\n            },\r\n    \r\n            _traverseDirectoryTree: function( entry, results ) {\r\n                var deferred = Base.Deferred(),\r\n                    me = this;\r\n    \r\n                if ( entry.isFile ) {\r\n                    entry.file(function( file ) {\r\n                        results.push( file );\r\n                        deferred.resolve();\r\n                    });\r\n                } else if ( entry.isDirectory ) {\r\n                    entry.createReader().readEntries(function( entries ) {\r\n                        var len = entries.length,\r\n                            promises = [],\r\n                            arr = [],    // 为了保证顺序。\r\n                            i;\r\n    \r\n                        for ( i = 0; i < len; i++ ) {\r\n                            promises.push( me._traverseDirectoryTree(\r\n                                    entries[ i ], arr ) );\r\n                        }\r\n    \r\n                        Base.when.apply( Base, promises ).then(function() {\r\n                            results.push.apply( results, arr );\r\n                            deferred.resolve();\r\n                        }, deferred.reject );\r\n                    });\r\n                }\r\n    \r\n                return deferred.promise();\r\n            },\r\n    \r\n            destroy: function() {\r\n                var elem = this.elem;\r\n    \r\n                // 还没 init 就调用 destroy\r\n                if (!elem) {\r\n                    return;\r\n                }\r\n                \r\n                elem.off( 'dragenter', this.dragEnterHandler );\r\n                elem.off( 'dragover', this.dragOverHandler );\r\n                elem.off( 'dragleave', this.dragLeaveHandler );\r\n                elem.off( 'drop', this.dropHandler );\r\n    \r\n                if ( this.options.disableGlobalDnd ) {\r\n                    $( document ).off( 'dragover', this.dragOverHandler );\r\n                    $( document ).off( 'drop', this.dropHandler );\r\n                }\r\n            }\r\n        });\r\n    });\r\n    \n    /**\r\n     * @fileOverview FilePaste\r\n     */\r\n    define('runtime/html5/filepaste',[\r\n        'base',\r\n        'runtime/html5/runtime',\r\n        'lib/file'\r\n    ], function( Base, Html5Runtime, File ) {\r\n    \r\n        return Html5Runtime.register( 'FilePaste', {\r\n            init: function() {\r\n                var opts = this.options,\r\n                    elem = this.elem = opts.container,\r\n                    accept = '.*',\r\n                    arr, i, len, item;\r\n    \r\n                // accetp的mimeTypes中生成匹配正则。\r\n                if ( opts.accept ) {\r\n                    arr = [];\r\n    \r\n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\r\n                        item = opts.accept[ i ].mimeTypes;\r\n                        item && arr.push( item );\r\n                    }\r\n    \r\n                    if ( arr.length ) {\r\n                        accept = arr.join(',');\r\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\r\n                    }\r\n                }\r\n                this.accept = accept = new RegExp( accept, 'i' );\r\n                this.hander = Base.bindFn( this._pasteHander, this );\r\n                elem.on( 'paste', this.hander );\r\n            },\r\n    \r\n            _pasteHander: function( e ) {\r\n                var allowed = [],\r\n                    ruid = this.getRuid(),\r\n                    items, item, blob, i, len;\r\n    \r\n                e = e.originalEvent || e;\r\n                items = e.clipboardData.items;\r\n    \r\n                for ( i = 0, len = items.length; i < len; i++ ) {\r\n                    item = items[ i ];\r\n    \r\n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\r\n                        continue;\r\n                    }\r\n    \r\n                    allowed.push( new File( ruid, blob ) );\r\n                }\r\n    \r\n                if ( allowed.length ) {\r\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\r\n                    e.preventDefault();\r\n                    e.stopPropagation();\r\n                    this.trigger( 'paste', allowed );\r\n                }\r\n            },\r\n    \r\n            destroy: function() {\r\n                this.elem.off( 'paste', this.hander );\r\n            }\r\n        });\r\n    });\r\n    \n    /**\r\n     * @fileOverview FilePicker\r\n     */\r\n    define('runtime/html5/filepicker',[\r\n        'base',\r\n        'runtime/html5/runtime'\r\n    ], function( Base, Html5Runtime ) {\r\n    \r\n        var $ = Base.$;\r\n    \r\n        return Html5Runtime.register( 'FilePicker', {\r\n            init: function() {\r\n                var container = this.getRuntime().getContainer(),\r\n                    me = this,\r\n                    owner = me.owner,\r\n                    opts = me.options,\r\n                    label = this.label = $( document.createElement('label') ),\r\n                    input =  this.input = $( document.createElement('input') ),\r\n                    arr, i, len, mouseHandler;\r\n    \r\n                input.attr( 'type', 'file' );\r\n                input.attr( 'name', opts.name );\r\n                input.addClass('webuploader-element-invisible');\r\n    \r\n                label.on( 'click', function() {\r\n                    input.trigger('click');\r\n                });\r\n    \r\n                label.css({\r\n                    opacity: 0,\r\n                    width: '100%',\r\n                    height: '100%',\r\n                    display: 'block',\r\n                    cursor: 'pointer',\r\n                    background: '#ffffff'\r\n                });\r\n    \r\n                if ( opts.multiple ) {\r\n                    input.attr( 'multiple', 'multiple' );\r\n                }\r\n    \r\n                // @todo Firefox不支持单独指定后缀\r\n                if ( opts.accept && opts.accept.length > 0 ) {\r\n                    arr = [];\r\n    \r\n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\r\n                        arr.push( opts.accept[ i ].mimeTypes );\r\n                    }\r\n    \r\n                    input.attr( 'accept', arr.join(',') );\r\n                }\r\n    \r\n                container.append( input );\r\n                container.append( label );\r\n    \r\n                mouseHandler = function( e ) {\r\n                    owner.trigger( e.type );\r\n                };\r\n    \r\n                input.on( 'change', function( e ) {\r\n                    var fn = arguments.callee,\r\n                        clone;\r\n    \r\n                    me.files = e.target.files;\r\n    \r\n                    // reset input\r\n                    clone = this.cloneNode( true );\r\n                    clone.value = null;\r\n                    this.parentNode.replaceChild( clone, this );\r\n    \r\n                    input.off();\r\n                    input = $( clone ).on( 'change', fn )\r\n                            .on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n                    owner.trigger('change');\r\n                });\r\n    \r\n                label.on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n            },\r\n    \r\n    \r\n            getFiles: function() {\r\n                return this.files;\r\n            },\r\n    \r\n            destroy: function() {\r\n                this.input.off();\r\n                this.label.off();\r\n            }\r\n        });\r\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/util',[\n        'base'\n    ], function( Base ) {\n    \n        var urlAPI = window.createObjectURL && window ||\n                window.URL && URL.revokeObjectURL && URL ||\n                window.webkitURL,\n            createObjectURL = Base.noop,\n            revokeObjectURL = createObjectURL;\n    \n        if ( urlAPI ) {\n    \n            // 更安全的方式调用，比如android里面就能把context改成其他的对象。\n            createObjectURL = function() {\n                return urlAPI.createObjectURL.apply( urlAPI, arguments );\n            };\n    \n            revokeObjectURL = function() {\n                return urlAPI.revokeObjectURL.apply( urlAPI, arguments );\n            };\n        }\n    \n        return {\n            createObjectURL: createObjectURL,\n            revokeObjectURL: revokeObjectURL,\n    \n            dataURL2Blob: function( dataURI ) {\n                var byteStr, intArray, ab, i, mimetype, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                ab = new ArrayBuffer( byteStr.length );\n                intArray = new Uint8Array( ab );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ];\n    \n                return this.arrayBufferToBlob( ab, mimetype );\n            },\n    \n            dataURL2ArrayBuffer: function( dataURI ) {\n                var byteStr, intArray, i, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                intArray = new Uint8Array( byteStr.length );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                return intArray.buffer;\n            },\n    \n            arrayBufferToBlob: function( buffer, type ) {\n                var builder = window.BlobBuilder || window.WebKitBlobBuilder,\n                    bb;\n    \n                // android不支持直接new Blob, 只能借助blobbuilder.\n                if ( builder ) {\n                    bb = new builder();\n                    bb.append( buffer );\n                    return bb.getBlob( type );\n                }\n    \n                return new Blob([ buffer ], type ? { type: type } : {} );\n            },\n    \n            // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg.\n            // 你得到的结果是png.\n            canvasToDataUrl: function( canvas, type, quality ) {\n                return canvas.toDataURL( type, quality / 100 );\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            parseMeta: function( blob, callback ) {\n                callback( false, {});\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            updateImageHead: function( data ) {\n                return data;\n            }\n        };\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/imagemeta',[\n        'runtime/html5/util'\n    ], function( Util ) {\n    \n        var api;\n    \n        api = {\n            parsers: {\n                0xffe1: []\n            },\n    \n            maxMetaDataSize: 262144,\n    \n            parse: function( blob, cb ) {\n                var me = this,\n                    fr = new FileReader();\n    \n                fr.onload = function() {\n                    cb( false, me._parse( this.result ) );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                fr.onerror = function( e ) {\n                    cb( e.message );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                blob = blob.slice( 0, me.maxMetaDataSize );\n                fr.readAsArrayBuffer( blob.getSource() );\n            },\n    \n            _parse: function( buffer, noParse ) {\n                if ( buffer.byteLength < 6 ) {\n                    return;\n                }\n    \n                var dataview = new DataView( buffer ),\n                    offset = 2,\n                    maxOffset = dataview.byteLength - 4,\n                    headLength = offset,\n                    ret = {},\n                    markerBytes, markerLength, parsers, i;\n    \n                if ( dataview.getUint16( 0 ) === 0xffd8 ) {\n    \n                    while ( offset < maxOffset ) {\n                        markerBytes = dataview.getUint16( offset );\n    \n                        if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef ||\n                                markerBytes === 0xfffe ) {\n    \n                            markerLength = dataview.getUint16( offset + 2 ) + 2;\n    \n                            if ( offset + markerLength > dataview.byteLength ) {\n                                break;\n                            }\n    \n                            parsers = api.parsers[ markerBytes ];\n    \n                            if ( !noParse && parsers ) {\n                                for ( i = 0; i < parsers.length; i += 1 ) {\n                                    parsers[ i ].call( api, dataview, offset,\n                                            markerLength, ret );\n                                }\n                            }\n    \n                            offset += markerLength;\n                            headLength = offset;\n                        } else {\n                            break;\n                        }\n                    }\n    \n                    if ( headLength > 6 ) {\n                        if ( buffer.slice ) {\n                            ret.imageHead = buffer.slice( 2, headLength );\n                        } else {\n                            // Workaround for IE10, which does not yet\n                            // support ArrayBuffer.slice:\n                            ret.imageHead = new Uint8Array( buffer )\n                                    .subarray( 2, headLength );\n                        }\n                    }\n                }\n    \n                return ret;\n            },\n    \n            updateImageHead: function( buffer, head ) {\n                var data = this._parse( buffer, true ),\n                    buf1, buf2, bodyoffset;\n    \n    \n                bodyoffset = 2;\n                if ( data.imageHead ) {\n                    bodyoffset = 2 + data.imageHead.byteLength;\n                }\n    \n                if ( buffer.slice ) {\n                    buf2 = buffer.slice( bodyoffset );\n                } else {\n                    buf2 = new Uint8Array( buffer ).subarray( bodyoffset );\n                }\n    \n                buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength );\n    \n                buf1[ 0 ] = 0xFF;\n                buf1[ 1 ] = 0xD8;\n                buf1.set( new Uint8Array( head ), 2 );\n                buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 );\n    \n                return buf1.buffer;\n            }\n        };\n    \n        Util.parseMeta = function() {\n            return api.parse.apply( api, arguments );\n        };\n    \n        Util.updateImageHead = function() {\n            return api.updateImageHead.apply( api, arguments );\n        };\n    \n        return api;\n    });\n    /**\n     * 代码来自于：https://github.com/blueimp/JavaScript-Load-Image\n     * 暂时项目中只用了orientation.\n     *\n     * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail.\n     * @fileOverview EXIF解析\n     */\n    \n    // Sample\n    // ====================================\n    // Make : Apple\n    // Model : iPhone 4S\n    // Orientation : 1\n    // XResolution : 72 [72/1]\n    // YResolution : 72 [72/1]\n    // ResolutionUnit : 2\n    // Software : QuickTime 7.7.1\n    // DateTime : 2013:09:01 22:53:55\n    // ExifIFDPointer : 190\n    // ExposureTime : 0.058823529411764705 [1/17]\n    // FNumber : 2.4 [12/5]\n    // ExposureProgram : Normal program\n    // ISOSpeedRatings : 800\n    // ExifVersion : 0220\n    // DateTimeOriginal : 2013:09:01 22:52:51\n    // DateTimeDigitized : 2013:09:01 22:52:51\n    // ComponentsConfiguration : YCbCr\n    // ShutterSpeedValue : 4.058893515764426\n    // ApertureValue : 2.5260688216892597 [4845/1918]\n    // BrightnessValue : -0.3126686601998395\n    // MeteringMode : Pattern\n    // Flash : Flash did not fire, compulsory flash mode\n    // FocalLength : 4.28 [107/25]\n    // SubjectArea : [4 values]\n    // FlashpixVersion : 0100\n    // ColorSpace : 1\n    // PixelXDimension : 2448\n    // PixelYDimension : 3264\n    // SensingMethod : One-chip color area sensor\n    // ExposureMode : 0\n    // WhiteBalance : Auto white balance\n    // FocalLengthIn35mmFilm : 35\n    // SceneCaptureType : Standard\n    define('runtime/html5/imagemeta/exif',[\n        'base',\n        'runtime/html5/imagemeta'\n    ], function( Base, ImageMeta ) {\n    \n        var EXIF = {};\n    \n        EXIF.ExifMap = function() {\n            return this;\n        };\n    \n        EXIF.ExifMap.prototype.map = {\n            'Orientation': 0x0112\n        };\n    \n        EXIF.ExifMap.prototype.get = function( id ) {\n            return this[ id ] || this[ this.map[ id ] ];\n        };\n    \n        EXIF.exifTagTypes = {\n            // byte, 8-bit unsigned int:\n            1: {\n                getValue: function( dataView, dataOffset ) {\n                    return dataView.getUint8( dataOffset );\n                },\n                size: 1\n            },\n    \n            // ascii, 8-bit byte:\n            2: {\n                getValue: function( dataView, dataOffset ) {\n                    return String.fromCharCode( dataView.getUint8( dataOffset ) );\n                },\n                size: 1,\n                ascii: true\n            },\n    \n            // short, 16 bit int:\n            3: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint16( dataOffset, littleEndian );\n                },\n                size: 2\n            },\n    \n            // long, 32 bit int:\n            4: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // rational = two long values,\n            // first is numerator, second is denominator:\n            5: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian ) /\n                        dataView.getUint32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            },\n    \n            // slong, 32 bit signed int:\n            9: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // srational, two slongs, first is numerator, second is denominator:\n            10: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian ) /\n                        dataView.getInt32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            }\n        };\n    \n        // undefined, 8-bit byte, value depending on field:\n        EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ];\n    \n        EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length,\n                littleEndian ) {\n    \n            var tagType = EXIF.exifTagTypes[ type ],\n                tagSize, dataOffset, values, i, str, c;\n    \n            if ( !tagType ) {\n                Base.log('Invalid Exif data: Invalid tag type.');\n                return;\n            }\n    \n            tagSize = tagType.size * length;\n    \n            // Determine if the value is contained in the dataOffset bytes,\n            // or if the value at the dataOffset is a pointer to the actual data:\n            dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8,\n                    littleEndian ) : (offset + 8);\n    \n            if ( dataOffset + tagSize > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid data offset.');\n                return;\n            }\n    \n            if ( length === 1 ) {\n                return tagType.getValue( dataView, dataOffset, littleEndian );\n            }\n    \n            values = [];\n    \n            for ( i = 0; i < length; i += 1 ) {\n                values[ i ] = tagType.getValue( dataView,\n                        dataOffset + i * tagType.size, littleEndian );\n            }\n    \n            if ( tagType.ascii ) {\n                str = '';\n    \n                // Concatenate the chars:\n                for ( i = 0; i < values.length; i += 1 ) {\n                    c = values[ i ];\n    \n                    // Ignore the terminating NULL byte(s):\n                    if ( c === '\\u0000' ) {\n                        break;\n                    }\n                    str += c;\n                }\n    \n                return str;\n            }\n            return values;\n        };\n    \n        EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian,\n                data ) {\n    \n            var tag = dataView.getUint16( offset, littleEndian );\n            data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset,\n                    dataView.getUint16( offset + 2, littleEndian ),    // tag type\n                    dataView.getUint32( offset + 4, littleEndian ),    // tag length\n                    littleEndian );\n        };\n    \n        EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset,\n                littleEndian, data ) {\n    \n            var tagsNumber, dirEndOffset, i;\n    \n            if ( dirOffset + 6 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory offset.');\n                return;\n            }\n    \n            tagsNumber = dataView.getUint16( dirOffset, littleEndian );\n            dirEndOffset = dirOffset + 2 + 12 * tagsNumber;\n    \n            if ( dirEndOffset + 4 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory size.');\n                return;\n            }\n    \n            for ( i = 0; i < tagsNumber; i += 1 ) {\n                this.parseExifTag( dataView, tiffOffset,\n                        dirOffset + 2 + 12 * i,    // tag offset\n                        littleEndian, data );\n            }\n    \n            // Return the offset to the next directory:\n            return dataView.getUint32( dirEndOffset, littleEndian );\n        };\n    \n        // EXIF.getExifThumbnail = function(dataView, offset, length) {\n        //     var hexData,\n        //         i,\n        //         b;\n        //     if (!length || offset + length > dataView.byteLength) {\n        //         Base.log('Invalid Exif data: Invalid thumbnail data.');\n        //         return;\n        //     }\n        //     hexData = [];\n        //     for (i = 0; i < length; i += 1) {\n        //         b = dataView.getUint8(offset + i);\n        //         hexData.push((b < 16 ? '0' : '') + b.toString(16));\n        //     }\n        //     return 'data:image/jpeg,%' + hexData.join('%');\n        // };\n    \n        EXIF.parseExifData = function( dataView, offset, length, data ) {\n    \n            var tiffOffset = offset + 10,\n                littleEndian, dirOffset;\n    \n            // Check for the ASCII code for \"Exif\" (0x45786966):\n            if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) {\n                // No Exif data, might be XMP data instead\n                return;\n            }\n            if ( tiffOffset + 8 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid segment size.');\n                return;\n            }\n    \n            // Check for the two null bytes:\n            if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) {\n                Base.log('Invalid Exif data: Missing byte alignment offset.');\n                return;\n            }\n    \n            // Check the byte alignment:\n            switch ( dataView.getUint16( tiffOffset ) ) {\n                case 0x4949:\n                    littleEndian = true;\n                    break;\n    \n                case 0x4D4D:\n                    littleEndian = false;\n                    break;\n    \n                default:\n                    Base.log('Invalid Exif data: Invalid byte alignment marker.');\n                    return;\n            }\n    \n            // Check for the TIFF tag marker (0x002A):\n            if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) {\n                Base.log('Invalid Exif data: Missing TIFF marker.');\n                return;\n            }\n    \n            // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal:\n            dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian );\n            // Create the exif object to store the tags:\n            data.exif = new EXIF.ExifMap();\n            // Parse the tags of the main image directory and retrieve the\n            // offset to the next directory, usually the thumbnail directory:\n            dirOffset = EXIF.parseExifTags( dataView, tiffOffset,\n                    tiffOffset + dirOffset, littleEndian, data );\n    \n            // 尝试读取缩略图\n            // if ( dirOffset ) {\n            //     thumbnailData = {exif: {}};\n            //     dirOffset = EXIF.parseExifTags(\n            //         dataView,\n            //         tiffOffset,\n            //         tiffOffset + dirOffset,\n            //         littleEndian,\n            //         thumbnailData\n            //     );\n    \n            //     // Check for JPEG Thumbnail offset:\n            //     if (thumbnailData.exif[0x0201]) {\n            //         data.exif.Thumbnail = EXIF.getExifThumbnail(\n            //             dataView,\n            //             tiffOffset + thumbnailData.exif[0x0201],\n            //             thumbnailData.exif[0x0202] // Thumbnail data length\n            //         );\n            //     }\n            // }\n        };\n    \n        ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData );\n        return EXIF;\n    });\n    /**\n     * 这个方式性能不行，但是可以解决android里面的toDataUrl的bug\n     * android里面toDataUrl('image/jpege')得到的结果却是png.\n     *\n     * 所以这里没辙，只能借助这个工具\n     * @fileOverview jpeg encoder\n     */\n    define('runtime/html5/jpegencoder',[], function( require, exports, module ) {\n    \n        /*\n          Copyright (c) 2008, Adobe Systems Incorporated\n          All rights reserved.\n    \n          Redistribution and use in source and binary forms, with or without\n          modification, are permitted provided that the following conditions are\n          met:\n    \n          * Redistributions of source code must retain the above copyright notice,\n            this list of conditions and the following disclaimer.\n    \n          * Redistributions in binary form must reproduce the above copyright\n            notice, this list of conditions and the following disclaimer in the\n            documentation and/or other materials provided with the distribution.\n    \n          * Neither the name of Adobe Systems Incorporated nor the names of its\n            contributors may be used to endorse or promote products derived from\n            this software without specific prior written permission.\n    \n          THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n          IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n          THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n          PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n          CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n          EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n          PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n          PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n          LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n          NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n          SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n        */\n        /*\n        JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n    \n        Basic GUI blocking jpeg encoder\n        */\n    \n        function JPEGEncoder(quality) {\n          var self = this;\n            var fround = Math.round;\n            var ffloor = Math.floor;\n            var YTable = new Array(64);\n            var UVTable = new Array(64);\n            var fdtbl_Y = new Array(64);\n            var fdtbl_UV = new Array(64);\n            var YDC_HT;\n            var UVDC_HT;\n            var YAC_HT;\n            var UVAC_HT;\n    \n            var bitcode = new Array(65535);\n            var category = new Array(65535);\n            var outputfDCTQuant = new Array(64);\n            var DU = new Array(64);\n            var byteout = [];\n            var bytenew = 0;\n            var bytepos = 7;\n    \n            var YDU = new Array(64);\n            var UDU = new Array(64);\n            var VDU = new Array(64);\n            var clt = new Array(256);\n            var RGB_YUV_TABLE = new Array(2048);\n            var currentQuality;\n    \n            var ZigZag = [\n                     0, 1, 5, 6,14,15,27,28,\n                     2, 4, 7,13,16,26,29,42,\n                     3, 8,12,17,25,30,41,43,\n                     9,11,18,24,31,40,44,53,\n                    10,19,23,32,39,45,52,54,\n                    20,22,33,38,46,51,55,60,\n                    21,34,37,47,50,56,59,61,\n                    35,36,48,49,57,58,62,63\n                ];\n    \n            var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];\n            var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];\n            var std_ac_luminance_values = [\n                    0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,\n                    0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,\n                    0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n                    0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,\n                    0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,\n                    0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n                    0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,\n                    0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\n                    0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n                    0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\n                    0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,\n                    0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n                    0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,\n                    0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,\n                    0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n                    0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,\n                    0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,\n                    0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n                    0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,\n                    0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];\n            var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];\n            var std_ac_chrominance_values = [\n                    0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,\n                    0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,\n                    0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n                    0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,\n                    0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,\n                    0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n                    0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,\n                    0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,\n                    0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n                    0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,\n                    0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,\n                    0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n                    0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,\n                    0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,\n                    0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n                    0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,\n                    0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,\n                    0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n                    0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,\n                    0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            function initQuantTables(sf){\n                    var YQT = [\n                        16, 11, 10, 16, 24, 40, 51, 61,\n                        12, 12, 14, 19, 26, 58, 60, 55,\n                        14, 13, 16, 24, 40, 57, 69, 56,\n                        14, 17, 22, 29, 51, 87, 80, 62,\n                        18, 22, 37, 56, 68,109,103, 77,\n                        24, 35, 55, 64, 81,104,113, 92,\n                        49, 64, 78, 87,103,121,120,101,\n                        72, 92, 95, 98,112,100,103, 99\n                    ];\n    \n                    for (var i = 0; i < 64; i++) {\n                        var t = ffloor((YQT[i]*sf+50)/100);\n                        if (t < 1) {\n                            t = 1;\n                        } else if (t > 255) {\n                            t = 255;\n                        }\n                        YTable[ZigZag[i]] = t;\n                    }\n                    var UVQT = [\n                        17, 18, 24, 47, 99, 99, 99, 99,\n                        18, 21, 26, 66, 99, 99, 99, 99,\n                        24, 26, 56, 99, 99, 99, 99, 99,\n                        47, 66, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99\n                    ];\n                    for (var j = 0; j < 64; j++) {\n                        var u = ffloor((UVQT[j]*sf+50)/100);\n                        if (u < 1) {\n                            u = 1;\n                        } else if (u > 255) {\n                            u = 255;\n                        }\n                        UVTable[ZigZag[j]] = u;\n                    }\n                    var aasf = [\n                        1.0, 1.387039845, 1.306562965, 1.175875602,\n                        1.0, 0.785694958, 0.541196100, 0.275899379\n                    ];\n                    var k = 0;\n                    for (var row = 0; row < 8; row++)\n                    {\n                        for (var col = 0; col < 8; col++)\n                        {\n                            fdtbl_Y[k]  = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            k++;\n                        }\n                    }\n                }\n    \n                function computeHuffmanTbl(nrcodes, std_table){\n                    var codevalue = 0;\n                    var pos_in_table = 0;\n                    var HT = new Array();\n                    for (var k = 1; k <= 16; k++) {\n                        for (var j = 1; j <= nrcodes[k]; j++) {\n                            HT[std_table[pos_in_table]] = [];\n                            HT[std_table[pos_in_table]][0] = codevalue;\n                            HT[std_table[pos_in_table]][1] = k;\n                            pos_in_table++;\n                            codevalue++;\n                        }\n                        codevalue*=2;\n                    }\n                    return HT;\n                }\n    \n                function initHuffmanTbl()\n                {\n                    YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);\n                    UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);\n                    YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);\n                    UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);\n                }\n    \n                function initCategoryNumber()\n                {\n                    var nrlower = 1;\n                    var nrupper = 2;\n                    for (var cat = 1; cat <= 15; cat++) {\n                        //Positive numbers\n                        for (var nr = nrlower; nr<nrupper; nr++) {\n                            category[32767+nr] = cat;\n                            bitcode[32767+nr] = [];\n                            bitcode[32767+nr][1] = cat;\n                            bitcode[32767+nr][0] = nr;\n                        }\n                        //Negative numbers\n                        for (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) {\n                            category[32767+nrneg] = cat;\n                            bitcode[32767+nrneg] = [];\n                            bitcode[32767+nrneg][1] = cat;\n                            bitcode[32767+nrneg][0] = nrupper-1+nrneg;\n                        }\n                        nrlower <<= 1;\n                        nrupper <<= 1;\n                    }\n                }\n    \n                function initRGBYUVTable() {\n                    for(var i = 0; i < 256;i++) {\n                        RGB_YUV_TABLE[i]            =  19595 * i;\n                        RGB_YUV_TABLE[(i+ 256)>>0]  =  38470 * i;\n                        RGB_YUV_TABLE[(i+ 512)>>0]  =   7471 * i + 0x8000;\n                        RGB_YUV_TABLE[(i+ 768)>>0]  = -11059 * i;\n                        RGB_YUV_TABLE[(i+1024)>>0]  = -21709 * i;\n                        RGB_YUV_TABLE[(i+1280)>>0]  =  32768 * i + 0x807FFF;\n                        RGB_YUV_TABLE[(i+1536)>>0]  = -27439 * i;\n                        RGB_YUV_TABLE[(i+1792)>>0]  = - 5329 * i;\n                    }\n                }\n    \n                // IO functions\n                function writeBits(bs)\n                {\n                    var value = bs[0];\n                    var posval = bs[1]-1;\n                    while ( posval >= 0 ) {\n                        if (value & (1 << posval) ) {\n                            bytenew |= (1 << bytepos);\n                        }\n                        posval--;\n                        bytepos--;\n                        if (bytepos < 0) {\n                            if (bytenew == 0xFF) {\n                                writeByte(0xFF);\n                                writeByte(0);\n                            }\n                            else {\n                                writeByte(bytenew);\n                            }\n                            bytepos=7;\n                            bytenew=0;\n                        }\n                    }\n                }\n    \n                function writeByte(value)\n                {\n                    byteout.push(clt[value]); // write char directly instead of converting later\n                }\n    \n                function writeWord(value)\n                {\n                    writeByte((value>>8)&0xFF);\n                    writeByte((value   )&0xFF);\n                }\n    \n                // DCT & quantization core\n                function fDCTQuant(data, fdtbl)\n                {\n                    var d0, d1, d2, d3, d4, d5, d6, d7;\n                    /* Pass 1: process rows. */\n                    var dataOff=0;\n                    var i;\n                    var I8 = 8;\n                    var I64 = 64;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff+1];\n                        d2 = data[dataOff+2];\n                        d3 = data[dataOff+3];\n                        d4 = data[dataOff+4];\n                        d5 = data[dataOff+5];\n                        d6 = data[dataOff+6];\n                        d7 = data[dataOff+7];\n    \n                        var tmp0 = d0 + d7;\n                        var tmp7 = d0 - d7;\n                        var tmp1 = d1 + d6;\n                        var tmp6 = d1 - d6;\n                        var tmp2 = d2 + d5;\n                        var tmp5 = d2 - d5;\n                        var tmp3 = d3 + d4;\n                        var tmp4 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10 = tmp0 + tmp3;    /* phase 2 */\n                        var tmp13 = tmp0 - tmp3;\n                        var tmp11 = tmp1 + tmp2;\n                        var tmp12 = tmp1 - tmp2;\n    \n                        data[dataOff] = tmp10 + tmp11; /* phase 3 */\n                        data[dataOff+4] = tmp10 - tmp11;\n    \n                        var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n                        data[dataOff+2] = tmp13 + z1; /* phase 5 */\n                        data[dataOff+6] = tmp13 - z1;\n    \n                        /* Odd part */\n                        tmp10 = tmp4 + tmp5; /* phase 2 */\n                        tmp11 = tmp5 + tmp6;\n                        tmp12 = tmp6 + tmp7;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n                        var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */\n                        var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n                        var z3 = tmp11 * 0.707106781; /* c4 */\n    \n                        var z11 = tmp7 + z3;    /* phase 5 */\n                        var z13 = tmp7 - z3;\n    \n                        data[dataOff+5] = z13 + z2; /* phase 6 */\n                        data[dataOff+3] = z13 - z2;\n                        data[dataOff+1] = z11 + z4;\n                        data[dataOff+7] = z11 - z4;\n    \n                        dataOff += 8; /* advance pointer to next row */\n                    }\n    \n                    /* Pass 2: process columns. */\n                    dataOff = 0;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff + 8];\n                        d2 = data[dataOff + 16];\n                        d3 = data[dataOff + 24];\n                        d4 = data[dataOff + 32];\n                        d5 = data[dataOff + 40];\n                        d6 = data[dataOff + 48];\n                        d7 = data[dataOff + 56];\n    \n                        var tmp0p2 = d0 + d7;\n                        var tmp7p2 = d0 - d7;\n                        var tmp1p2 = d1 + d6;\n                        var tmp6p2 = d1 - d6;\n                        var tmp2p2 = d2 + d5;\n                        var tmp5p2 = d2 - d5;\n                        var tmp3p2 = d3 + d4;\n                        var tmp4p2 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10p2 = tmp0p2 + tmp3p2;  /* phase 2 */\n                        var tmp13p2 = tmp0p2 - tmp3p2;\n                        var tmp11p2 = tmp1p2 + tmp2p2;\n                        var tmp12p2 = tmp1p2 - tmp2p2;\n    \n                        data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n                        data[dataOff+32] = tmp10p2 - tmp11p2;\n    \n                        var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n                        data[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */\n                        data[dataOff+48] = tmp13p2 - z1p2;\n    \n                        /* Odd part */\n                        tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n                        tmp11p2 = tmp5p2 + tmp6p2;\n                        tmp12p2 = tmp6p2 + tmp7p2;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n                        var z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */\n                        var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n                        var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n    \n                        var z11p2 = tmp7p2 + z3p2;  /* phase 5 */\n                        var z13p2 = tmp7p2 - z3p2;\n    \n                        data[dataOff+40] = z13p2 + z2p2; /* phase 6 */\n                        data[dataOff+24] = z13p2 - z2p2;\n                        data[dataOff+ 8] = z11p2 + z4p2;\n                        data[dataOff+56] = z11p2 - z4p2;\n    \n                        dataOff++; /* advance pointer to next column */\n                    }\n    \n                    // Quantize/descale the coefficients\n                    var fDCTQuant;\n                    for (i=0; i<I64; ++i)\n                    {\n                        // Apply the quantization and scaling factor & Round to nearest integer\n                        fDCTQuant = data[i]*fdtbl[i];\n                        outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0);\n                        //outputfDCTQuant[i] = fround(fDCTQuant);\n    \n                    }\n                    return outputfDCTQuant;\n                }\n    \n                function writeAPP0()\n                {\n                    writeWord(0xFFE0); // marker\n                    writeWord(16); // length\n                    writeByte(0x4A); // J\n                    writeByte(0x46); // F\n                    writeByte(0x49); // I\n                    writeByte(0x46); // F\n                    writeByte(0); // = \"JFIF\",'\\0'\n                    writeByte(1); // versionhi\n                    writeByte(1); // versionlo\n                    writeByte(0); // xyunits\n                    writeWord(1); // xdensity\n                    writeWord(1); // ydensity\n                    writeByte(0); // thumbnwidth\n                    writeByte(0); // thumbnheight\n                }\n    \n                function writeSOF0(width, height)\n                {\n                    writeWord(0xFFC0); // marker\n                    writeWord(17);   // length, truecolor YUV JPG\n                    writeByte(8);    // precision\n                    writeWord(height);\n                    writeWord(width);\n                    writeByte(3);    // nrofcomponents\n                    writeByte(1);    // IdY\n                    writeByte(0x11); // HVY\n                    writeByte(0);    // QTY\n                    writeByte(2);    // IdU\n                    writeByte(0x11); // HVU\n                    writeByte(1);    // QTU\n                    writeByte(3);    // IdV\n                    writeByte(0x11); // HVV\n                    writeByte(1);    // QTV\n                }\n    \n                function writeDQT()\n                {\n                    writeWord(0xFFDB); // marker\n                    writeWord(132);    // length\n                    writeByte(0);\n                    for (var i=0; i<64; i++) {\n                        writeByte(YTable[i]);\n                    }\n                    writeByte(1);\n                    for (var j=0; j<64; j++) {\n                        writeByte(UVTable[j]);\n                    }\n                }\n    \n                function writeDHT()\n                {\n                    writeWord(0xFFC4); // marker\n                    writeWord(0x01A2); // length\n    \n                    writeByte(0); // HTYDCinfo\n                    for (var i=0; i<16; i++) {\n                        writeByte(std_dc_luminance_nrcodes[i+1]);\n                    }\n                    for (var j=0; j<=11; j++) {\n                        writeByte(std_dc_luminance_values[j]);\n                    }\n    \n                    writeByte(0x10); // HTYACinfo\n                    for (var k=0; k<16; k++) {\n                        writeByte(std_ac_luminance_nrcodes[k+1]);\n                    }\n                    for (var l=0; l<=161; l++) {\n                        writeByte(std_ac_luminance_values[l]);\n                    }\n    \n                    writeByte(1); // HTUDCinfo\n                    for (var m=0; m<16; m++) {\n                        writeByte(std_dc_chrominance_nrcodes[m+1]);\n                    }\n                    for (var n=0; n<=11; n++) {\n                        writeByte(std_dc_chrominance_values[n]);\n                    }\n    \n                    writeByte(0x11); // HTUACinfo\n                    for (var o=0; o<16; o++) {\n                        writeByte(std_ac_chrominance_nrcodes[o+1]);\n                    }\n                    for (var p=0; p<=161; p++) {\n                        writeByte(std_ac_chrominance_values[p]);\n                    }\n                }\n    \n                function writeSOS()\n                {\n                    writeWord(0xFFDA); // marker\n                    writeWord(12); // length\n                    writeByte(3); // nrofcomponents\n                    writeByte(1); // IdY\n                    writeByte(0); // HTY\n                    writeByte(2); // IdU\n                    writeByte(0x11); // HTU\n                    writeByte(3); // IdV\n                    writeByte(0x11); // HTV\n                    writeByte(0); // Ss\n                    writeByte(0x3f); // Se\n                    writeByte(0); // Bf\n                }\n    \n                function processDU(CDU, fdtbl, DC, HTDC, HTAC){\n                    var EOB = HTAC[0x00];\n                    var M16zeroes = HTAC[0xF0];\n                    var pos;\n                    var I16 = 16;\n                    var I63 = 63;\n                    var I64 = 64;\n                    var DU_DCT = fDCTQuant(CDU, fdtbl);\n                    //ZigZag reorder\n                    for (var j=0;j<I64;++j) {\n                        DU[ZigZag[j]]=DU_DCT[j];\n                    }\n                    var Diff = DU[0] - DC; DC = DU[0];\n                    //Encode DC\n                    if (Diff==0) {\n                        writeBits(HTDC[0]); // Diff might be 0\n                    } else {\n                        pos = 32767+Diff;\n                        writeBits(HTDC[category[pos]]);\n                        writeBits(bitcode[pos]);\n                    }\n                    //Encode ACs\n                    var end0pos = 63; // was const... which is crazy\n                    for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {};\n                    //end0pos = first element in reverse order !=0\n                    if ( end0pos == 0) {\n                        writeBits(EOB);\n                        return DC;\n                    }\n                    var i = 1;\n                    var lng;\n                    while ( i <= end0pos ) {\n                        var startpos = i;\n                        for (; (DU[i]==0) && (i<=end0pos); ++i) {}\n                        var nrzeroes = i-startpos;\n                        if ( nrzeroes >= I16 ) {\n                            lng = nrzeroes>>4;\n                            for (var nrmarker=1; nrmarker <= lng; ++nrmarker)\n                                writeBits(M16zeroes);\n                            nrzeroes = nrzeroes&0xF;\n                        }\n                        pos = 32767+DU[i];\n                        writeBits(HTAC[(nrzeroes<<4)+category[pos]]);\n                        writeBits(bitcode[pos]);\n                        i++;\n                    }\n                    if ( end0pos != I63 ) {\n                        writeBits(EOB);\n                    }\n                    return DC;\n                }\n    \n                function initCharLookupTable(){\n                    var sfcc = String.fromCharCode;\n                    for(var i=0; i < 256; i++){ ///// ACHTUNG // 255\n                        clt[i] = sfcc(i);\n                    }\n                }\n    \n                this.encode = function(image,quality) // image data object\n                {\n                    // var time_start = new Date().getTime();\n    \n                    if(quality) setQuality(quality);\n    \n                    // Initialize bit writer\n                    byteout = new Array();\n                    bytenew=0;\n                    bytepos=7;\n    \n                    // Add JPEG headers\n                    writeWord(0xFFD8); // SOI\n                    writeAPP0();\n                    writeDQT();\n                    writeSOF0(image.width,image.height);\n                    writeDHT();\n                    writeSOS();\n    \n    \n                    // Encode 8x8 macroblocks\n                    var DCY=0;\n                    var DCU=0;\n                    var DCV=0;\n    \n                    bytenew=0;\n                    bytepos=7;\n    \n    \n                    this.encode.displayName = \"_encode_\";\n    \n                    var imageData = image.data;\n                    var width = image.width;\n                    var height = image.height;\n    \n                    var quadWidth = width*4;\n                    var tripleWidth = width*3;\n    \n                    var x, y = 0;\n                    var r, g, b;\n                    var start,p, col,row,pos;\n                    while(y < height){\n                        x = 0;\n                        while(x < quadWidth){\n                        start = quadWidth * y + x;\n                        p = start;\n                        col = -1;\n                        row = 0;\n    \n                        for(pos=0; pos < 64; pos++){\n                            row = pos >> 3;// /8\n                            col = ( pos & 7 ) * 4; // %8\n                            p = start + ( row * quadWidth ) + col;\n    \n                            if(y+row >= height){ // padding bottom\n                                p-= (quadWidth*(y+1+row-height));\n                            }\n    \n                            if(x+col >= quadWidth){ // padding right\n                                p-= ((x+col) - quadWidth +4)\n                            }\n    \n                            r = imageData[ p++ ];\n                            g = imageData[ p++ ];\n                            b = imageData[ p++ ];\n    \n    \n                            /* // calculate YUV values dynamically\n                            YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n                            UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n                            VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n                            */\n    \n                            // use lookup table (slightly faster)\n                            YDU[pos] = ((RGB_YUV_TABLE[r]             + RGB_YUV_TABLE[(g +  256)>>0] + RGB_YUV_TABLE[(b +  512)>>0]) >> 16)-128;\n                            UDU[pos] = ((RGB_YUV_TABLE[(r +  768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128;\n                            VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128;\n    \n                        }\n    \n                        DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n                        DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n                        DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n                        x+=32;\n                        }\n                        y+=8;\n                    }\n    \n    \n                    ////////////////////////////////////////////////////////////////\n    \n                    // Do the bit alignment of the EOI marker\n                    if ( bytepos >= 0 ) {\n                        var fillbits = [];\n                        fillbits[1] = bytepos+1;\n                        fillbits[0] = (1<<(bytepos+1))-1;\n                        writeBits(fillbits);\n                    }\n    \n                    writeWord(0xFFD9); //EOI\n    \n                    var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join(''));\n    \n                    byteout = [];\n    \n                    // benchmarking\n                    // var duration = new Date().getTime() - time_start;\n                    // console.log('Encoding time: '+ currentQuality + 'ms');\n                    //\n    \n                    return jpegDataUri\n            }\n    \n            function setQuality(quality){\n                if (quality <= 0) {\n                    quality = 1;\n                }\n                if (quality > 100) {\n                    quality = 100;\n                }\n    \n                if(currentQuality == quality) return // don't recalc if unchanged\n    \n                var sf = 0;\n                if (quality < 50) {\n                    sf = Math.floor(5000 / quality);\n                } else {\n                    sf = Math.floor(200 - quality*2);\n                }\n    \n                initQuantTables(sf);\n                currentQuality = quality;\n                // console.log('Quality set to: '+quality +'%');\n            }\n    \n            function init(){\n                // var time_start = new Date().getTime();\n                if(!quality) quality = 50;\n                // Create tables\n                initCharLookupTable()\n                initHuffmanTbl();\n                initCategoryNumber();\n                initRGBYUVTable();\n    \n                setQuality(quality);\n                // var duration = new Date().getTime() - time_start;\n                // console.log('Initialization '+ duration + 'ms');\n            }\n    \n            init();\n    \n        };\n    \n        JPEGEncoder.encode = function( data, quality ) {\n            var encoder = new JPEGEncoder( quality );\n    \n            return encoder.encode( data );\n        }\n    \n        return JPEGEncoder;\n    });\n    /**\n     * @fileOverview Fix android canvas.toDataUrl bug.\n     */\n    define('runtime/html5/androidpatch',[\n        'runtime/html5/util',\n        'runtime/html5/jpegencoder',\n        'base'\n    ], function( Util, encoder, Base ) {\n        var origin = Util.canvasToDataUrl,\n            supportJpeg;\n    \n        Util.canvasToDataUrl = function( canvas, type, quality ) {\n            var ctx, w, h, fragement, parts;\n    \n            // 非android手机直接跳过。\n            if ( !Base.os.android ) {\n                return origin.apply( null, arguments );\n            }\n    \n            // 检测是否canvas支持jpeg导出，根据数据格式来判断。\n            // JPEG 前两位分别是：255, 216\n            if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) {\n                fragement = origin.apply( null, arguments );\n    \n                parts = fragement.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    fragement = atob( parts[ 1 ] );\n                } else {\n                    fragement = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                fragement = fragement.substring( 0, 2 );\n    \n                supportJpeg = fragement.charCodeAt( 0 ) === 255 &&\n                        fragement.charCodeAt( 1 ) === 216;\n            }\n    \n            // 只有在android环境下才修复\n            if ( type === 'image/jpeg' && !supportJpeg ) {\n                w = canvas.width;\n                h = canvas.height;\n                ctx = canvas.getContext('2d');\n    \n                return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality );\n            }\n    \n            return origin.apply( null, arguments );\n        };\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('runtime/html5/image',[\n        'base',\n        'runtime/html5/runtime',\n        'runtime/html5/util'\n    ], function( Base, Html5Runtime, Util ) {\n    \n        var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';\n    \n        return Html5Runtime.register( 'Image', {\n    \n            // flag: 标记是否被修改过。\n            modified: false,\n    \n            init: function() {\n                var me = this,\n                    img = new Image();\n    \n                img.onload = function() {\n    \n                    me._info = {\n                        type: me.type,\n                        width: this.width,\n                        height: this.height\n                    };\n    \n                    // 读取meta信息。\n                    if ( !me._metas && 'image/jpeg' === me.type ) {\n                        Util.parseMeta( me._blob, function( error, ret ) {\n                            me._metas = ret;\n                            me.owner.trigger('load');\n                        });\n                    } else {\n                        me.owner.trigger('load');\n                    }\n                };\n    \n                img.onerror = function() {\n                    me.owner.trigger('error');\n                };\n    \n                me._img = img;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    img = me._img;\n    \n                me._blob = blob;\n                me.type = blob.type;\n                img.src = Util.createObjectURL( blob.getSource() );\n                me.owner.once( 'load', function() {\n                    Util.revokeObjectURL( img.src );\n                });\n            },\n    \n            resize: function( width, height ) {\n                var canvas = this._canvas ||\n                        (this._canvas = document.createElement('canvas'));\n    \n                this._resize( this._img, canvas, width, height );\n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger( 'complete', 'resize' );\n            },\n    \n            crop: function( x, y, w, h, s ) {\n                var cvs = this._canvas ||\n                        (this._canvas = document.createElement('canvas')),\n                    opts = this.options,\n                    img = this._img,\n                    iw = img.naturalWidth,\n                    ih = img.naturalHeight,\n                    orientation = this.getOrientation();\n    \n                s = s || 1;\n    \n                // todo 解决 orientation 的问题。\n                // values that require 90 degree rotation\n                // if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                //     switch ( orientation ) {\n                //         case 6:\n                //             tmp = x;\n                //             x = y;\n                //             y = iw * s - tmp - w;\n                //             console.log(ih * s, tmp, w)\n                //             break;\n                //     }\n    \n                //     (w ^= h, h ^= w, w ^= h);\n                // }\n    \n                cvs.width = w;\n                cvs.height = h;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n                this._renderImageToCanvas( cvs, img, -x, -y, iw * s, ih * s );\n    \n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger( 'complete', 'crop' );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this._blob,\n                    opts = this.options,\n                    canvas;\n    \n                type = type || this.type;\n    \n                // blob需要重新生成。\n                if ( this.modified || this.type !== type ) {\n                    canvas = this._canvas;\n    \n                    if ( type === 'image/jpeg' ) {\n    \n                        blob = Util.canvasToDataUrl( canvas, type, opts.quality );\n    \n                        if ( opts.preserveHeaders && this._metas &&\n                                this._metas.imageHead ) {\n    \n                            blob = Util.dataURL2ArrayBuffer( blob );\n                            blob = Util.updateImageHead( blob,\n                                    this._metas.imageHead );\n                            blob = Util.arrayBufferToBlob( blob, type );\n                            return blob;\n                        }\n                    } else {\n                        blob = Util.canvasToDataUrl( canvas, type );\n                    }\n    \n                    blob = Util.dataURL2Blob( blob );\n                }\n    \n                return blob;\n            },\n    \n            getAsDataUrl: function( type ) {\n                var opts = this.options;\n    \n                type = type || this.type;\n    \n                if ( type === 'image/jpeg' ) {\n                    return Util.canvasToDataUrl( this._canvas, type, opts.quality );\n                } else {\n                    return this._canvas.toDataURL( type );\n                }\n            },\n    \n            getOrientation: function() {\n                return this._metas && this._metas.exif &&\n                        this._metas.exif.get('Orientation') || 1;\n            },\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            destroy: function() {\n                var canvas = this._canvas;\n                this._img.onload = null;\n    \n                if ( canvas ) {\n                    canvas.getContext('2d')\n                            .clearRect( 0, 0, canvas.width, canvas.height );\n                    canvas.width = canvas.height = 0;\n                    this._canvas = null;\n                }\n    \n                // 释放内存。非常重要，否则释放不了image的内存。\n                this._img.src = BLANK;\n                this._img = this._blob = null;\n            },\n    \n            _resize: function( img, cvs, width, height ) {\n                var opts = this.options,\n                    naturalWidth = img.width,\n                    naturalHeight = img.height,\n                    orientation = this.getOrientation(),\n                    scale, w, h, x, y;\n    \n                // values that require 90 degree rotation\n                if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                    // 交换width, height的值。\n                    width ^= height;\n                    height ^= width;\n                    width ^= height;\n                }\n    \n                scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth,\n                        height / naturalHeight );\n    \n                // 不允许放大。\n                opts.allowMagnify || (scale = Math.min( 1, scale ));\n    \n                w = naturalWidth * scale;\n                h = naturalHeight * scale;\n    \n                if ( opts.crop ) {\n                    cvs.width = width;\n                    cvs.height = height;\n                } else {\n                    cvs.width = w;\n                    cvs.height = h;\n                }\n    \n                x = (cvs.width - w) / 2;\n                y = (cvs.height - h) / 2;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n    \n                this._renderImageToCanvas( cvs, img, x, y, w, h );\n            },\n    \n            _rotate2Orientaion: function( canvas, orientation ) {\n                var width = canvas.width,\n                    height = canvas.height,\n                    ctx = canvas.getContext('2d');\n    \n                switch ( orientation ) {\n                    case 5:\n                    case 6:\n                    case 7:\n                    case 8:\n                        canvas.width = height;\n                        canvas.height = width;\n                        break;\n                }\n    \n                switch ( orientation ) {\n                    case 2:    // horizontal flip\n                        ctx.translate( width, 0 );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 3:    // 180 rotate left\n                        ctx.translate( width, height );\n                        ctx.rotate( Math.PI );\n                        break;\n    \n                    case 4:    // vertical flip\n                        ctx.translate( 0, height );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 5:    // vertical flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 6:    // 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( 0, -height );\n                        break;\n    \n                    case 7:    // horizontal flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( width, -height );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 8:    // 90 rotate left\n                        ctx.rotate( -0.5 * Math.PI );\n                        ctx.translate( -width, 0 );\n                        break;\n                }\n            },\n    \n            // https://github.com/stomita/ios-imagefile-megapixel/\n            // blob/master/src/megapix-image.js\n            _renderImageToCanvas: (function() {\n    \n                // 如果不是ios, 不需要这么复杂！\n                if ( !Base.os.ios ) {\n                    return function( canvas ) {\n                        var args = Base.slice( arguments, 1 ),\n                            ctx = canvas.getContext('2d');\n    \n                        ctx.drawImage.apply( ctx, args );\n                    };\n                }\n    \n                /**\n                 * Detecting vertical squash in loaded image.\n                 * Fixes a bug which squash image vertically while drawing into\n                 * canvas for some images.\n                 */\n                function detectVerticalSquash( img, iw, ih ) {\n                    var canvas = document.createElement('canvas'),\n                        ctx = canvas.getContext('2d'),\n                        sy = 0,\n                        ey = ih,\n                        py = ih,\n                        data, alpha, ratio;\n    \n    \n                    canvas.width = 1;\n                    canvas.height = ih;\n                    ctx.drawImage( img, 0, 0 );\n                    data = ctx.getImageData( 0, 0, 1, ih ).data;\n    \n                    // search image edge pixel position in case\n                    // it is squashed vertically.\n                    while ( py > sy ) {\n                        alpha = data[ (py - 1) * 4 + 3 ];\n    \n                        if ( alpha === 0 ) {\n                            ey = py;\n                        } else {\n                            sy = py;\n                        }\n    \n                        py = (ey + sy) >> 1;\n                    }\n    \n                    ratio = (py / ih);\n                    return (ratio === 0) ? 1 : ratio;\n                }\n    \n                // fix ie7 bug\n                // http://stackoverflow.com/questions/11929099/\n                // html5-canvas-drawimage-ratio-bug-ios\n                if ( Base.os.ios >= 7 ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        var iw = img.naturalWidth,\n                            ih = img.naturalHeight,\n                            vertSquashRatio = detectVerticalSquash( img, iw, ih );\n    \n                        return canvas.getContext('2d').drawImage( img, 0, 0,\n                                iw * vertSquashRatio, ih * vertSquashRatio,\n                                x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detect subsampling in loaded image.\n                 * In iOS, larger images than 2M pixels may be\n                 * subsampled in rendering.\n                 */\n                function detectSubsampling( img ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        canvas, ctx;\n    \n                    // subsampling may happen overmegapixel image\n                    if ( iw * ih > 1024 * 1024 ) {\n                        canvas = document.createElement('canvas');\n                        canvas.width = canvas.height = 1;\n                        ctx = canvas.getContext('2d');\n                        ctx.drawImage( img, -iw + 1, 0 );\n    \n                        // subsampled image becomes half smaller in rendering size.\n                        // check alpha channel value to confirm image is covering\n                        // edge pixel or not. if alpha value is 0\n                        // image is not covering, hence subsampled.\n                        return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0;\n                    } else {\n                        return false;\n                    }\n                }\n    \n    \n                return function( canvas, img, x, y, width, height ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        ctx = canvas.getContext('2d'),\n                        subsampled = detectSubsampling( img ),\n                        doSquash = this.type === 'image/jpeg',\n                        d = 1024,\n                        sy = 0,\n                        dy = 0,\n                        tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx;\n    \n                    if ( subsampled ) {\n                        iw /= 2;\n                        ih /= 2;\n                    }\n    \n                    ctx.save();\n                    tmpCanvas = document.createElement('canvas');\n                    tmpCanvas.width = tmpCanvas.height = d;\n    \n                    tmpCtx = tmpCanvas.getContext('2d');\n                    vertSquashRatio = doSquash ?\n                            detectVerticalSquash( img, iw, ih ) : 1;\n    \n                    dw = Math.ceil( d * width / iw );\n                    dh = Math.ceil( d * height / ih / vertSquashRatio );\n    \n                    while ( sy < ih ) {\n                        sx = 0;\n                        dx = 0;\n                        while ( sx < iw ) {\n                            tmpCtx.clearRect( 0, 0, d, d );\n                            tmpCtx.drawImage( img, -sx, -sy );\n                            ctx.drawImage( tmpCanvas, 0, 0, d, d,\n                                    x + dx, y + dy, dw, dh );\n                            sx += d;\n                            dx += dw;\n                        }\n                        sy += d;\n                        dy += dh;\n                    }\n                    ctx.restore();\n                    tmpCanvas = tmpCtx = null;\n                };\n            })()\n        });\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    // 强制设置成 content-type 为文件流。\n                    xhr.overrideMimeType &&\n                            xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/html5/md5',[\n        'runtime/html5/runtime'\n    ], function( FlashRuntime ) {\n    \n        /*\n         * Fastest md5 implementation around (JKM md5)\n         * Credits: Joseph Myers\n         *\n         * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n         * @see http://jsperf.com/md5-shootout/7\n         */\n    \n        /* this function is much faster,\n          so if possible we use it. Some IEs\n          are the only ones I know of that\n          need the idiotic second function,\n          generated by an if clause.  */\n        var add32 = function (a, b) {\n            return (a + b) & 0xFFFFFFFF;\n        },\n    \n        cmn = function (q, a, b, x, s, t) {\n            a = add32(add32(a, q), add32(x, t));\n            return add32((a << s) | (a >>> (32 - s)), b);\n        },\n    \n        ff = function (a, b, c, d, x, s, t) {\n            return cmn((b & c) | ((~b) & d), a, b, x, s, t);\n        },\n    \n        gg = function (a, b, c, d, x, s, t) {\n            return cmn((b & d) | (c & (~d)), a, b, x, s, t);\n        },\n    \n        hh = function (a, b, c, d, x, s, t) {\n            return cmn(b ^ c ^ d, a, b, x, s, t);\n        },\n    \n        ii = function (a, b, c, d, x, s, t) {\n            return cmn(c ^ (b | (~d)), a, b, x, s, t);\n        },\n    \n        md5cycle = function (x, k) {\n            var a = x[0],\n                b = x[1],\n                c = x[2],\n                d = x[3];\n    \n            a = ff(a, b, c, d, k[0], 7, -680876936);\n            d = ff(d, a, b, c, k[1], 12, -389564586);\n            c = ff(c, d, a, b, k[2], 17, 606105819);\n            b = ff(b, c, d, a, k[3], 22, -1044525330);\n            a = ff(a, b, c, d, k[4], 7, -176418897);\n            d = ff(d, a, b, c, k[5], 12, 1200080426);\n            c = ff(c, d, a, b, k[6], 17, -1473231341);\n            b = ff(b, c, d, a, k[7], 22, -45705983);\n            a = ff(a, b, c, d, k[8], 7, 1770035416);\n            d = ff(d, a, b, c, k[9], 12, -1958414417);\n            c = ff(c, d, a, b, k[10], 17, -42063);\n            b = ff(b, c, d, a, k[11], 22, -1990404162);\n            a = ff(a, b, c, d, k[12], 7, 1804603682);\n            d = ff(d, a, b, c, k[13], 12, -40341101);\n            c = ff(c, d, a, b, k[14], 17, -1502002290);\n            b = ff(b, c, d, a, k[15], 22, 1236535329);\n    \n            a = gg(a, b, c, d, k[1], 5, -165796510);\n            d = gg(d, a, b, c, k[6], 9, -1069501632);\n            c = gg(c, d, a, b, k[11], 14, 643717713);\n            b = gg(b, c, d, a, k[0], 20, -373897302);\n            a = gg(a, b, c, d, k[5], 5, -701558691);\n            d = gg(d, a, b, c, k[10], 9, 38016083);\n            c = gg(c, d, a, b, k[15], 14, -660478335);\n            b = gg(b, c, d, a, k[4], 20, -405537848);\n            a = gg(a, b, c, d, k[9], 5, 568446438);\n            d = gg(d, a, b, c, k[14], 9, -1019803690);\n            c = gg(c, d, a, b, k[3], 14, -187363961);\n            b = gg(b, c, d, a, k[8], 20, 1163531501);\n            a = gg(a, b, c, d, k[13], 5, -1444681467);\n            d = gg(d, a, b, c, k[2], 9, -51403784);\n            c = gg(c, d, a, b, k[7], 14, 1735328473);\n            b = gg(b, c, d, a, k[12], 20, -1926607734);\n    \n            a = hh(a, b, c, d, k[5], 4, -378558);\n            d = hh(d, a, b, c, k[8], 11, -2022574463);\n            c = hh(c, d, a, b, k[11], 16, 1839030562);\n            b = hh(b, c, d, a, k[14], 23, -35309556);\n            a = hh(a, b, c, d, k[1], 4, -1530992060);\n            d = hh(d, a, b, c, k[4], 11, 1272893353);\n            c = hh(c, d, a, b, k[7], 16, -155497632);\n            b = hh(b, c, d, a, k[10], 23, -1094730640);\n            a = hh(a, b, c, d, k[13], 4, 681279174);\n            d = hh(d, a, b, c, k[0], 11, -358537222);\n            c = hh(c, d, a, b, k[3], 16, -722521979);\n            b = hh(b, c, d, a, k[6], 23, 76029189);\n            a = hh(a, b, c, d, k[9], 4, -640364487);\n            d = hh(d, a, b, c, k[12], 11, -421815835);\n            c = hh(c, d, a, b, k[15], 16, 530742520);\n            b = hh(b, c, d, a, k[2], 23, -995338651);\n    \n            a = ii(a, b, c, d, k[0], 6, -198630844);\n            d = ii(d, a, b, c, k[7], 10, 1126891415);\n            c = ii(c, d, a, b, k[14], 15, -1416354905);\n            b = ii(b, c, d, a, k[5], 21, -57434055);\n            a = ii(a, b, c, d, k[12], 6, 1700485571);\n            d = ii(d, a, b, c, k[3], 10, -1894986606);\n            c = ii(c, d, a, b, k[10], 15, -1051523);\n            b = ii(b, c, d, a, k[1], 21, -2054922799);\n            a = ii(a, b, c, d, k[8], 6, 1873313359);\n            d = ii(d, a, b, c, k[15], 10, -30611744);\n            c = ii(c, d, a, b, k[6], 15, -1560198380);\n            b = ii(b, c, d, a, k[13], 21, 1309151649);\n            a = ii(a, b, c, d, k[4], 6, -145523070);\n            d = ii(d, a, b, c, k[11], 10, -1120210379);\n            c = ii(c, d, a, b, k[2], 15, 718787259);\n            b = ii(b, c, d, a, k[9], 21, -343485551);\n    \n            x[0] = add32(a, x[0]);\n            x[1] = add32(b, x[1]);\n            x[2] = add32(c, x[2]);\n            x[3] = add32(d, x[3]);\n        },\n    \n        /* there needs to be support for Unicode here,\n           * unless we pretend that we can redefine the MD-5\n           * algorithm for multi-byte characters (perhaps\n           * by adding every four 16-bit characters and\n           * shortening the sum to 32 bits). Otherwise\n           * I suggest performing MD-5 as if every character\n           * was two bytes--e.g., 0040 0025 = @%--but then\n           * how will an ordinary MD-5 sum be matched?\n           * There is no way to standardize text to something\n           * like UTF-8 before transformation; speed cost is\n           * utterly prohibitive. The JavaScript standard\n           * itself needs to look at this: it should start\n           * providing access to strings as preformed UTF-8\n           * 8-bit unsigned value arrays.\n           */\n        md5blk = function (s) {\n            var md5blks = [],\n                i; /* Andy King said do it this way. */\n    \n            for (i = 0; i < 64; i += 4) {\n                md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n            }\n            return md5blks;\n        },\n    \n        md5blk_array = function (a) {\n            var md5blks = [],\n                i; /* Andy King said do it this way. */\n    \n            for (i = 0; i < 64; i += 4) {\n                md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n            }\n            return md5blks;\n        },\n    \n        md51 = function (s) {\n            var n = s.length,\n                state = [1732584193, -271733879, -1732584194, 271733878],\n                i,\n                length,\n                tail,\n                tmp,\n                lo,\n                hi;\n    \n            for (i = 64; i <= n; i += 64) {\n                md5cycle(state, md5blk(s.substring(i - 64, i)));\n            }\n            s = s.substring(i - 64);\n            length = s.length;\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n            }\n            tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n            if (i > 55) {\n                md5cycle(state, tail);\n                for (i = 0; i < 16; i += 1) {\n                    tail[i] = 0;\n                }\n            }\n    \n            // Beware that the final length might not fit in 32 bits so we take care of that\n            tmp = n * 8;\n            tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n            lo = parseInt(tmp[2], 16);\n            hi = parseInt(tmp[1], 16) || 0;\n    \n            tail[14] = lo;\n            tail[15] = hi;\n    \n            md5cycle(state, tail);\n            return state;\n        },\n    \n        md51_array = function (a) {\n            var n = a.length,\n                state = [1732584193, -271733879, -1732584194, 271733878],\n                i,\n                length,\n                tail,\n                tmp,\n                lo,\n                hi;\n    \n            for (i = 64; i <= n; i += 64) {\n                md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n            }\n    \n            // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n            // containing the last element of the parent array if the sub array specified starts\n            // beyond the length of the parent array - weird.\n            // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n            a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n    \n            length = a.length;\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= a[i] << ((i % 4) << 3);\n            }\n    \n            tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n            if (i > 55) {\n                md5cycle(state, tail);\n                for (i = 0; i < 16; i += 1) {\n                    tail[i] = 0;\n                }\n            }\n    \n            // Beware that the final length might not fit in 32 bits so we take care of that\n            tmp = n * 8;\n            tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n            lo = parseInt(tmp[2], 16);\n            hi = parseInt(tmp[1], 16) || 0;\n    \n            tail[14] = lo;\n            tail[15] = hi;\n    \n            md5cycle(state, tail);\n    \n            return state;\n        },\n    \n        hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'],\n    \n        rhex = function (n) {\n            var s = '',\n                j;\n            for (j = 0; j < 4; j += 1) {\n                s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n            }\n            return s;\n        },\n    \n        hex = function (x) {\n            var i;\n            for (i = 0; i < x.length; i += 1) {\n                x[i] = rhex(x[i]);\n            }\n            return x.join('');\n        },\n    \n        md5 = function (s) {\n            return hex(md51(s));\n        },\n    \n    \n    \n        ////////////////////////////////////////////////////////////////////////////\n    \n        /**\n         * SparkMD5 OOP implementation.\n         *\n         * Use this class to perform an incremental md5, otherwise use the\n         * static methods instead.\n         */\n        SparkMD5 = function () {\n            // call reset to init the instance\n            this.reset();\n        };\n    \n    \n        // In some cases the fast add32 function cannot be used..\n        if (md5('hello') !== '5d41402abc4b2a76b9719d911017c592') {\n            add32 = function (x, y) {\n                var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n                    msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n                return (msw << 16) | (lsw & 0xFFFF);\n            };\n        }\n    \n    \n        /**\n         * Appends a string.\n         * A conversion will be applied if an utf8 string is detected.\n         *\n         * @param {String} str The string to be appended\n         *\n         * @return {SparkMD5} The instance itself\n         */\n        SparkMD5.prototype.append = function (str) {\n            // converts the string to utf8 bytes if necessary\n            if (/[\\u0080-\\uFFFF]/.test(str)) {\n                str = unescape(encodeURIComponent(str));\n            }\n    \n            // then append as binary\n            this.appendBinary(str);\n    \n            return this;\n        };\n    \n        /**\n         * Appends a binary string.\n         *\n         * @param {String} contents The binary string to be appended\n         *\n         * @return {SparkMD5} The instance itself\n         */\n        SparkMD5.prototype.appendBinary = function (contents) {\n            this._buff += contents;\n            this._length += contents.length;\n    \n            var length = this._buff.length,\n                i;\n    \n            for (i = 64; i <= length; i += 64) {\n                md5cycle(this._state, md5blk(this._buff.substring(i - 64, i)));\n            }\n    \n            this._buff = this._buff.substr(i - 64);\n    \n            return this;\n        };\n    \n        /**\n         * Finishes the incremental computation, reseting the internal state and\n         * returning the result.\n         * Use the raw parameter to obtain the raw result instead of the hex one.\n         *\n         * @param {Boolean} raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.prototype.end = function (raw) {\n            var buff = this._buff,\n                length = buff.length,\n                i,\n                tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                ret;\n    \n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n            }\n    \n            this._finish(tail, length);\n            ret = !!raw ? this._state : hex(this._state);\n    \n            this.reset();\n    \n            return ret;\n        };\n    \n        /**\n         * Finish the final calculation based on the tail.\n         *\n         * @param {Array}  tail   The tail (will be modified)\n         * @param {Number} length The length of the remaining buffer\n         */\n        SparkMD5.prototype._finish = function (tail, length) {\n            var i = length,\n                tmp,\n                lo,\n                hi;\n    \n            tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n            if (i > 55) {\n                md5cycle(this._state, tail);\n                for (i = 0; i < 16; i += 1) {\n                    tail[i] = 0;\n                }\n            }\n    \n            // Do the final computation based on the tail and length\n            // Beware that the final length may not fit in 32 bits so we take care of that\n            tmp = this._length * 8;\n            tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n            lo = parseInt(tmp[2], 16);\n            hi = parseInt(tmp[1], 16) || 0;\n    \n            tail[14] = lo;\n            tail[15] = hi;\n            md5cycle(this._state, tail);\n        };\n    \n        /**\n         * Resets the internal state of the computation.\n         *\n         * @return {SparkMD5} The instance itself\n         */\n        SparkMD5.prototype.reset = function () {\n            this._buff = \"\";\n            this._length = 0;\n            this._state = [1732584193, -271733879, -1732584194, 271733878];\n    \n            return this;\n        };\n    \n        /**\n         * Releases memory used by the incremental buffer and other aditional\n         * resources. If you plan to use the instance again, use reset instead.\n         */\n        SparkMD5.prototype.destroy = function () {\n            delete this._state;\n            delete this._buff;\n            delete this._length;\n        };\n    \n    \n        /**\n         * Performs the md5 hash on a string.\n         * A conversion will be applied if utf8 string is detected.\n         *\n         * @param {String}  str The string\n         * @param {Boolean} raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.hash = function (str, raw) {\n            // converts the string to utf8 bytes if necessary\n            if (/[\\u0080-\\uFFFF]/.test(str)) {\n                str = unescape(encodeURIComponent(str));\n            }\n    \n            var hash = md51(str);\n    \n            return !!raw ? hash : hex(hash);\n        };\n    \n        /**\n         * Performs the md5 hash on a binary string.\n         *\n         * @param {String}  content The binary string\n         * @param {Boolean} raw     True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.hashBinary = function (content, raw) {\n            var hash = md51(content);\n    \n            return !!raw ? hash : hex(hash);\n        };\n    \n        /**\n         * SparkMD5 OOP implementation for array buffers.\n         *\n         * Use this class to perform an incremental md5 ONLY for array buffers.\n         */\n        SparkMD5.ArrayBuffer = function () {\n            // call reset to init the instance\n            this.reset();\n        };\n    \n        ////////////////////////////////////////////////////////////////////////////\n    \n        /**\n         * Appends an array buffer.\n         *\n         * @param {ArrayBuffer} arr The array to be appended\n         *\n         * @return {SparkMD5.ArrayBuffer} The instance itself\n         */\n        SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n            // TODO: we could avoid the concatenation here but the algorithm would be more complex\n            //       if you find yourself needing extra performance, please make a PR.\n            var buff = this._concatArrayBuffer(this._buff, arr),\n                length = buff.length,\n                i;\n    \n            this._length += arr.byteLength;\n    \n            for (i = 64; i <= length; i += 64) {\n                md5cycle(this._state, md5blk_array(buff.subarray(i - 64, i)));\n            }\n    \n            // Avoids IE10 weirdness (documented above)\n            this._buff = (i - 64) < length ? buff.subarray(i - 64) : new Uint8Array(0);\n    \n            return this;\n        };\n    \n        /**\n         * Finishes the incremental computation, reseting the internal state and\n         * returning the result.\n         * Use the raw parameter to obtain the raw result instead of the hex one.\n         *\n         * @param {Boolean} raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n            var buff = this._buff,\n                length = buff.length,\n                tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                i,\n                ret;\n    \n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n            }\n    \n            this._finish(tail, length);\n            ret = !!raw ? this._state : hex(this._state);\n    \n            this.reset();\n    \n            return ret;\n        };\n    \n        SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n    \n        /**\n         * Resets the internal state of the computation.\n         *\n         * @return {SparkMD5.ArrayBuffer} The instance itself\n         */\n        SparkMD5.ArrayBuffer.prototype.reset = function () {\n            this._buff = new Uint8Array(0);\n            this._length = 0;\n            this._state = [1732584193, -271733879, -1732584194, 271733878];\n    \n            return this;\n        };\n    \n        /**\n         * Releases memory used by the incremental buffer and other aditional\n         * resources. If you plan to use the instance again, use reset instead.\n         */\n        SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n    \n        /**\n         * Concats two array buffers, returning a new one.\n         *\n         * @param  {ArrayBuffer} first  The first array buffer\n         * @param  {ArrayBuffer} second The second array buffer\n         *\n         * @return {ArrayBuffer} The new array buffer\n         */\n        SparkMD5.ArrayBuffer.prototype._concatArrayBuffer = function (first, second) {\n            var firstLength = first.length,\n                result = new Uint8Array(firstLength + second.byteLength);\n    \n            result.set(first);\n            result.set(new Uint8Array(second), firstLength);\n    \n            return result;\n        };\n    \n        /**\n         * Performs the md5 hash on an array buffer.\n         *\n         * @param {ArrayBuffer} arr The array buffer\n         * @param {Boolean}     raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n            var hash = md51_array(new Uint8Array(arr));\n    \n            return !!raw ? hash : hex(hash);\n        };\n        \n        return FlashRuntime.register( 'Md5', {\n            init: function() {\n                // do nothing.\n            },\n    \n            loadFromBlob: function( file ) {\n                var blob = file.getSource(),\n                    chunkSize = 2 * 1024 * 1024,\n                    chunks = Math.ceil( blob.size / chunkSize ),\n                    chunk = 0,\n                    owner = this.owner,\n                    spark = new SparkMD5.ArrayBuffer(),\n                    me = this,\n                    blobSlice = blob.mozSlice || blob.webkitSlice || blob.slice,\n                    loadNext, fr;\n    \n                fr = new FileReader();\n    \n                loadNext = function() {\n                    var start, end;\n    \n                    start = chunk * chunkSize;\n                    end = Math.min( start + chunkSize, blob.size );\n    \n                    fr.onload = function( e ) {\n                        spark.append( e.target.result );\n                        owner.trigger( 'progress', {\n                            total: file.size,\n                            loaded: end\n                        });\n                    };\n    \n                    fr.onloadend = function() {\n                        fr.onloadend = fr.onload = null;\n    \n                        if ( ++chunk < chunks ) {\n                            setTimeout( loadNext, 1 );\n                        } else {\n                            setTimeout(function(){\n                                owner.trigger('load');\n                                me.result = spark.end();\n                                loadNext = file = blob = spark = null;\n                                owner.trigger('complete');\n                            }, 50 );\n                        }\n                    };\n    \n                    fr.readAsArrayBuffer( blobSlice.call( blob, start, end ) );\n                };\n    \n                loadNext();\n            },\n    \n            getResult: function() {\n                return this.result;\n            }\n        });\n    });\n    /**\n     * @fileOverview FlashRuntime\n     */\n    define('runtime/flash/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var $ = Base.$,\n            type = 'flash',\n            components = {};\n    \n    \n        function getFlashVersion() {\n            var version;\n    \n            try {\n                version = navigator.plugins[ 'Shockwave Flash' ];\n                version = version.description;\n            } catch ( ex ) {\n                try {\n                    version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                            .GetVariable('$version');\n                } catch ( ex2 ) {\n                    version = '0.0';\n                }\n            }\n            version = version.match( /\\d+/g );\n            return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );\n        }\n    \n        function FlashRuntime() {\n            var pool = {},\n                clients = {},\n                destroy = this.destroy,\n                me = this,\n                jsreciver = Base.guid('webuploader_');\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/ ) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                clients[ uid ] = client;\n    \n                if ( components[ comp ] ) {\n                    if ( !pool[ uid ] ) {\n                        pool[ uid ] = new components[ comp ]( client, me );\n                    }\n    \n                    instance = pool[ uid ];\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n    \n                return me.flashExec.apply( client, arguments );\n            };\n    \n            function handler( evt, obj ) {\n                var type = evt.type || evt,\n                    parts, uid;\n    \n                parts = type.split('::');\n                uid = parts[ 0 ];\n                type = parts[ 1 ];\n    \n                // console.log.apply( console, arguments );\n    \n                if ( type === 'Ready' && uid === me.uid ) {\n                    me.trigger('ready');\n                } else if ( clients[ uid ] ) {\n                    clients[ uid ].trigger( type.toLowerCase(), evt, obj );\n                }\n    \n                // Base.log( evt, obj );\n            }\n    \n            // flash的接受器。\n            window[ jsreciver ] = function() {\n                var args = arguments;\n    \n                // 为了能捕获得到。\n                setTimeout(function() {\n                    handler.apply( null, args );\n                }, 1 );\n            };\n    \n            this.jsreciver = jsreciver;\n    \n            this.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n    \n            this.flashExec = function( comp, fn ) {\n                var flash = me.getFlash(),\n                    args = Base.slice( arguments, 2 );\n    \n                return flash.exec( this.uid, comp, fn, args );\n            };\n    \n            // @todo\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: FlashRuntime,\n    \n            init: function() {\n                var container = this.getContainer(),\n                    opts = this.options,\n                    html;\n    \n                // if not the minimal height, shims are not initialized\n                // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc)\n                container.css({\n                    position: 'absolute',\n                    top: '-8px',\n                    left: '-8px',\n                    width: '9px',\n                    height: '9px',\n                    overflow: 'hidden'\n                });\n    \n                // insert flash object\n                html = '<object id=\"' + this.uid + '\" type=\"application/' +\n                        'x-shockwave-flash\" data=\"' +  opts.swf + '\" ';\n    \n                if ( Base.browser.ie ) {\n                    html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                }\n    \n                html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">'  +\n                    '<param name=\"movie\" value=\"' + opts.swf + '\" />' +\n                    '<param name=\"flashvars\" value=\"uid=' + this.uid +\n                    '&jsreciver=' + this.jsreciver + '\" />' +\n                    '<param name=\"wmode\" value=\"transparent\" />' +\n                    '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                '</object>';\n    \n                container.html( html );\n            },\n    \n            getFlash: function() {\n                if ( this._flash ) {\n                    return this._flash;\n                }\n    \n                this._flash = $( '#' + this.uid ).get( 0 );\n                return this._flash;\n            }\n    \n        });\n    \n        FlashRuntime.register = function( name, component ) {\n            component = components[ name ] = Base.inherits( CompBase, $.extend({\n    \n                // @todo fix this later\n                flashExec: function() {\n                    var owner = this.owner,\n                        runtime = this.getRuntime();\n    \n                    return runtime.flashExec.apply( owner, arguments );\n                }\n            }, component ) );\n    \n            return component;\n        };\n    \n        if ( getFlashVersion() >= 11.4 ) {\n            Runtime.addRuntime( type, FlashRuntime );\n        }\n    \n        return FlashRuntime;\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/flash/filepicker',[\n        'base',\n        'runtime/flash/runtime'\n    ], function( Base, FlashRuntime ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'FilePicker', {\n            init: function( opts ) {\n                var copy = $.extend({}, opts ),\n                    len, i;\n    \n                // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug.\n                len = copy.accept && copy.accept.length;\n                for (  i = 0; i < len; i++ ) {\n                    if ( !copy.accept[ i ].title ) {\n                        copy.accept[ i ].title = 'Files';\n                    }\n                }\n    \n                delete copy.button;\n                delete copy.id;\n                delete copy.container;\n    \n                this.flashExec( 'FilePicker', 'init', copy );\n            },\n    \n            destroy: function() {\n                this.flashExec( 'FilePicker', 'destroy' );\n            }\n        });\n    });\n    /**\n     * @fileOverview 图片压缩\n     */\n    define('runtime/flash/image',[\n        'runtime/flash/runtime'\n    ], function( FlashRuntime ) {\n    \n        return FlashRuntime.register( 'Image', {\n            // init: function( options ) {\n            //     var owner = this.owner;\n    \n            //     this.flashExec( 'Image', 'init', options );\n            //     owner.on( 'load', function() {\n            //         debugger;\n            //     });\n            // },\n    \n            loadFromBlob: function( blob ) {\n                var owner = this.owner;\n    \n                owner.info() && this.flashExec( 'Image', 'info', owner.info() );\n                owner.meta() && this.flashExec( 'Image', 'meta', owner.meta() );\n    \n                this.flashExec( 'Image', 'loadFromBlob', blob.uid );\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/flash/transport',[\n        'base',\n        'runtime/flash/runtime',\n        'runtime/client'\n    ], function( Base, FlashRuntime, RuntimeClient ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n                this._responseJson = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    binary;\n    \n                xhr.connectRuntime( blob.ruid );\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.uid;\n                } else {\n                    $.each( owner._formData, function( k, v ) {\n                        xhr.exec( 'append', k, v );\n                    });\n    \n                    xhr.exec( 'appendBlob', opts.fileVal, blob.uid,\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n                xhr.exec( 'send', {\n                    method: opts.method,\n                    url: server,\n                    forceURLStream: opts.forceURLStream,\n                    mimeType: 'application/octet-stream'\n                }, binary );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            getResponse: function() {\n                return this._response || '';\n            },\n    \n            getResponseAsJson: function() {\n                return this._responseJson;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.exec('abort');\n                    xhr.destroy();\n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new RuntimeClient('XMLHttpRequest');\n    \n                xhr.on( 'uploadprogress progress', function( e ) {\n                    var percent = e.loaded / e.total;\n                    percent = Math.min( 1, Math.max( 0, percent ) );\n                    return me.trigger( 'progress', percent );\n                });\n    \n                xhr.on( 'load', function() {\n                    var status = xhr.exec('getStatus'),\n                        readBody = false,\n                        err = '',\n                        p;\n    \n                    xhr.off();\n                    me._xhr = null;\n    \n                    if ( status >= 200 && status < 300 ) {\n                        readBody = true;\n                    } else if ( status >= 500 && status < 600 ) {\n                        readBody = true;\n                        err = 'server';\n                    } else {\n                        err = 'http';\n                    }\n    \n                    if ( readBody ) {\n                        me._response = xhr.exec('getResponse');\n                        me._response = decodeURIComponent( me._response );\n    \n                        // flash 处理可能存在 bug, 没辙只能靠 js 了\n                        // try {\n                        //     me._responseJson = xhr.exec('getResponseAsJson');\n                        // } catch ( error ) {\n                            \n                        p = window.JSON && window.JSON.parse || function( s ) {\n                            try {\n                                return new Function('return ' + s).call();\n                            } catch ( err ) {\n                                return {};\n                            }\n                        };\n                        me._responseJson  = me._response ? p(me._response) : {};\n                            \n                        // }\n                    }\n                    \n                    xhr.destroy();\n                    xhr = null;\n    \n                    return err ? me.trigger( 'error', err ) : me.trigger('load');\n                });\n    \n                xhr.on( 'error', function() {\n                    xhr.off();\n                    me._xhr = null;\n                    me.trigger( 'error', 'http' );\n                });\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.exec( 'setRequestHeader', key, val );\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/flash/blob',[\n        'runtime/flash/runtime',\n        'lib/blob'\n    ], function( FlashRuntime, Blob ) {\n    \n        return FlashRuntime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.flashExec( 'Blob', 'slice', start, end );\n    \n                return new Blob( blob.uid, blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview  Md5 flash实现\n     */\n    define('runtime/flash/md5',[\n        'runtime/flash/runtime'\n    ], function( FlashRuntime ) {\n        \n        return FlashRuntime.register( 'Md5', {\n            init: function() {\n                // do nothing.\n            },\n    \n            loadFromBlob: function( blob ) {\n                return this.flashExec( 'Md5', 'loadFromBlob', blob.uid );\n            }\n        });\n    });\n    /**\n     * @fileOverview 完全版本。\n     */\n    define('preset/all',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n        'widgets/md5',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/imagemeta/exif',\n        'runtime/html5/androidpatch',\n        'runtime/html5/image',\n        'runtime/html5/transport',\n        'runtime/html5/md5',\n    \n        // flash\n        'runtime/flash/filepicker',\n        'runtime/flash/image',\n        'runtime/flash/transport',\n        'runtime/flash/blob',\n        'runtime/flash/md5'\n    ], function( Base ) {\n        return Base;\n    });\n    /**\n     * @fileOverview 日志组件，主要用来收集错误信息，可以帮助 webuploader 更好的定位问题和发展。\n     *\n     * 如果您不想要启用此功能，请在打包的时候去掉 log 模块。\n     *\n     * 或者可以在初始化的时候通过 options.disableWidgets 属性禁用。\n     *\n     * 如：\n     * WebUploader.create({\n     *     ...\n     *\n     *     disableWidgets: 'log',\n     *\n     *     ...\n     * })\n     */\n    define('widgets/log',[\n        'base',\n        'uploader',\n        'widgets/widget'\n    ], function( Base, Uploader ) {\n        var $ = Base.$,\n            logUrl = ' http://static.tieba.baidu.com/tb/pms/img/st.gif??',\n            product = (location.hostname || location.host || 'protected').toLowerCase(),\n    \n            // 只针对 baidu 内部产品用户做统计功能。\n            enable = product && /baidu/i.exec(product),\n            base;\n    \n        if (!enable) {\n            return;\n        }\n    \n        base = {\n            dv: 3,\n            master: 'webuploader',\n            online: /test/.exec(product) ? 0 : 1,\n            module: '',\n            product: product,\n            type: 0\n        };\n    \n        function send(data) {\n            var obj = $.extend({}, base, data),\n                url = logUrl.replace(/^(.*)\\?/, '$1' + $.param( obj )),\n                image = new Image();\n    \n            image.src = url;\n        }\n    \n        return Uploader.register({\n            name: 'log',\n    \n            init: function() {\n                var owner = this.owner,\n                    count = 0,\n                    size = 0;\n    \n                owner\n                    .on('error', function(code) {\n                        send({\n                            type: 2,\n                            c_error_code: code\n                        });\n                    })\n                    .on('uploadError', function(file, reason) {\n                        send({\n                            type: 2,\n                            c_error_code: 'UPLOAD_ERROR',\n                            c_reason: '' + reason\n                        });\n                    })\n                    .on('uploadComplete', function(file) {\n                        count++;\n                        size += file.size;\n                    }).\n                    on('uploadFinished', function() {\n                        send({\n                            c_count: count,\n                            c_size: size\n                        });\n                        count = size = 0;\n                    });\n    \n                send({\n                    c_usage: 1\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('webuploader',[\n        'preset/all',\n        'widgets/log'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.min.js",
    "content": "/* WebUploader 0.1.5 */!function(a,b){var c,d={},e=function(a,b){var c,d,e;if(\"string\"==typeof a)return h(a);for(c=[],d=a.length,e=0;d>e;e++)c.push(h(a[e]));return b.apply(null,c)},f=function(a,b,c){2===arguments.length&&(c=b,b=null),e(b||[],function(){g(a,c,arguments)})},g=function(a,b,c){var f,g={exports:b};\"function\"==typeof b&&(c.length||(c=[e,g.exports,g]),f=b.apply(null,c),void 0!==f&&(g.exports=f)),d[a]=g.exports},h=function(b){var c=d[b]||a[b];if(!c)throw new Error(\"`\"+b+\"` is undefined\");return c},i=function(a){var b,c,e,f,g,h;h=function(a){return a&&a.charAt(0).toUpperCase()+a.substr(1)};for(b in d)if(c=a,d.hasOwnProperty(b)){for(e=b.split(\"/\"),g=h(e.pop());f=h(e.shift());)c[f]=c[f]||{},c=c[f];c[g]=d[b]}return a},j=function(c){return a.__dollar=c,i(b(a,f,e))};\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=j():\"function\"==typeof define&&define.amd?define([\"jquery\"],j):(c=a.WebUploader,a.WebUploader=j(),a.WebUploader.noConflict=function(){a.WebUploader=c})}(window,function(a,b,c){return b(\"dollar-third\",[],function(){var b=a.__dollar||a.jQuery||a.Zepto;if(!b)throw new Error(\"jQuery or Zepto not found!\");return b}),b(\"dollar\",[\"dollar-third\"],function(a){return a}),b(\"promise-third\",[\"dollar\"],function(a){return{Deferred:a.Deferred,when:a.when,isPromise:function(a){return a&&\"function\"==typeof a.then}}}),b(\"promise\",[\"promise-third\"],function(a){return a}),b(\"base\",[\"dollar\",\"promise\"],function(b,c){function d(a){return function(){return h.apply(a,arguments)}}function e(a,b){return function(){return a.apply(b,arguments)}}function f(a){var b;return Object.create?Object.create(a):(b=function(){},b.prototype=a,new b)}var g=function(){},h=Function.call;return{version:\"0.1.5\",$:b,Deferred:c.Deferred,isPromise:c.isPromise,when:c.when,browser:function(a){var b={},c=a.match(/WebKit\\/([\\d.]+)/),d=a.match(/Chrome\\/([\\d.]+)/)||a.match(/CriOS\\/([\\d.]+)/),e=a.match(/MSIE\\s([\\d\\.]+)/)||a.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),f=a.match(/Firefox\\/([\\d.]+)/),g=a.match(/Safari\\/([\\d.]+)/),h=a.match(/OPR\\/([\\d.]+)/);return c&&(b.webkit=parseFloat(c[1])),d&&(b.chrome=parseFloat(d[1])),e&&(b.ie=parseFloat(e[1])),f&&(b.firefox=parseFloat(f[1])),g&&(b.safari=parseFloat(g[1])),h&&(b.opera=parseFloat(h[1])),b}(navigator.userAgent),os:function(a){var b={},c=a.match(/(?:Android);?[\\s\\/]+([\\d.]+)?/),d=a.match(/(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/);return c&&(b.android=parseFloat(c[1])),d&&(b.ios=parseFloat(d[1].replace(/_/g,\".\"))),b}(navigator.userAgent),inherits:function(a,c,d){var e;return\"function\"==typeof c?(e=c,c=null):e=c&&c.hasOwnProperty(\"constructor\")?c.constructor:function(){return a.apply(this,arguments)},b.extend(!0,e,a,d||{}),e.__super__=a.prototype,e.prototype=f(a.prototype),c&&b.extend(!0,e.prototype,c),e},noop:g,bindFn:e,log:function(){return a.console?e(console.log,console):g}(),nextTick:function(){return function(a){setTimeout(a,1)}}(),slice:d([].slice),guid:function(){var a=0;return function(b){for(var c=(+new Date).toString(32),d=0;5>d;d++)c+=Math.floor(65535*Math.random()).toString(32);return(b||\"wu_\")+c+(a++).toString(32)}}(),formatSize:function(a,b,c){var d;for(c=c||[\"B\",\"K\",\"M\",\"G\",\"TB\"];(d=c.shift())&&a>1024;)a/=1024;return(\"B\"===d?a:a.toFixed(b||2))+d}}}),b(\"mediator\",[\"base\"],function(a){function b(a,b,c,d){return f.grep(a,function(a){return!(!a||b&&a.e!==b||c&&a.cb!==c&&a.cb._cb!==c||d&&a.ctx!==d)})}function c(a,b,c){f.each((a||\"\").split(h),function(a,d){c(d,b)})}function d(a,b){for(var c,d=!1,e=-1,f=a.length;++e<f;)if(c=a[e],c.cb.apply(c.ctx2,b)===!1){d=!0;break}return!d}var e,f=a.$,g=[].slice,h=/\\s+/;return e={on:function(a,b,d){var e,f=this;return b?(e=this._events||(this._events=[]),c(a,b,function(a,b){var c={e:a};c.cb=b,c.ctx=d,c.ctx2=d||f,c.id=e.length,e.push(c)}),this):this},once:function(a,b,d){var e=this;return b?(c(a,b,function(a,b){var c=function(){return e.off(a,c),b.apply(d||e,arguments)};c._cb=b,e.on(a,c,d)}),e):e},off:function(a,d,e){var g=this._events;return g?a||d||e?(c(a,d,function(a,c){f.each(b(g,a,c,e),function(){delete g[this.id]})}),this):(this._events=[],this):this},trigger:function(a){var c,e,f;return this._events&&a?(c=g.call(arguments,1),e=b(this._events,a),f=b(this._events,\"all\"),d(e,c)&&d(f,arguments)):this}},f.extend({installTo:function(a){return f.extend(a,e)}},e)}),b(\"uploader\",[\"base\",\"mediator\"],function(a,b){function c(a){this.options=d.extend(!0,{},c.options,a),this._init(this.options)}var d=a.$;return c.options={},b.installTo(c.prototype),d.each({upload:\"start-upload\",stop:\"stop-upload\",getFile:\"get-file\",getFiles:\"get-files\",addFile:\"add-file\",addFiles:\"add-file\",sort:\"sort-files\",removeFile:\"remove-file\",cancelFile:\"cancel-file\",skipFile:\"skip-file\",retry:\"retry\",isInProgress:\"is-in-progress\",makeThumb:\"make-thumb\",md5File:\"md5-file\",getDimension:\"get-dimension\",addButton:\"add-btn\",predictRuntimeType:\"predict-runtime-type\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\",reset:\"reset\"},function(a,b){c.prototype[a]=function(){return this.request(b,arguments)}}),d.extend(c.prototype,{state:\"pending\",_init:function(a){var b=this;b.request(\"init\",a,function(){b.state=\"ready\",b.trigger(\"ready\")})},option:function(a,b){var c=this.options;return arguments.length>1?void(d.isPlainObject(b)&&d.isPlainObject(c[a])?d.extend(c[a],b):c[a]=b):a?c[a]:c},getStats:function(){var a=this.request(\"get-stats\");return a?{successNum:a.numOfSuccess,progressNum:a.numOfProgress,cancelNum:a.numOfCancel,invalidNum:a.numOfInvalid,uploadFailNum:a.numOfUploadFailed,queueNum:a.numOfQueue,interruptNum:a.numofInterrupt}:{}},trigger:function(a){var c=[].slice.call(arguments,1),e=this.options,f=\"on\"+a.substring(0,1).toUpperCase()+a.substring(1);return b.trigger.apply(this,arguments)===!1||d.isFunction(e[f])&&e[f].apply(this,c)===!1||d.isFunction(this[f])&&this[f].apply(this,c)===!1||b.trigger.apply(b,[this,a].concat(c))===!1?!1:!0},destroy:function(){this.request(\"destroy\",arguments),this.off()},request:a.noop}),a.create=c.create=function(a){return new c(a)},a.Uploader=c,c}),b(\"runtime/runtime\",[\"base\",\"mediator\"],function(a,b){function c(b){this.options=d.extend({container:document.body},b),this.uid=a.guid(\"rt_\")}var d=a.$,e={},f=function(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null};return d.extend(c.prototype,{getContainer:function(){var a,b,c=this.options;return this._container?this._container:(a=d(c.container||document.body),b=d(document.createElement(\"div\")),b.attr(\"id\",\"rt_\"+this.uid),b.css({position:\"absolute\",top:\"0px\",left:\"0px\",width:\"1px\",height:\"1px\",overflow:\"hidden\"}),a.append(b),a.addClass(\"webuploader-container\"),this._container=b,this._parent=a,b)},init:a.noop,exec:a.noop,destroy:function(){this._container&&this._container.remove(),this._parent&&this._parent.removeClass(\"webuploader-container\"),this.off()}}),c.orders=\"html5,flash\",c.addRuntime=function(a,b){e[a]=b},c.hasRuntime=function(a){return!!(a?e[a]:f(e))},c.create=function(a,b){var g,h;if(b=b||c.orders,d.each(b.split(/\\s*,\\s*/g),function(){return e[this]?(g=this,!1):void 0}),g=g||f(e),!g)throw new Error(\"Runtime Error\");return h=new e[g](a)},b.installTo(c.prototype),c}),b(\"runtime/client\",[\"base\",\"mediator\",\"runtime/runtime\"],function(a,b,c){function d(b,d){var f,g=a.Deferred();this.uid=a.guid(\"client_\"),this.runtimeReady=function(a){return g.done(a)},this.connectRuntime=function(b,h){if(f)throw new Error(\"already connected!\");return g.done(h),\"string\"==typeof b&&e.get(b)&&(f=e.get(b)),f=f||e.get(null,d),f?(a.$.extend(f.options,b),f.__promise.then(g.resolve),f.__client++):(f=c.create(b,b.runtimeOrder),f.__promise=g.promise(),f.once(\"ready\",g.resolve),f.init(),e.add(f),f.__client=1),d&&(f.__standalone=d),f},this.getRuntime=function(){return f},this.disconnectRuntime=function(){f&&(f.__client--,f.__client<=0&&(e.remove(f),delete f.__promise,f.destroy()),f=null)},this.exec=function(){if(f){var c=a.slice(arguments);return b&&c.unshift(b),f.exec.apply(this,c)}},this.getRuid=function(){return f&&f.uid},this.destroy=function(a){return function(){a&&a.apply(this,arguments),this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()}}(this.destroy)}var e;return e=function(){var a={};return{add:function(b){a[b.uid]=b},get:function(b,c){var d;if(b)return a[b];for(d in a)if(!c||!a[d].__standalone)return a[d];return null},remove:function(b){delete a[b.uid]}}}(),b.installTo(d.prototype),d}),b(\"lib/dnd\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},d.options,a),a.container=e(a.container),a.container.length&&c.call(this,\"DragAndDrop\")}var e=a.$;return d.options={accept:null,disableGlobalDnd:!1},a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/widget\",[\"base\",\"uploader\"],function(a,b){function c(a){if(!a)return!1;var b=a.length,c=e.type(a);return 1===a.nodeType&&b?!0:\"array\"===c||\"function\"!==c&&\"string\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a)}function d(a){this.owner=a,this.options=a.options}var e=a.$,f=b.prototype._init,g=b.prototype.destroy,h={},i=[];return e.extend(d.prototype,{init:a.noop,invoke:function(a,b){var c=this.responseMap;return c&&a in c&&c[a]in this&&e.isFunction(this[c[a]])?this[c[a]].apply(this,b):h},request:function(){return this.owner.request.apply(this.owner,arguments)}}),e.extend(b.prototype,{_init:function(){var a=this,b=a._widgets=[],c=a.options.disableWidgets||\"\";return e.each(i,function(d,e){(!c||!~c.indexOf(e._name))&&b.push(new e(a))}),f.apply(a,arguments)},request:function(b,d,e){var f,g,i,j,k=0,l=this._widgets,m=l&&l.length,n=[],o=[];for(d=c(d)?d:[d];m>k;k++)f=l[k],g=f.invoke(b,d),g!==h&&(a.isPromise(g)?o.push(g):n.push(g));return e||o.length?(i=a.when.apply(a,o),j=i.pipe?\"pipe\":\"then\",i[j](function(){var b=a.Deferred(),c=arguments;return 1===c.length&&(c=c[0]),setTimeout(function(){b.resolve(c)},1),b.promise()})[e?j:\"done\"](e||a.noop)):n[0]},destroy:function(){g.apply(this,arguments),this._widgets=null}}),b.register=d.register=function(b,c){var f,g={init:\"init\",destroy:\"destroy\",name:\"anonymous\"};return 1===arguments.length?(c=b,e.each(c,function(a){return\"_\"===a[0]||\"name\"===a?void(\"name\"===a&&(g.name=c.name)):void(g[a.replace(/[A-Z]/g,\"-$&\").toLowerCase()]=a)})):g=e.extend(g,b),c.responseMap=g,f=a.inherits(d,c),f._name=g.name,i.push(f),f},b.unRegister=d.unRegister=function(a){if(a&&\"anonymous\"!==a)for(var b=i.length;b--;)i[b]._name===a&&i.splice(b,1)},d}),b(\"widgets/filednd\",[\"base\",\"uploader\",\"lib/dnd\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.options.dnd=\"\",b.register({name:\"dnd\",init:function(b){if(b.dnd&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{disableGlobalDnd:b.disableGlobalDnd,container:b.dnd,accept:b.accept});return this.dnd=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"drop\",function(a){f.request(\"add-file\",[a])}),e.on(\"accept\",function(a){return f.owner.trigger(\"dndAccept\",a)}),e.init(),g.promise()}},destroy:function(){this.dnd&&this.dnd.destroy()}})}),b(\"lib/filepaste\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},a),a.container=e(a.container||document.body),c.call(this,\"FilePaste\")}var e=a.$;return a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/filepaste\",[\"base\",\"uploader\",\"lib/filepaste\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.register({name:\"paste\",init:function(b){if(b.paste&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{container:b.paste,accept:b.accept});return this.paste=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"paste\",function(a){f.owner.request(\"add-file\",[a])}),e.init(),g.promise()}},destroy:function(){this.paste&&this.paste.destroy()}})}),b(\"lib/blob\",[\"base\",\"runtime/client\"],function(a,b){function c(a,c){var d=this;d.source=c,d.ruid=a,this.size=c.size||0,this.type=!c.type&&this.ext&&~\"jpg,jpeg,png,gif,bmp\".indexOf(this.ext)?\"image/\"+(\"jpg\"===this.ext?\"jpeg\":this.ext):c.type||\"application/octet-stream\",b.call(d,\"Blob\"),this.uid=c.uid||this.uid,a&&d.connectRuntime(a)}return a.inherits(b,{constructor:c,slice:function(a,b){return this.exec(\"slice\",a,b)},getSource:function(){return this.source}}),c}),b(\"lib/file\",[\"base\",\"lib/blob\"],function(a,b){function c(a,c){var f;this.name=c.name||\"untitled\"+d++,f=e.exec(c.name)?RegExp.$1.toLowerCase():\"\",!f&&c.type&&(f=/\\/(jpg|jpeg|png|gif|bmp)$/i.exec(c.type)?RegExp.$1.toLowerCase():\"\",this.name+=\".\"+f),this.ext=f,this.lastModifiedDate=c.lastModifiedDate||(new Date).toLocaleString(),b.apply(this,arguments)}var d=1,e=/\\.([^.]+)$/;return a.inherits(b,c)}),b(\"lib/filepicker\",[\"base\",\"runtime/client\",\"lib/file\"],function(b,c,d){function e(a){if(a=this.options=f.extend({},e.options,a),a.container=f(a.id),!a.container.length)throw new Error(\"按钮指定错误\");a.innerHTML=a.innerHTML||a.label||a.container.html()||\"\",a.button=f(a.button||document.createElement(\"div\")),a.button.html(a.innerHTML),a.container.html(a.button),c.call(this,\"FilePicker\",!0)}var f=b.$;return e.options={button:null,container:null,label:null,innerHTML:null,multiple:!0,accept:null,name:\"file\"},b.inherits(c,{constructor:e,init:function(){var c=this,e=c.options,g=e.button;g.addClass(\"webuploader-pick\"),c.on(\"all\",function(a){var b;switch(a){case\"mouseenter\":g.addClass(\"webuploader-pick-hover\");break;case\"mouseleave\":g.removeClass(\"webuploader-pick-hover\");break;case\"change\":b=c.exec(\"getFiles\"),c.trigger(\"select\",f.map(b,function(a){return a=new d(c.getRuid(),a),a._refer=e.container,a}),e.container)}}),c.connectRuntime(e,function(){c.refresh(),c.exec(\"init\",e),c.trigger(\"ready\")}),this._resizeHandler=b.bindFn(this.refresh,this),f(a).on(\"resize\",this._resizeHandler)},refresh:function(){var a=this.getRuntime().getContainer(),b=this.options.button,c=b.outerWidth?b.outerWidth():b.width(),d=b.outerHeight?b.outerHeight():b.height(),e=b.offset();c&&d&&a.css({bottom:\"auto\",right:\"auto\",width:c+\"px\",height:d+\"px\"}).offset(e)},enable:function(){var a=this.options.button;a.removeClass(\"webuploader-pick-disable\"),this.refresh()},disable:function(){var a=this.options.button;this.getRuntime().getContainer().css({top:\"-99999px\"}),a.addClass(\"webuploader-pick-disable\")},destroy:function(){var b=this.options.button;f(a).off(\"resize\",this._resizeHandler),b.removeClass(\"webuploader-pick-disable webuploader-pick-hover webuploader-pick\")}}),e}),b(\"widgets/filepicker\",[\"base\",\"uploader\",\"lib/filepicker\",\"widgets/widget\"],function(a,b,c){var d=a.$;return d.extend(b.options,{pick:null,accept:null}),b.register({name:\"picker\",init:function(a){return this.pickers=[],a.pick&&this.addBtn(a.pick)},refresh:function(){d.each(this.pickers,function(){this.refresh()})},addBtn:function(b){var e=this,f=e.options,g=f.accept,h=[];if(b)return d.isPlainObject(b)||(b={id:b}),d(b.id).each(function(){var i,j,k;k=a.Deferred(),i=d.extend({},b,{accept:d.isPlainObject(g)?[g]:g,swf:f.swf,runtimeOrder:f.runtimeOrder,id:this}),j=new c(i),j.once(\"ready\",k.resolve),j.on(\"select\",function(a){e.owner.request(\"add-file\",[a])}),j.init(),e.pickers.push(j),h.push(k.promise())}),a.when.apply(a,h)},disable:function(){d.each(this.pickers,function(){this.disable()})},enable:function(){d.each(this.pickers,function(){this.enable()})},destroy:function(){d.each(this.pickers,function(){this.destroy()}),this.pickers=null}})}),b(\"lib/image\",[\"base\",\"runtime/client\",\"lib/blob\"],function(a,b,c){function d(a){this.options=e.extend({},d.options,a),b.call(this,\"Image\"),this.on(\"load\",function(){this._info=this.exec(\"info\"),this._meta=this.exec(\"meta\")})}var e=a.$;return d.options={quality:90,crop:!1,preserveHeaders:!1,allowMagnify:!1},a.inherits(b,{constructor:d,info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},loadFromBlob:function(a){var b=this,c=a.getRuid();this.connectRuntime(c,function(){b.exec(\"init\",b.options),b.exec(\"loadFromBlob\",a)})},resize:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"resize\"].concat(b))},crop:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"crop\"].concat(b))},getAsDataUrl:function(a){return this.exec(\"getAsDataUrl\",a)},getAsBlob:function(a){var b=this.exec(\"getAsBlob\",a);return new c(this.getRuid(),b)}}),d}),b(\"widgets/image\",[\"base\",\"uploader\",\"lib/image\",\"widgets/widget\"],function(a,b,c){var d,e=a.$;return d=function(a){var b=0,c=[],d=function(){for(var d;c.length&&a>b;)d=c.shift(),b+=d[0],d[1]()};return function(a,e,f){c.push([e,f]),a.once(\"destroy\",function(){b-=e,setTimeout(d,1)}),setTimeout(d,1)}}(5242880),e.extend(b.options,{thumb:{width:110,height:110,quality:70,allowMagnify:!0,crop:!0,preserveHeaders:!1,type:\"image/jpeg\"},compress:{width:1600,height:1600,quality:90,allowMagnify:!1,crop:!1,preserveHeaders:!0}}),b.register({name:\"image\",makeThumb:function(a,b,f,g){var h,i;return a=this.request(\"get-file\",a),a.type.match(/^image/)?(h=e.extend({},this.options.thumb),e.isPlainObject(f)&&(h=e.extend(h,f),f=null),f=f||h.width,g=g||h.height,i=new c(h),i.once(\"load\",function(){a._info=a._info||i.info(),a._meta=a._meta||i.meta(),1>=f&&f>0&&(f=a._info.width*f),1>=g&&g>0&&(g=a._info.height*g),i.resize(f,g)}),i.once(\"complete\",function(){b(!1,i.getAsDataUrl(h.type)),i.destroy()}),i.once(\"error\",function(a){b(a||!0),i.destroy()}),void d(i,a.source.size,function(){a._info&&i.info(a._info),a._meta&&i.meta(a._meta),i.loadFromBlob(a.source)})):void b(!0)},beforeSendFile:function(b){var d,f,g=this.options.compress||this.options.resize,h=g&&g.compressSize||0,i=g&&g.noCompressIfLarger||!1;return b=this.request(\"get-file\",b),!g||!~\"image/jpeg,image/jpg\".indexOf(b.type)||b.size<h||b._compressed?void 0:(g=e.extend({},g),f=a.Deferred(),d=new c(g),f.always(function(){d.destroy(),d=null}),d.once(\"error\",f.reject),d.once(\"load\",function(){var a=g.width,c=g.height;b._info=b._info||d.info(),b._meta=b._meta||d.meta(),1>=a&&a>0&&(a=b._info.width*a),1>=c&&c>0&&(c=b._info.height*c),d.resize(a,c)}),d.once(\"complete\",function(){var a,c;try{a=d.getAsBlob(g.type),c=b.size,(!i||a.size<c)&&(b.source=a,b.size=a.size,b.trigger(\"resize\",a.size,c)),b._compressed=!0,f.resolve()}catch(e){f.resolve()}}),b._info&&d.info(b._info),b._meta&&d.meta(b._meta),d.loadFromBlob(b.source),f.promise())}})}),b(\"file\",[\"base\",\"mediator\"],function(a,b){function c(){return f+g++}function d(a){this.name=a.name||\"Untitled\",this.size=a.size||0,this.type=a.type||\"application/octet-stream\",this.lastModifiedDate=a.lastModifiedDate||1*new Date,this.id=c(),this.ext=h.exec(this.name)?RegExp.$1:\"\",this.statusText=\"\",i[this.id]=d.Status.INITED,this.source=a,this.loaded=0,this.on(\"error\",function(a){this.setStatus(d.Status.ERROR,a)})}var e=a.$,f=\"WU_FILE_\",g=0,h=/\\.([^.]+)$/,i={};return e.extend(d.prototype,{setStatus:function(a,b){var c=i[this.id];\"undefined\"!=typeof b&&(this.statusText=b),a!==c&&(i[this.id]=a,this.trigger(\"statuschange\",a,c))},getStatus:function(){return i[this.id]},getSource:function(){return this.source},destroy:function(){this.off(),delete i[this.id]}}),b.installTo(d.prototype),d.Status={INITED:\"inited\",QUEUED:\"queued\",PROGRESS:\"progress\",ERROR:\"error\",COMPLETE:\"complete\",CANCELLED:\"cancelled\",INTERRUPT:\"interrupt\",INVALID:\"invalid\"},d}),b(\"queue\",[\"base\",\"mediator\",\"file\"],function(a,b,c){function d(){this.stats={numOfQueue:0,numOfSuccess:0,numOfCancel:0,numOfProgress:0,numOfUploadFailed:0,numOfInvalid:0,numofDeleted:0,numofInterrupt:0},this._queue=[],this._map={}}var e=a.$,f=c.Status;return e.extend(d.prototype,{append:function(a){return this._queue.push(a),this._fileAdded(a),this},prepend:function(a){return this._queue.unshift(a),this._fileAdded(a),this},getFile:function(a){return\"string\"!=typeof a?a:this._map[a]},fetch:function(a){var b,c,d=this._queue.length;for(a=a||f.QUEUED,b=0;d>b;b++)if(c=this._queue[b],a===c.getStatus())return c;return null},sort:function(a){\"function\"==typeof a&&this._queue.sort(a)},getFiles:function(){for(var a,b=[].slice.call(arguments,0),c=[],d=0,f=this._queue.length;f>d;d++)a=this._queue[d],(!b.length||~e.inArray(a.getStatus(),b))&&c.push(a);return c},removeFile:function(a){var b=this._map[a.id];b&&(delete this._map[a.id],a.destroy(),this.stats.numofDeleted++)},_fileAdded:function(a){var b=this,c=this._map[a.id];c||(this._map[a.id]=a,a.on(\"statuschange\",function(a,c){b._onFileStatusChange(a,c)}))},_onFileStatusChange:function(a,b){var c=this.stats;switch(b){case f.PROGRESS:c.numOfProgress--;break;case f.QUEUED:c.numOfQueue--;break;case f.ERROR:c.numOfUploadFailed--;break;case f.INVALID:c.numOfInvalid--;break;case f.INTERRUPT:c.numofInterrupt--}switch(a){case f.QUEUED:c.numOfQueue++;break;case f.PROGRESS:c.numOfProgress++;break;case f.ERROR:c.numOfUploadFailed++;break;case f.COMPLETE:c.numOfSuccess++;break;case f.CANCELLED:c.numOfCancel++;break;case f.INVALID:c.numOfInvalid++;break;case f.INTERRUPT:c.numofInterrupt++}}}),b.installTo(d.prototype),d}),b(\"widgets/queue\",[\"base\",\"uploader\",\"queue\",\"file\",\"lib/file\",\"runtime/client\",\"widgets/widget\"],function(a,b,c,d,e,f){var g=a.$,h=/\\.\\w+$/,i=d.Status;return b.register({name:\"queue\",init:function(b){var d,e,h,i,j,k,l,m=this;if(g.isPlainObject(b.accept)&&(b.accept=[b.accept]),b.accept){for(j=[],h=0,e=b.accept.length;e>h;h++)i=b.accept[h].extensions,i&&j.push(i);j.length&&(k=\"\\\\.\"+j.join(\",\").replace(/,/g,\"$|\\\\.\").replace(/\\*/g,\".*\")+\"$\"),m.accept=new RegExp(k,\"i\")}return m.queue=new c,m.stats=m.queue.stats,\"html5\"===this.request(\"predict-runtime-type\")?(d=a.Deferred(),this.placeholder=l=new f(\"Placeholder\"),l.connectRuntime({runtimeOrder:\"html5\"},function(){m._ruid=l.getRuid(),d.resolve()}),d.promise()):void 0},_wrapFile:function(a){if(!(a instanceof d)){if(!(a instanceof e)){if(!this._ruid)throw new Error(\"Can't add external files.\");a=new e(this._ruid,a)}a=new d(a)}return a},acceptFile:function(a){var b=!a||!a.size||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b},_addFile:function(a){var b=this;return a=b._wrapFile(a),b.owner.trigger(\"beforeFileQueued\",a)?b.acceptFile(a)?(b.queue.append(a),b.owner.trigger(\"fileQueued\",a),a):void b.owner.trigger(\"error\",\"Q_TYPE_DENIED\",a):void 0},getFile:function(a){return this.queue.getFile(a)},addFile:function(a){var b=this;a.length||(a=[a]),a=g.map(a,function(a){return b._addFile(a)}),b.owner.trigger(\"filesQueued\",a),b.options.auto&&setTimeout(function(){b.request(\"start-upload\")},20)},getStats:function(){return this.stats},removeFile:function(a,b){var c=this;a=a.id?a:c.queue.getFile(a),this.request(\"cancel-file\",a),b&&this.queue.removeFile(a)},getFiles:function(){return this.queue.getFiles.apply(this.queue,arguments)},fetchFile:function(){return this.queue.fetch.apply(this.queue,arguments)},retry:function(a,b){var c,d,e,f=this;if(a)return a=a.id?a:f.queue.getFile(a),a.setStatus(i.QUEUED),void(b||f.request(\"start-upload\"));for(c=f.queue.getFiles(i.ERROR),d=0,e=c.length;e>d;d++)a=c[d],a.setStatus(i.QUEUED);f.request(\"start-upload\")},sortFiles:function(){return this.queue.sort.apply(this.queue,arguments)},reset:function(){this.owner.trigger(\"reset\"),this.queue=new c,this.stats=this.queue.stats},destroy:function(){this.reset(),this.placeholder&&this.placeholder.destroy()}})}),b(\"widgets/runtime\",[\"uploader\",\"runtime/runtime\",\"widgets/widget\"],function(a,b){return a.support=function(){return b.hasRuntime.apply(b,arguments)},a.register({name:\"runtime\",init:function(){if(!this.predictRuntimeType())throw Error(\"Runtime Error\")},predictRuntimeType:function(){var a,c,d=this.options.runtimeOrder||b.orders,e=this.type;if(!e)for(d=d.split(/\\s*,\\s*/g),a=0,c=d.length;c>a;a++)if(b.hasRuntime(d[a])){this.type=e=d[a];break}return e}})}),b(\"lib/transport\",[\"base\",\"runtime/client\",\"mediator\"],function(a,b,c){function d(a){var c=this;a=c.options=e.extend(!0,{},d.options,a||{}),b.call(this,\"Transport\"),this._blob=null,this._formData=a.formData||{},this._headers=a.headers||{},this.on(\"progress\",this._timeout),this.on(\"load error\",function(){c.trigger(\"progress\",1),clearTimeout(c._timer)})}var e=a.$;return d.options={server:\"\",method:\"POST\",withCredentials:!1,fileVal:\"file\",timeout:12e4,formData:{},headers:{},sendAsBinary:!1},e.extend(d.prototype,{appendBlob:function(a,b,c){var d=this,e=d.options;d.getRuid()&&d.disconnectRuntime(),d.connectRuntime(b.ruid,function(){d.exec(\"init\")}),d._blob=b,e.fileVal=a||e.fileVal,e.filename=c||e.filename},append:function(a,b){\"object\"==typeof a?e.extend(this._formData,a):this._formData[a]=b},setRequestHeader:function(a,b){\"object\"==typeof a?e.extend(this._headers,a):this._headers[a]=b},send:function(a){this.exec(\"send\",a),this._timeout()},abort:function(){return clearTimeout(this._timer),this.exec(\"abort\")},destroy:function(){this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()},getResponse:function(){return this.exec(\"getResponse\")},getResponseAsJson:function(){return this.exec(\"getResponseAsJson\")},getStatus:function(){return this.exec(\"getStatus\")},_timeout:function(){var a=this,b=a.options.timeout;b&&(clearTimeout(a._timer),a._timer=setTimeout(function(){a.abort(),a.trigger(\"error\",\"timeout\")},b))}}),c.installTo(d.prototype),d}),b(\"widgets/upload\",[\"base\",\"uploader\",\"file\",\"lib/transport\",\"widgets/widget\"],function(a,b,c,d){function e(a,b){var c,d,e=[],f=a.source,g=f.size,h=b?Math.ceil(g/b):1,i=0,j=0;for(d={file:a,has:function(){return!!e.length},shift:function(){return e.shift()},unshift:function(a){e.unshift(a)}};h>j;)c=Math.min(b,g-i),e.push({file:a,start:i,end:b?i+c:g,total:g,chunks:h,chunk:j++,cuted:d}),i+=c;return a.blocks=e.concat(),a.remaning=e.length,d}var f=a.$,g=a.isPromise,h=c.Status;f.extend(b.options,{prepareNextFile:!1,chunked:!1,chunkSize:5242880,chunkRetry:2,threads:3,formData:{}}),b.register({name:\"upload\",init:function(){var b=this.owner,c=this;this.runing=!1,this.progress=!1,b.on(\"startUpload\",function(){c.progress=!0}).on(\"uploadFinished\",function(){c.progress=!1}),this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this.__tick=a.bindFn(this._tick,this),b.on(\"uploadComplete\",function(a){a.blocks&&f.each(a.blocks,function(a,b){b.transport&&(b.transport.abort(),b.transport.destroy()),delete b.transport}),delete a.blocks,delete a.remaning})},reset:function(){this.request(\"stop-upload\",!0),this.runing=!1,this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this._trigged=!1,this._promise=null},startUpload:function(b){var c=this;if(f.each(c.request(\"get-files\",h.INVALID),function(){c.request(\"remove-file\",this)}),b)if(b=b.id?b:c.request(\"get-file\",b),b.getStatus()===h.INTERRUPT)f.each(c.pool,function(a,c){c.file===b&&c.transport&&c.transport.send()}),b.setStatus(h.QUEUED);else{if(b.getStatus()===h.PROGRESS)return;b.setStatus(h.QUEUED)}else f.each(c.request(\"get-files\",[h.INITED]),function(){this.setStatus(h.QUEUED)});if(!c.runing){c.runing=!0;var d=[];f.each(c.pool,function(a,b){var e=b.file;e.getStatus()===h.INTERRUPT&&(d.push(e),c._trigged=!1,b.transport&&b.transport.send())});for(var b;b=d.shift();)b.setStatus(h.PROGRESS);b||f.each(c.request(\"get-files\",h.INTERRUPT),function(){this.setStatus(h.PROGRESS)}),c._trigged=!1,a.nextTick(c.__tick),c.owner.trigger(\"startUpload\")}},stopUpload:function(b,c){var d=this;if(b===!0&&(c=b,b=null),d.runing!==!1){if(b){if(b=b.id?b:d.request(\"get-file\",b),b.getStatus()!==h.PROGRESS&&b.getStatus()!==h.QUEUED)return;return b.setStatus(h.INTERRUPT),f.each(d.pool,function(a,c){c.file===b&&(c.transport&&c.transport.abort(),d._putback(c),d._popBlock(c))}),a.nextTick(d.__tick)}d.runing=!1,this._promise&&this._promise.file&&this._promise.file.setStatus(h.INTERRUPT),c&&f.each(d.pool,function(a,b){b.transport&&b.transport.abort(),b.file.setStatus(h.INTERRUPT)}),d.owner.trigger(\"stopUpload\")}},cancelFile:function(a){a=a.id?a:this.request(\"get-file\",a),a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),a.setStatus(h.CANCELLED),this.owner.trigger(\"fileDequeued\",a)},isInProgress:function(){return!!this.progress},_getStats:function(){return this.request(\"get-stats\")},skipFile:function(a,b){a=a.id?a:this.request(\"get-file\",a),a.setStatus(b||h.COMPLETE),a.skipped=!0,a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),this.owner.trigger(\"uploadSkip\",a)},_tick:function(){var b,c,d=this,e=d.options;return d._promise?d._promise.always(d.__tick):void(d.pool.length<e.threads&&(c=d._nextBlock())?(d._trigged=!1,b=function(b){d._promise=null,b&&b.file&&d._startSend(b),a.nextTick(d.__tick)},d._promise=g(c)?c.always(b):b(c)):d.remaning||d._getStats().numOfQueue||d._getStats().numofInterrupt||(d.runing=!1,d._trigged||a.nextTick(function(){d.owner.trigger(\"uploadFinished\")}),d._trigged=!0))},_putback:function(a){var b;a.cuted.unshift(a),b=this.stack.indexOf(a.cuted),~b||this.stack.unshift(a.cuted)},_getStack:function(){for(var a,b=0;a=this.stack[b++];){if(a.has()&&a.file.getStatus()===h.PROGRESS)return a;(!a.has()||a.file.getStatus()!==h.PROGRESS&&a.file.getStatus()!==h.INTERRUPT)&&this.stack.splice(--b,1)}return null},_nextBlock:function(){var a,b,c,d,f=this,h=f.options;return(a=this._getStack())?(h.prepareNextFile&&!f.pending.length&&f._prepareNextFile(),a.shift()):f.runing?(!f.pending.length&&f._getStats().numOfQueue&&f._prepareNextFile(),b=f.pending.shift(),c=function(b){return b?(a=e(b,h.chunked?h.chunkSize:0),f.stack.push(a),a.shift()):null},g(b)?(d=b.file,b=b[b.pipe?\"pipe\":\"then\"](c),b.file=d,b):c(b)):void 0},_prepareNextFile:function(){var a,b=this,c=b.request(\"fetch-file\"),d=b.pending;c&&(a=b.request(\"before-send-file\",c,function(){return c.getStatus()===h.PROGRESS||c.getStatus()===h.INTERRUPT?c:b._finishFile(c)}),b.owner.trigger(\"uploadStart\",c),c.setStatus(h.PROGRESS),a.file=c,a.done(function(){var b=f.inArray(a,d);~b&&d.splice(b,1,c)}),a.fail(function(a){c.setStatus(h.ERROR,a),b.owner.trigger(\"uploadError\",c,a),b.owner.trigger(\"uploadComplete\",c)}),d.push(a))},_popBlock:function(a){var b=f.inArray(a,this.pool);this.pool.splice(b,1),a.file.remaning--,this.remaning--},_startSend:function(b){var c,d=this,e=b.file;return e.getStatus()!==h.PROGRESS?void(e.getStatus()===h.INTERRUPT&&d._putback(b)):(d.pool.push(b),d.remaning++,b.blob=1===b.chunks?e.source:e.source.slice(b.start,b.end),c=d.request(\"before-send\",b,function(){e.getStatus()===h.PROGRESS?d._doSend(b):(d._popBlock(b),a.nextTick(d.__tick))}),void c.fail(function(){1===e.remaning?d._finishFile(e).always(function(){b.percentage=1,d._popBlock(b),d.owner.trigger(\"uploadComplete\",e),a.nextTick(d.__tick)}):(b.percentage=1,d.updateFileProgress(e),d._popBlock(b),a.nextTick(d.__tick))}))},_doSend:function(b){var c,e,g=this,i=g.owner,j=g.options,k=b.file,l=new d(j),m=f.extend({},j.formData),n=f.extend({},j.headers);b.transport=l,l.on(\"destroy\",function(){delete b.transport,g._popBlock(b),a.nextTick(g.__tick)}),l.on(\"progress\",function(a){b.percentage=a,g.updateFileProgress(k)}),c=function(a){var c;return e=l.getResponseAsJson()||{},e._raw=l.getResponse(),c=function(b){a=b},i.trigger(\"uploadAccept\",b,e,c)||(a=a||\"server\"),a},l.on(\"error\",function(a,d){b.retried=b.retried||0,b.chunks>1&&~\"http,abort\".indexOf(a)&&b.retried<j.chunkRetry?(b.retried++,l.send()):(d||\"server\"!==a||(a=c(a)),k.setStatus(h.ERROR,a),i.trigger(\"uploadError\",k,a),i.trigger(\"uploadComplete\",k))}),l.on(\"load\",function(){var a;return(a=c())?void l.trigger(\"error\",a,!0):void(1===k.remaning?g._finishFile(k,e):l.destroy())}),m=f.extend(m,{id:k.id,name:k.name,type:k.type,lastModifiedDate:k.lastModifiedDate,size:k.size}),b.chunks>1&&f.extend(m,{chunks:b.chunks,chunk:b.chunk}),i.trigger(\"uploadBeforeSend\",b,m,n),l.appendBlob(j.fileVal,b.blob,k.name),l.append(m),l.setRequestHeader(n),l.send()},_finishFile:function(a,b,c){var d=this.owner;return d.request(\"after-send-file\",arguments,function(){a.setStatus(h.COMPLETE),d.trigger(\"uploadSuccess\",a,b,c)}).fail(function(b){a.getStatus()===h.PROGRESS&&a.setStatus(h.ERROR,b),d.trigger(\"uploadError\",a,b)\n}).always(function(){d.trigger(\"uploadComplete\",a)})},updateFileProgress:function(a){var b=0,c=0;a.blocks&&(f.each(a.blocks,function(a,b){c+=(b.percentage||0)*(b.end-b.start)}),b=c/a.size,this.owner.trigger(\"uploadProgress\",a,b||0))}})}),b(\"widgets/validator\",[\"base\",\"uploader\",\"file\",\"widgets/widget\"],function(a,b,c){var d,e=a.$,f={};return d={addValidator:function(a,b){f[a]=b},removeValidator:function(a){delete f[a]}},b.register({name:\"validator\",init:function(){var b=this;a.nextTick(function(){e.each(f,function(){this.call(b.owner)})})}}),d.addValidator(\"fileNumLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileNumLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){return c>=d&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_NUM_LIMIT\",d,a),setTimeout(function(){e=!0},1)),c>=d?!1:!0}),a.on(\"fileQueued\",function(){c++}),a.on(\"fileDequeued\",function(){c--}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSizeLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileSizeLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){var b=c+a.size>d;return b&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_SIZE_LIMIT\",d,a),setTimeout(function(){e=!0},1)),b?!1:!0}),a.on(\"fileQueued\",function(a){c+=a.size}),a.on(\"fileDequeued\",function(a){c-=a.size}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSingleSizeLimit\",function(){var a=this,b=a.options,d=b.fileSingleSizeLimit;d&&a.on(\"beforeFileQueued\",function(a){return a.size>d?(a.setStatus(c.Status.INVALID,\"exceed_size\"),this.trigger(\"error\",\"F_EXCEED_SIZE\",d,a),!1):void 0})}),d.addValidator(\"duplicate\",function(){function a(a){for(var b,c=0,d=0,e=a.length;e>d;d++)b=a.charCodeAt(d),c=b+(c<<6)+(c<<16)-c;return c}var b=this,c=b.options,d={};c.duplicate||(b.on(\"beforeFileQueued\",function(b){var c=b.__hash||(b.__hash=a(b.name+b.size+b.lastModifiedDate));return d[c]?(this.trigger(\"error\",\"F_DUPLICATE\",b),!1):void 0}),b.on(\"fileQueued\",function(a){var b=a.__hash;b&&(d[b]=!0)}),b.on(\"fileDequeued\",function(a){var b=a.__hash;b&&delete d[b]}),b.on(\"reset\",function(){d={}}))}),d}),b(\"lib/md5\",[\"runtime/client\",\"mediator\"],function(a,b){function c(){a.call(this,\"Md5\")}return b.installTo(c.prototype),c.prototype.loadFromBlob=function(a){var b=this;b.getRuid()&&b.disconnectRuntime(),b.connectRuntime(a.ruid,function(){b.exec(\"init\"),b.exec(\"loadFromBlob\",a)})},c.prototype.getResult=function(){return this.exec(\"getResult\")},c}),b(\"widgets/md5\",[\"base\",\"uploader\",\"lib/md5\",\"lib/blob\",\"widgets/widget\"],function(a,b,c,d){return b.register({name:\"md5\",md5File:function(b,e,f){var g=new c,h=a.Deferred(),i=b instanceof d?b:this.request(\"get-file\",b).source;return g.on(\"progress load\",function(a){a=a||{},h.notify(a.total?a.loaded/a.total:1)}),g.on(\"complete\",function(){h.resolve(g.getResult())}),g.on(\"error\",function(a){h.reject(a)}),arguments.length>1&&(e=e||0,f=f||0,0>e&&(e=i.size+e),0>f&&(f=i.size+f),f=Math.min(f,i.size),i=i.slice(e,f)),g.loadFromBlob(i),h.promise()}})}),b(\"runtime/compbase\",[],function(){function a(a,b){this.owner=a,this.options=a.options,this.getRuntime=function(){return b},this.getRuid=function(){return b.uid},this.trigger=function(){return a.trigger.apply(a,arguments)}}return a}),b(\"runtime/html5/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a={},d=this,e=this.destroy;c.apply(d,arguments),d.type=f,d.exec=function(c,e){var f,h=this,i=h.uid,j=b.slice(arguments,2);return g[c]&&(f=a[i]=a[i]||new g[c](h,d),f[e])?f[e].apply(f,j):void 0},d.destroy=function(){return e&&e.apply(this,arguments)}}var f=\"html5\",g={};return b.inherits(c,{constructor:e,init:function(){var a=this;setTimeout(function(){a.trigger(\"ready\")},1)}}),e.register=function(a,c){var e=g[a]=b.inherits(d,c);return e},a.Blob&&a.FileReader&&a.DataView&&c.addRuntime(f,e),e}),b(\"runtime/html5/blob\",[\"runtime/html5/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.owner.source,e=d.slice||d.webkitSlice||d.mozSlice;return d=e.call(d,a,c),new b(this.getRuid(),d)}})}),b(\"runtime/html5/dnd\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){var d=a.$,e=\"webuploader-dnd-\";return b.register(\"DragAndDrop\",{init:function(){var b=this.elem=this.options.container;this.dragEnterHandler=a.bindFn(this._dragEnterHandler,this),this.dragOverHandler=a.bindFn(this._dragOverHandler,this),this.dragLeaveHandler=a.bindFn(this._dragLeaveHandler,this),this.dropHandler=a.bindFn(this._dropHandler,this),this.dndOver=!1,b.on(\"dragenter\",this.dragEnterHandler),b.on(\"dragover\",this.dragOverHandler),b.on(\"dragleave\",this.dragLeaveHandler),b.on(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).on(\"dragover\",this.dragOverHandler),d(document).on(\"drop\",this.dropHandler))},_dragEnterHandler:function(a){var b,c=this,d=c._denied||!1;return a=a.originalEvent||a,c.dndOver||(c.dndOver=!0,b=a.dataTransfer.items,b&&b.length&&(c._denied=d=!c.trigger(\"accept\",b)),c.elem.addClass(e+\"over\"),c.elem[d?\"addClass\":\"removeClass\"](e+\"denied\")),a.dataTransfer.dropEffect=d?\"none\":\"copy\",!1},_dragOverHandler:function(a){var b=this.elem.parent().get(0);return b&&!d.contains(b,a.currentTarget)?!1:(clearTimeout(this._leaveTimer),this._dragEnterHandler.call(this,a),!1)},_dragLeaveHandler:function(){var a,b=this;return a=function(){b.dndOver=!1,b.elem.removeClass(e+\"over \"+e+\"denied\")},clearTimeout(b._leaveTimer),b._leaveTimer=setTimeout(a,100),!1},_dropHandler:function(a){var b,f,g=this,h=g.getRuid(),i=g.elem.parent().get(0);if(i&&!d.contains(i,a.currentTarget))return!1;a=a.originalEvent||a,b=a.dataTransfer;try{f=b.getData(\"text/html\")}catch(j){}return f?void 0:(g._getTansferFiles(b,function(a){g.trigger(\"drop\",d.map(a,function(a){return new c(h,a)}))}),g.dndOver=!1,g.elem.removeClass(e+\"over\"),!1)},_getTansferFiles:function(b,c){var d,e,f,g,h,i,j,k=[],l=[];for(d=b.items,e=b.files,j=!(!d||!d[0].webkitGetAsEntry),h=0,i=e.length;i>h;h++)f=e[h],g=d&&d[h],j&&g.webkitGetAsEntry().isDirectory?l.push(this._traverseDirectoryTree(g.webkitGetAsEntry(),k)):k.push(f);a.when.apply(a,l).done(function(){k.length&&c(k)})},_traverseDirectoryTree:function(b,c){var d=a.Deferred(),e=this;return b.isFile?b.file(function(a){c.push(a),d.resolve()}):b.isDirectory&&b.createReader().readEntries(function(b){var f,g=b.length,h=[],i=[];for(f=0;g>f;f++)h.push(e._traverseDirectoryTree(b[f],i));a.when.apply(a,h).then(function(){c.push.apply(c,i),d.resolve()},d.reject)}),d.promise()},destroy:function(){var a=this.elem;a&&(a.off(\"dragenter\",this.dragEnterHandler),a.off(\"dragover\",this.dragOverHandler),a.off(\"dragleave\",this.dragLeaveHandler),a.off(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).off(\"dragover\",this.dragOverHandler),d(document).off(\"drop\",this.dropHandler)))}})}),b(\"runtime/html5/filepaste\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){return b.register(\"FilePaste\",{init:function(){var b,c,d,e,f=this.options,g=this.elem=f.container,h=\".*\";if(f.accept){for(b=[],c=0,d=f.accept.length;d>c;c++)e=f.accept[c].mimeTypes,e&&b.push(e);b.length&&(h=b.join(\",\"),h=h.replace(/,/g,\"|\").replace(/\\*/g,\".*\"))}this.accept=h=new RegExp(h,\"i\"),this.hander=a.bindFn(this._pasteHander,this),g.on(\"paste\",this.hander)},_pasteHander:function(a){var b,d,e,f,g,h=[],i=this.getRuid();for(a=a.originalEvent||a,b=a.clipboardData.items,f=0,g=b.length;g>f;f++)d=b[f],\"file\"===d.kind&&(e=d.getAsFile())&&h.push(new c(i,e));h.length&&(a.preventDefault(),a.stopPropagation(),this.trigger(\"paste\",h))},destroy:function(){this.elem.off(\"paste\",this.hander)}})}),b(\"runtime/html5/filepicker\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(){var a,b,d,e,f=this.getRuntime().getContainer(),g=this,h=g.owner,i=g.options,j=this.label=c(document.createElement(\"label\")),k=this.input=c(document.createElement(\"input\"));if(k.attr(\"type\",\"file\"),k.attr(\"name\",i.name),k.addClass(\"webuploader-element-invisible\"),j.on(\"click\",function(){k.trigger(\"click\")}),j.css({opacity:0,width:\"100%\",height:\"100%\",display:\"block\",cursor:\"pointer\",background:\"#ffffff\"}),i.multiple&&k.attr(\"multiple\",\"multiple\"),i.accept&&i.accept.length>0){for(a=[],b=0,d=i.accept.length;d>b;b++)a.push(i.accept[b].mimeTypes);k.attr(\"accept\",a.join(\",\"))}f.append(k),f.append(j),e=function(a){h.trigger(a.type)},k.on(\"change\",function(a){var b,d=arguments.callee;g.files=a.target.files,b=this.cloneNode(!0),b.value=null,this.parentNode.replaceChild(b,this),k.off(),k=c(b).on(\"change\",d).on(\"mouseenter mouseleave\",e),h.trigger(\"change\")}),j.on(\"mouseenter mouseleave\",e)},getFiles:function(){return this.files},destroy:function(){this.input.off(),this.label.off()}})}),b(\"runtime/html5/util\",[\"base\"],function(b){var c=a.createObjectURL&&a||a.URL&&URL.revokeObjectURL&&URL||a.webkitURL,d=b.noop,e=d;return c&&(d=function(){return c.createObjectURL.apply(c,arguments)},e=function(){return c.revokeObjectURL.apply(c,arguments)}),{createObjectURL:d,revokeObjectURL:e,dataURL2Blob:function(a){var b,c,d,e,f,g;for(g=a.split(\",\"),b=~g[0].indexOf(\"base64\")?atob(g[1]):decodeURIComponent(g[1]),d=new ArrayBuffer(b.length),c=new Uint8Array(d),e=0;e<b.length;e++)c[e]=b.charCodeAt(e);return f=g[0].split(\":\")[1].split(\";\")[0],this.arrayBufferToBlob(d,f)},dataURL2ArrayBuffer:function(a){var b,c,d,e;for(e=a.split(\",\"),b=~e[0].indexOf(\"base64\")?atob(e[1]):decodeURIComponent(e[1]),c=new Uint8Array(b.length),d=0;d<b.length;d++)c[d]=b.charCodeAt(d);return c.buffer},arrayBufferToBlob:function(b,c){var d,e=a.BlobBuilder||a.WebKitBlobBuilder;return e?(d=new e,d.append(b),d.getBlob(c)):new Blob([b],c?{type:c}:{})},canvasToDataUrl:function(a,b,c){return a.toDataURL(b,c/100)},parseMeta:function(a,b){b(!1,{})},updateImageHead:function(a){return a}}}),b(\"runtime/html5/imagemeta\",[\"runtime/html5/util\"],function(a){var b;return b={parsers:{65505:[]},maxMetaDataSize:262144,parse:function(a,b){var c=this,d=new FileReader;d.onload=function(){b(!1,c._parse(this.result)),d=d.onload=d.onerror=null},d.onerror=function(a){b(a.message),d=d.onload=d.onerror=null},a=a.slice(0,c.maxMetaDataSize),d.readAsArrayBuffer(a.getSource())},_parse:function(a,c){if(!(a.byteLength<6)){var d,e,f,g,h=new DataView(a),i=2,j=h.byteLength-4,k=i,l={};if(65496===h.getUint16(0)){for(;j>i&&(d=h.getUint16(i),d>=65504&&65519>=d||65534===d)&&(e=h.getUint16(i+2)+2,!(i+e>h.byteLength));){if(f=b.parsers[d],!c&&f)for(g=0;g<f.length;g+=1)f[g].call(b,h,i,e,l);i+=e,k=i}k>6&&(l.imageHead=a.slice?a.slice(2,k):new Uint8Array(a).subarray(2,k))}return l}},updateImageHead:function(a,b){var c,d,e,f=this._parse(a,!0);return e=2,f.imageHead&&(e=2+f.imageHead.byteLength),d=a.slice?a.slice(e):new Uint8Array(a).subarray(e),c=new Uint8Array(b.byteLength+2+d.byteLength),c[0]=255,c[1]=216,c.set(new Uint8Array(b),2),c.set(new Uint8Array(d),b.byteLength+2),c.buffer}},a.parseMeta=function(){return b.parse.apply(b,arguments)},a.updateImageHead=function(){return b.updateImageHead.apply(b,arguments)},b}),b(\"runtime/html5/imagemeta/exif\",[\"base\",\"runtime/html5/imagemeta\"],function(a,b){var c={};return c.ExifMap=function(){return this},c.ExifMap.prototype.map={Orientation:274},c.ExifMap.prototype.get=function(a){return this[a]||this[this.map[a]]},c.exifTagTypes={1:{getValue:function(a,b){return a.getUint8(b)},size:1},2:{getValue:function(a,b){return String.fromCharCode(a.getUint8(b))},size:1,ascii:!0},3:{getValue:function(a,b,c){return a.getUint16(b,c)},size:2},4:{getValue:function(a,b,c){return a.getUint32(b,c)},size:4},5:{getValue:function(a,b,c){return a.getUint32(b,c)/a.getUint32(b+4,c)},size:8},9:{getValue:function(a,b,c){return a.getInt32(b,c)},size:4},10:{getValue:function(a,b,c){return a.getInt32(b,c)/a.getInt32(b+4,c)},size:8}},c.exifTagTypes[7]=c.exifTagTypes[1],c.getExifValue=function(b,d,e,f,g,h){var i,j,k,l,m,n,o=c.exifTagTypes[f];if(!o)return void a.log(\"Invalid Exif data: Invalid tag type.\");if(i=o.size*g,j=i>4?d+b.getUint32(e+8,h):e+8,j+i>b.byteLength)return void a.log(\"Invalid Exif data: Invalid data offset.\");if(1===g)return o.getValue(b,j,h);for(k=[],l=0;g>l;l+=1)k[l]=o.getValue(b,j+l*o.size,h);if(o.ascii){for(m=\"\",l=0;l<k.length&&(n=k[l],\"\\x00\"!==n);l+=1)m+=n;return m}return k},c.parseExifTag=function(a,b,d,e,f){var g=a.getUint16(d,e);f.exif[g]=c.getExifValue(a,b,d,a.getUint16(d+2,e),a.getUint32(d+4,e),e)},c.parseExifTags=function(b,c,d,e,f){var g,h,i;if(d+6>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory offset.\");if(g=b.getUint16(d,e),h=d+2+12*g,h+4>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory size.\");for(i=0;g>i;i+=1)this.parseExifTag(b,c,d+2+12*i,e,f);return b.getUint32(h,e)},c.parseExifData=function(b,d,e,f){var g,h,i=d+10;if(1165519206===b.getUint32(d+4)){if(i+8>b.byteLength)return void a.log(\"Invalid Exif data: Invalid segment size.\");if(0!==b.getUint16(d+8))return void a.log(\"Invalid Exif data: Missing byte alignment offset.\");switch(b.getUint16(i)){case 18761:g=!0;break;case 19789:g=!1;break;default:return void a.log(\"Invalid Exif data: Invalid byte alignment marker.\")}if(42!==b.getUint16(i+2,g))return void a.log(\"Invalid Exif data: Missing TIFF marker.\");h=b.getUint32(i+4,g),f.exif=new c.ExifMap,h=c.parseExifTags(b,i,i+h,g,f)}},b.parsers[65505].push(c.parseExifData),c}),b(\"runtime/html5/jpegencoder\",[],function(){function a(a){function b(a){for(var b=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],c=0;64>c;c++){var d=y((b[c]*a+50)/100);1>d?d=1:d>255&&(d=255),z[P[c]]=d}for(var e=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],f=0;64>f;f++){var g=y((e[f]*a+50)/100);1>g?g=1:g>255&&(g=255),A[P[f]]=g}for(var h=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],i=0,j=0;8>j;j++)for(var k=0;8>k;k++)B[i]=1/(z[P[i]]*h[j]*h[k]*8),C[i]=1/(A[P[i]]*h[j]*h[k]*8),i++}function c(a,b){for(var c=0,d=0,e=new Array,f=1;16>=f;f++){for(var g=1;g<=a[f];g++)e[b[d]]=[],e[b[d]][0]=c,e[b[d]][1]=f,d++,c++;c*=2}return e}function d(){t=c(Q,R),u=c(U,V),v=c(S,T),w=c(W,X)}function e(){for(var a=1,b=2,c=1;15>=c;c++){for(var d=a;b>d;d++)E[32767+d]=c,D[32767+d]=[],D[32767+d][1]=c,D[32767+d][0]=d;for(var e=-(b-1);-a>=e;e++)E[32767+e]=c,D[32767+e]=[],D[32767+e][1]=c,D[32767+e][0]=b-1+e;a<<=1,b<<=1}}function f(){for(var a=0;256>a;a++)O[a]=19595*a,O[a+256>>0]=38470*a,O[a+512>>0]=7471*a+32768,O[a+768>>0]=-11059*a,O[a+1024>>0]=-21709*a,O[a+1280>>0]=32768*a+8421375,O[a+1536>>0]=-27439*a,O[a+1792>>0]=-5329*a}function g(a){for(var b=a[0],c=a[1]-1;c>=0;)b&1<<c&&(I|=1<<J),c--,J--,0>J&&(255==I?(h(255),h(0)):h(I),J=7,I=0)}function h(a){H.push(N[a])}function i(a){h(a>>8&255),h(255&a)}function j(a,b){var c,d,e,f,g,h,i,j,k,l=0,m=8,n=64;for(k=0;m>k;++k){c=a[l],d=a[l+1],e=a[l+2],f=a[l+3],g=a[l+4],h=a[l+5],i=a[l+6],j=a[l+7];var o=c+j,p=c-j,q=d+i,r=d-i,s=e+h,t=e-h,u=f+g,v=f-g,w=o+u,x=o-u,y=q+s,z=q-s;a[l]=w+y,a[l+4]=w-y;var A=.707106781*(z+x);a[l+2]=x+A,a[l+6]=x-A,w=v+t,y=t+r,z=r+p;var B=.382683433*(w-z),C=.5411961*w+B,D=1.306562965*z+B,E=.707106781*y,G=p+E,H=p-E;a[l+5]=H+C,a[l+3]=H-C,a[l+1]=G+D,a[l+7]=G-D,l+=8}for(l=0,k=0;m>k;++k){c=a[l],d=a[l+8],e=a[l+16],f=a[l+24],g=a[l+32],h=a[l+40],i=a[l+48],j=a[l+56];var I=c+j,J=c-j,K=d+i,L=d-i,M=e+h,N=e-h,O=f+g,P=f-g,Q=I+O,R=I-O,S=K+M,T=K-M;a[l]=Q+S,a[l+32]=Q-S;var U=.707106781*(T+R);a[l+16]=R+U,a[l+48]=R-U,Q=P+N,S=N+L,T=L+J;var V=.382683433*(Q-T),W=.5411961*Q+V,X=1.306562965*T+V,Y=.707106781*S,Z=J+Y,$=J-Y;a[l+40]=$+W,a[l+24]=$-W,a[l+8]=Z+X,a[l+56]=Z-X,l++}var _;for(k=0;n>k;++k)_=a[k]*b[k],F[k]=_>0?_+.5|0:_-.5|0;return F}function k(){i(65504),i(16),h(74),h(70),h(73),h(70),h(0),h(1),h(1),h(0),i(1),i(1),h(0),h(0)}function l(a,b){i(65472),i(17),h(8),i(b),i(a),h(3),h(1),h(17),h(0),h(2),h(17),h(1),h(3),h(17),h(1)}function m(){i(65499),i(132),h(0);for(var a=0;64>a;a++)h(z[a]);h(1);for(var b=0;64>b;b++)h(A[b])}function n(){i(65476),i(418),h(0);for(var a=0;16>a;a++)h(Q[a+1]);for(var b=0;11>=b;b++)h(R[b]);h(16);for(var c=0;16>c;c++)h(S[c+1]);for(var d=0;161>=d;d++)h(T[d]);h(1);for(var e=0;16>e;e++)h(U[e+1]);for(var f=0;11>=f;f++)h(V[f]);h(17);for(var g=0;16>g;g++)h(W[g+1]);for(var j=0;161>=j;j++)h(X[j])}function o(){i(65498),i(12),h(3),h(1),h(0),h(2),h(17),h(3),h(17),h(0),h(63),h(0)}function p(a,b,c,d,e){for(var f,h=e[0],i=e[240],k=16,l=63,m=64,n=j(a,b),o=0;m>o;++o)G[P[o]]=n[o];var p=G[0]-c;c=G[0],0==p?g(d[0]):(f=32767+p,g(d[E[f]]),g(D[f]));for(var q=63;q>0&&0==G[q];q--);if(0==q)return g(h),c;for(var r,s=1;q>=s;){for(var t=s;0==G[s]&&q>=s;++s);var u=s-t;if(u>=k){r=u>>4;for(var v=1;r>=v;++v)g(i);u=15&u}f=32767+G[s],g(e[(u<<4)+E[f]]),g(D[f]),s++}return q!=l&&g(h),c}function q(){for(var a=String.fromCharCode,b=0;256>b;b++)N[b]=a(b)}function r(a){if(0>=a&&(a=1),a>100&&(a=100),x!=a){var c=0;c=Math.floor(50>a?5e3/a:200-2*a),b(c),x=a}}function s(){a||(a=50),q(),d(),e(),f(),r(a)}var t,u,v,w,x,y=(Math.round,Math.floor),z=new Array(64),A=new Array(64),B=new Array(64),C=new Array(64),D=new Array(65535),E=new Array(65535),F=new Array(64),G=new Array(64),H=[],I=0,J=7,K=new Array(64),L=new Array(64),M=new Array(64),N=new Array(256),O=new Array(2048),P=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],Q=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],R=[0,1,2,3,4,5,6,7,8,9,10,11],S=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],T=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],U=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],V=[0,1,2,3,4,5,6,7,8,9,10,11],W=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],X=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];this.encode=function(a,b){b&&r(b),H=new Array,I=0,J=7,i(65496),k(),m(),l(a.width,a.height),n(),o();var c=0,d=0,e=0;I=0,J=7,this.encode.displayName=\"_encode_\";for(var f,h,j,q,s,x,y,z,A,D=a.data,E=a.width,F=a.height,G=4*E,N=0;F>N;){for(f=0;G>f;){for(s=G*N+f,x=s,y=-1,z=0,A=0;64>A;A++)z=A>>3,y=4*(7&A),x=s+z*G+y,N+z>=F&&(x-=G*(N+1+z-F)),f+y>=G&&(x-=f+y-G+4),h=D[x++],j=D[x++],q=D[x++],K[A]=(O[h]+O[j+256>>0]+O[q+512>>0]>>16)-128,L[A]=(O[h+768>>0]+O[j+1024>>0]+O[q+1280>>0]>>16)-128,M[A]=(O[h+1280>>0]+O[j+1536>>0]+O[q+1792>>0]>>16)-128;c=p(K,B,c,t,v),d=p(L,C,d,u,w),e=p(M,C,e,u,w),f+=32}N+=8}if(J>=0){var P=[];P[1]=J+1,P[0]=(1<<J+1)-1,g(P)}i(65497);var Q=\"data:image/jpeg;base64,\"+btoa(H.join(\"\"));return H=[],Q},s()}return a.encode=function(b,c){var d=new a(c);return d.encode(b)},a}),b(\"runtime/html5/androidpatch\",[\"runtime/html5/util\",\"runtime/html5/jpegencoder\",\"base\"],function(a,b,c){var d,e=a.canvasToDataUrl;a.canvasToDataUrl=function(a,f,g){var h,i,j,k,l;return c.os.android?(\"image/jpeg\"===f&&\"undefined\"==typeof d&&(k=e.apply(null,arguments),l=k.split(\",\"),k=~l[0].indexOf(\"base64\")?atob(l[1]):decodeURIComponent(l[1]),k=k.substring(0,2),d=255===k.charCodeAt(0)&&216===k.charCodeAt(1)),\"image/jpeg\"!==f||d?e.apply(null,arguments):(i=a.width,j=a.height,h=a.getContext(\"2d\"),b.encode(h.getImageData(0,0,i,j),g))):e.apply(null,arguments)}}),b(\"runtime/html5/image\",[\"base\",\"runtime/html5/runtime\",\"runtime/html5/util\"],function(a,b,c){var d=\"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D\";return b.register(\"Image\",{modified:!1,init:function(){var a=this,b=new Image;b.onload=function(){a._info={type:a.type,width:this.width,height:this.height},a._metas||\"image/jpeg\"!==a.type?a.owner.trigger(\"load\"):c.parseMeta(a._blob,function(b,c){a._metas=c,a.owner.trigger(\"load\")})},b.onerror=function(){a.owner.trigger(\"error\")},a._img=b},loadFromBlob:function(a){var b=this,d=b._img;b._blob=a,b.type=a.type,d.src=c.createObjectURL(a.getSource()),b.owner.once(\"load\",function(){c.revokeObjectURL(d.src)})},resize:function(a,b){var c=this._canvas||(this._canvas=document.createElement(\"canvas\"));this._resize(this._img,c,a,b),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"resize\")},crop:function(a,b,c,d,e){var f=this._canvas||(this._canvas=document.createElement(\"canvas\")),g=this.options,h=this._img,i=h.naturalWidth,j=h.naturalHeight,k=this.getOrientation();e=e||1,f.width=c,f.height=d,g.preserveHeaders||this._rotate2Orientaion(f,k),this._renderImageToCanvas(f,h,-a,-b,i*e,j*e),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"crop\")},getAsBlob:function(a){var b,d=this._blob,e=this.options;if(a=a||this.type,this.modified||this.type!==a){if(b=this._canvas,\"image/jpeg\"===a){if(d=c.canvasToDataUrl(b,a,e.quality),e.preserveHeaders&&this._metas&&this._metas.imageHead)return d=c.dataURL2ArrayBuffer(d),d=c.updateImageHead(d,this._metas.imageHead),d=c.arrayBufferToBlob(d,a)}else d=c.canvasToDataUrl(b,a);d=c.dataURL2Blob(d)}return d},getAsDataUrl:function(a){var b=this.options;return a=a||this.type,\"image/jpeg\"===a?c.canvasToDataUrl(this._canvas,a,b.quality):this._canvas.toDataURL(a)},getOrientation:function(){return this._metas&&this._metas.exif&&this._metas.exif.get(\"Orientation\")||1},info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},destroy:function(){var a=this._canvas;this._img.onload=null,a&&(a.getContext(\"2d\").clearRect(0,0,a.width,a.height),a.width=a.height=0,this._canvas=null),this._img.src=d,this._img=this._blob=null},_resize:function(a,b,c,d){var e,f,g,h,i,j=this.options,k=a.width,l=a.height,m=this.getOrientation();~[5,6,7,8].indexOf(m)&&(c^=d,d^=c,c^=d),e=Math[j.crop?\"max\":\"min\"](c/k,d/l),j.allowMagnify||(e=Math.min(1,e)),f=k*e,g=l*e,j.crop?(b.width=c,b.height=d):(b.width=f,b.height=g),h=(b.width-f)/2,i=(b.height-g)/2,j.preserveHeaders||this._rotate2Orientaion(b,m),this._renderImageToCanvas(b,a,h,i,f,g)},_rotate2Orientaion:function(a,b){var c=a.width,d=a.height,e=a.getContext(\"2d\");switch(b){case 5:case 6:case 7:case 8:a.width=d,a.height=c}switch(b){case 2:e.translate(c,0),e.scale(-1,1);break;case 3:e.translate(c,d),e.rotate(Math.PI);break;case 4:e.translate(0,d),e.scale(1,-1);break;case 5:e.rotate(.5*Math.PI),e.scale(1,-1);break;case 6:e.rotate(.5*Math.PI),e.translate(0,-d);break;case 7:e.rotate(.5*Math.PI),e.translate(c,-d),e.scale(-1,1);break;case 8:e.rotate(-.5*Math.PI),e.translate(-c,0)}},_renderImageToCanvas:function(){function b(a,b,c){var d,e,f,g=document.createElement(\"canvas\"),h=g.getContext(\"2d\"),i=0,j=c,k=c;for(g.width=1,g.height=c,h.drawImage(a,0,0),d=h.getImageData(0,0,1,c).data;k>i;)e=d[4*(k-1)+3],0===e?j=k:i=k,k=j+i>>1;return f=k/c,0===f?1:f}function c(a){var b,c,d=a.naturalWidth,e=a.naturalHeight;return d*e>1048576?(b=document.createElement(\"canvas\"),b.width=b.height=1,c=b.getContext(\"2d\"),c.drawImage(a,-d+1,0),0===c.getImageData(0,0,1,1).data[3]):!1}return a.os.ios?a.os.ios>=7?function(a,c,d,e,f,g){var h=c.naturalWidth,i=c.naturalHeight,j=b(c,h,i);return a.getContext(\"2d\").drawImage(c,0,0,h*j,i*j,d,e,f,g)}:function(a,d,e,f,g,h){var i,j,k,l,m,n,o,p=d.naturalWidth,q=d.naturalHeight,r=a.getContext(\"2d\"),s=c(d),t=\"image/jpeg\"===this.type,u=1024,v=0,w=0;for(s&&(p/=2,q/=2),r.save(),i=document.createElement(\"canvas\"),i.width=i.height=u,j=i.getContext(\"2d\"),k=t?b(d,p,q):1,l=Math.ceil(u*g/p),m=Math.ceil(u*h/q/k);q>v;){for(n=0,o=0;p>n;)j.clearRect(0,0,u,u),j.drawImage(d,-n,-v),r.drawImage(i,0,0,u,u,e+o,f+w,l,m),n+=u,o+=l;v+=u,w+=m}r.restore(),i=j=null}:function(b){var c=a.slice(arguments,1),d=b.getContext(\"2d\");d.drawImage.apply(d,c)}}()})}),b(\"runtime/html5/transport\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.noop,d=a.$;return b.register(\"Transport\",{init:function(){this._status=0,this._response=null},send:function(){var b,c,e,f=this.owner,g=this.options,h=this._initAjax(),i=f._blob,j=g.server;g.sendAsBinary?(j+=(/\\?/.test(j)?\"&\":\"?\")+d.param(f._formData),c=i.getSource()):(b=new FormData,d.each(f._formData,function(a,c){b.append(a,c)}),b.append(g.fileVal,i.getSource(),g.filename||f._formData.name||\"\")),g.withCredentials&&\"withCredentials\"in h?(h.open(g.method,j,!0),h.withCredentials=!0):h.open(g.method,j),this._setRequestHeader(h,g.headers),c?(h.overrideMimeType&&h.overrideMimeType(\"application/octet-stream\"),a.os.android?(e=new FileReader,e.onload=function(){h.send(this.result),e=e.onload=null},e.readAsArrayBuffer(c)):h.send(c)):h.send(b)},getResponse:function(){return this._response},getResponseAsJson:function(){return this._parseJson(this._response)},getStatus:function(){return this._status},abort:function(){var a=this._xhr;a&&(a.upload.onprogress=c,a.onreadystatechange=c,a.abort(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var a=this,b=new XMLHttpRequest,d=this.options;return!d.withCredentials||\"withCredentials\"in b||\"undefined\"==typeof XDomainRequest||(b=new XDomainRequest),b.upload.onprogress=function(b){var c=0;return b.lengthComputable&&(c=b.loaded/b.total),a.trigger(\"progress\",c)},b.onreadystatechange=function(){return 4===b.readyState?(b.upload.onprogress=c,b.onreadystatechange=c,a._xhr=null,a._status=b.status,b.status>=200&&b.status<300?(a._response=b.responseText,a.trigger(\"load\")):b.status>=500&&b.status<600?(a._response=b.responseText,a.trigger(\"error\",\"server\")):a.trigger(\"error\",a._status?\"http\":\"abort\")):void 0},a._xhr=b,b},_setRequestHeader:function(a,b){d.each(b,function(b,c){a.setRequestHeader(b,c)})},_parseJson:function(a){var b;try{b=JSON.parse(a)}catch(c){b={}}return b}})}),b(\"runtime/html5/md5\",[\"runtime/html5/runtime\"],function(a){var b=function(a,b){return a+b&4294967295},c=function(a,c,d,e,f,g){return c=b(b(c,a),b(e,g)),b(c<<f|c>>>32-f,d)},d=function(a,b,d,e,f,g,h){return c(b&d|~b&e,a,b,f,g,h)},e=function(a,b,d,e,f,g,h){return c(b&e|d&~e,a,b,f,g,h)},f=function(a,b,d,e,f,g,h){return c(b^d^e,a,b,f,g,h)},g=function(a,b,d,e,f,g,h){return c(d^(b|~e),a,b,f,g,h)},h=function(a,c){var h=a[0],i=a[1],j=a[2],k=a[3];h=d(h,i,j,k,c[0],7,-680876936),k=d(k,h,i,j,c[1],12,-389564586),j=d(j,k,h,i,c[2],17,606105819),i=d(i,j,k,h,c[3],22,-1044525330),h=d(h,i,j,k,c[4],7,-176418897),k=d(k,h,i,j,c[5],12,1200080426),j=d(j,k,h,i,c[6],17,-1473231341),i=d(i,j,k,h,c[7],22,-45705983),h=d(h,i,j,k,c[8],7,1770035416),k=d(k,h,i,j,c[9],12,-1958414417),j=d(j,k,h,i,c[10],17,-42063),i=d(i,j,k,h,c[11],22,-1990404162),h=d(h,i,j,k,c[12],7,1804603682),k=d(k,h,i,j,c[13],12,-40341101),j=d(j,k,h,i,c[14],17,-1502002290),i=d(i,j,k,h,c[15],22,1236535329),h=e(h,i,j,k,c[1],5,-165796510),k=e(k,h,i,j,c[6],9,-1069501632),j=e(j,k,h,i,c[11],14,643717713),i=e(i,j,k,h,c[0],20,-373897302),h=e(h,i,j,k,c[5],5,-701558691),k=e(k,h,i,j,c[10],9,38016083),j=e(j,k,h,i,c[15],14,-660478335),i=e(i,j,k,h,c[4],20,-405537848),h=e(h,i,j,k,c[9],5,568446438),k=e(k,h,i,j,c[14],9,-1019803690),j=e(j,k,h,i,c[3],14,-187363961),i=e(i,j,k,h,c[8],20,1163531501),h=e(h,i,j,k,c[13],5,-1444681467),k=e(k,h,i,j,c[2],9,-51403784),j=e(j,k,h,i,c[7],14,1735328473),i=e(i,j,k,h,c[12],20,-1926607734),h=f(h,i,j,k,c[5],4,-378558),k=f(k,h,i,j,c[8],11,-2022574463),j=f(j,k,h,i,c[11],16,1839030562),i=f(i,j,k,h,c[14],23,-35309556),h=f(h,i,j,k,c[1],4,-1530992060),k=f(k,h,i,j,c[4],11,1272893353),j=f(j,k,h,i,c[7],16,-155497632),i=f(i,j,k,h,c[10],23,-1094730640),h=f(h,i,j,k,c[13],4,681279174),k=f(k,h,i,j,c[0],11,-358537222),j=f(j,k,h,i,c[3],16,-722521979),i=f(i,j,k,h,c[6],23,76029189),h=f(h,i,j,k,c[9],4,-640364487),k=f(k,h,i,j,c[12],11,-421815835),j=f(j,k,h,i,c[15],16,530742520),i=f(i,j,k,h,c[2],23,-995338651),h=g(h,i,j,k,c[0],6,-198630844),k=g(k,h,i,j,c[7],10,1126891415),j=g(j,k,h,i,c[14],15,-1416354905),i=g(i,j,k,h,c[5],21,-57434055),h=g(h,i,j,k,c[12],6,1700485571),k=g(k,h,i,j,c[3],10,-1894986606),j=g(j,k,h,i,c[10],15,-1051523),i=g(i,j,k,h,c[1],21,-2054922799),h=g(h,i,j,k,c[8],6,1873313359),k=g(k,h,i,j,c[15],10,-30611744),j=g(j,k,h,i,c[6],15,-1560198380),i=g(i,j,k,h,c[13],21,1309151649),h=g(h,i,j,k,c[4],6,-145523070),k=g(k,h,i,j,c[11],10,-1120210379),j=g(j,k,h,i,c[2],15,718787259),i=g(i,j,k,h,c[9],21,-343485551),a[0]=b(h,a[0]),a[1]=b(i,a[1]),a[2]=b(j,a[2]),a[3]=b(k,a[3])},i=function(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a.charCodeAt(b)+(a.charCodeAt(b+1)<<8)+(a.charCodeAt(b+2)<<16)+(a.charCodeAt(b+3)<<24);return c},j=function(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a[b]+(a[b+1]<<8)+(a[b+2]<<16)+(a[b+3]<<24);return c},k=function(a){var b,c,d,e,f,g,j=a.length,k=[1732584193,-271733879,-1732584194,271733878];for(b=64;j>=b;b+=64)h(k,i(a.substring(b-64,b)));for(a=a.substring(b-64),c=a.length,d=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],b=0;c>b;b+=1)d[b>>2]|=a.charCodeAt(b)<<(b%4<<3);if(d[b>>2]|=128<<(b%4<<3),b>55)for(h(k,d),b=0;16>b;b+=1)d[b]=0;return e=8*j,e=e.toString(16).match(/(.*?)(.{0,8})$/),f=parseInt(e[2],16),g=parseInt(e[1],16)||0,d[14]=f,d[15]=g,h(k,d),k},l=function(a){var b,c,d,e,f,g,i=a.length,k=[1732584193,-271733879,-1732584194,271733878];for(b=64;i>=b;b+=64)h(k,j(a.subarray(b-64,b)));for(a=i>b-64?a.subarray(b-64):new Uint8Array(0),c=a.length,d=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],b=0;c>b;b+=1)d[b>>2]|=a[b]<<(b%4<<3);if(d[b>>2]|=128<<(b%4<<3),b>55)for(h(k,d),b=0;16>b;b+=1)d[b]=0;return e=8*i,e=e.toString(16).match(/(.*?)(.{0,8})$/),f=parseInt(e[2],16),g=parseInt(e[1],16)||0,d[14]=f,d[15]=g,h(k,d),k},m=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"],n=function(a){var b,c=\"\";for(b=0;4>b;b+=1)c+=m[a>>8*b+4&15]+m[a>>8*b&15];return c},o=function(a){var b;for(b=0;b<a.length;b+=1)a[b]=n(a[b]);return a.join(\"\")},p=function(a){return o(k(a))},q=function(){this.reset()};return\"5d41402abc4b2a76b9719d911017c592\"!==p(\"hello\")&&(b=function(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}),q.prototype.append=function(a){return/[\\u0080-\\uFFFF]/.test(a)&&(a=unescape(encodeURIComponent(a))),this.appendBinary(a),this},q.prototype.appendBinary=function(a){this._buff+=a,this._length+=a.length;var b,c=this._buff.length;for(b=64;c>=b;b+=64)h(this._state,i(this._buff.substring(b-64,b)));return this._buff=this._buff.substr(b-64),this},q.prototype.end=function(a){var b,c,d=this._buff,e=d.length,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(b=0;e>b;b+=1)f[b>>2]|=d.charCodeAt(b)<<(b%4<<3);return this._finish(f,e),c=a?this._state:o(this._state),this.reset(),c},q.prototype._finish=function(a,b){var c,d,e,f=b;if(a[f>>2]|=128<<(f%4<<3),f>55)for(h(this._state,a),f=0;16>f;f+=1)a[f]=0;c=8*this._length,c=c.toString(16).match(/(.*?)(.{0,8})$/),d=parseInt(c[2],16),e=parseInt(c[1],16)||0,a[14]=d,a[15]=e,h(this._state,a)},q.prototype.reset=function(){return this._buff=\"\",this._length=0,this._state=[1732584193,-271733879,-1732584194,271733878],this},q.prototype.destroy=function(){delete this._state,delete this._buff,delete this._length},q.hash=function(a,b){/[\\u0080-\\uFFFF]/.test(a)&&(a=unescape(encodeURIComponent(a)));var c=k(a);return b?c:o(c)},q.hashBinary=function(a,b){var c=k(a);return b?c:o(c)},q.ArrayBuffer=function(){this.reset()},q.ArrayBuffer.prototype.append=function(a){var b,c=this._concatArrayBuffer(this._buff,a),d=c.length;for(this._length+=a.byteLength,b=64;d>=b;b+=64)h(this._state,j(c.subarray(b-64,b)));return this._buff=d>b-64?c.subarray(b-64):new Uint8Array(0),this},q.ArrayBuffer.prototype.end=function(a){var b,c,d=this._buff,e=d.length,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];\nfor(b=0;e>b;b+=1)f[b>>2]|=d[b]<<(b%4<<3);return this._finish(f,e),c=a?this._state:o(this._state),this.reset(),c},q.ArrayBuffer.prototype._finish=q.prototype._finish,q.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._state=[1732584193,-271733879,-1732584194,271733878],this},q.ArrayBuffer.prototype.destroy=q.prototype.destroy,q.ArrayBuffer.prototype._concatArrayBuffer=function(a,b){var c=a.length,d=new Uint8Array(c+b.byteLength);return d.set(a),d.set(new Uint8Array(b),c),d},q.ArrayBuffer.hash=function(a,b){var c=l(new Uint8Array(a));return b?c:o(c)},a.register(\"Md5\",{init:function(){},loadFromBlob:function(a){var b,c,d=a.getSource(),e=2097152,f=Math.ceil(d.size/e),g=0,h=this.owner,i=new q.ArrayBuffer,j=this,k=d.mozSlice||d.webkitSlice||d.slice;c=new FileReader,(b=function(){var l,m;l=g*e,m=Math.min(l+e,d.size),c.onload=function(b){i.append(b.target.result),h.trigger(\"progress\",{total:a.size,loaded:m})},c.onloadend=function(){c.onloadend=c.onload=null,++g<f?setTimeout(b,1):setTimeout(function(){h.trigger(\"load\"),j.result=i.end(),b=a=d=i=null,h.trigger(\"complete\")},50)},c.readAsArrayBuffer(k.call(d,l,m))})()},getResult:function(){return this.result}})}),b(\"runtime/flash/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a;try{a=navigator.plugins[\"Shockwave Flash\"],a=a.description}catch(b){try{a=new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\").GetVariable(\"$version\")}catch(c){a=\"0.0\"}}return a=a.match(/\\d+/g),parseFloat(a[0]+\".\"+a[1],10)}function f(){function d(a,b){var c,d,e=a.type||a;c=e.split(\"::\"),d=c[0],e=c[1],\"Ready\"===e&&d===j.uid?j.trigger(\"ready\"):f[d]&&f[d].trigger(e.toLowerCase(),a,b)}var e={},f={},g=this.destroy,j=this,k=b.guid(\"webuploader_\");c.apply(j,arguments),j.type=h,j.exec=function(a,c){var d,g=this,h=g.uid,k=b.slice(arguments,2);return f[h]=g,i[a]&&(e[h]||(e[h]=new i[a](g,j)),d=e[h],d[c])?d[c].apply(d,k):j.flashExec.apply(g,arguments)},a[k]=function(){var a=arguments;setTimeout(function(){d.apply(null,a)},1)},this.jsreciver=k,this.destroy=function(){return g&&g.apply(this,arguments)},this.flashExec=function(a,c){var d=j.getFlash(),e=b.slice(arguments,2);return d.exec(this.uid,a,c,e)}}var g=b.$,h=\"flash\",i={};return b.inherits(c,{constructor:f,init:function(){var a,c=this.getContainer(),d=this.options;c.css({position:\"absolute\",top:\"-8px\",left:\"-8px\",width:\"9px\",height:\"9px\",overflow:\"hidden\"}),a='<object id=\"'+this.uid+'\" type=\"application/x-shockwave-flash\" data=\"'+d.swf+'\" ',b.browser.ie&&(a+='classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" '),a+='width=\"100%\" height=\"100%\" style=\"outline:0\"><param name=\"movie\" value=\"'+d.swf+'\" /><param name=\"flashvars\" value=\"uid='+this.uid+\"&jsreciver=\"+this.jsreciver+'\" /><param name=\"wmode\" value=\"transparent\" /><param name=\"allowscriptaccess\" value=\"always\" /></object>',c.html(a)},getFlash:function(){return this._flash?this._flash:(this._flash=g(\"#\"+this.uid).get(0),this._flash)}}),f.register=function(a,c){return c=i[a]=b.inherits(d,g.extend({flashExec:function(){var a=this.owner,b=this.getRuntime();return b.flashExec.apply(a,arguments)}},c))},e()>=11.4&&c.addRuntime(h,f),f}),b(\"runtime/flash/filepicker\",[\"base\",\"runtime/flash/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(a){var b,d,e=c.extend({},a);for(b=e.accept&&e.accept.length,d=0;b>d;d++)e.accept[d].title||(e.accept[d].title=\"Files\");delete e.button,delete e.id,delete e.container,this.flashExec(\"FilePicker\",\"init\",e)},destroy:function(){this.flashExec(\"FilePicker\",\"destroy\")}})}),b(\"runtime/flash/image\",[\"runtime/flash/runtime\"],function(a){return a.register(\"Image\",{loadFromBlob:function(a){var b=this.owner;b.info()&&this.flashExec(\"Image\",\"info\",b.info()),b.meta()&&this.flashExec(\"Image\",\"meta\",b.meta()),this.flashExec(\"Image\",\"loadFromBlob\",a.uid)}})}),b(\"runtime/flash/transport\",[\"base\",\"runtime/flash/runtime\",\"runtime/client\"],function(b,c,d){var e=b.$;return c.register(\"Transport\",{init:function(){this._status=0,this._response=null,this._responseJson=null},send:function(){var a,b=this.owner,c=this.options,d=this._initAjax(),f=b._blob,g=c.server;d.connectRuntime(f.ruid),c.sendAsBinary?(g+=(/\\?/.test(g)?\"&\":\"?\")+e.param(b._formData),a=f.uid):(e.each(b._formData,function(a,b){d.exec(\"append\",a,b)}),d.exec(\"appendBlob\",c.fileVal,f.uid,c.filename||b._formData.name||\"\")),this._setRequestHeader(d,c.headers),d.exec(\"send\",{method:c.method,url:g,forceURLStream:c.forceURLStream,mimeType:\"application/octet-stream\"},a)},getStatus:function(){return this._status},getResponse:function(){return this._response||\"\"},getResponseAsJson:function(){return this._responseJson},abort:function(){var a=this._xhr;a&&(a.exec(\"abort\"),a.destroy(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var b=this,c=new d(\"XMLHttpRequest\");return c.on(\"uploadprogress progress\",function(a){var c=a.loaded/a.total;return c=Math.min(1,Math.max(0,c)),b.trigger(\"progress\",c)}),c.on(\"load\",function(){var d,e=c.exec(\"getStatus\"),f=!1,g=\"\";return c.off(),b._xhr=null,e>=200&&300>e?f=!0:e>=500&&600>e?(f=!0,g=\"server\"):g=\"http\",f&&(b._response=c.exec(\"getResponse\"),b._response=decodeURIComponent(b._response),d=a.JSON&&a.JSON.parse||function(a){try{return new Function(\"return \"+a).call()}catch(b){return{}}},b._responseJson=b._response?d(b._response):{}),c.destroy(),c=null,g?b.trigger(\"error\",g):b.trigger(\"load\")}),c.on(\"error\",function(){c.off(),b._xhr=null,b.trigger(\"error\",\"http\")}),b._xhr=c,c},_setRequestHeader:function(a,b){e.each(b,function(b,c){a.exec(\"setRequestHeader\",b,c)})}})}),b(\"runtime/flash/blob\",[\"runtime/flash/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.flashExec(\"Blob\",\"slice\",a,c);return new b(d.uid,d)}})}),b(\"runtime/flash/md5\",[\"runtime/flash/runtime\"],function(a){return a.register(\"Md5\",{init:function(){},loadFromBlob:function(a){return this.flashExec(\"Md5\",\"loadFromBlob\",a.uid)}})}),b(\"preset/all\",[\"base\",\"widgets/filednd\",\"widgets/filepaste\",\"widgets/filepicker\",\"widgets/image\",\"widgets/queue\",\"widgets/runtime\",\"widgets/upload\",\"widgets/validator\",\"widgets/md5\",\"runtime/html5/blob\",\"runtime/html5/dnd\",\"runtime/html5/filepaste\",\"runtime/html5/filepicker\",\"runtime/html5/imagemeta/exif\",\"runtime/html5/androidpatch\",\"runtime/html5/image\",\"runtime/html5/transport\",\"runtime/html5/md5\",\"runtime/flash/filepicker\",\"runtime/flash/image\",\"runtime/flash/transport\",\"runtime/flash/blob\",\"runtime/flash/md5\"],function(a){return a}),b(\"widgets/log\",[\"base\",\"uploader\",\"widgets/widget\"],function(a,b){function c(a){var b=e.extend({},d,a),c=f.replace(/^(.*)\\?/,\"$1\"+e.param(b)),g=new Image;g.src=c}var d,e=a.$,f=\" http://static.tieba.baidu.com/tb/pms/img/st.gif??\",g=(location.hostname||location.host||\"protected\").toLowerCase(),h=g&&/baidu/i.exec(g);if(h)return d={dv:3,master:\"webuploader\",online:/test/.exec(g)?0:1,module:\"\",product:g,type:0},b.register({name:\"log\",init:function(){var a=this.owner,b=0,d=0;a.on(\"error\",function(a){c({type:2,c_error_code:a})}).on(\"uploadError\",function(a,b){c({type:2,c_error_code:\"UPLOAD_ERROR\",c_reason:\"\"+b})}).on(\"uploadComplete\",function(a){b++,d+=a.size}).on(\"uploadFinished\",function(){c({c_count:b,c_size:d}),b=d=0}),c({c_usage:1})}})}),b(\"webuploader\",[\"preset/all\",\"widgets/log\"],function(a){return a}),c(\"webuploader\")});"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.noimage.js",
    "content": "/*! WebUploader 0.1.5 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n\n            return obj;\n        },\n\n        makeExport = function( dollar ) {\n            root.__dollar = dollar;\n\n            // exports every module.\n            return exportsTo( factory( root, _define, _require ) );\n        },\n\n        origin;\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = makeExport();\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([ 'jquery' ], makeExport );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = makeExport();\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( window, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        var $ = window.__dollar || window.jQuery || window.Zepto;\n    \n        if ( !$ ) {\n            throw new Error('jQuery or Zepto not found!');\n        }\n    \n        return $;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id为该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.5',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match( /(?:trident)(?:.*rv:([\\w.]+))?/i ),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数noop](#WebUploader:Base.noop)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            cancelFile: 'cancel-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            md5File: 'md5-file',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            predictRuntimeType: 'predict-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     compress: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.option( 'compress', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `progressNum` 上传中的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `queueNum` 还在队列中的文件数\n             * * `interruptNum` 被暂停的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return stats ? {\n                    successNum: stats.numOfSuccess,\n                    progressNum: stats.numOfProgress,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue,\n                    interruptNum: stats.numofInterrupt\n                } : {};\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            /**\n             * 销毁 webuploader 实例\n             * @method destroy\n             * @grammar destroy() => undefined\n             */\n            destroy: function() {\n                this.request( 'destroy', arguments );\n                this.off();\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                this._parent = parent;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                this._container && this._container.remove();\n                this._parent && this._parent.removeClass('webuploader-container');\n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            _destroy = Uploader.prototype.destroy,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            /**\n             * @property {String | Array} [disableWidgets=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 默认所有 Uploader.register 了的 widget 都会被加载，如果禁用某一部分，请通过此 option 指定黑名单。\n             */\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [],\n                    deactives = me.options.disableWidgets || '';\n    \n                $.each( widgetClass, function( _, klass ) {\n                    (!deactives || !~deactives.indexOf( klass._name )) &&\n                        widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets && widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个 tick 中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                if ( args.length === 1 ) {\n                                    args = args[ 0 ];\n                                }\n    \n                                setTimeout(function() {\n                                    deferred.resolve( args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ callback ? key : 'done' ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            },\n    \n            destroy: function() {\n                _destroy.apply( this, arguments );\n                this._widgets = null;\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @grammar Uploader.register(proto);\n         * @grammar Uploader.register(map, proto);\n         * @param  {object} responseMap API 名称与函数实现的映射\n         * @param  {object} proto 组件原型，构造函数通过 constructor 属性定义\n         * @method Uploader.register\n         * @for Uploader\n         * @example\n         * Uploader.register({\n         *     'make-thumb': 'makeThumb'\n         * }, {\n         *     init: function( options ) {},\n         *     makeThumb: function() {}\n         * });\n         *\n         * Uploader.register({\n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init', destroy: 'destroy', name: 'anonymous' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n    \n                // 自动生成 map 表。\n                $.each(widgetProto, function(key) {\n                    if ( key[0] === '_' || key === 'name' ) {\n                        key === 'name' && (map.name = widgetProto.name);\n                        return;\n                    }\n    \n                    map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key;\n                });\n    \n            } else {\n                map = $.extend( map, responseMap );\n            }\n    \n            widgetProto.responseMap = map;\n            klass = Base.inherits( Widget, widgetProto );\n            klass._name = map.name;\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        /**\n         * 删除插件，只有在注册时指定了名字的才能被删除。\n         * @grammar Uploader.unRegister(name);\n         * @param  {string} name 组件名字\n         * @method Uploader.unRegister\n         * @for Uploader\n         * @example\n         *\n         * Uploader.register({\n         *     name: 'custom',\n         *     \n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         *\n         * Uploader.unRegister('custom');\n         */\n        Uploader.unRegister = Widget.unRegister = function( name ) {\n            if ( !name || name === 'anonymous' ) {\n                return;\n            }\n            \n            // 删除指定的插件。\n            for ( var i = widgetClass.length; i--; ) {\n                if ( widgetClass[i]._name === name ) {\n                    widgetClass.splice(i, 1)\n                }\n            }\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n        \n        /**\n         * @property {Selector} [disableGlobalDnd=false]  是否禁掉整个页面的拖拽功能，如果不禁用，图片拖进来的时候会默认被浏览器打开。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            name: 'dnd',\n            \n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                this.dnd = dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.dnd && this.dnd.destroy();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            name: 'paste',\n            \n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                this.paste = paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.paste && this.paste.destroy();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n            this.size = source.size || 0;\n    \n            // 如果没有指定 mimetype, 但是知道文件后缀。\n            if ( !source.type && this.ext &&\n                    ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) {\n                this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext);\n            } else {\n                this.type = source.type || 'application/octet-stream';\n            }\n    \n            RuntimeClient.call( me, 'Blob' );\n            this.uid = source.uid || this.uid;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n            // 如果有 mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && file.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n    \n            Blob.apply( this, arguments );\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                this._resizeHandler = Base.bindFn( this.refresh, this );\n                $( window ).on( 'resize', this._resizeHandler );\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                var btn = this.options.button;\n                $( window ).off( 'resize', this._resizeHandler );\n                btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' +\n                    'webuploader-pick');\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor|dom} 指定选择文件的按钮容器，不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            name: 'picker',\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addBtn( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addBtn: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    promises = [];\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                $( pick.id ).each(function() {\n                    var options, picker, deferred;\n    \n                    deferred = Base.Deferred();\n    \n                    options = $.extend({}, pick, {\n                        accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                        swf: opts.swf,\n                        runtimeOrder: opts.runtimeOrder,\n                        id: this\n                    });\n    \n                    picker = new FilePicker( options );\n    \n                    picker.once( 'ready', deferred.resolve );\n                    picker.on( 'select', function( files ) {\n                        me.owner.request( 'add-file', [ files ]);\n                    });\n                    picker.init();\n    \n                    me.pickers.push( picker );\n    \n                    promises.push( deferred.promise() );\n                });\n    \n                return Base.when.apply( Base, promises );\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            },\n    \n            destroy: function() {\n                $.each( this.pickers, function() {\n                    this.destroy();\n                });\n                this.pickers = null;\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application/octet-stream'\n             */\n            this.type = source.type || 'application/octet-stream';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destroy: function() {\n                this.off();\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被取消的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * * `numofDeleted` 被移除的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0,\n                numofDeleted: 0,\n                numofInterrupt: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            /**\n             * 在队列中删除文件。\n             * @grammar removeFile( file ) => Array\n             * @method removeFile\n             * @param {File} 文件对象。\n             */\n            removeFile: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( existing ) {\n                    delete this._map[ file.id ];\n                    file.destroy();\n                    this.stats.numofDeleted++;\n                }\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            name: 'queue',\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                this.placeholder = runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || !file.size || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n            \n            /**\n             * @property {Boolean} [auto=false]\n             * @namespace options\n             * @for Uploader\n             * @description 设置为 true 后，不需要手动调用上传，有文件选择即开始上传。\n             * \n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFile: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    setTimeout(function() {\n                        me.request('start-upload');\n                    }, 20 );\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n             /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @grammar removeFile( file, true ) => undefined\n             * @grammar removeFile( id, true ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件, 默认只会标记文件状态为已取消，如果第二个参数为 `true` 则会从 queue 中移除。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file, remove ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                this.request( 'cancel-file', file );\n    \n                if ( remove ) {\n                    this.queue.removeFile( file );\n                }\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @event reset\n             * @description 当 uploader 被重置的时候触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.owner.trigger('reset');\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            },\n    \n            destroy: function() {\n                this.reset();\n                this.placeholder && this.placeholder.destroy();\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        /**\n         * @property {Object} [runtimeOrder=html5,flash]\n         * @namespace options\n         * @for Uploader\n         * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持，如果支持则使用 html5, 否则则使用 flash.\n         *\n         * 可以将此值设置成 `flash`，来强制使用 flash 运行时。\n         */\n    \n        return Uploader.register({\n            name: 'runtime',\n    \n            init: function() {\n                if ( !this.predictRuntimeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntimeType() => String\n             * @method predictRuntimeType\n             * @for  Uploader\n             */\n            predictRuntimeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData={}]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: {}\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len, api;\n    \n            api = {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                shift: function() {\n                    return pending.shift();\n                },\n    \n                unshift: function( block ) {\n                    pending.unshift( block );\n                }\n            };\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++,\n                    cuted: api\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return api;\n        }\n    \n        Uploader.register({\n            name: 'upload',\n    \n            init: function() {\n                var owner = this.owner,\n                    me = this;\n    \n                this.runing = false;\n                this.progress = false;\n    \n                owner\n                    .on( 'startUpload', function() {\n                        me.progress = true;\n                    })\n                    .on( 'uploadFinished', function() {\n                        me.progress = false;\n                    });\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存分好片的文件。\n                this.stack = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片在上传中但是没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n    \n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            reset: function() {\n                this.request( 'stop-upload', true );\n                this.runing = false;\n                this.pool = [];\n                this.stack = [];\n                this.pending = [];\n                this.remaning = 0;\n                this._trigged = false;\n                this._promise = null;\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             *\n             * 可以指定开始某一个文件。\n             * @grammar upload() => undefined\n             * @grammar upload( file | fileId) => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            startUpload: function(file) {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                // 如果指定了开始某个文件，则只开始指定文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if (file.getStatus() === Status.INTERRUPT) {\n                        $.each( me.pool, function( _, v ) {\n    \n                            // 之前暂停过。\n                            if (v.file !== file) {\n                                return;\n                            }\n    \n                            v.transport && v.transport.send();\n                        });\n    \n                        file.setStatus( Status.QUEUED );\n                    } else if (file.getStatus() === Status.PROGRESS) {\n                        return;\n                    } else {\n                        file.setStatus( Status.QUEUED );\n                    }\n                } else {\n                    $.each( me.request( 'get-files', [ Status.INITED ] ), function() {\n                        this.setStatus( Status.QUEUED );\n                    });\n                }\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                var files = [];\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        files.push(file);\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                var file;\n                while ( (file = files.shift()) ) {\n                    file.setStatus( Status.PROGRESS );\n                }\n    \n                file || $.each( me.request( 'get-files',\n                        Status.INTERRUPT ), function() {\n                    this.setStatus( Status.PROGRESS );\n                });\n    \n                me._trigged = false;\n                Base.nextTick( me.__tick );\n                me.owner.trigger('startUpload');\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             *\n             * 如果第一个参数是文件，则只暂停指定文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @grammar stop( file ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stopUpload: function( file, interrupt ) {\n                var me = this;\n    \n                if (file === true) {\n                    interrupt = file;\n                    file = null;\n                }\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                // 如果只是暂停某个文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if ( file.getStatus() !== Status.PROGRESS &&\n                            file.getStatus() !== Status.QUEUED ) {\n                        return;\n                    }\n    \n                    file.setStatus( Status.INTERRUPT );\n                    $.each( me.pool, function( _, v ) {\n    \n                        // 只 abort 指定的文件。\n                        if (v.file !== file) {\n                            return;\n                        }\n    \n                        v.transport && v.transport.abort();\n                        me._putback(v);\n                        me._popBlock(v);\n                    });\n    \n                    return Base.nextTick( me.__tick );\n                }\n    \n                me.runing = false;\n    \n                if (this._promise && this._promise.file) {\n                    this._promise.file.setStatus( Status.INTERRUPT );\n                }\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * @method cancelFile\n             * @grammar cancelFile( file ) => undefined\n             * @grammar cancelFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 标记文件状态为已取消, 同时将中断文件传输。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.cancelFile( file );\n             * })\n             */\n            cancelFile: function( file ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                file.setStatus( Status.CANCELLED );\n                this.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.progress;\n            },\n    \n            _getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me._getStats().numOfQueue &&\n                    !me._getStats().numofInterrupt ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _putback: function(block) {\n                var idx;\n    \n                block.cuted.unshift(block);\n                idx = this.stack.indexOf(block.cuted);\n    \n                if (!~idx) {\n                    this.stack.unshift(block.cuted);\n                }\n            },\n    \n            _getStack: function() {\n                var i = 0,\n                    act;\n    \n                while ( (act = this.stack[ i++ ]) ) {\n                    if ( act.has() && act.file.getStatus() === Status.PROGRESS ) {\n                        return act;\n                    } else if (!act.has() ||\n                            act.file.getStatus() !== Status.PROGRESS &&\n                            act.file.getStatus() !== Status.INTERRUPT ) {\n    \n                        // 把已经处理完了的，或者，状态为非 progress（上传中）、\n                        // interupt（暂停中） 的移除。\n                        this.stack.splice( --i, 1 );\n                    }\n                }\n    \n                return null;\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    opts = me.options,\n                    act, next, done, preparing;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( (act = this._getStack()) ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.shift();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me._getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me.stack.push(act);\n                        return act.shift();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    if ( isPromise( next) ) {\n                        preparing = next.file;\n                        next = next[ next.pipe ? 'pipe' : 'then' ]( done );\n                        next.file = preparing;\n                        return next;\n                    }\n    \n                    return done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.PROGRESS ||\n                            file.getStatus() === Status.INTERRUPT ) {\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    me.owner.trigger( 'uploadStart', file );\n                    file.setStatus( Status.PROGRESS );\n    \n                    promise.file = file;\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                // 有可能在 before-send-file 的 promise 期间改变了文件状态。\n                // 如：暂停，取消\n                // 我们不能中断 promise, 但是可以在 promise 完后，不做上传操作。\n                if ( file.getStatus() !== Status.PROGRESS ) {\n    \n                    // 如果是中断，则还需要放回去。\n                    if (file.getStatus() === Status.INTERRUPT) {\n                        me._putback(block);\n                    }\n    \n                    return;\n                }\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me.updateFileProgress( file );\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @param {Object} headers 可以扩展此对象来控制上传头部。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    block.percentage = percentage;\n                    me.updateFileProgress( file );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            },\n    \n            updateFileProgress: function(file) {\n                var totalPercent = 0,\n                    uploaded = 0;\n    \n                if (!file.blocks) {\n                    return;\n                }\n    \n                $.each( file.blocks, function( _, v ) {\n                    uploaded += (v.percentage || 0) * (v.end - v.start);\n                });\n    \n                totalPercent = uploaded / file.size;\n                this.owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            name: 'validator',\n    \n            init: function() {\n                var me = this;\n                Base.nextTick(function() {\n                    $.each( validators, function() {\n                        this.call( me.owner );\n                    });\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileNumLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileSizeLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', max, file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {Boolean} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n    \n            uploader.on( 'reset', function() {\n                mapping = {};\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destroy = this.destroy;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\r\n     * @fileOverview FilePaste\r\n     */\r\n    define('runtime/html5/dnd',[\r\n        'base',\r\n        'runtime/html5/runtime',\r\n        'lib/file'\r\n    ], function( Base, Html5Runtime, File ) {\r\n    \r\n        var $ = Base.$,\r\n            prefix = 'webuploader-dnd-';\r\n    \r\n        return Html5Runtime.register( 'DragAndDrop', {\r\n            init: function() {\r\n                var elem = this.elem = this.options.container;\r\n    \r\n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\r\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\r\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\r\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\r\n                this.dndOver = false;\r\n    \r\n                elem.on( 'dragenter', this.dragEnterHandler );\r\n                elem.on( 'dragover', this.dragOverHandler );\r\n                elem.on( 'dragleave', this.dragLeaveHandler );\r\n                elem.on( 'drop', this.dropHandler );\r\n    \r\n                if ( this.options.disableGlobalDnd ) {\r\n                    $( document ).on( 'dragover', this.dragOverHandler );\r\n                    $( document ).on( 'drop', this.dropHandler );\r\n                }\r\n            },\r\n    \r\n            _dragEnterHandler: function( e ) {\r\n                var me = this,\r\n                    denied = me._denied || false,\r\n                    items;\r\n    \r\n                e = e.originalEvent || e;\r\n    \r\n                if ( !me.dndOver ) {\r\n                    me.dndOver = true;\r\n    \r\n                    // 注意只有 chrome 支持。\r\n                    items = e.dataTransfer.items;\r\n    \r\n                    if ( items && items.length ) {\r\n                        me._denied = denied = !me.trigger( 'accept', items );\r\n                    }\r\n    \r\n                    me.elem.addClass( prefix + 'over' );\r\n                    me.elem[ denied ? 'addClass' :\r\n                            'removeClass' ]( prefix + 'denied' );\r\n                }\r\n    \r\n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\r\n    \r\n                return false;\r\n            },\r\n    \r\n            _dragOverHandler: function( e ) {\r\n                // 只处理框内的。\r\n                var parentElem = this.elem.parent().get( 0 );\r\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\r\n                    return false;\r\n                }\r\n    \r\n                clearTimeout( this._leaveTimer );\r\n                this._dragEnterHandler.call( this, e );\r\n    \r\n                return false;\r\n            },\r\n    \r\n            _dragLeaveHandler: function() {\r\n                var me = this,\r\n                    handler;\r\n    \r\n                handler = function() {\r\n                    me.dndOver = false;\r\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\r\n                };\r\n    \r\n                clearTimeout( me._leaveTimer );\r\n                me._leaveTimer = setTimeout( handler, 100 );\r\n                return false;\r\n            },\r\n    \r\n            _dropHandler: function( e ) {\r\n                var me = this,\r\n                    ruid = me.getRuid(),\r\n                    parentElem = me.elem.parent().get( 0 ),\r\n                    dataTransfer, data;\r\n    \r\n                // 只处理框内的。\r\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\r\n                    return false;\r\n                }\r\n    \r\n                e = e.originalEvent || e;\r\n                dataTransfer = e.dataTransfer;\r\n    \r\n                // 如果是页面内拖拽，还不能处理，不阻止事件。\r\n                // 此处 ie11 下会报参数错误，\r\n                try {\r\n                    data = dataTransfer.getData('text/html');\r\n                } catch( err ) {\r\n                }\r\n    \r\n                if ( data ) {\r\n                    return;\r\n                }\r\n    \r\n                me._getTansferFiles( dataTransfer, function( results ) {\r\n                    me.trigger( 'drop', $.map( results, function( file ) {\r\n                        return new File( ruid, file );\r\n                    }) );\r\n                });\r\n    \r\n                me.dndOver = false;\r\n                me.elem.removeClass( prefix + 'over' );\r\n                return false;\r\n            },\r\n    \r\n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\r\n            _getTansferFiles: function( dataTransfer, callback ) {\r\n                var results  = [],\r\n                    promises = [],\r\n                    items, files, file, item, i, len, canAccessFolder;\r\n    \r\n                items = dataTransfer.items;\r\n                files = dataTransfer.files;\r\n    \r\n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\r\n    \r\n                for ( i = 0, len = files.length; i < len; i++ ) {\r\n                    file = files[ i ];\r\n                    item = items && items[ i ];\r\n    \r\n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\r\n    \r\n                        promises.push( this._traverseDirectoryTree(\r\n                                item.webkitGetAsEntry(), results ) );\r\n                    } else {\r\n                        results.push( file );\r\n                    }\r\n                }\r\n    \r\n                Base.when.apply( Base, promises ).done(function() {\r\n    \r\n                    if ( !results.length ) {\r\n                        return;\r\n                    }\r\n    \r\n                    callback( results );\r\n                });\r\n            },\r\n    \r\n            _traverseDirectoryTree: function( entry, results ) {\r\n                var deferred = Base.Deferred(),\r\n                    me = this;\r\n    \r\n                if ( entry.isFile ) {\r\n                    entry.file(function( file ) {\r\n                        results.push( file );\r\n                        deferred.resolve();\r\n                    });\r\n                } else if ( entry.isDirectory ) {\r\n                    entry.createReader().readEntries(function( entries ) {\r\n                        var len = entries.length,\r\n                            promises = [],\r\n                            arr = [],    // 为了保证顺序。\r\n                            i;\r\n    \r\n                        for ( i = 0; i < len; i++ ) {\r\n                            promises.push( me._traverseDirectoryTree(\r\n                                    entries[ i ], arr ) );\r\n                        }\r\n    \r\n                        Base.when.apply( Base, promises ).then(function() {\r\n                            results.push.apply( results, arr );\r\n                            deferred.resolve();\r\n                        }, deferred.reject );\r\n                    });\r\n                }\r\n    \r\n                return deferred.promise();\r\n            },\r\n    \r\n            destroy: function() {\r\n                var elem = this.elem;\r\n    \r\n                // 还没 init 就调用 destroy\r\n                if (!elem) {\r\n                    return;\r\n                }\r\n                \r\n                elem.off( 'dragenter', this.dragEnterHandler );\r\n                elem.off( 'dragover', this.dragOverHandler );\r\n                elem.off( 'dragleave', this.dragLeaveHandler );\r\n                elem.off( 'drop', this.dropHandler );\r\n    \r\n                if ( this.options.disableGlobalDnd ) {\r\n                    $( document ).off( 'dragover', this.dragOverHandler );\r\n                    $( document ).off( 'drop', this.dropHandler );\r\n                }\r\n            }\r\n        });\r\n    });\r\n    \n    /**\r\n     * @fileOverview FilePaste\r\n     */\r\n    define('runtime/html5/filepaste',[\r\n        'base',\r\n        'runtime/html5/runtime',\r\n        'lib/file'\r\n    ], function( Base, Html5Runtime, File ) {\r\n    \r\n        return Html5Runtime.register( 'FilePaste', {\r\n            init: function() {\r\n                var opts = this.options,\r\n                    elem = this.elem = opts.container,\r\n                    accept = '.*',\r\n                    arr, i, len, item;\r\n    \r\n                // accetp的mimeTypes中生成匹配正则。\r\n                if ( opts.accept ) {\r\n                    arr = [];\r\n    \r\n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\r\n                        item = opts.accept[ i ].mimeTypes;\r\n                        item && arr.push( item );\r\n                    }\r\n    \r\n                    if ( arr.length ) {\r\n                        accept = arr.join(',');\r\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\r\n                    }\r\n                }\r\n                this.accept = accept = new RegExp( accept, 'i' );\r\n                this.hander = Base.bindFn( this._pasteHander, this );\r\n                elem.on( 'paste', this.hander );\r\n            },\r\n    \r\n            _pasteHander: function( e ) {\r\n                var allowed = [],\r\n                    ruid = this.getRuid(),\r\n                    items, item, blob, i, len;\r\n    \r\n                e = e.originalEvent || e;\r\n                items = e.clipboardData.items;\r\n    \r\n                for ( i = 0, len = items.length; i < len; i++ ) {\r\n                    item = items[ i ];\r\n    \r\n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\r\n                        continue;\r\n                    }\r\n    \r\n                    allowed.push( new File( ruid, blob ) );\r\n                }\r\n    \r\n                if ( allowed.length ) {\r\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\r\n                    e.preventDefault();\r\n                    e.stopPropagation();\r\n                    this.trigger( 'paste', allowed );\r\n                }\r\n            },\r\n    \r\n            destroy: function() {\r\n                this.elem.off( 'paste', this.hander );\r\n            }\r\n        });\r\n    });\r\n    \n    /**\r\n     * @fileOverview FilePicker\r\n     */\r\n    define('runtime/html5/filepicker',[\r\n        'base',\r\n        'runtime/html5/runtime'\r\n    ], function( Base, Html5Runtime ) {\r\n    \r\n        var $ = Base.$;\r\n    \r\n        return Html5Runtime.register( 'FilePicker', {\r\n            init: function() {\r\n                var container = this.getRuntime().getContainer(),\r\n                    me = this,\r\n                    owner = me.owner,\r\n                    opts = me.options,\r\n                    label = this.label = $( document.createElement('label') ),\r\n                    input =  this.input = $( document.createElement('input') ),\r\n                    arr, i, len, mouseHandler;\r\n    \r\n                input.attr( 'type', 'file' );\r\n                input.attr( 'name', opts.name );\r\n                input.addClass('webuploader-element-invisible');\r\n    \r\n                label.on( 'click', function() {\r\n                    input.trigger('click');\r\n                });\r\n    \r\n                label.css({\r\n                    opacity: 0,\r\n                    width: '100%',\r\n                    height: '100%',\r\n                    display: 'block',\r\n                    cursor: 'pointer',\r\n                    background: '#ffffff'\r\n                });\r\n    \r\n                if ( opts.multiple ) {\r\n                    input.attr( 'multiple', 'multiple' );\r\n                }\r\n    \r\n                // @todo Firefox不支持单独指定后缀\r\n                if ( opts.accept && opts.accept.length > 0 ) {\r\n                    arr = [];\r\n    \r\n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\r\n                        arr.push( opts.accept[ i ].mimeTypes );\r\n                    }\r\n    \r\n                    input.attr( 'accept', arr.join(',') );\r\n                }\r\n    \r\n                container.append( input );\r\n                container.append( label );\r\n    \r\n                mouseHandler = function( e ) {\r\n                    owner.trigger( e.type );\r\n                };\r\n    \r\n                input.on( 'change', function( e ) {\r\n                    var fn = arguments.callee,\r\n                        clone;\r\n    \r\n                    me.files = e.target.files;\r\n    \r\n                    // reset input\r\n                    clone = this.cloneNode( true );\r\n                    clone.value = null;\r\n                    this.parentNode.replaceChild( clone, this );\r\n    \r\n                    input.off();\r\n                    input = $( clone ).on( 'change', fn )\r\n                            .on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n                    owner.trigger('change');\r\n                });\r\n    \r\n                label.on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n            },\r\n    \r\n    \r\n            getFiles: function() {\r\n                return this.files;\r\n            },\r\n    \r\n            destroy: function() {\r\n                this.input.off();\r\n                this.label.off();\r\n            }\r\n        });\r\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    // 强制设置成 content-type 为文件流。\n                    xhr.overrideMimeType &&\n                            xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    /**\n     * @fileOverview FlashRuntime\n     */\n    define('runtime/flash/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var $ = Base.$,\n            type = 'flash',\n            components = {};\n    \n    \n        function getFlashVersion() {\n            var version;\n    \n            try {\n                version = navigator.plugins[ 'Shockwave Flash' ];\n                version = version.description;\n            } catch ( ex ) {\n                try {\n                    version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                            .GetVariable('$version');\n                } catch ( ex2 ) {\n                    version = '0.0';\n                }\n            }\n            version = version.match( /\\d+/g );\n            return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );\n        }\n    \n        function FlashRuntime() {\n            var pool = {},\n                clients = {},\n                destroy = this.destroy,\n                me = this,\n                jsreciver = Base.guid('webuploader_');\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/ ) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                clients[ uid ] = client;\n    \n                if ( components[ comp ] ) {\n                    if ( !pool[ uid ] ) {\n                        pool[ uid ] = new components[ comp ]( client, me );\n                    }\n    \n                    instance = pool[ uid ];\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n    \n                return me.flashExec.apply( client, arguments );\n            };\n    \n            function handler( evt, obj ) {\n                var type = evt.type || evt,\n                    parts, uid;\n    \n                parts = type.split('::');\n                uid = parts[ 0 ];\n                type = parts[ 1 ];\n    \n                // console.log.apply( console, arguments );\n    \n                if ( type === 'Ready' && uid === me.uid ) {\n                    me.trigger('ready');\n                } else if ( clients[ uid ] ) {\n                    clients[ uid ].trigger( type.toLowerCase(), evt, obj );\n                }\n    \n                // Base.log( evt, obj );\n            }\n    \n            // flash的接受器。\n            window[ jsreciver ] = function() {\n                var args = arguments;\n    \n                // 为了能捕获得到。\n                setTimeout(function() {\n                    handler.apply( null, args );\n                }, 1 );\n            };\n    \n            this.jsreciver = jsreciver;\n    \n            this.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n    \n            this.flashExec = function( comp, fn ) {\n                var flash = me.getFlash(),\n                    args = Base.slice( arguments, 2 );\n    \n                return flash.exec( this.uid, comp, fn, args );\n            };\n    \n            // @todo\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: FlashRuntime,\n    \n            init: function() {\n                var container = this.getContainer(),\n                    opts = this.options,\n                    html;\n    \n                // if not the minimal height, shims are not initialized\n                // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc)\n                container.css({\n                    position: 'absolute',\n                    top: '-8px',\n                    left: '-8px',\n                    width: '9px',\n                    height: '9px',\n                    overflow: 'hidden'\n                });\n    \n                // insert flash object\n                html = '<object id=\"' + this.uid + '\" type=\"application/' +\n                        'x-shockwave-flash\" data=\"' +  opts.swf + '\" ';\n    \n                if ( Base.browser.ie ) {\n                    html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                }\n    \n                html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">'  +\n                    '<param name=\"movie\" value=\"' + opts.swf + '\" />' +\n                    '<param name=\"flashvars\" value=\"uid=' + this.uid +\n                    '&jsreciver=' + this.jsreciver + '\" />' +\n                    '<param name=\"wmode\" value=\"transparent\" />' +\n                    '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                '</object>';\n    \n                container.html( html );\n            },\n    \n            getFlash: function() {\n                if ( this._flash ) {\n                    return this._flash;\n                }\n    \n                this._flash = $( '#' + this.uid ).get( 0 );\n                return this._flash;\n            }\n    \n        });\n    \n        FlashRuntime.register = function( name, component ) {\n            component = components[ name ] = Base.inherits( CompBase, $.extend({\n    \n                // @todo fix this later\n                flashExec: function() {\n                    var owner = this.owner,\n                        runtime = this.getRuntime();\n    \n                    return runtime.flashExec.apply( owner, arguments );\n                }\n            }, component ) );\n    \n            return component;\n        };\n    \n        if ( getFlashVersion() >= 11.4 ) {\n            Runtime.addRuntime( type, FlashRuntime );\n        }\n    \n        return FlashRuntime;\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/flash/filepicker',[\n        'base',\n        'runtime/flash/runtime'\n    ], function( Base, FlashRuntime ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'FilePicker', {\n            init: function( opts ) {\n                var copy = $.extend({}, opts ),\n                    len, i;\n    \n                // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug.\n                len = copy.accept && copy.accept.length;\n                for (  i = 0; i < len; i++ ) {\n                    if ( !copy.accept[ i ].title ) {\n                        copy.accept[ i ].title = 'Files';\n                    }\n                }\n    \n                delete copy.button;\n                delete copy.id;\n                delete copy.container;\n    \n                this.flashExec( 'FilePicker', 'init', copy );\n            },\n    \n            destroy: function() {\n                this.flashExec( 'FilePicker', 'destroy' );\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/flash/transport',[\n        'base',\n        'runtime/flash/runtime',\n        'runtime/client'\n    ], function( Base, FlashRuntime, RuntimeClient ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n                this._responseJson = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    binary;\n    \n                xhr.connectRuntime( blob.ruid );\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.uid;\n                } else {\n                    $.each( owner._formData, function( k, v ) {\n                        xhr.exec( 'append', k, v );\n                    });\n    \n                    xhr.exec( 'appendBlob', opts.fileVal, blob.uid,\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n                xhr.exec( 'send', {\n                    method: opts.method,\n                    url: server,\n                    forceURLStream: opts.forceURLStream,\n                    mimeType: 'application/octet-stream'\n                }, binary );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            getResponse: function() {\n                return this._response || '';\n            },\n    \n            getResponseAsJson: function() {\n                return this._responseJson;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.exec('abort');\n                    xhr.destroy();\n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new RuntimeClient('XMLHttpRequest');\n    \n                xhr.on( 'uploadprogress progress', function( e ) {\n                    var percent = e.loaded / e.total;\n                    percent = Math.min( 1, Math.max( 0, percent ) );\n                    return me.trigger( 'progress', percent );\n                });\n    \n                xhr.on( 'load', function() {\n                    var status = xhr.exec('getStatus'),\n                        readBody = false,\n                        err = '',\n                        p;\n    \n                    xhr.off();\n                    me._xhr = null;\n    \n                    if ( status >= 200 && status < 300 ) {\n                        readBody = true;\n                    } else if ( status >= 500 && status < 600 ) {\n                        readBody = true;\n                        err = 'server';\n                    } else {\n                        err = 'http';\n                    }\n    \n                    if ( readBody ) {\n                        me._response = xhr.exec('getResponse');\n                        me._response = decodeURIComponent( me._response );\n    \n                        // flash 处理可能存在 bug, 没辙只能靠 js 了\n                        // try {\n                        //     me._responseJson = xhr.exec('getResponseAsJson');\n                        // } catch ( error ) {\n                            \n                        p = window.JSON && window.JSON.parse || function( s ) {\n                            try {\n                                return new Function('return ' + s).call();\n                            } catch ( err ) {\n                                return {};\n                            }\n                        };\n                        me._responseJson  = me._response ? p(me._response) : {};\n                            \n                        // }\n                    }\n                    \n                    xhr.destroy();\n                    xhr = null;\n    \n                    return err ? me.trigger( 'error', err ) : me.trigger('load');\n                });\n    \n                xhr.on( 'error', function() {\n                    xhr.off();\n                    me._xhr = null;\n                    me.trigger( 'error', 'http' );\n                });\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.exec( 'setRequestHeader', key, val );\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/flash/blob',[\n        'runtime/flash/runtime',\n        'lib/blob'\n    ], function( FlashRuntime, Blob ) {\n    \n        return FlashRuntime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.flashExec( 'Blob', 'slice', start, end );\n    \n                return new Blob( blob.uid, blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview 没有图像处理的版本。\n     */\n    define('preset/withoutimage',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/transport',\n    \n        // flash\n        'runtime/flash/filepicker',\n        'runtime/flash/transport',\n        'runtime/flash/blob'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/withoutimage'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.noimage.min.js",
    "content": "/* WebUploader 0.1.5 */!function(a,b){var c,d={},e=function(a,b){var c,d,e;if(\"string\"==typeof a)return h(a);for(c=[],d=a.length,e=0;d>e;e++)c.push(h(a[e]));return b.apply(null,c)},f=function(a,b,c){2===arguments.length&&(c=b,b=null),e(b||[],function(){g(a,c,arguments)})},g=function(a,b,c){var f,g={exports:b};\"function\"==typeof b&&(c.length||(c=[e,g.exports,g]),f=b.apply(null,c),void 0!==f&&(g.exports=f)),d[a]=g.exports},h=function(b){var c=d[b]||a[b];if(!c)throw new Error(\"`\"+b+\"` is undefined\");return c},i=function(a){var b,c,e,f,g,h;h=function(a){return a&&a.charAt(0).toUpperCase()+a.substr(1)};for(b in d)if(c=a,d.hasOwnProperty(b)){for(e=b.split(\"/\"),g=h(e.pop());f=h(e.shift());)c[f]=c[f]||{},c=c[f];c[g]=d[b]}return a},j=function(c){return a.__dollar=c,i(b(a,f,e))};\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=j():\"function\"==typeof define&&define.amd?define([\"jquery\"],j):(c=a.WebUploader,a.WebUploader=j(),a.WebUploader.noConflict=function(){a.WebUploader=c})}(window,function(a,b,c){return b(\"dollar-third\",[],function(){var b=a.__dollar||a.jQuery||a.Zepto;if(!b)throw new Error(\"jQuery or Zepto not found!\");return b}),b(\"dollar\",[\"dollar-third\"],function(a){return a}),b(\"promise-third\",[\"dollar\"],function(a){return{Deferred:a.Deferred,when:a.when,isPromise:function(a){return a&&\"function\"==typeof a.then}}}),b(\"promise\",[\"promise-third\"],function(a){return a}),b(\"base\",[\"dollar\",\"promise\"],function(b,c){function d(a){return function(){return h.apply(a,arguments)}}function e(a,b){return function(){return a.apply(b,arguments)}}function f(a){var b;return Object.create?Object.create(a):(b=function(){},b.prototype=a,new b)}var g=function(){},h=Function.call;return{version:\"0.1.5\",$:b,Deferred:c.Deferred,isPromise:c.isPromise,when:c.when,browser:function(a){var b={},c=a.match(/WebKit\\/([\\d.]+)/),d=a.match(/Chrome\\/([\\d.]+)/)||a.match(/CriOS\\/([\\d.]+)/),e=a.match(/MSIE\\s([\\d\\.]+)/)||a.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),f=a.match(/Firefox\\/([\\d.]+)/),g=a.match(/Safari\\/([\\d.]+)/),h=a.match(/OPR\\/([\\d.]+)/);return c&&(b.webkit=parseFloat(c[1])),d&&(b.chrome=parseFloat(d[1])),e&&(b.ie=parseFloat(e[1])),f&&(b.firefox=parseFloat(f[1])),g&&(b.safari=parseFloat(g[1])),h&&(b.opera=parseFloat(h[1])),b}(navigator.userAgent),os:function(a){var b={},c=a.match(/(?:Android);?[\\s\\/]+([\\d.]+)?/),d=a.match(/(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/);return c&&(b.android=parseFloat(c[1])),d&&(b.ios=parseFloat(d[1].replace(/_/g,\".\"))),b}(navigator.userAgent),inherits:function(a,c,d){var e;return\"function\"==typeof c?(e=c,c=null):e=c&&c.hasOwnProperty(\"constructor\")?c.constructor:function(){return a.apply(this,arguments)},b.extend(!0,e,a,d||{}),e.__super__=a.prototype,e.prototype=f(a.prototype),c&&b.extend(!0,e.prototype,c),e},noop:g,bindFn:e,log:function(){return a.console?e(console.log,console):g}(),nextTick:function(){return function(a){setTimeout(a,1)}}(),slice:d([].slice),guid:function(){var a=0;return function(b){for(var c=(+new Date).toString(32),d=0;5>d;d++)c+=Math.floor(65535*Math.random()).toString(32);return(b||\"wu_\")+c+(a++).toString(32)}}(),formatSize:function(a,b,c){var d;for(c=c||[\"B\",\"K\",\"M\",\"G\",\"TB\"];(d=c.shift())&&a>1024;)a/=1024;return(\"B\"===d?a:a.toFixed(b||2))+d}}}),b(\"mediator\",[\"base\"],function(a){function b(a,b,c,d){return f.grep(a,function(a){return!(!a||b&&a.e!==b||c&&a.cb!==c&&a.cb._cb!==c||d&&a.ctx!==d)})}function c(a,b,c){f.each((a||\"\").split(h),function(a,d){c(d,b)})}function d(a,b){for(var c,d=!1,e=-1,f=a.length;++e<f;)if(c=a[e],c.cb.apply(c.ctx2,b)===!1){d=!0;break}return!d}var e,f=a.$,g=[].slice,h=/\\s+/;return e={on:function(a,b,d){var e,f=this;return b?(e=this._events||(this._events=[]),c(a,b,function(a,b){var c={e:a};c.cb=b,c.ctx=d,c.ctx2=d||f,c.id=e.length,e.push(c)}),this):this},once:function(a,b,d){var e=this;return b?(c(a,b,function(a,b){var c=function(){return e.off(a,c),b.apply(d||e,arguments)};c._cb=b,e.on(a,c,d)}),e):e},off:function(a,d,e){var g=this._events;return g?a||d||e?(c(a,d,function(a,c){f.each(b(g,a,c,e),function(){delete g[this.id]})}),this):(this._events=[],this):this},trigger:function(a){var c,e,f;return this._events&&a?(c=g.call(arguments,1),e=b(this._events,a),f=b(this._events,\"all\"),d(e,c)&&d(f,arguments)):this}},f.extend({installTo:function(a){return f.extend(a,e)}},e)}),b(\"uploader\",[\"base\",\"mediator\"],function(a,b){function c(a){this.options=d.extend(!0,{},c.options,a),this._init(this.options)}var d=a.$;return c.options={},b.installTo(c.prototype),d.each({upload:\"start-upload\",stop:\"stop-upload\",getFile:\"get-file\",getFiles:\"get-files\",addFile:\"add-file\",addFiles:\"add-file\",sort:\"sort-files\",removeFile:\"remove-file\",cancelFile:\"cancel-file\",skipFile:\"skip-file\",retry:\"retry\",isInProgress:\"is-in-progress\",makeThumb:\"make-thumb\",md5File:\"md5-file\",getDimension:\"get-dimension\",addButton:\"add-btn\",predictRuntimeType:\"predict-runtime-type\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\",reset:\"reset\"},function(a,b){c.prototype[a]=function(){return this.request(b,arguments)}}),d.extend(c.prototype,{state:\"pending\",_init:function(a){var b=this;b.request(\"init\",a,function(){b.state=\"ready\",b.trigger(\"ready\")})},option:function(a,b){var c=this.options;return arguments.length>1?void(d.isPlainObject(b)&&d.isPlainObject(c[a])?d.extend(c[a],b):c[a]=b):a?c[a]:c},getStats:function(){var a=this.request(\"get-stats\");return a?{successNum:a.numOfSuccess,progressNum:a.numOfProgress,cancelNum:a.numOfCancel,invalidNum:a.numOfInvalid,uploadFailNum:a.numOfUploadFailed,queueNum:a.numOfQueue,interruptNum:a.numofInterrupt}:{}},trigger:function(a){var c=[].slice.call(arguments,1),e=this.options,f=\"on\"+a.substring(0,1).toUpperCase()+a.substring(1);return b.trigger.apply(this,arguments)===!1||d.isFunction(e[f])&&e[f].apply(this,c)===!1||d.isFunction(this[f])&&this[f].apply(this,c)===!1||b.trigger.apply(b,[this,a].concat(c))===!1?!1:!0},destroy:function(){this.request(\"destroy\",arguments),this.off()},request:a.noop}),a.create=c.create=function(a){return new c(a)},a.Uploader=c,c}),b(\"runtime/runtime\",[\"base\",\"mediator\"],function(a,b){function c(b){this.options=d.extend({container:document.body},b),this.uid=a.guid(\"rt_\")}var d=a.$,e={},f=function(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null};return d.extend(c.prototype,{getContainer:function(){var a,b,c=this.options;return this._container?this._container:(a=d(c.container||document.body),b=d(document.createElement(\"div\")),b.attr(\"id\",\"rt_\"+this.uid),b.css({position:\"absolute\",top:\"0px\",left:\"0px\",width:\"1px\",height:\"1px\",overflow:\"hidden\"}),a.append(b),a.addClass(\"webuploader-container\"),this._container=b,this._parent=a,b)},init:a.noop,exec:a.noop,destroy:function(){this._container&&this._container.remove(),this._parent&&this._parent.removeClass(\"webuploader-container\"),this.off()}}),c.orders=\"html5,flash\",c.addRuntime=function(a,b){e[a]=b},c.hasRuntime=function(a){return!!(a?e[a]:f(e))},c.create=function(a,b){var g,h;if(b=b||c.orders,d.each(b.split(/\\s*,\\s*/g),function(){return e[this]?(g=this,!1):void 0}),g=g||f(e),!g)throw new Error(\"Runtime Error\");return h=new e[g](a)},b.installTo(c.prototype),c}),b(\"runtime/client\",[\"base\",\"mediator\",\"runtime/runtime\"],function(a,b,c){function d(b,d){var f,g=a.Deferred();this.uid=a.guid(\"client_\"),this.runtimeReady=function(a){return g.done(a)},this.connectRuntime=function(b,h){if(f)throw new Error(\"already connected!\");return g.done(h),\"string\"==typeof b&&e.get(b)&&(f=e.get(b)),f=f||e.get(null,d),f?(a.$.extend(f.options,b),f.__promise.then(g.resolve),f.__client++):(f=c.create(b,b.runtimeOrder),f.__promise=g.promise(),f.once(\"ready\",g.resolve),f.init(),e.add(f),f.__client=1),d&&(f.__standalone=d),f},this.getRuntime=function(){return f},this.disconnectRuntime=function(){f&&(f.__client--,f.__client<=0&&(e.remove(f),delete f.__promise,f.destroy()),f=null)},this.exec=function(){if(f){var c=a.slice(arguments);return b&&c.unshift(b),f.exec.apply(this,c)}},this.getRuid=function(){return f&&f.uid},this.destroy=function(a){return function(){a&&a.apply(this,arguments),this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()}}(this.destroy)}var e;return e=function(){var a={};return{add:function(b){a[b.uid]=b},get:function(b,c){var d;if(b)return a[b];for(d in a)if(!c||!a[d].__standalone)return a[d];return null},remove:function(b){delete a[b.uid]}}}(),b.installTo(d.prototype),d}),b(\"lib/dnd\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},d.options,a),a.container=e(a.container),a.container.length&&c.call(this,\"DragAndDrop\")}var e=a.$;return d.options={accept:null,disableGlobalDnd:!1},a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/widget\",[\"base\",\"uploader\"],function(a,b){function c(a){if(!a)return!1;var b=a.length,c=e.type(a);return 1===a.nodeType&&b?!0:\"array\"===c||\"function\"!==c&&\"string\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a)}function d(a){this.owner=a,this.options=a.options}var e=a.$,f=b.prototype._init,g=b.prototype.destroy,h={},i=[];return e.extend(d.prototype,{init:a.noop,invoke:function(a,b){var c=this.responseMap;return c&&a in c&&c[a]in this&&e.isFunction(this[c[a]])?this[c[a]].apply(this,b):h},request:function(){return this.owner.request.apply(this.owner,arguments)}}),e.extend(b.prototype,{_init:function(){var a=this,b=a._widgets=[],c=a.options.disableWidgets||\"\";return e.each(i,function(d,e){(!c||!~c.indexOf(e._name))&&b.push(new e(a))}),f.apply(a,arguments)},request:function(b,d,e){var f,g,i,j,k=0,l=this._widgets,m=l&&l.length,n=[],o=[];for(d=c(d)?d:[d];m>k;k++)f=l[k],g=f.invoke(b,d),g!==h&&(a.isPromise(g)?o.push(g):n.push(g));return e||o.length?(i=a.when.apply(a,o),j=i.pipe?\"pipe\":\"then\",i[j](function(){var b=a.Deferred(),c=arguments;return 1===c.length&&(c=c[0]),setTimeout(function(){b.resolve(c)},1),b.promise()})[e?j:\"done\"](e||a.noop)):n[0]},destroy:function(){g.apply(this,arguments),this._widgets=null}}),b.register=d.register=function(b,c){var f,g={init:\"init\",destroy:\"destroy\",name:\"anonymous\"};return 1===arguments.length?(c=b,e.each(c,function(a){return\"_\"===a[0]||\"name\"===a?void(\"name\"===a&&(g.name=c.name)):void(g[a.replace(/[A-Z]/g,\"-$&\").toLowerCase()]=a)})):g=e.extend(g,b),c.responseMap=g,f=a.inherits(d,c),f._name=g.name,i.push(f),f},b.unRegister=d.unRegister=function(a){if(a&&\"anonymous\"!==a)for(var b=i.length;b--;)i[b]._name===a&&i.splice(b,1)},d}),b(\"widgets/filednd\",[\"base\",\"uploader\",\"lib/dnd\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.options.dnd=\"\",b.register({name:\"dnd\",init:function(b){if(b.dnd&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{disableGlobalDnd:b.disableGlobalDnd,container:b.dnd,accept:b.accept});return this.dnd=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"drop\",function(a){f.request(\"add-file\",[a])}),e.on(\"accept\",function(a){return f.owner.trigger(\"dndAccept\",a)}),e.init(),g.promise()}},destroy:function(){this.dnd&&this.dnd.destroy()}})}),b(\"lib/filepaste\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},a),a.container=e(a.container||document.body),c.call(this,\"FilePaste\")}var e=a.$;return a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/filepaste\",[\"base\",\"uploader\",\"lib/filepaste\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.register({name:\"paste\",init:function(b){if(b.paste&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{container:b.paste,accept:b.accept});return this.paste=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"paste\",function(a){f.owner.request(\"add-file\",[a])}),e.init(),g.promise()}},destroy:function(){this.paste&&this.paste.destroy()}})}),b(\"lib/blob\",[\"base\",\"runtime/client\"],function(a,b){function c(a,c){var d=this;d.source=c,d.ruid=a,this.size=c.size||0,this.type=!c.type&&this.ext&&~\"jpg,jpeg,png,gif,bmp\".indexOf(this.ext)?\"image/\"+(\"jpg\"===this.ext?\"jpeg\":this.ext):c.type||\"application/octet-stream\",b.call(d,\"Blob\"),this.uid=c.uid||this.uid,a&&d.connectRuntime(a)}return a.inherits(b,{constructor:c,slice:function(a,b){return this.exec(\"slice\",a,b)},getSource:function(){return this.source}}),c}),b(\"lib/file\",[\"base\",\"lib/blob\"],function(a,b){function c(a,c){var f;this.name=c.name||\"untitled\"+d++,f=e.exec(c.name)?RegExp.$1.toLowerCase():\"\",!f&&c.type&&(f=/\\/(jpg|jpeg|png|gif|bmp)$/i.exec(c.type)?RegExp.$1.toLowerCase():\"\",this.name+=\".\"+f),this.ext=f,this.lastModifiedDate=c.lastModifiedDate||(new Date).toLocaleString(),b.apply(this,arguments)}var d=1,e=/\\.([^.]+)$/;return a.inherits(b,c)}),b(\"lib/filepicker\",[\"base\",\"runtime/client\",\"lib/file\"],function(b,c,d){function e(a){if(a=this.options=f.extend({},e.options,a),a.container=f(a.id),!a.container.length)throw new Error(\"按钮指定错误\");a.innerHTML=a.innerHTML||a.label||a.container.html()||\"\",a.button=f(a.button||document.createElement(\"div\")),a.button.html(a.innerHTML),a.container.html(a.button),c.call(this,\"FilePicker\",!0)}var f=b.$;return e.options={button:null,container:null,label:null,innerHTML:null,multiple:!0,accept:null,name:\"file\"},b.inherits(c,{constructor:e,init:function(){var c=this,e=c.options,g=e.button;g.addClass(\"webuploader-pick\"),c.on(\"all\",function(a){var b;switch(a){case\"mouseenter\":g.addClass(\"webuploader-pick-hover\");break;case\"mouseleave\":g.removeClass(\"webuploader-pick-hover\");break;case\"change\":b=c.exec(\"getFiles\"),c.trigger(\"select\",f.map(b,function(a){return a=new d(c.getRuid(),a),a._refer=e.container,a}),e.container)}}),c.connectRuntime(e,function(){c.refresh(),c.exec(\"init\",e),c.trigger(\"ready\")}),this._resizeHandler=b.bindFn(this.refresh,this),f(a).on(\"resize\",this._resizeHandler)},refresh:function(){var a=this.getRuntime().getContainer(),b=this.options.button,c=b.outerWidth?b.outerWidth():b.width(),d=b.outerHeight?b.outerHeight():b.height(),e=b.offset();c&&d&&a.css({bottom:\"auto\",right:\"auto\",width:c+\"px\",height:d+\"px\"}).offset(e)},enable:function(){var a=this.options.button;a.removeClass(\"webuploader-pick-disable\"),this.refresh()},disable:function(){var a=this.options.button;this.getRuntime().getContainer().css({top:\"-99999px\"}),a.addClass(\"webuploader-pick-disable\")},destroy:function(){var b=this.options.button;f(a).off(\"resize\",this._resizeHandler),b.removeClass(\"webuploader-pick-disable webuploader-pick-hover webuploader-pick\")}}),e}),b(\"widgets/filepicker\",[\"base\",\"uploader\",\"lib/filepicker\",\"widgets/widget\"],function(a,b,c){var d=a.$;return d.extend(b.options,{pick:null,accept:null}),b.register({name:\"picker\",init:function(a){return this.pickers=[],a.pick&&this.addBtn(a.pick)},refresh:function(){d.each(this.pickers,function(){this.refresh()})},addBtn:function(b){var e=this,f=e.options,g=f.accept,h=[];if(b)return d.isPlainObject(b)||(b={id:b}),d(b.id).each(function(){var i,j,k;k=a.Deferred(),i=d.extend({},b,{accept:d.isPlainObject(g)?[g]:g,swf:f.swf,runtimeOrder:f.runtimeOrder,id:this}),j=new c(i),j.once(\"ready\",k.resolve),j.on(\"select\",function(a){e.owner.request(\"add-file\",[a])}),j.init(),e.pickers.push(j),h.push(k.promise())}),a.when.apply(a,h)},disable:function(){d.each(this.pickers,function(){this.disable()})},enable:function(){d.each(this.pickers,function(){this.enable()})},destroy:function(){d.each(this.pickers,function(){this.destroy()}),this.pickers=null}})}),b(\"file\",[\"base\",\"mediator\"],function(a,b){function c(){return f+g++}function d(a){this.name=a.name||\"Untitled\",this.size=a.size||0,this.type=a.type||\"application/octet-stream\",this.lastModifiedDate=a.lastModifiedDate||1*new Date,this.id=c(),this.ext=h.exec(this.name)?RegExp.$1:\"\",this.statusText=\"\",i[this.id]=d.Status.INITED,this.source=a,this.loaded=0,this.on(\"error\",function(a){this.setStatus(d.Status.ERROR,a)})}var e=a.$,f=\"WU_FILE_\",g=0,h=/\\.([^.]+)$/,i={};return e.extend(d.prototype,{setStatus:function(a,b){var c=i[this.id];\"undefined\"!=typeof b&&(this.statusText=b),a!==c&&(i[this.id]=a,this.trigger(\"statuschange\",a,c))},getStatus:function(){return i[this.id]},getSource:function(){return this.source},destroy:function(){this.off(),delete i[this.id]}}),b.installTo(d.prototype),d.Status={INITED:\"inited\",QUEUED:\"queued\",PROGRESS:\"progress\",ERROR:\"error\",COMPLETE:\"complete\",CANCELLED:\"cancelled\",INTERRUPT:\"interrupt\",INVALID:\"invalid\"},d}),b(\"queue\",[\"base\",\"mediator\",\"file\"],function(a,b,c){function d(){this.stats={numOfQueue:0,numOfSuccess:0,numOfCancel:0,numOfProgress:0,numOfUploadFailed:0,numOfInvalid:0,numofDeleted:0,numofInterrupt:0},this._queue=[],this._map={}}var e=a.$,f=c.Status;return e.extend(d.prototype,{append:function(a){return this._queue.push(a),this._fileAdded(a),this},prepend:function(a){return this._queue.unshift(a),this._fileAdded(a),this},getFile:function(a){return\"string\"!=typeof a?a:this._map[a]},fetch:function(a){var b,c,d=this._queue.length;for(a=a||f.QUEUED,b=0;d>b;b++)if(c=this._queue[b],a===c.getStatus())return c;return null},sort:function(a){\"function\"==typeof a&&this._queue.sort(a)},getFiles:function(){for(var a,b=[].slice.call(arguments,0),c=[],d=0,f=this._queue.length;f>d;d++)a=this._queue[d],(!b.length||~e.inArray(a.getStatus(),b))&&c.push(a);return c},removeFile:function(a){var b=this._map[a.id];b&&(delete this._map[a.id],a.destroy(),this.stats.numofDeleted++)},_fileAdded:function(a){var b=this,c=this._map[a.id];c||(this._map[a.id]=a,a.on(\"statuschange\",function(a,c){b._onFileStatusChange(a,c)}))},_onFileStatusChange:function(a,b){var c=this.stats;switch(b){case f.PROGRESS:c.numOfProgress--;break;case f.QUEUED:c.numOfQueue--;break;case f.ERROR:c.numOfUploadFailed--;break;case f.INVALID:c.numOfInvalid--;break;case f.INTERRUPT:c.numofInterrupt--}switch(a){case f.QUEUED:c.numOfQueue++;break;case f.PROGRESS:c.numOfProgress++;break;case f.ERROR:c.numOfUploadFailed++;break;case f.COMPLETE:c.numOfSuccess++;break;case f.CANCELLED:c.numOfCancel++;break;case f.INVALID:c.numOfInvalid++;break;case f.INTERRUPT:c.numofInterrupt++}}}),b.installTo(d.prototype),d}),b(\"widgets/queue\",[\"base\",\"uploader\",\"queue\",\"file\",\"lib/file\",\"runtime/client\",\"widgets/widget\"],function(a,b,c,d,e,f){var g=a.$,h=/\\.\\w+$/,i=d.Status;return b.register({name:\"queue\",init:function(b){var d,e,h,i,j,k,l,m=this;if(g.isPlainObject(b.accept)&&(b.accept=[b.accept]),b.accept){for(j=[],h=0,e=b.accept.length;e>h;h++)i=b.accept[h].extensions,i&&j.push(i);j.length&&(k=\"\\\\.\"+j.join(\",\").replace(/,/g,\"$|\\\\.\").replace(/\\*/g,\".*\")+\"$\"),m.accept=new RegExp(k,\"i\")}return m.queue=new c,m.stats=m.queue.stats,\"html5\"===this.request(\"predict-runtime-type\")?(d=a.Deferred(),this.placeholder=l=new f(\"Placeholder\"),l.connectRuntime({runtimeOrder:\"html5\"},function(){m._ruid=l.getRuid(),d.resolve()}),d.promise()):void 0},_wrapFile:function(a){if(!(a instanceof d)){if(!(a instanceof e)){if(!this._ruid)throw new Error(\"Can't add external files.\");a=new e(this._ruid,a)}a=new d(a)}return a},acceptFile:function(a){var b=!a||!a.size||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b},_addFile:function(a){var b=this;return a=b._wrapFile(a),b.owner.trigger(\"beforeFileQueued\",a)?b.acceptFile(a)?(b.queue.append(a),b.owner.trigger(\"fileQueued\",a),a):void b.owner.trigger(\"error\",\"Q_TYPE_DENIED\",a):void 0},getFile:function(a){return this.queue.getFile(a)},addFile:function(a){var b=this;a.length||(a=[a]),a=g.map(a,function(a){return b._addFile(a)}),b.owner.trigger(\"filesQueued\",a),b.options.auto&&setTimeout(function(){b.request(\"start-upload\")},20)},getStats:function(){return this.stats},removeFile:function(a,b){var c=this;a=a.id?a:c.queue.getFile(a),this.request(\"cancel-file\",a),b&&this.queue.removeFile(a)},getFiles:function(){return this.queue.getFiles.apply(this.queue,arguments)},fetchFile:function(){return this.queue.fetch.apply(this.queue,arguments)},retry:function(a,b){var c,d,e,f=this;if(a)return a=a.id?a:f.queue.getFile(a),a.setStatus(i.QUEUED),void(b||f.request(\"start-upload\"));for(c=f.queue.getFiles(i.ERROR),d=0,e=c.length;e>d;d++)a=c[d],a.setStatus(i.QUEUED);f.request(\"start-upload\")},sortFiles:function(){return this.queue.sort.apply(this.queue,arguments)},reset:function(){this.owner.trigger(\"reset\"),this.queue=new c,this.stats=this.queue.stats},destroy:function(){this.reset(),this.placeholder&&this.placeholder.destroy()}})}),b(\"widgets/runtime\",[\"uploader\",\"runtime/runtime\",\"widgets/widget\"],function(a,b){return a.support=function(){return b.hasRuntime.apply(b,arguments)},a.register({name:\"runtime\",init:function(){if(!this.predictRuntimeType())throw Error(\"Runtime Error\")},predictRuntimeType:function(){var a,c,d=this.options.runtimeOrder||b.orders,e=this.type;if(!e)for(d=d.split(/\\s*,\\s*/g),a=0,c=d.length;c>a;a++)if(b.hasRuntime(d[a])){this.type=e=d[a];break}return e}})}),b(\"lib/transport\",[\"base\",\"runtime/client\",\"mediator\"],function(a,b,c){function d(a){var c=this;a=c.options=e.extend(!0,{},d.options,a||{}),b.call(this,\"Transport\"),this._blob=null,this._formData=a.formData||{},this._headers=a.headers||{},this.on(\"progress\",this._timeout),this.on(\"load error\",function(){c.trigger(\"progress\",1),clearTimeout(c._timer)})}var e=a.$;return d.options={server:\"\",method:\"POST\",withCredentials:!1,fileVal:\"file\",timeout:12e4,formData:{},headers:{},sendAsBinary:!1},e.extend(d.prototype,{appendBlob:function(a,b,c){var d=this,e=d.options;d.getRuid()&&d.disconnectRuntime(),d.connectRuntime(b.ruid,function(){d.exec(\"init\")}),d._blob=b,e.fileVal=a||e.fileVal,e.filename=c||e.filename},append:function(a,b){\"object\"==typeof a?e.extend(this._formData,a):this._formData[a]=b},setRequestHeader:function(a,b){\"object\"==typeof a?e.extend(this._headers,a):this._headers[a]=b},send:function(a){this.exec(\"send\",a),this._timeout()},abort:function(){return clearTimeout(this._timer),this.exec(\"abort\")},destroy:function(){this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()},getResponse:function(){return this.exec(\"getResponse\")},getResponseAsJson:function(){return this.exec(\"getResponseAsJson\")},getStatus:function(){return this.exec(\"getStatus\")},_timeout:function(){var a=this,b=a.options.timeout;b&&(clearTimeout(a._timer),a._timer=setTimeout(function(){a.abort(),a.trigger(\"error\",\"timeout\")},b))}}),c.installTo(d.prototype),d}),b(\"widgets/upload\",[\"base\",\"uploader\",\"file\",\"lib/transport\",\"widgets/widget\"],function(a,b,c,d){function e(a,b){var c,d,e=[],f=a.source,g=f.size,h=b?Math.ceil(g/b):1,i=0,j=0;for(d={file:a,has:function(){return!!e.length},shift:function(){return e.shift()},unshift:function(a){e.unshift(a)}};h>j;)c=Math.min(b,g-i),e.push({file:a,start:i,end:b?i+c:g,total:g,chunks:h,chunk:j++,cuted:d}),i+=c;return a.blocks=e.concat(),a.remaning=e.length,d}var f=a.$,g=a.isPromise,h=c.Status;f.extend(b.options,{prepareNextFile:!1,chunked:!1,chunkSize:5242880,chunkRetry:2,threads:3,formData:{}}),b.register({name:\"upload\",init:function(){var b=this.owner,c=this;this.runing=!1,this.progress=!1,b.on(\"startUpload\",function(){c.progress=!0}).on(\"uploadFinished\",function(){c.progress=!1}),this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this.__tick=a.bindFn(this._tick,this),b.on(\"uploadComplete\",function(a){a.blocks&&f.each(a.blocks,function(a,b){b.transport&&(b.transport.abort(),b.transport.destroy()),delete b.transport}),delete a.blocks,delete a.remaning})},reset:function(){this.request(\"stop-upload\",!0),this.runing=!1,this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this._trigged=!1,this._promise=null},startUpload:function(b){var c=this;if(f.each(c.request(\"get-files\",h.INVALID),function(){c.request(\"remove-file\",this)}),b)if(b=b.id?b:c.request(\"get-file\",b),b.getStatus()===h.INTERRUPT)f.each(c.pool,function(a,c){c.file===b&&c.transport&&c.transport.send()}),b.setStatus(h.QUEUED);else{if(b.getStatus()===h.PROGRESS)return;b.setStatus(h.QUEUED)}else f.each(c.request(\"get-files\",[h.INITED]),function(){this.setStatus(h.QUEUED)});if(!c.runing){c.runing=!0;var d=[];f.each(c.pool,function(a,b){var e=b.file;e.getStatus()===h.INTERRUPT&&(d.push(e),c._trigged=!1,b.transport&&b.transport.send())});for(var b;b=d.shift();)b.setStatus(h.PROGRESS);b||f.each(c.request(\"get-files\",h.INTERRUPT),function(){this.setStatus(h.PROGRESS)}),c._trigged=!1,a.nextTick(c.__tick),c.owner.trigger(\"startUpload\")}},stopUpload:function(b,c){var d=this;if(b===!0&&(c=b,b=null),d.runing!==!1){if(b){if(b=b.id?b:d.request(\"get-file\",b),b.getStatus()!==h.PROGRESS&&b.getStatus()!==h.QUEUED)return;return b.setStatus(h.INTERRUPT),f.each(d.pool,function(a,c){c.file===b&&(c.transport&&c.transport.abort(),d._putback(c),d._popBlock(c))}),a.nextTick(d.__tick)}d.runing=!1,this._promise&&this._promise.file&&this._promise.file.setStatus(h.INTERRUPT),c&&f.each(d.pool,function(a,b){b.transport&&b.transport.abort(),b.file.setStatus(h.INTERRUPT)}),d.owner.trigger(\"stopUpload\")}},cancelFile:function(a){a=a.id?a:this.request(\"get-file\",a),a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),a.setStatus(h.CANCELLED),this.owner.trigger(\"fileDequeued\",a)},isInProgress:function(){return!!this.progress},_getStats:function(){return this.request(\"get-stats\")},skipFile:function(a,b){a=a.id?a:this.request(\"get-file\",a),a.setStatus(b||h.COMPLETE),a.skipped=!0,a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),this.owner.trigger(\"uploadSkip\",a)},_tick:function(){var b,c,d=this,e=d.options;return d._promise?d._promise.always(d.__tick):void(d.pool.length<e.threads&&(c=d._nextBlock())?(d._trigged=!1,b=function(b){d._promise=null,b&&b.file&&d._startSend(b),a.nextTick(d.__tick)},d._promise=g(c)?c.always(b):b(c)):d.remaning||d._getStats().numOfQueue||d._getStats().numofInterrupt||(d.runing=!1,d._trigged||a.nextTick(function(){d.owner.trigger(\"uploadFinished\")}),d._trigged=!0))},_putback:function(a){var b;a.cuted.unshift(a),b=this.stack.indexOf(a.cuted),~b||this.stack.unshift(a.cuted)},_getStack:function(){for(var a,b=0;a=this.stack[b++];){if(a.has()&&a.file.getStatus()===h.PROGRESS)return a;(!a.has()||a.file.getStatus()!==h.PROGRESS&&a.file.getStatus()!==h.INTERRUPT)&&this.stack.splice(--b,1)}return null},_nextBlock:function(){var a,b,c,d,f=this,h=f.options;return(a=this._getStack())?(h.prepareNextFile&&!f.pending.length&&f._prepareNextFile(),a.shift()):f.runing?(!f.pending.length&&f._getStats().numOfQueue&&f._prepareNextFile(),b=f.pending.shift(),c=function(b){return b?(a=e(b,h.chunked?h.chunkSize:0),f.stack.push(a),a.shift()):null},g(b)?(d=b.file,b=b[b.pipe?\"pipe\":\"then\"](c),b.file=d,b):c(b)):void 0},_prepareNextFile:function(){var a,b=this,c=b.request(\"fetch-file\"),d=b.pending;c&&(a=b.request(\"before-send-file\",c,function(){return c.getStatus()===h.PROGRESS||c.getStatus()===h.INTERRUPT?c:b._finishFile(c)}),b.owner.trigger(\"uploadStart\",c),c.setStatus(h.PROGRESS),a.file=c,a.done(function(){var b=f.inArray(a,d);~b&&d.splice(b,1,c)}),a.fail(function(a){c.setStatus(h.ERROR,a),b.owner.trigger(\"uploadError\",c,a),b.owner.trigger(\"uploadComplete\",c)}),d.push(a))},_popBlock:function(a){var b=f.inArray(a,this.pool);this.pool.splice(b,1),a.file.remaning--,this.remaning--},_startSend:function(b){var c,d=this,e=b.file;return e.getStatus()!==h.PROGRESS?void(e.getStatus()===h.INTERRUPT&&d._putback(b)):(d.pool.push(b),d.remaning++,b.blob=1===b.chunks?e.source:e.source.slice(b.start,b.end),c=d.request(\"before-send\",b,function(){e.getStatus()===h.PROGRESS?d._doSend(b):(d._popBlock(b),a.nextTick(d.__tick))}),void c.fail(function(){1===e.remaning?d._finishFile(e).always(function(){b.percentage=1,d._popBlock(b),d.owner.trigger(\"uploadComplete\",e),a.nextTick(d.__tick)}):(b.percentage=1,d.updateFileProgress(e),d._popBlock(b),a.nextTick(d.__tick))}))},_doSend:function(b){var c,e,g=this,i=g.owner,j=g.options,k=b.file,l=new d(j),m=f.extend({},j.formData),n=f.extend({},j.headers);b.transport=l,l.on(\"destroy\",function(){delete b.transport,g._popBlock(b),a.nextTick(g.__tick)}),l.on(\"progress\",function(a){b.percentage=a,g.updateFileProgress(k)}),c=function(a){var c;return e=l.getResponseAsJson()||{},e._raw=l.getResponse(),c=function(b){a=b},i.trigger(\"uploadAccept\",b,e,c)||(a=a||\"server\"),a},l.on(\"error\",function(a,d){b.retried=b.retried||0,b.chunks>1&&~\"http,abort\".indexOf(a)&&b.retried<j.chunkRetry?(b.retried++,l.send()):(d||\"server\"!==a||(a=c(a)),k.setStatus(h.ERROR,a),i.trigger(\"uploadError\",k,a),i.trigger(\"uploadComplete\",k))}),l.on(\"load\",function(){var a;return(a=c())?void l.trigger(\"error\",a,!0):void(1===k.remaning?g._finishFile(k,e):l.destroy())}),m=f.extend(m,{id:k.id,name:k.name,type:k.type,lastModifiedDate:k.lastModifiedDate,size:k.size}),b.chunks>1&&f.extend(m,{chunks:b.chunks,chunk:b.chunk}),i.trigger(\"uploadBeforeSend\",b,m,n),l.appendBlob(j.fileVal,b.blob,k.name),l.append(m),l.setRequestHeader(n),l.send()},_finishFile:function(a,b,c){var d=this.owner;return d.request(\"after-send-file\",arguments,function(){a.setStatus(h.COMPLETE),d.trigger(\"uploadSuccess\",a,b,c)}).fail(function(b){a.getStatus()===h.PROGRESS&&a.setStatus(h.ERROR,b),d.trigger(\"uploadError\",a,b)}).always(function(){d.trigger(\"uploadComplete\",a)})},updateFileProgress:function(a){var b=0,c=0;a.blocks&&(f.each(a.blocks,function(a,b){c+=(b.percentage||0)*(b.end-b.start)}),b=c/a.size,this.owner.trigger(\"uploadProgress\",a,b||0))}})}),b(\"widgets/validator\",[\"base\",\"uploader\",\"file\",\"widgets/widget\"],function(a,b,c){var d,e=a.$,f={};return d={addValidator:function(a,b){f[a]=b},removeValidator:function(a){delete f[a]}},b.register({name:\"validator\",init:function(){var b=this;a.nextTick(function(){e.each(f,function(){this.call(b.owner)})})}}),d.addValidator(\"fileNumLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileNumLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){return c>=d&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_NUM_LIMIT\",d,a),setTimeout(function(){e=!0},1)),c>=d?!1:!0}),a.on(\"fileQueued\",function(){c++}),a.on(\"fileDequeued\",function(){c--}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSizeLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileSizeLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){var b=c+a.size>d;return b&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_SIZE_LIMIT\",d,a),setTimeout(function(){e=!0},1)),b?!1:!0}),a.on(\"fileQueued\",function(a){c+=a.size}),a.on(\"fileDequeued\",function(a){c-=a.size}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSingleSizeLimit\",function(){var a=this,b=a.options,d=b.fileSingleSizeLimit;d&&a.on(\"beforeFileQueued\",function(a){return a.size>d?(a.setStatus(c.Status.INVALID,\"exceed_size\"),this.trigger(\"error\",\"F_EXCEED_SIZE\",d,a),!1):void 0})}),d.addValidator(\"duplicate\",function(){function a(a){for(var b,c=0,d=0,e=a.length;e>d;d++)b=a.charCodeAt(d),c=b+(c<<6)+(c<<16)-c;return c}var b=this,c=b.options,d={};c.duplicate||(b.on(\"beforeFileQueued\",function(b){var c=b.__hash||(b.__hash=a(b.name+b.size+b.lastModifiedDate));return d[c]?(this.trigger(\"error\",\"F_DUPLICATE\",b),!1):void 0}),b.on(\"fileQueued\",function(a){var b=a.__hash;b&&(d[b]=!0)}),b.on(\"fileDequeued\",function(a){var b=a.__hash;b&&delete d[b]}),b.on(\"reset\",function(){d={}}))}),d}),b(\"runtime/compbase\",[],function(){function a(a,b){this.owner=a,this.options=a.options,this.getRuntime=function(){return b},this.getRuid=function(){return b.uid},this.trigger=function(){return a.trigger.apply(a,arguments)}}return a}),b(\"runtime/html5/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a={},d=this,e=this.destroy;c.apply(d,arguments),d.type=f,d.exec=function(c,e){var f,h=this,i=h.uid,j=b.slice(arguments,2);return g[c]&&(f=a[i]=a[i]||new g[c](h,d),f[e])?f[e].apply(f,j):void 0},d.destroy=function(){return e&&e.apply(this,arguments)}}var f=\"html5\",g={};return b.inherits(c,{constructor:e,init:function(){var a=this;setTimeout(function(){a.trigger(\"ready\")},1)}}),e.register=function(a,c){var e=g[a]=b.inherits(d,c);return e},a.Blob&&a.FileReader&&a.DataView&&c.addRuntime(f,e),e}),b(\"runtime/html5/blob\",[\"runtime/html5/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.owner.source,e=d.slice||d.webkitSlice||d.mozSlice;\nreturn d=e.call(d,a,c),new b(this.getRuid(),d)}})}),b(\"runtime/html5/dnd\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){var d=a.$,e=\"webuploader-dnd-\";return b.register(\"DragAndDrop\",{init:function(){var b=this.elem=this.options.container;this.dragEnterHandler=a.bindFn(this._dragEnterHandler,this),this.dragOverHandler=a.bindFn(this._dragOverHandler,this),this.dragLeaveHandler=a.bindFn(this._dragLeaveHandler,this),this.dropHandler=a.bindFn(this._dropHandler,this),this.dndOver=!1,b.on(\"dragenter\",this.dragEnterHandler),b.on(\"dragover\",this.dragOverHandler),b.on(\"dragleave\",this.dragLeaveHandler),b.on(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).on(\"dragover\",this.dragOverHandler),d(document).on(\"drop\",this.dropHandler))},_dragEnterHandler:function(a){var b,c=this,d=c._denied||!1;return a=a.originalEvent||a,c.dndOver||(c.dndOver=!0,b=a.dataTransfer.items,b&&b.length&&(c._denied=d=!c.trigger(\"accept\",b)),c.elem.addClass(e+\"over\"),c.elem[d?\"addClass\":\"removeClass\"](e+\"denied\")),a.dataTransfer.dropEffect=d?\"none\":\"copy\",!1},_dragOverHandler:function(a){var b=this.elem.parent().get(0);return b&&!d.contains(b,a.currentTarget)?!1:(clearTimeout(this._leaveTimer),this._dragEnterHandler.call(this,a),!1)},_dragLeaveHandler:function(){var a,b=this;return a=function(){b.dndOver=!1,b.elem.removeClass(e+\"over \"+e+\"denied\")},clearTimeout(b._leaveTimer),b._leaveTimer=setTimeout(a,100),!1},_dropHandler:function(a){var b,f,g=this,h=g.getRuid(),i=g.elem.parent().get(0);if(i&&!d.contains(i,a.currentTarget))return!1;a=a.originalEvent||a,b=a.dataTransfer;try{f=b.getData(\"text/html\")}catch(j){}return f?void 0:(g._getTansferFiles(b,function(a){g.trigger(\"drop\",d.map(a,function(a){return new c(h,a)}))}),g.dndOver=!1,g.elem.removeClass(e+\"over\"),!1)},_getTansferFiles:function(b,c){var d,e,f,g,h,i,j,k=[],l=[];for(d=b.items,e=b.files,j=!(!d||!d[0].webkitGetAsEntry),h=0,i=e.length;i>h;h++)f=e[h],g=d&&d[h],j&&g.webkitGetAsEntry().isDirectory?l.push(this._traverseDirectoryTree(g.webkitGetAsEntry(),k)):k.push(f);a.when.apply(a,l).done(function(){k.length&&c(k)})},_traverseDirectoryTree:function(b,c){var d=a.Deferred(),e=this;return b.isFile?b.file(function(a){c.push(a),d.resolve()}):b.isDirectory&&b.createReader().readEntries(function(b){var f,g=b.length,h=[],i=[];for(f=0;g>f;f++)h.push(e._traverseDirectoryTree(b[f],i));a.when.apply(a,h).then(function(){c.push.apply(c,i),d.resolve()},d.reject)}),d.promise()},destroy:function(){var a=this.elem;a&&(a.off(\"dragenter\",this.dragEnterHandler),a.off(\"dragover\",this.dragOverHandler),a.off(\"dragleave\",this.dragLeaveHandler),a.off(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).off(\"dragover\",this.dragOverHandler),d(document).off(\"drop\",this.dropHandler)))}})}),b(\"runtime/html5/filepaste\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){return b.register(\"FilePaste\",{init:function(){var b,c,d,e,f=this.options,g=this.elem=f.container,h=\".*\";if(f.accept){for(b=[],c=0,d=f.accept.length;d>c;c++)e=f.accept[c].mimeTypes,e&&b.push(e);b.length&&(h=b.join(\",\"),h=h.replace(/,/g,\"|\").replace(/\\*/g,\".*\"))}this.accept=h=new RegExp(h,\"i\"),this.hander=a.bindFn(this._pasteHander,this),g.on(\"paste\",this.hander)},_pasteHander:function(a){var b,d,e,f,g,h=[],i=this.getRuid();for(a=a.originalEvent||a,b=a.clipboardData.items,f=0,g=b.length;g>f;f++)d=b[f],\"file\"===d.kind&&(e=d.getAsFile())&&h.push(new c(i,e));h.length&&(a.preventDefault(),a.stopPropagation(),this.trigger(\"paste\",h))},destroy:function(){this.elem.off(\"paste\",this.hander)}})}),b(\"runtime/html5/filepicker\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(){var a,b,d,e,f=this.getRuntime().getContainer(),g=this,h=g.owner,i=g.options,j=this.label=c(document.createElement(\"label\")),k=this.input=c(document.createElement(\"input\"));if(k.attr(\"type\",\"file\"),k.attr(\"name\",i.name),k.addClass(\"webuploader-element-invisible\"),j.on(\"click\",function(){k.trigger(\"click\")}),j.css({opacity:0,width:\"100%\",height:\"100%\",display:\"block\",cursor:\"pointer\",background:\"#ffffff\"}),i.multiple&&k.attr(\"multiple\",\"multiple\"),i.accept&&i.accept.length>0){for(a=[],b=0,d=i.accept.length;d>b;b++)a.push(i.accept[b].mimeTypes);k.attr(\"accept\",a.join(\",\"))}f.append(k),f.append(j),e=function(a){h.trigger(a.type)},k.on(\"change\",function(a){var b,d=arguments.callee;g.files=a.target.files,b=this.cloneNode(!0),b.value=null,this.parentNode.replaceChild(b,this),k.off(),k=c(b).on(\"change\",d).on(\"mouseenter mouseleave\",e),h.trigger(\"change\")}),j.on(\"mouseenter mouseleave\",e)},getFiles:function(){return this.files},destroy:function(){this.input.off(),this.label.off()}})}),b(\"runtime/html5/transport\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.noop,d=a.$;return b.register(\"Transport\",{init:function(){this._status=0,this._response=null},send:function(){var b,c,e,f=this.owner,g=this.options,h=this._initAjax(),i=f._blob,j=g.server;g.sendAsBinary?(j+=(/\\?/.test(j)?\"&\":\"?\")+d.param(f._formData),c=i.getSource()):(b=new FormData,d.each(f._formData,function(a,c){b.append(a,c)}),b.append(g.fileVal,i.getSource(),g.filename||f._formData.name||\"\")),g.withCredentials&&\"withCredentials\"in h?(h.open(g.method,j,!0),h.withCredentials=!0):h.open(g.method,j),this._setRequestHeader(h,g.headers),c?(h.overrideMimeType&&h.overrideMimeType(\"application/octet-stream\"),a.os.android?(e=new FileReader,e.onload=function(){h.send(this.result),e=e.onload=null},e.readAsArrayBuffer(c)):h.send(c)):h.send(b)},getResponse:function(){return this._response},getResponseAsJson:function(){return this._parseJson(this._response)},getStatus:function(){return this._status},abort:function(){var a=this._xhr;a&&(a.upload.onprogress=c,a.onreadystatechange=c,a.abort(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var a=this,b=new XMLHttpRequest,d=this.options;return!d.withCredentials||\"withCredentials\"in b||\"undefined\"==typeof XDomainRequest||(b=new XDomainRequest),b.upload.onprogress=function(b){var c=0;return b.lengthComputable&&(c=b.loaded/b.total),a.trigger(\"progress\",c)},b.onreadystatechange=function(){return 4===b.readyState?(b.upload.onprogress=c,b.onreadystatechange=c,a._xhr=null,a._status=b.status,b.status>=200&&b.status<300?(a._response=b.responseText,a.trigger(\"load\")):b.status>=500&&b.status<600?(a._response=b.responseText,a.trigger(\"error\",\"server\")):a.trigger(\"error\",a._status?\"http\":\"abort\")):void 0},a._xhr=b,b},_setRequestHeader:function(a,b){d.each(b,function(b,c){a.setRequestHeader(b,c)})},_parseJson:function(a){var b;try{b=JSON.parse(a)}catch(c){b={}}return b}})}),b(\"runtime/flash/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a;try{a=navigator.plugins[\"Shockwave Flash\"],a=a.description}catch(b){try{a=new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\").GetVariable(\"$version\")}catch(c){a=\"0.0\"}}return a=a.match(/\\d+/g),parseFloat(a[0]+\".\"+a[1],10)}function f(){function d(a,b){var c,d,e=a.type||a;c=e.split(\"::\"),d=c[0],e=c[1],\"Ready\"===e&&d===j.uid?j.trigger(\"ready\"):f[d]&&f[d].trigger(e.toLowerCase(),a,b)}var e={},f={},g=this.destroy,j=this,k=b.guid(\"webuploader_\");c.apply(j,arguments),j.type=h,j.exec=function(a,c){var d,g=this,h=g.uid,k=b.slice(arguments,2);return f[h]=g,i[a]&&(e[h]||(e[h]=new i[a](g,j)),d=e[h],d[c])?d[c].apply(d,k):j.flashExec.apply(g,arguments)},a[k]=function(){var a=arguments;setTimeout(function(){d.apply(null,a)},1)},this.jsreciver=k,this.destroy=function(){return g&&g.apply(this,arguments)},this.flashExec=function(a,c){var d=j.getFlash(),e=b.slice(arguments,2);return d.exec(this.uid,a,c,e)}}var g=b.$,h=\"flash\",i={};return b.inherits(c,{constructor:f,init:function(){var a,c=this.getContainer(),d=this.options;c.css({position:\"absolute\",top:\"-8px\",left:\"-8px\",width:\"9px\",height:\"9px\",overflow:\"hidden\"}),a='<object id=\"'+this.uid+'\" type=\"application/x-shockwave-flash\" data=\"'+d.swf+'\" ',b.browser.ie&&(a+='classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" '),a+='width=\"100%\" height=\"100%\" style=\"outline:0\"><param name=\"movie\" value=\"'+d.swf+'\" /><param name=\"flashvars\" value=\"uid='+this.uid+\"&jsreciver=\"+this.jsreciver+'\" /><param name=\"wmode\" value=\"transparent\" /><param name=\"allowscriptaccess\" value=\"always\" /></object>',c.html(a)},getFlash:function(){return this._flash?this._flash:(this._flash=g(\"#\"+this.uid).get(0),this._flash)}}),f.register=function(a,c){return c=i[a]=b.inherits(d,g.extend({flashExec:function(){var a=this.owner,b=this.getRuntime();return b.flashExec.apply(a,arguments)}},c))},e()>=11.4&&c.addRuntime(h,f),f}),b(\"runtime/flash/filepicker\",[\"base\",\"runtime/flash/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(a){var b,d,e=c.extend({},a);for(b=e.accept&&e.accept.length,d=0;b>d;d++)e.accept[d].title||(e.accept[d].title=\"Files\");delete e.button,delete e.id,delete e.container,this.flashExec(\"FilePicker\",\"init\",e)},destroy:function(){this.flashExec(\"FilePicker\",\"destroy\")}})}),b(\"runtime/flash/transport\",[\"base\",\"runtime/flash/runtime\",\"runtime/client\"],function(b,c,d){var e=b.$;return c.register(\"Transport\",{init:function(){this._status=0,this._response=null,this._responseJson=null},send:function(){var a,b=this.owner,c=this.options,d=this._initAjax(),f=b._blob,g=c.server;d.connectRuntime(f.ruid),c.sendAsBinary?(g+=(/\\?/.test(g)?\"&\":\"?\")+e.param(b._formData),a=f.uid):(e.each(b._formData,function(a,b){d.exec(\"append\",a,b)}),d.exec(\"appendBlob\",c.fileVal,f.uid,c.filename||b._formData.name||\"\")),this._setRequestHeader(d,c.headers),d.exec(\"send\",{method:c.method,url:g,forceURLStream:c.forceURLStream,mimeType:\"application/octet-stream\"},a)},getStatus:function(){return this._status},getResponse:function(){return this._response||\"\"},getResponseAsJson:function(){return this._responseJson},abort:function(){var a=this._xhr;a&&(a.exec(\"abort\"),a.destroy(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var b=this,c=new d(\"XMLHttpRequest\");return c.on(\"uploadprogress progress\",function(a){var c=a.loaded/a.total;return c=Math.min(1,Math.max(0,c)),b.trigger(\"progress\",c)}),c.on(\"load\",function(){var d,e=c.exec(\"getStatus\"),f=!1,g=\"\";return c.off(),b._xhr=null,e>=200&&300>e?f=!0:e>=500&&600>e?(f=!0,g=\"server\"):g=\"http\",f&&(b._response=c.exec(\"getResponse\"),b._response=decodeURIComponent(b._response),d=a.JSON&&a.JSON.parse||function(a){try{return new Function(\"return \"+a).call()}catch(b){return{}}},b._responseJson=b._response?d(b._response):{}),c.destroy(),c=null,g?b.trigger(\"error\",g):b.trigger(\"load\")}),c.on(\"error\",function(){c.off(),b._xhr=null,b.trigger(\"error\",\"http\")}),b._xhr=c,c},_setRequestHeader:function(a,b){e.each(b,function(b,c){a.exec(\"setRequestHeader\",b,c)})}})}),b(\"runtime/flash/blob\",[\"runtime/flash/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.flashExec(\"Blob\",\"slice\",a,c);return new b(d.uid,d)}})}),b(\"preset/withoutimage\",[\"base\",\"widgets/filednd\",\"widgets/filepaste\",\"widgets/filepicker\",\"widgets/queue\",\"widgets/runtime\",\"widgets/upload\",\"widgets/validator\",\"runtime/html5/blob\",\"runtime/html5/dnd\",\"runtime/html5/filepaste\",\"runtime/html5/filepicker\",\"runtime/html5/transport\",\"runtime/flash/filepicker\",\"runtime/flash/transport\",\"runtime/flash/blob\"],function(a){return a}),b(\"webuploader\",[\"preset/withoutimage\"],function(a){return a}),c(\"webuploader\")});"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.nolog.js",
    "content": "/*! WebUploader 0.1.5 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n\n            return obj;\n        },\n\n        makeExport = function( dollar ) {\n            root.__dollar = dollar;\n\n            // exports every module.\n            return exportsTo( factory( root, _define, _require ) );\n        },\n\n        origin;\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = makeExport();\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([ 'jquery' ], makeExport );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = makeExport();\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( window, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        var $ = window.__dollar || window.jQuery || window.Zepto;\n    \n        if ( !$ ) {\n            throw new Error('jQuery or Zepto not found!');\n        }\n    \n        return $;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id为该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.5',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match( /(?:trident)(?:.*rv:([\\w.]+))?/i ),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数noop](#WebUploader:Base.noop)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            cancelFile: 'cancel-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            md5File: 'md5-file',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            predictRuntimeType: 'predict-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     compress: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.option( 'compress', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `progressNum` 上传中的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `queueNum` 还在队列中的文件数\n             * * `interruptNum` 被暂停的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return stats ? {\n                    successNum: stats.numOfSuccess,\n                    progressNum: stats.numOfProgress,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue,\n                    interruptNum: stats.numofInterrupt\n                } : {};\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            /**\n             * 销毁 webuploader 实例\n             * @method destroy\n             * @grammar destroy() => undefined\n             */\n            destroy: function() {\n                this.request( 'destroy', arguments );\n                this.off();\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                this._parent = parent;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                this._container && this._container.remove();\n                this._parent && this._parent.removeClass('webuploader-container');\n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            _destroy = Uploader.prototype.destroy,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            /**\n             * @property {String | Array} [disableWidgets=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 默认所有 Uploader.register 了的 widget 都会被加载，如果禁用某一部分，请通过此 option 指定黑名单。\n             */\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [],\n                    deactives = me.options.disableWidgets || '';\n    \n                $.each( widgetClass, function( _, klass ) {\n                    (!deactives || !~deactives.indexOf( klass._name )) &&\n                        widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets && widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个 tick 中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                if ( args.length === 1 ) {\n                                    args = args[ 0 ];\n                                }\n    \n                                setTimeout(function() {\n                                    deferred.resolve( args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ callback ? key : 'done' ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            },\n    \n            destroy: function() {\n                _destroy.apply( this, arguments );\n                this._widgets = null;\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @grammar Uploader.register(proto);\n         * @grammar Uploader.register(map, proto);\n         * @param  {object} responseMap API 名称与函数实现的映射\n         * @param  {object} proto 组件原型，构造函数通过 constructor 属性定义\n         * @method Uploader.register\n         * @for Uploader\n         * @example\n         * Uploader.register({\n         *     'make-thumb': 'makeThumb'\n         * }, {\n         *     init: function( options ) {},\n         *     makeThumb: function() {}\n         * });\n         *\n         * Uploader.register({\n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init', destroy: 'destroy', name: 'anonymous' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n    \n                // 自动生成 map 表。\n                $.each(widgetProto, function(key) {\n                    if ( key[0] === '_' || key === 'name' ) {\n                        key === 'name' && (map.name = widgetProto.name);\n                        return;\n                    }\n    \n                    map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key;\n                });\n    \n            } else {\n                map = $.extend( map, responseMap );\n            }\n    \n            widgetProto.responseMap = map;\n            klass = Base.inherits( Widget, widgetProto );\n            klass._name = map.name;\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        /**\n         * 删除插件，只有在注册时指定了名字的才能被删除。\n         * @grammar Uploader.unRegister(name);\n         * @param  {string} name 组件名字\n         * @method Uploader.unRegister\n         * @for Uploader\n         * @example\n         *\n         * Uploader.register({\n         *     name: 'custom',\n         *     \n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         *\n         * Uploader.unRegister('custom');\n         */\n        Uploader.unRegister = Widget.unRegister = function( name ) {\n            if ( !name || name === 'anonymous' ) {\n                return;\n            }\n            \n            // 删除指定的插件。\n            for ( var i = widgetClass.length; i--; ) {\n                if ( widgetClass[i]._name === name ) {\n                    widgetClass.splice(i, 1)\n                }\n            }\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n        \n        /**\n         * @property {Selector} [disableGlobalDnd=false]  是否禁掉整个页面的拖拽功能，如果不禁用，图片拖进来的时候会默认被浏览器打开。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            name: 'dnd',\n            \n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                this.dnd = dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.dnd && this.dnd.destroy();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            name: 'paste',\n            \n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                this.paste = paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.paste && this.paste.destroy();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n            this.size = source.size || 0;\n    \n            // 如果没有指定 mimetype, 但是知道文件后缀。\n            if ( !source.type && this.ext &&\n                    ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) {\n                this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext);\n            } else {\n                this.type = source.type || 'application/octet-stream';\n            }\n    \n            RuntimeClient.call( me, 'Blob' );\n            this.uid = source.uid || this.uid;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n            // 如果有 mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && file.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n    \n            Blob.apply( this, arguments );\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                this._resizeHandler = Base.bindFn( this.refresh, this );\n                $( window ).on( 'resize', this._resizeHandler );\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                var btn = this.options.button;\n                $( window ).off( 'resize', this._resizeHandler );\n                btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' +\n                    'webuploader-pick');\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor|dom} 指定选择文件的按钮容器，不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            name: 'picker',\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addBtn( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addBtn: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    promises = [];\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                $( pick.id ).each(function() {\n                    var options, picker, deferred;\n    \n                    deferred = Base.Deferred();\n    \n                    options = $.extend({}, pick, {\n                        accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                        swf: opts.swf,\n                        runtimeOrder: opts.runtimeOrder,\n                        id: this\n                    });\n    \n                    picker = new FilePicker( options );\n    \n                    picker.once( 'ready', deferred.resolve );\n                    picker.on( 'select', function( files ) {\n                        me.owner.request( 'add-file', [ files ]);\n                    });\n                    picker.init();\n    \n                    me.pickers.push( picker );\n    \n                    promises.push( deferred.promise() );\n                });\n    \n                return Base.when.apply( Base, promises );\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            },\n    \n            destroy: function() {\n                $.each( this.pickers, function() {\n                    this.destroy();\n                });\n                this.pickers = null;\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: false,\n    \n            // 是否允许放大。\n            allowMagnify: false\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            crop: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'crop' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true,\n             *\n             *     // 如果发现压缩后文件大小比原来还大，则使用原来图片\n             *     // 此属性可能会影响图片自动纠正功能\n             *     noCompressIfLarger: false,\n             *\n             *     // 单位字节，如果图片大小小于此值，不会采用压缩。\n             *     compressSize: 0\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n    \n            name: 'image',\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * 当 width 或者 height 的值介于 0 - 1 时，被当成百分比使用。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             * 也可以借助服务端，将 base64 数据传给服务端，生成一个临时文件供预览。\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n    \n                    // 如果 width 的值介于 0 - 1\n                    // 说明设置的是百分比。\n                    if ( width <= 1 && width > 0 ) {\n                        width = file._info.width * width;\n                    }\n    \n                    // 同样的规则应用于 height\n                    if ( height <= 1 && height > 0 ) {\n                        height = file._info.height * height;\n                    }\n    \n                    image.resize( width, height );\n                });\n    \n                // 当 resize 完后\n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function( reason ) {\n                    cb( reason || true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            beforeSendFile: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 0,\n                    noCompressIfLarger = opts && opts.noCompressIfLarger || false,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只压缩 jpeg 图片格式。\n                // gif 可能会丢失针\n                // bmp png 基本上尺寸都不大，且压缩比比较小。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    var width = opts.width,\n                        height = opts.height;\n    \n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n    \n                    // 如果 width 的值介于 0 - 1\n                    // 说明设置的是百分比。\n                    if ( width <= 1 && width > 0 ) {\n                        width = file._info.width * width;\n                    }\n    \n                    // 同样的规则应用于 height\n                    if ( height <= 1 && height > 0 ) {\n                        height = file._info.height * height;\n                    }\n    \n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( !noCompressIfLarger || blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application/octet-stream'\n             */\n            this.type = source.type || 'application/octet-stream';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destroy: function() {\n                this.off();\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被取消的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * * `numofDeleted` 被移除的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0,\n                numofDeleted: 0,\n                numofInterrupt: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            /**\n             * 在队列中删除文件。\n             * @grammar removeFile( file ) => Array\n             * @method removeFile\n             * @param {File} 文件对象。\n             */\n            removeFile: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( existing ) {\n                    delete this._map[ file.id ];\n                    file.destroy();\n                    this.stats.numofDeleted++;\n                }\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            name: 'queue',\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                this.placeholder = runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || !file.size || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n            \n            /**\n             * @property {Boolean} [auto=false]\n             * @namespace options\n             * @for Uploader\n             * @description 设置为 true 后，不需要手动调用上传，有文件选择即开始上传。\n             * \n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFile: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    setTimeout(function() {\n                        me.request('start-upload');\n                    }, 20 );\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n             /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @grammar removeFile( file, true ) => undefined\n             * @grammar removeFile( id, true ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件, 默认只会标记文件状态为已取消，如果第二个参数为 `true` 则会从 queue 中移除。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file, remove ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                this.request( 'cancel-file', file );\n    \n                if ( remove ) {\n                    this.queue.removeFile( file );\n                }\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @event reset\n             * @description 当 uploader 被重置的时候触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.owner.trigger('reset');\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            },\n    \n            destroy: function() {\n                this.reset();\n                this.placeholder && this.placeholder.destroy();\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        /**\n         * @property {Object} [runtimeOrder=html5,flash]\n         * @namespace options\n         * @for Uploader\n         * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持，如果支持则使用 html5, 否则则使用 flash.\n         *\n         * 可以将此值设置成 `flash`，来强制使用 flash 运行时。\n         */\n    \n        return Uploader.register({\n            name: 'runtime',\n    \n            init: function() {\n                if ( !this.predictRuntimeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntimeType() => String\n             * @method predictRuntimeType\n             * @for  Uploader\n             */\n            predictRuntimeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData={}]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: {}\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len, api;\n    \n            api = {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                shift: function() {\n                    return pending.shift();\n                },\n    \n                unshift: function( block ) {\n                    pending.unshift( block );\n                }\n            };\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++,\n                    cuted: api\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return api;\n        }\n    \n        Uploader.register({\n            name: 'upload',\n    \n            init: function() {\n                var owner = this.owner,\n                    me = this;\n    \n                this.runing = false;\n                this.progress = false;\n    \n                owner\n                    .on( 'startUpload', function() {\n                        me.progress = true;\n                    })\n                    .on( 'uploadFinished', function() {\n                        me.progress = false;\n                    });\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存分好片的文件。\n                this.stack = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片在上传中但是没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n    \n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            reset: function() {\n                this.request( 'stop-upload', true );\n                this.runing = false;\n                this.pool = [];\n                this.stack = [];\n                this.pending = [];\n                this.remaning = 0;\n                this._trigged = false;\n                this._promise = null;\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             *\n             * 可以指定开始某一个文件。\n             * @grammar upload() => undefined\n             * @grammar upload( file | fileId) => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            startUpload: function(file) {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                // 如果指定了开始某个文件，则只开始指定文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if (file.getStatus() === Status.INTERRUPT) {\n                        $.each( me.pool, function( _, v ) {\n    \n                            // 之前暂停过。\n                            if (v.file !== file) {\n                                return;\n                            }\n    \n                            v.transport && v.transport.send();\n                        });\n    \n                        file.setStatus( Status.QUEUED );\n                    } else if (file.getStatus() === Status.PROGRESS) {\n                        return;\n                    } else {\n                        file.setStatus( Status.QUEUED );\n                    }\n                } else {\n                    $.each( me.request( 'get-files', [ Status.INITED ] ), function() {\n                        this.setStatus( Status.QUEUED );\n                    });\n                }\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                var files = [];\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        files.push(file);\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                var file;\n                while ( (file = files.shift()) ) {\n                    file.setStatus( Status.PROGRESS );\n                }\n    \n                file || $.each( me.request( 'get-files',\n                        Status.INTERRUPT ), function() {\n                    this.setStatus( Status.PROGRESS );\n                });\n    \n                me._trigged = false;\n                Base.nextTick( me.__tick );\n                me.owner.trigger('startUpload');\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             *\n             * 如果第一个参数是文件，则只暂停指定文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @grammar stop( file ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stopUpload: function( file, interrupt ) {\n                var me = this;\n    \n                if (file === true) {\n                    interrupt = file;\n                    file = null;\n                }\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                // 如果只是暂停某个文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if ( file.getStatus() !== Status.PROGRESS &&\n                            file.getStatus() !== Status.QUEUED ) {\n                        return;\n                    }\n    \n                    file.setStatus( Status.INTERRUPT );\n                    $.each( me.pool, function( _, v ) {\n    \n                        // 只 abort 指定的文件。\n                        if (v.file !== file) {\n                            return;\n                        }\n    \n                        v.transport && v.transport.abort();\n                        me._putback(v);\n                        me._popBlock(v);\n                    });\n    \n                    return Base.nextTick( me.__tick );\n                }\n    \n                me.runing = false;\n    \n                if (this._promise && this._promise.file) {\n                    this._promise.file.setStatus( Status.INTERRUPT );\n                }\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * @method cancelFile\n             * @grammar cancelFile( file ) => undefined\n             * @grammar cancelFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 标记文件状态为已取消, 同时将中断文件传输。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.cancelFile( file );\n             * })\n             */\n            cancelFile: function( file ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                file.setStatus( Status.CANCELLED );\n                this.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.progress;\n            },\n    \n            _getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me._getStats().numOfQueue &&\n                    !me._getStats().numofInterrupt ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _putback: function(block) {\n                var idx;\n    \n                block.cuted.unshift(block);\n                idx = this.stack.indexOf(block.cuted);\n    \n                if (!~idx) {\n                    this.stack.unshift(block.cuted);\n                }\n            },\n    \n            _getStack: function() {\n                var i = 0,\n                    act;\n    \n                while ( (act = this.stack[ i++ ]) ) {\n                    if ( act.has() && act.file.getStatus() === Status.PROGRESS ) {\n                        return act;\n                    } else if (!act.has() ||\n                            act.file.getStatus() !== Status.PROGRESS &&\n                            act.file.getStatus() !== Status.INTERRUPT ) {\n    \n                        // 把已经处理完了的，或者，状态为非 progress（上传中）、\n                        // interupt（暂停中） 的移除。\n                        this.stack.splice( --i, 1 );\n                    }\n                }\n    \n                return null;\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    opts = me.options,\n                    act, next, done, preparing;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( (act = this._getStack()) ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.shift();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me._getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me.stack.push(act);\n                        return act.shift();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    if ( isPromise( next) ) {\n                        preparing = next.file;\n                        next = next[ next.pipe ? 'pipe' : 'then' ]( done );\n                        next.file = preparing;\n                        return next;\n                    }\n    \n                    return done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.PROGRESS ||\n                            file.getStatus() === Status.INTERRUPT ) {\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    me.owner.trigger( 'uploadStart', file );\n                    file.setStatus( Status.PROGRESS );\n    \n                    promise.file = file;\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                // 有可能在 before-send-file 的 promise 期间改变了文件状态。\n                // 如：暂停，取消\n                // 我们不能中断 promise, 但是可以在 promise 完后，不做上传操作。\n                if ( file.getStatus() !== Status.PROGRESS ) {\n    \n                    // 如果是中断，则还需要放回去。\n                    if (file.getStatus() === Status.INTERRUPT) {\n                        me._putback(block);\n                    }\n    \n                    return;\n                }\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me.updateFileProgress( file );\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @param {Object} headers 可以扩展此对象来控制上传头部。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    block.percentage = percentage;\n                    me.updateFileProgress( file );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            },\n    \n            updateFileProgress: function(file) {\n                var totalPercent = 0,\n                    uploaded = 0;\n    \n                if (!file.blocks) {\n                    return;\n                }\n    \n                $.each( file.blocks, function( _, v ) {\n                    uploaded += (v.percentage || 0) * (v.end - v.start);\n                });\n    \n                totalPercent = uploaded / file.size;\n                this.owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            name: 'validator',\n    \n            init: function() {\n                var me = this;\n                Base.nextTick(function() {\n                    $.each( validators, function() {\n                        this.call( me.owner );\n                    });\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileNumLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileSizeLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', max, file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {Boolean} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n    \n            uploader.on( 'reset', function() {\n                mapping = {};\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Md5\n     */\n    define('lib/md5',[\n        'runtime/client',\n        'mediator'\n    ], function( RuntimeClient, Mediator ) {\n    \n        function Md5() {\n            RuntimeClient.call( this, 'Md5' );\n        }\n    \n        // 让 Md5 具备事件功能。\n        Mediator.installTo( Md5.prototype );\n    \n        Md5.prototype.loadFromBlob = function( blob ) {\n            var me = this;\n    \n            if ( me.getRuid() ) {\n                me.disconnectRuntime();\n            }\n    \n            // 连接到blob归属的同一个runtime.\n            me.connectRuntime( blob.ruid, function() {\n                me.exec('init');\n                me.exec( 'loadFromBlob', blob );\n            });\n        };\n    \n        Md5.prototype.getResult = function() {\n            return this.exec('getResult');\n        };\n    \n        return Md5;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/md5',[\n        'base',\n        'uploader',\n        'lib/md5',\n        'lib/blob',\n        'widgets/widget'\n    ], function( Base, Uploader, Md5, Blob ) {\n    \n        return Uploader.register({\n            name: 'md5',\n    \n    \n            /**\n             * 计算文件 md5 值，返回一个 promise 对象，可以监听 progress 进度。\n             *\n             *\n             * @method md5File\n             * @grammar md5File( file[, start[, end]] ) => promise\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.md5File( file )\n             *\n             *         // 及时显示进度\n             *         .progress(function(percentage) {\n             *             console.log('Percentage:', percentage);\n             *         })\n             *\n             *         // 完成\n             *         .then(function(val) {\n             *             console.log('md5 result:', val);\n             *         });\n             *\n             * });\n             */\n            md5File: function( file, start, end ) {\n                var md5 = new Md5(),\n                    deferred = Base.Deferred(),\n                    blob = (file instanceof Blob) ? file :\n                        this.request( 'get-file', file ).source;\n    \n                md5.on( 'progress load', function( e ) {\n                    e = e || {};\n                    deferred.notify( e.total ? e.loaded / e.total : 1 );\n                });\n    \n                md5.on( 'complete', function() {\n                    deferred.resolve( md5.getResult() );\n                });\n    \n                md5.on( 'error', function( reason ) {\n                    deferred.reject( reason );\n                });\n    \n                if ( arguments.length > 1 ) {\n                    start = start || 0;\n                    end = end || 0;\n                    start < 0 && (start = blob.size + start);\n                    end < 0 && (end = blob.size + end);\n                    end = Math.min( end, blob.size );\n                    blob = blob.slice( start, end );\n                }\n    \n                md5.loadFromBlob( blob );\n    \n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destroy = this.destroy;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\r\n     * @fileOverview FilePaste\r\n     */\r\n    define('runtime/html5/dnd',[\r\n        'base',\r\n        'runtime/html5/runtime',\r\n        'lib/file'\r\n    ], function( Base, Html5Runtime, File ) {\r\n    \r\n        var $ = Base.$,\r\n            prefix = 'webuploader-dnd-';\r\n    \r\n        return Html5Runtime.register( 'DragAndDrop', {\r\n            init: function() {\r\n                var elem = this.elem = this.options.container;\r\n    \r\n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\r\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\r\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\r\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\r\n                this.dndOver = false;\r\n    \r\n                elem.on( 'dragenter', this.dragEnterHandler );\r\n                elem.on( 'dragover', this.dragOverHandler );\r\n                elem.on( 'dragleave', this.dragLeaveHandler );\r\n                elem.on( 'drop', this.dropHandler );\r\n    \r\n                if ( this.options.disableGlobalDnd ) {\r\n                    $( document ).on( 'dragover', this.dragOverHandler );\r\n                    $( document ).on( 'drop', this.dropHandler );\r\n                }\r\n            },\r\n    \r\n            _dragEnterHandler: function( e ) {\r\n                var me = this,\r\n                    denied = me._denied || false,\r\n                    items;\r\n    \r\n                e = e.originalEvent || e;\r\n    \r\n                if ( !me.dndOver ) {\r\n                    me.dndOver = true;\r\n    \r\n                    // 注意只有 chrome 支持。\r\n                    items = e.dataTransfer.items;\r\n    \r\n                    if ( items && items.length ) {\r\n                        me._denied = denied = !me.trigger( 'accept', items );\r\n                    }\r\n    \r\n                    me.elem.addClass( prefix + 'over' );\r\n                    me.elem[ denied ? 'addClass' :\r\n                            'removeClass' ]( prefix + 'denied' );\r\n                }\r\n    \r\n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\r\n    \r\n                return false;\r\n            },\r\n    \r\n            _dragOverHandler: function( e ) {\r\n                // 只处理框内的。\r\n                var parentElem = this.elem.parent().get( 0 );\r\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\r\n                    return false;\r\n                }\r\n    \r\n                clearTimeout( this._leaveTimer );\r\n                this._dragEnterHandler.call( this, e );\r\n    \r\n                return false;\r\n            },\r\n    \r\n            _dragLeaveHandler: function() {\r\n                var me = this,\r\n                    handler;\r\n    \r\n                handler = function() {\r\n                    me.dndOver = false;\r\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\r\n                };\r\n    \r\n                clearTimeout( me._leaveTimer );\r\n                me._leaveTimer = setTimeout( handler, 100 );\r\n                return false;\r\n            },\r\n    \r\n            _dropHandler: function( e ) {\r\n                var me = this,\r\n                    ruid = me.getRuid(),\r\n                    parentElem = me.elem.parent().get( 0 ),\r\n                    dataTransfer, data;\r\n    \r\n                // 只处理框内的。\r\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\r\n                    return false;\r\n                }\r\n    \r\n                e = e.originalEvent || e;\r\n                dataTransfer = e.dataTransfer;\r\n    \r\n                // 如果是页面内拖拽，还不能处理，不阻止事件。\r\n                // 此处 ie11 下会报参数错误，\r\n                try {\r\n                    data = dataTransfer.getData('text/html');\r\n                } catch( err ) {\r\n                }\r\n    \r\n                if ( data ) {\r\n                    return;\r\n                }\r\n    \r\n                me._getTansferFiles( dataTransfer, function( results ) {\r\n                    me.trigger( 'drop', $.map( results, function( file ) {\r\n                        return new File( ruid, file );\r\n                    }) );\r\n                });\r\n    \r\n                me.dndOver = false;\r\n                me.elem.removeClass( prefix + 'over' );\r\n                return false;\r\n            },\r\n    \r\n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\r\n            _getTansferFiles: function( dataTransfer, callback ) {\r\n                var results  = [],\r\n                    promises = [],\r\n                    items, files, file, item, i, len, canAccessFolder;\r\n    \r\n                items = dataTransfer.items;\r\n                files = dataTransfer.files;\r\n    \r\n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\r\n    \r\n                for ( i = 0, len = files.length; i < len; i++ ) {\r\n                    file = files[ i ];\r\n                    item = items && items[ i ];\r\n    \r\n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\r\n    \r\n                        promises.push( this._traverseDirectoryTree(\r\n                                item.webkitGetAsEntry(), results ) );\r\n                    } else {\r\n                        results.push( file );\r\n                    }\r\n                }\r\n    \r\n                Base.when.apply( Base, promises ).done(function() {\r\n    \r\n                    if ( !results.length ) {\r\n                        return;\r\n                    }\r\n    \r\n                    callback( results );\r\n                });\r\n            },\r\n    \r\n            _traverseDirectoryTree: function( entry, results ) {\r\n                var deferred = Base.Deferred(),\r\n                    me = this;\r\n    \r\n                if ( entry.isFile ) {\r\n                    entry.file(function( file ) {\r\n                        results.push( file );\r\n                        deferred.resolve();\r\n                    });\r\n                } else if ( entry.isDirectory ) {\r\n                    entry.createReader().readEntries(function( entries ) {\r\n                        var len = entries.length,\r\n                            promises = [],\r\n                            arr = [],    // 为了保证顺序。\r\n                            i;\r\n    \r\n                        for ( i = 0; i < len; i++ ) {\r\n                            promises.push( me._traverseDirectoryTree(\r\n                                    entries[ i ], arr ) );\r\n                        }\r\n    \r\n                        Base.when.apply( Base, promises ).then(function() {\r\n                            results.push.apply( results, arr );\r\n                            deferred.resolve();\r\n                        }, deferred.reject );\r\n                    });\r\n                }\r\n    \r\n                return deferred.promise();\r\n            },\r\n    \r\n            destroy: function() {\r\n                var elem = this.elem;\r\n    \r\n                // 还没 init 就调用 destroy\r\n                if (!elem) {\r\n                    return;\r\n                }\r\n                \r\n                elem.off( 'dragenter', this.dragEnterHandler );\r\n                elem.off( 'dragover', this.dragOverHandler );\r\n                elem.off( 'dragleave', this.dragLeaveHandler );\r\n                elem.off( 'drop', this.dropHandler );\r\n    \r\n                if ( this.options.disableGlobalDnd ) {\r\n                    $( document ).off( 'dragover', this.dragOverHandler );\r\n                    $( document ).off( 'drop', this.dropHandler );\r\n                }\r\n            }\r\n        });\r\n    });\r\n    \n    /**\r\n     * @fileOverview FilePaste\r\n     */\r\n    define('runtime/html5/filepaste',[\r\n        'base',\r\n        'runtime/html5/runtime',\r\n        'lib/file'\r\n    ], function( Base, Html5Runtime, File ) {\r\n    \r\n        return Html5Runtime.register( 'FilePaste', {\r\n            init: function() {\r\n                var opts = this.options,\r\n                    elem = this.elem = opts.container,\r\n                    accept = '.*',\r\n                    arr, i, len, item;\r\n    \r\n                // accetp的mimeTypes中生成匹配正则。\r\n                if ( opts.accept ) {\r\n                    arr = [];\r\n    \r\n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\r\n                        item = opts.accept[ i ].mimeTypes;\r\n                        item && arr.push( item );\r\n                    }\r\n    \r\n                    if ( arr.length ) {\r\n                        accept = arr.join(',');\r\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\r\n                    }\r\n                }\r\n                this.accept = accept = new RegExp( accept, 'i' );\r\n                this.hander = Base.bindFn( this._pasteHander, this );\r\n                elem.on( 'paste', this.hander );\r\n            },\r\n    \r\n            _pasteHander: function( e ) {\r\n                var allowed = [],\r\n                    ruid = this.getRuid(),\r\n                    items, item, blob, i, len;\r\n    \r\n                e = e.originalEvent || e;\r\n                items = e.clipboardData.items;\r\n    \r\n                for ( i = 0, len = items.length; i < len; i++ ) {\r\n                    item = items[ i ];\r\n    \r\n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\r\n                        continue;\r\n                    }\r\n    \r\n                    allowed.push( new File( ruid, blob ) );\r\n                }\r\n    \r\n                if ( allowed.length ) {\r\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\r\n                    e.preventDefault();\r\n                    e.stopPropagation();\r\n                    this.trigger( 'paste', allowed );\r\n                }\r\n            },\r\n    \r\n            destroy: function() {\r\n                this.elem.off( 'paste', this.hander );\r\n            }\r\n        });\r\n    });\r\n    \n    /**\r\n     * @fileOverview FilePicker\r\n     */\r\n    define('runtime/html5/filepicker',[\r\n        'base',\r\n        'runtime/html5/runtime'\r\n    ], function( Base, Html5Runtime ) {\r\n    \r\n        var $ = Base.$;\r\n    \r\n        return Html5Runtime.register( 'FilePicker', {\r\n            init: function() {\r\n                var container = this.getRuntime().getContainer(),\r\n                    me = this,\r\n                    owner = me.owner,\r\n                    opts = me.options,\r\n                    label = this.label = $( document.createElement('label') ),\r\n                    input =  this.input = $( document.createElement('input') ),\r\n                    arr, i, len, mouseHandler;\r\n    \r\n                input.attr( 'type', 'file' );\r\n                input.attr( 'name', opts.name );\r\n                input.addClass('webuploader-element-invisible');\r\n    \r\n                label.on( 'click', function() {\r\n                    input.trigger('click');\r\n                });\r\n    \r\n                label.css({\r\n                    opacity: 0,\r\n                    width: '100%',\r\n                    height: '100%',\r\n                    display: 'block',\r\n                    cursor: 'pointer',\r\n                    background: '#ffffff'\r\n                });\r\n    \r\n                if ( opts.multiple ) {\r\n                    input.attr( 'multiple', 'multiple' );\r\n                }\r\n    \r\n                // @todo Firefox不支持单独指定后缀\r\n                if ( opts.accept && opts.accept.length > 0 ) {\r\n                    arr = [];\r\n    \r\n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\r\n                        arr.push( opts.accept[ i ].mimeTypes );\r\n                    }\r\n    \r\n                    input.attr( 'accept', arr.join(',') );\r\n                }\r\n    \r\n                container.append( input );\r\n                container.append( label );\r\n    \r\n                mouseHandler = function( e ) {\r\n                    owner.trigger( e.type );\r\n                };\r\n    \r\n                input.on( 'change', function( e ) {\r\n                    var fn = arguments.callee,\r\n                        clone;\r\n    \r\n                    me.files = e.target.files;\r\n    \r\n                    // reset input\r\n                    clone = this.cloneNode( true );\r\n                    clone.value = null;\r\n                    this.parentNode.replaceChild( clone, this );\r\n    \r\n                    input.off();\r\n                    input = $( clone ).on( 'change', fn )\r\n                            .on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n                    owner.trigger('change');\r\n                });\r\n    \r\n                label.on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n            },\r\n    \r\n    \r\n            getFiles: function() {\r\n                return this.files;\r\n            },\r\n    \r\n            destroy: function() {\r\n                this.input.off();\r\n                this.label.off();\r\n            }\r\n        });\r\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/util',[\n        'base'\n    ], function( Base ) {\n    \n        var urlAPI = window.createObjectURL && window ||\n                window.URL && URL.revokeObjectURL && URL ||\n                window.webkitURL,\n            createObjectURL = Base.noop,\n            revokeObjectURL = createObjectURL;\n    \n        if ( urlAPI ) {\n    \n            // 更安全的方式调用，比如android里面就能把context改成其他的对象。\n            createObjectURL = function() {\n                return urlAPI.createObjectURL.apply( urlAPI, arguments );\n            };\n    \n            revokeObjectURL = function() {\n                return urlAPI.revokeObjectURL.apply( urlAPI, arguments );\n            };\n        }\n    \n        return {\n            createObjectURL: createObjectURL,\n            revokeObjectURL: revokeObjectURL,\n    \n            dataURL2Blob: function( dataURI ) {\n                var byteStr, intArray, ab, i, mimetype, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                ab = new ArrayBuffer( byteStr.length );\n                intArray = new Uint8Array( ab );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ];\n    \n                return this.arrayBufferToBlob( ab, mimetype );\n            },\n    \n            dataURL2ArrayBuffer: function( dataURI ) {\n                var byteStr, intArray, i, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                intArray = new Uint8Array( byteStr.length );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                return intArray.buffer;\n            },\n    \n            arrayBufferToBlob: function( buffer, type ) {\n                var builder = window.BlobBuilder || window.WebKitBlobBuilder,\n                    bb;\n    \n                // android不支持直接new Blob, 只能借助blobbuilder.\n                if ( builder ) {\n                    bb = new builder();\n                    bb.append( buffer );\n                    return bb.getBlob( type );\n                }\n    \n                return new Blob([ buffer ], type ? { type: type } : {} );\n            },\n    \n            // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg.\n            // 你得到的结果是png.\n            canvasToDataUrl: function( canvas, type, quality ) {\n                return canvas.toDataURL( type, quality / 100 );\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            parseMeta: function( blob, callback ) {\n                callback( false, {});\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            updateImageHead: function( data ) {\n                return data;\n            }\n        };\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/imagemeta',[\n        'runtime/html5/util'\n    ], function( Util ) {\n    \n        var api;\n    \n        api = {\n            parsers: {\n                0xffe1: []\n            },\n    \n            maxMetaDataSize: 262144,\n    \n            parse: function( blob, cb ) {\n                var me = this,\n                    fr = new FileReader();\n    \n                fr.onload = function() {\n                    cb( false, me._parse( this.result ) );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                fr.onerror = function( e ) {\n                    cb( e.message );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                blob = blob.slice( 0, me.maxMetaDataSize );\n                fr.readAsArrayBuffer( blob.getSource() );\n            },\n    \n            _parse: function( buffer, noParse ) {\n                if ( buffer.byteLength < 6 ) {\n                    return;\n                }\n    \n                var dataview = new DataView( buffer ),\n                    offset = 2,\n                    maxOffset = dataview.byteLength - 4,\n                    headLength = offset,\n                    ret = {},\n                    markerBytes, markerLength, parsers, i;\n    \n                if ( dataview.getUint16( 0 ) === 0xffd8 ) {\n    \n                    while ( offset < maxOffset ) {\n                        markerBytes = dataview.getUint16( offset );\n    \n                        if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef ||\n                                markerBytes === 0xfffe ) {\n    \n                            markerLength = dataview.getUint16( offset + 2 ) + 2;\n    \n                            if ( offset + markerLength > dataview.byteLength ) {\n                                break;\n                            }\n    \n                            parsers = api.parsers[ markerBytes ];\n    \n                            if ( !noParse && parsers ) {\n                                for ( i = 0; i < parsers.length; i += 1 ) {\n                                    parsers[ i ].call( api, dataview, offset,\n                                            markerLength, ret );\n                                }\n                            }\n    \n                            offset += markerLength;\n                            headLength = offset;\n                        } else {\n                            break;\n                        }\n                    }\n    \n                    if ( headLength > 6 ) {\n                        if ( buffer.slice ) {\n                            ret.imageHead = buffer.slice( 2, headLength );\n                        } else {\n                            // Workaround for IE10, which does not yet\n                            // support ArrayBuffer.slice:\n                            ret.imageHead = new Uint8Array( buffer )\n                                    .subarray( 2, headLength );\n                        }\n                    }\n                }\n    \n                return ret;\n            },\n    \n            updateImageHead: function( buffer, head ) {\n                var data = this._parse( buffer, true ),\n                    buf1, buf2, bodyoffset;\n    \n    \n                bodyoffset = 2;\n                if ( data.imageHead ) {\n                    bodyoffset = 2 + data.imageHead.byteLength;\n                }\n    \n                if ( buffer.slice ) {\n                    buf2 = buffer.slice( bodyoffset );\n                } else {\n                    buf2 = new Uint8Array( buffer ).subarray( bodyoffset );\n                }\n    \n                buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength );\n    \n                buf1[ 0 ] = 0xFF;\n                buf1[ 1 ] = 0xD8;\n                buf1.set( new Uint8Array( head ), 2 );\n                buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 );\n    \n                return buf1.buffer;\n            }\n        };\n    \n        Util.parseMeta = function() {\n            return api.parse.apply( api, arguments );\n        };\n    \n        Util.updateImageHead = function() {\n            return api.updateImageHead.apply( api, arguments );\n        };\n    \n        return api;\n    });\n    /**\n     * 代码来自于：https://github.com/blueimp/JavaScript-Load-Image\n     * 暂时项目中只用了orientation.\n     *\n     * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail.\n     * @fileOverview EXIF解析\n     */\n    \n    // Sample\n    // ====================================\n    // Make : Apple\n    // Model : iPhone 4S\n    // Orientation : 1\n    // XResolution : 72 [72/1]\n    // YResolution : 72 [72/1]\n    // ResolutionUnit : 2\n    // Software : QuickTime 7.7.1\n    // DateTime : 2013:09:01 22:53:55\n    // ExifIFDPointer : 190\n    // ExposureTime : 0.058823529411764705 [1/17]\n    // FNumber : 2.4 [12/5]\n    // ExposureProgram : Normal program\n    // ISOSpeedRatings : 800\n    // ExifVersion : 0220\n    // DateTimeOriginal : 2013:09:01 22:52:51\n    // DateTimeDigitized : 2013:09:01 22:52:51\n    // ComponentsConfiguration : YCbCr\n    // ShutterSpeedValue : 4.058893515764426\n    // ApertureValue : 2.5260688216892597 [4845/1918]\n    // BrightnessValue : -0.3126686601998395\n    // MeteringMode : Pattern\n    // Flash : Flash did not fire, compulsory flash mode\n    // FocalLength : 4.28 [107/25]\n    // SubjectArea : [4 values]\n    // FlashpixVersion : 0100\n    // ColorSpace : 1\n    // PixelXDimension : 2448\n    // PixelYDimension : 3264\n    // SensingMethod : One-chip color area sensor\n    // ExposureMode : 0\n    // WhiteBalance : Auto white balance\n    // FocalLengthIn35mmFilm : 35\n    // SceneCaptureType : Standard\n    define('runtime/html5/imagemeta/exif',[\n        'base',\n        'runtime/html5/imagemeta'\n    ], function( Base, ImageMeta ) {\n    \n        var EXIF = {};\n    \n        EXIF.ExifMap = function() {\n            return this;\n        };\n    \n        EXIF.ExifMap.prototype.map = {\n            'Orientation': 0x0112\n        };\n    \n        EXIF.ExifMap.prototype.get = function( id ) {\n            return this[ id ] || this[ this.map[ id ] ];\n        };\n    \n        EXIF.exifTagTypes = {\n            // byte, 8-bit unsigned int:\n            1: {\n                getValue: function( dataView, dataOffset ) {\n                    return dataView.getUint8( dataOffset );\n                },\n                size: 1\n            },\n    \n            // ascii, 8-bit byte:\n            2: {\n                getValue: function( dataView, dataOffset ) {\n                    return String.fromCharCode( dataView.getUint8( dataOffset ) );\n                },\n                size: 1,\n                ascii: true\n            },\n    \n            // short, 16 bit int:\n            3: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint16( dataOffset, littleEndian );\n                },\n                size: 2\n            },\n    \n            // long, 32 bit int:\n            4: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // rational = two long values,\n            // first is numerator, second is denominator:\n            5: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian ) /\n                        dataView.getUint32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            },\n    \n            // slong, 32 bit signed int:\n            9: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // srational, two slongs, first is numerator, second is denominator:\n            10: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian ) /\n                        dataView.getInt32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            }\n        };\n    \n        // undefined, 8-bit byte, value depending on field:\n        EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ];\n    \n        EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length,\n                littleEndian ) {\n    \n            var tagType = EXIF.exifTagTypes[ type ],\n                tagSize, dataOffset, values, i, str, c;\n    \n            if ( !tagType ) {\n                Base.log('Invalid Exif data: Invalid tag type.');\n                return;\n            }\n    \n            tagSize = tagType.size * length;\n    \n            // Determine if the value is contained in the dataOffset bytes,\n            // or if the value at the dataOffset is a pointer to the actual data:\n            dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8,\n                    littleEndian ) : (offset + 8);\n    \n            if ( dataOffset + tagSize > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid data offset.');\n                return;\n            }\n    \n            if ( length === 1 ) {\n                return tagType.getValue( dataView, dataOffset, littleEndian );\n            }\n    \n            values = [];\n    \n            for ( i = 0; i < length; i += 1 ) {\n                values[ i ] = tagType.getValue( dataView,\n                        dataOffset + i * tagType.size, littleEndian );\n            }\n    \n            if ( tagType.ascii ) {\n                str = '';\n    \n                // Concatenate the chars:\n                for ( i = 0; i < values.length; i += 1 ) {\n                    c = values[ i ];\n    \n                    // Ignore the terminating NULL byte(s):\n                    if ( c === '\\u0000' ) {\n                        break;\n                    }\n                    str += c;\n                }\n    \n                return str;\n            }\n            return values;\n        };\n    \n        EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian,\n                data ) {\n    \n            var tag = dataView.getUint16( offset, littleEndian );\n            data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset,\n                    dataView.getUint16( offset + 2, littleEndian ),    // tag type\n                    dataView.getUint32( offset + 4, littleEndian ),    // tag length\n                    littleEndian );\n        };\n    \n        EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset,\n                littleEndian, data ) {\n    \n            var tagsNumber, dirEndOffset, i;\n    \n            if ( dirOffset + 6 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory offset.');\n                return;\n            }\n    \n            tagsNumber = dataView.getUint16( dirOffset, littleEndian );\n            dirEndOffset = dirOffset + 2 + 12 * tagsNumber;\n    \n            if ( dirEndOffset + 4 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory size.');\n                return;\n            }\n    \n            for ( i = 0; i < tagsNumber; i += 1 ) {\n                this.parseExifTag( dataView, tiffOffset,\n                        dirOffset + 2 + 12 * i,    // tag offset\n                        littleEndian, data );\n            }\n    \n            // Return the offset to the next directory:\n            return dataView.getUint32( dirEndOffset, littleEndian );\n        };\n    \n        // EXIF.getExifThumbnail = function(dataView, offset, length) {\n        //     var hexData,\n        //         i,\n        //         b;\n        //     if (!length || offset + length > dataView.byteLength) {\n        //         Base.log('Invalid Exif data: Invalid thumbnail data.');\n        //         return;\n        //     }\n        //     hexData = [];\n        //     for (i = 0; i < length; i += 1) {\n        //         b = dataView.getUint8(offset + i);\n        //         hexData.push((b < 16 ? '0' : '') + b.toString(16));\n        //     }\n        //     return 'data:image/jpeg,%' + hexData.join('%');\n        // };\n    \n        EXIF.parseExifData = function( dataView, offset, length, data ) {\n    \n            var tiffOffset = offset + 10,\n                littleEndian, dirOffset;\n    \n            // Check for the ASCII code for \"Exif\" (0x45786966):\n            if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) {\n                // No Exif data, might be XMP data instead\n                return;\n            }\n            if ( tiffOffset + 8 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid segment size.');\n                return;\n            }\n    \n            // Check for the two null bytes:\n            if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) {\n                Base.log('Invalid Exif data: Missing byte alignment offset.');\n                return;\n            }\n    \n            // Check the byte alignment:\n            switch ( dataView.getUint16( tiffOffset ) ) {\n                case 0x4949:\n                    littleEndian = true;\n                    break;\n    \n                case 0x4D4D:\n                    littleEndian = false;\n                    break;\n    \n                default:\n                    Base.log('Invalid Exif data: Invalid byte alignment marker.');\n                    return;\n            }\n    \n            // Check for the TIFF tag marker (0x002A):\n            if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) {\n                Base.log('Invalid Exif data: Missing TIFF marker.');\n                return;\n            }\n    \n            // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal:\n            dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian );\n            // Create the exif object to store the tags:\n            data.exif = new EXIF.ExifMap();\n            // Parse the tags of the main image directory and retrieve the\n            // offset to the next directory, usually the thumbnail directory:\n            dirOffset = EXIF.parseExifTags( dataView, tiffOffset,\n                    tiffOffset + dirOffset, littleEndian, data );\n    \n            // 尝试读取缩略图\n            // if ( dirOffset ) {\n            //     thumbnailData = {exif: {}};\n            //     dirOffset = EXIF.parseExifTags(\n            //         dataView,\n            //         tiffOffset,\n            //         tiffOffset + dirOffset,\n            //         littleEndian,\n            //         thumbnailData\n            //     );\n    \n            //     // Check for JPEG Thumbnail offset:\n            //     if (thumbnailData.exif[0x0201]) {\n            //         data.exif.Thumbnail = EXIF.getExifThumbnail(\n            //             dataView,\n            //             tiffOffset + thumbnailData.exif[0x0201],\n            //             thumbnailData.exif[0x0202] // Thumbnail data length\n            //         );\n            //     }\n            // }\n        };\n    \n        ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData );\n        return EXIF;\n    });\n    /**\n     * 这个方式性能不行，但是可以解决android里面的toDataUrl的bug\n     * android里面toDataUrl('image/jpege')得到的结果却是png.\n     *\n     * 所以这里没辙，只能借助这个工具\n     * @fileOverview jpeg encoder\n     */\n    define('runtime/html5/jpegencoder',[], function( require, exports, module ) {\n    \n        /*\n          Copyright (c) 2008, Adobe Systems Incorporated\n          All rights reserved.\n    \n          Redistribution and use in source and binary forms, with or without\n          modification, are permitted provided that the following conditions are\n          met:\n    \n          * Redistributions of source code must retain the above copyright notice,\n            this list of conditions and the following disclaimer.\n    \n          * Redistributions in binary form must reproduce the above copyright\n            notice, this list of conditions and the following disclaimer in the\n            documentation and/or other materials provided with the distribution.\n    \n          * Neither the name of Adobe Systems Incorporated nor the names of its\n            contributors may be used to endorse or promote products derived from\n            this software without specific prior written permission.\n    \n          THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n          IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n          THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n          PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n          CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n          EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n          PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n          PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n          LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n          NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n          SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n        */\n        /*\n        JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n    \n        Basic GUI blocking jpeg encoder\n        */\n    \n        function JPEGEncoder(quality) {\n          var self = this;\n            var fround = Math.round;\n            var ffloor = Math.floor;\n            var YTable = new Array(64);\n            var UVTable = new Array(64);\n            var fdtbl_Y = new Array(64);\n            var fdtbl_UV = new Array(64);\n            var YDC_HT;\n            var UVDC_HT;\n            var YAC_HT;\n            var UVAC_HT;\n    \n            var bitcode = new Array(65535);\n            var category = new Array(65535);\n            var outputfDCTQuant = new Array(64);\n            var DU = new Array(64);\n            var byteout = [];\n            var bytenew = 0;\n            var bytepos = 7;\n    \n            var YDU = new Array(64);\n            var UDU = new Array(64);\n            var VDU = new Array(64);\n            var clt = new Array(256);\n            var RGB_YUV_TABLE = new Array(2048);\n            var currentQuality;\n    \n            var ZigZag = [\n                     0, 1, 5, 6,14,15,27,28,\n                     2, 4, 7,13,16,26,29,42,\n                     3, 8,12,17,25,30,41,43,\n                     9,11,18,24,31,40,44,53,\n                    10,19,23,32,39,45,52,54,\n                    20,22,33,38,46,51,55,60,\n                    21,34,37,47,50,56,59,61,\n                    35,36,48,49,57,58,62,63\n                ];\n    \n            var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];\n            var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];\n            var std_ac_luminance_values = [\n                    0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,\n                    0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,\n                    0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n                    0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,\n                    0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,\n                    0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n                    0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,\n                    0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\n                    0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n                    0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\n                    0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,\n                    0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n                    0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,\n                    0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,\n                    0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n                    0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,\n                    0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,\n                    0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n                    0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,\n                    0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];\n            var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];\n            var std_ac_chrominance_values = [\n                    0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,\n                    0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,\n                    0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n                    0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,\n                    0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,\n                    0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n                    0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,\n                    0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,\n                    0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n                    0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,\n                    0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,\n                    0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n                    0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,\n                    0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,\n                    0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n                    0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,\n                    0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,\n                    0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n                    0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,\n                    0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            function initQuantTables(sf){\n                    var YQT = [\n                        16, 11, 10, 16, 24, 40, 51, 61,\n                        12, 12, 14, 19, 26, 58, 60, 55,\n                        14, 13, 16, 24, 40, 57, 69, 56,\n                        14, 17, 22, 29, 51, 87, 80, 62,\n                        18, 22, 37, 56, 68,109,103, 77,\n                        24, 35, 55, 64, 81,104,113, 92,\n                        49, 64, 78, 87,103,121,120,101,\n                        72, 92, 95, 98,112,100,103, 99\n                    ];\n    \n                    for (var i = 0; i < 64; i++) {\n                        var t = ffloor((YQT[i]*sf+50)/100);\n                        if (t < 1) {\n                            t = 1;\n                        } else if (t > 255) {\n                            t = 255;\n                        }\n                        YTable[ZigZag[i]] = t;\n                    }\n                    var UVQT = [\n                        17, 18, 24, 47, 99, 99, 99, 99,\n                        18, 21, 26, 66, 99, 99, 99, 99,\n                        24, 26, 56, 99, 99, 99, 99, 99,\n                        47, 66, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99\n                    ];\n                    for (var j = 0; j < 64; j++) {\n                        var u = ffloor((UVQT[j]*sf+50)/100);\n                        if (u < 1) {\n                            u = 1;\n                        } else if (u > 255) {\n                            u = 255;\n                        }\n                        UVTable[ZigZag[j]] = u;\n                    }\n                    var aasf = [\n                        1.0, 1.387039845, 1.306562965, 1.175875602,\n                        1.0, 0.785694958, 0.541196100, 0.275899379\n                    ];\n                    var k = 0;\n                    for (var row = 0; row < 8; row++)\n                    {\n                        for (var col = 0; col < 8; col++)\n                        {\n                            fdtbl_Y[k]  = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            k++;\n                        }\n                    }\n                }\n    \n                function computeHuffmanTbl(nrcodes, std_table){\n                    var codevalue = 0;\n                    var pos_in_table = 0;\n                    var HT = new Array();\n                    for (var k = 1; k <= 16; k++) {\n                        for (var j = 1; j <= nrcodes[k]; j++) {\n                            HT[std_table[pos_in_table]] = [];\n                            HT[std_table[pos_in_table]][0] = codevalue;\n                            HT[std_table[pos_in_table]][1] = k;\n                            pos_in_table++;\n                            codevalue++;\n                        }\n                        codevalue*=2;\n                    }\n                    return HT;\n                }\n    \n                function initHuffmanTbl()\n                {\n                    YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);\n                    UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);\n                    YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);\n                    UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);\n                }\n    \n                function initCategoryNumber()\n                {\n                    var nrlower = 1;\n                    var nrupper = 2;\n                    for (var cat = 1; cat <= 15; cat++) {\n                        //Positive numbers\n                        for (var nr = nrlower; nr<nrupper; nr++) {\n                            category[32767+nr] = cat;\n                            bitcode[32767+nr] = [];\n                            bitcode[32767+nr][1] = cat;\n                            bitcode[32767+nr][0] = nr;\n                        }\n                        //Negative numbers\n                        for (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) {\n                            category[32767+nrneg] = cat;\n                            bitcode[32767+nrneg] = [];\n                            bitcode[32767+nrneg][1] = cat;\n                            bitcode[32767+nrneg][0] = nrupper-1+nrneg;\n                        }\n                        nrlower <<= 1;\n                        nrupper <<= 1;\n                    }\n                }\n    \n                function initRGBYUVTable() {\n                    for(var i = 0; i < 256;i++) {\n                        RGB_YUV_TABLE[i]            =  19595 * i;\n                        RGB_YUV_TABLE[(i+ 256)>>0]  =  38470 * i;\n                        RGB_YUV_TABLE[(i+ 512)>>0]  =   7471 * i + 0x8000;\n                        RGB_YUV_TABLE[(i+ 768)>>0]  = -11059 * i;\n                        RGB_YUV_TABLE[(i+1024)>>0]  = -21709 * i;\n                        RGB_YUV_TABLE[(i+1280)>>0]  =  32768 * i + 0x807FFF;\n                        RGB_YUV_TABLE[(i+1536)>>0]  = -27439 * i;\n                        RGB_YUV_TABLE[(i+1792)>>0]  = - 5329 * i;\n                    }\n                }\n    \n                // IO functions\n                function writeBits(bs)\n                {\n                    var value = bs[0];\n                    var posval = bs[1]-1;\n                    while ( posval >= 0 ) {\n                        if (value & (1 << posval) ) {\n                            bytenew |= (1 << bytepos);\n                        }\n                        posval--;\n                        bytepos--;\n                        if (bytepos < 0) {\n                            if (bytenew == 0xFF) {\n                                writeByte(0xFF);\n                                writeByte(0);\n                            }\n                            else {\n                                writeByte(bytenew);\n                            }\n                            bytepos=7;\n                            bytenew=0;\n                        }\n                    }\n                }\n    \n                function writeByte(value)\n                {\n                    byteout.push(clt[value]); // write char directly instead of converting later\n                }\n    \n                function writeWord(value)\n                {\n                    writeByte((value>>8)&0xFF);\n                    writeByte((value   )&0xFF);\n                }\n    \n                // DCT & quantization core\n                function fDCTQuant(data, fdtbl)\n                {\n                    var d0, d1, d2, d3, d4, d5, d6, d7;\n                    /* Pass 1: process rows. */\n                    var dataOff=0;\n                    var i;\n                    var I8 = 8;\n                    var I64 = 64;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff+1];\n                        d2 = data[dataOff+2];\n                        d3 = data[dataOff+3];\n                        d4 = data[dataOff+4];\n                        d5 = data[dataOff+5];\n                        d6 = data[dataOff+6];\n                        d7 = data[dataOff+7];\n    \n                        var tmp0 = d0 + d7;\n                        var tmp7 = d0 - d7;\n                        var tmp1 = d1 + d6;\n                        var tmp6 = d1 - d6;\n                        var tmp2 = d2 + d5;\n                        var tmp5 = d2 - d5;\n                        var tmp3 = d3 + d4;\n                        var tmp4 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10 = tmp0 + tmp3;    /* phase 2 */\n                        var tmp13 = tmp0 - tmp3;\n                        var tmp11 = tmp1 + tmp2;\n                        var tmp12 = tmp1 - tmp2;\n    \n                        data[dataOff] = tmp10 + tmp11; /* phase 3 */\n                        data[dataOff+4] = tmp10 - tmp11;\n    \n                        var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n                        data[dataOff+2] = tmp13 + z1; /* phase 5 */\n                        data[dataOff+6] = tmp13 - z1;\n    \n                        /* Odd part */\n                        tmp10 = tmp4 + tmp5; /* phase 2 */\n                        tmp11 = tmp5 + tmp6;\n                        tmp12 = tmp6 + tmp7;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n                        var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */\n                        var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n                        var z3 = tmp11 * 0.707106781; /* c4 */\n    \n                        var z11 = tmp7 + z3;    /* phase 5 */\n                        var z13 = tmp7 - z3;\n    \n                        data[dataOff+5] = z13 + z2; /* phase 6 */\n                        data[dataOff+3] = z13 - z2;\n                        data[dataOff+1] = z11 + z4;\n                        data[dataOff+7] = z11 - z4;\n    \n                        dataOff += 8; /* advance pointer to next row */\n                    }\n    \n                    /* Pass 2: process columns. */\n                    dataOff = 0;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff + 8];\n                        d2 = data[dataOff + 16];\n                        d3 = data[dataOff + 24];\n                        d4 = data[dataOff + 32];\n                        d5 = data[dataOff + 40];\n                        d6 = data[dataOff + 48];\n                        d7 = data[dataOff + 56];\n    \n                        var tmp0p2 = d0 + d7;\n                        var tmp7p2 = d0 - d7;\n                        var tmp1p2 = d1 + d6;\n                        var tmp6p2 = d1 - d6;\n                        var tmp2p2 = d2 + d5;\n                        var tmp5p2 = d2 - d5;\n                        var tmp3p2 = d3 + d4;\n                        var tmp4p2 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10p2 = tmp0p2 + tmp3p2;  /* phase 2 */\n                        var tmp13p2 = tmp0p2 - tmp3p2;\n                        var tmp11p2 = tmp1p2 + tmp2p2;\n                        var tmp12p2 = tmp1p2 - tmp2p2;\n    \n                        data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n                        data[dataOff+32] = tmp10p2 - tmp11p2;\n    \n                        var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n                        data[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */\n                        data[dataOff+48] = tmp13p2 - z1p2;\n    \n                        /* Odd part */\n                        tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n                        tmp11p2 = tmp5p2 + tmp6p2;\n                        tmp12p2 = tmp6p2 + tmp7p2;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n                        var z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */\n                        var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n                        var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n    \n                        var z11p2 = tmp7p2 + z3p2;  /* phase 5 */\n                        var z13p2 = tmp7p2 - z3p2;\n    \n                        data[dataOff+40] = z13p2 + z2p2; /* phase 6 */\n                        data[dataOff+24] = z13p2 - z2p2;\n                        data[dataOff+ 8] = z11p2 + z4p2;\n                        data[dataOff+56] = z11p2 - z4p2;\n    \n                        dataOff++; /* advance pointer to next column */\n                    }\n    \n                    // Quantize/descale the coefficients\n                    var fDCTQuant;\n                    for (i=0; i<I64; ++i)\n                    {\n                        // Apply the quantization and scaling factor & Round to nearest integer\n                        fDCTQuant = data[i]*fdtbl[i];\n                        outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0);\n                        //outputfDCTQuant[i] = fround(fDCTQuant);\n    \n                    }\n                    return outputfDCTQuant;\n                }\n    \n                function writeAPP0()\n                {\n                    writeWord(0xFFE0); // marker\n                    writeWord(16); // length\n                    writeByte(0x4A); // J\n                    writeByte(0x46); // F\n                    writeByte(0x49); // I\n                    writeByte(0x46); // F\n                    writeByte(0); // = \"JFIF\",'\\0'\n                    writeByte(1); // versionhi\n                    writeByte(1); // versionlo\n                    writeByte(0); // xyunits\n                    writeWord(1); // xdensity\n                    writeWord(1); // ydensity\n                    writeByte(0); // thumbnwidth\n                    writeByte(0); // thumbnheight\n                }\n    \n                function writeSOF0(width, height)\n                {\n                    writeWord(0xFFC0); // marker\n                    writeWord(17);   // length, truecolor YUV JPG\n                    writeByte(8);    // precision\n                    writeWord(height);\n                    writeWord(width);\n                    writeByte(3);    // nrofcomponents\n                    writeByte(1);    // IdY\n                    writeByte(0x11); // HVY\n                    writeByte(0);    // QTY\n                    writeByte(2);    // IdU\n                    writeByte(0x11); // HVU\n                    writeByte(1);    // QTU\n                    writeByte(3);    // IdV\n                    writeByte(0x11); // HVV\n                    writeByte(1);    // QTV\n                }\n    \n                function writeDQT()\n                {\n                    writeWord(0xFFDB); // marker\n                    writeWord(132);    // length\n                    writeByte(0);\n                    for (var i=0; i<64; i++) {\n                        writeByte(YTable[i]);\n                    }\n                    writeByte(1);\n                    for (var j=0; j<64; j++) {\n                        writeByte(UVTable[j]);\n                    }\n                }\n    \n                function writeDHT()\n                {\n                    writeWord(0xFFC4); // marker\n                    writeWord(0x01A2); // length\n    \n                    writeByte(0); // HTYDCinfo\n                    for (var i=0; i<16; i++) {\n                        writeByte(std_dc_luminance_nrcodes[i+1]);\n                    }\n                    for (var j=0; j<=11; j++) {\n                        writeByte(std_dc_luminance_values[j]);\n                    }\n    \n                    writeByte(0x10); // HTYACinfo\n                    for (var k=0; k<16; k++) {\n                        writeByte(std_ac_luminance_nrcodes[k+1]);\n                    }\n                    for (var l=0; l<=161; l++) {\n                        writeByte(std_ac_luminance_values[l]);\n                    }\n    \n                    writeByte(1); // HTUDCinfo\n                    for (var m=0; m<16; m++) {\n                        writeByte(std_dc_chrominance_nrcodes[m+1]);\n                    }\n                    for (var n=0; n<=11; n++) {\n                        writeByte(std_dc_chrominance_values[n]);\n                    }\n    \n                    writeByte(0x11); // HTUACinfo\n                    for (var o=0; o<16; o++) {\n                        writeByte(std_ac_chrominance_nrcodes[o+1]);\n                    }\n                    for (var p=0; p<=161; p++) {\n                        writeByte(std_ac_chrominance_values[p]);\n                    }\n                }\n    \n                function writeSOS()\n                {\n                    writeWord(0xFFDA); // marker\n                    writeWord(12); // length\n                    writeByte(3); // nrofcomponents\n                    writeByte(1); // IdY\n                    writeByte(0); // HTY\n                    writeByte(2); // IdU\n                    writeByte(0x11); // HTU\n                    writeByte(3); // IdV\n                    writeByte(0x11); // HTV\n                    writeByte(0); // Ss\n                    writeByte(0x3f); // Se\n                    writeByte(0); // Bf\n                }\n    \n                function processDU(CDU, fdtbl, DC, HTDC, HTAC){\n                    var EOB = HTAC[0x00];\n                    var M16zeroes = HTAC[0xF0];\n                    var pos;\n                    var I16 = 16;\n                    var I63 = 63;\n                    var I64 = 64;\n                    var DU_DCT = fDCTQuant(CDU, fdtbl);\n                    //ZigZag reorder\n                    for (var j=0;j<I64;++j) {\n                        DU[ZigZag[j]]=DU_DCT[j];\n                    }\n                    var Diff = DU[0] - DC; DC = DU[0];\n                    //Encode DC\n                    if (Diff==0) {\n                        writeBits(HTDC[0]); // Diff might be 0\n                    } else {\n                        pos = 32767+Diff;\n                        writeBits(HTDC[category[pos]]);\n                        writeBits(bitcode[pos]);\n                    }\n                    //Encode ACs\n                    var end0pos = 63; // was const... which is crazy\n                    for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {};\n                    //end0pos = first element in reverse order !=0\n                    if ( end0pos == 0) {\n                        writeBits(EOB);\n                        return DC;\n                    }\n                    var i = 1;\n                    var lng;\n                    while ( i <= end0pos ) {\n                        var startpos = i;\n                        for (; (DU[i]==0) && (i<=end0pos); ++i) {}\n                        var nrzeroes = i-startpos;\n                        if ( nrzeroes >= I16 ) {\n                            lng = nrzeroes>>4;\n                            for (var nrmarker=1; nrmarker <= lng; ++nrmarker)\n                                writeBits(M16zeroes);\n                            nrzeroes = nrzeroes&0xF;\n                        }\n                        pos = 32767+DU[i];\n                        writeBits(HTAC[(nrzeroes<<4)+category[pos]]);\n                        writeBits(bitcode[pos]);\n                        i++;\n                    }\n                    if ( end0pos != I63 ) {\n                        writeBits(EOB);\n                    }\n                    return DC;\n                }\n    \n                function initCharLookupTable(){\n                    var sfcc = String.fromCharCode;\n                    for(var i=0; i < 256; i++){ ///// ACHTUNG // 255\n                        clt[i] = sfcc(i);\n                    }\n                }\n    \n                this.encode = function(image,quality) // image data object\n                {\n                    // var time_start = new Date().getTime();\n    \n                    if(quality) setQuality(quality);\n    \n                    // Initialize bit writer\n                    byteout = new Array();\n                    bytenew=0;\n                    bytepos=7;\n    \n                    // Add JPEG headers\n                    writeWord(0xFFD8); // SOI\n                    writeAPP0();\n                    writeDQT();\n                    writeSOF0(image.width,image.height);\n                    writeDHT();\n                    writeSOS();\n    \n    \n                    // Encode 8x8 macroblocks\n                    var DCY=0;\n                    var DCU=0;\n                    var DCV=0;\n    \n                    bytenew=0;\n                    bytepos=7;\n    \n    \n                    this.encode.displayName = \"_encode_\";\n    \n                    var imageData = image.data;\n                    var width = image.width;\n                    var height = image.height;\n    \n                    var quadWidth = width*4;\n                    var tripleWidth = width*3;\n    \n                    var x, y = 0;\n                    var r, g, b;\n                    var start,p, col,row,pos;\n                    while(y < height){\n                        x = 0;\n                        while(x < quadWidth){\n                        start = quadWidth * y + x;\n                        p = start;\n                        col = -1;\n                        row = 0;\n    \n                        for(pos=0; pos < 64; pos++){\n                            row = pos >> 3;// /8\n                            col = ( pos & 7 ) * 4; // %8\n                            p = start + ( row * quadWidth ) + col;\n    \n                            if(y+row >= height){ // padding bottom\n                                p-= (quadWidth*(y+1+row-height));\n                            }\n    \n                            if(x+col >= quadWidth){ // padding right\n                                p-= ((x+col) - quadWidth +4)\n                            }\n    \n                            r = imageData[ p++ ];\n                            g = imageData[ p++ ];\n                            b = imageData[ p++ ];\n    \n    \n                            /* // calculate YUV values dynamically\n                            YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n                            UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n                            VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n                            */\n    \n                            // use lookup table (slightly faster)\n                            YDU[pos] = ((RGB_YUV_TABLE[r]             + RGB_YUV_TABLE[(g +  256)>>0] + RGB_YUV_TABLE[(b +  512)>>0]) >> 16)-128;\n                            UDU[pos] = ((RGB_YUV_TABLE[(r +  768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128;\n                            VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128;\n    \n                        }\n    \n                        DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n                        DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n                        DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n                        x+=32;\n                        }\n                        y+=8;\n                    }\n    \n    \n                    ////////////////////////////////////////////////////////////////\n    \n                    // Do the bit alignment of the EOI marker\n                    if ( bytepos >= 0 ) {\n                        var fillbits = [];\n                        fillbits[1] = bytepos+1;\n                        fillbits[0] = (1<<(bytepos+1))-1;\n                        writeBits(fillbits);\n                    }\n    \n                    writeWord(0xFFD9); //EOI\n    \n                    var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join(''));\n    \n                    byteout = [];\n    \n                    // benchmarking\n                    // var duration = new Date().getTime() - time_start;\n                    // console.log('Encoding time: '+ currentQuality + 'ms');\n                    //\n    \n                    return jpegDataUri\n            }\n    \n            function setQuality(quality){\n                if (quality <= 0) {\n                    quality = 1;\n                }\n                if (quality > 100) {\n                    quality = 100;\n                }\n    \n                if(currentQuality == quality) return // don't recalc if unchanged\n    \n                var sf = 0;\n                if (quality < 50) {\n                    sf = Math.floor(5000 / quality);\n                } else {\n                    sf = Math.floor(200 - quality*2);\n                }\n    \n                initQuantTables(sf);\n                currentQuality = quality;\n                // console.log('Quality set to: '+quality +'%');\n            }\n    \n            function init(){\n                // var time_start = new Date().getTime();\n                if(!quality) quality = 50;\n                // Create tables\n                initCharLookupTable()\n                initHuffmanTbl();\n                initCategoryNumber();\n                initRGBYUVTable();\n    \n                setQuality(quality);\n                // var duration = new Date().getTime() - time_start;\n                // console.log('Initialization '+ duration + 'ms');\n            }\n    \n            init();\n    \n        };\n    \n        JPEGEncoder.encode = function( data, quality ) {\n            var encoder = new JPEGEncoder( quality );\n    \n            return encoder.encode( data );\n        }\n    \n        return JPEGEncoder;\n    });\n    /**\n     * @fileOverview Fix android canvas.toDataUrl bug.\n     */\n    define('runtime/html5/androidpatch',[\n        'runtime/html5/util',\n        'runtime/html5/jpegencoder',\n        'base'\n    ], function( Util, encoder, Base ) {\n        var origin = Util.canvasToDataUrl,\n            supportJpeg;\n    \n        Util.canvasToDataUrl = function( canvas, type, quality ) {\n            var ctx, w, h, fragement, parts;\n    \n            // 非android手机直接跳过。\n            if ( !Base.os.android ) {\n                return origin.apply( null, arguments );\n            }\n    \n            // 检测是否canvas支持jpeg导出，根据数据格式来判断。\n            // JPEG 前两位分别是：255, 216\n            if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) {\n                fragement = origin.apply( null, arguments );\n    \n                parts = fragement.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    fragement = atob( parts[ 1 ] );\n                } else {\n                    fragement = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                fragement = fragement.substring( 0, 2 );\n    \n                supportJpeg = fragement.charCodeAt( 0 ) === 255 &&\n                        fragement.charCodeAt( 1 ) === 216;\n            }\n    \n            // 只有在android环境下才修复\n            if ( type === 'image/jpeg' && !supportJpeg ) {\n                w = canvas.width;\n                h = canvas.height;\n                ctx = canvas.getContext('2d');\n    \n                return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality );\n            }\n    \n            return origin.apply( null, arguments );\n        };\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('runtime/html5/image',[\n        'base',\n        'runtime/html5/runtime',\n        'runtime/html5/util'\n    ], function( Base, Html5Runtime, Util ) {\n    \n        var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';\n    \n        return Html5Runtime.register( 'Image', {\n    \n            // flag: 标记是否被修改过。\n            modified: false,\n    \n            init: function() {\n                var me = this,\n                    img = new Image();\n    \n                img.onload = function() {\n    \n                    me._info = {\n                        type: me.type,\n                        width: this.width,\n                        height: this.height\n                    };\n    \n                    // 读取meta信息。\n                    if ( !me._metas && 'image/jpeg' === me.type ) {\n                        Util.parseMeta( me._blob, function( error, ret ) {\n                            me._metas = ret;\n                            me.owner.trigger('load');\n                        });\n                    } else {\n                        me.owner.trigger('load');\n                    }\n                };\n    \n                img.onerror = function() {\n                    me.owner.trigger('error');\n                };\n    \n                me._img = img;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    img = me._img;\n    \n                me._blob = blob;\n                me.type = blob.type;\n                img.src = Util.createObjectURL( blob.getSource() );\n                me.owner.once( 'load', function() {\n                    Util.revokeObjectURL( img.src );\n                });\n            },\n    \n            resize: function( width, height ) {\n                var canvas = this._canvas ||\n                        (this._canvas = document.createElement('canvas'));\n    \n                this._resize( this._img, canvas, width, height );\n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger( 'complete', 'resize' );\n            },\n    \n            crop: function( x, y, w, h, s ) {\n                var cvs = this._canvas ||\n                        (this._canvas = document.createElement('canvas')),\n                    opts = this.options,\n                    img = this._img,\n                    iw = img.naturalWidth,\n                    ih = img.naturalHeight,\n                    orientation = this.getOrientation();\n    \n                s = s || 1;\n    \n                // todo 解决 orientation 的问题。\n                // values that require 90 degree rotation\n                // if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                //     switch ( orientation ) {\n                //         case 6:\n                //             tmp = x;\n                //             x = y;\n                //             y = iw * s - tmp - w;\n                //             console.log(ih * s, tmp, w)\n                //             break;\n                //     }\n    \n                //     (w ^= h, h ^= w, w ^= h);\n                // }\n    \n                cvs.width = w;\n                cvs.height = h;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n                this._renderImageToCanvas( cvs, img, -x, -y, iw * s, ih * s );\n    \n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger( 'complete', 'crop' );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this._blob,\n                    opts = this.options,\n                    canvas;\n    \n                type = type || this.type;\n    \n                // blob需要重新生成。\n                if ( this.modified || this.type !== type ) {\n                    canvas = this._canvas;\n    \n                    if ( type === 'image/jpeg' ) {\n    \n                        blob = Util.canvasToDataUrl( canvas, type, opts.quality );\n    \n                        if ( opts.preserveHeaders && this._metas &&\n                                this._metas.imageHead ) {\n    \n                            blob = Util.dataURL2ArrayBuffer( blob );\n                            blob = Util.updateImageHead( blob,\n                                    this._metas.imageHead );\n                            blob = Util.arrayBufferToBlob( blob, type );\n                            return blob;\n                        }\n                    } else {\n                        blob = Util.canvasToDataUrl( canvas, type );\n                    }\n    \n                    blob = Util.dataURL2Blob( blob );\n                }\n    \n                return blob;\n            },\n    \n            getAsDataUrl: function( type ) {\n                var opts = this.options;\n    \n                type = type || this.type;\n    \n                if ( type === 'image/jpeg' ) {\n                    return Util.canvasToDataUrl( this._canvas, type, opts.quality );\n                } else {\n                    return this._canvas.toDataURL( type );\n                }\n            },\n    \n            getOrientation: function() {\n                return this._metas && this._metas.exif &&\n                        this._metas.exif.get('Orientation') || 1;\n            },\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            destroy: function() {\n                var canvas = this._canvas;\n                this._img.onload = null;\n    \n                if ( canvas ) {\n                    canvas.getContext('2d')\n                            .clearRect( 0, 0, canvas.width, canvas.height );\n                    canvas.width = canvas.height = 0;\n                    this._canvas = null;\n                }\n    \n                // 释放内存。非常重要，否则释放不了image的内存。\n                this._img.src = BLANK;\n                this._img = this._blob = null;\n            },\n    \n            _resize: function( img, cvs, width, height ) {\n                var opts = this.options,\n                    naturalWidth = img.width,\n                    naturalHeight = img.height,\n                    orientation = this.getOrientation(),\n                    scale, w, h, x, y;\n    \n                // values that require 90 degree rotation\n                if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                    // 交换width, height的值。\n                    width ^= height;\n                    height ^= width;\n                    width ^= height;\n                }\n    \n                scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth,\n                        height / naturalHeight );\n    \n                // 不允许放大。\n                opts.allowMagnify || (scale = Math.min( 1, scale ));\n    \n                w = naturalWidth * scale;\n                h = naturalHeight * scale;\n    \n                if ( opts.crop ) {\n                    cvs.width = width;\n                    cvs.height = height;\n                } else {\n                    cvs.width = w;\n                    cvs.height = h;\n                }\n    \n                x = (cvs.width - w) / 2;\n                y = (cvs.height - h) / 2;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n    \n                this._renderImageToCanvas( cvs, img, x, y, w, h );\n            },\n    \n            _rotate2Orientaion: function( canvas, orientation ) {\n                var width = canvas.width,\n                    height = canvas.height,\n                    ctx = canvas.getContext('2d');\n    \n                switch ( orientation ) {\n                    case 5:\n                    case 6:\n                    case 7:\n                    case 8:\n                        canvas.width = height;\n                        canvas.height = width;\n                        break;\n                }\n    \n                switch ( orientation ) {\n                    case 2:    // horizontal flip\n                        ctx.translate( width, 0 );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 3:    // 180 rotate left\n                        ctx.translate( width, height );\n                        ctx.rotate( Math.PI );\n                        break;\n    \n                    case 4:    // vertical flip\n                        ctx.translate( 0, height );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 5:    // vertical flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 6:    // 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( 0, -height );\n                        break;\n    \n                    case 7:    // horizontal flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( width, -height );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 8:    // 90 rotate left\n                        ctx.rotate( -0.5 * Math.PI );\n                        ctx.translate( -width, 0 );\n                        break;\n                }\n            },\n    \n            // https://github.com/stomita/ios-imagefile-megapixel/\n            // blob/master/src/megapix-image.js\n            _renderImageToCanvas: (function() {\n    \n                // 如果不是ios, 不需要这么复杂！\n                if ( !Base.os.ios ) {\n                    return function( canvas ) {\n                        var args = Base.slice( arguments, 1 ),\n                            ctx = canvas.getContext('2d');\n    \n                        ctx.drawImage.apply( ctx, args );\n                    };\n                }\n    \n                /**\n                 * Detecting vertical squash in loaded image.\n                 * Fixes a bug which squash image vertically while drawing into\n                 * canvas for some images.\n                 */\n                function detectVerticalSquash( img, iw, ih ) {\n                    var canvas = document.createElement('canvas'),\n                        ctx = canvas.getContext('2d'),\n                        sy = 0,\n                        ey = ih,\n                        py = ih,\n                        data, alpha, ratio;\n    \n    \n                    canvas.width = 1;\n                    canvas.height = ih;\n                    ctx.drawImage( img, 0, 0 );\n                    data = ctx.getImageData( 0, 0, 1, ih ).data;\n    \n                    // search image edge pixel position in case\n                    // it is squashed vertically.\n                    while ( py > sy ) {\n                        alpha = data[ (py - 1) * 4 + 3 ];\n    \n                        if ( alpha === 0 ) {\n                            ey = py;\n                        } else {\n                            sy = py;\n                        }\n    \n                        py = (ey + sy) >> 1;\n                    }\n    \n                    ratio = (py / ih);\n                    return (ratio === 0) ? 1 : ratio;\n                }\n    \n                // fix ie7 bug\n                // http://stackoverflow.com/questions/11929099/\n                // html5-canvas-drawimage-ratio-bug-ios\n                if ( Base.os.ios >= 7 ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        var iw = img.naturalWidth,\n                            ih = img.naturalHeight,\n                            vertSquashRatio = detectVerticalSquash( img, iw, ih );\n    \n                        return canvas.getContext('2d').drawImage( img, 0, 0,\n                                iw * vertSquashRatio, ih * vertSquashRatio,\n                                x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detect subsampling in loaded image.\n                 * In iOS, larger images than 2M pixels may be\n                 * subsampled in rendering.\n                 */\n                function detectSubsampling( img ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        canvas, ctx;\n    \n                    // subsampling may happen overmegapixel image\n                    if ( iw * ih > 1024 * 1024 ) {\n                        canvas = document.createElement('canvas');\n                        canvas.width = canvas.height = 1;\n                        ctx = canvas.getContext('2d');\n                        ctx.drawImage( img, -iw + 1, 0 );\n    \n                        // subsampled image becomes half smaller in rendering size.\n                        // check alpha channel value to confirm image is covering\n                        // edge pixel or not. if alpha value is 0\n                        // image is not covering, hence subsampled.\n                        return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0;\n                    } else {\n                        return false;\n                    }\n                }\n    \n    \n                return function( canvas, img, x, y, width, height ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        ctx = canvas.getContext('2d'),\n                        subsampled = detectSubsampling( img ),\n                        doSquash = this.type === 'image/jpeg',\n                        d = 1024,\n                        sy = 0,\n                        dy = 0,\n                        tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx;\n    \n                    if ( subsampled ) {\n                        iw /= 2;\n                        ih /= 2;\n                    }\n    \n                    ctx.save();\n                    tmpCanvas = document.createElement('canvas');\n                    tmpCanvas.width = tmpCanvas.height = d;\n    \n                    tmpCtx = tmpCanvas.getContext('2d');\n                    vertSquashRatio = doSquash ?\n                            detectVerticalSquash( img, iw, ih ) : 1;\n    \n                    dw = Math.ceil( d * width / iw );\n                    dh = Math.ceil( d * height / ih / vertSquashRatio );\n    \n                    while ( sy < ih ) {\n                        sx = 0;\n                        dx = 0;\n                        while ( sx < iw ) {\n                            tmpCtx.clearRect( 0, 0, d, d );\n                            tmpCtx.drawImage( img, -sx, -sy );\n                            ctx.drawImage( tmpCanvas, 0, 0, d, d,\n                                    x + dx, y + dy, dw, dh );\n                            sx += d;\n                            dx += dw;\n                        }\n                        sy += d;\n                        dy += dh;\n                    }\n                    ctx.restore();\n                    tmpCanvas = tmpCtx = null;\n                };\n            })()\n        });\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    // 强制设置成 content-type 为文件流。\n                    xhr.overrideMimeType &&\n                            xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/html5/md5',[\n        'runtime/html5/runtime'\n    ], function( FlashRuntime ) {\n    \n        /*\n         * Fastest md5 implementation around (JKM md5)\n         * Credits: Joseph Myers\n         *\n         * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n         * @see http://jsperf.com/md5-shootout/7\n         */\n    \n        /* this function is much faster,\n          so if possible we use it. Some IEs\n          are the only ones I know of that\n          need the idiotic second function,\n          generated by an if clause.  */\n        var add32 = function (a, b) {\n            return (a + b) & 0xFFFFFFFF;\n        },\n    \n        cmn = function (q, a, b, x, s, t) {\n            a = add32(add32(a, q), add32(x, t));\n            return add32((a << s) | (a >>> (32 - s)), b);\n        },\n    \n        ff = function (a, b, c, d, x, s, t) {\n            return cmn((b & c) | ((~b) & d), a, b, x, s, t);\n        },\n    \n        gg = function (a, b, c, d, x, s, t) {\n            return cmn((b & d) | (c & (~d)), a, b, x, s, t);\n        },\n    \n        hh = function (a, b, c, d, x, s, t) {\n            return cmn(b ^ c ^ d, a, b, x, s, t);\n        },\n    \n        ii = function (a, b, c, d, x, s, t) {\n            return cmn(c ^ (b | (~d)), a, b, x, s, t);\n        },\n    \n        md5cycle = function (x, k) {\n            var a = x[0],\n                b = x[1],\n                c = x[2],\n                d = x[3];\n    \n            a = ff(a, b, c, d, k[0], 7, -680876936);\n            d = ff(d, a, b, c, k[1], 12, -389564586);\n            c = ff(c, d, a, b, k[2], 17, 606105819);\n            b = ff(b, c, d, a, k[3], 22, -1044525330);\n            a = ff(a, b, c, d, k[4], 7, -176418897);\n            d = ff(d, a, b, c, k[5], 12, 1200080426);\n            c = ff(c, d, a, b, k[6], 17, -1473231341);\n            b = ff(b, c, d, a, k[7], 22, -45705983);\n            a = ff(a, b, c, d, k[8], 7, 1770035416);\n            d = ff(d, a, b, c, k[9], 12, -1958414417);\n            c = ff(c, d, a, b, k[10], 17, -42063);\n            b = ff(b, c, d, a, k[11], 22, -1990404162);\n            a = ff(a, b, c, d, k[12], 7, 1804603682);\n            d = ff(d, a, b, c, k[13], 12, -40341101);\n            c = ff(c, d, a, b, k[14], 17, -1502002290);\n            b = ff(b, c, d, a, k[15], 22, 1236535329);\n    \n            a = gg(a, b, c, d, k[1], 5, -165796510);\n            d = gg(d, a, b, c, k[6], 9, -1069501632);\n            c = gg(c, d, a, b, k[11], 14, 643717713);\n            b = gg(b, c, d, a, k[0], 20, -373897302);\n            a = gg(a, b, c, d, k[5], 5, -701558691);\n            d = gg(d, a, b, c, k[10], 9, 38016083);\n            c = gg(c, d, a, b, k[15], 14, -660478335);\n            b = gg(b, c, d, a, k[4], 20, -405537848);\n            a = gg(a, b, c, d, k[9], 5, 568446438);\n            d = gg(d, a, b, c, k[14], 9, -1019803690);\n            c = gg(c, d, a, b, k[3], 14, -187363961);\n            b = gg(b, c, d, a, k[8], 20, 1163531501);\n            a = gg(a, b, c, d, k[13], 5, -1444681467);\n            d = gg(d, a, b, c, k[2], 9, -51403784);\n            c = gg(c, d, a, b, k[7], 14, 1735328473);\n            b = gg(b, c, d, a, k[12], 20, -1926607734);\n    \n            a = hh(a, b, c, d, k[5], 4, -378558);\n            d = hh(d, a, b, c, k[8], 11, -2022574463);\n            c = hh(c, d, a, b, k[11], 16, 1839030562);\n            b = hh(b, c, d, a, k[14], 23, -35309556);\n            a = hh(a, b, c, d, k[1], 4, -1530992060);\n            d = hh(d, a, b, c, k[4], 11, 1272893353);\n            c = hh(c, d, a, b, k[7], 16, -155497632);\n            b = hh(b, c, d, a, k[10], 23, -1094730640);\n            a = hh(a, b, c, d, k[13], 4, 681279174);\n            d = hh(d, a, b, c, k[0], 11, -358537222);\n            c = hh(c, d, a, b, k[3], 16, -722521979);\n            b = hh(b, c, d, a, k[6], 23, 76029189);\n            a = hh(a, b, c, d, k[9], 4, -640364487);\n            d = hh(d, a, b, c, k[12], 11, -421815835);\n            c = hh(c, d, a, b, k[15], 16, 530742520);\n            b = hh(b, c, d, a, k[2], 23, -995338651);\n    \n            a = ii(a, b, c, d, k[0], 6, -198630844);\n            d = ii(d, a, b, c, k[7], 10, 1126891415);\n            c = ii(c, d, a, b, k[14], 15, -1416354905);\n            b = ii(b, c, d, a, k[5], 21, -57434055);\n            a = ii(a, b, c, d, k[12], 6, 1700485571);\n            d = ii(d, a, b, c, k[3], 10, -1894986606);\n            c = ii(c, d, a, b, k[10], 15, -1051523);\n            b = ii(b, c, d, a, k[1], 21, -2054922799);\n            a = ii(a, b, c, d, k[8], 6, 1873313359);\n            d = ii(d, a, b, c, k[15], 10, -30611744);\n            c = ii(c, d, a, b, k[6], 15, -1560198380);\n            b = ii(b, c, d, a, k[13], 21, 1309151649);\n            a = ii(a, b, c, d, k[4], 6, -145523070);\n            d = ii(d, a, b, c, k[11], 10, -1120210379);\n            c = ii(c, d, a, b, k[2], 15, 718787259);\n            b = ii(b, c, d, a, k[9], 21, -343485551);\n    \n            x[0] = add32(a, x[0]);\n            x[1] = add32(b, x[1]);\n            x[2] = add32(c, x[2]);\n            x[3] = add32(d, x[3]);\n        },\n    \n        /* there needs to be support for Unicode here,\n           * unless we pretend that we can redefine the MD-5\n           * algorithm for multi-byte characters (perhaps\n           * by adding every four 16-bit characters and\n           * shortening the sum to 32 bits). Otherwise\n           * I suggest performing MD-5 as if every character\n           * was two bytes--e.g., 0040 0025 = @%--but then\n           * how will an ordinary MD-5 sum be matched?\n           * There is no way to standardize text to something\n           * like UTF-8 before transformation; speed cost is\n           * utterly prohibitive. The JavaScript standard\n           * itself needs to look at this: it should start\n           * providing access to strings as preformed UTF-8\n           * 8-bit unsigned value arrays.\n           */\n        md5blk = function (s) {\n            var md5blks = [],\n                i; /* Andy King said do it this way. */\n    \n            for (i = 0; i < 64; i += 4) {\n                md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n            }\n            return md5blks;\n        },\n    \n        md5blk_array = function (a) {\n            var md5blks = [],\n                i; /* Andy King said do it this way. */\n    \n            for (i = 0; i < 64; i += 4) {\n                md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n            }\n            return md5blks;\n        },\n    \n        md51 = function (s) {\n            var n = s.length,\n                state = [1732584193, -271733879, -1732584194, 271733878],\n                i,\n                length,\n                tail,\n                tmp,\n                lo,\n                hi;\n    \n            for (i = 64; i <= n; i += 64) {\n                md5cycle(state, md5blk(s.substring(i - 64, i)));\n            }\n            s = s.substring(i - 64);\n            length = s.length;\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n            }\n            tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n            if (i > 55) {\n                md5cycle(state, tail);\n                for (i = 0; i < 16; i += 1) {\n                    tail[i] = 0;\n                }\n            }\n    \n            // Beware that the final length might not fit in 32 bits so we take care of that\n            tmp = n * 8;\n            tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n            lo = parseInt(tmp[2], 16);\n            hi = parseInt(tmp[1], 16) || 0;\n    \n            tail[14] = lo;\n            tail[15] = hi;\n    \n            md5cycle(state, tail);\n            return state;\n        },\n    \n        md51_array = function (a) {\n            var n = a.length,\n                state = [1732584193, -271733879, -1732584194, 271733878],\n                i,\n                length,\n                tail,\n                tmp,\n                lo,\n                hi;\n    \n            for (i = 64; i <= n; i += 64) {\n                md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n            }\n    \n            // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n            // containing the last element of the parent array if the sub array specified starts\n            // beyond the length of the parent array - weird.\n            // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n            a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n    \n            length = a.length;\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= a[i] << ((i % 4) << 3);\n            }\n    \n            tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n            if (i > 55) {\n                md5cycle(state, tail);\n                for (i = 0; i < 16; i += 1) {\n                    tail[i] = 0;\n                }\n            }\n    \n            // Beware that the final length might not fit in 32 bits so we take care of that\n            tmp = n * 8;\n            tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n            lo = parseInt(tmp[2], 16);\n            hi = parseInt(tmp[1], 16) || 0;\n    \n            tail[14] = lo;\n            tail[15] = hi;\n    \n            md5cycle(state, tail);\n    \n            return state;\n        },\n    \n        hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'],\n    \n        rhex = function (n) {\n            var s = '',\n                j;\n            for (j = 0; j < 4; j += 1) {\n                s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n            }\n            return s;\n        },\n    \n        hex = function (x) {\n            var i;\n            for (i = 0; i < x.length; i += 1) {\n                x[i] = rhex(x[i]);\n            }\n            return x.join('');\n        },\n    \n        md5 = function (s) {\n            return hex(md51(s));\n        },\n    \n    \n    \n        ////////////////////////////////////////////////////////////////////////////\n    \n        /**\n         * SparkMD5 OOP implementation.\n         *\n         * Use this class to perform an incremental md5, otherwise use the\n         * static methods instead.\n         */\n        SparkMD5 = function () {\n            // call reset to init the instance\n            this.reset();\n        };\n    \n    \n        // In some cases the fast add32 function cannot be used..\n        if (md5('hello') !== '5d41402abc4b2a76b9719d911017c592') {\n            add32 = function (x, y) {\n                var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n                    msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n                return (msw << 16) | (lsw & 0xFFFF);\n            };\n        }\n    \n    \n        /**\n         * Appends a string.\n         * A conversion will be applied if an utf8 string is detected.\n         *\n         * @param {String} str The string to be appended\n         *\n         * @return {SparkMD5} The instance itself\n         */\n        SparkMD5.prototype.append = function (str) {\n            // converts the string to utf8 bytes if necessary\n            if (/[\\u0080-\\uFFFF]/.test(str)) {\n                str = unescape(encodeURIComponent(str));\n            }\n    \n            // then append as binary\n            this.appendBinary(str);\n    \n            return this;\n        };\n    \n        /**\n         * Appends a binary string.\n         *\n         * @param {String} contents The binary string to be appended\n         *\n         * @return {SparkMD5} The instance itself\n         */\n        SparkMD5.prototype.appendBinary = function (contents) {\n            this._buff += contents;\n            this._length += contents.length;\n    \n            var length = this._buff.length,\n                i;\n    \n            for (i = 64; i <= length; i += 64) {\n                md5cycle(this._state, md5blk(this._buff.substring(i - 64, i)));\n            }\n    \n            this._buff = this._buff.substr(i - 64);\n    \n            return this;\n        };\n    \n        /**\n         * Finishes the incremental computation, reseting the internal state and\n         * returning the result.\n         * Use the raw parameter to obtain the raw result instead of the hex one.\n         *\n         * @param {Boolean} raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.prototype.end = function (raw) {\n            var buff = this._buff,\n                length = buff.length,\n                i,\n                tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                ret;\n    \n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n            }\n    \n            this._finish(tail, length);\n            ret = !!raw ? this._state : hex(this._state);\n    \n            this.reset();\n    \n            return ret;\n        };\n    \n        /**\n         * Finish the final calculation based on the tail.\n         *\n         * @param {Array}  tail   The tail (will be modified)\n         * @param {Number} length The length of the remaining buffer\n         */\n        SparkMD5.prototype._finish = function (tail, length) {\n            var i = length,\n                tmp,\n                lo,\n                hi;\n    \n            tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n            if (i > 55) {\n                md5cycle(this._state, tail);\n                for (i = 0; i < 16; i += 1) {\n                    tail[i] = 0;\n                }\n            }\n    \n            // Do the final computation based on the tail and length\n            // Beware that the final length may not fit in 32 bits so we take care of that\n            tmp = this._length * 8;\n            tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n            lo = parseInt(tmp[2], 16);\n            hi = parseInt(tmp[1], 16) || 0;\n    \n            tail[14] = lo;\n            tail[15] = hi;\n            md5cycle(this._state, tail);\n        };\n    \n        /**\n         * Resets the internal state of the computation.\n         *\n         * @return {SparkMD5} The instance itself\n         */\n        SparkMD5.prototype.reset = function () {\n            this._buff = \"\";\n            this._length = 0;\n            this._state = [1732584193, -271733879, -1732584194, 271733878];\n    \n            return this;\n        };\n    \n        /**\n         * Releases memory used by the incremental buffer and other aditional\n         * resources. If you plan to use the instance again, use reset instead.\n         */\n        SparkMD5.prototype.destroy = function () {\n            delete this._state;\n            delete this._buff;\n            delete this._length;\n        };\n    \n    \n        /**\n         * Performs the md5 hash on a string.\n         * A conversion will be applied if utf8 string is detected.\n         *\n         * @param {String}  str The string\n         * @param {Boolean} raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.hash = function (str, raw) {\n            // converts the string to utf8 bytes if necessary\n            if (/[\\u0080-\\uFFFF]/.test(str)) {\n                str = unescape(encodeURIComponent(str));\n            }\n    \n            var hash = md51(str);\n    \n            return !!raw ? hash : hex(hash);\n        };\n    \n        /**\n         * Performs the md5 hash on a binary string.\n         *\n         * @param {String}  content The binary string\n         * @param {Boolean} raw     True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.hashBinary = function (content, raw) {\n            var hash = md51(content);\n    \n            return !!raw ? hash : hex(hash);\n        };\n    \n        /**\n         * SparkMD5 OOP implementation for array buffers.\n         *\n         * Use this class to perform an incremental md5 ONLY for array buffers.\n         */\n        SparkMD5.ArrayBuffer = function () {\n            // call reset to init the instance\n            this.reset();\n        };\n    \n        ////////////////////////////////////////////////////////////////////////////\n    \n        /**\n         * Appends an array buffer.\n         *\n         * @param {ArrayBuffer} arr The array to be appended\n         *\n         * @return {SparkMD5.ArrayBuffer} The instance itself\n         */\n        SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n            // TODO: we could avoid the concatenation here but the algorithm would be more complex\n            //       if you find yourself needing extra performance, please make a PR.\n            var buff = this._concatArrayBuffer(this._buff, arr),\n                length = buff.length,\n                i;\n    \n            this._length += arr.byteLength;\n    \n            for (i = 64; i <= length; i += 64) {\n                md5cycle(this._state, md5blk_array(buff.subarray(i - 64, i)));\n            }\n    \n            // Avoids IE10 weirdness (documented above)\n            this._buff = (i - 64) < length ? buff.subarray(i - 64) : new Uint8Array(0);\n    \n            return this;\n        };\n    \n        /**\n         * Finishes the incremental computation, reseting the internal state and\n         * returning the result.\n         * Use the raw parameter to obtain the raw result instead of the hex one.\n         *\n         * @param {Boolean} raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n            var buff = this._buff,\n                length = buff.length,\n                tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                i,\n                ret;\n    \n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n            }\n    \n            this._finish(tail, length);\n            ret = !!raw ? this._state : hex(this._state);\n    \n            this.reset();\n    \n            return ret;\n        };\n    \n        SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n    \n        /**\n         * Resets the internal state of the computation.\n         *\n         * @return {SparkMD5.ArrayBuffer} The instance itself\n         */\n        SparkMD5.ArrayBuffer.prototype.reset = function () {\n            this._buff = new Uint8Array(0);\n            this._length = 0;\n            this._state = [1732584193, -271733879, -1732584194, 271733878];\n    \n            return this;\n        };\n    \n        /**\n         * Releases memory used by the incremental buffer and other aditional\n         * resources. If you plan to use the instance again, use reset instead.\n         */\n        SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n    \n        /**\n         * Concats two array buffers, returning a new one.\n         *\n         * @param  {ArrayBuffer} first  The first array buffer\n         * @param  {ArrayBuffer} second The second array buffer\n         *\n         * @return {ArrayBuffer} The new array buffer\n         */\n        SparkMD5.ArrayBuffer.prototype._concatArrayBuffer = function (first, second) {\n            var firstLength = first.length,\n                result = new Uint8Array(firstLength + second.byteLength);\n    \n            result.set(first);\n            result.set(new Uint8Array(second), firstLength);\n    \n            return result;\n        };\n    \n        /**\n         * Performs the md5 hash on an array buffer.\n         *\n         * @param {ArrayBuffer} arr The array buffer\n         * @param {Boolean}     raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n            var hash = md51_array(new Uint8Array(arr));\n    \n            return !!raw ? hash : hex(hash);\n        };\n        \n        return FlashRuntime.register( 'Md5', {\n            init: function() {\n                // do nothing.\n            },\n    \n            loadFromBlob: function( file ) {\n                var blob = file.getSource(),\n                    chunkSize = 2 * 1024 * 1024,\n                    chunks = Math.ceil( blob.size / chunkSize ),\n                    chunk = 0,\n                    owner = this.owner,\n                    spark = new SparkMD5.ArrayBuffer(),\n                    me = this,\n                    blobSlice = blob.mozSlice || blob.webkitSlice || blob.slice,\n                    loadNext, fr;\n    \n                fr = new FileReader();\n    \n                loadNext = function() {\n                    var start, end;\n    \n                    start = chunk * chunkSize;\n                    end = Math.min( start + chunkSize, blob.size );\n    \n                    fr.onload = function( e ) {\n                        spark.append( e.target.result );\n                        owner.trigger( 'progress', {\n                            total: file.size,\n                            loaded: end\n                        });\n                    };\n    \n                    fr.onloadend = function() {\n                        fr.onloadend = fr.onload = null;\n    \n                        if ( ++chunk < chunks ) {\n                            setTimeout( loadNext, 1 );\n                        } else {\n                            setTimeout(function(){\n                                owner.trigger('load');\n                                me.result = spark.end();\n                                loadNext = file = blob = spark = null;\n                                owner.trigger('complete');\n                            }, 50 );\n                        }\n                    };\n    \n                    fr.readAsArrayBuffer( blobSlice.call( blob, start, end ) );\n                };\n    \n                loadNext();\n            },\n    \n            getResult: function() {\n                return this.result;\n            }\n        });\n    });\n    /**\n     * @fileOverview FlashRuntime\n     */\n    define('runtime/flash/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var $ = Base.$,\n            type = 'flash',\n            components = {};\n    \n    \n        function getFlashVersion() {\n            var version;\n    \n            try {\n                version = navigator.plugins[ 'Shockwave Flash' ];\n                version = version.description;\n            } catch ( ex ) {\n                try {\n                    version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                            .GetVariable('$version');\n                } catch ( ex2 ) {\n                    version = '0.0';\n                }\n            }\n            version = version.match( /\\d+/g );\n            return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );\n        }\n    \n        function FlashRuntime() {\n            var pool = {},\n                clients = {},\n                destroy = this.destroy,\n                me = this,\n                jsreciver = Base.guid('webuploader_');\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/ ) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                clients[ uid ] = client;\n    \n                if ( components[ comp ] ) {\n                    if ( !pool[ uid ] ) {\n                        pool[ uid ] = new components[ comp ]( client, me );\n                    }\n    \n                    instance = pool[ uid ];\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n    \n                return me.flashExec.apply( client, arguments );\n            };\n    \n            function handler( evt, obj ) {\n                var type = evt.type || evt,\n                    parts, uid;\n    \n                parts = type.split('::');\n                uid = parts[ 0 ];\n                type = parts[ 1 ];\n    \n                // console.log.apply( console, arguments );\n    \n                if ( type === 'Ready' && uid === me.uid ) {\n                    me.trigger('ready');\n                } else if ( clients[ uid ] ) {\n                    clients[ uid ].trigger( type.toLowerCase(), evt, obj );\n                }\n    \n                // Base.log( evt, obj );\n            }\n    \n            // flash的接受器。\n            window[ jsreciver ] = function() {\n                var args = arguments;\n    \n                // 为了能捕获得到。\n                setTimeout(function() {\n                    handler.apply( null, args );\n                }, 1 );\n            };\n    \n            this.jsreciver = jsreciver;\n    \n            this.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n    \n            this.flashExec = function( comp, fn ) {\n                var flash = me.getFlash(),\n                    args = Base.slice( arguments, 2 );\n    \n                return flash.exec( this.uid, comp, fn, args );\n            };\n    \n            // @todo\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: FlashRuntime,\n    \n            init: function() {\n                var container = this.getContainer(),\n                    opts = this.options,\n                    html;\n    \n                // if not the minimal height, shims are not initialized\n                // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc)\n                container.css({\n                    position: 'absolute',\n                    top: '-8px',\n                    left: '-8px',\n                    width: '9px',\n                    height: '9px',\n                    overflow: 'hidden'\n                });\n    \n                // insert flash object\n                html = '<object id=\"' + this.uid + '\" type=\"application/' +\n                        'x-shockwave-flash\" data=\"' +  opts.swf + '\" ';\n    \n                if ( Base.browser.ie ) {\n                    html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                }\n    \n                html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">'  +\n                    '<param name=\"movie\" value=\"' + opts.swf + '\" />' +\n                    '<param name=\"flashvars\" value=\"uid=' + this.uid +\n                    '&jsreciver=' + this.jsreciver + '\" />' +\n                    '<param name=\"wmode\" value=\"transparent\" />' +\n                    '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                '</object>';\n    \n                container.html( html );\n            },\n    \n            getFlash: function() {\n                if ( this._flash ) {\n                    return this._flash;\n                }\n    \n                this._flash = $( '#' + this.uid ).get( 0 );\n                return this._flash;\n            }\n    \n        });\n    \n        FlashRuntime.register = function( name, component ) {\n            component = components[ name ] = Base.inherits( CompBase, $.extend({\n    \n                // @todo fix this later\n                flashExec: function() {\n                    var owner = this.owner,\n                        runtime = this.getRuntime();\n    \n                    return runtime.flashExec.apply( owner, arguments );\n                }\n            }, component ) );\n    \n            return component;\n        };\n    \n        if ( getFlashVersion() >= 11.4 ) {\n            Runtime.addRuntime( type, FlashRuntime );\n        }\n    \n        return FlashRuntime;\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/flash/filepicker',[\n        'base',\n        'runtime/flash/runtime'\n    ], function( Base, FlashRuntime ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'FilePicker', {\n            init: function( opts ) {\n                var copy = $.extend({}, opts ),\n                    len, i;\n    \n                // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug.\n                len = copy.accept && copy.accept.length;\n                for (  i = 0; i < len; i++ ) {\n                    if ( !copy.accept[ i ].title ) {\n                        copy.accept[ i ].title = 'Files';\n                    }\n                }\n    \n                delete copy.button;\n                delete copy.id;\n                delete copy.container;\n    \n                this.flashExec( 'FilePicker', 'init', copy );\n            },\n    \n            destroy: function() {\n                this.flashExec( 'FilePicker', 'destroy' );\n            }\n        });\n    });\n    /**\n     * @fileOverview 图片压缩\n     */\n    define('runtime/flash/image',[\n        'runtime/flash/runtime'\n    ], function( FlashRuntime ) {\n    \n        return FlashRuntime.register( 'Image', {\n            // init: function( options ) {\n            //     var owner = this.owner;\n    \n            //     this.flashExec( 'Image', 'init', options );\n            //     owner.on( 'load', function() {\n            //         debugger;\n            //     });\n            // },\n    \n            loadFromBlob: function( blob ) {\n                var owner = this.owner;\n    \n                owner.info() && this.flashExec( 'Image', 'info', owner.info() );\n                owner.meta() && this.flashExec( 'Image', 'meta', owner.meta() );\n    \n                this.flashExec( 'Image', 'loadFromBlob', blob.uid );\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/flash/transport',[\n        'base',\n        'runtime/flash/runtime',\n        'runtime/client'\n    ], function( Base, FlashRuntime, RuntimeClient ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n                this._responseJson = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    binary;\n    \n                xhr.connectRuntime( blob.ruid );\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.uid;\n                } else {\n                    $.each( owner._formData, function( k, v ) {\n                        xhr.exec( 'append', k, v );\n                    });\n    \n                    xhr.exec( 'appendBlob', opts.fileVal, blob.uid,\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n                xhr.exec( 'send', {\n                    method: opts.method,\n                    url: server,\n                    forceURLStream: opts.forceURLStream,\n                    mimeType: 'application/octet-stream'\n                }, binary );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            getResponse: function() {\n                return this._response || '';\n            },\n    \n            getResponseAsJson: function() {\n                return this._responseJson;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.exec('abort');\n                    xhr.destroy();\n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new RuntimeClient('XMLHttpRequest');\n    \n                xhr.on( 'uploadprogress progress', function( e ) {\n                    var percent = e.loaded / e.total;\n                    percent = Math.min( 1, Math.max( 0, percent ) );\n                    return me.trigger( 'progress', percent );\n                });\n    \n                xhr.on( 'load', function() {\n                    var status = xhr.exec('getStatus'),\n                        readBody = false,\n                        err = '',\n                        p;\n    \n                    xhr.off();\n                    me._xhr = null;\n    \n                    if ( status >= 200 && status < 300 ) {\n                        readBody = true;\n                    } else if ( status >= 500 && status < 600 ) {\n                        readBody = true;\n                        err = 'server';\n                    } else {\n                        err = 'http';\n                    }\n    \n                    if ( readBody ) {\n                        me._response = xhr.exec('getResponse');\n                        me._response = decodeURIComponent( me._response );\n    \n                        // flash 处理可能存在 bug, 没辙只能靠 js 了\n                        // try {\n                        //     me._responseJson = xhr.exec('getResponseAsJson');\n                        // } catch ( error ) {\n                            \n                        p = window.JSON && window.JSON.parse || function( s ) {\n                            try {\n                                return new Function('return ' + s).call();\n                            } catch ( err ) {\n                                return {};\n                            }\n                        };\n                        me._responseJson  = me._response ? p(me._response) : {};\n                            \n                        // }\n                    }\n                    \n                    xhr.destroy();\n                    xhr = null;\n    \n                    return err ? me.trigger( 'error', err ) : me.trigger('load');\n                });\n    \n                xhr.on( 'error', function() {\n                    xhr.off();\n                    me._xhr = null;\n                    me.trigger( 'error', 'http' );\n                });\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.exec( 'setRequestHeader', key, val );\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/flash/blob',[\n        'runtime/flash/runtime',\n        'lib/blob'\n    ], function( FlashRuntime, Blob ) {\n    \n        return FlashRuntime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.flashExec( 'Blob', 'slice', start, end );\n    \n                return new Blob( blob.uid, blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview  Md5 flash实现\n     */\n    define('runtime/flash/md5',[\n        'runtime/flash/runtime'\n    ], function( FlashRuntime ) {\n        \n        return FlashRuntime.register( 'Md5', {\n            init: function() {\n                // do nothing.\n            },\n    \n            loadFromBlob: function( blob ) {\n                return this.flashExec( 'Md5', 'loadFromBlob', blob.uid );\n            }\n        });\n    });\n    /**\n     * @fileOverview 完全版本。\n     */\n    define('preset/all',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n        'widgets/md5',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/imagemeta/exif',\n        'runtime/html5/androidpatch',\n        'runtime/html5/image',\n        'runtime/html5/transport',\n        'runtime/html5/md5',\n    \n        // flash\n        'runtime/flash/filepicker',\n        'runtime/flash/image',\n        'runtime/flash/transport',\n        'runtime/flash/blob',\n        'runtime/flash/md5'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/all'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.nolog.min.js",
    "content": "/* WebUploader 0.1.5 */!function(a,b){var c,d={},e=function(a,b){var c,d,e;if(\"string\"==typeof a)return h(a);for(c=[],d=a.length,e=0;d>e;e++)c.push(h(a[e]));return b.apply(null,c)},f=function(a,b,c){2===arguments.length&&(c=b,b=null),e(b||[],function(){g(a,c,arguments)})},g=function(a,b,c){var f,g={exports:b};\"function\"==typeof b&&(c.length||(c=[e,g.exports,g]),f=b.apply(null,c),void 0!==f&&(g.exports=f)),d[a]=g.exports},h=function(b){var c=d[b]||a[b];if(!c)throw new Error(\"`\"+b+\"` is undefined\");return c},i=function(a){var b,c,e,f,g,h;h=function(a){return a&&a.charAt(0).toUpperCase()+a.substr(1)};for(b in d)if(c=a,d.hasOwnProperty(b)){for(e=b.split(\"/\"),g=h(e.pop());f=h(e.shift());)c[f]=c[f]||{},c=c[f];c[g]=d[b]}return a},j=function(c){return a.__dollar=c,i(b(a,f,e))};\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=j():\"function\"==typeof define&&define.amd?define([\"jquery\"],j):(c=a.WebUploader,a.WebUploader=j(),a.WebUploader.noConflict=function(){a.WebUploader=c})}(window,function(a,b,c){return b(\"dollar-third\",[],function(){var b=a.__dollar||a.jQuery||a.Zepto;if(!b)throw new Error(\"jQuery or Zepto not found!\");return b}),b(\"dollar\",[\"dollar-third\"],function(a){return a}),b(\"promise-third\",[\"dollar\"],function(a){return{Deferred:a.Deferred,when:a.when,isPromise:function(a){return a&&\"function\"==typeof a.then}}}),b(\"promise\",[\"promise-third\"],function(a){return a}),b(\"base\",[\"dollar\",\"promise\"],function(b,c){function d(a){return function(){return h.apply(a,arguments)}}function e(a,b){return function(){return a.apply(b,arguments)}}function f(a){var b;return Object.create?Object.create(a):(b=function(){},b.prototype=a,new b)}var g=function(){},h=Function.call;return{version:\"0.1.5\",$:b,Deferred:c.Deferred,isPromise:c.isPromise,when:c.when,browser:function(a){var b={},c=a.match(/WebKit\\/([\\d.]+)/),d=a.match(/Chrome\\/([\\d.]+)/)||a.match(/CriOS\\/([\\d.]+)/),e=a.match(/MSIE\\s([\\d\\.]+)/)||a.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),f=a.match(/Firefox\\/([\\d.]+)/),g=a.match(/Safari\\/([\\d.]+)/),h=a.match(/OPR\\/([\\d.]+)/);return c&&(b.webkit=parseFloat(c[1])),d&&(b.chrome=parseFloat(d[1])),e&&(b.ie=parseFloat(e[1])),f&&(b.firefox=parseFloat(f[1])),g&&(b.safari=parseFloat(g[1])),h&&(b.opera=parseFloat(h[1])),b}(navigator.userAgent),os:function(a){var b={},c=a.match(/(?:Android);?[\\s\\/]+([\\d.]+)?/),d=a.match(/(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/);return c&&(b.android=parseFloat(c[1])),d&&(b.ios=parseFloat(d[1].replace(/_/g,\".\"))),b}(navigator.userAgent),inherits:function(a,c,d){var e;return\"function\"==typeof c?(e=c,c=null):e=c&&c.hasOwnProperty(\"constructor\")?c.constructor:function(){return a.apply(this,arguments)},b.extend(!0,e,a,d||{}),e.__super__=a.prototype,e.prototype=f(a.prototype),c&&b.extend(!0,e.prototype,c),e},noop:g,bindFn:e,log:function(){return a.console?e(console.log,console):g}(),nextTick:function(){return function(a){setTimeout(a,1)}}(),slice:d([].slice),guid:function(){var a=0;return function(b){for(var c=(+new Date).toString(32),d=0;5>d;d++)c+=Math.floor(65535*Math.random()).toString(32);return(b||\"wu_\")+c+(a++).toString(32)}}(),formatSize:function(a,b,c){var d;for(c=c||[\"B\",\"K\",\"M\",\"G\",\"TB\"];(d=c.shift())&&a>1024;)a/=1024;return(\"B\"===d?a:a.toFixed(b||2))+d}}}),b(\"mediator\",[\"base\"],function(a){function b(a,b,c,d){return f.grep(a,function(a){return!(!a||b&&a.e!==b||c&&a.cb!==c&&a.cb._cb!==c||d&&a.ctx!==d)})}function c(a,b,c){f.each((a||\"\").split(h),function(a,d){c(d,b)})}function d(a,b){for(var c,d=!1,e=-1,f=a.length;++e<f;)if(c=a[e],c.cb.apply(c.ctx2,b)===!1){d=!0;break}return!d}var e,f=a.$,g=[].slice,h=/\\s+/;return e={on:function(a,b,d){var e,f=this;return b?(e=this._events||(this._events=[]),c(a,b,function(a,b){var c={e:a};c.cb=b,c.ctx=d,c.ctx2=d||f,c.id=e.length,e.push(c)}),this):this},once:function(a,b,d){var e=this;return b?(c(a,b,function(a,b){var c=function(){return e.off(a,c),b.apply(d||e,arguments)};c._cb=b,e.on(a,c,d)}),e):e},off:function(a,d,e){var g=this._events;return g?a||d||e?(c(a,d,function(a,c){f.each(b(g,a,c,e),function(){delete g[this.id]})}),this):(this._events=[],this):this},trigger:function(a){var c,e,f;return this._events&&a?(c=g.call(arguments,1),e=b(this._events,a),f=b(this._events,\"all\"),d(e,c)&&d(f,arguments)):this}},f.extend({installTo:function(a){return f.extend(a,e)}},e)}),b(\"uploader\",[\"base\",\"mediator\"],function(a,b){function c(a){this.options=d.extend(!0,{},c.options,a),this._init(this.options)}var d=a.$;return c.options={},b.installTo(c.prototype),d.each({upload:\"start-upload\",stop:\"stop-upload\",getFile:\"get-file\",getFiles:\"get-files\",addFile:\"add-file\",addFiles:\"add-file\",sort:\"sort-files\",removeFile:\"remove-file\",cancelFile:\"cancel-file\",skipFile:\"skip-file\",retry:\"retry\",isInProgress:\"is-in-progress\",makeThumb:\"make-thumb\",md5File:\"md5-file\",getDimension:\"get-dimension\",addButton:\"add-btn\",predictRuntimeType:\"predict-runtime-type\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\",reset:\"reset\"},function(a,b){c.prototype[a]=function(){return this.request(b,arguments)}}),d.extend(c.prototype,{state:\"pending\",_init:function(a){var b=this;b.request(\"init\",a,function(){b.state=\"ready\",b.trigger(\"ready\")})},option:function(a,b){var c=this.options;return arguments.length>1?void(d.isPlainObject(b)&&d.isPlainObject(c[a])?d.extend(c[a],b):c[a]=b):a?c[a]:c},getStats:function(){var a=this.request(\"get-stats\");return a?{successNum:a.numOfSuccess,progressNum:a.numOfProgress,cancelNum:a.numOfCancel,invalidNum:a.numOfInvalid,uploadFailNum:a.numOfUploadFailed,queueNum:a.numOfQueue,interruptNum:a.numofInterrupt}:{}},trigger:function(a){var c=[].slice.call(arguments,1),e=this.options,f=\"on\"+a.substring(0,1).toUpperCase()+a.substring(1);return b.trigger.apply(this,arguments)===!1||d.isFunction(e[f])&&e[f].apply(this,c)===!1||d.isFunction(this[f])&&this[f].apply(this,c)===!1||b.trigger.apply(b,[this,a].concat(c))===!1?!1:!0},destroy:function(){this.request(\"destroy\",arguments),this.off()},request:a.noop}),a.create=c.create=function(a){return new c(a)},a.Uploader=c,c}),b(\"runtime/runtime\",[\"base\",\"mediator\"],function(a,b){function c(b){this.options=d.extend({container:document.body},b),this.uid=a.guid(\"rt_\")}var d=a.$,e={},f=function(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null};return d.extend(c.prototype,{getContainer:function(){var a,b,c=this.options;return this._container?this._container:(a=d(c.container||document.body),b=d(document.createElement(\"div\")),b.attr(\"id\",\"rt_\"+this.uid),b.css({position:\"absolute\",top:\"0px\",left:\"0px\",width:\"1px\",height:\"1px\",overflow:\"hidden\"}),a.append(b),a.addClass(\"webuploader-container\"),this._container=b,this._parent=a,b)},init:a.noop,exec:a.noop,destroy:function(){this._container&&this._container.remove(),this._parent&&this._parent.removeClass(\"webuploader-container\"),this.off()}}),c.orders=\"html5,flash\",c.addRuntime=function(a,b){e[a]=b},c.hasRuntime=function(a){return!!(a?e[a]:f(e))},c.create=function(a,b){var g,h;if(b=b||c.orders,d.each(b.split(/\\s*,\\s*/g),function(){return e[this]?(g=this,!1):void 0}),g=g||f(e),!g)throw new Error(\"Runtime Error\");return h=new e[g](a)},b.installTo(c.prototype),c}),b(\"runtime/client\",[\"base\",\"mediator\",\"runtime/runtime\"],function(a,b,c){function d(b,d){var f,g=a.Deferred();this.uid=a.guid(\"client_\"),this.runtimeReady=function(a){return g.done(a)},this.connectRuntime=function(b,h){if(f)throw new Error(\"already connected!\");return g.done(h),\"string\"==typeof b&&e.get(b)&&(f=e.get(b)),f=f||e.get(null,d),f?(a.$.extend(f.options,b),f.__promise.then(g.resolve),f.__client++):(f=c.create(b,b.runtimeOrder),f.__promise=g.promise(),f.once(\"ready\",g.resolve),f.init(),e.add(f),f.__client=1),d&&(f.__standalone=d),f},this.getRuntime=function(){return f},this.disconnectRuntime=function(){f&&(f.__client--,f.__client<=0&&(e.remove(f),delete f.__promise,f.destroy()),f=null)},this.exec=function(){if(f){var c=a.slice(arguments);return b&&c.unshift(b),f.exec.apply(this,c)}},this.getRuid=function(){return f&&f.uid},this.destroy=function(a){return function(){a&&a.apply(this,arguments),this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()}}(this.destroy)}var e;return e=function(){var a={};return{add:function(b){a[b.uid]=b},get:function(b,c){var d;if(b)return a[b];for(d in a)if(!c||!a[d].__standalone)return a[d];return null},remove:function(b){delete a[b.uid]}}}(),b.installTo(d.prototype),d}),b(\"lib/dnd\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},d.options,a),a.container=e(a.container),a.container.length&&c.call(this,\"DragAndDrop\")}var e=a.$;return d.options={accept:null,disableGlobalDnd:!1},a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/widget\",[\"base\",\"uploader\"],function(a,b){function c(a){if(!a)return!1;var b=a.length,c=e.type(a);return 1===a.nodeType&&b?!0:\"array\"===c||\"function\"!==c&&\"string\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a)}function d(a){this.owner=a,this.options=a.options}var e=a.$,f=b.prototype._init,g=b.prototype.destroy,h={},i=[];return e.extend(d.prototype,{init:a.noop,invoke:function(a,b){var c=this.responseMap;return c&&a in c&&c[a]in this&&e.isFunction(this[c[a]])?this[c[a]].apply(this,b):h},request:function(){return this.owner.request.apply(this.owner,arguments)}}),e.extend(b.prototype,{_init:function(){var a=this,b=a._widgets=[],c=a.options.disableWidgets||\"\";return e.each(i,function(d,e){(!c||!~c.indexOf(e._name))&&b.push(new e(a))}),f.apply(a,arguments)},request:function(b,d,e){var f,g,i,j,k=0,l=this._widgets,m=l&&l.length,n=[],o=[];for(d=c(d)?d:[d];m>k;k++)f=l[k],g=f.invoke(b,d),g!==h&&(a.isPromise(g)?o.push(g):n.push(g));return e||o.length?(i=a.when.apply(a,o),j=i.pipe?\"pipe\":\"then\",i[j](function(){var b=a.Deferred(),c=arguments;return 1===c.length&&(c=c[0]),setTimeout(function(){b.resolve(c)},1),b.promise()})[e?j:\"done\"](e||a.noop)):n[0]},destroy:function(){g.apply(this,arguments),this._widgets=null}}),b.register=d.register=function(b,c){var f,g={init:\"init\",destroy:\"destroy\",name:\"anonymous\"};return 1===arguments.length?(c=b,e.each(c,function(a){return\"_\"===a[0]||\"name\"===a?void(\"name\"===a&&(g.name=c.name)):void(g[a.replace(/[A-Z]/g,\"-$&\").toLowerCase()]=a)})):g=e.extend(g,b),c.responseMap=g,f=a.inherits(d,c),f._name=g.name,i.push(f),f},b.unRegister=d.unRegister=function(a){if(a&&\"anonymous\"!==a)for(var b=i.length;b--;)i[b]._name===a&&i.splice(b,1)},d}),b(\"widgets/filednd\",[\"base\",\"uploader\",\"lib/dnd\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.options.dnd=\"\",b.register({name:\"dnd\",init:function(b){if(b.dnd&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{disableGlobalDnd:b.disableGlobalDnd,container:b.dnd,accept:b.accept});return this.dnd=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"drop\",function(a){f.request(\"add-file\",[a])}),e.on(\"accept\",function(a){return f.owner.trigger(\"dndAccept\",a)}),e.init(),g.promise()}},destroy:function(){this.dnd&&this.dnd.destroy()}})}),b(\"lib/filepaste\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},a),a.container=e(a.container||document.body),c.call(this,\"FilePaste\")}var e=a.$;return a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/filepaste\",[\"base\",\"uploader\",\"lib/filepaste\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.register({name:\"paste\",init:function(b){if(b.paste&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{container:b.paste,accept:b.accept});return this.paste=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"paste\",function(a){f.owner.request(\"add-file\",[a])}),e.init(),g.promise()}},destroy:function(){this.paste&&this.paste.destroy()}})}),b(\"lib/blob\",[\"base\",\"runtime/client\"],function(a,b){function c(a,c){var d=this;d.source=c,d.ruid=a,this.size=c.size||0,this.type=!c.type&&this.ext&&~\"jpg,jpeg,png,gif,bmp\".indexOf(this.ext)?\"image/\"+(\"jpg\"===this.ext?\"jpeg\":this.ext):c.type||\"application/octet-stream\",b.call(d,\"Blob\"),this.uid=c.uid||this.uid,a&&d.connectRuntime(a)}return a.inherits(b,{constructor:c,slice:function(a,b){return this.exec(\"slice\",a,b)},getSource:function(){return this.source}}),c}),b(\"lib/file\",[\"base\",\"lib/blob\"],function(a,b){function c(a,c){var f;this.name=c.name||\"untitled\"+d++,f=e.exec(c.name)?RegExp.$1.toLowerCase():\"\",!f&&c.type&&(f=/\\/(jpg|jpeg|png|gif|bmp)$/i.exec(c.type)?RegExp.$1.toLowerCase():\"\",this.name+=\".\"+f),this.ext=f,this.lastModifiedDate=c.lastModifiedDate||(new Date).toLocaleString(),b.apply(this,arguments)}var d=1,e=/\\.([^.]+)$/;return a.inherits(b,c)}),b(\"lib/filepicker\",[\"base\",\"runtime/client\",\"lib/file\"],function(b,c,d){function e(a){if(a=this.options=f.extend({},e.options,a),a.container=f(a.id),!a.container.length)throw new Error(\"按钮指定错误\");a.innerHTML=a.innerHTML||a.label||a.container.html()||\"\",a.button=f(a.button||document.createElement(\"div\")),a.button.html(a.innerHTML),a.container.html(a.button),c.call(this,\"FilePicker\",!0)}var f=b.$;return e.options={button:null,container:null,label:null,innerHTML:null,multiple:!0,accept:null,name:\"file\"},b.inherits(c,{constructor:e,init:function(){var c=this,e=c.options,g=e.button;g.addClass(\"webuploader-pick\"),c.on(\"all\",function(a){var b;switch(a){case\"mouseenter\":g.addClass(\"webuploader-pick-hover\");break;case\"mouseleave\":g.removeClass(\"webuploader-pick-hover\");break;case\"change\":b=c.exec(\"getFiles\"),c.trigger(\"select\",f.map(b,function(a){return a=new d(c.getRuid(),a),a._refer=e.container,a}),e.container)}}),c.connectRuntime(e,function(){c.refresh(),c.exec(\"init\",e),c.trigger(\"ready\")}),this._resizeHandler=b.bindFn(this.refresh,this),f(a).on(\"resize\",this._resizeHandler)},refresh:function(){var a=this.getRuntime().getContainer(),b=this.options.button,c=b.outerWidth?b.outerWidth():b.width(),d=b.outerHeight?b.outerHeight():b.height(),e=b.offset();c&&d&&a.css({bottom:\"auto\",right:\"auto\",width:c+\"px\",height:d+\"px\"}).offset(e)},enable:function(){var a=this.options.button;a.removeClass(\"webuploader-pick-disable\"),this.refresh()},disable:function(){var a=this.options.button;this.getRuntime().getContainer().css({top:\"-99999px\"}),a.addClass(\"webuploader-pick-disable\")},destroy:function(){var b=this.options.button;f(a).off(\"resize\",this._resizeHandler),b.removeClass(\"webuploader-pick-disable webuploader-pick-hover webuploader-pick\")}}),e}),b(\"widgets/filepicker\",[\"base\",\"uploader\",\"lib/filepicker\",\"widgets/widget\"],function(a,b,c){var d=a.$;return d.extend(b.options,{pick:null,accept:null}),b.register({name:\"picker\",init:function(a){return this.pickers=[],a.pick&&this.addBtn(a.pick)},refresh:function(){d.each(this.pickers,function(){this.refresh()})},addBtn:function(b){var e=this,f=e.options,g=f.accept,h=[];if(b)return d.isPlainObject(b)||(b={id:b}),d(b.id).each(function(){var i,j,k;k=a.Deferred(),i=d.extend({},b,{accept:d.isPlainObject(g)?[g]:g,swf:f.swf,runtimeOrder:f.runtimeOrder,id:this}),j=new c(i),j.once(\"ready\",k.resolve),j.on(\"select\",function(a){e.owner.request(\"add-file\",[a])}),j.init(),e.pickers.push(j),h.push(k.promise())}),a.when.apply(a,h)},disable:function(){d.each(this.pickers,function(){this.disable()})},enable:function(){d.each(this.pickers,function(){this.enable()})},destroy:function(){d.each(this.pickers,function(){this.destroy()}),this.pickers=null}})}),b(\"lib/image\",[\"base\",\"runtime/client\",\"lib/blob\"],function(a,b,c){function d(a){this.options=e.extend({},d.options,a),b.call(this,\"Image\"),this.on(\"load\",function(){this._info=this.exec(\"info\"),this._meta=this.exec(\"meta\")})}var e=a.$;return d.options={quality:90,crop:!1,preserveHeaders:!1,allowMagnify:!1},a.inherits(b,{constructor:d,info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},loadFromBlob:function(a){var b=this,c=a.getRuid();this.connectRuntime(c,function(){b.exec(\"init\",b.options),b.exec(\"loadFromBlob\",a)})},resize:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"resize\"].concat(b))},crop:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"crop\"].concat(b))},getAsDataUrl:function(a){return this.exec(\"getAsDataUrl\",a)},getAsBlob:function(a){var b=this.exec(\"getAsBlob\",a);return new c(this.getRuid(),b)}}),d}),b(\"widgets/image\",[\"base\",\"uploader\",\"lib/image\",\"widgets/widget\"],function(a,b,c){var d,e=a.$;return d=function(a){var b=0,c=[],d=function(){for(var d;c.length&&a>b;)d=c.shift(),b+=d[0],d[1]()};return function(a,e,f){c.push([e,f]),a.once(\"destroy\",function(){b-=e,setTimeout(d,1)}),setTimeout(d,1)}}(5242880),e.extend(b.options,{thumb:{width:110,height:110,quality:70,allowMagnify:!0,crop:!0,preserveHeaders:!1,type:\"image/jpeg\"},compress:{width:1600,height:1600,quality:90,allowMagnify:!1,crop:!1,preserveHeaders:!0}}),b.register({name:\"image\",makeThumb:function(a,b,f,g){var h,i;return a=this.request(\"get-file\",a),a.type.match(/^image/)?(h=e.extend({},this.options.thumb),e.isPlainObject(f)&&(h=e.extend(h,f),f=null),f=f||h.width,g=g||h.height,i=new c(h),i.once(\"load\",function(){a._info=a._info||i.info(),a._meta=a._meta||i.meta(),1>=f&&f>0&&(f=a._info.width*f),1>=g&&g>0&&(g=a._info.height*g),i.resize(f,g)}),i.once(\"complete\",function(){b(!1,i.getAsDataUrl(h.type)),i.destroy()}),i.once(\"error\",function(a){b(a||!0),i.destroy()}),void d(i,a.source.size,function(){a._info&&i.info(a._info),a._meta&&i.meta(a._meta),i.loadFromBlob(a.source)})):void b(!0)},beforeSendFile:function(b){var d,f,g=this.options.compress||this.options.resize,h=g&&g.compressSize||0,i=g&&g.noCompressIfLarger||!1;return b=this.request(\"get-file\",b),!g||!~\"image/jpeg,image/jpg\".indexOf(b.type)||b.size<h||b._compressed?void 0:(g=e.extend({},g),f=a.Deferred(),d=new c(g),f.always(function(){d.destroy(),d=null}),d.once(\"error\",f.reject),d.once(\"load\",function(){var a=g.width,c=g.height;b._info=b._info||d.info(),b._meta=b._meta||d.meta(),1>=a&&a>0&&(a=b._info.width*a),1>=c&&c>0&&(c=b._info.height*c),d.resize(a,c)}),d.once(\"complete\",function(){var a,c;try{a=d.getAsBlob(g.type),c=b.size,(!i||a.size<c)&&(b.source=a,b.size=a.size,b.trigger(\"resize\",a.size,c)),b._compressed=!0,f.resolve()}catch(e){f.resolve()}}),b._info&&d.info(b._info),b._meta&&d.meta(b._meta),d.loadFromBlob(b.source),f.promise())}})}),b(\"file\",[\"base\",\"mediator\"],function(a,b){function c(){return f+g++}function d(a){this.name=a.name||\"Untitled\",this.size=a.size||0,this.type=a.type||\"application/octet-stream\",this.lastModifiedDate=a.lastModifiedDate||1*new Date,this.id=c(),this.ext=h.exec(this.name)?RegExp.$1:\"\",this.statusText=\"\",i[this.id]=d.Status.INITED,this.source=a,this.loaded=0,this.on(\"error\",function(a){this.setStatus(d.Status.ERROR,a)})}var e=a.$,f=\"WU_FILE_\",g=0,h=/\\.([^.]+)$/,i={};return e.extend(d.prototype,{setStatus:function(a,b){var c=i[this.id];\"undefined\"!=typeof b&&(this.statusText=b),a!==c&&(i[this.id]=a,this.trigger(\"statuschange\",a,c))},getStatus:function(){return i[this.id]},getSource:function(){return this.source},destroy:function(){this.off(),delete i[this.id]}}),b.installTo(d.prototype),d.Status={INITED:\"inited\",QUEUED:\"queued\",PROGRESS:\"progress\",ERROR:\"error\",COMPLETE:\"complete\",CANCELLED:\"cancelled\",INTERRUPT:\"interrupt\",INVALID:\"invalid\"},d}),b(\"queue\",[\"base\",\"mediator\",\"file\"],function(a,b,c){function d(){this.stats={numOfQueue:0,numOfSuccess:0,numOfCancel:0,numOfProgress:0,numOfUploadFailed:0,numOfInvalid:0,numofDeleted:0,numofInterrupt:0},this._queue=[],this._map={}}var e=a.$,f=c.Status;return e.extend(d.prototype,{append:function(a){return this._queue.push(a),this._fileAdded(a),this},prepend:function(a){return this._queue.unshift(a),this._fileAdded(a),this},getFile:function(a){return\"string\"!=typeof a?a:this._map[a]},fetch:function(a){var b,c,d=this._queue.length;for(a=a||f.QUEUED,b=0;d>b;b++)if(c=this._queue[b],a===c.getStatus())return c;return null},sort:function(a){\"function\"==typeof a&&this._queue.sort(a)},getFiles:function(){for(var a,b=[].slice.call(arguments,0),c=[],d=0,f=this._queue.length;f>d;d++)a=this._queue[d],(!b.length||~e.inArray(a.getStatus(),b))&&c.push(a);return c},removeFile:function(a){var b=this._map[a.id];b&&(delete this._map[a.id],a.destroy(),this.stats.numofDeleted++)},_fileAdded:function(a){var b=this,c=this._map[a.id];c||(this._map[a.id]=a,a.on(\"statuschange\",function(a,c){b._onFileStatusChange(a,c)}))},_onFileStatusChange:function(a,b){var c=this.stats;switch(b){case f.PROGRESS:c.numOfProgress--;break;case f.QUEUED:c.numOfQueue--;break;case f.ERROR:c.numOfUploadFailed--;break;case f.INVALID:c.numOfInvalid--;break;case f.INTERRUPT:c.numofInterrupt--}switch(a){case f.QUEUED:c.numOfQueue++;break;case f.PROGRESS:c.numOfProgress++;break;case f.ERROR:c.numOfUploadFailed++;break;case f.COMPLETE:c.numOfSuccess++;break;case f.CANCELLED:c.numOfCancel++;break;case f.INVALID:c.numOfInvalid++;break;case f.INTERRUPT:c.numofInterrupt++}}}),b.installTo(d.prototype),d}),b(\"widgets/queue\",[\"base\",\"uploader\",\"queue\",\"file\",\"lib/file\",\"runtime/client\",\"widgets/widget\"],function(a,b,c,d,e,f){var g=a.$,h=/\\.\\w+$/,i=d.Status;return b.register({name:\"queue\",init:function(b){var d,e,h,i,j,k,l,m=this;if(g.isPlainObject(b.accept)&&(b.accept=[b.accept]),b.accept){for(j=[],h=0,e=b.accept.length;e>h;h++)i=b.accept[h].extensions,i&&j.push(i);j.length&&(k=\"\\\\.\"+j.join(\",\").replace(/,/g,\"$|\\\\.\").replace(/\\*/g,\".*\")+\"$\"),m.accept=new RegExp(k,\"i\")}return m.queue=new c,m.stats=m.queue.stats,\"html5\"===this.request(\"predict-runtime-type\")?(d=a.Deferred(),this.placeholder=l=new f(\"Placeholder\"),l.connectRuntime({runtimeOrder:\"html5\"},function(){m._ruid=l.getRuid(),d.resolve()}),d.promise()):void 0},_wrapFile:function(a){if(!(a instanceof d)){if(!(a instanceof e)){if(!this._ruid)throw new Error(\"Can't add external files.\");a=new e(this._ruid,a)}a=new d(a)}return a},acceptFile:function(a){var b=!a||!a.size||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b},_addFile:function(a){var b=this;return a=b._wrapFile(a),b.owner.trigger(\"beforeFileQueued\",a)?b.acceptFile(a)?(b.queue.append(a),b.owner.trigger(\"fileQueued\",a),a):void b.owner.trigger(\"error\",\"Q_TYPE_DENIED\",a):void 0},getFile:function(a){return this.queue.getFile(a)},addFile:function(a){var b=this;a.length||(a=[a]),a=g.map(a,function(a){return b._addFile(a)}),b.owner.trigger(\"filesQueued\",a),b.options.auto&&setTimeout(function(){b.request(\"start-upload\")},20)},getStats:function(){return this.stats},removeFile:function(a,b){var c=this;a=a.id?a:c.queue.getFile(a),this.request(\"cancel-file\",a),b&&this.queue.removeFile(a)},getFiles:function(){return this.queue.getFiles.apply(this.queue,arguments)},fetchFile:function(){return this.queue.fetch.apply(this.queue,arguments)},retry:function(a,b){var c,d,e,f=this;if(a)return a=a.id?a:f.queue.getFile(a),a.setStatus(i.QUEUED),void(b||f.request(\"start-upload\"));for(c=f.queue.getFiles(i.ERROR),d=0,e=c.length;e>d;d++)a=c[d],a.setStatus(i.QUEUED);f.request(\"start-upload\")},sortFiles:function(){return this.queue.sort.apply(this.queue,arguments)},reset:function(){this.owner.trigger(\"reset\"),this.queue=new c,this.stats=this.queue.stats},destroy:function(){this.reset(),this.placeholder&&this.placeholder.destroy()}})}),b(\"widgets/runtime\",[\"uploader\",\"runtime/runtime\",\"widgets/widget\"],function(a,b){return a.support=function(){return b.hasRuntime.apply(b,arguments)},a.register({name:\"runtime\",init:function(){if(!this.predictRuntimeType())throw Error(\"Runtime Error\")},predictRuntimeType:function(){var a,c,d=this.options.runtimeOrder||b.orders,e=this.type;if(!e)for(d=d.split(/\\s*,\\s*/g),a=0,c=d.length;c>a;a++)if(b.hasRuntime(d[a])){this.type=e=d[a];break}return e}})}),b(\"lib/transport\",[\"base\",\"runtime/client\",\"mediator\"],function(a,b,c){function d(a){var c=this;a=c.options=e.extend(!0,{},d.options,a||{}),b.call(this,\"Transport\"),this._blob=null,this._formData=a.formData||{},this._headers=a.headers||{},this.on(\"progress\",this._timeout),this.on(\"load error\",function(){c.trigger(\"progress\",1),clearTimeout(c._timer)})}var e=a.$;return d.options={server:\"\",method:\"POST\",withCredentials:!1,fileVal:\"file\",timeout:12e4,formData:{},headers:{},sendAsBinary:!1},e.extend(d.prototype,{appendBlob:function(a,b,c){var d=this,e=d.options;d.getRuid()&&d.disconnectRuntime(),d.connectRuntime(b.ruid,function(){d.exec(\"init\")}),d._blob=b,e.fileVal=a||e.fileVal,e.filename=c||e.filename},append:function(a,b){\"object\"==typeof a?e.extend(this._formData,a):this._formData[a]=b},setRequestHeader:function(a,b){\"object\"==typeof a?e.extend(this._headers,a):this._headers[a]=b},send:function(a){this.exec(\"send\",a),this._timeout()},abort:function(){return clearTimeout(this._timer),this.exec(\"abort\")},destroy:function(){this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()},getResponse:function(){return this.exec(\"getResponse\")},getResponseAsJson:function(){return this.exec(\"getResponseAsJson\")},getStatus:function(){return this.exec(\"getStatus\")},_timeout:function(){var a=this,b=a.options.timeout;b&&(clearTimeout(a._timer),a._timer=setTimeout(function(){a.abort(),a.trigger(\"error\",\"timeout\")},b))}}),c.installTo(d.prototype),d}),b(\"widgets/upload\",[\"base\",\"uploader\",\"file\",\"lib/transport\",\"widgets/widget\"],function(a,b,c,d){function e(a,b){var c,d,e=[],f=a.source,g=f.size,h=b?Math.ceil(g/b):1,i=0,j=0;for(d={file:a,has:function(){return!!e.length},shift:function(){return e.shift()},unshift:function(a){e.unshift(a)}};h>j;)c=Math.min(b,g-i),e.push({file:a,start:i,end:b?i+c:g,total:g,chunks:h,chunk:j++,cuted:d}),i+=c;return a.blocks=e.concat(),a.remaning=e.length,d}var f=a.$,g=a.isPromise,h=c.Status;f.extend(b.options,{prepareNextFile:!1,chunked:!1,chunkSize:5242880,chunkRetry:2,threads:3,formData:{}}),b.register({name:\"upload\",init:function(){var b=this.owner,c=this;this.runing=!1,this.progress=!1,b.on(\"startUpload\",function(){c.progress=!0}).on(\"uploadFinished\",function(){c.progress=!1}),this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this.__tick=a.bindFn(this._tick,this),b.on(\"uploadComplete\",function(a){a.blocks&&f.each(a.blocks,function(a,b){b.transport&&(b.transport.abort(),b.transport.destroy()),delete b.transport}),delete a.blocks,delete a.remaning})},reset:function(){this.request(\"stop-upload\",!0),this.runing=!1,this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this._trigged=!1,this._promise=null},startUpload:function(b){var c=this;if(f.each(c.request(\"get-files\",h.INVALID),function(){c.request(\"remove-file\",this)}),b)if(b=b.id?b:c.request(\"get-file\",b),b.getStatus()===h.INTERRUPT)f.each(c.pool,function(a,c){c.file===b&&c.transport&&c.transport.send()}),b.setStatus(h.QUEUED);else{if(b.getStatus()===h.PROGRESS)return;b.setStatus(h.QUEUED)}else f.each(c.request(\"get-files\",[h.INITED]),function(){this.setStatus(h.QUEUED)});if(!c.runing){c.runing=!0;var d=[];f.each(c.pool,function(a,b){var e=b.file;e.getStatus()===h.INTERRUPT&&(d.push(e),c._trigged=!1,b.transport&&b.transport.send())});for(var b;b=d.shift();)b.setStatus(h.PROGRESS);b||f.each(c.request(\"get-files\",h.INTERRUPT),function(){this.setStatus(h.PROGRESS)}),c._trigged=!1,a.nextTick(c.__tick),c.owner.trigger(\"startUpload\")}},stopUpload:function(b,c){var d=this;if(b===!0&&(c=b,b=null),d.runing!==!1){if(b){if(b=b.id?b:d.request(\"get-file\",b),b.getStatus()!==h.PROGRESS&&b.getStatus()!==h.QUEUED)return;return b.setStatus(h.INTERRUPT),f.each(d.pool,function(a,c){c.file===b&&(c.transport&&c.transport.abort(),d._putback(c),d._popBlock(c))}),a.nextTick(d.__tick)}d.runing=!1,this._promise&&this._promise.file&&this._promise.file.setStatus(h.INTERRUPT),c&&f.each(d.pool,function(a,b){b.transport&&b.transport.abort(),b.file.setStatus(h.INTERRUPT)}),d.owner.trigger(\"stopUpload\")}},cancelFile:function(a){a=a.id?a:this.request(\"get-file\",a),a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),a.setStatus(h.CANCELLED),this.owner.trigger(\"fileDequeued\",a)},isInProgress:function(){return!!this.progress},_getStats:function(){return this.request(\"get-stats\")},skipFile:function(a,b){a=a.id?a:this.request(\"get-file\",a),a.setStatus(b||h.COMPLETE),a.skipped=!0,a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),this.owner.trigger(\"uploadSkip\",a)},_tick:function(){var b,c,d=this,e=d.options;return d._promise?d._promise.always(d.__tick):void(d.pool.length<e.threads&&(c=d._nextBlock())?(d._trigged=!1,b=function(b){d._promise=null,b&&b.file&&d._startSend(b),a.nextTick(d.__tick)},d._promise=g(c)?c.always(b):b(c)):d.remaning||d._getStats().numOfQueue||d._getStats().numofInterrupt||(d.runing=!1,d._trigged||a.nextTick(function(){d.owner.trigger(\"uploadFinished\")}),d._trigged=!0))},_putback:function(a){var b;a.cuted.unshift(a),b=this.stack.indexOf(a.cuted),~b||this.stack.unshift(a.cuted)},_getStack:function(){for(var a,b=0;a=this.stack[b++];){if(a.has()&&a.file.getStatus()===h.PROGRESS)return a;(!a.has()||a.file.getStatus()!==h.PROGRESS&&a.file.getStatus()!==h.INTERRUPT)&&this.stack.splice(--b,1)}return null},_nextBlock:function(){var a,b,c,d,f=this,h=f.options;return(a=this._getStack())?(h.prepareNextFile&&!f.pending.length&&f._prepareNextFile(),a.shift()):f.runing?(!f.pending.length&&f._getStats().numOfQueue&&f._prepareNextFile(),b=f.pending.shift(),c=function(b){return b?(a=e(b,h.chunked?h.chunkSize:0),f.stack.push(a),a.shift()):null},g(b)?(d=b.file,b=b[b.pipe?\"pipe\":\"then\"](c),b.file=d,b):c(b)):void 0},_prepareNextFile:function(){var a,b=this,c=b.request(\"fetch-file\"),d=b.pending;c&&(a=b.request(\"before-send-file\",c,function(){return c.getStatus()===h.PROGRESS||c.getStatus()===h.INTERRUPT?c:b._finishFile(c)}),b.owner.trigger(\"uploadStart\",c),c.setStatus(h.PROGRESS),a.file=c,a.done(function(){var b=f.inArray(a,d);~b&&d.splice(b,1,c)}),a.fail(function(a){c.setStatus(h.ERROR,a),b.owner.trigger(\"uploadError\",c,a),b.owner.trigger(\"uploadComplete\",c)}),d.push(a))},_popBlock:function(a){var b=f.inArray(a,this.pool);this.pool.splice(b,1),a.file.remaning--,this.remaning--},_startSend:function(b){var c,d=this,e=b.file;return e.getStatus()!==h.PROGRESS?void(e.getStatus()===h.INTERRUPT&&d._putback(b)):(d.pool.push(b),d.remaning++,b.blob=1===b.chunks?e.source:e.source.slice(b.start,b.end),c=d.request(\"before-send\",b,function(){e.getStatus()===h.PROGRESS?d._doSend(b):(d._popBlock(b),a.nextTick(d.__tick))}),void c.fail(function(){1===e.remaning?d._finishFile(e).always(function(){b.percentage=1,d._popBlock(b),d.owner.trigger(\"uploadComplete\",e),a.nextTick(d.__tick)}):(b.percentage=1,d.updateFileProgress(e),d._popBlock(b),a.nextTick(d.__tick))}))},_doSend:function(b){var c,e,g=this,i=g.owner,j=g.options,k=b.file,l=new d(j),m=f.extend({},j.formData),n=f.extend({},j.headers);b.transport=l,l.on(\"destroy\",function(){delete b.transport,g._popBlock(b),a.nextTick(g.__tick)}),l.on(\"progress\",function(a){b.percentage=a,g.updateFileProgress(k)}),c=function(a){var c;return e=l.getResponseAsJson()||{},e._raw=l.getResponse(),c=function(b){a=b},i.trigger(\"uploadAccept\",b,e,c)||(a=a||\"server\"),a},l.on(\"error\",function(a,d){b.retried=b.retried||0,b.chunks>1&&~\"http,abort\".indexOf(a)&&b.retried<j.chunkRetry?(b.retried++,l.send()):(d||\"server\"!==a||(a=c(a)),k.setStatus(h.ERROR,a),i.trigger(\"uploadError\",k,a),i.trigger(\"uploadComplete\",k))}),l.on(\"load\",function(){var a;return(a=c())?void l.trigger(\"error\",a,!0):void(1===k.remaning?g._finishFile(k,e):l.destroy())}),m=f.extend(m,{id:k.id,name:k.name,type:k.type,lastModifiedDate:k.lastModifiedDate,size:k.size}),b.chunks>1&&f.extend(m,{chunks:b.chunks,chunk:b.chunk}),i.trigger(\"uploadBeforeSend\",b,m,n),l.appendBlob(j.fileVal,b.blob,k.name),l.append(m),l.setRequestHeader(n),l.send()},_finishFile:function(a,b,c){var d=this.owner;return d.request(\"after-send-file\",arguments,function(){a.setStatus(h.COMPLETE),d.trigger(\"uploadSuccess\",a,b,c)}).fail(function(b){a.getStatus()===h.PROGRESS&&a.setStatus(h.ERROR,b),d.trigger(\"uploadError\",a,b)\n}).always(function(){d.trigger(\"uploadComplete\",a)})},updateFileProgress:function(a){var b=0,c=0;a.blocks&&(f.each(a.blocks,function(a,b){c+=(b.percentage||0)*(b.end-b.start)}),b=c/a.size,this.owner.trigger(\"uploadProgress\",a,b||0))}})}),b(\"widgets/validator\",[\"base\",\"uploader\",\"file\",\"widgets/widget\"],function(a,b,c){var d,e=a.$,f={};return d={addValidator:function(a,b){f[a]=b},removeValidator:function(a){delete f[a]}},b.register({name:\"validator\",init:function(){var b=this;a.nextTick(function(){e.each(f,function(){this.call(b.owner)})})}}),d.addValidator(\"fileNumLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileNumLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){return c>=d&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_NUM_LIMIT\",d,a),setTimeout(function(){e=!0},1)),c>=d?!1:!0}),a.on(\"fileQueued\",function(){c++}),a.on(\"fileDequeued\",function(){c--}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSizeLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileSizeLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){var b=c+a.size>d;return b&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_SIZE_LIMIT\",d,a),setTimeout(function(){e=!0},1)),b?!1:!0}),a.on(\"fileQueued\",function(a){c+=a.size}),a.on(\"fileDequeued\",function(a){c-=a.size}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSingleSizeLimit\",function(){var a=this,b=a.options,d=b.fileSingleSizeLimit;d&&a.on(\"beforeFileQueued\",function(a){return a.size>d?(a.setStatus(c.Status.INVALID,\"exceed_size\"),this.trigger(\"error\",\"F_EXCEED_SIZE\",d,a),!1):void 0})}),d.addValidator(\"duplicate\",function(){function a(a){for(var b,c=0,d=0,e=a.length;e>d;d++)b=a.charCodeAt(d),c=b+(c<<6)+(c<<16)-c;return c}var b=this,c=b.options,d={};c.duplicate||(b.on(\"beforeFileQueued\",function(b){var c=b.__hash||(b.__hash=a(b.name+b.size+b.lastModifiedDate));return d[c]?(this.trigger(\"error\",\"F_DUPLICATE\",b),!1):void 0}),b.on(\"fileQueued\",function(a){var b=a.__hash;b&&(d[b]=!0)}),b.on(\"fileDequeued\",function(a){var b=a.__hash;b&&delete d[b]}),b.on(\"reset\",function(){d={}}))}),d}),b(\"lib/md5\",[\"runtime/client\",\"mediator\"],function(a,b){function c(){a.call(this,\"Md5\")}return b.installTo(c.prototype),c.prototype.loadFromBlob=function(a){var b=this;b.getRuid()&&b.disconnectRuntime(),b.connectRuntime(a.ruid,function(){b.exec(\"init\"),b.exec(\"loadFromBlob\",a)})},c.prototype.getResult=function(){return this.exec(\"getResult\")},c}),b(\"widgets/md5\",[\"base\",\"uploader\",\"lib/md5\",\"lib/blob\",\"widgets/widget\"],function(a,b,c,d){return b.register({name:\"md5\",md5File:function(b,e,f){var g=new c,h=a.Deferred(),i=b instanceof d?b:this.request(\"get-file\",b).source;return g.on(\"progress load\",function(a){a=a||{},h.notify(a.total?a.loaded/a.total:1)}),g.on(\"complete\",function(){h.resolve(g.getResult())}),g.on(\"error\",function(a){h.reject(a)}),arguments.length>1&&(e=e||0,f=f||0,0>e&&(e=i.size+e),0>f&&(f=i.size+f),f=Math.min(f,i.size),i=i.slice(e,f)),g.loadFromBlob(i),h.promise()}})}),b(\"runtime/compbase\",[],function(){function a(a,b){this.owner=a,this.options=a.options,this.getRuntime=function(){return b},this.getRuid=function(){return b.uid},this.trigger=function(){return a.trigger.apply(a,arguments)}}return a}),b(\"runtime/html5/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a={},d=this,e=this.destroy;c.apply(d,arguments),d.type=f,d.exec=function(c,e){var f,h=this,i=h.uid,j=b.slice(arguments,2);return g[c]&&(f=a[i]=a[i]||new g[c](h,d),f[e])?f[e].apply(f,j):void 0},d.destroy=function(){return e&&e.apply(this,arguments)}}var f=\"html5\",g={};return b.inherits(c,{constructor:e,init:function(){var a=this;setTimeout(function(){a.trigger(\"ready\")},1)}}),e.register=function(a,c){var e=g[a]=b.inherits(d,c);return e},a.Blob&&a.FileReader&&a.DataView&&c.addRuntime(f,e),e}),b(\"runtime/html5/blob\",[\"runtime/html5/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.owner.source,e=d.slice||d.webkitSlice||d.mozSlice;return d=e.call(d,a,c),new b(this.getRuid(),d)}})}),b(\"runtime/html5/dnd\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){var d=a.$,e=\"webuploader-dnd-\";return b.register(\"DragAndDrop\",{init:function(){var b=this.elem=this.options.container;this.dragEnterHandler=a.bindFn(this._dragEnterHandler,this),this.dragOverHandler=a.bindFn(this._dragOverHandler,this),this.dragLeaveHandler=a.bindFn(this._dragLeaveHandler,this),this.dropHandler=a.bindFn(this._dropHandler,this),this.dndOver=!1,b.on(\"dragenter\",this.dragEnterHandler),b.on(\"dragover\",this.dragOverHandler),b.on(\"dragleave\",this.dragLeaveHandler),b.on(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).on(\"dragover\",this.dragOverHandler),d(document).on(\"drop\",this.dropHandler))},_dragEnterHandler:function(a){var b,c=this,d=c._denied||!1;return a=a.originalEvent||a,c.dndOver||(c.dndOver=!0,b=a.dataTransfer.items,b&&b.length&&(c._denied=d=!c.trigger(\"accept\",b)),c.elem.addClass(e+\"over\"),c.elem[d?\"addClass\":\"removeClass\"](e+\"denied\")),a.dataTransfer.dropEffect=d?\"none\":\"copy\",!1},_dragOverHandler:function(a){var b=this.elem.parent().get(0);return b&&!d.contains(b,a.currentTarget)?!1:(clearTimeout(this._leaveTimer),this._dragEnterHandler.call(this,a),!1)},_dragLeaveHandler:function(){var a,b=this;return a=function(){b.dndOver=!1,b.elem.removeClass(e+\"over \"+e+\"denied\")},clearTimeout(b._leaveTimer),b._leaveTimer=setTimeout(a,100),!1},_dropHandler:function(a){var b,f,g=this,h=g.getRuid(),i=g.elem.parent().get(0);if(i&&!d.contains(i,a.currentTarget))return!1;a=a.originalEvent||a,b=a.dataTransfer;try{f=b.getData(\"text/html\")}catch(j){}return f?void 0:(g._getTansferFiles(b,function(a){g.trigger(\"drop\",d.map(a,function(a){return new c(h,a)}))}),g.dndOver=!1,g.elem.removeClass(e+\"over\"),!1)},_getTansferFiles:function(b,c){var d,e,f,g,h,i,j,k=[],l=[];for(d=b.items,e=b.files,j=!(!d||!d[0].webkitGetAsEntry),h=0,i=e.length;i>h;h++)f=e[h],g=d&&d[h],j&&g.webkitGetAsEntry().isDirectory?l.push(this._traverseDirectoryTree(g.webkitGetAsEntry(),k)):k.push(f);a.when.apply(a,l).done(function(){k.length&&c(k)})},_traverseDirectoryTree:function(b,c){var d=a.Deferred(),e=this;return b.isFile?b.file(function(a){c.push(a),d.resolve()}):b.isDirectory&&b.createReader().readEntries(function(b){var f,g=b.length,h=[],i=[];for(f=0;g>f;f++)h.push(e._traverseDirectoryTree(b[f],i));a.when.apply(a,h).then(function(){c.push.apply(c,i),d.resolve()},d.reject)}),d.promise()},destroy:function(){var a=this.elem;a&&(a.off(\"dragenter\",this.dragEnterHandler),a.off(\"dragover\",this.dragOverHandler),a.off(\"dragleave\",this.dragLeaveHandler),a.off(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).off(\"dragover\",this.dragOverHandler),d(document).off(\"drop\",this.dropHandler)))}})}),b(\"runtime/html5/filepaste\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){return b.register(\"FilePaste\",{init:function(){var b,c,d,e,f=this.options,g=this.elem=f.container,h=\".*\";if(f.accept){for(b=[],c=0,d=f.accept.length;d>c;c++)e=f.accept[c].mimeTypes,e&&b.push(e);b.length&&(h=b.join(\",\"),h=h.replace(/,/g,\"|\").replace(/\\*/g,\".*\"))}this.accept=h=new RegExp(h,\"i\"),this.hander=a.bindFn(this._pasteHander,this),g.on(\"paste\",this.hander)},_pasteHander:function(a){var b,d,e,f,g,h=[],i=this.getRuid();for(a=a.originalEvent||a,b=a.clipboardData.items,f=0,g=b.length;g>f;f++)d=b[f],\"file\"===d.kind&&(e=d.getAsFile())&&h.push(new c(i,e));h.length&&(a.preventDefault(),a.stopPropagation(),this.trigger(\"paste\",h))},destroy:function(){this.elem.off(\"paste\",this.hander)}})}),b(\"runtime/html5/filepicker\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(){var a,b,d,e,f=this.getRuntime().getContainer(),g=this,h=g.owner,i=g.options,j=this.label=c(document.createElement(\"label\")),k=this.input=c(document.createElement(\"input\"));if(k.attr(\"type\",\"file\"),k.attr(\"name\",i.name),k.addClass(\"webuploader-element-invisible\"),j.on(\"click\",function(){k.trigger(\"click\")}),j.css({opacity:0,width:\"100%\",height:\"100%\",display:\"block\",cursor:\"pointer\",background:\"#ffffff\"}),i.multiple&&k.attr(\"multiple\",\"multiple\"),i.accept&&i.accept.length>0){for(a=[],b=0,d=i.accept.length;d>b;b++)a.push(i.accept[b].mimeTypes);k.attr(\"accept\",a.join(\",\"))}f.append(k),f.append(j),e=function(a){h.trigger(a.type)},k.on(\"change\",function(a){var b,d=arguments.callee;g.files=a.target.files,b=this.cloneNode(!0),b.value=null,this.parentNode.replaceChild(b,this),k.off(),k=c(b).on(\"change\",d).on(\"mouseenter mouseleave\",e),h.trigger(\"change\")}),j.on(\"mouseenter mouseleave\",e)},getFiles:function(){return this.files},destroy:function(){this.input.off(),this.label.off()}})}),b(\"runtime/html5/util\",[\"base\"],function(b){var c=a.createObjectURL&&a||a.URL&&URL.revokeObjectURL&&URL||a.webkitURL,d=b.noop,e=d;return c&&(d=function(){return c.createObjectURL.apply(c,arguments)},e=function(){return c.revokeObjectURL.apply(c,arguments)}),{createObjectURL:d,revokeObjectURL:e,dataURL2Blob:function(a){var b,c,d,e,f,g;for(g=a.split(\",\"),b=~g[0].indexOf(\"base64\")?atob(g[1]):decodeURIComponent(g[1]),d=new ArrayBuffer(b.length),c=new Uint8Array(d),e=0;e<b.length;e++)c[e]=b.charCodeAt(e);return f=g[0].split(\":\")[1].split(\";\")[0],this.arrayBufferToBlob(d,f)},dataURL2ArrayBuffer:function(a){var b,c,d,e;for(e=a.split(\",\"),b=~e[0].indexOf(\"base64\")?atob(e[1]):decodeURIComponent(e[1]),c=new Uint8Array(b.length),d=0;d<b.length;d++)c[d]=b.charCodeAt(d);return c.buffer},arrayBufferToBlob:function(b,c){var d,e=a.BlobBuilder||a.WebKitBlobBuilder;return e?(d=new e,d.append(b),d.getBlob(c)):new Blob([b],c?{type:c}:{})},canvasToDataUrl:function(a,b,c){return a.toDataURL(b,c/100)},parseMeta:function(a,b){b(!1,{})},updateImageHead:function(a){return a}}}),b(\"runtime/html5/imagemeta\",[\"runtime/html5/util\"],function(a){var b;return b={parsers:{65505:[]},maxMetaDataSize:262144,parse:function(a,b){var c=this,d=new FileReader;d.onload=function(){b(!1,c._parse(this.result)),d=d.onload=d.onerror=null},d.onerror=function(a){b(a.message),d=d.onload=d.onerror=null},a=a.slice(0,c.maxMetaDataSize),d.readAsArrayBuffer(a.getSource())},_parse:function(a,c){if(!(a.byteLength<6)){var d,e,f,g,h=new DataView(a),i=2,j=h.byteLength-4,k=i,l={};if(65496===h.getUint16(0)){for(;j>i&&(d=h.getUint16(i),d>=65504&&65519>=d||65534===d)&&(e=h.getUint16(i+2)+2,!(i+e>h.byteLength));){if(f=b.parsers[d],!c&&f)for(g=0;g<f.length;g+=1)f[g].call(b,h,i,e,l);i+=e,k=i}k>6&&(l.imageHead=a.slice?a.slice(2,k):new Uint8Array(a).subarray(2,k))}return l}},updateImageHead:function(a,b){var c,d,e,f=this._parse(a,!0);return e=2,f.imageHead&&(e=2+f.imageHead.byteLength),d=a.slice?a.slice(e):new Uint8Array(a).subarray(e),c=new Uint8Array(b.byteLength+2+d.byteLength),c[0]=255,c[1]=216,c.set(new Uint8Array(b),2),c.set(new Uint8Array(d),b.byteLength+2),c.buffer}},a.parseMeta=function(){return b.parse.apply(b,arguments)},a.updateImageHead=function(){return b.updateImageHead.apply(b,arguments)},b}),b(\"runtime/html5/imagemeta/exif\",[\"base\",\"runtime/html5/imagemeta\"],function(a,b){var c={};return c.ExifMap=function(){return this},c.ExifMap.prototype.map={Orientation:274},c.ExifMap.prototype.get=function(a){return this[a]||this[this.map[a]]},c.exifTagTypes={1:{getValue:function(a,b){return a.getUint8(b)},size:1},2:{getValue:function(a,b){return String.fromCharCode(a.getUint8(b))},size:1,ascii:!0},3:{getValue:function(a,b,c){return a.getUint16(b,c)},size:2},4:{getValue:function(a,b,c){return a.getUint32(b,c)},size:4},5:{getValue:function(a,b,c){return a.getUint32(b,c)/a.getUint32(b+4,c)},size:8},9:{getValue:function(a,b,c){return a.getInt32(b,c)},size:4},10:{getValue:function(a,b,c){return a.getInt32(b,c)/a.getInt32(b+4,c)},size:8}},c.exifTagTypes[7]=c.exifTagTypes[1],c.getExifValue=function(b,d,e,f,g,h){var i,j,k,l,m,n,o=c.exifTagTypes[f];if(!o)return void a.log(\"Invalid Exif data: Invalid tag type.\");if(i=o.size*g,j=i>4?d+b.getUint32(e+8,h):e+8,j+i>b.byteLength)return void a.log(\"Invalid Exif data: Invalid data offset.\");if(1===g)return o.getValue(b,j,h);for(k=[],l=0;g>l;l+=1)k[l]=o.getValue(b,j+l*o.size,h);if(o.ascii){for(m=\"\",l=0;l<k.length&&(n=k[l],\"\\x00\"!==n);l+=1)m+=n;return m}return k},c.parseExifTag=function(a,b,d,e,f){var g=a.getUint16(d,e);f.exif[g]=c.getExifValue(a,b,d,a.getUint16(d+2,e),a.getUint32(d+4,e),e)},c.parseExifTags=function(b,c,d,e,f){var g,h,i;if(d+6>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory offset.\");if(g=b.getUint16(d,e),h=d+2+12*g,h+4>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory size.\");for(i=0;g>i;i+=1)this.parseExifTag(b,c,d+2+12*i,e,f);return b.getUint32(h,e)},c.parseExifData=function(b,d,e,f){var g,h,i=d+10;if(1165519206===b.getUint32(d+4)){if(i+8>b.byteLength)return void a.log(\"Invalid Exif data: Invalid segment size.\");if(0!==b.getUint16(d+8))return void a.log(\"Invalid Exif data: Missing byte alignment offset.\");switch(b.getUint16(i)){case 18761:g=!0;break;case 19789:g=!1;break;default:return void a.log(\"Invalid Exif data: Invalid byte alignment marker.\")}if(42!==b.getUint16(i+2,g))return void a.log(\"Invalid Exif data: Missing TIFF marker.\");h=b.getUint32(i+4,g),f.exif=new c.ExifMap,h=c.parseExifTags(b,i,i+h,g,f)}},b.parsers[65505].push(c.parseExifData),c}),b(\"runtime/html5/jpegencoder\",[],function(){function a(a){function b(a){for(var b=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],c=0;64>c;c++){var d=y((b[c]*a+50)/100);1>d?d=1:d>255&&(d=255),z[P[c]]=d}for(var e=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],f=0;64>f;f++){var g=y((e[f]*a+50)/100);1>g?g=1:g>255&&(g=255),A[P[f]]=g}for(var h=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],i=0,j=0;8>j;j++)for(var k=0;8>k;k++)B[i]=1/(z[P[i]]*h[j]*h[k]*8),C[i]=1/(A[P[i]]*h[j]*h[k]*8),i++}function c(a,b){for(var c=0,d=0,e=new Array,f=1;16>=f;f++){for(var g=1;g<=a[f];g++)e[b[d]]=[],e[b[d]][0]=c,e[b[d]][1]=f,d++,c++;c*=2}return e}function d(){t=c(Q,R),u=c(U,V),v=c(S,T),w=c(W,X)}function e(){for(var a=1,b=2,c=1;15>=c;c++){for(var d=a;b>d;d++)E[32767+d]=c,D[32767+d]=[],D[32767+d][1]=c,D[32767+d][0]=d;for(var e=-(b-1);-a>=e;e++)E[32767+e]=c,D[32767+e]=[],D[32767+e][1]=c,D[32767+e][0]=b-1+e;a<<=1,b<<=1}}function f(){for(var a=0;256>a;a++)O[a]=19595*a,O[a+256>>0]=38470*a,O[a+512>>0]=7471*a+32768,O[a+768>>0]=-11059*a,O[a+1024>>0]=-21709*a,O[a+1280>>0]=32768*a+8421375,O[a+1536>>0]=-27439*a,O[a+1792>>0]=-5329*a}function g(a){for(var b=a[0],c=a[1]-1;c>=0;)b&1<<c&&(I|=1<<J),c--,J--,0>J&&(255==I?(h(255),h(0)):h(I),J=7,I=0)}function h(a){H.push(N[a])}function i(a){h(a>>8&255),h(255&a)}function j(a,b){var c,d,e,f,g,h,i,j,k,l=0,m=8,n=64;for(k=0;m>k;++k){c=a[l],d=a[l+1],e=a[l+2],f=a[l+3],g=a[l+4],h=a[l+5],i=a[l+6],j=a[l+7];var o=c+j,p=c-j,q=d+i,r=d-i,s=e+h,t=e-h,u=f+g,v=f-g,w=o+u,x=o-u,y=q+s,z=q-s;a[l]=w+y,a[l+4]=w-y;var A=.707106781*(z+x);a[l+2]=x+A,a[l+6]=x-A,w=v+t,y=t+r,z=r+p;var B=.382683433*(w-z),C=.5411961*w+B,D=1.306562965*z+B,E=.707106781*y,G=p+E,H=p-E;a[l+5]=H+C,a[l+3]=H-C,a[l+1]=G+D,a[l+7]=G-D,l+=8}for(l=0,k=0;m>k;++k){c=a[l],d=a[l+8],e=a[l+16],f=a[l+24],g=a[l+32],h=a[l+40],i=a[l+48],j=a[l+56];var I=c+j,J=c-j,K=d+i,L=d-i,M=e+h,N=e-h,O=f+g,P=f-g,Q=I+O,R=I-O,S=K+M,T=K-M;a[l]=Q+S,a[l+32]=Q-S;var U=.707106781*(T+R);a[l+16]=R+U,a[l+48]=R-U,Q=P+N,S=N+L,T=L+J;var V=.382683433*(Q-T),W=.5411961*Q+V,X=1.306562965*T+V,Y=.707106781*S,Z=J+Y,$=J-Y;a[l+40]=$+W,a[l+24]=$-W,a[l+8]=Z+X,a[l+56]=Z-X,l++}var _;for(k=0;n>k;++k)_=a[k]*b[k],F[k]=_>0?_+.5|0:_-.5|0;return F}function k(){i(65504),i(16),h(74),h(70),h(73),h(70),h(0),h(1),h(1),h(0),i(1),i(1),h(0),h(0)}function l(a,b){i(65472),i(17),h(8),i(b),i(a),h(3),h(1),h(17),h(0),h(2),h(17),h(1),h(3),h(17),h(1)}function m(){i(65499),i(132),h(0);for(var a=0;64>a;a++)h(z[a]);h(1);for(var b=0;64>b;b++)h(A[b])}function n(){i(65476),i(418),h(0);for(var a=0;16>a;a++)h(Q[a+1]);for(var b=0;11>=b;b++)h(R[b]);h(16);for(var c=0;16>c;c++)h(S[c+1]);for(var d=0;161>=d;d++)h(T[d]);h(1);for(var e=0;16>e;e++)h(U[e+1]);for(var f=0;11>=f;f++)h(V[f]);h(17);for(var g=0;16>g;g++)h(W[g+1]);for(var j=0;161>=j;j++)h(X[j])}function o(){i(65498),i(12),h(3),h(1),h(0),h(2),h(17),h(3),h(17),h(0),h(63),h(0)}function p(a,b,c,d,e){for(var f,h=e[0],i=e[240],k=16,l=63,m=64,n=j(a,b),o=0;m>o;++o)G[P[o]]=n[o];var p=G[0]-c;c=G[0],0==p?g(d[0]):(f=32767+p,g(d[E[f]]),g(D[f]));for(var q=63;q>0&&0==G[q];q--);if(0==q)return g(h),c;for(var r,s=1;q>=s;){for(var t=s;0==G[s]&&q>=s;++s);var u=s-t;if(u>=k){r=u>>4;for(var v=1;r>=v;++v)g(i);u=15&u}f=32767+G[s],g(e[(u<<4)+E[f]]),g(D[f]),s++}return q!=l&&g(h),c}function q(){for(var a=String.fromCharCode,b=0;256>b;b++)N[b]=a(b)}function r(a){if(0>=a&&(a=1),a>100&&(a=100),x!=a){var c=0;c=Math.floor(50>a?5e3/a:200-2*a),b(c),x=a}}function s(){a||(a=50),q(),d(),e(),f(),r(a)}var t,u,v,w,x,y=(Math.round,Math.floor),z=new Array(64),A=new Array(64),B=new Array(64),C=new Array(64),D=new Array(65535),E=new Array(65535),F=new Array(64),G=new Array(64),H=[],I=0,J=7,K=new Array(64),L=new Array(64),M=new Array(64),N=new Array(256),O=new Array(2048),P=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],Q=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],R=[0,1,2,3,4,5,6,7,8,9,10,11],S=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],T=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],U=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],V=[0,1,2,3,4,5,6,7,8,9,10,11],W=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],X=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];this.encode=function(a,b){b&&r(b),H=new Array,I=0,J=7,i(65496),k(),m(),l(a.width,a.height),n(),o();var c=0,d=0,e=0;I=0,J=7,this.encode.displayName=\"_encode_\";for(var f,h,j,q,s,x,y,z,A,D=a.data,E=a.width,F=a.height,G=4*E,N=0;F>N;){for(f=0;G>f;){for(s=G*N+f,x=s,y=-1,z=0,A=0;64>A;A++)z=A>>3,y=4*(7&A),x=s+z*G+y,N+z>=F&&(x-=G*(N+1+z-F)),f+y>=G&&(x-=f+y-G+4),h=D[x++],j=D[x++],q=D[x++],K[A]=(O[h]+O[j+256>>0]+O[q+512>>0]>>16)-128,L[A]=(O[h+768>>0]+O[j+1024>>0]+O[q+1280>>0]>>16)-128,M[A]=(O[h+1280>>0]+O[j+1536>>0]+O[q+1792>>0]>>16)-128;c=p(K,B,c,t,v),d=p(L,C,d,u,w),e=p(M,C,e,u,w),f+=32}N+=8}if(J>=0){var P=[];P[1]=J+1,P[0]=(1<<J+1)-1,g(P)}i(65497);var Q=\"data:image/jpeg;base64,\"+btoa(H.join(\"\"));return H=[],Q},s()}return a.encode=function(b,c){var d=new a(c);return d.encode(b)},a}),b(\"runtime/html5/androidpatch\",[\"runtime/html5/util\",\"runtime/html5/jpegencoder\",\"base\"],function(a,b,c){var d,e=a.canvasToDataUrl;a.canvasToDataUrl=function(a,f,g){var h,i,j,k,l;return c.os.android?(\"image/jpeg\"===f&&\"undefined\"==typeof d&&(k=e.apply(null,arguments),l=k.split(\",\"),k=~l[0].indexOf(\"base64\")?atob(l[1]):decodeURIComponent(l[1]),k=k.substring(0,2),d=255===k.charCodeAt(0)&&216===k.charCodeAt(1)),\"image/jpeg\"!==f||d?e.apply(null,arguments):(i=a.width,j=a.height,h=a.getContext(\"2d\"),b.encode(h.getImageData(0,0,i,j),g))):e.apply(null,arguments)}}),b(\"runtime/html5/image\",[\"base\",\"runtime/html5/runtime\",\"runtime/html5/util\"],function(a,b,c){var d=\"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D\";return b.register(\"Image\",{modified:!1,init:function(){var a=this,b=new Image;b.onload=function(){a._info={type:a.type,width:this.width,height:this.height},a._metas||\"image/jpeg\"!==a.type?a.owner.trigger(\"load\"):c.parseMeta(a._blob,function(b,c){a._metas=c,a.owner.trigger(\"load\")})},b.onerror=function(){a.owner.trigger(\"error\")},a._img=b},loadFromBlob:function(a){var b=this,d=b._img;b._blob=a,b.type=a.type,d.src=c.createObjectURL(a.getSource()),b.owner.once(\"load\",function(){c.revokeObjectURL(d.src)})},resize:function(a,b){var c=this._canvas||(this._canvas=document.createElement(\"canvas\"));this._resize(this._img,c,a,b),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"resize\")},crop:function(a,b,c,d,e){var f=this._canvas||(this._canvas=document.createElement(\"canvas\")),g=this.options,h=this._img,i=h.naturalWidth,j=h.naturalHeight,k=this.getOrientation();e=e||1,f.width=c,f.height=d,g.preserveHeaders||this._rotate2Orientaion(f,k),this._renderImageToCanvas(f,h,-a,-b,i*e,j*e),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"crop\")},getAsBlob:function(a){var b,d=this._blob,e=this.options;if(a=a||this.type,this.modified||this.type!==a){if(b=this._canvas,\"image/jpeg\"===a){if(d=c.canvasToDataUrl(b,a,e.quality),e.preserveHeaders&&this._metas&&this._metas.imageHead)return d=c.dataURL2ArrayBuffer(d),d=c.updateImageHead(d,this._metas.imageHead),d=c.arrayBufferToBlob(d,a)}else d=c.canvasToDataUrl(b,a);d=c.dataURL2Blob(d)}return d},getAsDataUrl:function(a){var b=this.options;return a=a||this.type,\"image/jpeg\"===a?c.canvasToDataUrl(this._canvas,a,b.quality):this._canvas.toDataURL(a)},getOrientation:function(){return this._metas&&this._metas.exif&&this._metas.exif.get(\"Orientation\")||1},info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},destroy:function(){var a=this._canvas;this._img.onload=null,a&&(a.getContext(\"2d\").clearRect(0,0,a.width,a.height),a.width=a.height=0,this._canvas=null),this._img.src=d,this._img=this._blob=null},_resize:function(a,b,c,d){var e,f,g,h,i,j=this.options,k=a.width,l=a.height,m=this.getOrientation();~[5,6,7,8].indexOf(m)&&(c^=d,d^=c,c^=d),e=Math[j.crop?\"max\":\"min\"](c/k,d/l),j.allowMagnify||(e=Math.min(1,e)),f=k*e,g=l*e,j.crop?(b.width=c,b.height=d):(b.width=f,b.height=g),h=(b.width-f)/2,i=(b.height-g)/2,j.preserveHeaders||this._rotate2Orientaion(b,m),this._renderImageToCanvas(b,a,h,i,f,g)},_rotate2Orientaion:function(a,b){var c=a.width,d=a.height,e=a.getContext(\"2d\");switch(b){case 5:case 6:case 7:case 8:a.width=d,a.height=c}switch(b){case 2:e.translate(c,0),e.scale(-1,1);break;case 3:e.translate(c,d),e.rotate(Math.PI);break;case 4:e.translate(0,d),e.scale(1,-1);break;case 5:e.rotate(.5*Math.PI),e.scale(1,-1);break;case 6:e.rotate(.5*Math.PI),e.translate(0,-d);break;case 7:e.rotate(.5*Math.PI),e.translate(c,-d),e.scale(-1,1);break;case 8:e.rotate(-.5*Math.PI),e.translate(-c,0)}},_renderImageToCanvas:function(){function b(a,b,c){var d,e,f,g=document.createElement(\"canvas\"),h=g.getContext(\"2d\"),i=0,j=c,k=c;for(g.width=1,g.height=c,h.drawImage(a,0,0),d=h.getImageData(0,0,1,c).data;k>i;)e=d[4*(k-1)+3],0===e?j=k:i=k,k=j+i>>1;return f=k/c,0===f?1:f}function c(a){var b,c,d=a.naturalWidth,e=a.naturalHeight;return d*e>1048576?(b=document.createElement(\"canvas\"),b.width=b.height=1,c=b.getContext(\"2d\"),c.drawImage(a,-d+1,0),0===c.getImageData(0,0,1,1).data[3]):!1}return a.os.ios?a.os.ios>=7?function(a,c,d,e,f,g){var h=c.naturalWidth,i=c.naturalHeight,j=b(c,h,i);return a.getContext(\"2d\").drawImage(c,0,0,h*j,i*j,d,e,f,g)}:function(a,d,e,f,g,h){var i,j,k,l,m,n,o,p=d.naturalWidth,q=d.naturalHeight,r=a.getContext(\"2d\"),s=c(d),t=\"image/jpeg\"===this.type,u=1024,v=0,w=0;for(s&&(p/=2,q/=2),r.save(),i=document.createElement(\"canvas\"),i.width=i.height=u,j=i.getContext(\"2d\"),k=t?b(d,p,q):1,l=Math.ceil(u*g/p),m=Math.ceil(u*h/q/k);q>v;){for(n=0,o=0;p>n;)j.clearRect(0,0,u,u),j.drawImage(d,-n,-v),r.drawImage(i,0,0,u,u,e+o,f+w,l,m),n+=u,o+=l;v+=u,w+=m}r.restore(),i=j=null}:function(b){var c=a.slice(arguments,1),d=b.getContext(\"2d\");d.drawImage.apply(d,c)}}()})}),b(\"runtime/html5/transport\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.noop,d=a.$;return b.register(\"Transport\",{init:function(){this._status=0,this._response=null},send:function(){var b,c,e,f=this.owner,g=this.options,h=this._initAjax(),i=f._blob,j=g.server;g.sendAsBinary?(j+=(/\\?/.test(j)?\"&\":\"?\")+d.param(f._formData),c=i.getSource()):(b=new FormData,d.each(f._formData,function(a,c){b.append(a,c)}),b.append(g.fileVal,i.getSource(),g.filename||f._formData.name||\"\")),g.withCredentials&&\"withCredentials\"in h?(h.open(g.method,j,!0),h.withCredentials=!0):h.open(g.method,j),this._setRequestHeader(h,g.headers),c?(h.overrideMimeType&&h.overrideMimeType(\"application/octet-stream\"),a.os.android?(e=new FileReader,e.onload=function(){h.send(this.result),e=e.onload=null},e.readAsArrayBuffer(c)):h.send(c)):h.send(b)},getResponse:function(){return this._response},getResponseAsJson:function(){return this._parseJson(this._response)},getStatus:function(){return this._status},abort:function(){var a=this._xhr;a&&(a.upload.onprogress=c,a.onreadystatechange=c,a.abort(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var a=this,b=new XMLHttpRequest,d=this.options;return!d.withCredentials||\"withCredentials\"in b||\"undefined\"==typeof XDomainRequest||(b=new XDomainRequest),b.upload.onprogress=function(b){var c=0;return b.lengthComputable&&(c=b.loaded/b.total),a.trigger(\"progress\",c)},b.onreadystatechange=function(){return 4===b.readyState?(b.upload.onprogress=c,b.onreadystatechange=c,a._xhr=null,a._status=b.status,b.status>=200&&b.status<300?(a._response=b.responseText,a.trigger(\"load\")):b.status>=500&&b.status<600?(a._response=b.responseText,a.trigger(\"error\",\"server\")):a.trigger(\"error\",a._status?\"http\":\"abort\")):void 0},a._xhr=b,b},_setRequestHeader:function(a,b){d.each(b,function(b,c){a.setRequestHeader(b,c)})},_parseJson:function(a){var b;try{b=JSON.parse(a)}catch(c){b={}}return b}})}),b(\"runtime/html5/md5\",[\"runtime/html5/runtime\"],function(a){var b=function(a,b){return a+b&4294967295},c=function(a,c,d,e,f,g){return c=b(b(c,a),b(e,g)),b(c<<f|c>>>32-f,d)},d=function(a,b,d,e,f,g,h){return c(b&d|~b&e,a,b,f,g,h)},e=function(a,b,d,e,f,g,h){return c(b&e|d&~e,a,b,f,g,h)},f=function(a,b,d,e,f,g,h){return c(b^d^e,a,b,f,g,h)},g=function(a,b,d,e,f,g,h){return c(d^(b|~e),a,b,f,g,h)},h=function(a,c){var h=a[0],i=a[1],j=a[2],k=a[3];h=d(h,i,j,k,c[0],7,-680876936),k=d(k,h,i,j,c[1],12,-389564586),j=d(j,k,h,i,c[2],17,606105819),i=d(i,j,k,h,c[3],22,-1044525330),h=d(h,i,j,k,c[4],7,-176418897),k=d(k,h,i,j,c[5],12,1200080426),j=d(j,k,h,i,c[6],17,-1473231341),i=d(i,j,k,h,c[7],22,-45705983),h=d(h,i,j,k,c[8],7,1770035416),k=d(k,h,i,j,c[9],12,-1958414417),j=d(j,k,h,i,c[10],17,-42063),i=d(i,j,k,h,c[11],22,-1990404162),h=d(h,i,j,k,c[12],7,1804603682),k=d(k,h,i,j,c[13],12,-40341101),j=d(j,k,h,i,c[14],17,-1502002290),i=d(i,j,k,h,c[15],22,1236535329),h=e(h,i,j,k,c[1],5,-165796510),k=e(k,h,i,j,c[6],9,-1069501632),j=e(j,k,h,i,c[11],14,643717713),i=e(i,j,k,h,c[0],20,-373897302),h=e(h,i,j,k,c[5],5,-701558691),k=e(k,h,i,j,c[10],9,38016083),j=e(j,k,h,i,c[15],14,-660478335),i=e(i,j,k,h,c[4],20,-405537848),h=e(h,i,j,k,c[9],5,568446438),k=e(k,h,i,j,c[14],9,-1019803690),j=e(j,k,h,i,c[3],14,-187363961),i=e(i,j,k,h,c[8],20,1163531501),h=e(h,i,j,k,c[13],5,-1444681467),k=e(k,h,i,j,c[2],9,-51403784),j=e(j,k,h,i,c[7],14,1735328473),i=e(i,j,k,h,c[12],20,-1926607734),h=f(h,i,j,k,c[5],4,-378558),k=f(k,h,i,j,c[8],11,-2022574463),j=f(j,k,h,i,c[11],16,1839030562),i=f(i,j,k,h,c[14],23,-35309556),h=f(h,i,j,k,c[1],4,-1530992060),k=f(k,h,i,j,c[4],11,1272893353),j=f(j,k,h,i,c[7],16,-155497632),i=f(i,j,k,h,c[10],23,-1094730640),h=f(h,i,j,k,c[13],4,681279174),k=f(k,h,i,j,c[0],11,-358537222),j=f(j,k,h,i,c[3],16,-722521979),i=f(i,j,k,h,c[6],23,76029189),h=f(h,i,j,k,c[9],4,-640364487),k=f(k,h,i,j,c[12],11,-421815835),j=f(j,k,h,i,c[15],16,530742520),i=f(i,j,k,h,c[2],23,-995338651),h=g(h,i,j,k,c[0],6,-198630844),k=g(k,h,i,j,c[7],10,1126891415),j=g(j,k,h,i,c[14],15,-1416354905),i=g(i,j,k,h,c[5],21,-57434055),h=g(h,i,j,k,c[12],6,1700485571),k=g(k,h,i,j,c[3],10,-1894986606),j=g(j,k,h,i,c[10],15,-1051523),i=g(i,j,k,h,c[1],21,-2054922799),h=g(h,i,j,k,c[8],6,1873313359),k=g(k,h,i,j,c[15],10,-30611744),j=g(j,k,h,i,c[6],15,-1560198380),i=g(i,j,k,h,c[13],21,1309151649),h=g(h,i,j,k,c[4],6,-145523070),k=g(k,h,i,j,c[11],10,-1120210379),j=g(j,k,h,i,c[2],15,718787259),i=g(i,j,k,h,c[9],21,-343485551),a[0]=b(h,a[0]),a[1]=b(i,a[1]),a[2]=b(j,a[2]),a[3]=b(k,a[3])},i=function(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a.charCodeAt(b)+(a.charCodeAt(b+1)<<8)+(a.charCodeAt(b+2)<<16)+(a.charCodeAt(b+3)<<24);return c},j=function(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a[b]+(a[b+1]<<8)+(a[b+2]<<16)+(a[b+3]<<24);return c},k=function(a){var b,c,d,e,f,g,j=a.length,k=[1732584193,-271733879,-1732584194,271733878];for(b=64;j>=b;b+=64)h(k,i(a.substring(b-64,b)));for(a=a.substring(b-64),c=a.length,d=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],b=0;c>b;b+=1)d[b>>2]|=a.charCodeAt(b)<<(b%4<<3);if(d[b>>2]|=128<<(b%4<<3),b>55)for(h(k,d),b=0;16>b;b+=1)d[b]=0;return e=8*j,e=e.toString(16).match(/(.*?)(.{0,8})$/),f=parseInt(e[2],16),g=parseInt(e[1],16)||0,d[14]=f,d[15]=g,h(k,d),k},l=function(a){var b,c,d,e,f,g,i=a.length,k=[1732584193,-271733879,-1732584194,271733878];for(b=64;i>=b;b+=64)h(k,j(a.subarray(b-64,b)));for(a=i>b-64?a.subarray(b-64):new Uint8Array(0),c=a.length,d=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],b=0;c>b;b+=1)d[b>>2]|=a[b]<<(b%4<<3);if(d[b>>2]|=128<<(b%4<<3),b>55)for(h(k,d),b=0;16>b;b+=1)d[b]=0;return e=8*i,e=e.toString(16).match(/(.*?)(.{0,8})$/),f=parseInt(e[2],16),g=parseInt(e[1],16)||0,d[14]=f,d[15]=g,h(k,d),k},m=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"],n=function(a){var b,c=\"\";for(b=0;4>b;b+=1)c+=m[a>>8*b+4&15]+m[a>>8*b&15];return c},o=function(a){var b;for(b=0;b<a.length;b+=1)a[b]=n(a[b]);return a.join(\"\")},p=function(a){return o(k(a))},q=function(){this.reset()};return\"5d41402abc4b2a76b9719d911017c592\"!==p(\"hello\")&&(b=function(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}),q.prototype.append=function(a){return/[\\u0080-\\uFFFF]/.test(a)&&(a=unescape(encodeURIComponent(a))),this.appendBinary(a),this},q.prototype.appendBinary=function(a){this._buff+=a,this._length+=a.length;var b,c=this._buff.length;for(b=64;c>=b;b+=64)h(this._state,i(this._buff.substring(b-64,b)));return this._buff=this._buff.substr(b-64),this},q.prototype.end=function(a){var b,c,d=this._buff,e=d.length,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(b=0;e>b;b+=1)f[b>>2]|=d.charCodeAt(b)<<(b%4<<3);return this._finish(f,e),c=a?this._state:o(this._state),this.reset(),c},q.prototype._finish=function(a,b){var c,d,e,f=b;if(a[f>>2]|=128<<(f%4<<3),f>55)for(h(this._state,a),f=0;16>f;f+=1)a[f]=0;c=8*this._length,c=c.toString(16).match(/(.*?)(.{0,8})$/),d=parseInt(c[2],16),e=parseInt(c[1],16)||0,a[14]=d,a[15]=e,h(this._state,a)},q.prototype.reset=function(){return this._buff=\"\",this._length=0,this._state=[1732584193,-271733879,-1732584194,271733878],this},q.prototype.destroy=function(){delete this._state,delete this._buff,delete this._length},q.hash=function(a,b){/[\\u0080-\\uFFFF]/.test(a)&&(a=unescape(encodeURIComponent(a)));var c=k(a);return b?c:o(c)},q.hashBinary=function(a,b){var c=k(a);return b?c:o(c)},q.ArrayBuffer=function(){this.reset()},q.ArrayBuffer.prototype.append=function(a){var b,c=this._concatArrayBuffer(this._buff,a),d=c.length;for(this._length+=a.byteLength,b=64;d>=b;b+=64)h(this._state,j(c.subarray(b-64,b)));return this._buff=d>b-64?c.subarray(b-64):new Uint8Array(0),this},q.ArrayBuffer.prototype.end=function(a){var b,c,d=this._buff,e=d.length,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];\nfor(b=0;e>b;b+=1)f[b>>2]|=d[b]<<(b%4<<3);return this._finish(f,e),c=a?this._state:o(this._state),this.reset(),c},q.ArrayBuffer.prototype._finish=q.prototype._finish,q.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._state=[1732584193,-271733879,-1732584194,271733878],this},q.ArrayBuffer.prototype.destroy=q.prototype.destroy,q.ArrayBuffer.prototype._concatArrayBuffer=function(a,b){var c=a.length,d=new Uint8Array(c+b.byteLength);return d.set(a),d.set(new Uint8Array(b),c),d},q.ArrayBuffer.hash=function(a,b){var c=l(new Uint8Array(a));return b?c:o(c)},a.register(\"Md5\",{init:function(){},loadFromBlob:function(a){var b,c,d=a.getSource(),e=2097152,f=Math.ceil(d.size/e),g=0,h=this.owner,i=new q.ArrayBuffer,j=this,k=d.mozSlice||d.webkitSlice||d.slice;c=new FileReader,(b=function(){var l,m;l=g*e,m=Math.min(l+e,d.size),c.onload=function(b){i.append(b.target.result),h.trigger(\"progress\",{total:a.size,loaded:m})},c.onloadend=function(){c.onloadend=c.onload=null,++g<f?setTimeout(b,1):setTimeout(function(){h.trigger(\"load\"),j.result=i.end(),b=a=d=i=null,h.trigger(\"complete\")},50)},c.readAsArrayBuffer(k.call(d,l,m))})()},getResult:function(){return this.result}})}),b(\"runtime/flash/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a;try{a=navigator.plugins[\"Shockwave Flash\"],a=a.description}catch(b){try{a=new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\").GetVariable(\"$version\")}catch(c){a=\"0.0\"}}return a=a.match(/\\d+/g),parseFloat(a[0]+\".\"+a[1],10)}function f(){function d(a,b){var c,d,e=a.type||a;c=e.split(\"::\"),d=c[0],e=c[1],\"Ready\"===e&&d===j.uid?j.trigger(\"ready\"):f[d]&&f[d].trigger(e.toLowerCase(),a,b)}var e={},f={},g=this.destroy,j=this,k=b.guid(\"webuploader_\");c.apply(j,arguments),j.type=h,j.exec=function(a,c){var d,g=this,h=g.uid,k=b.slice(arguments,2);return f[h]=g,i[a]&&(e[h]||(e[h]=new i[a](g,j)),d=e[h],d[c])?d[c].apply(d,k):j.flashExec.apply(g,arguments)},a[k]=function(){var a=arguments;setTimeout(function(){d.apply(null,a)},1)},this.jsreciver=k,this.destroy=function(){return g&&g.apply(this,arguments)},this.flashExec=function(a,c){var d=j.getFlash(),e=b.slice(arguments,2);return d.exec(this.uid,a,c,e)}}var g=b.$,h=\"flash\",i={};return b.inherits(c,{constructor:f,init:function(){var a,c=this.getContainer(),d=this.options;c.css({position:\"absolute\",top:\"-8px\",left:\"-8px\",width:\"9px\",height:\"9px\",overflow:\"hidden\"}),a='<object id=\"'+this.uid+'\" type=\"application/x-shockwave-flash\" data=\"'+d.swf+'\" ',b.browser.ie&&(a+='classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" '),a+='width=\"100%\" height=\"100%\" style=\"outline:0\"><param name=\"movie\" value=\"'+d.swf+'\" /><param name=\"flashvars\" value=\"uid='+this.uid+\"&jsreciver=\"+this.jsreciver+'\" /><param name=\"wmode\" value=\"transparent\" /><param name=\"allowscriptaccess\" value=\"always\" /></object>',c.html(a)},getFlash:function(){return this._flash?this._flash:(this._flash=g(\"#\"+this.uid).get(0),this._flash)}}),f.register=function(a,c){return c=i[a]=b.inherits(d,g.extend({flashExec:function(){var a=this.owner,b=this.getRuntime();return b.flashExec.apply(a,arguments)}},c))},e()>=11.4&&c.addRuntime(h,f),f}),b(\"runtime/flash/filepicker\",[\"base\",\"runtime/flash/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(a){var b,d,e=c.extend({},a);for(b=e.accept&&e.accept.length,d=0;b>d;d++)e.accept[d].title||(e.accept[d].title=\"Files\");delete e.button,delete e.id,delete e.container,this.flashExec(\"FilePicker\",\"init\",e)},destroy:function(){this.flashExec(\"FilePicker\",\"destroy\")}})}),b(\"runtime/flash/image\",[\"runtime/flash/runtime\"],function(a){return a.register(\"Image\",{loadFromBlob:function(a){var b=this.owner;b.info()&&this.flashExec(\"Image\",\"info\",b.info()),b.meta()&&this.flashExec(\"Image\",\"meta\",b.meta()),this.flashExec(\"Image\",\"loadFromBlob\",a.uid)}})}),b(\"runtime/flash/transport\",[\"base\",\"runtime/flash/runtime\",\"runtime/client\"],function(b,c,d){var e=b.$;return c.register(\"Transport\",{init:function(){this._status=0,this._response=null,this._responseJson=null},send:function(){var a,b=this.owner,c=this.options,d=this._initAjax(),f=b._blob,g=c.server;d.connectRuntime(f.ruid),c.sendAsBinary?(g+=(/\\?/.test(g)?\"&\":\"?\")+e.param(b._formData),a=f.uid):(e.each(b._formData,function(a,b){d.exec(\"append\",a,b)}),d.exec(\"appendBlob\",c.fileVal,f.uid,c.filename||b._formData.name||\"\")),this._setRequestHeader(d,c.headers),d.exec(\"send\",{method:c.method,url:g,forceURLStream:c.forceURLStream,mimeType:\"application/octet-stream\"},a)},getStatus:function(){return this._status},getResponse:function(){return this._response||\"\"},getResponseAsJson:function(){return this._responseJson},abort:function(){var a=this._xhr;a&&(a.exec(\"abort\"),a.destroy(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var b=this,c=new d(\"XMLHttpRequest\");return c.on(\"uploadprogress progress\",function(a){var c=a.loaded/a.total;return c=Math.min(1,Math.max(0,c)),b.trigger(\"progress\",c)}),c.on(\"load\",function(){var d,e=c.exec(\"getStatus\"),f=!1,g=\"\";return c.off(),b._xhr=null,e>=200&&300>e?f=!0:e>=500&&600>e?(f=!0,g=\"server\"):g=\"http\",f&&(b._response=c.exec(\"getResponse\"),b._response=decodeURIComponent(b._response),d=a.JSON&&a.JSON.parse||function(a){try{return new Function(\"return \"+a).call()}catch(b){return{}}},b._responseJson=b._response?d(b._response):{}),c.destroy(),c=null,g?b.trigger(\"error\",g):b.trigger(\"load\")}),c.on(\"error\",function(){c.off(),b._xhr=null,b.trigger(\"error\",\"http\")}),b._xhr=c,c},_setRequestHeader:function(a,b){e.each(b,function(b,c){a.exec(\"setRequestHeader\",b,c)})}})}),b(\"runtime/flash/blob\",[\"runtime/flash/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.flashExec(\"Blob\",\"slice\",a,c);return new b(d.uid,d)}})}),b(\"runtime/flash/md5\",[\"runtime/flash/runtime\"],function(a){return a.register(\"Md5\",{init:function(){},loadFromBlob:function(a){return this.flashExec(\"Md5\",\"loadFromBlob\",a.uid)}})}),b(\"preset/all\",[\"base\",\"widgets/filednd\",\"widgets/filepaste\",\"widgets/filepicker\",\"widgets/image\",\"widgets/queue\",\"widgets/runtime\",\"widgets/upload\",\"widgets/validator\",\"widgets/md5\",\"runtime/html5/blob\",\"runtime/html5/dnd\",\"runtime/html5/filepaste\",\"runtime/html5/filepicker\",\"runtime/html5/imagemeta/exif\",\"runtime/html5/androidpatch\",\"runtime/html5/image\",\"runtime/html5/transport\",\"runtime/html5/md5\",\"runtime/flash/filepicker\",\"runtime/flash/image\",\"runtime/flash/transport\",\"runtime/flash/blob\",\"runtime/flash/md5\"],function(a){return a}),b(\"webuploader\",[\"preset/all\"],function(a){return a}),c(\"webuploader\")});"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.withoutimage.js",
    "content": "/*! WebUploader 0.1.5 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n\n            return obj;\n        },\n\n        makeExport = function( dollar ) {\n            root.__dollar = dollar;\n\n            // exports every module.\n            return exportsTo( factory( root, _define, _require ) );\n        },\n\n        origin;\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = makeExport();\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([ 'jquery' ], makeExport );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = makeExport();\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( window, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        var $ = window.__dollar || window.jQuery || window.Zepto;\n    \n        if ( !$ ) {\n            throw new Error('jQuery or Zepto not found!');\n        }\n    \n        return $;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id为该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.5',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match( /(?:trident)(?:.*rv:([\\w.]+))?/i ),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数noop](#WebUploader:Base.noop)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            cancelFile: 'cancel-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            md5File: 'md5-file',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            predictRuntimeType: 'predict-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     compress: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.option( 'compress', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `progressNum` 上传中的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `queueNum` 还在队列中的文件数\n             * * `interruptNum` 被暂停的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return stats ? {\n                    successNum: stats.numOfSuccess,\n                    progressNum: stats.numOfProgress,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue,\n                    interruptNum: stats.numofInterrupt\n                } : {};\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            /**\n             * 销毁 webuploader 实例\n             * @method destroy\n             * @grammar destroy() => undefined\n             */\n            destroy: function() {\n                this.request( 'destroy', arguments );\n                this.off();\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                this._parent = parent;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                this._container && this._container.remove();\n                this._parent && this._parent.removeClass('webuploader-container');\n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            _destroy = Uploader.prototype.destroy,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            /**\n             * @property {String | Array} [disableWidgets=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 默认所有 Uploader.register 了的 widget 都会被加载，如果禁用某一部分，请通过此 option 指定黑名单。\n             */\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [],\n                    deactives = me.options.disableWidgets || '';\n    \n                $.each( widgetClass, function( _, klass ) {\n                    (!deactives || !~deactives.indexOf( klass._name )) &&\n                        widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets && widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个 tick 中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                if ( args.length === 1 ) {\n                                    args = args[ 0 ];\n                                }\n    \n                                setTimeout(function() {\n                                    deferred.resolve( args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ callback ? key : 'done' ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            },\n    \n            destroy: function() {\n                _destroy.apply( this, arguments );\n                this._widgets = null;\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @grammar Uploader.register(proto);\n         * @grammar Uploader.register(map, proto);\n         * @param  {object} responseMap API 名称与函数实现的映射\n         * @param  {object} proto 组件原型，构造函数通过 constructor 属性定义\n         * @method Uploader.register\n         * @for Uploader\n         * @example\n         * Uploader.register({\n         *     'make-thumb': 'makeThumb'\n         * }, {\n         *     init: function( options ) {},\n         *     makeThumb: function() {}\n         * });\n         *\n         * Uploader.register({\n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init', destroy: 'destroy', name: 'anonymous' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n    \n                // 自动生成 map 表。\n                $.each(widgetProto, function(key) {\n                    if ( key[0] === '_' || key === 'name' ) {\n                        key === 'name' && (map.name = widgetProto.name);\n                        return;\n                    }\n    \n                    map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key;\n                });\n    \n            } else {\n                map = $.extend( map, responseMap );\n            }\n    \n            widgetProto.responseMap = map;\n            klass = Base.inherits( Widget, widgetProto );\n            klass._name = map.name;\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        /**\n         * 删除插件，只有在注册时指定了名字的才能被删除。\n         * @grammar Uploader.unRegister(name);\n         * @param  {string} name 组件名字\n         * @method Uploader.unRegister\n         * @for Uploader\n         * @example\n         *\n         * Uploader.register({\n         *     name: 'custom',\n         *     \n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         *\n         * Uploader.unRegister('custom');\n         */\n        Uploader.unRegister = Widget.unRegister = function( name ) {\n            if ( !name || name === 'anonymous' ) {\n                return;\n            }\n            \n            // 删除指定的插件。\n            for ( var i = widgetClass.length; i--; ) {\n                if ( widgetClass[i]._name === name ) {\n                    widgetClass.splice(i, 1)\n                }\n            }\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n        \n        /**\n         * @property {Selector} [disableGlobalDnd=false]  是否禁掉整个页面的拖拽功能，如果不禁用，图片拖进来的时候会默认被浏览器打开。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            name: 'dnd',\n            \n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                this.dnd = dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.dnd && this.dnd.destroy();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            name: 'paste',\n            \n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                this.paste = paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.paste && this.paste.destroy();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n            this.size = source.size || 0;\n    \n            // 如果没有指定 mimetype, 但是知道文件后缀。\n            if ( !source.type && this.ext &&\n                    ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) {\n                this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext);\n            } else {\n                this.type = source.type || 'application/octet-stream';\n            }\n    \n            RuntimeClient.call( me, 'Blob' );\n            this.uid = source.uid || this.uid;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n            // 如果有 mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && file.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n    \n            Blob.apply( this, arguments );\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                this._resizeHandler = Base.bindFn( this.refresh, this );\n                $( window ).on( 'resize', this._resizeHandler );\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                var btn = this.options.button;\n                $( window ).off( 'resize', this._resizeHandler );\n                btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' +\n                    'webuploader-pick');\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            name: 'picker',\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addBtn( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addBtn: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    promises = [];\n    \n                if ( !pick ) {\n                    return;\n                }\n                \n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                $( pick.id ).each(function() {\n                    var options, picker, deferred;\n    \n                    deferred = Base.Deferred();\n    \n                    options = $.extend({}, pick, {\n                        accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                        swf: opts.swf,\n                        runtimeOrder: opts.runtimeOrder,\n                        id: this\n                    });\n    \n                    picker = new FilePicker( options );\n    \n                    picker.once( 'ready', deferred.resolve );\n                    picker.on( 'select', function( files ) {\n                        me.owner.request( 'add-file', [ files ]);\n                    });\n                    picker.init();\n    \n                    me.pickers.push( picker );\n    \n                    promises.push( deferred.promise() );\n                });\n    \n                return Base.when.apply( Base, promises );\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            },\n    \n            destroy: function() {\n                $.each( this.pickers, function() {\n                    this.destroy();\n                });\n                this.pickers = null;\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application/octet-stream'\n             */\n            this.type = source.type || 'application/octet-stream';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destroy: function() {\n                this.off();\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被取消的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * * `numofDeleted` 被移除的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0,\n                numofDeleted: 0,\n                numofInterrupt: 0,\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            /**\n             * 在队列中删除文件。\n             * @grammar removeFile( file ) => Array\n             * @method removeFile\n             * @param {File} 文件对象。\n             */\n            removeFile: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( existing ) {\n                    delete this._map[ file.id ];\n                    file.destroy();\n                    this.stats.numofDeleted++;\n                }\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numofInterrupt++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            name: 'queue',\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                this.placeholder = runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || !file.size || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n            \n            /**\n             * @property {Boolean} [auto=false]\n             * @namespace options\n             * @for Uploader\n             * @description 设置为 true 后，不需要手动调用上传，有文件选择即开始上传。\n             * \n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFile: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    setTimeout(function() {\n                        me.request('start-upload');\n                    }, 20 );\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n             /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @grammar removeFile( file, true ) => undefined\n             * @grammar removeFile( id, true ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件, 默认只会标记文件状态为已取消，如果第二个参数为 `true` 则会从 queue 中移除。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file, remove ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                this.request( 'cancel-file', file );\n    \n                if ( remove ) {\n                    this.queue.removeFile( file );\n                }\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @event reset\n             * @description 当 uploader 被重置的时候触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.owner.trigger('reset');\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            },\n    \n            destroy: function() {\n                this.reset();\n                this.placeholder && this.placeholder.destroy();\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            name: 'runtime',\n    \n            init: function() {\n                if ( !this.predictRuntimeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntimeType() => String\n             * @method predictRuntimeType\n             * @for  Uploader\n             */\n            predictRuntimeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData={}]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: {}\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len, api;\n    \n            api = {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                shift: function() {\n                    return pending.shift();\n                },\n    \n                unshift: function( block ) {\n                    pending.unshift( block );\n                }\n            };\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++,\n                    cuted: api\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return api;\n        }\n    \n        Uploader.register({\n            name: 'upload',\n    \n            init: function() {\n                var owner = this.owner,\n                    me = this;\n    \n                this.runing = false;\n                this.progress = false;\n    \n                owner\n                    .on( 'startUpload', function() {\n                        me.progress = true;\n                    })\n                    .on( 'uploadFinished', function() {\n                        me.progress = false;\n                    });\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存分好片的文件。\n                this.stack = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片在上传中但是没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    \n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            reset: function() {\n                this.request( 'stop-upload', true );\n                this.runing = false;\n                this.pool = [];\n                this.stack = [];\n                this.pending = [];\n                this.remaning = 0;\n                this._trigged = false;\n                this._promise = null;\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             *\n             * 可以指定开始某一个文件。\n             * @grammar upload() => undefined\n             * @grammar upload( file | fileId) => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            startUpload: function(file) {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                // 如果指定了开始某个文件，则只开始指定文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if (file.getStatus() === Status.INTERRUPT) {\n                        $.each( me.pool, function( _, v ) {\n                        \n                            // 之前暂停过。\n                            if (v.file !== file) {\n                                return;\n                            }\n    \n                            v.transport && v.transport.send();\n                        });\n                        \n                        file.setStatus( Status.QUEUED );\n                    } else if (file.getStatus() === Status.PROGRESS) {\n                        return;\n                    } else {\n                        file.setStatus( Status.QUEUED );\n                    }\n                } else {\n                    $.each( me.request( 'get-files', [ Status.INITED ] ), function() {\n                        this.setStatus( Status.QUEUED );\n                    });\n                }\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                file || $.each( me.request( 'get-files',\n                        Status.INTERRUPT ), function() {\n                    this.setStatus( Status.PROGRESS );\n                });\n    \n                me._trigged = false;\n                Base.nextTick( me.__tick );\n                me.owner.trigger('startUpload');\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             *\n             * 如果第一个参数是文件，则只暂停指定文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @grammar stop( file ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stopUpload: function( file, interrupt ) {\n                var me = this;\n    \n                if (file === true) {\n                    interrupt = file;\n                    file = null;\n                }\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                // 如果只是暂停某个文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if ( file.getStatus() !== Status.PROGRESS &&\n                            file.getStatus() !== Status.QUEUED ) {\n                        return;\n                    }\n    \n                    file.setStatus( Status.INTERRUPT );\n                    $.each( me.pool, function( _, v ) {\n                        \n                        // 只 abort 指定的文件。\n                        if (v.file !== file) {\n                            return;\n                        }\n    \n                        v.transport && v.transport.abort();\n                        me._putback(v);\n                        me._popBlock(v);\n                    });\n    \n                    return Base.nextTick( me.__tick );\n                }\n    \n                me.runing = false;\n    \n                if (this._promise && this._promise.file) {\n                    this._promise.file.setStatus( Status.INTERRUPT );\n                }\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * @method cancelFile\n             * @grammar cancelFile( file ) => undefined\n             * @grammar cancelFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 标记文件状态为已取消, 同时将中断文件传输。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.cancelFile( file );\n             * })\n             */\n            cancelFile: function( file ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                file.setStatus( Status.CANCELLED );\n                this.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.progress;\n            },\n    \n            _getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me._getStats().numOfQueue &&\n                    !me._getStats().numofInterrupt ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _putback: function(block) {\n                var idx;\n    \n                block.cuted.unshift(block);\n                idx = this.stack.indexOf(block.cuted);\n    \n                if (!~idx) {\n                    this.stack.unshift(block.cuted);\n                }\n            },\n    \n            _getStack: function() {\n                var i = 0,\n                    act;\n    \n                while ( (act = this.stack[ i++ ]) ) {\n                    if ( act.has() && act.file.getStatus() === Status.PROGRESS ) {\n                        return act;\n                    } else if (!act.has() ||\n                            act.file.getStatus() !== Status.PROGRESS &&\n                            act.file.getStatus() !== Status.INTERRUPT ) {\n    \n                        // 把已经处理完了的，或者，状态为非 progress（上传中）、\n                        // interupt（暂停中） 的移除。\n                        this.stack.splice( --i, 1 );\n                    }\n                }\n    \n                return null;\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    opts = me.options,\n                    act, next, done, preparing;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( (act = this._getStack()) ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.shift();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me._getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n                            \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me.stack.push(act);\n                        return act.shift();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    if ( isPromise( next) ) {\n                        preparing = next.file;\n                        next = next[ next.pipe ? 'pipe' : 'then' ]( done );\n                        next.file = preparing;\n                        return next;\n                    }\n    \n                    return done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.PROGRESS || \n                            file.getStatus() === Status.INTERRUPT ) {\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    me.owner.trigger( 'uploadStart', file );\n                    file.setStatus( Status.PROGRESS );\n    \n                    promise.file = file;\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                // 有可能在 before-send-file 的 promise 期间改变了文件状态。\n                // 如：暂停，取消\n                // 我们不能中断 promise, 但是可以在 promise 完后，不做上传操作。\n                if ( file.getStatus() !== Status.PROGRESS ) {\n                    \n                    // 如果是中断，则还需要放回去。\n                    if (file.getStatus() === Status.INTERRUPT) {\n                        me._putback(block);\n                    }\n    \n                    return;\n                }\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @param {Object} headers 可以扩展此对象来控制上传头部。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            name: 'validator',\n    \n            init: function() {\n                var me = this;\n                Base.nextTick(function() {\n                    $.each( validators, function() {\n                        this.call( me.owner );\n                    });\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileNumLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileSizeLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', max, file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {Boolean} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n    \n            uploader.on( 'reset', function() {\n                mapping = {};\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destroy = this.destroy;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\r\n     * @fileOverview FilePaste\r\n     */\r\n    define('runtime/html5/dnd',[\r\n        'base',\r\n        'runtime/html5/runtime',\r\n        'lib/file'\r\n    ], function( Base, Html5Runtime, File ) {\r\n    \r\n        var $ = Base.$,\r\n            prefix = 'webuploader-dnd-';\r\n    \r\n        return Html5Runtime.register( 'DragAndDrop', {\r\n            init: function() {\r\n                var elem = this.elem = this.options.container;\r\n    \r\n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\r\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\r\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\r\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\r\n                this.dndOver = false;\r\n    \r\n                elem.on( 'dragenter', this.dragEnterHandler );\r\n                elem.on( 'dragover', this.dragOverHandler );\r\n                elem.on( 'dragleave', this.dragLeaveHandler );\r\n                elem.on( 'drop', this.dropHandler );\r\n    \r\n                if ( this.options.disableGlobalDnd ) {\r\n                    $( document ).on( 'dragover', this.dragOverHandler );\r\n                    $( document ).on( 'drop', this.dropHandler );\r\n                }\r\n            },\r\n    \r\n            _dragEnterHandler: function( e ) {\r\n                var me = this,\r\n                    denied = me._denied || false,\r\n                    items;\r\n    \r\n                e = e.originalEvent || e;\r\n    \r\n                if ( !me.dndOver ) {\r\n                    me.dndOver = true;\r\n    \r\n                    // 注意只有 chrome 支持。\r\n                    items = e.dataTransfer.items;\r\n    \r\n                    if ( items && items.length ) {\r\n                        me._denied = denied = !me.trigger( 'accept', items );\r\n                    }\r\n    \r\n                    me.elem.addClass( prefix + 'over' );\r\n                    me.elem[ denied ? 'addClass' :\r\n                            'removeClass' ]( prefix + 'denied' );\r\n                }\r\n    \r\n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\r\n    \r\n                return false;\r\n            },\r\n    \r\n            _dragOverHandler: function( e ) {\r\n                // 只处理框内的。\r\n                var parentElem = this.elem.parent().get( 0 );\r\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\r\n                    return false;\r\n                }\r\n    \r\n                clearTimeout( this._leaveTimer );\r\n                this._dragEnterHandler.call( this, e );\r\n    \r\n                return false;\r\n            },\r\n    \r\n            _dragLeaveHandler: function() {\r\n                var me = this,\r\n                    handler;\r\n    \r\n                handler = function() {\r\n                    me.dndOver = false;\r\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\r\n                };\r\n    \r\n                clearTimeout( me._leaveTimer );\r\n                me._leaveTimer = setTimeout( handler, 100 );\r\n                return false;\r\n            },\r\n    \r\n            _dropHandler: function( e ) {\r\n                var me = this,\r\n                    ruid = me.getRuid(),\r\n                    parentElem = me.elem.parent().get( 0 ),\r\n                    dataTransfer, data;\r\n    \r\n                // 只处理框内的。\r\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\r\n                    return false;\r\n                }\r\n    \r\n                e = e.originalEvent || e;\r\n                dataTransfer = e.dataTransfer;\r\n    \r\n                // 如果是页面内拖拽，还不能处理，不阻止事件。\r\n                // 此处 ie11 下会报参数错误，\r\n                try {\r\n                    data = dataTransfer.getData('text/html');\r\n                } catch( err ) {\r\n                }\r\n    \r\n                if ( data ) {\r\n                    return;\r\n                }\r\n    \r\n                me._getTansferFiles( dataTransfer, function( results ) {\r\n                    me.trigger( 'drop', $.map( results, function( file ) {\r\n                        return new File( ruid, file );\r\n                    }) );\r\n                });\r\n    \r\n                me.dndOver = false;\r\n                me.elem.removeClass( prefix + 'over' );\r\n                return false;\r\n            },\r\n    \r\n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\r\n            _getTansferFiles: function( dataTransfer, callback ) {\r\n                var results  = [],\r\n                    promises = [],\r\n                    items, files, file, item, i, len, canAccessFolder;\r\n    \r\n                items = dataTransfer.items;\r\n                files = dataTransfer.files;\r\n    \r\n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\r\n    \r\n                for ( i = 0, len = files.length; i < len; i++ ) {\r\n                    file = files[ i ];\r\n                    item = items && items[ i ];\r\n    \r\n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\r\n    \r\n                        promises.push( this._traverseDirectoryTree(\r\n                                item.webkitGetAsEntry(), results ) );\r\n                    } else {\r\n                        results.push( file );\r\n                    }\r\n                }\r\n    \r\n                Base.when.apply( Base, promises ).done(function() {\r\n    \r\n                    if ( !results.length ) {\r\n                        return;\r\n                    }\r\n    \r\n                    callback( results );\r\n                });\r\n            },\r\n    \r\n            _traverseDirectoryTree: function( entry, results ) {\r\n                var deferred = Base.Deferred(),\r\n                    me = this;\r\n    \r\n                if ( entry.isFile ) {\r\n                    entry.file(function( file ) {\r\n                        results.push( file );\r\n                        deferred.resolve();\r\n                    });\r\n                } else if ( entry.isDirectory ) {\r\n                    entry.createReader().readEntries(function( entries ) {\r\n                        var len = entries.length,\r\n                            promises = [],\r\n                            arr = [],    // 为了保证顺序。\r\n                            i;\r\n    \r\n                        for ( i = 0; i < len; i++ ) {\r\n                            promises.push( me._traverseDirectoryTree(\r\n                                    entries[ i ], arr ) );\r\n                        }\r\n    \r\n                        Base.when.apply( Base, promises ).then(function() {\r\n                            results.push.apply( results, arr );\r\n                            deferred.resolve();\r\n                        }, deferred.reject );\r\n                    });\r\n                }\r\n    \r\n                return deferred.promise();\r\n            },\r\n    \r\n            destroy: function() {\r\n                var elem = this.elem;\r\n    \r\n                // 还没 init 就调用 destroy\r\n                if (!elem) {\r\n                    return;\r\n                }\r\n                \r\n                elem.off( 'dragenter', this.dragEnterHandler );\r\n                elem.off( 'dragover', this.dragOverHandler );\r\n                elem.off( 'dragleave', this.dragLeaveHandler );\r\n                elem.off( 'drop', this.dropHandler );\r\n    \r\n                if ( this.options.disableGlobalDnd ) {\r\n                    $( document ).off( 'dragover', this.dragOverHandler );\r\n                    $( document ).off( 'drop', this.dropHandler );\r\n                }\r\n            }\r\n        });\r\n    });\r\n    \n    /**\r\n     * @fileOverview FilePaste\r\n     */\r\n    define('runtime/html5/filepaste',[\r\n        'base',\r\n        'runtime/html5/runtime',\r\n        'lib/file'\r\n    ], function( Base, Html5Runtime, File ) {\r\n    \r\n        return Html5Runtime.register( 'FilePaste', {\r\n            init: function() {\r\n                var opts = this.options,\r\n                    elem = this.elem = opts.container,\r\n                    accept = '.*',\r\n                    arr, i, len, item;\r\n    \r\n                // accetp的mimeTypes中生成匹配正则。\r\n                if ( opts.accept ) {\r\n                    arr = [];\r\n    \r\n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\r\n                        item = opts.accept[ i ].mimeTypes;\r\n                        item && arr.push( item );\r\n                    }\r\n    \r\n                    if ( arr.length ) {\r\n                        accept = arr.join(',');\r\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\r\n                    }\r\n                }\r\n                this.accept = accept = new RegExp( accept, 'i' );\r\n                this.hander = Base.bindFn( this._pasteHander, this );\r\n                elem.on( 'paste', this.hander );\r\n            },\r\n    \r\n            _pasteHander: function( e ) {\r\n                var allowed = [],\r\n                    ruid = this.getRuid(),\r\n                    items, item, blob, i, len;\r\n    \r\n                e = e.originalEvent || e;\r\n                items = e.clipboardData.items;\r\n    \r\n                for ( i = 0, len = items.length; i < len; i++ ) {\r\n                    item = items[ i ];\r\n    \r\n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\r\n                        continue;\r\n                    }\r\n    \r\n                    allowed.push( new File( ruid, blob ) );\r\n                }\r\n    \r\n                if ( allowed.length ) {\r\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\r\n                    e.preventDefault();\r\n                    e.stopPropagation();\r\n                    this.trigger( 'paste', allowed );\r\n                }\r\n            },\r\n    \r\n            destroy: function() {\r\n                this.elem.off( 'paste', this.hander );\r\n            }\r\n        });\r\n    });\r\n    \n    /**\r\n     * @fileOverview FilePicker\r\n     */\r\n    define('runtime/html5/filepicker',[\r\n        'base',\r\n        'runtime/html5/runtime'\r\n    ], function( Base, Html5Runtime ) {\r\n    \r\n        var $ = Base.$;\r\n    \r\n        return Html5Runtime.register( 'FilePicker', {\r\n            init: function() {\r\n                var container = this.getRuntime().getContainer(),\r\n                    me = this,\r\n                    owner = me.owner,\r\n                    opts = me.options,\r\n                    label = this.label = $( document.createElement('label') ),\r\n                    input =  this.input = $( document.createElement('input') ),\r\n                    arr, i, len, mouseHandler;\r\n    \r\n                input.attr( 'type', 'file' );\r\n                input.attr( 'name', opts.name );\r\n                input.addClass('webuploader-element-invisible');\r\n    \r\n                label.on( 'click', function() {\r\n                    input.trigger('click');\r\n                });\r\n    \r\n                label.css({\r\n                    opacity: 0,\r\n                    width: '100%',\r\n                    height: '100%',\r\n                    display: 'block',\r\n                    cursor: 'pointer',\r\n                    background: '#ffffff'\r\n                });\r\n    \r\n                if ( opts.multiple ) {\r\n                    input.attr( 'multiple', 'multiple' );\r\n                }\r\n    \r\n                // @todo Firefox不支持单独指定后缀\r\n                if ( opts.accept && opts.accept.length > 0 ) {\r\n                    arr = [];\r\n    \r\n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\r\n                        arr.push( opts.accept[ i ].mimeTypes );\r\n                    }\r\n    \r\n                    input.attr( 'accept', arr.join(',') );\r\n                }\r\n    \r\n                container.append( input );\r\n                container.append( label );\r\n    \r\n                mouseHandler = function( e ) {\r\n                    owner.trigger( e.type );\r\n                };\r\n    \r\n                input.on( 'change', function( e ) {\r\n                    var fn = arguments.callee,\r\n                        clone;\r\n    \r\n                    me.files = e.target.files;\r\n    \r\n                    // reset input\r\n                    clone = this.cloneNode( true );\r\n                    clone.value = null;\r\n                    this.parentNode.replaceChild( clone, this );\r\n    \r\n                    input.off();\r\n                    input = $( clone ).on( 'change', fn )\r\n                            .on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n                    owner.trigger('change');\r\n                });\r\n    \r\n                label.on( 'mouseenter mouseleave', mouseHandler );\r\n    \r\n            },\r\n    \r\n    \r\n            getFiles: function() {\r\n                return this.files;\r\n            },\r\n    \r\n            destroy: function() {\r\n                this.input.off();\r\n                this.label.off();\r\n            }\r\n        });\r\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    // 强制设置成 content-type 为文件流。\n                    xhr.overrideMimeType &&\n                            xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    /**\n     * @fileOverview FlashRuntime\n     */\n    define('runtime/flash/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var $ = Base.$,\n            type = 'flash',\n            components = {};\n    \n    \n        function getFlashVersion() {\n            var version;\n    \n            try {\n                version = navigator.plugins[ 'Shockwave Flash' ];\n                version = version.description;\n            } catch ( ex ) {\n                try {\n                    version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                            .GetVariable('$version');\n                } catch ( ex2 ) {\n                    version = '0.0';\n                }\n            }\n            version = version.match( /\\d+/g );\n            return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );\n        }\n    \n        function FlashRuntime() {\n            var pool = {},\n                clients = {},\n                destroy = this.destroy,\n                me = this,\n                jsreciver = Base.guid('webuploader_');\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/ ) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                clients[ uid ] = client;\n    \n                if ( components[ comp ] ) {\n                    if ( !pool[ uid ] ) {\n                        pool[ uid ] = new components[ comp ]( client, me );\n                    }\n    \n                    instance = pool[ uid ];\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n    \n                return me.flashExec.apply( client, arguments );\n            };\n    \n            function handler( evt, obj ) {\n                var type = evt.type || evt,\n                    parts, uid;\n    \n                parts = type.split('::');\n                uid = parts[ 0 ];\n                type = parts[ 1 ];\n    \n                // console.log.apply( console, arguments );\n    \n                if ( type === 'Ready' && uid === me.uid ) {\n                    me.trigger('ready');\n                } else if ( clients[ uid ] ) {\n                    clients[ uid ].trigger( type.toLowerCase(), evt, obj );\n                }\n    \n                // Base.log( evt, obj );\n            }\n    \n            // flash的接受器。\n            window[ jsreciver ] = function() {\n                var args = arguments;\n    \n                // 为了能捕获得到。\n                setTimeout(function() {\n                    handler.apply( null, args );\n                }, 1 );\n            };\n    \n            this.jsreciver = jsreciver;\n    \n            this.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n    \n            this.flashExec = function( comp, fn ) {\n                var flash = me.getFlash(),\n                    args = Base.slice( arguments, 2 );\n    \n                return flash.exec( this.uid, comp, fn, args );\n            };\n    \n            // @todo\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: FlashRuntime,\n    \n            init: function() {\n                var container = this.getContainer(),\n                    opts = this.options,\n                    html;\n    \n                // if not the minimal height, shims are not initialized\n                // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc)\n                container.css({\n                    position: 'absolute',\n                    top: '-8px',\n                    left: '-8px',\n                    width: '9px',\n                    height: '9px',\n                    overflow: 'hidden'\n                });\n    \n                // insert flash object\n                html = '<object id=\"' + this.uid + '\" type=\"application/' +\n                        'x-shockwave-flash\" data=\"' +  opts.swf + '\" ';\n    \n                if ( Base.browser.ie ) {\n                    html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                }\n    \n                html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">'  +\n                    '<param name=\"movie\" value=\"' + opts.swf + '\" />' +\n                    '<param name=\"flashvars\" value=\"uid=' + this.uid +\n                    '&jsreciver=' + this.jsreciver + '\" />' +\n                    '<param name=\"wmode\" value=\"transparent\" />' +\n                    '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                '</object>';\n    \n                container.html( html );\n            },\n    \n            getFlash: function() {\n                if ( this._flash ) {\n                    return this._flash;\n                }\n    \n                this._flash = $( '#' + this.uid ).get( 0 );\n                return this._flash;\n            }\n    \n        });\n    \n        FlashRuntime.register = function( name, component ) {\n            component = components[ name ] = Base.inherits( CompBase, $.extend({\n    \n                // @todo fix this later\n                flashExec: function() {\n                    var owner = this.owner,\n                        runtime = this.getRuntime();\n    \n                    return runtime.flashExec.apply( owner, arguments );\n                }\n            }, component ) );\n    \n            return component;\n        };\n    \n        if ( getFlashVersion() >= 11.4 ) {\n            Runtime.addRuntime( type, FlashRuntime );\n        }\n    \n        return FlashRuntime;\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/flash/filepicker',[\n        'base',\n        'runtime/flash/runtime'\n    ], function( Base, FlashRuntime ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'FilePicker', {\n            init: function( opts ) {\n                var copy = $.extend({}, opts ),\n                    len, i;\n    \n                // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug.\n                len = copy.accept && copy.accept.length;\n                for (  i = 0; i < len; i++ ) {\n                    if ( !copy.accept[ i ].title ) {\n                        copy.accept[ i ].title = 'Files';\n                    }\n                }\n    \n                delete copy.button;\n                delete copy.id;\n                delete copy.container;\n    \n                this.flashExec( 'FilePicker', 'init', copy );\n            },\n    \n            destroy: function() {\n                this.flashExec( 'FilePicker', 'destroy' );\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/flash/transport',[\n        'base',\n        'runtime/flash/runtime',\n        'runtime/client'\n    ], function( Base, FlashRuntime, RuntimeClient ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n                this._responseJson = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    binary;\n    \n                xhr.connectRuntime( blob.ruid );\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.uid;\n                } else {\n                    $.each( owner._formData, function( k, v ) {\n                        xhr.exec( 'append', k, v );\n                    });\n    \n                    xhr.exec( 'appendBlob', opts.fileVal, blob.uid,\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n                xhr.exec( 'send', {\n                    method: opts.method,\n                    url: server,\n                    forceURLStream: opts.forceURLStream,\n                    mimeType: 'application/octet-stream'\n                }, binary );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            getResponse: function() {\n                return this._response || '';\n            },\n    \n            getResponseAsJson: function() {\n                return this._responseJson;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.exec('abort');\n                    xhr.destroy();\n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new RuntimeClient('XMLHttpRequest');\n    \n                xhr.on( 'uploadprogress progress', function( e ) {\n                    var percent = e.loaded / e.total;\n                    percent = Math.min( 1, Math.max( 0, percent ) );\n                    return me.trigger( 'progress', percent );\n                });\n    \n                xhr.on( 'load', function() {\n                    var status = xhr.exec('getStatus'),\n                        readBody = false,\n                        err = '',\n                        p;\n    \n                    xhr.off();\n                    me._xhr = null;\n    \n                    if ( status >= 200 && status < 300 ) {\n                        readBody = true;\n                    } else if ( status >= 500 && status < 600 ) {\n                        readBody = true;\n                        err = 'server';\n                    } else {\n                        err = 'http';\n                    }\n    \n                    if ( readBody ) {\n                        me._response = xhr.exec('getResponse');\n                        me._response = decodeURIComponent( me._response );\n    \n                        // flash 处理可能存在 bug, 没辙只能靠 js 了\n                        // try {\n                        //     me._responseJson = xhr.exec('getResponseAsJson');\n                        // } catch ( error ) {\n                            \n                        p = window.JSON && window.JSON.parse || function( s ) {\n                            try {\n                                return new Function('return ' + s).call();\n                            } catch ( err ) {\n                                return {};\n                            }\n                        };\n                        me._responseJson  = me._response ? p(me._response) : {};\n                            \n                        // }\n                    }\n                    \n                    xhr.destroy();\n                    xhr = null;\n    \n                    return err ? me.trigger( 'error', err ) : me.trigger('load');\n                });\n    \n                xhr.on( 'error', function() {\n                    xhr.off();\n                    me._xhr = null;\n                    me.trigger( 'error', 'http' );\n                });\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.exec( 'setRequestHeader', key, val );\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview 没有图像处理的版本。\n     */\n    define('preset/withoutimage',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/transport',\n    \n        // flash\n        'runtime/flash/filepicker',\n        'runtime/flash/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/withoutimage'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "src/main/resources/static/assets/vendor/webuploader-0.1.5/webuploader.withoutimage.min.js",
    "content": "/* WebUploader 0.1.5 */!function(a,b){var c,d={},e=function(a,b){var c,d,e;if(\"string\"==typeof a)return h(a);for(c=[],d=a.length,e=0;d>e;e++)c.push(h(a[e]));return b.apply(null,c)},f=function(a,b,c){2===arguments.length&&(c=b,b=null),e(b||[],function(){g(a,c,arguments)})},g=function(a,b,c){var f,g={exports:b};\"function\"==typeof b&&(c.length||(c=[e,g.exports,g]),f=b.apply(null,c),void 0!==f&&(g.exports=f)),d[a]=g.exports},h=function(b){var c=d[b]||a[b];if(!c)throw new Error(\"`\"+b+\"` is undefined\");return c},i=function(a){var b,c,e,f,g,h;h=function(a){return a&&a.charAt(0).toUpperCase()+a.substr(1)};for(b in d)if(c=a,d.hasOwnProperty(b)){for(e=b.split(\"/\"),g=h(e.pop());f=h(e.shift());)c[f]=c[f]||{},c=c[f];c[g]=d[b]}return a},j=function(c){return a.__dollar=c,i(b(a,f,e))};\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=j():\"function\"==typeof define&&define.amd?define([\"jquery\"],j):(c=a.WebUploader,a.WebUploader=j(),a.WebUploader.noConflict=function(){a.WebUploader=c})}(window,function(a,b,c){return b(\"dollar-third\",[],function(){var b=a.__dollar||a.jQuery||a.Zepto;if(!b)throw new Error(\"jQuery or Zepto not found!\");return b}),b(\"dollar\",[\"dollar-third\"],function(a){return a}),b(\"promise-third\",[\"dollar\"],function(a){return{Deferred:a.Deferred,when:a.when,isPromise:function(a){return a&&\"function\"==typeof a.then}}}),b(\"promise\",[\"promise-third\"],function(a){return a}),b(\"base\",[\"dollar\",\"promise\"],function(b,c){function d(a){return function(){return h.apply(a,arguments)}}function e(a,b){return function(){return a.apply(b,arguments)}}function f(a){var b;return Object.create?Object.create(a):(b=function(){},b.prototype=a,new b)}var g=function(){},h=Function.call;return{version:\"0.1.5\",$:b,Deferred:c.Deferred,isPromise:c.isPromise,when:c.when,browser:function(a){var b={},c=a.match(/WebKit\\/([\\d.]+)/),d=a.match(/Chrome\\/([\\d.]+)/)||a.match(/CriOS\\/([\\d.]+)/),e=a.match(/MSIE\\s([\\d\\.]+)/)||a.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),f=a.match(/Firefox\\/([\\d.]+)/),g=a.match(/Safari\\/([\\d.]+)/),h=a.match(/OPR\\/([\\d.]+)/);return c&&(b.webkit=parseFloat(c[1])),d&&(b.chrome=parseFloat(d[1])),e&&(b.ie=parseFloat(e[1])),f&&(b.firefox=parseFloat(f[1])),g&&(b.safari=parseFloat(g[1])),h&&(b.opera=parseFloat(h[1])),b}(navigator.userAgent),os:function(a){var b={},c=a.match(/(?:Android);?[\\s\\/]+([\\d.]+)?/),d=a.match(/(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/);return c&&(b.android=parseFloat(c[1])),d&&(b.ios=parseFloat(d[1].replace(/_/g,\".\"))),b}(navigator.userAgent),inherits:function(a,c,d){var e;return\"function\"==typeof c?(e=c,c=null):e=c&&c.hasOwnProperty(\"constructor\")?c.constructor:function(){return a.apply(this,arguments)},b.extend(!0,e,a,d||{}),e.__super__=a.prototype,e.prototype=f(a.prototype),c&&b.extend(!0,e.prototype,c),e},noop:g,bindFn:e,log:function(){return a.console?e(console.log,console):g}(),nextTick:function(){return function(a){setTimeout(a,1)}}(),slice:d([].slice),guid:function(){var a=0;return function(b){for(var c=(+new Date).toString(32),d=0;5>d;d++)c+=Math.floor(65535*Math.random()).toString(32);return(b||\"wu_\")+c+(a++).toString(32)}}(),formatSize:function(a,b,c){var d;for(c=c||[\"B\",\"K\",\"M\",\"G\",\"TB\"];(d=c.shift())&&a>1024;)a/=1024;return(\"B\"===d?a:a.toFixed(b||2))+d}}}),b(\"mediator\",[\"base\"],function(a){function b(a,b,c,d){return f.grep(a,function(a){return!(!a||b&&a.e!==b||c&&a.cb!==c&&a.cb._cb!==c||d&&a.ctx!==d)})}function c(a,b,c){f.each((a||\"\").split(h),function(a,d){c(d,b)})}function d(a,b){for(var c,d=!1,e=-1,f=a.length;++e<f;)if(c=a[e],c.cb.apply(c.ctx2,b)===!1){d=!0;break}return!d}var e,f=a.$,g=[].slice,h=/\\s+/;return e={on:function(a,b,d){var e,f=this;return b?(e=this._events||(this._events=[]),c(a,b,function(a,b){var c={e:a};c.cb=b,c.ctx=d,c.ctx2=d||f,c.id=e.length,e.push(c)}),this):this},once:function(a,b,d){var e=this;return b?(c(a,b,function(a,b){var c=function(){return e.off(a,c),b.apply(d||e,arguments)};c._cb=b,e.on(a,c,d)}),e):e},off:function(a,d,e){var g=this._events;return g?a||d||e?(c(a,d,function(a,c){f.each(b(g,a,c,e),function(){delete g[this.id]})}),this):(this._events=[],this):this},trigger:function(a){var c,e,f;return this._events&&a?(c=g.call(arguments,1),e=b(this._events,a),f=b(this._events,\"all\"),d(e,c)&&d(f,arguments)):this}},f.extend({installTo:function(a){return f.extend(a,e)}},e)}),b(\"uploader\",[\"base\",\"mediator\"],function(a,b){function c(a){this.options=d.extend(!0,{},c.options,a),this._init(this.options)}var d=a.$;return c.options={},b.installTo(c.prototype),d.each({upload:\"start-upload\",stop:\"stop-upload\",getFile:\"get-file\",getFiles:\"get-files\",addFile:\"add-file\",addFiles:\"add-file\",sort:\"sort-files\",removeFile:\"remove-file\",cancelFile:\"cancel-file\",skipFile:\"skip-file\",retry:\"retry\",isInProgress:\"is-in-progress\",makeThumb:\"make-thumb\",md5File:\"md5-file\",getDimension:\"get-dimension\",addButton:\"add-btn\",predictRuntimeType:\"predict-runtime-type\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\",reset:\"reset\"},function(a,b){c.prototype[a]=function(){return this.request(b,arguments)}}),d.extend(c.prototype,{state:\"pending\",_init:function(a){var b=this;b.request(\"init\",a,function(){b.state=\"ready\",b.trigger(\"ready\")})},option:function(a,b){var c=this.options;return arguments.length>1?void(d.isPlainObject(b)&&d.isPlainObject(c[a])?d.extend(c[a],b):c[a]=b):a?c[a]:c},getStats:function(){var a=this.request(\"get-stats\");return a?{successNum:a.numOfSuccess,progressNum:a.numOfProgress,cancelNum:a.numOfCancel,invalidNum:a.numOfInvalid,uploadFailNum:a.numOfUploadFailed,queueNum:a.numOfQueue,interruptNum:a.numofInterrupt}:{}},trigger:function(a){var c=[].slice.call(arguments,1),e=this.options,f=\"on\"+a.substring(0,1).toUpperCase()+a.substring(1);return b.trigger.apply(this,arguments)===!1||d.isFunction(e[f])&&e[f].apply(this,c)===!1||d.isFunction(this[f])&&this[f].apply(this,c)===!1||b.trigger.apply(b,[this,a].concat(c))===!1?!1:!0},destroy:function(){this.request(\"destroy\",arguments),this.off()},request:a.noop}),a.create=c.create=function(a){return new c(a)},a.Uploader=c,c}),b(\"runtime/runtime\",[\"base\",\"mediator\"],function(a,b){function c(b){this.options=d.extend({container:document.body},b),this.uid=a.guid(\"rt_\")}var d=a.$,e={},f=function(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null};return d.extend(c.prototype,{getContainer:function(){var a,b,c=this.options;return this._container?this._container:(a=d(c.container||document.body),b=d(document.createElement(\"div\")),b.attr(\"id\",\"rt_\"+this.uid),b.css({position:\"absolute\",top:\"0px\",left:\"0px\",width:\"1px\",height:\"1px\",overflow:\"hidden\"}),a.append(b),a.addClass(\"webuploader-container\"),this._container=b,this._parent=a,b)},init:a.noop,exec:a.noop,destroy:function(){this._container&&this._container.remove(),this._parent&&this._parent.removeClass(\"webuploader-container\"),this.off()}}),c.orders=\"html5,flash\",c.addRuntime=function(a,b){e[a]=b},c.hasRuntime=function(a){return!!(a?e[a]:f(e))},c.create=function(a,b){var g,h;if(b=b||c.orders,d.each(b.split(/\\s*,\\s*/g),function(){return e[this]?(g=this,!1):void 0}),g=g||f(e),!g)throw new Error(\"Runtime Error\");return h=new e[g](a)},b.installTo(c.prototype),c}),b(\"runtime/client\",[\"base\",\"mediator\",\"runtime/runtime\"],function(a,b,c){function d(b,d){var f,g=a.Deferred();this.uid=a.guid(\"client_\"),this.runtimeReady=function(a){return g.done(a)},this.connectRuntime=function(b,h){if(f)throw new Error(\"already connected!\");return g.done(h),\"string\"==typeof b&&e.get(b)&&(f=e.get(b)),f=f||e.get(null,d),f?(a.$.extend(f.options,b),f.__promise.then(g.resolve),f.__client++):(f=c.create(b,b.runtimeOrder),f.__promise=g.promise(),f.once(\"ready\",g.resolve),f.init(),e.add(f),f.__client=1),d&&(f.__standalone=d),f},this.getRuntime=function(){return f},this.disconnectRuntime=function(){f&&(f.__client--,f.__client<=0&&(e.remove(f),delete f.__promise,f.destroy()),f=null)},this.exec=function(){if(f){var c=a.slice(arguments);return b&&c.unshift(b),f.exec.apply(this,c)}},this.getRuid=function(){return f&&f.uid},this.destroy=function(a){return function(){a&&a.apply(this,arguments),this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()}}(this.destroy)}var e;return e=function(){var a={};return{add:function(b){a[b.uid]=b},get:function(b,c){var d;if(b)return a[b];for(d in a)if(!c||!a[d].__standalone)return a[d];return null},remove:function(b){delete a[b.uid]}}}(),b.installTo(d.prototype),d}),b(\"lib/dnd\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},d.options,a),a.container=e(a.container),a.container.length&&c.call(this,\"DragAndDrop\")}var e=a.$;return d.options={accept:null,disableGlobalDnd:!1},a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/widget\",[\"base\",\"uploader\"],function(a,b){function c(a){if(!a)return!1;var b=a.length,c=e.type(a);return 1===a.nodeType&&b?!0:\"array\"===c||\"function\"!==c&&\"string\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a)}function d(a){this.owner=a,this.options=a.options}var e=a.$,f=b.prototype._init,g=b.prototype.destroy,h={},i=[];return e.extend(d.prototype,{init:a.noop,invoke:function(a,b){var c=this.responseMap;return c&&a in c&&c[a]in this&&e.isFunction(this[c[a]])?this[c[a]].apply(this,b):h},request:function(){return this.owner.request.apply(this.owner,arguments)}}),e.extend(b.prototype,{_init:function(){var a=this,b=a._widgets=[],c=a.options.disableWidgets||\"\";return e.each(i,function(d,e){(!c||!~c.indexOf(e._name))&&b.push(new e(a))}),f.apply(a,arguments)},request:function(b,d,e){var f,g,i,j,k=0,l=this._widgets,m=l&&l.length,n=[],o=[];for(d=c(d)?d:[d];m>k;k++)f=l[k],g=f.invoke(b,d),g!==h&&(a.isPromise(g)?o.push(g):n.push(g));return e||o.length?(i=a.when.apply(a,o),j=i.pipe?\"pipe\":\"then\",i[j](function(){var b=a.Deferred(),c=arguments;return 1===c.length&&(c=c[0]),setTimeout(function(){b.resolve(c)},1),b.promise()})[e?j:\"done\"](e||a.noop)):n[0]},destroy:function(){g.apply(this,arguments),this._widgets=null}}),b.register=d.register=function(b,c){var f,g={init:\"init\",destroy:\"destroy\",name:\"anonymous\"};return 1===arguments.length?(c=b,e.each(c,function(a){return\"_\"===a[0]||\"name\"===a?void(\"name\"===a&&(g.name=c.name)):void(g[a.replace(/[A-Z]/g,\"-$&\").toLowerCase()]=a)})):g=e.extend(g,b),c.responseMap=g,f=a.inherits(d,c),f._name=g.name,i.push(f),f},b.unRegister=d.unRegister=function(a){if(a&&\"anonymous\"!==a)for(var b=i.length;b--;)i[b]._name===a&&i.splice(b,1)},d}),b(\"widgets/filednd\",[\"base\",\"uploader\",\"lib/dnd\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.options.dnd=\"\",b.register({name:\"dnd\",init:function(b){if(b.dnd&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{disableGlobalDnd:b.disableGlobalDnd,container:b.dnd,accept:b.accept});return this.dnd=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"drop\",function(a){f.request(\"add-file\",[a])}),e.on(\"accept\",function(a){return f.owner.trigger(\"dndAccept\",a)}),e.init(),g.promise()}},destroy:function(){this.dnd&&this.dnd.destroy()}})}),b(\"lib/filepaste\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},a),a.container=e(a.container||document.body),c.call(this,\"FilePaste\")}var e=a.$;return a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/filepaste\",[\"base\",\"uploader\",\"lib/filepaste\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.register({name:\"paste\",init:function(b){if(b.paste&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{container:b.paste,accept:b.accept});return this.paste=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"paste\",function(a){f.owner.request(\"add-file\",[a])}),e.init(),g.promise()}},destroy:function(){this.paste&&this.paste.destroy()}})}),b(\"lib/blob\",[\"base\",\"runtime/client\"],function(a,b){function c(a,c){var d=this;d.source=c,d.ruid=a,this.size=c.size||0,this.type=!c.type&&this.ext&&~\"jpg,jpeg,png,gif,bmp\".indexOf(this.ext)?\"image/\"+(\"jpg\"===this.ext?\"jpeg\":this.ext):c.type||\"application/octet-stream\",b.call(d,\"Blob\"),this.uid=c.uid||this.uid,a&&d.connectRuntime(a)}return a.inherits(b,{constructor:c,slice:function(a,b){return this.exec(\"slice\",a,b)},getSource:function(){return this.source}}),c}),b(\"lib/file\",[\"base\",\"lib/blob\"],function(a,b){function c(a,c){var f;this.name=c.name||\"untitled\"+d++,f=e.exec(c.name)?RegExp.$1.toLowerCase():\"\",!f&&c.type&&(f=/\\/(jpg|jpeg|png|gif|bmp)$/i.exec(c.type)?RegExp.$1.toLowerCase():\"\",this.name+=\".\"+f),this.ext=f,this.lastModifiedDate=c.lastModifiedDate||(new Date).toLocaleString(),b.apply(this,arguments)}var d=1,e=/\\.([^.]+)$/;return a.inherits(b,c)}),b(\"lib/filepicker\",[\"base\",\"runtime/client\",\"lib/file\"],function(b,c,d){function e(a){if(a=this.options=f.extend({},e.options,a),a.container=f(a.id),!a.container.length)throw new Error(\"按钮指定错误\");a.innerHTML=a.innerHTML||a.label||a.container.html()||\"\",a.button=f(a.button||document.createElement(\"div\")),a.button.html(a.innerHTML),a.container.html(a.button),c.call(this,\"FilePicker\",!0)}var f=b.$;return e.options={button:null,container:null,label:null,innerHTML:null,multiple:!0,accept:null,name:\"file\"},b.inherits(c,{constructor:e,init:function(){var c=this,e=c.options,g=e.button;g.addClass(\"webuploader-pick\"),c.on(\"all\",function(a){var b;switch(a){case\"mouseenter\":g.addClass(\"webuploader-pick-hover\");break;case\"mouseleave\":g.removeClass(\"webuploader-pick-hover\");break;case\"change\":b=c.exec(\"getFiles\"),c.trigger(\"select\",f.map(b,function(a){return a=new d(c.getRuid(),a),a._refer=e.container,a}),e.container)}}),c.connectRuntime(e,function(){c.refresh(),c.exec(\"init\",e),c.trigger(\"ready\")}),this._resizeHandler=b.bindFn(this.refresh,this),f(a).on(\"resize\",this._resizeHandler)},refresh:function(){var a=this.getRuntime().getContainer(),b=this.options.button,c=b.outerWidth?b.outerWidth():b.width(),d=b.outerHeight?b.outerHeight():b.height(),e=b.offset();c&&d&&a.css({bottom:\"auto\",right:\"auto\",width:c+\"px\",height:d+\"px\"}).offset(e)},enable:function(){var a=this.options.button;a.removeClass(\"webuploader-pick-disable\"),this.refresh()},disable:function(){var a=this.options.button;this.getRuntime().getContainer().css({top:\"-99999px\"}),a.addClass(\"webuploader-pick-disable\")},destroy:function(){var b=this.options.button;f(a).off(\"resize\",this._resizeHandler),b.removeClass(\"webuploader-pick-disable webuploader-pick-hover webuploader-pick\")}}),e}),b(\"widgets/filepicker\",[\"base\",\"uploader\",\"lib/filepicker\",\"widgets/widget\"],function(a,b,c){var d=a.$;return d.extend(b.options,{pick:null,accept:null}),b.register({name:\"picker\",init:function(a){return this.pickers=[],a.pick&&this.addBtn(a.pick)},refresh:function(){d.each(this.pickers,function(){this.refresh()})},addBtn:function(b){var e=this,f=e.options,g=f.accept,h=[];if(b)return d.isPlainObject(b)||(b={id:b}),d(b.id).each(function(){var i,j,k;k=a.Deferred(),i=d.extend({},b,{accept:d.isPlainObject(g)?[g]:g,swf:f.swf,runtimeOrder:f.runtimeOrder,id:this}),j=new c(i),j.once(\"ready\",k.resolve),j.on(\"select\",function(a){e.owner.request(\"add-file\",[a])}),j.init(),e.pickers.push(j),h.push(k.promise())}),a.when.apply(a,h)},disable:function(){d.each(this.pickers,function(){this.disable()})},enable:function(){d.each(this.pickers,function(){this.enable()})},destroy:function(){d.each(this.pickers,function(){this.destroy()}),this.pickers=null}})}),b(\"file\",[\"base\",\"mediator\"],function(a,b){function c(){return f+g++}function d(a){this.name=a.name||\"Untitled\",this.size=a.size||0,this.type=a.type||\"application/octet-stream\",this.lastModifiedDate=a.lastModifiedDate||1*new Date,this.id=c(),this.ext=h.exec(this.name)?RegExp.$1:\"\",this.statusText=\"\",i[this.id]=d.Status.INITED,this.source=a,this.loaded=0,this.on(\"error\",function(a){this.setStatus(d.Status.ERROR,a)})}var e=a.$,f=\"WU_FILE_\",g=0,h=/\\.([^.]+)$/,i={};return e.extend(d.prototype,{setStatus:function(a,b){var c=i[this.id];\"undefined\"!=typeof b&&(this.statusText=b),a!==c&&(i[this.id]=a,this.trigger(\"statuschange\",a,c))},getStatus:function(){return i[this.id]},getSource:function(){return this.source},destroy:function(){this.off(),delete i[this.id]}}),b.installTo(d.prototype),d.Status={INITED:\"inited\",QUEUED:\"queued\",PROGRESS:\"progress\",ERROR:\"error\",COMPLETE:\"complete\",CANCELLED:\"cancelled\",INTERRUPT:\"interrupt\",INVALID:\"invalid\"},d}),b(\"queue\",[\"base\",\"mediator\",\"file\"],function(a,b,c){function d(){this.stats={numOfQueue:0,numOfSuccess:0,numOfCancel:0,numOfProgress:0,numOfUploadFailed:0,numOfInvalid:0,numofDeleted:0,numofInterrupt:0},this._queue=[],this._map={}}var e=a.$,f=c.Status;return e.extend(d.prototype,{append:function(a){return this._queue.push(a),this._fileAdded(a),this},prepend:function(a){return this._queue.unshift(a),this._fileAdded(a),this},getFile:function(a){return\"string\"!=typeof a?a:this._map[a]},fetch:function(a){var b,c,d=this._queue.length;for(a=a||f.QUEUED,b=0;d>b;b++)if(c=this._queue[b],a===c.getStatus())return c;return null},sort:function(a){\"function\"==typeof a&&this._queue.sort(a)},getFiles:function(){for(var a,b=[].slice.call(arguments,0),c=[],d=0,f=this._queue.length;f>d;d++)a=this._queue[d],(!b.length||~e.inArray(a.getStatus(),b))&&c.push(a);return c},removeFile:function(a){var b=this._map[a.id];b&&(delete this._map[a.id],a.destroy(),this.stats.numofDeleted++)},_fileAdded:function(a){var b=this,c=this._map[a.id];c||(this._map[a.id]=a,a.on(\"statuschange\",function(a,c){b._onFileStatusChange(a,c)}))},_onFileStatusChange:function(a,b){var c=this.stats;switch(b){case f.PROGRESS:c.numOfProgress--;break;case f.QUEUED:c.numOfQueue--;break;case f.ERROR:c.numOfUploadFailed--;break;case f.INVALID:c.numOfInvalid--;break;case f.INTERRUPT:c.numofInterrupt--}switch(a){case f.QUEUED:c.numOfQueue++;break;case f.PROGRESS:c.numOfProgress++;break;case f.ERROR:c.numOfUploadFailed++;break;case f.COMPLETE:c.numOfSuccess++;break;case f.CANCELLED:c.numOfCancel++;break;case f.INVALID:c.numOfInvalid++;break;case f.INTERRUPT:c.numofInterrupt++}}}),b.installTo(d.prototype),d}),b(\"widgets/queue\",[\"base\",\"uploader\",\"queue\",\"file\",\"lib/file\",\"runtime/client\",\"widgets/widget\"],function(a,b,c,d,e,f){var g=a.$,h=/\\.\\w+$/,i=d.Status;return b.register({name:\"queue\",init:function(b){var d,e,h,i,j,k,l,m=this;if(g.isPlainObject(b.accept)&&(b.accept=[b.accept]),b.accept){for(j=[],h=0,e=b.accept.length;e>h;h++)i=b.accept[h].extensions,i&&j.push(i);j.length&&(k=\"\\\\.\"+j.join(\",\").replace(/,/g,\"$|\\\\.\").replace(/\\*/g,\".*\")+\"$\"),m.accept=new RegExp(k,\"i\")}return m.queue=new c,m.stats=m.queue.stats,\"html5\"===this.request(\"predict-runtime-type\")?(d=a.Deferred(),this.placeholder=l=new f(\"Placeholder\"),l.connectRuntime({runtimeOrder:\"html5\"},function(){m._ruid=l.getRuid(),d.resolve()}),d.promise()):void 0},_wrapFile:function(a){if(!(a instanceof d)){if(!(a instanceof e)){if(!this._ruid)throw new Error(\"Can't add external files.\");a=new e(this._ruid,a)}a=new d(a)}return a},acceptFile:function(a){var b=!a||!a.size||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b},_addFile:function(a){var b=this;return a=b._wrapFile(a),b.owner.trigger(\"beforeFileQueued\",a)?b.acceptFile(a)?(b.queue.append(a),b.owner.trigger(\"fileQueued\",a),a):void b.owner.trigger(\"error\",\"Q_TYPE_DENIED\",a):void 0},getFile:function(a){return this.queue.getFile(a)},addFile:function(a){var b=this;a.length||(a=[a]),a=g.map(a,function(a){return b._addFile(a)}),b.owner.trigger(\"filesQueued\",a),b.options.auto&&setTimeout(function(){b.request(\"start-upload\")},20)},getStats:function(){return this.stats},removeFile:function(a,b){var c=this;a=a.id?a:c.queue.getFile(a),this.request(\"cancel-file\",a),b&&this.queue.removeFile(a)},getFiles:function(){return this.queue.getFiles.apply(this.queue,arguments)},fetchFile:function(){return this.queue.fetch.apply(this.queue,arguments)},retry:function(a,b){var c,d,e,f=this;if(a)return a=a.id?a:f.queue.getFile(a),a.setStatus(i.QUEUED),void(b||f.request(\"start-upload\"));for(c=f.queue.getFiles(i.ERROR),d=0,e=c.length;e>d;d++)a=c[d],a.setStatus(i.QUEUED);f.request(\"start-upload\")},sortFiles:function(){return this.queue.sort.apply(this.queue,arguments)},reset:function(){this.owner.trigger(\"reset\"),this.queue=new c,this.stats=this.queue.stats},destroy:function(){this.reset(),this.placeholder&&this.placeholder.destroy()}})}),b(\"widgets/runtime\",[\"uploader\",\"runtime/runtime\",\"widgets/widget\"],function(a,b){return a.support=function(){return b.hasRuntime.apply(b,arguments)},a.register({name:\"runtime\",init:function(){if(!this.predictRuntimeType())throw Error(\"Runtime Error\")},predictRuntimeType:function(){var a,c,d=this.options.runtimeOrder||b.orders,e=this.type;if(!e)for(d=d.split(/\\s*,\\s*/g),a=0,c=d.length;c>a;a++)if(b.hasRuntime(d[a])){this.type=e=d[a];break}return e}})}),b(\"lib/transport\",[\"base\",\"runtime/client\",\"mediator\"],function(a,b,c){function d(a){var c=this;a=c.options=e.extend(!0,{},d.options,a||{}),b.call(this,\"Transport\"),this._blob=null,this._formData=a.formData||{},this._headers=a.headers||{},this.on(\"progress\",this._timeout),this.on(\"load error\",function(){c.trigger(\"progress\",1),clearTimeout(c._timer)})}var e=a.$;return d.options={server:\"\",method:\"POST\",withCredentials:!1,fileVal:\"file\",timeout:12e4,formData:{},headers:{},sendAsBinary:!1},e.extend(d.prototype,{appendBlob:function(a,b,c){var d=this,e=d.options;d.getRuid()&&d.disconnectRuntime(),d.connectRuntime(b.ruid,function(){d.exec(\"init\")}),d._blob=b,e.fileVal=a||e.fileVal,e.filename=c||e.filename},append:function(a,b){\"object\"==typeof a?e.extend(this._formData,a):this._formData[a]=b},setRequestHeader:function(a,b){\"object\"==typeof a?e.extend(this._headers,a):this._headers[a]=b},send:function(a){this.exec(\"send\",a),this._timeout()},abort:function(){return clearTimeout(this._timer),this.exec(\"abort\")},destroy:function(){this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()},getResponse:function(){return this.exec(\"getResponse\")},getResponseAsJson:function(){return this.exec(\"getResponseAsJson\")},getStatus:function(){return this.exec(\"getStatus\")},_timeout:function(){var a=this,b=a.options.timeout;b&&(clearTimeout(a._timer),a._timer=setTimeout(function(){a.abort(),a.trigger(\"error\",\"timeout\")},b))}}),c.installTo(d.prototype),d}),b(\"widgets/upload\",[\"base\",\"uploader\",\"file\",\"lib/transport\",\"widgets/widget\"],function(a,b,c,d){function e(a,b){var c,d,e=[],f=a.source,g=f.size,h=b?Math.ceil(g/b):1,i=0,j=0;for(d={file:a,has:function(){return!!e.length},shift:function(){return e.shift()},unshift:function(a){e.unshift(a)}};h>j;)c=Math.min(b,g-i),e.push({file:a,start:i,end:b?i+c:g,total:g,chunks:h,chunk:j++,cuted:d}),i+=c;return a.blocks=e.concat(),a.remaning=e.length,d}var f=a.$,g=a.isPromise,h=c.Status;f.extend(b.options,{prepareNextFile:!1,chunked:!1,chunkSize:5242880,chunkRetry:2,threads:3,formData:{}}),b.register({name:\"upload\",init:function(){var b=this.owner,c=this;this.runing=!1,this.progress=!1,b.on(\"startUpload\",function(){c.progress=!0}).on(\"uploadFinished\",function(){c.progress=!1}),this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this.__tick=a.bindFn(this._tick,this),b.on(\"uploadComplete\",function(a){a.blocks&&f.each(a.blocks,function(a,b){b.transport&&(b.transport.abort(),b.transport.destroy()),delete b.transport}),delete a.blocks,delete a.remaning})},reset:function(){this.request(\"stop-upload\",!0),this.runing=!1,this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this._trigged=!1,this._promise=null},startUpload:function(b){var c=this;if(f.each(c.request(\"get-files\",h.INVALID),function(){c.request(\"remove-file\",this)}),b)if(b=b.id?b:c.request(\"get-file\",b),b.getStatus()===h.INTERRUPT)f.each(c.pool,function(a,c){c.file===b&&c.transport&&c.transport.send()}),b.setStatus(h.QUEUED);else{if(b.getStatus()===h.PROGRESS)return;b.setStatus(h.QUEUED)}else f.each(c.request(\"get-files\",[h.INITED]),function(){this.setStatus(h.QUEUED)});c.runing||(c.runing=!0,f.each(c.pool,function(a,b){var d=b.file;d.getStatus()===h.INTERRUPT&&(d.setStatus(h.PROGRESS),c._trigged=!1,b.transport&&b.transport.send())}),b||f.each(c.request(\"get-files\",h.INTERRUPT),function(){this.setStatus(h.PROGRESS)}),c._trigged=!1,a.nextTick(c.__tick),c.owner.trigger(\"startUpload\"))},stopUpload:function(b,c){var d=this;if(b===!0&&(c=b,b=null),d.runing!==!1){if(b){if(b=b.id?b:d.request(\"get-file\",b),b.getStatus()!==h.PROGRESS&&b.getStatus()!==h.QUEUED)return;return b.setStatus(h.INTERRUPT),f.each(d.pool,function(a,c){c.file===b&&(c.transport&&c.transport.abort(),d._putback(c),d._popBlock(c))}),a.nextTick(d.__tick)}d.runing=!1,this._promise&&this._promise.file&&this._promise.file.setStatus(h.INTERRUPT),c&&f.each(d.pool,function(a,b){b.transport&&b.transport.abort(),b.file.setStatus(h.INTERRUPT)}),d.owner.trigger(\"stopUpload\")}},cancelFile:function(a){a=a.id?a:this.request(\"get-file\",a),a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),a.setStatus(h.CANCELLED),this.owner.trigger(\"fileDequeued\",a)},isInProgress:function(){return!!this.progress},_getStats:function(){return this.request(\"get-stats\")},skipFile:function(a,b){a=a.id?a:this.request(\"get-file\",a),a.setStatus(b||h.COMPLETE),a.skipped=!0,a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),this.owner.trigger(\"uploadSkip\",a)},_tick:function(){var b,c,d=this,e=d.options;return d._promise?d._promise.always(d.__tick):void(d.pool.length<e.threads&&(c=d._nextBlock())?(d._trigged=!1,b=function(b){d._promise=null,b&&b.file&&d._startSend(b),a.nextTick(d.__tick)},d._promise=g(c)?c.always(b):b(c)):d.remaning||d._getStats().numOfQueue||d._getStats().numofInterrupt||(d.runing=!1,d._trigged||a.nextTick(function(){d.owner.trigger(\"uploadFinished\")}),d._trigged=!0))},_putback:function(a){var b;a.cuted.unshift(a),b=this.stack.indexOf(a.cuted),~b||this.stack.unshift(a.cuted)},_getStack:function(){for(var a,b=0;a=this.stack[b++];){if(a.has()&&a.file.getStatus()===h.PROGRESS)return a;(!a.has()||a.file.getStatus()!==h.PROGRESS&&a.file.getStatus()!==h.INTERRUPT)&&this.stack.splice(--b,1)}return null},_nextBlock:function(){var a,b,c,d,f=this,h=f.options;return(a=this._getStack())?(h.prepareNextFile&&!f.pending.length&&f._prepareNextFile(),a.shift()):f.runing?(!f.pending.length&&f._getStats().numOfQueue&&f._prepareNextFile(),b=f.pending.shift(),c=function(b){return b?(a=e(b,h.chunked?h.chunkSize:0),f.stack.push(a),a.shift()):null},g(b)?(d=b.file,b=b[b.pipe?\"pipe\":\"then\"](c),b.file=d,b):c(b)):void 0},_prepareNextFile:function(){var a,b=this,c=b.request(\"fetch-file\"),d=b.pending;c&&(a=b.request(\"before-send-file\",c,function(){return c.getStatus()===h.PROGRESS||c.getStatus()===h.INTERRUPT?c:b._finishFile(c)}),b.owner.trigger(\"uploadStart\",c),c.setStatus(h.PROGRESS),a.file=c,a.done(function(){var b=f.inArray(a,d);~b&&d.splice(b,1,c)}),a.fail(function(a){c.setStatus(h.ERROR,a),b.owner.trigger(\"uploadError\",c,a),b.owner.trigger(\"uploadComplete\",c)}),d.push(a))},_popBlock:function(a){var b=f.inArray(a,this.pool);this.pool.splice(b,1),a.file.remaning--,this.remaning--},_startSend:function(b){var c,d=this,e=b.file;return e.getStatus()!==h.PROGRESS?void(e.getStatus()===h.INTERRUPT&&d._putback(b)):(d.pool.push(b),d.remaning++,b.blob=1===b.chunks?e.source:e.source.slice(b.start,b.end),c=d.request(\"before-send\",b,function(){e.getStatus()===h.PROGRESS?d._doSend(b):(d._popBlock(b),a.nextTick(d.__tick))}),void c.fail(function(){1===e.remaning?d._finishFile(e).always(function(){b.percentage=1,d._popBlock(b),d.owner.trigger(\"uploadComplete\",e),a.nextTick(d.__tick)}):(b.percentage=1,d._popBlock(b),a.nextTick(d.__tick))}))},_doSend:function(b){var c,e,g=this,i=g.owner,j=g.options,k=b.file,l=new d(j),m=f.extend({},j.formData),n=f.extend({},j.headers);b.transport=l,l.on(\"destroy\",function(){delete b.transport,g._popBlock(b),a.nextTick(g.__tick)}),l.on(\"progress\",function(a){var c=0,d=0;c=b.percentage=a,b.chunks>1&&(f.each(k.blocks,function(a,b){d+=(b.percentage||0)*(b.end-b.start)}),c=d/k.size),i.trigger(\"uploadProgress\",k,c||0)}),c=function(a){var c;return e=l.getResponseAsJson()||{},e._raw=l.getResponse(),c=function(b){a=b},i.trigger(\"uploadAccept\",b,e,c)||(a=a||\"server\"),a},l.on(\"error\",function(a,d){b.retried=b.retried||0,b.chunks>1&&~\"http,abort\".indexOf(a)&&b.retried<j.chunkRetry?(b.retried++,l.send()):(d||\"server\"!==a||(a=c(a)),k.setStatus(h.ERROR,a),i.trigger(\"uploadError\",k,a),i.trigger(\"uploadComplete\",k))}),l.on(\"load\",function(){var a;return(a=c())?void l.trigger(\"error\",a,!0):void(1===k.remaning?g._finishFile(k,e):l.destroy())}),m=f.extend(m,{id:k.id,name:k.name,type:k.type,lastModifiedDate:k.lastModifiedDate,size:k.size}),b.chunks>1&&f.extend(m,{chunks:b.chunks,chunk:b.chunk}),i.trigger(\"uploadBeforeSend\",b,m,n),l.appendBlob(j.fileVal,b.blob,k.name),l.append(m),l.setRequestHeader(n),l.send()},_finishFile:function(a,b,c){var d=this.owner;return d.request(\"after-send-file\",arguments,function(){a.setStatus(h.COMPLETE),d.trigger(\"uploadSuccess\",a,b,c)}).fail(function(b){a.getStatus()===h.PROGRESS&&a.setStatus(h.ERROR,b),d.trigger(\"uploadError\",a,b)}).always(function(){d.trigger(\"uploadComplete\",a)})}})}),b(\"widgets/validator\",[\"base\",\"uploader\",\"file\",\"widgets/widget\"],function(a,b,c){var d,e=a.$,f={};return d={addValidator:function(a,b){f[a]=b},removeValidator:function(a){delete f[a]}},b.register({name:\"validator\",init:function(){var b=this;a.nextTick(function(){e.each(f,function(){this.call(b.owner)})})}}),d.addValidator(\"fileNumLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileNumLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){return c>=d&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_NUM_LIMIT\",d,a),setTimeout(function(){e=!0},1)),c>=d?!1:!0}),a.on(\"fileQueued\",function(){c++}),a.on(\"fileDequeued\",function(){c--}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSizeLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileSizeLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){var b=c+a.size>d;return b&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_SIZE_LIMIT\",d,a),setTimeout(function(){e=!0},1)),b?!1:!0}),a.on(\"fileQueued\",function(a){c+=a.size}),a.on(\"fileDequeued\",function(a){c-=a.size}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSingleSizeLimit\",function(){var a=this,b=a.options,d=b.fileSingleSizeLimit;d&&a.on(\"beforeFileQueued\",function(a){return a.size>d?(a.setStatus(c.Status.INVALID,\"exceed_size\"),this.trigger(\"error\",\"F_EXCEED_SIZE\",d,a),!1):void 0})}),d.addValidator(\"duplicate\",function(){function a(a){for(var b,c=0,d=0,e=a.length;e>d;d++)b=a.charCodeAt(d),c=b+(c<<6)+(c<<16)-c;return c}var b=this,c=b.options,d={};c.duplicate||(b.on(\"beforeFileQueued\",function(b){var c=b.__hash||(b.__hash=a(b.name+b.size+b.lastModifiedDate));return d[c]?(this.trigger(\"error\",\"F_DUPLICATE\",b),!1):void 0}),b.on(\"fileQueued\",function(a){var b=a.__hash;b&&(d[b]=!0)}),b.on(\"fileDequeued\",function(a){var b=a.__hash;b&&delete d[b]}),b.on(\"reset\",function(){d={}}))}),d}),b(\"runtime/compbase\",[],function(){function a(a,b){this.owner=a,this.options=a.options,this.getRuntime=function(){return b},this.getRuid=function(){return b.uid},this.trigger=function(){return a.trigger.apply(a,arguments)}}return a}),b(\"runtime/html5/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a={},d=this,e=this.destroy;c.apply(d,arguments),d.type=f,d.exec=function(c,e){var f,h=this,i=h.uid,j=b.slice(arguments,2);return g[c]&&(f=a[i]=a[i]||new g[c](h,d),f[e])?f[e].apply(f,j):void 0},d.destroy=function(){return e&&e.apply(this,arguments)}}var f=\"html5\",g={};return b.inherits(c,{constructor:e,init:function(){var a=this;setTimeout(function(){a.trigger(\"ready\")},1)}}),e.register=function(a,c){var e=g[a]=b.inherits(d,c);return e},a.Blob&&a.FileReader&&a.DataView&&c.addRuntime(f,e),e}),b(\"runtime/html5/blob\",[\"runtime/html5/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.owner.source,e=d.slice||d.webkitSlice||d.mozSlice;\nreturn d=e.call(d,a,c),new b(this.getRuid(),d)}})}),b(\"runtime/html5/dnd\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){var d=a.$,e=\"webuploader-dnd-\";return b.register(\"DragAndDrop\",{init:function(){var b=this.elem=this.options.container;this.dragEnterHandler=a.bindFn(this._dragEnterHandler,this),this.dragOverHandler=a.bindFn(this._dragOverHandler,this),this.dragLeaveHandler=a.bindFn(this._dragLeaveHandler,this),this.dropHandler=a.bindFn(this._dropHandler,this),this.dndOver=!1,b.on(\"dragenter\",this.dragEnterHandler),b.on(\"dragover\",this.dragOverHandler),b.on(\"dragleave\",this.dragLeaveHandler),b.on(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).on(\"dragover\",this.dragOverHandler),d(document).on(\"drop\",this.dropHandler))},_dragEnterHandler:function(a){var b,c=this,d=c._denied||!1;return a=a.originalEvent||a,c.dndOver||(c.dndOver=!0,b=a.dataTransfer.items,b&&b.length&&(c._denied=d=!c.trigger(\"accept\",b)),c.elem.addClass(e+\"over\"),c.elem[d?\"addClass\":\"removeClass\"](e+\"denied\")),a.dataTransfer.dropEffect=d?\"none\":\"copy\",!1},_dragOverHandler:function(a){var b=this.elem.parent().get(0);return b&&!d.contains(b,a.currentTarget)?!1:(clearTimeout(this._leaveTimer),this._dragEnterHandler.call(this,a),!1)},_dragLeaveHandler:function(){var a,b=this;return a=function(){b.dndOver=!1,b.elem.removeClass(e+\"over \"+e+\"denied\")},clearTimeout(b._leaveTimer),b._leaveTimer=setTimeout(a,100),!1},_dropHandler:function(a){var b,f,g=this,h=g.getRuid(),i=g.elem.parent().get(0);if(i&&!d.contains(i,a.currentTarget))return!1;a=a.originalEvent||a,b=a.dataTransfer;try{f=b.getData(\"text/html\")}catch(j){}return f?void 0:(g._getTansferFiles(b,function(a){g.trigger(\"drop\",d.map(a,function(a){return new c(h,a)}))}),g.dndOver=!1,g.elem.removeClass(e+\"over\"),!1)},_getTansferFiles:function(b,c){var d,e,f,g,h,i,j,k=[],l=[];for(d=b.items,e=b.files,j=!(!d||!d[0].webkitGetAsEntry),h=0,i=e.length;i>h;h++)f=e[h],g=d&&d[h],j&&g.webkitGetAsEntry().isDirectory?l.push(this._traverseDirectoryTree(g.webkitGetAsEntry(),k)):k.push(f);a.when.apply(a,l).done(function(){k.length&&c(k)})},_traverseDirectoryTree:function(b,c){var d=a.Deferred(),e=this;return b.isFile?b.file(function(a){c.push(a),d.resolve()}):b.isDirectory&&b.createReader().readEntries(function(b){var f,g=b.length,h=[],i=[];for(f=0;g>f;f++)h.push(e._traverseDirectoryTree(b[f],i));a.when.apply(a,h).then(function(){c.push.apply(c,i),d.resolve()},d.reject)}),d.promise()},destroy:function(){var a=this.elem;a&&(a.off(\"dragenter\",this.dragEnterHandler),a.off(\"dragover\",this.dragOverHandler),a.off(\"dragleave\",this.dragLeaveHandler),a.off(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).off(\"dragover\",this.dragOverHandler),d(document).off(\"drop\",this.dropHandler)))}})}),b(\"runtime/html5/filepaste\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){return b.register(\"FilePaste\",{init:function(){var b,c,d,e,f=this.options,g=this.elem=f.container,h=\".*\";if(f.accept){for(b=[],c=0,d=f.accept.length;d>c;c++)e=f.accept[c].mimeTypes,e&&b.push(e);b.length&&(h=b.join(\",\"),h=h.replace(/,/g,\"|\").replace(/\\*/g,\".*\"))}this.accept=h=new RegExp(h,\"i\"),this.hander=a.bindFn(this._pasteHander,this),g.on(\"paste\",this.hander)},_pasteHander:function(a){var b,d,e,f,g,h=[],i=this.getRuid();for(a=a.originalEvent||a,b=a.clipboardData.items,f=0,g=b.length;g>f;f++)d=b[f],\"file\"===d.kind&&(e=d.getAsFile())&&h.push(new c(i,e));h.length&&(a.preventDefault(),a.stopPropagation(),this.trigger(\"paste\",h))},destroy:function(){this.elem.off(\"paste\",this.hander)}})}),b(\"runtime/html5/filepicker\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(){var a,b,d,e,f=this.getRuntime().getContainer(),g=this,h=g.owner,i=g.options,j=this.label=c(document.createElement(\"label\")),k=this.input=c(document.createElement(\"input\"));if(k.attr(\"type\",\"file\"),k.attr(\"name\",i.name),k.addClass(\"webuploader-element-invisible\"),j.on(\"click\",function(){k.trigger(\"click\")}),j.css({opacity:0,width:\"100%\",height:\"100%\",display:\"block\",cursor:\"pointer\",background:\"#ffffff\"}),i.multiple&&k.attr(\"multiple\",\"multiple\"),i.accept&&i.accept.length>0){for(a=[],b=0,d=i.accept.length;d>b;b++)a.push(i.accept[b].mimeTypes);k.attr(\"accept\",a.join(\",\"))}f.append(k),f.append(j),e=function(a){h.trigger(a.type)},k.on(\"change\",function(a){var b,d=arguments.callee;g.files=a.target.files,b=this.cloneNode(!0),b.value=null,this.parentNode.replaceChild(b,this),k.off(),k=c(b).on(\"change\",d).on(\"mouseenter mouseleave\",e),h.trigger(\"change\")}),j.on(\"mouseenter mouseleave\",e)},getFiles:function(){return this.files},destroy:function(){this.input.off(),this.label.off()}})}),b(\"runtime/html5/transport\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.noop,d=a.$;return b.register(\"Transport\",{init:function(){this._status=0,this._response=null},send:function(){var b,c,e,f=this.owner,g=this.options,h=this._initAjax(),i=f._blob,j=g.server;g.sendAsBinary?(j+=(/\\?/.test(j)?\"&\":\"?\")+d.param(f._formData),c=i.getSource()):(b=new FormData,d.each(f._formData,function(a,c){b.append(a,c)}),b.append(g.fileVal,i.getSource(),g.filename||f._formData.name||\"\")),g.withCredentials&&\"withCredentials\"in h?(h.open(g.method,j,!0),h.withCredentials=!0):h.open(g.method,j),this._setRequestHeader(h,g.headers),c?(h.overrideMimeType&&h.overrideMimeType(\"application/octet-stream\"),a.os.android?(e=new FileReader,e.onload=function(){h.send(this.result),e=e.onload=null},e.readAsArrayBuffer(c)):h.send(c)):h.send(b)},getResponse:function(){return this._response},getResponseAsJson:function(){return this._parseJson(this._response)},getStatus:function(){return this._status},abort:function(){var a=this._xhr;a&&(a.upload.onprogress=c,a.onreadystatechange=c,a.abort(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var a=this,b=new XMLHttpRequest,d=this.options;return!d.withCredentials||\"withCredentials\"in b||\"undefined\"==typeof XDomainRequest||(b=new XDomainRequest),b.upload.onprogress=function(b){var c=0;return b.lengthComputable&&(c=b.loaded/b.total),a.trigger(\"progress\",c)},b.onreadystatechange=function(){return 4===b.readyState?(b.upload.onprogress=c,b.onreadystatechange=c,a._xhr=null,a._status=b.status,b.status>=200&&b.status<300?(a._response=b.responseText,a.trigger(\"load\")):b.status>=500&&b.status<600?(a._response=b.responseText,a.trigger(\"error\",\"server\")):a.trigger(\"error\",a._status?\"http\":\"abort\")):void 0},a._xhr=b,b},_setRequestHeader:function(a,b){d.each(b,function(b,c){a.setRequestHeader(b,c)})},_parseJson:function(a){var b;try{b=JSON.parse(a)}catch(c){b={}}return b}})}),b(\"runtime/flash/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a;try{a=navigator.plugins[\"Shockwave Flash\"],a=a.description}catch(b){try{a=new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\").GetVariable(\"$version\")}catch(c){a=\"0.0\"}}return a=a.match(/\\d+/g),parseFloat(a[0]+\".\"+a[1],10)}function f(){function d(a,b){var c,d,e=a.type||a;c=e.split(\"::\"),d=c[0],e=c[1],\"Ready\"===e&&d===j.uid?j.trigger(\"ready\"):f[d]&&f[d].trigger(e.toLowerCase(),a,b)}var e={},f={},g=this.destroy,j=this,k=b.guid(\"webuploader_\");c.apply(j,arguments),j.type=h,j.exec=function(a,c){var d,g=this,h=g.uid,k=b.slice(arguments,2);return f[h]=g,i[a]&&(e[h]||(e[h]=new i[a](g,j)),d=e[h],d[c])?d[c].apply(d,k):j.flashExec.apply(g,arguments)},a[k]=function(){var a=arguments;setTimeout(function(){d.apply(null,a)},1)},this.jsreciver=k,this.destroy=function(){return g&&g.apply(this,arguments)},this.flashExec=function(a,c){var d=j.getFlash(),e=b.slice(arguments,2);return d.exec(this.uid,a,c,e)}}var g=b.$,h=\"flash\",i={};return b.inherits(c,{constructor:f,init:function(){var a,c=this.getContainer(),d=this.options;c.css({position:\"absolute\",top:\"-8px\",left:\"-8px\",width:\"9px\",height:\"9px\",overflow:\"hidden\"}),a='<object id=\"'+this.uid+'\" type=\"application/x-shockwave-flash\" data=\"'+d.swf+'\" ',b.browser.ie&&(a+='classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" '),a+='width=\"100%\" height=\"100%\" style=\"outline:0\"><param name=\"movie\" value=\"'+d.swf+'\" /><param name=\"flashvars\" value=\"uid='+this.uid+\"&jsreciver=\"+this.jsreciver+'\" /><param name=\"wmode\" value=\"transparent\" /><param name=\"allowscriptaccess\" value=\"always\" /></object>',c.html(a)},getFlash:function(){return this._flash?this._flash:(this._flash=g(\"#\"+this.uid).get(0),this._flash)}}),f.register=function(a,c){return c=i[a]=b.inherits(d,g.extend({flashExec:function(){var a=this.owner,b=this.getRuntime();return b.flashExec.apply(a,arguments)}},c))},e()>=11.4&&c.addRuntime(h,f),f}),b(\"runtime/flash/filepicker\",[\"base\",\"runtime/flash/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(a){var b,d,e=c.extend({},a);for(b=e.accept&&e.accept.length,d=0;b>d;d++)e.accept[d].title||(e.accept[d].title=\"Files\");delete e.button,delete e.id,delete e.container,this.flashExec(\"FilePicker\",\"init\",e)},destroy:function(){this.flashExec(\"FilePicker\",\"destroy\")}})}),b(\"runtime/flash/transport\",[\"base\",\"runtime/flash/runtime\",\"runtime/client\"],function(b,c,d){var e=b.$;return c.register(\"Transport\",{init:function(){this._status=0,this._response=null,this._responseJson=null},send:function(){var a,b=this.owner,c=this.options,d=this._initAjax(),f=b._blob,g=c.server;d.connectRuntime(f.ruid),c.sendAsBinary?(g+=(/\\?/.test(g)?\"&\":\"?\")+e.param(b._formData),a=f.uid):(e.each(b._formData,function(a,b){d.exec(\"append\",a,b)}),d.exec(\"appendBlob\",c.fileVal,f.uid,c.filename||b._formData.name||\"\")),this._setRequestHeader(d,c.headers),d.exec(\"send\",{method:c.method,url:g,forceURLStream:c.forceURLStream,mimeType:\"application/octet-stream\"},a)},getStatus:function(){return this._status},getResponse:function(){return this._response||\"\"},getResponseAsJson:function(){return this._responseJson},abort:function(){var a=this._xhr;a&&(a.exec(\"abort\"),a.destroy(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var b=this,c=new d(\"XMLHttpRequest\");return c.on(\"uploadprogress progress\",function(a){var c=a.loaded/a.total;return c=Math.min(1,Math.max(0,c)),b.trigger(\"progress\",c)}),c.on(\"load\",function(){var d,e=c.exec(\"getStatus\"),f=!1,g=\"\";return c.off(),b._xhr=null,e>=200&&300>e?f=!0:e>=500&&600>e?(f=!0,g=\"server\"):g=\"http\",f&&(b._response=c.exec(\"getResponse\"),b._response=decodeURIComponent(b._response),d=a.JSON&&a.JSON.parse||function(a){try{return new Function(\"return \"+a).call()}catch(b){return{}}},b._responseJson=b._response?d(b._response):{}),c.destroy(),c=null,g?b.trigger(\"error\",g):b.trigger(\"load\")}),c.on(\"error\",function(){c.off(),b._xhr=null,b.trigger(\"error\",\"http\")}),b._xhr=c,c},_setRequestHeader:function(a,b){e.each(b,function(b,c){a.exec(\"setRequestHeader\",b,c)})}})}),b(\"preset/withoutimage\",[\"base\",\"widgets/filednd\",\"widgets/filepaste\",\"widgets/filepicker\",\"widgets/queue\",\"widgets/runtime\",\"widgets/upload\",\"widgets/validator\",\"runtime/html5/blob\",\"runtime/html5/dnd\",\"runtime/html5/filepaste\",\"runtime/html5/filepicker\",\"runtime/html5/transport\",\"runtime/flash/filepicker\",\"runtime/flash/transport\"],function(a){return a}),b(\"webuploader\",[\"preset/withoutimage\"],function(a){return a}),c(\"webuploader\")});"
  },
  {
    "path": "src/main/resources/static/robots.txt",
    "content": ""
  },
  {
    "path": "src/main/resources/templates/403.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base(title='ERROR 403 Forbidden')\"></div>\n</head>\n<body>\n<h1>ERROR 403 Forbidden</h1>\n<h4 th:text=\"${exception}\"></h4>\n<h4 th:text=\"${message}\"></h4>\n<h4 th:text=\"${trace}\"></h4>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/404.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base(title='ERROR 404 NOT FOUND')\"></div>\n</head>\n<body>\n<h1>ERROR 404 NOT FOUND</h1>\n<h4 th:text=\"${exception}\"></h4>\n<h4 th:text=\"${message}\"></h4>\n<h4 th:text=\"${trace}\"></h4>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/500.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base(title='ERROR 500 INTERNAL SERVER ERROR')\"></div>\n</head>\n<body>\n<h1>ERROR 500 INTERNAL SERVER ERROR</h1>\n<h4 th:text=\"${exception}\"></h4>\n<h4 th:text=\"${message}\"></h4>\n<h4 th:text=\"${trace}\"></h4>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/example/test.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Title</title>\n</head>\n<body>\nExample test.\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/mail/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div id=\"mailToolbar\">\n    <nimrod:security authority=\"/COMPONENT/MAIL/SEND_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n           onclick=\"mailSendDialog();\">新建发送</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/MAIL/MAIL_DELETE_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\" onclick=\"mailDeleteAll();\">删除</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/MAIL/MAIL_RELOAD\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-refresh\" onclick=\"mailReload();\">刷新</a>\n    </nimrod:security>\n</div>\n<table id=\"mail\"></table>\n\n<script type=\"text/javascript\">\n    $(function () {\n        var SMS_STATUS = [];\n        var IS_OR_NOT = [];\n        // 邮件发送队列\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {\n                field: 'operation', title: '操作', formatter: function (value, row, index) {\n                    return '<a href=\"javascript:\" onclick=\"viewDialog(' + row.id + ')\">查看</a>'\n                }\n            },\n            {\n                field: 'status', title: '状态', formatter: function (value, row, index) {\n                    return expressui.grid.formatter(value, SMS_STATUS);\n                }\n            },\n            {field: 'from', title: '发件人'},\n            {field: 'to', title: '收件人'},\n            {field: 'subject', title: '主题'},\n            {\n                field: 'text', title: '内容', formatter: function (value, row, index) {\n                    return '<a href=\"javascript:\" onclick=\"viewDialog(' + row.id + ')\">查看</a>'\n                }\n            },\n            {\n                field: 'html', title: '是否为 HTML', formatter: function (value, row, index) {\n                    return expressui.grid.formatter(value, IS_OR_NOT);\n                }\n            },\n            {field: 'error', title: '发信报错'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#mail').datagrid(expressui.grid.create, {\n            title: '邮件队列',\n            url: Url.Mail.Api.MAIL + '/page_all',\n            columns: [columns],\n            onBeforeLoad: function (params) {\n                util.ajax({\n                    url: Url.System.Api.DICTIONARY + '/list_all_by_key/SMS_STATUS',\n                    success: function (data) {\n                        if (data) {\n                            SMS_STATUS = data;\n                        }\n                    }\n                });\n                util.ajax({\n                    url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n                    success: function (data) {\n                        if (data) {\n                            IS_OR_NOT = data;\n                        }\n                    }\n                });\n            }\n        });\n    });\n\n    function mailSendDialog() {\n        $('#mailSendDialog').dialog(expressui.dialog.create, {\n            title: '新建发送',\n            width: 450,\n            grid: {type: 'datagrid', selector: '#mail'},\n            href: Url.Mail.Page.MAIL + '/send_dialog',\n            get: {url: Url.Mail.Api.MAIL + '/one/{id}', method: 'get'},\n            save: {url: Url.Mail.Api.MAIL + '/add_one', method: 'post'},\n            buttons: [{\n                text: '发送',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.save,\n                reload: [{type: 'datagrid', selector: '#mail'}],\n                success: '操作成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function mailReload() {\n        expressui.grid.reload({type: 'datagrid', selector: '#mail'})\n    }\n\n    function mailDeleteAll() {\n        $('#mail').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.Mail.Api.MAIL + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            reload: [{type: 'datagrid', selector: '#mail'}],\n        });\n    }\n\n    function viewDialog(id) {\n        $('#viewDialog').dialog(expressui.dialog.create, {\n            title: '查看',\n            width: 600,\n            height: 430,\n            href: Url.Mail.Page.MAIL + '/view_dialog',\n            get: {url: Url.Mail.Api.MAIL + '/one/' + id, method: 'get'},\n            buttons: [{\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/mail/send.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div class=\"submit-form\" id=\"send\" style=\"width: 500px;margin:0\">\n    <form>\n        <table class=\"submit-table\">\n            <tr>\n                <td class=\"label\">发件人：</td>\n                <td>\n                    <input name=\"from\" class=\"easyui-textbox\">\n                </td>\n            </tr>\n            <tr>\n                <td class=\"label\">收件人：</td>\n                <td>\n                    <input name=\"to\" class=\"easyui-textbox\" data-options=\"required:true\">\n                </td>\n            </tr>\n            <tr>\n                <td class=\"label\">主题：</td>\n                <td>\n                    <input name=\"subject\" class=\"easyui-textbox\">\n                </td>\n            </tr>\n            <tr>\n                <td class=\"label\">内容：</td>\n                <td><input name=\"text\" class=\"easyui-textbox\" style=\"height:50px;\"\n                           data-options=\"required:true,multiline:true\"></td>\n            </tr>\n\n            <tr>\n                <td class=\"label\">是否为 HTML：</td>\n                <td><input name=\"html\" id=\"html\">\n                </td>\n            </tr>\n            <tr>\n                <td class=\"label\">备注：</td>\n                <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                           data-options=\"multiline:true\"></td>\n            </tr>\n        </table>\n        <div class=\"submit-button\">\n            <a href=\"javascript:expressui.form.submit({selector:'#send', url: Url.Mail.Api.MAIL + '/add_one', method:'post', success: '操作成功', reset: '#send'});\"\n               class=\"easyui-linkbutton\" data-options=\"iconCls:'iconfont icon-paper-plane'\">发送</a>\n            <a href=\"javascript:expressui.form.reset('#send')\" class=\"easyui-linkbutton\"\n               data-options=\"iconCls:'iconfont icon-refresh'\">重置</a>\n        </div>\n    </form>\n</div>\n\n<script>\n    $(function () {\n        $('#html').combobox({\n            url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n            valueField: 'value',\n            textField: 'valueName',\n            required: true\n        });\n    });\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/mail/send_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">发件人：</td>\n            <td>\n                <input name=\"from\" class=\"easyui-textbox\">\n                <input name=\"id\" type=\"hidden\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">收件人：</td>\n            <td>\n                <input name=\"to\" class=\"easyui-textbox\" data-options=\"required:true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">主题：</td>\n            <td>\n                <input name=\"subject\" class=\"easyui-textbox\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">内容：</td>\n            <td><input name=\"text\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n\n        <tr>\n            <td class=\"label\">是否为 HTML：</td>\n            <td><input name=\"html\" id=\"html\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n\n<script>\n    $(function () {\n        $('#html').combobox({\n            url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n            valueField: 'value',\n            textField: 'valueName',\n            require: true\n        });\n    });\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/mail/template/change_email_verify_code.html.bak",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n    <!-- Standard Meta -->\n    <meta charset=\"utf-8\"/>\n    <style type=\"text/css\">\n        a {\n            color: #1e5494;\n            text-decoration: none\n        }\n        .page {\n            font-family: \"Microsoft YaHei\", \"Helvetica Neue\", \"lucida Grande\", Verdana;\n            background: #fff;\n            margin: 0 auto;\n            /*margin-bottom: 40px;*/\n            text-align: left;\n            position: relative;\n            /*border-radius: 5px;*/\n            /*-moz-border-radius: 5px;*/\n            /*-webkit-border-radius: 5px*/\n        }\n        @media screen and (min-width: 1111px) {\n            .page {\n                width: 778px\n            }\n        }\n        @media screen and (max-width: 600px) {\n            .page {\n                width: 590px\n            }\n        }\n        @media screen and (max-width: 414px) {\n            .page {\n                width: 350px\n            }\n        }\n        @media screen and (max-width: 320px) {\n            .page {\n                width: 295px\n            }\n            .page-container {\n                /*padding: 30px 11px 20px;*/\n                padding: 10px 11px 20px;\n                border: 1px solid #d4d4d4\n            }\n        }\n        @media screen and (min-width: 321px) {\n            .page-container {\n                /*padding: 30px 27px 20px;*/\n                padding: 10px 27px 20px;\n                border: 1px solid #d4d4d4\n            }\n        }\n        .page-header {\n            background: #518bcb;\n            padding: 4px 6px 0;\n            /*border-top-left-radius: 5px;*/\n            /*border-top-right-radius: 5px;*/\n            /*-moz-border-radius-topleft: 5px;*/\n            /*-moz-border-radius-topright: 5px;*/\n            /*-webkit-border-top-left-radius: 5px;*/\n            /*-webkit-border-top-right-radius: 5px*/\n        }\n        .page-header-body {\n            zoom: 1;\n            padding: 0 19px;\n            background: #518bcb;\n            border-bottom: 1px solid #467ec3;\n            overflow: hidden\n        }\n        .page-header h1 {\n            color: #fff;\n            font-size: 12px;\n            line-height: 25px;\n            font-weight: bold;\n            margin: 0 0 0 10px;\n            float: left\n        }\n        .page-container h2 {\n            font-weight: bold;\n            font-size: 16px;\n            margin: 5px 0 20px\n        }\n        .page-container p {\n            color: #313131;\n            line-height: 20px;\n            font-size: 14px;\n            margin: 15px 0\n        }\n        .page-container img {\n            margin: 10px 0\n        }\n        .page-container h3 {\n            font-weight: bold;\n            font-size: 12px;\n            margin: 5px 0\n        }\n        .left {\n            float: left\n        }\n        .page-container-bottom-divider {\n            height: 15px;\n            border-bottom: 1px solid #ccc;\n            width: 100%;\n        }\n        .page-container-footer {\n            font-size: 12px;\n            margin-top: 15px;\n        }\n        .page-container-footer p, .page-container-footer span{\n            margin: 0;\n            padding: 0;\n            color: #494949;\n        }\n    </style>\n</head>\n<body>\n<div class=\"page\">\n    <div class=\"page-header\">\n        <div class=\"page-header-body\">\n            <p style=\"color:white; font-size: 20px\" th:text=\"${webName}\">Nimrod</p>\n<!--            <img class=\"left\" style=\"width:105px;height:24px;margin-right:50px\" src=\"https://rescdn.qqmail.com/bizmail/zh_CN/htmledition/images/bizmail/v3/logo_white.png\">-->\n        </div>\n        <div sytle=\"clear:left;\"></div>\n    </div>\n    <div class=\"page-container\">\n        <div class=\"page-container-body\">\n            <p>尊敬的用户：</p>\n            <p>&nbsp; &nbsp; &nbsp;\n                您的账号正在进行邮箱验证，本次请求的验证码为：<span style=\"font-weight: bold\" th:text=\"${verifyCode}\"></span>，30分钟内有效，切勿告知他人。\n            </p>\n        </div>\n<!--        <div style=\"font-size: 12px;color: #808080;margin-top: 20px;\">-->\n<!--            <span style=\"display: block\">管理平台：http://example.com</span>-->\n<!--            <span style=\"display: block\">企业帮助中心：http://help.example.com</span>-->\n<!--        </div>-->\n<!--        <div style=\"height: 30px;border-bottom: 1px solid #ccc;width: 100%;\"></div>-->\n        <div class=\"page-container-bottom-divider\"></div>\n        <div class=\"page-container-footer\">\n            <p th:if=\"${webName}\"><span th:text=\"${webName}\">Nimrod</span>：<a target=\"_blank\" th:href=\"${webUrl}\" th:text=\"${webUrl}\"></a></p>\n        </div>\n    </div>\n</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/mail/template/change_password_verify_code.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n    <!-- Standard Meta -->\n    <meta charset=\"utf-8\"/>\n    <style>\n        a {\n            color: #275fab;\n            text-decoration: none\n        }\n\n        .qmSysPage {\n            font-family: \"Microsoft YaHei\", \"Helvetica Neue\", \"lucida Grande\", Verdana;\n            background: #fff;\n            margin: 0 auto;\n            margin-bottom: 40px;\n            text-align: left;\n            position: relative;\n            Border-radius: 5px;\n            -moz-border-radius: 5px;\n            -webkit-border-radius: 5px\n        }\n\n        @media screen and (min-width: 1111px) {\n            .qmSysPage {\n                width: 778px\n            }\n        }\n\n        @media screen and (max-width: 600px) {\n            .qmSysPage {\n                width: 590px\n            }\n        }\n\n        @media screen and (max-width: 414px) {\n            .qmSysPage {\n                width: 350px\n            }\n        }\n\n        @media screen and (max-width: 320px) {\n            .qmSysPage {\n                width: 295px\n            }\n\n            .qmSysContent {\n                padding: 30px 11px 20px;\n                border: 1px solid #d4d4d4\n            }\n        }\n\n        @media screen and (min-width: 321px) {\n            .qmSysContent {\n                padding: 30px 27px 20px;\n                border: 1px solid #d4d4d4\n            }\n        }\n\n        .qmSysHeader {\n            background: #518bcb;\n            padding: 4px 6px 0;\n            Border-top-left-radius: 5px;\n            Border-top-right-radius: 5px;\n            -moz-border-radius-topleft: 5px;\n            -moz-border-radius-topright: 5px;\n            -webkit-border-top-left-radius: 5px;\n            -webkit-border-top-right-radius: 5px\n        }\n\n        .qmSysHeaderContainer {\n            zoom: 1;\n            padding: 15px 19px;\n            background: #518bcb;\n            border-bottom: 1px solid #467ec3;\n            overflow: hidden\n        }\n\n        .qmSysHeader h1 {\n            color: #fff;\n            font-size: 12px;\n            line-height: 25px;\n            font-weight: bold;\n            margin: 0 0 0 10px;\n            float: left\n        }\n\n        .qmSysContent h2 {\n            font-weight: bold;\n            font-size: 16px;\n            margin: 5px 0 20px\n        }\n\n        .qmSysContent p {\n            color: #313131;\n            line-height: 20px;\n            font-size: 13px;\n            margin: 15px 0\n        }\n\n        .qmSysContent img {\n            margin: 10px 0\n        }\n\n        .qmSysContent h3 {\n            font-weight: bold;\n            font-size: 12px;\n            margin: 5px 0\n        }\n\n        .qmSysSign {\n            padding-top: 0\n        }\n\n        .qmSysSign p {\n            color: #999;\n            line-height: 18px;\n            font-size: 12px;\n            margin: 5px 0\n        }\n\n        .left {\n            float: left\n        }\n\n        .qmtable {\n            font-size: 12px;\n            color: #696969;\n            line-height: 1.5;\n            width: 100%;\n            margin-bottom: 35px\n        }\n\n        .qmtable caption {\n            font-size: 12px;\n            border-bottom: 2px solid #749dd5;\n            text-align: left;\n            font-weight: bold\n        }\n\n        .qmtable tr {\n            background: #e7f1fb\n        }\n\n        .qmtable .qmtr_o {\n            background: #fff\n        }\n\n        .qmtable .qmtd_t {\n            width: 135px;\n            padding-left: 28px;\n            padding-right: 0\n        }\n\n        .qmtable thead tr {\n            background: #c0e0ff\n        }\n\n        .qmtable td {\n            border-bottom: 1px solid #ccc\n        }\n\n        .qmtable th, .qmtable td {\n            padding: 5px 3px\n        }\n\n        .table_tips {\n            margin-top: -30px;\n            color: #313131\n        }\n\n        .txt_green {\n            color: #2cb32c\n        }\n\n        .option_container {\n            margin-top: 20px;\n            color: #313131;\n            line-height: 22px\n        }\n\n        .option_container a {\n            text-decoration: underline;\n            font-size: 12px;\n            color: #0070c0;\n            margin-right: 20px\n        }\n\n        p.index {\n            text-indent: 2em;\n            word-break: break-all\n        }\n\n        .qyNewFuncContainer {\n            text-align: center;\n            width: 100%\n        }\n    </style>\n</head>\n<body>\n\n<div class=\"qmSysPage\">\n    <div class=\"qmSysHeader\">\n        <div class=\"qmSysHeaderContainer\">\n            <img class=\"left\" style=\"width:105px;height:24px;margin-right:50px\"\n                 src=\"https://rescdn.qqmail.com/bizmail/zh_CN/htmledition/images/bizmail/v3/logo_white.png\">\n        </div>\n        <div sytle=\"clear:left;\"></div>\n    </div>\n    <div class=\"qmSysContent\">\n        <div class=\"js_preview_content\"><p>你好：</p>\n            <p>\n                &nbsp; &nbsp; &nbsp;\n                你的企业邮帐号 test@example.com 于今天14日19:51左右在北京市登录，登录IP为：。若登录地址信息有误差，如有疑问请在电脑登录并查看自助查询。</p></div>\n        <div style=\"font-size: 12px;color: #808080;margin-top: 20px;\">\n            <span style=\"display: block\">管理平台：http://exmail.qq.com</span>\n            <span style=\"display: block\">企业邮箱帮助中心：http://service.exmail.qq.com</span>\n        </div>\n        <div style=\"height: 30px;border-bottom: 1px solid #ccc;width: 100%;\"></div>\n        <div style=\"font-size: 12px;color: #999999;margin-top: 15px;\">\n            管理平台\n        </div>\n    </div>\n</div>\n\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/mail/template/email_verify_code.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n    <!-- Standard Meta -->\n    <meta charset=\"utf-8\"/>\n    <style type=\"text/css\">\n        a {\n            color: #0058af;\n            /*color: #1e5494;*/\n            text-decoration: none\n        }\n\n        .page {\n            font-family: \"Microsoft YaHei\", \"Helvetica Neue\", \"lucida Grande\", Verdana;\n            background: #fff;\n            margin: 0 auto;\n            /*margin-bottom: 40px;*/\n            text-align: left;\n            position: relative;\n            /*padding: 40px;*/\n            border: 1px solid #c8cfda;\n        }\n\n        @media screen and (min-width: 1111px) {\n            .page {\n                width: 778px\n            }\n        }\n\n        @media screen and (max-width: 600px) {\n            .page {\n                width: 590px\n            }\n        }\n\n        @media screen and (max-width: 414px) {\n            .page {\n                width: 350px\n            }\n        }\n\n        @media screen and (max-width: 320px) {\n            .page {\n                width: 295px\n            }\n\n            .page-container {\n                padding: 10px 11px 20px;\n                border: 1px solid #d4d4d4\n            }\n        }\n\n        @media screen and (min-width: 321px) {\n            .page-container {\n                padding: 10px 27px 20px;\n                border: 1px solid #d4d4d4\n            }\n        }\n\n        .page-header {\n            /*background: #518bcb;*/\n            background: #0058af;\n            padding: 4px 6px 0;\n        }\n\n        .page-header-body {\n            zoom: 1;\n            padding: 0 20px;\n            background: #0058af;\n            border-bottom: 1px solid #0058af;\n            /*border-bottom: 1px solid #467ec3;*/\n            overflow: hidden\n        }\n\n        .page-container {\n            padding: 0 20px;\n        }\n\n        .page-container-body {\n            padding: 10px 0;\n        }\n\n        .page-header h1 {\n            color: #fff;\n            font-size: 12px;\n            line-height: 25px;\n            font-weight: bold;\n            margin: 0 0 0 10px;\n            float: left\n        }\n\n        .page-container h2 {\n            font-weight: bold;\n            font-size: 16px;\n            margin: 5px 0 20px\n        }\n\n        .page-container p {\n            color: #313131;\n            line-height: 20px;\n            font-size: 14px;\n            margin: 15px 0\n        }\n\n        .page-container img {\n            margin: 10px 0\n        }\n\n        .page-container h3 {\n            font-weight: bold;\n            font-size: 12px;\n            margin: 5px 0\n        }\n\n        .left {\n            float: left\n        }\n\n        .page-container-bottom-divider {\n            border-bottom: 1px solid #ccc;\n            width: 100%;\n        }\n\n        .page-container-footer {\n            font-size: 12px;\n            /*margin-top: 15px;*/\n            padding: 10px 0;\n            color: #494949;\n        }\n\n        .page-container-footer p, .page-container-footer span {\n            margin: 0;\n            padding: 0;\n            color: #494949;;\n        }\n    </style>\n</head>\n<body>\n<div class=\"page\">\n    <div class=\"page-header\">\n        <div class=\"page-header-body\">\n            <p style=\"color:white; font-size: 18px\" th:text=\"${webName}\">Nimrod</p>\n        </div>\n        <div sytle=\"clear:left;\"></div>\n    </div>\n    <div class=\"page-container\">\n        <div class=\"page-container-body\">\n            <p>验证码：<span style=\"font-weight: bold\" th:text=\"${verifyCode}\"></span>，该验证码10分钟内有效。为了保障您的账户安全，请勿向他人泄漏验证码信息。\n            </p>\n        </div>\n        <div class=\"page-container-bottom-divider\"></div>\n        <div class=\"page-container-footer\">\n            <p th:if=\"${webName}\"><span th:text=\"${webName}\">Nimrod</span>：<a target=\"_blank\" th:href=\"${webUrl}\"\n                                                                              th:text=\"${webUrl}\"></a></p>\n        </div>\n    </div>\n</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/mail/view_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">发件人：</td>\n            <td>\n                <input name=\"from\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n                <input name=\"id\" type=\"hidden\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">收件人：</td>\n            <td>\n                <input name=\"to\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">主题：</td>\n            <td>\n                <input name=\"subject\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">内容：</td>\n            <td><input name=\"text\" class=\"easyui-textbox\" style=\"height:100px;width:100%\"\n                       data-options=\"disabled: true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">是否为 HTML：</td>\n            <td><input name=\"html\" id=\"html\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"disabled: true\"></td>\n        </tr>\n    </table>\n</div>\n\n<script>\n    $(function () {\n        $('#html').combobox({\n            url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n            valueField: 'value',\n            textField: 'valueName',\n            disabled: true\n        });\n    });\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/quartz/job/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">任务类名：</td>\n            <td><input name=\"jobClassName\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">任务组名：</td>\n            <td><input name=\"jobGroup\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\"><a href=\"http://cron.qqe2.com/\" target=\"_blank\">CRON 表达式</a>：</td>\n            <td><input name=\"cronExpression\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">描述：</td>\n            <td><input name=\"description\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>"
  },
  {
    "path": "src/main/resources/templates/quartz/job/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\"><a href=\"http://cron.qqe2.com/\" target=\"_blank\">CRON 表达式</a></td>\n            <td><input name=\"cronExpression\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\">\n                <input name=\"jobClassName\" type=\"hidden\">\n                <input name=\"jobGroup\" type=\"hidden\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">描述：</td>\n            <td><input name=\"description\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>"
  },
  {
    "path": "src/main/resources/templates/quartz/job/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div id=\"jobToolbar\">\n    <nimrod:security authority=\"/COMPONENT/SYSTEM/API/PAGE_ALL/API_CATEGORY_ADD_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\" onclick=\"jobAddDialog();\">新增</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/SYSTEM/API/PAGE_ALL/API_CATEGORY_EDIT_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\" onclick=\"jobEditDialog();\">编辑</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/QUARTZ/JOB_PAUSE_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-pause\" onclick=\"jobPauseAll();\">暂停</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/QUARTZ/JOB_RESUME_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-play\" onclick=\"jobResumeAll();\">运行</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/QUARTZ/JOB_DELETE_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\" onclick=\"jobDeleteAll();\">删除</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/QUARTZ/JOB_RESET_STATE\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-repeat\"\n           onclick=\"jobResetState();\">重置状态</a>\n    </nimrod:security>\n</div>\n<table id=\"job\"></table>\n\n<script type=\"text/javascript\">\n    $(function () {\n        var QUARTZ_TRIGGER_STATE = [];\n        // Quartz 任务\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'jobClassName', title: '任务类名'},\n            {field: 'jobGroup', title: '任务分组'},\n            {\n                field: 'triggerState', title: '任务状态', formatter: function (value, row, index) {\n                    return expressui.grid.formatter(value, QUARTZ_TRIGGER_STATE);\n                }\n            },\n            {field: 'cronExpression', title: 'CRON 表达式'},\n            {field: 'timeZoneId', title: '时区 ID'},\n            {field: 'description', title: '描述'},\n        ];\n        $('#job').datagrid(expressui.grid.create, {\n            title: 'Quartz 任务管理',\n            url: Url.Quartz.Api.JOB + '/page_all',\n            columns: [columns],\n            onBeforeLoad: function (param) {\n                util.ajax({\n                    url: Url.System.Api.DICTIONARY + '/list_all_by_key/QUARTZ_TRIGGER_STATE',\n                    success: function (data) {\n                        if (data) {\n                            QUARTZ_TRIGGER_STATE = data;\n                        }\n                    }\n                });\n            }\n        });\n    });\n\n    function jobAddDialog() {\n        $('#jobAddDialog').dialog(expressui.dialog.create, {\n            title: '新增任务',\n            width: 448,\n            grid: {type: 'datagrid', selector: '#job'},\n            href: Url.Quartz.Page.JOB + '/add_dialog',\n            get: {url: Url.Quartz.Api.JOB + '/one?jobClassName={jobClassName}&jobGroup={jobGroup}', method: 'get'},\n            save: {\n                url: Url.Quartz.Api.JOB + '/add_one',\n                method: 'post'\n            },\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'datagrid', selector: '#job'}],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function jobEditDialog() {\n        var checked = $('#job').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (checked) {\n            $('#jobEditDialog').dialog(expressui.dialog.create, {\n                title: '编辑任务',\n                width: 448,\n                grid: {type: 'datagrid', selector: '#job'},\n                href: Url.Quartz.Page.JOB + '/edit_dialog',\n                get: {url: Url.Quartz.Api.JOB + '/one?jobClassName={jobClassName}&jobGroup={jobGroup}', method: 'get'},\n                save: {url: Url.Quartz.Api.JOB + '/save_one', method: 'post'},\n                buttons: [{\n                    text: '保存',\n                    iconCls: 'iconfont icon-save',\n                    handler: expressui.dialog.save,\n                    reload: [{type: 'datagrid', selector: '#job'}],\n                    success: '保存成功'\n                }, {\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n        }\n    }\n\n    function jobPauseAll() {\n        var checked = $('#job').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        if (!checked) {\n            return;\n        }\n        var jobClassNameList = [];\n        var jobGroupList = [];\n        for (var i = 0; i < checked.length; i++) {\n            jobClassNameList.push(checked[i].jobClassName);\n            jobGroupList.push(checked[i].jobGroup);\n        }\n        $('#job').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.Quartz.Api.JOB + '/pause_all',\n            method: 'post',\n            success: '操作成功',\n            data: {'jobClassName[]': jobClassNameList, 'jobGroup[]': jobGroupList},\n            reload: [{type: 'datagrid', selector: '#job'}],\n        });\n    }\n\n    function jobResumeAll() {\n        var checked = $('#job').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        if (!checked) {\n            return;\n        }\n        var jobClassNameList = [];\n        var jobGroupList = [];\n        for (var i = 0; i < checked.length; i++) {\n            jobClassNameList.push(checked[i].jobClassName);\n            jobGroupList.push(checked[i].jobGroup);\n        }\n        $('#job').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.Quartz.Api.JOB + '/resume_all',\n            method: 'post',\n            success: '操作成功',\n            data: {'jobClassName[]': jobClassNameList, 'jobGroup[]': jobGroupList},\n            reload: [{type: 'datagrid', selector: '#job'}],\n        });\n    }\n\n    function jobDeleteAll() {\n        var checked = $('#job').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        if (!checked) {\n            return;\n        }\n        var jobClassName = [];\n        var jobGroup = [];\n        for (var i = 0; i < checked.length; i++) {\n            jobClassName.push(checked[i].jobClassName);\n            jobGroup.push(checked[i].jobGroup);\n        }\n        $('#job').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.Quartz.Api.JOB + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            data: {'jobClassName[]': jobClassName, 'jobGroup[]': jobGroup},\n            reload: [{type: 'datagrid', selector: '#job'}],\n        });\n    }\n\n    function jobResetState() {\n        var checked = $('#job').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        if (!checked) {\n            return;\n        }\n        var jobClassName = [];\n        var jobGroup = [];\n        for (var i = 0; i < checked.length; i++) {\n            jobClassName.push(checked[i].jobClassName);\n            jobGroup.push(checked[i].jobGroup);\n        }\n        $('#job').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.Quartz.Api.JOB + '/reset_state',\n            method: 'post',\n            success: '操作成功',\n            data: {'jobClassName[]': jobClassName, 'jobGroup[]': jobGroup},\n            reload: [{type: 'datagrid', selector: '#job'}],\n        });\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/quartz/job_runtime_log/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">API 名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求地址（url）：</td>\n            <td><input name=\"url\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">权限（authority）：</td>\n            <td><input name=\"authority\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" value=\"0\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>"
  },
  {
    "path": "src/main/resources/templates/quartz/job_runtime_log/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">API 名称：</td>\n            <td>\n                <input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\">\n                <input name=\"id\" type=\"hidden\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求地址（url）：</td>\n            <td><input name=\"url\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">权限（authority）：</td>\n            <td><input name=\"authority\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n"
  },
  {
    "path": "src/main/resources/templates/quartz/job_runtime_log/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div id=\"jobRuntimeLogToolbar\">\n    <nimrod:security authority=\"/COMPONENT/SYSTEM/OPERATION_LOG/PAGE_ALL/OPERATION_LOG_DELETE_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n           onclick=\"jobRuntimeLogDeleteAll();\">删除</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/SYSTEM/OPERATION_LOG/PAGE_ALL/OPERATION_LOG_CLEAR_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n           onclick=\"jobRuntimeLogClearAll();\">清空日志</a>\n    </nimrod:security>\n</div>\n<table id=\"jobRuntimeLog\"></table>\n\n<script type=\"text/javascript\">\n    $(function () {\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'jobClassName', title: '任务类名'},\n            {field: 'jobGroup', title: '任务分组'},\n            {field: 'consumingTime', title: '任务运行耗时（毫秒）'},\n            {field: 'jobException', title: '任务异常信息'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#jobRuntimeLog').datagrid(expressui.grid.create, {\n            title: '任务运行日志',\n            columns: [columns],\n            url: Url.Quartz.Api.JOB_RUNTIME_LOG + '/page_all',\n        });\n    });\n\n    function jobRuntimeLogDeleteAll() {\n        $('#jobRuntimeLog').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.Quartz.Api.JOB_RUNTIME_LOG + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            reload: {type: 'datagrid', selector: '#jobRuntimeLog'}\n        });\n    }\n\n    function jobRuntimeLogClearAll() {\n        $.messager.confirm('信息', '确定要操作吗', function (ok) {\n            if (ok) {\n                $.ajax({\n                    url: Url.Quartz.Api.JOB_RUNTIME_LOG + '/clear_all',\n                    type: 'POST',\n                    dataType: 'JSON',\n                    success: function (data) {\n                        $.messager.show({title: '信息', msg: '操作成功'});\n                        $('#jobRuntimeLog').datagrid('reload');\n                    },\n                    error: function (xhr) {\n                        if (xhr.status !== 200) {\n                            $.messager.alert('信息', '操作失败：' + xhr.responseJSON.message, 'error');\n                        } else {\n                            $.messager.show({title: '信息', msg: '操作成功'});\n                            $('#jobRuntimeLog').datagrid('reload');\n                        }\n                    }\n                })\n            }\n        });\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/system/close.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Title</title>\n</head>\n<body>\n网站已关闭！\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/system/dictionary/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">字典键名：</td>\n            <td><input name=\"keyName\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">字典键：</td>\n            <td><input name=\"key\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">字典值名：</td>\n            <td><input name=\"valueName\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">字典值别名：</td>\n            <td><input name=\"valueSlug\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">字典值：</td>\n            <td><input name=\"value\" class=\"easyui-textbox\" style=\"height: 50px;\"\n                       data-options=\"multiline:true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">字典分类：</td>\n            <td><input name=\"dictionaryCategoryId\" id=\"dictionaryCategoryId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">是否启用：</td>\n            <td><input name=\"enabled\" id=\"enabled\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" value=\"0\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n\n<script type=\"text/javascript\">\n    $(function () {\n        $('#dictionaryCategoryId').combotree({\n            url: Url.System.Api.DICTIONARY_CATEGORY + '/list_all_as_combo_tree'\n        });\n        $('#enabled').combobox({\n            url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n            valueField: 'value',\n            textField: 'valueName',\n            required: true\n        });\n    });\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/system/dictionary/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">字典键名：</td>\n            <td><input name=\"id\" type=\"hidden\"><input name=\"keyName\" class=\"easyui-textbox\"\n                                                      data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">字典键：</td>\n            <td><input name=\"key\" class=\"easyui-textbox\" data-options=\"required:true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">字典值名：</td>\n            <td><input name=\"valueName\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">字典值别名：</td>\n            <td><input name=\"valueSlug\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">字典值：</td>\n            <td><input name=\"value\" class=\"easyui-textbox\" style=\"height: 50px;\"\n                       data-options=\"multiline:true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">字典分类：</td>\n            <td><input name=\"dictionaryCategoryId\" id=\"dictionaryCategoryId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">是否启用：</td>\n            <td><input name=\"enabled\" id=\"enabled\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n\n<script type=\"text/javascript\">\n    $(function () {\n        $('#dictionaryCategoryId').combotree({\n            url: Url.System.Api.DICTIONARY_CATEGORY + '/list_all_as_combo_tree'\n        });\n        $('#enabled').combobox({\n            url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n            valueField: 'value',\n            textField: 'valueName',\n            required: true\n        });\n    });\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/system/dictionary/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div class=\"easyui-layout\" data-options=\"fit:true\">\n    <div data-options=\"region:'west',split:true\" style=\"width:45%\">\n        <div id=\"dictionaryCategoryToolbar\">\n            <nimrod:security authority=\"/COMPONENT/SYSTEM/DICTIONARY/PAGE_ALL/DICTIONARY_CATEGORY_ADD_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"dictionaryCategoryAddDialog();\">新增</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/SYSTEM/DICTIONARY/PAGE_ALL/DICTIONARY_CATEGORY_EDIT_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n                   onclick=\"dictionaryCategoryEditDialog();\">编辑</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/SYSTEM/DICTIONARY/PAGE_ALL/DICTIONARY_CATEGORY_DELETE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"dictionaryCategoryDeleteAll();\">删除</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/SYSTEM/DICTIONARY/PAGE_ALL/DICTIONARY_CATEGORY_EXPORT_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-download\"\n                   onclick=\"dictionaryCategoryExportAll();\">导出</a>\n            </nimrod:security>\n            <hr/>\n            <nimrod:security authority=\"/COMPONENT/SYSTEM/DICTIONARY/PAGE_ALL/DICTIONARY_CATEGORY_IMPORT_ALL\">\n                <label>导入：</label><input id=\"file\" class=\"easyui-filebox\" style=\"width:200px\"\n                                         data-options=\"buttonText:'选择文件'\"> <a href=\"javascript:\"\n                                                                              class=\"easyui-linkbutton\"\n                                                                              iconCls=\"iconfont icon-upload\"\n                                                                              id=\"uploadButton\">立即导入</a>\n            </nimrod:security>\n        </div>\n        <table id=\"dictionaryCategory\"></table>\n    </div>\n    <div data-options=\"region:'center',split:true\">\n        <div id=\"dictionaryToolbar\">\n            <nimrod:security authority=\"/COMPONENT/SYSTEM/DICTIONARY/PAGE_ALL/DICTIONARY_ADD_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"dictionaryAddDialog();\">新增</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/SYSTEM/DICTIONARY/PAGE_ALL/DICTIONARY_EDIT_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n                   onclick=\"dictionaryEditDialog();\">编辑</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/SYSTEM/DICTIONARY/PAGE_ALL/DICTIONARY_DELETE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"dictionaryDeleteAll();\">删除</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/SYSTEM/DICTIONARY/PAGE_ALL/SYNC_TO_MEMORY\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-refresh\"\n                   onclick=\"syncToMemory();\">同步所有字典到内存</a>\n                <span style=\"margin-top:20px;font-size:12px;color:#FA6F03;text-align: center\">更改数据字典后，同步后才会生效！</span>\n            </nimrod:security>\n        </div>\n        <table id=\"dictionary\"></table>\n    </div>\n</div>\n\n<script type=\"text/javascript\">\n    $(function () {\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '分类名称'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#dictionaryCategory').treegrid(expressui.grid.create, {\n            title: '字典分类',\n            url: Url.System.Api.DICTIONARY_CATEGORY + '/list_all_parent',\n            expandUrl: Url.System.Api.DICTIONARY_CATEGORY + '/list_all_by_parent_id?parentId={id}',\n            columns: [columns],\n            onCheck: function (row) {\n                if (row) {\n                    $('#dictionary').datagrid('reload', Url.System.Api.DICTIONARY + '/page_all_by_dictionary_category_id?dictionaryCategoryId=' + row.id);\n                }\n            },\n            onUncheck: function (index, row) {\n                $('#dictionary').datagrid('loadData', []);\n            }\n        });\n\n        var IS_OR_NOT = [];\n        columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'keyName', title: '字典键名'},\n            {field: 'key', title: '字典键'},\n            {field: 'valueName', title: '字典值名'},\n            {field: 'valueSlug', title: '字典值别名'},\n            {field: 'value', title: '字典值'},\n            {\n                field: 'enabled', title: '是否启用', formatter: function (value, row, index) {\n                    return expressui.grid.formatter(value, IS_OR_NOT);\n                }\n            },\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#dictionary').datagrid(expressui.grid.create, {\n            title: '数据字典',\n            columns: [columns],\n            onBeforeLoad: function (param) {\n                util.ajax({\n                    url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n                    success: function (data) {\n                        if (data) {\n                            IS_OR_NOT = data;\n                        }\n                    }\n                });\n            }\n        });\n    });\n\n    function dictionaryCategoryAddDialog() {\n        $('#dictionaryCategoryAddDialog').dialog(expressui.dialog.create, {\n            title: '新增字典分类',\n            grid: {type: 'treegrid', selector: '#dictionaryCategory'},\n            href: Url.System.Page.DICTIONARY_CATEGORY + '/add_dialog',\n            get: {url: Url.System.Api.DICTIONARY_CATEGORY + '/one/{id}', method: 'get'},\n            save: {url: Url.System.Api.DICTIONARY_CATEGORY + '/add_one', method: 'post'},\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'treegrid', selector: '#dictionaryCategory'}, {\n                    type: 'datagrid',\n                    selector: '#dictionary',\n                    data: []\n                }],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function dictionaryCategoryEditDialog() {\n        var one = $('#dictionaryCategory').treegrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (!one) {\n            return;\n        }\n        $('#dictionaryCategoryEditDialog').dialog(expressui.dialog.create, {\n            title: '编辑字典分类',\n            grid: {type: 'treegrid', selector: '#dictionaryCategory'},\n            href: Url.System.Page.DICTIONARY_CATEGORY + '/edit_dialog',\n            get: {url: Url.System.Api.DICTIONARY_CATEGORY + '/one/{id}', method: 'get'},\n            save: {url: Url.System.Api.DICTIONARY_CATEGORY + '/save_one', method: 'post'},\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.save,\n                reload: [{type: 'treegrid', selector: '#dictionaryCategory'}, {\n                    type: 'datagrid',\n                    selector: '#dictionary',\n                    data: []\n                }],\n                success: '保存成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function dictionaryCategoryDeleteAll() {\n        $('#dictionaryCategory').treegrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.System.Api.DICTIONARY_CATEGORY + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            reload: [{type: 'treegrid', selector: '#dictionaryCategory'}, {\n                type: 'datagrid',\n                selector: '#dictionary',\n                data: []\n            }]\n        });\n    }\n\n    function dictionaryCategoryExportAll() {\n        var checkedAll = $('#dictionaryCategory').treegrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        if (!checkedAll) {\n            return;\n        }\n        var idList = [];\n        if (checkedAll && checkedAll.length > 0) {\n            for (var i = 0; i < checkedAll.length; i++) {\n                idList.push(checkedAll[i].id);\n            }\n            window.open(Url.System.Api.DICTIONARY + '/export_all_by_dictionary_category_id_list?dictionaryCategoryIdList=' + idList)\n        }\n    }\n\n    function dictionaryAddDialog() {\n        $('#dictionaryAddDialog').dialog(expressui.dialog.create, {\n            title: '新增字典',\n            grid: {type: 'datagrid', selector: '#dictionary'},\n            href: Url.System.Page.DICTIONARY + '/add_dialog',\n            get: {url: Url.System.Api.DICTIONARY + '/one/{id}', method: 'get'},\n            save: {url: Url.System.Api.DICTIONARY + '/add_one', method: 'post'},\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'datagrid', selector: '#dictionary'}],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function dictionaryEditDialog() {\n        var one = $('#dictionary').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (!one) {\n            return;\n        }\n        $('#dictionaryEditDialog').dialog(expressui.dialog.create, {\n            title: '编辑字典',\n            grid: {type: 'datagrid', selector: '#dictionary'},\n            href: Url.System.Page.DICTIONARY + '/edit_dialog',\n            get: {url: Url.System.Api.DICTIONARY + '/one/{id}', method: 'get'},\n            save: {url: Url.System.Api.DICTIONARY + '/save_one', method: 'post'},\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.save,\n                reload: [{type: 'datagrid', selector: '#dictionary'}],\n                success: '保存成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function dictionaryDeleteAll() {\n        $('#dictionary').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.System.Api.DICTIONARY + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            reload: {type: 'datagrid', selector: '#dictionary'}\n        });\n    }\n\n    function syncToMemory() {\n        $.messager.confirm('信息', '确定继续操作吗？', function (ok) {\n            if (ok) {\n                util.ajax({\n                    url: Url.System.Api.DICTIONARY + '/sync_to_memory',\n                    type: 'post',\n                    success: function (data) {\n                        $.messager.show({title: '信息', msg: '操作成功'});\n                    },\n                    error: function (XMLHttpRequest) {\n                        if (XMLHttpRequest.status === 200) {\n                            $.messager.show({title: '信息', msg: '操作成功'});\n                        } else {\n                            $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                        }\n                    }\n                });\n            }\n        });\n    }\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/system/dictionary_category/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">分类名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">父级分类：</td>\n            <td><input name=\"parentId\" id=\"parentId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" value=\"0\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<script>\n    $(function () {\n        $('#parentId').combotree({\n            url: Url.System.Api.DICTIONARY_CATEGORY + '/list_all_as_combo_tree'\n        });\n    });\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/system/dictionary_category/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">分类名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\">\n                <input name=\"id\" type=\"hidden\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">父级分类：</td>\n            <td><input name=\"parentId\" id=\"parentId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<script>\n    $(function () {\n        $('#parentId').combotree({\n            url: Url.System.Api.DICTIONARY_CATEGORY + '/list_all_as_combo_tree'\n        });\n    });\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/system/file/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">文件名：</td>\n            <td>\n                <input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\">\n                <input name=\"id\" type=\"hidden\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">文件大小：</td>\n            <td>\n                <input name=\"prettySize\" class=\"easyui-textbox\" data-options=\"disabled:true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">唯一标识符：</td>\n            <td>\n                <input name=\"guid\" class=\"easyui-textbox\" data-options=\"disabled:true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">MIME 类型：</td>\n            <td>\n                <input name=\"mimeType\" class=\"easyui-textbox\" data-options=\"disabled:true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">文件路径：</td>\n            <td><input name=\"path\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true,disabled:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\" data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n"
  },
  {
    "path": "src/main/resources/templates/system/file/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n    <script type=\"text/javascript\" charset=\"UTF-8\" th:src=\"@{/assets/vendor/jquery.form.min.js}\"></script>\n</head>\n<body>\n<div id=\"fileToolbar\">\n    <nimrod:security authority=\"/COMPONENT/FILE/PAGE_ALL/UPLOAD_ONE_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-upload\" onclick=\"fileUploadOneDialog();\">单文件上传</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/FILE/PAGE_ALL/UPLOAD_ONE_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-upload\" onclick=\"fileUploadAllDialog();\">多文件上传</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/SYSTEM/FILE/PAGE_ALL/FILE_EDIT_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\" onclick=\"fileEditDialog();\">编辑</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/SYSTEM/FILE/PAGE_ALL/FILE_DELETE_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\" onclick=\"fileDeleteAll();\">删除</a>\n    </nimrod:security>\n</div>\n<table id=\"file\"></table>\n\n<script type=\"text/javascript\">\n    $(function () {\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'username', title: '上传用户'},\n            // {field: 'file_authority', title: '访问权限'},\n            {\n                field: 'download', title: '操作', formatter: function (value, row, index) {\n                    value = '<a target=\"_blank\" href=\"' + Url.System.Api.FILE + '/download/' + row.guid + '\">下载</a>';\n                    return value;\n                }\n            },\n            {\n                field: 'preview', title: '预览', formatter: function (value, row, index) {\n                    if (row.mimeType.indexOf('image') > -1) {\n                        value = '<img style=\"width:60px;height:60px\" src=\"' + Url.System.Api.FILE + '/download/' + row.guid + '\"/>';\n                        return value;\n                    }\n                }\n            },\n            {field: 'name', title: '文件名'},\n            {field: 'prettySize', title: '文件大小'},\n            {field: 'guid', title: '唯一标识符'},\n            {field: 'mimeType', title: 'MIME 类型'},\n            {field: 'path', title: '文件路径'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#file').datagrid(expressui.grid.create, {\n            title: '文件管理',\n            columns: [columns],\n            url: Url.System.Api.FILE + '/page_all'\n        });\n    });\n\n    function fileUploadOneDialog() {\n        $('#uploadOneDialog').dialog(expressui.dialog.create, {\n            title: '单文件上传',\n            height: 200,\n            width: 410,\n            grid: {type: 'datagrid', selector: '#file'},\n            href: Url.System.Page.FILE + '/upload_one_dialog',\n            buttons: [{\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function fileUploadAllDialog() {\n        $('#uploadAllDialog').dialog(expressui.dialog.create, {\n            title: '多文件上传',\n            height: 200,\n            width: 410,\n            grid: {type: 'datagrid', selector: '#file'},\n            href: Url.System.Page.FILE + '/upload_all_dialog',\n            buttons: [{\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function fileEditDialog() {\n        var one = $('#file').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (one) {\n            $('#fileEditDialog').dialog(expressui.dialog.create, {\n                title: '编辑文件',\n                width: 600,\n                height: 390,\n                grid: {type: 'datagrid', selector: '#file'},\n                selector: '#fileEditDialog',\n                href: Url.System.Page.FILE + '/edit_dialog',\n                get: {url: Url.System.Api.FILE + '/one/{id}', method: 'get'},\n                save: {url: Url.System.Api.FILE + '/save_one', method: 'post'},\n                buttons: [{\n                    text: '保存',\n                    iconCls: 'iconfont icon-save',\n                    handler: expressui.dialog.save,\n                    reload: [{type: 'datagrid', selector: '#file'}],\n                    success: '保存成功'\n                }, {\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n        }\n    }\n\n    function fileDeleteAll() {\n        $('#file').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.System.Api.FILE + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            reload: {type: 'datagrid', selector: '#file'}\n        });\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/system/file/upload_all_dialog.html",
    "content": "<div class=\"submit-form\">\n    <p>\n        <label for=\"fileUpload\">上传文件：</label>\n        <input id=\"fileUpload\" class=\"easyui-filebox\" style=\"width:220px\"\n               data-options=\"buttonText:'选择文件',multiple:true\">\n        <!--<input type=\"file\" id=\"file\" style=\"width:220px\" multiple=\"multiple\" accept=\"*/*\">-->\n        <a id=\"uploadButton\" href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-upload\">上传</a>\n    </p>\n    <p style=\"padding-top:10px\">\n    <div id=\"progress\" class=\"easyui-progressbar\" style=\"width:350px;\"></div>\n    </p>\n</div>\n\n<script type=\"text/javascript\">\n\n    var progress = $('#progress');\n\n    $('#uploadButton').click(function () {\n        if (!window._ajaxing) {\n            window._ajaxing = upload();\n        } else {\n            progress.progressbar('setValue', 0);\n            progress.progressbar({text: '上传取消：0%', value: 0});\n            window._ajaxing.abort();\n            window._ajaxing = undefined;\n        }\n        if (window._ajaxing) {\n            $(this).linkbutton({text: '取消', iconCls: 'iconfont icon-close'});\n        } else {\n            $(this).linkbutton({text: '上传', iconCls: 'iconfont icon-upload'});\n        }\n    });\n\n    function upload() {\n        var formData = new FormData();\n        var files = $('#fileUpload').filebox('files');\n        for (var i = 0; files.length > i; i++) {\n            formData.append('file[]', files[i]);\n        }\n        return $.ajax({\n            url: Url.System.Api.FILE + '/upload_all',\n            type: 'post',\n            data: formData,\n            processData: false, // 不要对data参数进行序列化处理，默认为true\n            contentType: false, // 不要设置Content-Type请求头，因为文件数据是以 multipart/form-data 来编码\n            xhr: function () {\n                var xhr = $.ajaxSettings.xhr();\n                if (xhr.upload) {\n                    xhr.upload.addEventListener('progress', function (e) {\n                        if (e.lengthComputable) {\n                            var total = e.total;\n                            var position = e.loaded || e.position;\n                            var percent = Math.ceil(position * 100 / total);\n                            progress.progressbar('setValue', percent);\n                            progress.progressbar({text: '正在上传...' + percent + '%'});\n                            if (percent === 100) {\n                                progress.progressbar({text: '正在保存，请稍等...100%', value: 100});\n                            }\n                        }\n                    }, false);\n                }\n                return xhr;\n\n            },\n            success: function (res, statusText, xhr) {\n                if (res && res.code) {\n                    progress.progressbar('setValue', 0);\n                    progress.progressbar({text: '上传失败：0%', value: 0});\n                    $.messager.alert('信息', res.message, 'error');\n                } else {\n                    if (xhr.readyState === 4) {\n                        progress.progressbar('setValue', 0);\n                        progress.progressbar({text: '未开始：0%', value: 0});\n                        $('#fileUpload').filebox('clear');\n                        $.messager.show({title: '信息', msg: '上传成功'});\n                        $('#file').datagrid('reload');\n                    }\n                }\n                $('#uploadButton').linkbutton({text: '上传', iconCls: 'iconfont icon-upload'});\n                window._ajaxing = undefined;\n            },\n            error: function (xhr) {\n                progress.progressbar('setValue', 0);\n                progress.progressbar({text: '上传失败：0%', value: 0});\n                if (xhr.responseJSON) {\n                    $.messager.alert('信息', xhr.responseJSON.message, 'error');\n                }\n                $('#uploadButton').linkbutton({text: '上传', iconCls: 'iconfont icon-upload'});\n                window._ajaxing = undefined;\n            }\n        });\n    }\n\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/system/file/upload_one_dialog.html",
    "content": "<div class=\"submit-form\">\n    <p>\n        <label for=\"fileInput\">上传文件：</label>\n        <input id=\"fileInput\" class=\"easyui-filebox\" name=\"file\" style=\"width:220px\" data-options=\"buttonText:'选择文件'\">\n        <a id=\"uploadButton\" href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-upload\">上传</a>\n    </p>\n    <p style=\"padding-top:10px\">\n    <div id=\"progress\" class=\"easyui-progressbar\" style=\"width:350px;\"></div>\n    </p>\n</div>\n\n<script type=\"text/javascript\">\n    var progress = $('#progress');\n    var uploadButton = $('#uploadButton');\n    var fileInput = $('#fileInput');\n    progress.progressbar({text: '未开始：0%', value: 0});\n    window._fileUploading = undefined;\n    uploadButton.click(function () {\n        if (window._fileUploading) {\n            var jqxhr = $('#uploadOneDialog').find('form').data('jqxhr');\n            if (jqxhr) {\n                jqxhr.abort();\n            }\n            progress.progressbar({text: '上传取消：0%', value: 0});\n            window._fileUploading = undefined;\n        } else {\n            console.log(window._fileUploading);\n            fileUploading();\n            console.log(window._fileUploading);\n        }\n        if (window._fileUploading) {\n            uploadButton.linkbutton({text: '取消', iconCls: 'iconfont icon-close'});\n        } else {\n            uploadButton.linkbutton({text: '上传', iconCls: 'iconfont icon-upload'});\n        }\n    });\n\n    function fileUploading() {\n        console.log(1);\n        $('#uploadOneDialog').find('form').ajaxSubmit({\n            url: Url.System.Api.FILE + '/upload_one',\n            type: 'post',\n            contentType: false,\n            processData: false,\n            // contentType: \"application/json;charset=utf-8\",\n            beforeSubmit: function (formData, jqForm, options) {\n                console.log(formData);\n                console.log(jqForm);\n                console.log(options);\n                var files = fileInput.filebox('files');\n                console.log(files);\n                progress.progressbar({text: '未开始：0%', value: 0});\n                uploadButton.linkbutton({text: '上传', iconCls: 'iconfont icon-upload'});\n                return true;\n            },\n            uploadProgress: function (event, position, total, percentComplete) {\n                progress.progressbar({text: '正在上传...' + percentComplete + '%', value: percentComplete});\n                if (percentComplete === 100) {\n                    progress.progressbar({text: '正在保存，请稍等...100%', value: 100});\n                }\n            },\n            success: function (res, statusText, xhr, $form) {\n                console.log(res);\n                if (res && res.code) {\n                    progress.progressbar({text: '上传失败：0%', value: 0});\n                    $.messager.alert('信息', res.message, 'error');\n                } else {\n                    if (xhr.readyState === 4) {\n                        progress.progressbar({text: '未开始：0%', value: 0});\n                        fileInput.filebox('clear');\n                        $.messager.show({title: '信息', msg: '上传成功'});\n                        $('#file').datagrid('reload');\n                    }\n                }\n                uploadButton.linkbutton({text: '上传', iconCls: 'iconfont icon-upload'});\n                window._fileUploading = undefined;\n            },\n            error: function (xhr) {\n                progress.progressbar({text: '上传失败：0%', value: 0});\n                if (xhr.responseJSON) {\n                    $.messager.alert('信息', xhr.responseJSON.message, 'error');\n                }\n                uploadButton.linkbutton({text: '上传', iconCls: 'iconfont icon-upload'});\n                window._fileUploading = undefined;\n            },\n        });\n        window._fileUploading = true\n    }\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/system/file/upload_one_dialog.html.bak",
    "content": "\n<div class=\"submit-form\">\n    <p>\n        <label for=\"fileUpload\">上传文件：</label>\n        <input id=\"fileUpload\" class=\"easyui-filebox\" style=\"width:220px\" data-options=\"buttonText:'选择文件'\">\n        <a id=\"uploadButton\" href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-upload\">上传</a>\n    </p>\n    <p style=\"padding-top:10px\"><div id=\"progress\" class=\"easyui-progressbar\" style=\"width:350px;\"></div></p>\n</div>\n\n<script type=\"text/javascript\">\n    var progress = $('#progress');\n    $('#uploadButton').click(function () {\n        if(!window._ajaxing) {\n            window._ajaxing = upload();\n        } else {\n            progress.progressbar('setValue', 0);\n            progress.progressbar({text: '上传取消：0%', value: 0});\n            window._ajaxing.abort();\n            window._ajaxing = undefined;\n        }\n        if(window._ajaxing) {\n            $(this).linkbutton({text: '取消', iconCls: 'iconfont icon-close'});\n        } else {\n            $(this).linkbutton({text: '上传', iconCls: 'iconfont icon-upload'});\n        }\n    });\n    function upload() {\n        var formData = new FormData();\n        var file = $('#fileUpload').filebox('files')[0];\n        formData.append('file', file);\n        return $.ajax({\n            url: Url.System.Api.FILE + '/upload_one',\n            type: 'post',\n            data: formData,\n            processData: false, // 不要对data参数进行序列化处理，默认为true\n            contentType: false, // 不要设置Content-Type请求头，因为文件数据是以 multipart/form-data 来编码\n            xhr: function () {\n                var xhr = $.ajaxSettings.xhr();\n                if (xhr.upload) {\n                    xhr.upload.addEventListener('progress', function (e) {\n                        if (e.lengthComputable) {\n                            var total = e.total;\n                            var position = e.loaded || e.position;\n                            var percent = Math.ceil(position * 100 / total);\n                            progress.progressbar('setValue', percent);\n                            progress.progressbar({text: '正在上传...' + percent + '%'});\n                            if (percent === 100) {\n                                progress.progressbar({text: '正在保存，请稍等...100%', value: 100});\n                            }\n                        }\n                    }, false);\n                }\n                return xhr;\n            },\n            success: function (res, statusText, xhr) {\n                if (res && res.code) {\n                    progress.progressbar('setValue', 0);\n                    progress.progressbar({text: '上传失败：0%', value: 0});\n                    $.messager.alert('信息', res.message, 'error');\n                } else {\n                    if (xhr.readyState === 4) {\n                        progress.progressbar('setValue', 0);\n                        progress.progressbar({text: '未开始：0%', value: 0});\n                        $('#fileUpload').filebox('clear');\n                        $.messager.show({title: '信息', msg: '上传成功'});\n                        $('#file').datagrid('reload');\n                    }\n                }\n                $('#uploadButton').linkbutton({text: '上传', iconCls: 'iconfont icon-upload'});\n                window._ajaxing= undefined;\n            },\n            error: function (xhr) {\n                progress.progressbar('setValue', 0);\n                progress.progressbar({text: '上传失败：0%', value: 0});\n                if(xhr.responseJSON) {\n                    $.messager.alert('信息', xhr.responseJSON.message, 'error');\n                }\n                $('#uploadButton').linkbutton({text: '上传', iconCls: 'iconfont icon-upload'});\n                window._ajaxing= undefined;\n            }\n        });\n    }\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/system/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base(title=${#servletContext.getAttribute('WEB.NAME')})\"></div>\n    <link rel=\"stylesheet\" type=\"text/css\" th:href=\"@{/assets/css/index.css}\">\n    <script type=\"text/javascript\" th:src=\"@{/assets/js/index.js}\"></script>\n</head>\n<body id=\"index\">\n<noscript>当你看到这条信息，意味着 JavaScript 已被你的浏览器禁用，请开启 JavaScript 以使你的设备正常访问。</noscript>\n<!--<div class=\"loading-wrap\" id=\"loading\" style=\"display: none;\">-->\n<!--<div class=\"loading-content\">-->\n<!--<div class=\"loading-round\"></div>-->\n<!--<div class=\"loading-dot\"></div>-->\n<!--</div>-->\n<!--</div>-->\n<!--[if lt IE 9]>\n<div class=\"browser-happy\">\n    <ul class=\"messenger\">\n        <li class=\"messager-item\">\n            <div class=\"messenger-message alert message-error alert-error\">\n                <div style=\"float: right;\">\n                    <a href=\"javascript:;\" style=\"padding:4px 12px; color:white; text-decoration: none;font-size: 20px\"\n                       onclick=\"removeSelf();\">&times;</a>\n                </div>\n                <p class=\"messenger-message-inner\" style=\"font-size: 16px;\">您的浏览器版本过低，存在严重的安全隐患。建议您<a href=\"http://browsehappy.com/\" target=\"_blank\" style=\"color:white; font-weight: bold; padding: 0 2px;\">升级浏览器</a>体验完整功能。</p>\n            </div>\n        </li>\n    </ul>\n</div>\n<![endif]-->\n<!--<div style=\"clear: both\"></div>-->\n<div class=\"header\">\n    <div class=\"header-logo\">\n        <!--<img src=\"/assets/img/header_logo.png\" alt=\"logo\">-->\n        <span style=\"color:#ffffff;font-size:30px\" th:utext=\"${#servletContext.getAttribute('WEB.NAME')}\">Nimrod</span>\n    </div>\n    <div class=\"header-nav\">\n        <div class=\"nav-wrap\">\n            <ul class=\"nav-wrap-ul\" id=\"parentViewMenuCategory\">\n                <!-- <li class=\"nav-item parentViewMenuCategory\" th:attr=\"data-menu-category=|${menuCategory.id}|\">-->\n                <!--<a href=\"javascript:;\">-->\n                <!--<i th:class=\"${menuCategory.icon}\"></i>-->\n                <!--<span class=\"nav-item-title\" th:text=\"${menuCategory.name}\">菜单1</span>-->\n                <!--</a>-->\n                <!--</li> -->\n            </ul>\n        </div>\n        <a href=\"javascript:\" class=\"nav-prev disabled\" style=\"display: none\"><i\n                class=\"iconfont icon-chevron-up\"></i></a>\n        <a href=\"javascript:\" class=\"nav-next\" style=\"display: none\"><i class=\"iconfont icon-chevron-down\"></i></a>\n    </div>\n    <div class=\"header-user\">\n        <!-- <div class=\"user-avatar\"><img th:src=\"@{${_user.avatar} || '/assets/img/avatar.png'}\" alt=\"avatar\"></div> -->\n        <div class=\"user-avatar\"><img id=\"avatarSrc\" alt=\"avatar\"></div>\n        <h4 class=\"user-name ellipsis\" th:text=\"${_user.username}\">Username</h4>\n        <i class=\"iconfont caret-down\"></i>\n        <ul class=\"user-dropdown-menu\">\n            <li id=\"userInfoButton\"><a href=\"javascript:\" onclick=\"addTab('#tabs', '个人信息', '/user/profile');\"><i\n                    class=\"iconfont icon-user\"></i> 个人信息</a></li>\n            <li id=\"logoutButton\"><a href=\"javascript:\"><i class=\"iconfont icon-sign-out\"></i> 注销登录</a></li>\n        </ul>\n    </div>\n</div>\n<div class=\"container\">\n    <div id=\"tabsContextMenu\" class=\"easyui-menu\" style=\"width: 140px;display: none\">\n        <div id=\"tabRefresh\" iconCls=\"iconfont icon-refresh\">重新加载</div>\n        <div class=\"menu-sep\"></div>\n        <div id=\"tabCloseCurrent\" iconCls=\"iconfont icon-close\">关闭标签页</div>\n        <div id=\"tabCloseAll\">关闭所有标签页</div>\n        <div id=\"tabCloseOther\">关闭其他标签页</div>\n        <div class=\"menu-sep\"></div>\n        <div id=\"tabCloseRight\">关闭右侧标签页</div>\n        <div id=\"tabCloseLeft\">关闭左侧标签页</div>\n    </div>\n    <div class=\"easyui-layout\" data-options=\"fit:true\">\n        <div id=\"left\" data-options=\"region:'west',split:true,border:false,noheader:true,hideCollapsedContent:true\">\n            <div class=\"easyui-accordion slide-menu\" data-options=\"fit:true,border:false\"></div>\n        </div>\n        <div title=\"Tab\" id=\"center\" data-options=\"region:'center',split:false,border:false,noheader:true\">\n            <div id=\"tabs\" class=\"easyui-tabs\"\n                 data-options=\"split:false,border:false,fit:false,tools:'#tabsTools',onContextMenu:onContextMenu\"\n                 style=\"width:100%;height:100%;\">\n            </div>\n            <div id=\"tabsTools\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-home\"\n                   onclick=\"tabsTo('#tabs',0)\"></a>\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-refresh\"\n                   onclick=\"refreshTabIframe('#tabs')\"></a>\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"closeSelectedTab('#tabs')\"></a>\n            </div>\n        </div>\n        <div title=\"Footer\" id=\"bottom\" data-options=\"region:'south',split:false,border:true,noheader:true\">\n            <div class=\"footer\" th:utext=\"${#servletContext.getAttribute('WEB.FOOTER')}\">Copyright &copy; 2018\n                nimrod.All rights reserved.\n            </div>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\">\n    var avatar = _defaultAvatar;\n    if (_user.avatar !== '' && _user.avatar !== null) {\n        avatar = Url.System.Api.FILE + '/download/' + _user.avatar;\n    }\n    $('#avatarSrc').attr('src', avatar);\n    // tab右键菜单\n    $('#tabsContextMenu').menu({\n        onClick: function (item) {\n            tabsContextMenu(this, $('#tabs'), item.id);\n        }\n    });\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/system/loading.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Title</title>\n    <style>\n\n        .preloader-hidden {\n            display: none;\n        }\n\n        .cs-loader {\n            position: absolute;\n            top: 0;\n            left: 0;\n            height: 100%;\n            width: 100%;\n        }\n\n        .cs-loader-inner {\n            transform: translateY(-50%);\n            top: 50%;\n            position: absolute;\n            width: 100%;\n            color: #fff;\n            text-align: center;\n        }\n\n        .cs-loader-inner label:nth-child(2) {\n            animation: lol 3s .4s infinite ease-in-out;\n        }\n\n        .cs-loader-inner label {\n            font-size: 20px;\n            opacity: 0;\n            display: inline-block;\n        }\n\n        .input-group, div, input, label, li, p, section, textarea, ul {\n            float: none;\n            text-align: left;\n        }\n\n        label {\n            display: inline-block;\n            max-width: 100%;\n            margin-bottom: 5px;\n            font-weight: 700;\n        }\n\n        * {\n            box-sizing: border-box;\n            -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n        }\n\n        *, :after, :before {\n            -webkit-box-sizing: border-box;\n            box-sizing: border-box;\n        }\n\n        * {\n            -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n        }\n\n        *, :after, :before {\n            -webkit-box-sizing: border-box;\n            box-sizing: border-box;\n        }\n    </style>\n</head>\n<body>\n\n<div class=\"preloader-hidden\">\n    <div class=\"cs-loader\">\n        <div class=\"cs-loader-inner\"><label>●</label> <label>●</label> <label>●</label> <label>●</label>\n            <label>●</label> <label>●</label></div>\n    </div>\n</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/system/operation_log/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div id=\"operationLogToolbar\">\n    <nimrod:security authority=\"/COMPONENT/SYSTEM/OPERATION_LOG/PAGE_ALL/OPERATION_LOG_DELETE_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n           onclick=\"operationLogDeleteAll();\">删除</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/SYSTEM/OPERATION_LOG/PAGE_ALL/OPERATION_LOG_CLEAR_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\" onclick=\"operationLogClearAll();\">清空日志</a>\n    </nimrod:security>\n</div>\n<table id=\"operationLog\"></table>\n\n<script type=\"text/javascript\">\n    $(function () {\n        var OPERATION_TYPE = [];\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {\n                field: 'view', title: '操作', formatter: function (value, row, index) {\n                    return '<a href=\"javascript:\" onclick=\"operationLogViewDialog(' + row.id + ')\">查看</a>';\n                }\n            },\n            {field: 'username', title: '访问用户'},\n            {field: 'ipAddress', title: '用户 IP'},\n            {\n                field: 'operationType', title: '操作类型', formatter: function (value, row, index) {\n                    return expressui.grid.formatter(value, OPERATION_TYPE);\n                }\n            },\n            {field: 'operation', title: '操作说明'},\n            {field: 'consumingTime', title: '请求耗时（毫秒）'},\n            {field: 'requestUrl', title: '请求地址（url）'},\n            {field: 'requestMethod', title: '请求方法'},\n            {field: 'requestParameter', title: '请求参数'},\n            {field: 'acceptLanguage', title: '请求语言'},\n            {field: 'referer', title: '请求来源'},\n            {field: 'userAgent', title: '用户代理'},\n            {field: 'handler', title: 'Handler'},\n            {field: 'stackTrace', title: '异常堆栈'},\n            {field: 'sessionId', title: 'Session ID'},\n            {field: 'cookie', title: 'Cookie'},\n            {field: 'status', title: '响应状态码'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#operationLog').datagrid(expressui.grid.create, {\n            title: '操作日志',\n            columns: [columns],\n            url: Url.System.Api.OPERATION_LOG + '/page_all',\n            onBeforeLoad: function (param) {\n                util.ajax({\n                    url: Url.System.Api.DICTIONARY + '/list_all_by_key/OPERATION_TYPE',\n                    success: function (data) {\n                        if (data) {\n                            OPERATION_TYPE = data;\n                        }\n                    }\n                });\n            }\n        });\n    });\n\n    function operationLogViewDialog(id) {\n        $('#operationLogViewDialog').dialog(expressui.dialog.create, {\n            title: '查看',\n            width: 600,\n            height: 430,\n            href: Url.System.Page.OPERATION_LOG + '/view_dialog',\n            get: {url: Url.System.Api.OPERATION_LOG + '/one/' + id, method: 'get'},\n            buttons: [{\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function operationLogDeleteAll() {\n        $('#operationLog').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.System.Api.OPERATION_LOG + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            reload: {type: 'datagrid', selector: '#operationLog'}\n        });\n    }\n\n    function operationLogClearAll() {\n        $.messager.confirm('信息', '确定要操作吗', function (ok) {\n            if (ok) {\n                $.ajax({\n                    url: Url.System.Api.OPERATION_LOG + '/clear_all',\n                    type: 'POST',\n                    dataType: 'JSON',\n                    success: function (data) {\n                        $.messager.show({title: '信息', msg: '操作成功'});\n                        $('#operationLog').datagrid('reload');\n                    },\n                    error: function (xhr) {\n                        if (xhr.status !== 200) {\n                            $.messager.alert('信息', '操作失败：' + xhr.responseJSON.message, 'error');\n                        } else {\n                            $.messager.show({title: '信息', msg: '操作成功'});\n                            $('#operationLog').datagrid('reload');\n                        }\n                    }\n                })\n            }\n        });\n\n    }\n\n</script>\n\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/system/operation_log/view_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">ID：</td>\n            <td>\n                <input name=\"id\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">访问用户：</td>\n            <td>\n                <input name=\"username\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">用户 IP：</td>\n            <td>\n                <input name=\"ipAddress\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">操作类型：</td>\n            <td>\n                <input name=\"operationType\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">操作说明：</td>\n            <td><input name=\"operation\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"disabled: true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求耗时（毫秒）：</td>\n            <td>\n                <input name=\"consumingTime\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求地址（url）：</td>\n            <td><input name=\"requestUrl\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"disabled: true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求方法：</td>\n            <td><input name=\"requestMethod\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"disabled: true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求参数：</td>\n            <td><input name=\"requestParameter\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"disabled: true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求语言：</td>\n            <td>\n                <input name=\"acceptLanguage\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求来源：</td>\n            <td><input name=\"referer\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"disabled: true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">用户代理：</td>\n            <td><input name=\"userAgent\" class=\"easyui-textbox\" style=\"height:100px;\"\n                       data-options=\"disabled: true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">Handler：</td>\n            <td><input name=\"handler\" class=\"easyui-textbox\" style=\"height:100px;\"\n                       data-options=\"disabled: true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">异常堆栈：</td>\n            <td><input name=\"stackTrace\" class=\"easyui-textbox\" style=\"height:100px;\"\n                       data-options=\"disabled: true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">Session ID：</td>\n            <td><input name=\"sessionId\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"disabled: true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">Cookie：</td>\n            <td><input name=\"cookie\" class=\"easyui-textbox\" style=\"height:100px;\"\n                       data-options=\"disabled: true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">响应状态码：</td>\n            <td>\n                <input name=\"status\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">创建时间：</td>\n            <td>\n                <input name=\"gmtCreated\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n            </td>\n        </tr>\n    </table>\n</div>\n"
  },
  {
    "path": "src/main/resources/templates/system/workbench.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base(title=${#servletContext.getAttribute('WEB.NAME')})\"></div>\n    <link rel=\"stylesheet\" type=\"text/css\" th:href=\"@{/assets/css/workbench.css}\">\n    <script type=\"text/javascript\" th:src=\"@{/assets/vendor/echarts.min.js}\"></script>\n    <script th:src=\"@{/assets/js/workbench.js}\"></script>\n</head>\n<body style=\"overflow-x: hidden\">\n<div class=\"container\" style=\"margin:0;padding: 0 11px 0 0;\">\n    <div id=\"body\">\n        <div class=\"body-content\">\n            <div class=\"right-zone\">\n                <div class=\"right-box-one item-box\">\n                    <div class=\"right-box-header\">\n                        <label>通知公告</label>\n                        <a href=\"javascript:;\">更多<span>&gt;</span></a>\n                    </div>\n                    <ul>\n                        <li>\n                            <span></span>\n                            <a href=\"javascript:;\" class=\"ellipsis\">摩拜成为历史，前员工回忆昔日辉煌：“ofo根本就不是对手”</a>\n                            <label>01-11</label>\n                        </li>\n                        <li>\n                            <span></span>\n                            <a href=\"javascript:;\" class=\"ellipsis\">程序员放弃互联网选择去银行，但想到同学工资高好几倍心里不平衡</a>\n                            <label>01-10</label>\n                        </li>\n                        <li>\n                            <span></span>\n                            <a href=\"javascript:;\" class=\"ellipsis\">第二大内存制造商海力士两年来利润首降</a>\n                            <label>01-09</label>\n                        </li>\n                        <li>\n                            <span></span>\n                            <a href=\"javascript:;\" class=\"ellipsis\">法国小哥感谢微信支付进入法国 要请马化腾来巴黎吃饭</a>\n                            <label>01-08</label>\n                        </li>\n                        <li>\n                            <span></span>\n                            <a href=\"javascript:;\" class=\"ellipsis\">恶意扣费、信息窃取！7873款恶意APP被集中清理</a>\n                            <label>01-07</label>\n                        </li>\n                        <li>\n                            <span></span>\n                            <a href=\"javascript:;\" class=\"ellipsis\">谷歌要求美国高院终止甲骨文Java侵权诉讼</a>\n                            <label>01-06</label>\n                        </li>\n                    </ul>\n                </div>\n                <div class=\"right-box-two item-box\">\n                    <div class=\"right-box-header\">\n                        <label>公司新闻</label>\n                        <a href=\"javascript:;\">更多<span>&gt;</span></a>\n                    </div>\n                    <ul>\n                        <li>\n                            <span></span>\n                            <a href=\"javascript:;\" class=\"ellipsis\">电商平台，如何做好站内信功能</a>\n                            <label>01-11</label>\n                        </li>\n                        <li>\n                            <span></span>\n                            <a href=\"javascript:;\" class=\"ellipsis\">戴森被中国人买成首富！一年大赚百亿 技术控还是营销大师？</a>\n                            <label>01-10</label>\n                        </li>\n                        <li>\n                            <span></span>\n                            <a href=\"javascript:;\" class=\"ellipsis\">小程序，大视界：一文解读微信小程序用户行为</a>\n                            <label>01-09</label>\n                        </li>\n                        <li>\n                            <span></span>\n                            <a href=\"javascript:;\" class=\"ellipsis\">摩拜这个名字价值16亿元，可惜美团已经下定改名决心</a>\n                            <label>01-08</label>\n                        </li>\n                        <li>\n                            <span></span>\n                            <a href=\"javascript:;\" class=\"ellipsis\">淘宝卖家：一天几千营业额，还要省吃俭用，看直通车账户</a>\n                            <label>01-07</label>\n                        </li>\n                        <li>\n                            <span></span>\n                            <a href=\"javascript:;\" class=\"ellipsis\">微软正在开发下一个Win10版本 预计年底发布</a>\n                            <label>01-06</label>\n                        </li>\n                        <li>\n                            <span></span>\n                            <a href=\"javascript:;\" class=\"ellipsis\">滴滴顺风车春运将上线？官方回应！</a>\n                            <label>01-05</label>\n                        </li>\n                    </ul>\n                </div>\n                <div class=\"right-box-three item-box\">\n                    <div class=\"right-box-header\">\n                        <label>文件下载</label>\n                        <a href=\"javascript:;\">更多<span>&gt;</span></a>\n                    </div>\n                    <div class=\"right-box-tab\">\n                        <a class=\"current item-left\" href=\"#fileCategory1\">文件目录1</a>\n                        <a class=\"item-right\" href=\"#fileCategory2\">文件目录2</a>\n                    </div>\n                    <div class=\"right-box-tab-list\">\n                        <ul id=\"fileCategory1\">\n                            <li>\n                                <span></span>\n                                <a href=\"javascript:;\" class=\"ellipsis\">文件1.xlsx</a>\n                            </li>\n                            <li>\n                                <span></span>\n                                <a href=\"javascript:;\" class=\"ellipsis\">文件2.xls</a>\n                            </li>\n                            <li>\n                                <span></span>\n                                <a href=\"javascript:;\" class=\"ellipsis\">文件3.doc</a>\n                            </li>\n                            <li>\n                                <span></span>\n                                <a href=\"javascript:;\" class=\"ellipsis\">文件4.ppt</a>\n                            </li>\n                            <li>\n                                <span></span>\n                                <a href=\"javascript:;\" class=\"ellipsis\">文件5.doc</a>\n                            </li>\n                            <li>\n                                <span></span>\n                                <a href=\"javascript:;\" class=\"ellipsis\">文件6.doc</a>\n                            </li>\n                        </ul>\n                        <ul id=\"fileCategory2\" class=\"hide\">\n                            <li>\n                                <span></span>\n                                <a href=\"javascript:;\" class=\"ellipsis\">文件7.doc</a>\n                            </li>\n                            <li>\n                                <span></span>\n                                <a href=\"javascript:;\" class=\"ellipsis\">文件8.doc</a>\n                            </li>\n                            <li>\n                                <span></span>\n                                <a href=\"javascript:;\" class=\"ellipsis\">文件9.doc</a>\n                            </li>\n                            <li>\n                                <span></span>\n                                <a href=\"javascript:;\" class=\"ellipsis\">文件10.doc</a>\n                            </li>\n                            <li>\n                                <span></span>\n                                <a href=\"javascript:;\" class=\"ellipsis\">文件11.doc</a>\n                            </li>\n                            <li>\n                                <span></span>\n                                <a href=\"javascript:;\" class=\"ellipsis\">文件12.doc</a>\n                            </li>\n                        </ul>\n                    </div>\n                </div>\n            </div>\n            <div class=\"center-part\">\n                <div class=\"center-items todo\">\n                    <div class=\"calendar-part\">\n                        <div class=\"easyui-calendar\" style=\"width:205px;height:231px;\"></div>\n                    </div>\n                    <ul class=\"work-items clearfix\">\n                        <li>\n                            <div class=\"work-inner\">\n                                <div class=\"work-item blue\">\n                                    <i class=\"iconfont icon-list\" aria-hidden=\"true\"></i>\n                                    <span class=\"num\">21&nbsp;<span class=\"unit\">个</span></span>\n                                    <label>我的待办</label>\n                                </div>\n                            </div>\n                        </li>\n                        <li>\n                            <div class=\"work-inner\">\n                                <div class=\"work-item red\">\n                                    <i class=\"iconfont icon-exclamation-triangle\"></i>\n                                    <span class=\"num\">3&nbsp;<span class=\"unit\">条</span></span>\n                                    <label>未读预警信息</label>\n                                </div>\n                            </div>\n                        </li>\n                        <li>\n                            <div class=\"work-inner\">\n                                <div class=\"work-item yellow\">\n                                    <i class=\"iconfont icon-envelope-o\"></i>\n                                    <span class=\"num\">12&nbsp;<span class=\"unit\">封</span></span>\n                                    <label>邮件未读</label>\n                                </div>\n                            </div>\n                        </li>\n                        <li>\n                            <div class=\"work-inner\">\n                                <div class=\"work-item green\">\n                                    <i class=\"iconfont icon-cny\"></i>\n                                    <span title=\"8888万\" class=\"num\">8888&nbsp;<span class=\"unit\">万</span></span>\n                                    <label>我的询价</label>\n                                </div>\n                            </div>\n                        </li>\n                        <li>\n                            <div class=\"work-inner\">\n                                <div class=\"work-item purple\">\n                                    <i class=\"iconfont icon-book\"></i>\n                                    <span title=\"66666万\" class=\"num\">66666&nbsp;<span class=\"unit\">万</span></span>\n                                    <label>签约金额</label>\n                                </div>\n                            </div>\n                        </li>\n                        <li>\n                            <div class=\"work-inner\">\n                                <div class=\"work-item gray\">\n                                    <i class=\"iconfont icon-handshake-o\"></i>\n                                    <span class=\"num\">&nbsp;12&nbsp;<span class=\"unit\">个</span></span>\n                                    <label>供应商数</label>\n                                </div>\n                            </div>\n                        </li>\n                    </ul>\n                </div>\n                <div class=\"center-items chart0 clearfix\">\n                    <div class=\"chart0-item\">\n                        <div class=\"item-inner\">\n                            <div class=\"item-content\">\n                                <div class=\"content-header\">访问来源</div>\n                                <div class=\"chart-chart\" id=\"chart0\"></div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"chart0-item\">\n                        <div class=\"item-inner\">\n                            <div class=\"item-content\">\n                                <div class=\"content-header\">每周访问来源频次</div>\n                                <div class=\"chart-chart\" id=\"chart1\"></div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"center-items chart1\">\n                    <div class=\"chart1-inner\">\n                        <div class=\"item-header\">各平台使用频次</div>\n                        <div class=\"chart1-chart\" id=\"chart3\"></div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<div class=\"todo-panel\">\n    <div class=\"todo-title\">\n        <i class=\"iconfont icon-list\" aria-hidden=\"true\"></i>\n        <span class=\"num\">21&nbsp;<span class=\"unit\">个</span></span>\n        <label>待办未处理</label>\n    </div>\n    <div class=\"todo-items\">\n        <ul>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>10条</span>供应商开发申请未处理<i></i></a>\n                <label>01-11</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>10条</span>供应商开发申请未处理<i></i></a></a>\n                <label>01-11</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>14条</span>供应商开发申请未处理，请及时审批<i></i></a></a>\n                <label>01-11</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>3条</span>供应商开发申请未处理，请及时审批</a></a>\n                <label>01-11</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>3条</span>供应商开发申请未处理，请及时审批</a></a>\n                <label>01-11</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>5条</span>供应商开发申请未处理，请及时审批，未处理会导致失效</a></a>\n                <label>01-11</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>2条</span>供应商开发申请未处理，请及时审批，未处理会导致失效</a></a>\n                <label>01-11</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>1条</span>供应商开发申请未处理，请及时审批，未处理会导致失效</a></a>\n                <label>01-10</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>6条</span>供应商开发申请未处理，请及时审批，未处理</a></a>\n                <label>01-10</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>7条</span>供应商开发申请未处理，请及时审批，未处理会导致失效</a></a>\n                <label>01-10</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>1条</span>供应商开发申请未处理，未处理会导致失效</a></a>\n                <label>01-10</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>3条</span>开发申请未处理，请及时审批，未处理会导致失效</a></a>\n                <label>01-09</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>5条</span>供应商开发申请未处理，请及时审批，未处理会导致失效</a></a>\n                <label>01-09</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>6条</span>供应商开发申请未处理，请及时审批，会导致失效</a></a>\n                <label>01-09</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>3条</span>供应商开发申请未处理，请及时审批，未处理</a></a>\n                <label>01-09</label>\n            </li>\n            <li>\n                <span></span>\n                <a href=\"javascript:;\" class=\"ellipsis\">您有<span>2条</span>供应商开发申请未处理，请及时审批</a></a>\n                <label>01-09</label>\n            </li>\n        </ul>\n    </div>\n</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">\n                <div class=\"user-avatar\">\n                    <img id=\"avatarSrc\" alt=\"avatar\" style=\"width:40px;height:40px\">\n                </div>\n            </td>\n            <td>\n                <input class=\"easyui-textbox\" data-options=\"cls:'display'\" name=\"avatar\" id=\"avatar\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" onclick=\"changeAvatarDialog();\">更换头像</a>\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" onclick=\"removeAvatar();\">移除头像</a>\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">用户名：</td>\n            <td><input name=\"username\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">密码：</td>\n            <td><input name=\"password\" class=\"easyui-textbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">电子邮箱：</td>\n            <td colspan=\"3\"><input name=\"email\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">电子邮箱是否验证：</td>\n            <td colspan=\"3\"><input name=\"emailIsVerified\" id=\"emailIsVerified\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">所在部门：</td>\n            <td colspan=\"3\"><input name=\"departmentId\" id=\"departmentId\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">是否启用：</td>\n            <td colspan=\"3\"><input name=\"enabled\" id=\"enabled\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td colspan=\"3\"><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                                   data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<style>\n    .display {\n        display: none;\n    }\n\n    .user-avatar {\n        float: right;\n        width: 48px;\n        height: 48px;\n    }\n\n    .user-avatar img {\n        margin: 4px;\n        border-radius: 20px;\n        -webkit-border-radius: 20px;\n        -moz-border-radius: 20px;\n    }\n</style>\n<script>\n    $(function () {\n        $('#avatarSrc').attr('src', _defaultAvatar);\n        $('#avatar').textbox({\n            onChange: function (newValue, oldValue) {\n                if (newValue === null || newValue === '') {\n                    newValue = _defaultAvatar;\n                } else {\n                    newValue = Url.System.Api.FILE + '/download/' + newValue\n                }\n                $('#avatarSrc').attr('src', newValue);\n            }\n        });\n        $('#emailIsVerified').combobox({\n            url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n            method: 'get',\n            valueField: 'value',\n            textField: 'valueName',\n            required: true\n        });\n        $('#departmentId').combotree({\n            required: true,\n            method: 'get',\n            valueField: 'id',\n            textField: 'text',\n            url: Url.User.Api.DEPARTMENT + '/list_all_as_combo_tree',\n        });\n        $('#enabled').combobox({\n            url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n            method: 'get',\n            valueField: 'value',\n            textField: 'valueName',\n            required: true\n        });\n    });\n\n    function changeAvatarDialog() {\n        $('#changeAvatarDialog').dialog(expressui.dialog.create, {\n            title: '更换头像',\n            width: 600,\n            height: 400,\n            grid: {type: 'datagrid', selector: '#user'},\n            href: Url.User.Page.USER + '/change_avatar_dialog',\n            buttons: [{\n                text: '确定',\n                iconCls: 'iconfont icon-save',\n                handler: function () {\n                    var guid = $('#file').datagrid('getChecked')[0].guid;\n                    $('#avatar').textbox('setValue', guid);\n                    $('#changeAvatarDialog').dialog('close');\n                },\n                reload: [{type: 'datagrid', selector: '#user'}],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function removeAvatar() {\n        $('#avatar').textbox('setValue', '');\n    }\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/api/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">API 名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">API 分类：</td>\n            <td><input name=\"apiCategoryId\" id=\"apiCategoryId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求地址（url）：</td>\n            <td><input name=\"url\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">权限（authority）：</td>\n            <td><input name=\"authority\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" value=\"0\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<script>\n    $(function () {\n        $('#apiCategoryId').combotree({\n            url: Url.User.Api.API_CATEGORY + '/list_all_as_combo_tree'\n        });\n    })\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/api/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">API 名称：</td>\n            <td>\n                <input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\">\n                <input name=\"id\" type=\"hidden\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">API 分类：</td>\n            <td><input name=\"apiCategoryId\" id=\"apiCategoryId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求地址（url）：</td>\n            <td><input name=\"url\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">权限（authority）：</td>\n            <td><input name=\"authority\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<script>\n    $(function () {\n        $('#apiCategoryId').combotree({\n            url: Url.User.Api.API_CATEGORY + '/list_all_as_combo_tree'\n        });\n    })\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/api/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div class=\"easyui-layout\" data-options=\"fit:true\">\n    <div data-options=\"region:'west',split:true\" style=\"width:40%\">\n        <div id=\"apiCategoryToolbar\">\n            <nimrod:security authority=\"/COMPONENT/USER/API/PAGE_ALL/API_CATEGORY_ADD_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"apiCategoryAddDialog();\">新增</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/API/PAGE_ALL/API_CATEGORY_EDIT_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n                   onclick=\"apiCategoryEditDialog();\">编辑</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/API/PAGE_ALL/API_CATEGORY_DELETE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"apiCategoryDeleteAll();\">删除</a>\n            </nimrod:security>\n        </div>\n        <table id=\"apiCategory\"></table>\n    </div>\n    <div data-options=\"region:'center',split:true\">\n        <div id=\"apiToolbar\">\n            <nimrod:security authority=\"/COMPONENT/USER/API/PAGE_ALL/API_ADD_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\" onclick=\"apiAddDialog();\">新增</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/API/PAGE_ALL/API_EDIT_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\" onclick=\"apiEditDialog();\">编辑</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/API/PAGE_ALL/API_DELETE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\" onclick=\"apiDeleteAll();\">删除</a>\n            </nimrod:security>\n        </div>\n        <table id=\"api\"></table>\n    </div>\n</div>\n\n<script type=\"text/javascript\">\n\n    $(function () {\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '分类名称'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#apiCategory').treegrid(expressui.grid.create, {\n            title: 'API 分类',\n            url: Url.User.Api.API_CATEGORY + '/list_all_parent',\n            expandUrl: Url.User.Api.API_CATEGORY + '/list_all_by_parent_id?parentId={id}',\n            columns: [columns],\n            onCheck: function (row) {\n                if (row) {\n                    $('#api').datagrid('reload', Url.User.Api.API + '/page_all_by_api_category_id?apiCategoryId=' + row.id);\n                }\n            },\n            onUncheck: function (index, row) {\n                $('#api').datagrid('loadData', []);\n            }\n        });\n\n        columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: 'API 名称'},\n            {field: 'url', title: '请求地址（url）'},\n            {field: 'authority', title: '权限（authority）'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#api').datagrid(expressui.grid.create, {\n            title: 'API',\n            columns: [columns]\n        });\n    });\n\n    function apiCategoryAddDialog() {\n        $('#apiCategoryAddDialog').dialog(expressui.dialog.create, {\n            title: '新增 API 分类',\n            grid: {type: 'treegrid', selector: '#apiCategory'},\n            href: Url.User.Page.API_CATEGORY + '/add_dialog',\n            get: {url: Url.User.Api.API_CATEGORY + '/one/{id}', method: 'get'},\n            save: {url: Url.User.Api.API_CATEGORY + '/add_one', method: 'post'},\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'treegrid', selector: '#apiCategory'}, {type: 'datagrid', selector: '#api', data: []}],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function apiCategoryEditDialog() {\n        var one = $('#apiCategory').treegrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (one) {\n            $('#apiCategoryEditDialog').dialog(expressui.dialog.create, {\n                title: '编辑 API 分类',\n                grid: {type: 'treegrid', selector: '#apiCategory'},\n                href: Url.User.Page.API_CATEGORY + '/edit_dialog',\n                get: {url: Url.User.Api.API_CATEGORY + '/one/{id}', method: 'get'},\n                save: {url: Url.User.Api.API_CATEGORY + '/save_one', method: 'post'},\n                buttons: [{\n                    text: '保存',\n                    iconCls: 'iconfont icon-save',\n                    handler: expressui.dialog.save,\n                    reload: [{type: 'treegrid', selector: '#apiCategory'}, {\n                        type: 'datagrid',\n                        selector: '#api',\n                        data: []\n                    }],\n                    success: '保存成功'\n                }, {\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n        }\n    }\n\n    function apiCategoryDeleteAll() {\n        $('#apiCategory').treegrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.User.Api.API_CATEGORY + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            error: '删除失败',\n            reload: [{type: 'treegrid', selector: '#apiCategory'}, {type: 'datagrid', selector: '#api', data: []}]\n        });\n    }\n\n    function apiAddDialog() {\n        var one = $('#apiCategory').treegrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (!one) {\n            return;\n        }\n\n        $('#apiAddDialog').dialog(expressui.dialog.create, {\n            title: '新增 API ',\n            grid: {type: 'treegrid', selector: '#apiCategory'},\n            href: Url.User.Page.API + '/add_dialog',\n            get: {url: Url.User.Api.API + '/one/{id}', method: 'get'},\n            save: {url: Url.User.Api.API + '/add_one', method: 'post'},\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'datagrid', selector: '#api'}],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function apiEditDialog() {\n        var one = $('#api').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (one) {\n            $('#apiEditDialog').dialog(expressui.dialog.create, {\n                title: '编辑 API',\n                grid: {type: 'datagrid', selector: '#api'},\n                href: Url.User.Page.API + '/edit_dialog',\n                get: {url: Url.User.Api.API + '/one/{id}', method: 'get'},\n                save: {url: Url.User.Api.API + '/save_one', method: 'post'},\n                buttons: [{\n                    text: '保存',\n                    iconCls: 'iconfont icon-save',\n                    handler: expressui.dialog.save,\n                    reload: [{type: 'datagrid', selector: '#api'}],\n                    success: '保存成功'\n                }, {\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n        }\n    }\n\n    function apiDeleteAll() {\n        $('#api').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.User.Api.API + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            reload: {type: 'datagrid', selector: '#api'}\n        });\n    }\n\n    function apiCopyAddDialog() {\n        var apiCategory = $('#apiCategory').treegrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (!apiCategory) {\n            return;\n        }\n\n        var api = $('#api').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (!api) {\n            return;\n        }\n\n        $('#apiCopyDialog').dialog(expressui.dialog.create, {\n            title: '复制新增 API',\n            grid: {type: 'datagrid', selector: '#api'},\n            href: Url.User.Page.API + '/add_dialog',\n            get: {url: Url.User.Api.API + '/one/{id}', method: 'get'},\n            save: {\n                url: Url.User.Api.API + '/add_one',\n                data: {apiCategoryId: apiCategory.id}, // 必传参数\n                method: 'post'\n            },\n            buttons: [{\n                text: '复制新增',\n                iconCls: 'iconfont icon-copy',\n                handler: expressui.dialog.add,\n                reload: [{type: 'datagrid', selector: '#api'}],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function apiMoveToDialog() {\n        var one = $('#api').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (one) {\n            $('#apiEditDialog').dialog(expressui.dialog.create, {\n                title: '编辑 API',\n                grid: {type: 'datagrid', selector: '#api'},\n                selector: '#apiEditDialog',\n                href: Url.User.Page.API + '/edit_dialog',\n                get: {url: Url.User.Api.API + '/one/{id}', method: 'get'},\n                save: {url: Url.User.Api.API + '/save_one', method: 'post'},\n                buttons: [{\n                    text: '保存',\n                    iconCls: 'iconfont icon-save',\n                    handler: expressui.dialog.save,\n                    reload: [{type: 'datagrid', selector: '#api'}],\n                    success: '保存成功'\n                }, {\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n        }\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/api_category/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">分类名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">父级分类：</td>\n            <td><input name=\"parentId\" id=\"parentId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" value=\"0\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<script>\n    $(function () {\n        $('#parentId').combotree({\n            url: Url.User.Api.API_CATEGORY + '/list_all_as_combo_tree'\n        });\n    })\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/api_category/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">分类名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\">\n                <input name=\"id\" type=\"hidden\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">父级分类：</td>\n            <td><input name=\"parentId\" id=\"parentId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<script>\n    $(function () {\n        $('#parentId').combotree({\n            url: Url.User.Api.API_CATEGORY + '/list_all_as_combo_tree'\n        });\n    });\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/user/change_avatar_dialog.html",
    "content": "<!--<div class=\"easyui-layout\" data-options=\"fit:true\">-->\n<!--    <div data-options=\"region:'north',split:true\">-->\n<div id=\"fileToolbar\">\n\n    <div class=\"submit-form\">\n        <p>\n            <label for=\"fileUpload\">上传文件：</label>\n            <input id=\"fileUpload\" class=\"easyui-filebox\" style=\"width:220px\" data-options=\"buttonText:'选择文件'\">\n            <a id=\"uploadButton\" href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-upload\">上传</a>\n        </p>\n    </div>\n</div>\n<!--    </div>-->\n<!--    <div data-options=\"region:'center'\" style=\"padding:5px;background:#eee;\">-->\n<table id=\"file\"></table>\n<!--    </div>-->\n<!--</div>-->\n<script type=\"text/javascript\">\n    $(function () {\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'username', title: '上传用户'},\n            {\n                field: 'download', title: '下载', formatter: function (value, row, index) {\n                    value = '<a target=\"_blank\" href=\"' + Url.System.Api.FILE + '/download/' + row.guid + '\">下载</a>';\n                    return value;\n                }\n            },\n            {\n                field: 'preview', title: '预览', formatter: function (value, row, index) {\n                    if (row.mimeType.indexOf('image') > -1) {\n                        value = '<img style=\"width:60px;height:60px\" src=\"' + Url.System.Api.FILE + '/download/' + row.guid + '\"/>';\n                        return value;\n                    }\n                }\n            },\n            {field: 'name', title: '文件名'},\n            {field: 'prettySize', title: '文件大小'},\n            {field: 'guid', title: '唯一标识符'},\n            {field: 'mimeType', title: 'MIME 类型'},\n            {field: 'path', title: '文件路径'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#file').datagrid(expressui.grid.create, {\n            columns: [columns],\n            url: Url.System.Api.FILE + '/page_all_image_by_current_user',\n        });\n    });\n    $('#uploadButton').click(function () {\n        if (!window._ajaxing) {\n            window._ajaxing = upload();\n        } else {\n            window._ajaxing.abort();\n            window._ajaxing = undefined;\n        }\n        if (window._ajaxing) {\n            $(this).linkbutton({text: '取消', iconCls: 'iconfont icon-close'});\n        } else {\n            $(this).linkbutton({text: '上传', iconCls: 'iconfont icon-upload'});\n        }\n    });\n\n    function upload() {\n        var formData = new FormData();\n        var file = $('#fileUpload').filebox('files')[0];\n        formData.append('file', file);\n        return $.ajax({\n            url: Url.System.Api.FILE + '/upload_one',\n            type: 'post',\n            data: formData,\n            processData: false, // 不要对data参数进行序列化处理，默认为true\n            contentType: false, // 不要设置Content-Type请求头，因为文件数据是以 multipart/form-data 来编码\n            xhr: function () {\n                return $.ajaxSettings.xhr();\n            },\n            success: function (res, statusText, xhr) {\n                if (res && res.code) {\n                    $.messager.alert('信息', res.message, 'error');\n                } else {\n                    if (xhr.readyState === 4) {\n                        $('#fileUpload').filebox('clear');\n                        $.messager.show({title: '信息', msg: '上传成功'});\n                        $('#file').datagrid('reload');\n                    }\n                }\n                $('#uploadButton').linkbutton({text: '上传', iconCls: 'iconfont icon-upload'});\n                window._ajaxing = undefined;\n            },\n            error: function (xhr) {\n                if (xhr.responseJSON) {\n                    $.messager.alert('信息', xhr.responseJSON.message, 'error');\n                }\n                $('#uploadButton').linkbutton({text: '上传', iconCls: 'iconfont icon-upload'});\n                window._ajaxing = undefined;\n            }\n        });\n    }\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/user/change_email_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr id=\"emailTr\">\n            <td class=\"label\">电子邮箱：</td>\n            <td><input name=\"email\" id=\"email\" class=\"easyui-textbox\" data-options=\"disabled: true,required:true\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" id=\"sendEmailVerifyCode\"\n                   onclick=\"sendEmailVerifyCode();\">发送验证码</a>\n            </td>\n        </tr>\n        <tr id=\"emailVerifyCodeTr\">\n            <td class=\"label\">验证码：</td>\n            <td><input name=\"emailVerifyCode\" id=\"emailVerifyCode\" class=\"easyui-textbox\" data-options=\"required:true\">\n            </td>\n        </tr>\n        <tr id=\"newEmailTr\" style=\"display: none\">\n            <td class=\"label\">新的电子邮箱：</td>\n            <td><input name=\"newEmail\" id=\"newEmail\" class=\"easyui-textbox\" data-options=\"required:false\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" id=\"sendNewEmailVerifyCode\"\n                   onclick=\"sendNewEmailVerifyCode();\">发送验证码</a>\n            </td>\n        </tr>\n        <tr id=\"newEmailVerifyCodeTr\" style=\"display: none\">\n            <td class=\"label\">验证码：</td>\n            <td><input name=\"newEmailVerifyCode\" id=\"newEmailVerifyCode\" class=\"easyui-textbox\"\n                       data-options=\"required:false\"></td>\n        </tr>\n    </table>\n</div>\n<style type=\"text/css\">\n    .display {\n        display: none;\n    }\n</style>\n<script type=\"text/javascript\">\n    function sendEmailVerifyCode() {\n        $('#email').textbox({disabled: true});\n        util.ajax({\n            method: 'post',\n            url: Url.User.Api.USER + '/send_email_verify_code_by_current_user',\n            success: function (data) {\n                if (data) {\n                    $.messager.show({title: '信息', msg: '发送成功，请登录电子邮箱查收！'});\n                }\n                sendEmailVerifyCodeTimedCount();\n            },\n            error: function (xhr) {\n                if (xhr.responseJSON) {\n                    $.messager.alert('信息', xhr.responseJSON.message, 'error');\n                }\n            }\n        });\n    }\n\n    var c = 60;\n    var t;\n\n    function sendEmailVerifyCodeTimedCount() {\n        $('#sendEmailVerifyCode').linkbutton({text: c + '秒后可重发', disabled: true});\n        if (c <= -1) {\n            $('#sendEmailVerifyCode').linkbutton({text: '发送验证码', disabled: false});\n            clearTimeout();\n            c = 60;\n            $('#email').textbox({disabled: false});\n        } else {\n            c--;\n            t = setTimeout(\"sendEmailVerifyCodeTimedCount()\", 1000)\n        }\n    }\n\n    function sendNewEmailVerifyCode() {\n        $('#newEmail').textbox({disabled: true});\n        util.ajax({\n            method: 'post',\n            url: Url.User.Api.USER + '/send_email_verify_code_by_current_user',\n            data: {newEmail: $('#newEmail').textbox('getValue')},\n            success: function (data) {\n                if (data) {\n                    $.messager.show({title: '信息', msg: '发送成功，请登录电子邮箱账号查收'});\n                }\n                sendNewEmailVerifyCodeTimedCount();\n            },\n            error: function (xhr) {\n                if (xhr.responseJSON) {\n                    $.messager.alert('信息', xhr.responseJSON.message, 'error');\n                }\n            }\n        });\n    }\n\n    c = 60;\n    t = undefined;\n\n    function sendNewEmailVerifyCodeTimedCount() {\n        $('#sendNewEmailVerifyCode').linkbutton({text: c + '秒后可重发', disabled: true});\n        if (c <= -1) {\n            $('#sendNewEmailVerifyCode').linkbutton({text: '发送验证码', disabled: false});\n            clearTimeout();\n            c = 60;\n            $('#newEmail').textbox({disabled: false});\n        } else {\n            c--;\n            t = setTimeout(\"sendNewEmailVerifyCodeTimedCount()\", 1000)\n        }\n    }\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/change_password_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">原密码：</td>\n            <td><input name=\"password\" id=\"password2\" class=\"easyui-passwordbox\" data-options=\"required:true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">新密码：</td>\n            <td><input name=\"newPassword\" id=\"newPassword\" class=\"easyui-passwordbox\"\n                       data-options=\"required:true,validType:'password'\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">重输密码：</td>\n            <td><input name=\"confirmNewPassword\" id=\"confirmNewPassword\" class=\"easyui-passwordbox\"\n                       data-options=\"required:true,validType:'confirmPassword[\\'#newPassword\\']'\">\n            </td>\n        </tr>\n    </table>\n</div>"
  },
  {
    "path": "src/main/resources/templates/user/department/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">部门名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">上级部门：</td>\n            <td><input name=\"parentId\" id=\"parentId\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<script>\n    $('#parentId').combotree({\n        method: 'get',\n        valueField: 'id',\n        textField: 'text',\n        url: Url.User.Api.DEPARTMENT + '/list_all_as_combo_tree',\n    });\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/department/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">部门名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\">\n                <input type=\"hidden\" name=\"id\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">上级部门：</td>\n            <td><input name=\"parentId\" id=\"parentId\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\" data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<script>\n    $('#parentId').combotree({\n        method: 'get',\n        valueField: 'id',\n        textField: 'text',\n        url: Url.User.Api.DEPARTMENT + '/list_all_as_combo_tree',\n    });\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/department/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div id=\"departmentToolbar\">\n    <nimrod:security authority=\"/COMPONENT/USER/DEPARTMENT/PAGE_ALL/DEPARTMENT_ADD_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n           onclick=\"departmentAddDialog();\">新增</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/USER/DEPARTMENT/PAGE_ALL/DEPARTMENT_EDIT_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\" onclick=\"departmentEditDialog();\">编辑</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/USER/DEPARTMENT/PAGE_ALL/DEPARTMENT_DELETE_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\" onclick=\"departmentDeleteAll();\">删除</a>\n    </nimrod:security>\n</div>\n<table id=\"department\"></table>\n\n<script type=\"text/javascript\">\n\n    $(function () {\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '部门名称'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#department').treegrid(expressui.grid.create, {\n            title: '部门管理',\n            url: Url.User.Api.DEPARTMENT + '/list_all_as_tree_grid',\n            columns: [columns],\n            pagination: false\n        });\n        // $('#department').treegrid({\n        //     title: '部门管理',\n        //     url: Url.User.Api.DEPARTMENT + '/list_all_as_tree_grid',\n        //     // expandUrl: Url.User.Api.DEPARTMENT + '/list_all_by_parent_id/{id}',\n        //     columns: [columns],\n        //     pagination: false\n        // });\n    });\n\n    function departmentAddDialog() {\n        var department = $('#department').treegrid(expressui.grid.getCheckedOneNoCheckedOrShowAlert);\n\n        $('#departmentAddDialog').dialog(expressui.dialog.create, {\n            title: '新增部门',\n            grid: {type: 'treegrid', selector: '#department'},\n            href: Url.User.Page.DEPARTMENT + '/add_dialog',\n            save: {\n                url: Url.User.Api.DEPARTMENT + '/add_one',\n                data: department ? {parentId: department.id} : {}, // 非必传参数\n                method: 'post'\n            },\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'treegrid', selector: '#department'}],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function departmentEditDialog() {\n        var one = $('#department').treegrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (one) {\n            $('#departmentEditDialog').dialog(expressui.dialog.create, {\n                title: '编辑 API 分类',\n                grid: {type: 'treegrid', selector: '#department'},\n                href: Url.User.Page.DEPARTMENT + '/edit_dialog',\n                get: {url: Url.User.Api.DEPARTMENT + '/one/{id}', method: 'get'},\n                save: {url: Url.User.Api.DEPARTMENT + '/save_one', method: 'post'},\n                buttons: [{\n                    text: '保存',\n                    iconCls: 'iconfont icon-save',\n                    handler: expressui.dialog.save,\n                    reload: [{type: 'treegrid', selector: '#department'}],\n                    success: '保存成功'\n                }, {\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n        }\n    }\n\n    function departmentDeleteAll() {\n        $('#department').treegrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.User.Api.DEPARTMENT + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            reload: [{type: 'treegrid', selector: '#department'}]\n        });\n    }\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">\n                <div class=\"user-avatar\">\n                    <img id=\"avatarSrc\" alt=\"avatar\" style=\"width:40px;height:40px\">\n                </div>\n            </td>\n            <td>\n                <input class=\"easyui-textbox\" data-options=\"cls:'display'\" name=\"avatar\" id=\"avatar\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" onclick=\"changeAvatarDialog();\">更换头像</a>\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" onclick=\"removeAvatar();\">移除头像</a>\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">用户名：</td>\n            <td><input name=\"id\" type=\"hidden\">\n                <input name=\"username\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">密码：</td>\n            <td><input name=\"password\" class=\"easyui-textbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">电子邮箱：</td>\n            <td><input name=\"email\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">电子邮箱是否验证：</td>\n            <td><input name=\"emailIsVerified\" id=\"emailIsVerified\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">所在部门：</td>\n            <td><input name=\"departmentId\" id=\"departmentId\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">是否启用：</td>\n            <td><input name=\"enabled\" id=\"enabled\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\" data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<style>\n    .display {\n        display: none;\n    }\n\n    .user-avatar {\n        float: right;\n        width: 48px;\n        height: 48px;\n    }\n\n    .user-avatar img {\n        margin: 4px;\n        border-radius: 20px;\n        -webkit-border-radius: 20px;\n        -moz-border-radius: 20px;\n    }\n</style>\n<script type=\"text/javascript\">\n    $(function () {\n        $('#avatarSrc').attr('src', _defaultAvatar);\n        $('#avatar').textbox({\n            onChange: function (newValue, oldValue) {\n                if (newValue === null || newValue === '') {\n                    newValue = _defaultAvatar;\n                } else {\n                    newValue = Url.System.Api.FILE + '/download/' + newValue\n                }\n                $('#avatarSrc').attr('src', newValue);\n            }\n        });\n        $('#emailIsVerified').combobox({\n            url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n            method: 'get',\n            valueField: 'value',\n            textField: 'valueName',\n            required: true\n        });\n        $('#departmentId').combotree({\n            required: true,\n            method: 'get',\n            valueField: 'id',\n            textField: 'text',\n            url: Url.User.Api.DEPARTMENT + '/list_all_as_combo_tree',\n        });\n        $('#enabled').combobox({\n            url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n            method: 'get',\n            valueField: 'value',\n            textField: 'valueName',\n            required: true\n        });\n    });\n\n    function changeAvatarDialog() {\n        $('#changeAvatarDialog').dialog(expressui.dialog.create, {\n            title: '更换头像',\n            width: 600,\n            height: 400,\n            grid: {type: 'datagrid', selector: '#user'},\n            href: Url.User.Page.USER + '/change_avatar_dialog',\n            buttons: [{\n                text: '确定',\n                iconCls: 'iconfont icon-save',\n                handler: function () {\n                    var guid = $('#file').datagrid('getChecked')[0].guid;\n                    $('#avatar').textbox('setValue', guid);\n                    $('#changeAvatarDialog').dialog('close');\n                },\n                reload: [{type: 'datagrid', selector: '#user'}],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function removeAvatar() {\n        $('#avatar').textbox('setValue', '');\n    }\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div id=\"userToolbar\">\n    <nimrod:security authority=\"/COMPONENT/USER/PAGE_ALL/USER_ADD_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\" onclick=\"userAddDialog();\">新增</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/USER/PAGE_ALL/USER_EDIT_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\" onclick=\"userEditDialog();\">编辑</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/USER/PAGE_ALL/USER_FAKE_DELETE_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n           onclick=\"userFakeDeleteAll();\">删除</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/USER/PAGE_ALL/USER_REVOKE_FAKE_DELETE_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-undo\"\n           onclick=\"userRevokeFakeDeleteAll();\">撤销删除</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/USER/PAGE_ALL/USER_DELETE_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n           onclick=\"userDeleteAll();\">永久删除</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/USER/PAGE_ALL/USER_ROLE_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n           onclick=\"userRoleDialog();\">角色管理</a>\n    </nimrod:security>\n</div>\n<table id=\"user\"></table>\n\n<script type=\"text/javascript\">\n    $(function () {\n        var IS_OR_NOT = [];\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {\n                field: 'avatar', title: '头像', formatter: function (value, row, index) {\n                    if (value) {\n                        value = '<img style=\"width:40px;height:40px;margin: 4px;border-radius: 20px;-webkit-border-radius: 20px;-moz-border-radius: 20px;\" src=\"' + Url.System.Api.FILE + '/download/' + value + '\"/>';\n                    } else {\n                        value = '<img style=\"width:40px;height:40px;margin: 4px;border-radius: 20px;-webkit-border-radius: 20px;-moz-border-radius: 20px;\" src=\"' + _defaultAvatar + '\"/>';\n                    }\n                    return value;\n                }\n            },\n            {field: 'username', title: '用户名'},\n            {field: 'email', title: '电子邮箱'},\n            {\n                field: 'emailIsVerified', title: '电子邮箱是否验证', formatter: function (value, row, index) {\n                    return expressui.grid.formatter(value, IS_OR_NOT);\n                }\n            },\n            {\n                field: 'departmentId', title: '所在部门', formatter: function (value, row, index) {\n                    var departmentName = [];\n                    util.ajax({\n                        url: Url.User.Api.DEPARTMENT + '/list_all_by_department_id/' + value,\n                        async: false,\n                        success: function (data) {\n                            for (var i = 0; i < data.length; i++) {\n                                departmentName.push(data[i].name);\n                            }\n                        }\n                    });\n                    return departmentName.join('\\\\')\n                }\n            },\n            {\n                field: 'enabled', title: '是否启用', formatter: function (value, row, index) {\n                    return expressui.grid.formatter(value, IS_OR_NOT);\n                }\n            },\n            {field: 'remark', title: '备注'},\n            {field: 'gmtDeleted', title: '删除时间'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#user').datagrid(expressui.grid.create, {\n            title: '用户管理',\n            columns: [columns],\n            url: Url.User.Api.USER + '/page_all',\n            onBeforeLoad: function (param) {\n                util.ajax({\n                    url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n                    success: function (data) {\n                        if (data) {\n                            IS_OR_NOT = data;\n                        }\n                    }\n                });\n                IS_OR_NOT.push({value: 'default', valueName: 0});\n            }\n        });\n    });\n\n    function userAddDialog() {\n        $('#userAddDialog').dialog(expressui.dialog.create, {\n            title: '新增用户',\n            width: 500,\n            grid: {type: 'datagrid', selector: '#user'},\n            href: Url.User.Page.USER + '/add_dialog',\n            save: {\n                url: Url.User.Api.USER + '/add_one',\n                method: 'post'\n            },\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'datagrid', selector: '#user'}],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function userEditDialog() {\n        var one = $('#user').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (!one) {\n            return;\n        }\n        $('#userEditDialog').dialog(expressui.dialog.create, {\n            title: '编辑用户',\n            width: 500,\n            grid: {type: 'datagrid', selector: '#user'},\n            href: Url.User.Page.USER + '/edit_dialog',\n            get: {url: Url.User.Api.USER + '/one/{id}', method: 'get'},\n            save: {url: Url.User.Api.USER + '/save_one', method: 'post'},\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.save,\n                reload: [{type: 'datagrid', selector: '#user'}],\n                success: '保存成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function userFakeDeleteAll() {\n        var checked = $('#user').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        if (!checked) {\n            return;\n        }\n        var id = [];\n        for (var i = 0; i < checked.length; i++) {\n            id.push(checked[i].id);\n        }\n        $('#user').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.User.Api.USER + '/fake_delete_all',\n            data: {id: id},\n            method: 'post',\n            success: '删除成功',\n            reload: {type: 'datagrid', selector: '#user'}\n        });\n    }\n\n    function userRevokeFakeDeleteAll() {\n        var checked = $('#user').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        if (!checked) {\n            return;\n        }\n        var id = [];\n        for (var i = 0; i < checked.length; i++) {\n            id.push(checked[i].id);\n        }\n        $('#user').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.User.Api.USER + '/revoke_fake_delete_all',\n            data: {id: id},\n            method: 'post',\n            confirmMessage: '确定要撤销删除勾选项吗',\n            success: '撤销删除成功',\n            reload: {type: 'datagrid', selector: '#user'}\n        });\n    }\n\n    function userDeleteAll() {\n        var checked = $('#user').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        if (!checked) {\n            return;\n        }\n        var id = [];\n        for (var i = 0; i < checked.length; i++) {\n            id.push(checked[i].id);\n        }\n        $('#user').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.User.Api.USER + '/delete_all',\n            data: {id: id},\n            method: 'post',\n            success: '删除成功',\n            reload: {type: 'datagrid', selector: '#user'}\n        });\n    }\n\n    function userRoleDialog() {\n        var checked = $('#user').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (!checked) {\n            return;\n        }\n        $('#userRoleDialog').dialog(expressui.dialog.create, {\n            title: '角色管理',\n            grid: {type: 'datagrid', selector: '#user'},\n            href: Url.User.Page.USER_ROLE + '/list',\n            width: 850,\n            height: 450,\n            buttons: [{\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/login.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base(title='登录')\"></div>\n    <link rel=\"stylesheet\" type=\"text/css\" th:href=\"@{/assets/css/base.css}\">\n    <link rel=\"stylesheet\" type=\"text/css\" th:href=\"@{/assets/css/login.css}\">\n    <script type=\"text/javascript\" th:src=\"@{/assets/js/util.js}\" charset=\"UTF-8\"></script>\n    <script th:src=\"@{/assets/vendor/jquery.placeholder-2.3.1.js}\"></script>\n    <script th:src=\"@{/assets/js/login.js}\"></script>\n    <script>\n        /**\n         * iframe 框架刷新父页面\n         */\n        if (window.top !== window.self) {\n            window.top.location = window.location;\n        }\n    </script>\n</head>\n<body>\n<div class=\"login-page\">\n    <div class=\"login-box\">\n        <div class=\"login-header\">\n            <p><img th:src=\"@{/assets/img/login/login_banner.png}\" style=\"margin-right:30px;\"/></p>\n        </div>\n        <div class=\"login-body\">\n            <div class=\"login-body-left\"></div>\n            <div class=\"login-body-right\">\n                <div class=\"right-title\">用户登录</div>\n                <form th:action=\"@{/user/login/form}\">\n                    <div class=\"account\">\n                        <!--                        <img th:src=\"@{/assets/img/login/username.png}\" alt=\"\">-->\n                        <i class=\"iconfont icon-user\"></i>\n                        <input id=\"account\" name=\"account\" type=\"text\" placeholder=\"请输入用户名\">\n                    </div>\n                    <div class=\"password\">\n                        <i class=\"iconfont icon-lock\"></i>\n                        <input id=\"password\" name=\"password\" type=\"password\" placeholder=\"请输入密码\">\n                    </div>\n                    <div class=\"verify-code\">\n                        <div class=\"verify-code-image\">\n                            <img id=\"verifyCodeImage\" th:src=\"@{/api/system/verify_code}\"/>\n                        </div>\n                        <i class=\"iconfont icon-image\"></i>\n                        <input id=\"verifyCode\" name=\"verifyCode\" type=\"text\" placeholder=\"请输入验证码\">\n                    </div>\n                    <div class=\"remember-me\">\n                        <input id=\"rememberMe\" type=\"checkbox\">\n                        <div>记住我</div>\n                    </div>\n                    <div class=\"login-button\">\n                        <!--                        <a id=\"loginButton\" href=\"javascript:;\">登&nbsp;&nbsp;&nbsp;&nbsp;录</a>-->\n                        <button id=\"loginButton\">登&nbsp;&nbsp;&nbsp;&nbsp;录</button>\n                    </div>\n                    <p style=\"margin-top:20px;font-size:12px;color:#FA6F03;text-align: center\">登录遇到问题，请联系管理员</p>\n                </form>\n            </div>\n        </div>\n        <div class=\"login-footer\">\n            <p>&copy; 2020 godcheese.com</p>\n            <p>建议浏览器：Google Chrome、Firefox、Internet Explorer 9 及以上等</p>\n        </div>\n    </div>\n</div>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/logout.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base(title='注销登录')\"></div>\n    <link rel=\"stylesheet\" type=\"text/css\" th:href=\"@{/assets/css/login.css}\">\n</head>\n<body>\n注销登录。。。\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/profile.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n    <script type=\"text/javascript\" charset=\"UTF-8\" th:src=\"@{/assets/js/global.js}\"></script>\n</head>\n<body>\n<div class=\"submit-form\" id=\"profile\" style=\"width: 500px;margin: 0\">\n    <form>\n        <table class=\"submit-table\">\n            <tr>\n                <td class=\"label\">\n                    <div class=\"user-avatar\">\n                        <img id=\"avatarSrc\" alt=\"avatar\" style=\"width:40px;height:40px\">\n                    </div>\n                </td>\n                <td>\n                    <input class=\"easyui-textbox\" data-options=\"cls:'display'\" name=\"avatar\" id=\"avatar\">\n                    <a href=\"javascript:\" class=\"easyui-linkbutton\" onclick=\"changeAvatarDialog();\">更换头像</a>\n                    <a href=\"javascript:\" class=\"easyui-linkbutton\" onclick=\"removeAvatar();\">移除头像</a>\n                </td>\n            </tr>\n            <tr>\n                <td class=\"label\">用户名：</td>\n                <td><input name=\"id\" type=\"hidden\">\n                    <input name=\"username\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n                </td>\n            </tr>\n            <tr>\n                <td class=\"label\">密码：</td>\n                <td>\n                    <input id=\"password\" value=\"password\" class=\"easyui-passwordbox\"\n                           data-options=\"disabled: true,showEye: false\"> <a href=\"javascript:\" class=\"easyui-linkbutton\"\n                                                                            onclick=\"changePasswordDialog();\">更改密码</a>\n                </td>\n            </tr>\n            <tr>\n                <td class=\"label\">电子邮箱：</td>\n                <td>\n                    <input name=\"email\" id=\"email\" class=\"easyui-textbox\" data-options=\"disabled: true\"> <a\n                        href=\"javascript:\" class=\"easyui-linkbutton\" onclick=\"changeEmailDialog();\">更换邮箱</a>\n                </td>\n            </tr>\n            <tr>\n                <td class=\"label\">角色：</td>\n                <td>\n                    <input id=\"roles\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n                </td>\n            </tr>\n            <tr>\n                <td class=\"label\">所在部门：</td>\n                <td>\n                    <input id=\"departments\" class=\"easyui-textbox\" data-options=\"disabled: true\">\n                </td>\n            </tr>\n        </table>\n        <div class=\"submit-button\">\n            <a href=\"javascript:expressui.form.submit({selector:'#profile', url: Url.User.Api.USER + '/save_profile', method:'post', success: '操作成功'});\"\n               class=\"easyui-linkbutton\" data-options=\"iconCls:'iconfont icon-save'\">保存</a>\n        </div>\n    </form>\n</div>\n<style type=\"text/css\">\n    .display {\n        display: none;\n    }\n\n    .user-avatar {\n        float: right;\n        width: 48px;\n        height: 48px;\n    }\n\n    .user-avatar img {\n        margin: 4px;\n        border-radius: 20px;\n        -webkit-border-radius: 20px;\n        -moz-border-radius: 20px;\n    }\n</style>\n<script>\n    $(function () {\n        $('#avatarSrc').attr('src', _defaultAvatar);\n        $('#avatar').textbox({\n            onChange: function (newValue, oldValue) {\n                if (newValue === null || newValue === '') {\n                    newValue = _defaultAvatar;\n                } else {\n                    newValue = Url.System.Api.FILE + '/download/' + newValue\n                }\n                $('#avatarSrc').attr('src', newValue);\n            }\n        });\n        util.ajax({\n            url: Url.User.Api.USER + '/get_profile_by_current_user',\n            success: function (data) {\n                $('#profile').form('load', data);\n                var roles = [];\n                for (var i in data.roles) {\n                    if (data.roles.hasOwnProperty(i)) {\n                        roles[i] = data.roles[i].name;\n                    }\n                }\n                $('#roles').textbox('setValue', roles.join(\"/\"));\n\n                $('#role').datagrid({data: data.roles});\n                var departments = [];\n                for (i in data.departments) {\n                    if (data.departments.hasOwnProperty(i)) {\n                        departments[i] = data.departments[i].name;\n                    }\n                }\n                $('#departments').textbox('setValue', departments.join(\"/\"));\n            },\n            error: function (xhr) {\n            }\n        });\n    });\n\n    function changeAvatarDialog() {\n        $('#changeAvatarDialog').dialog(expressui.dialog.create, {\n            title: '更换头像',\n            width: 600,\n            height: 400,\n            href: Url.User.Page.USER + '/change_avatar_dialog',\n            buttons: [{\n                text: '确定',\n                iconCls: 'iconfont icon-save',\n                handler: function () {\n                    var guid = $('#file').datagrid('getChecked')[0].guid;\n                    $('#avatar').textbox('setValue', guid);\n                    $('#changeAvatarDialog').dialog('close');\n                },\n                success: '保存成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function removeAvatar() {\n        $('#avatar').textbox('setValue', '');\n    }\n\n    function changePasswordDialog() {\n        $('#changePasswordDialog').dialog(expressui.dialog.create, {\n            title: '更改密码',\n            width: 510,\n            height: 230,\n            href: Url.User.Page.USER + '/change_password_dialog',\n            buttons: [{\n                text: '确定',\n                iconCls: 'iconfont icon-save',\n                handler: function () {\n                    var password2Value = $('#password2').passwordbox('getValue');\n                    var newPasswordValue = $('#newPassword').passwordbox('getValue');\n                    var confirmNewPasswordValue = $('#confirmNewPassword').passwordbox('getValue');\n                    $('#changePasswordDialog').form('submit', {\n                        beforeSend: function () {\n                            $('#password2').passwordbox({disabled: true});\n                            $('#password2').passwordbox('setValue', password2Value);\n                            $('#newPassword').passwordbox({disabled: true});\n                            $('#newPassword').passwordbox('setValue', newPasswordValue);\n                            $('#confirmNewPassword').passwordbox({disabled: true});\n                            $('#confirmNewPassword').passwordbox('setValue', confirmNewPasswordValue);\n                        },\n                        complete: function () {\n                            $('#password2').passwordbox({disabled: false});\n                            $('#password2').passwordbox('setValue', password2Value);\n                            $('#newPassword').passwordbox({disabled: false});\n                            $('#newPassword').passwordbox('setValue', newPasswordValue);\n                            $('#confirmNewPassword').passwordbox({disabled: false});\n                            $('#confirmNewPassword').passwordbox('setValue', confirmNewPasswordValue);\n\n                        },\n                        url: Url.User.Api.USER + '/change_password_by_current_user',\n                        success: function (res) {\n                            // $.messager.show({title: '信息', msg: '密码修改成功'});\n                            // $.messager.alert({title: '信息', msg: '密码修改成功'});\n                            // $('#changePasswordDialog').dialog('close');\n                            $.messager.alert({\n                                title: '信息',\n                                msg: '密码修改成功，请重新登录',\n                                icon: 'info',\n                                fn: function () {\n                                    expressui.ajax({\n                                        // dataType: 'json',\n                                        url: Url.User.Api.LOGOUT,\n                                        success: function (data) {\n                                            window.location.href = Url.User.Page.LOGIN;\n                                        },\n                                        error: function (xhr) {\n                                            alert(\"注销失败\");\n                                        }\n                                    });\n                                }\n                            });\n                        },\n                        error: function (xhr) {\n                            if (xhr.responseJSON) {\n                                $.messager.alert('信息', xhr.responseJSON.message, 'error');\n                            }\n                        }\n                    });\n                },\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function changeEmailDialog() {\n        $('#changeEmailDialog').dialog(expressui.dialog.create, {\n            title: '更换邮箱',\n            width: 580,\n            height: 200,\n            href: Url.User.Page.USER + '/change_email_dialog',\n            get: {url: Url.User.Api.USER + '/get_profile_by_current_user'},\n            buttons: [{\n                text: '下一步',\n                iconCls: 'iconfont icon-chevron-right',\n                handler: function () {\n                    var _this = this;\n                    if ($(_this).context.innerText.trim() === '下一步') {\n                        $('#changeEmailDialog').form('submit', {\n                            url: Url.User.Api.USER + '/check_email_verify_code_by_current_user',\n                            success: function (res) {\n                                $('#newEmail').textbox({required: true});\n                                $('#newEmailVerifyCode').textbox({required: true});\n                                $('#emailTr').css('display', 'none');\n                                $('#emailVerifyCodeTr').css('display', 'none');\n                                $('#newEmailTr').css('display', 'table-row');\n                                $('#newEmailVerifyCodeTr').css('display', 'table-row');\n                                $(_this).context.innerHTML = '<span class=\"l-btn-left l-btn-icon-left\"><span class=\"l-btn-text\">确定</span><span class=\"l-btn-icon iconfont icon-save\">&nbsp;</span></span>';\n                            },\n                            error: function (xhr) {\n                                if (xhr.responseJSON) {\n                                    $.messager.alert('信息', xhr.responseJSON.message, 'error');\n                                }\n                            }\n                        });\n                    } else {\n                        $('#changeEmailDialog').form('submit', {\n                            url: Url.User.Api.USER + '/change_email_by_current_user',\n                            success: function (res) {\n                                $.messager.show({title: '信息', msg: '电子邮箱更换成功'});\n                                $('#email').textbox('setValue', $('#newEmail').textbox('getValue'));\n                                $('#email').textbox({disabled: true});\n                                $('#changeEmailDialog').dialog('close');\n                            },\n                            error: function (xhr) {\n                                if (xhr.responseJSON) {\n                                    $.messager.alert('信息', xhr.responseJSON.message, 'error');\n                                }\n                            }\n                        });\n                    }\n                },\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/role/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">角色名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">角色值：</td>\n            <td><input name=\"value\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n"
  },
  {
    "path": "src/main/resources/templates/user/role/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">角色名称：</td>\n            <td><input name=\"id\" type=\"hidden\">\n                <input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n"
  },
  {
    "path": "src/main/resources/templates/user/role/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div id=\"roleToolbar\">\n    <nimrod:security authority=\"/COMPONENT/USER/ROLE/PAGE_ALL/ROLE_ADD_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\" onclick=\"roleAddDialog();\">新增</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/USER/ROLE/PAGE_ALL/ROLE_EDIT_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\" onclick=\"roleEditDialog();\">编辑</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/USER/ROLE/PAGE_ALL/ROLE_DELETE_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\" onclick=\"roleDeleteAll();\">删除</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/USER/ROLE/PAGE_ALL/VIEW_MENU_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n           onclick=\"viewMenuDialog();\">视图菜单管理</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/USER/ROLE/PAGE_ALL/ROLE_AUTHORITY_VIEW_PAGE_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n           onclick=\"roleAuthorityViewPageDialog();\">视图页面权限管理</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/USER/ROLE/PAGE_ALL/ROLE_AUTHORITY_API_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n           onclick=\"roleAuthorityApiDialog();\">API 权限管理</a>\n    </nimrod:security>\n</div>\n<table id=\"role\"></table>\n\n<script type=\"text/javascript\">\n    $(function () {\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '角色名称'},\n            {field: 'value', title: '角色值'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#role').datagrid(expressui.grid.create, {\n            title: '用户角色',\n            columns: [columns],\n            url: Url.User.Api.ROLE + '/page_all'\n        });\n    });\n\n    function roleAddDialog() {\n        $('#roleAddDialog').dialog(expressui.dialog.create, {\n            title: '新增用户角色',\n            grid: {type: 'datagrid', selector: '#role'},\n            href: Url.User.Page.ROLE + '/add_dialog',\n            save: {\n                url: Url.User.Api.ROLE + '/add_one',\n                method: 'post'\n            },\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'datagrid', selector: '#role'}],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function roleEditDialog() {\n        var one = $('#role').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (one) {\n            $('#roleEditDialog').dialog(expressui.dialog.create, {\n                title: '编辑用户角色',\n                grid: {type: 'datagrid', selector: '#role'},\n                href: Url.User.Page.ROLE + '/edit_dialog',\n                get: {url: Url.User.Api.ROLE + '/one/{id}', method: 'get'},\n                save: {url: Url.User.Api.ROLE + '/save_one', method: 'post'},\n                buttons: [{\n                    text: '保存',\n                    iconCls: 'iconfont icon-save',\n                    handler: expressui.dialog.save,\n                    reload: [{type: 'datagrid', selector: '#role'}],\n                    success: '保存成功'\n                }, {\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n        }\n    }\n\n    function roleDeleteAll() {\n        $('#role').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.User.Api.ROLE + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            reload: {type: 'datagrid', selector: '#role'}\n        });\n    }\n\n    function viewMenuDialog() {\n        var one = $('#role').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (!one) {\n            return;\n        }\n\n        $('#viewMenuDialog').dialog(expressui.dialog.create, {\n            title: '视图菜单管理',\n            grid: {type: 'datagrid', selector: '#role'},\n            href: Url.User.Page.ROLE_VIEW_MENU + '/list',\n            width: 850,\n            height: 450,\n            buttons: [{\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function roleAuthorityViewPageDialog() {\n        var one = $('#role').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (!one) {\n            return;\n        }\n\n        $('#roleAuthorityViewPageDialog').dialog(expressui.dialog.create, {\n            title: '视图页面权限管理',\n            grid: {type: 'datagrid', selector: '#role'},\n            href: Url.User.Page.ROLE_AUTHORITY + '/view_page',\n            width: 850,\n            height: 450,\n            buttons: [{\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function roleAuthorityApiDialog() {\n        var one = $('#role').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (!one) {\n            return;\n        }\n\n        $('#roleAuthorityApiDialog').dialog(expressui.dialog.create, {\n            title: 'API 权限管理',\n            grid: {type: 'datagrid', selector: '#role'},\n            href: Url.User.Page.ROLE_AUTHORITY + '/api',\n            width: 850,\n            height: 450,\n            buttons: [{\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/role_authority/api.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div class=\"easyui-layout\" data-options=\"fit:true\">\n    <div data-options=\"region:'west',split:true\" style=\"width:40%\">\n        <table id=\"roleAuthorityApiCategory\"></table>\n    </div>\n    <div data-options=\"region:'center',split:true\">\n        <div id=\"roleAuthorityApiToolbar\">\n            <nimrod:security authority=\"/COMPONENT/USER/ROLE_AUTHORITY/API/PAGE_ALL/ROLE_AUTHORITY_API_GRANT_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n                   onclick=\"roleAuthorityApiGrantAll();\">授权</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/ROLE_AUTHORITY/API/PAGE_ALL/ROLE_AUTHORITY_API_REVOKE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"roleAuthorityApiRevokeAll();\">撤销授权</a>\n            </nimrod:security>\n        </div>\n        <table id=\"roleAuthorityApi\"></table>\n    </div>\n</div>\n\n<script type=\"text/javascript\">\n    var roleId;\n    $(function () {\n        var checkedRole = $('#role').datagrid('getChecked')[0];\n        if (checkedRole) {\n            roleId = checkedRole.id;\n        }\n\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '分类名称'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#roleAuthorityApiCategory').treegrid(expressui.grid.create, {\n            title: 'API 分类',\n            url: Url.User.Api.API_CATEGORY + '/list_all_parent',\n            expandUrl: Url.User.Api.API_CATEGORY + '/list_all_by_parent_id?parentId={id}',\n            columns: [columns],\n            onCheck: function (row) {\n                if (row) {\n                    $('#roleAuthorityApi').datagrid('reload', Url.User.Api.API + '/page_all_by_api_category_id?apiCategoryId=' + row.id + '&roleId=' + roleId);\n                }\n            },\n            onUncheck: function (index, row) {\n                $('#roleAuthorityApi').datagrid('loadData', []);\n            }\n        });\n\n        var IS_OR_NOT = [];\n        columns = [\n            {field: 'checkbox', checkbox: true},\n            {\n                field: 'isGranted', title: '是否已授权', formatter: function (value, row) {\n                    return expressui.grid.formatter(value, IS_OR_NOT);\n                }\n            },\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: 'API 名称'},\n            {field: 'url', title: '请求地址（url）'},\n            {field: 'authority', title: '权限（authority）'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#roleAuthorityApi').datagrid(expressui.grid.create, {\n            title: 'API',\n            columns: [columns],\n            onBeforeLoad: function (param) {\n                util.ajax({\n                    url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n                    success: function (data) {\n                        if (data) {\n                            IS_OR_NOT = data;\n                        }\n                    }\n                });\n            },\n        });\n    });\n\n    function roleAuthorityApiGrantAll() {\n        var checkedAll = $('#roleAuthorityApi').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var authorityList = [];\n        if (checkedAll) {\n            for (var i = 0; i < checkedAll.length; i++) {\n                authorityList[i] = checkedAll[i].authority;\n            }\n            util.ajax({\n                url: Url.User.Api.ROLE_AUTHORITY + '/grant_all_by_role_id_and_api_authority_list',\n                data: {roleId: roleId, authorityList: authorityList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '授权成功'});\n                    $('#roleAuthorityApi').datagrid('reload');\n                    $('#roleAuthorityApi').datagrid('clearSelections');\n                    $('#roleAuthorityApi').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n\n    function roleAuthorityApiRevokeAll() {\n        var checkedAll = $('#roleAuthorityApi').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var authorityList = [];\n        if (checkedAll) {\n            for (var i = 0; i < checkedAll.length; i++) {\n                authorityList[i] = checkedAll[i].authority;\n            }\n            util.ajax({\n                url: Url.User.Api.ROLE_AUTHORITY + '/revoke_all_by_role_id_and_api_authority_list',\n                data: {roleId: roleId, authorityList: authorityList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '撤销授权成功'});\n                    $('#roleAuthorityApi').datagrid('reload');\n                    $('#roleAuthorityApi').datagrid('clearSelections');\n                    $('#roleAuthorityApi').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/role_authority/view_page.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div class=\"easyui-layout\" data-options=\"fit:true\">\n    <div data-options=\"region:'west',split:true\" style=\"width:30%\">\n        <table id=\"roleAuthorityViewPageCategory\"></table>\n    </div>\n    <div data-options=\"region:'center',split:true\">\n        <div id=\"roleAuthorityViewPageToolbar\">\n            <nimrod:security\n                    authority=\"/COMPONENT/USER/ROLE_AUTHORITY/VIEW_PAGE/PAGE_ALL/ROLE_AUTHORITY_VIEW_PAGE_GRANT_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"roleAuthorityViewPageGrantAll();\">授权</a>\n            </nimrod:security>\n            <nimrod:security\n                    authority=\"/COMPONENT/USER/ROLE_AUTHORITY/VIEW_PAGE/PAGE_ALL/ROLE_AUTHORITY_VIEW_PAGE_REVOKE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"roleAuthorityViewPageRevokeAll();\">撤销授权</a>\n            </nimrod:security>\n        </div>\n        <table id=\"roleAuthorityViewPage\"></table>\n    </div>\n    <div data-options=\"region:'east',split:true\" style=\"width:30%\">\n        <div id=\"roleAuthorityViewPageComponentToolbar\">\n            <nimrod:security\n                    authority=\"/COMPONENT/USER/ROLE_AUTHORITY/VIEW_PAGE/PAGE_ALL/ROLE_AUTHORITY_VIEW_PAGE_COMPONENT_GRANT_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"roleAuthorityViewPageComponentGrantAll();\">授权</a>\n            </nimrod:security>\n            <nimrod:security\n                    authority=\"/COMPONENT/USER/ROLE_AUTHORITY/VIEW_PAGE/PAGE_ALL/ROLE_AUTHORITY_VIEW_PAGE_COMPONENT_REVOKE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"roleAuthorityViewPageComponentRevokeAll();\">撤销授权</a>\n            </nimrod:security>\n        </div>\n        <table id=\"roleAuthorityViewPageComponent\"></table>\n    </div>\n</div>\n\n<script type=\"text/javascript\">\n    var roleId;\n    $(function () {\n        var checkedRole = $('#role').datagrid('getChecked')[0];\n        if (checkedRole) {\n            roleId = checkedRole.id;\n        }\n\n        var IS_OR_NOT = [];\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '分类名称'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#roleAuthorityViewPageCategory').treegrid(expressui.grid.create, {\n            title: '视图页面分类',\n            url: Url.User.Api.VIEW_PAGE_CATEGORY + '/list_all_parent',\n            expandUrl: Url.User.Api.VIEW_PAGE_CATEGORY + '/list_all_by_parent_id?parentId={id}',\n            columns: [columns],\n            onBeforeLoad: function (param) {\n                util.ajax({\n                    url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n                    success: function (data) {\n                        if (data) {\n                            IS_OR_NOT = data;\n                        }\n                    }\n                });\n            },\n            onCheck: function (row) {\n                if (row) {\n                    $('#roleAuthorityViewPage').datagrid('reload', Url.User.Api.VIEW_PAGE + '/page_all_by_view_page_category_id?viewPageCategoryId=' + row.id + \"&roleId=\" + roleId);\n                    $('#roleAuthorityViewPageComponent').datagrid('loadData', []);\n                }\n            },\n            onUncheck: function (index, row) {\n                $('#roleAuthorityViewPage').datagrid('loadData', []);\n                $('#roleAuthorityViewPageComponent').datagrid('loadData', []);\n            }\n\n        });\n\n        columns = [\n            {field: 'checkbox', checkbox: true},\n            {\n                field: 'isGranted', title: '是否已授权', formatter: function (value, row) {\n                    return expressui.grid.formatter(value, IS_OR_NOT);\n                }\n            },\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '页面名称'},\n            {field: 'url', title: '请求地址（url）'},\n            {field: 'authority', title: '权限（authority）'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#roleAuthorityViewPage').datagrid(expressui.grid.create, {\n            title: '视图页面',\n            columns: [columns],\n            onCheck: function (index, row) {\n                if (row) {\n                    $('#roleAuthorityViewPageComponent').datagrid('reload', Url.User.Api.VIEW_PAGE_COMPONENT + '/page_all_by_view_page_id?viewPageId=' + row.id + \"&roleId=\" + roleId);\n                }\n            },\n            onUncheck: function (index, row) {\n                $('#roleAuthorityViewPageComponent').datagrid('loadData', []);\n            }\n        });\n\n        columns = [\n            {field: 'checkbox', checkbox: true},\n            {\n                field: 'isGranted', title: '是否已授权', formatter: function (value, row) {\n                    return expressui.grid.formatter(value, IS_OR_NOT);\n                }\n            },\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '页面名称'},\n            {field: 'url', title: '请求地址（url）'},\n            {field: 'authority', title: '权限（authority）'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtCreated', title: '创建时间'},\n            {field: 'gmtModified', title: '更新时间'}\n        ];\n        $('#roleAuthorityViewPageComponent').datagrid(expressui.grid.create, {\n            title: '视图页面组件',\n            columns: [columns]\n        });\n    });\n\n    function roleAuthorityViewPageGrantAll() {\n        var checkedAll = $('#roleAuthorityViewPage').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var authorityList = [];\n        if (checkedAll) {\n            for (var i = 0; i < checkedAll.length; i++) {\n                authorityList[i] = checkedAll[i].authority;\n            }\n            util.ajax({\n                url: Url.User.Api.ROLE_AUTHORITY + '/grant_all_by_role_id_and_view_page_authority_list',\n                data: {roleId: roleId, authorityList: authorityList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '授权成功'});\n                    $('#roleAuthorityViewPage').datagrid('reload');\n                    $('#roleAuthorityViewPage').datagrid('clearSelections');\n                    $('#roleAuthorityViewPage').datagrid('clearChecked');\n\n                    $('#roleAuthorityViewPageComponent').datagrid('reload');\n                    $('#roleAuthorityViewPageComponent').datagrid('clearSelections');\n                    $('#roleAuthorityViewPageComponent').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n\n    function roleAuthorityViewPageRevokeAll() {\n        // $('#role').datagrid( expressui.grid.postCheckedLessOneOrShowAlert,  {url: Url.User.Api.ROLE + '/delete_all', method:'post', success: function () {\n        //         $('#role').datagrid('reload');\n        //     } });\n\n        var checkedAll = $('#roleAuthorityViewPage').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var authorityList = [];\n        if (checkedAll) {\n            for (var i = 0; i < checkedAll.length; i++) {\n                authorityList[i] = checkedAll[i].authority;\n            }\n            util.ajax({\n                url: Url.User.Api.ROLE_AUTHORITY + '/revoke_all_by_role_id_and_view_page_authority_list',\n                data: {roleId: roleId, authorityList: authorityList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '撤销授权成功'});\n                    $('#roleAuthorityViewPage').datagrid('reload');\n                    $('#roleAuthorityViewPage').datagrid('clearSelections');\n                    $('#roleAuthorityViewPage').datagrid('clearChecked');\n\n                    $('#roleAuthorityViewPageComponent').datagrid('reload');\n                    $('#roleAuthorityViewPageComponent').datagrid('clearSelections');\n                    $('#roleAuthorityViewPageComponent').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n\n    function roleAuthorityViewPageComponentGrantAll() {\n        var checkedAll = $('#roleAuthorityViewPageComponent').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var authorityList = [];\n        if (checkedAll) {\n            for (var i = 0; i < checkedAll.length; i++) {\n                authorityList[i] = checkedAll[i].authority;\n            }\n            util.ajax({\n                url: Url.User.Api.ROLE_AUTHORITY + '/grant_all_by_role_id_and_view_page_component_authority_list',\n                data: {roleId: roleId, authorityList: authorityList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '授权成功'});\n                    $('#roleAuthorityViewPageComponent').datagrid('reload');\n                    // $('#roleAuthorityViewPageComponent').datagrid('clearSelections');\n                    // $('#roleAuthorityViewPageComponent').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n\n    function roleAuthorityViewPageComponentRevokeAll() {\n        // $('#role').datagrid( expressui.grid.postCheckedLessOneOrShowAlert,  {url: Url.User.Api.ROLE + '/delete_all', method:'post', success: function () {\n        //         $('#role').datagrid('reload');\n        //     } });\n\n        var checkedAll = $('#roleAuthorityViewPageComponent').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var authorityList = [];\n        if (checkedAll) {\n            for (var i = 0; i < checkedAll.length; i++) {\n                authorityList[i] = checkedAll[i].authority;\n            }\n            util.ajax({\n                url: Url.User.Api.ROLE_AUTHORITY + '/revoke_all_by_role_id_and_view_page_component_authority_list',\n                data: {roleId: roleId, authorityList: authorityList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '撤销授权成功'});\n                    $('#roleAuthorityViewPageComponent').datagrid('reload');\n                    // $('#roleAuthorityViewPageComponent').datagrid('clearSelections');\n                    // $('#roleAuthorityViewPageComponent').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/role_view_menu/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div class=\"easyui-layout\" data-options=\"fit:true\">\n    <div data-options=\"region:'west',split:true\" style=\"width:40%\">\n        <div id=\"viewMenuCategoryToolbar\">\n            <nimrod:security authority=\"/COMPONENT/USER/ROLE_VIEW_MENU/ROLE_VIEW_MENU_CATEGORY_GRANT_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"roleViewMenuCategoryGrantAll();\">授权</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/USER_ROLE/PAGE_ALL/USER_ROLE_DELETE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"roleViewMenuCategoryRevokeAll();\">撤销授权</a>\n            </nimrod:security>\n        </div>\n        <table id=\"viewMenuCategory\"></table>\n    </div>\n    <div data-options=\"region:'center',split:true\">\n        <div id=\"viewMenuToolbar\">\n            <nimrod:security authority=\"/COMPONENT/USER/USER_ROLE/PAGE_ALL/USER_ROLE_ADD_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"roleViewMenuGrantAll();\">授权</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/USER_ROLE/PAGE_ALL/USER_ROLE_DELETE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"roleViewMenuRevokeAll();\">撤销授权</a>\n            </nimrod:security>\n        </div>\n        <table id=\"viewMenu\"></table>\n    </div>\n</div>\n<script type=\"text/javascript\">\n    var roleId;\n    $(function () {\n        var checkedRole = $('#role').datagrid('getChecked')[0];\n        if (checkedRole) {\n            roleId = checkedRole.id;\n        }\n\n        var IS_OR_NOT = [];\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {\n                field: 'isGranted', title: '是否已授权', formatter: function (value, row) {\n                    return expressui.grid.formatter(value, IS_OR_NOT);\n                }\n            },\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '分类名称'},\n            {field: 'icon', title: '图标（icon）'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#viewMenuCategory').treegrid(expressui.grid.create, {\n            title: '视图菜单分类',\n            url: Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_parent?roleId=' + roleId,\n            expandUrl: Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_by_parent_id?parentId={id}&roleId=' + roleId,\n            columns: [columns],\n            onBeforeLoad: function (param) {\n                util.ajax({\n                    url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n                    success: function (data) {\n                        if (data) {\n                            IS_OR_NOT = data;\n                        }\n                    }\n                });\n            },\n            onCheck: function (row) {\n                if (row) {\n                    $('#viewMenu').datagrid('reload', Url.User.Api.VIEW_MENU + '/page_all_by_view_menu_category_id?viewMenuCategoryId=' + row.id + \"&roleId=\" + roleId);\n                }\n            },\n            onUncheck: function (index, row) {\n                $('#viewMenu').datagrid('loadData', []);\n            }\n        });\n        columns = [\n            {field: 'checkbox', checkbox: true},\n            {\n                field: 'isGranted', title: '是否已授权', formatter: function (value, row) {\n                    return expressui.grid.formatter(value, IS_OR_NOT);\n                }\n            },\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '菜单名称'},\n            {field: 'icon', title: '图标（icon）'},\n            {field: 'url', title: '请求地址（url）'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#viewMenu').datagrid(expressui.grid.create, {\n            title: '视图菜单',\n            columns: [columns]\n        });\n    });\n\n    function roleViewMenuCategoryGrantAll() {\n        var checkedAll = $('#viewMenu').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var viewMenuIdList = [];\n        if (checkedAll) {\n            for (var i = 0; i < checkedAll.length; i++) {\n                viewMenuIdList[i] = checkedAll[i].id;\n            }\n            util.ajax({\n                url: Url.User.Api.ROLE_VIEW_MENU + '/grant_all_by_role_id_and_view_menu_id_list',\n                data: {roleId: roleId, viewMenuIdList: viewMenuIdList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '授权成功'});\n                    $('#viewMenu').datagrid('reload');\n                    $('#viewMenu').datagrid('clearSelections');\n                    $('#viewMenu').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n\n    function roleViewMenuCategoryRevokeAll() {\n        var checkedAll = $('#viewMenu').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var viewMenuIdList = [];\n        if (checkedAll) {\n            for (var i = 0; i < checkedAll.length; i++) {\n                viewMenuIdList[i] = checkedAll[i].id;\n            }\n            util.ajax({\n                url: Url.User.Api.ROLE_VIEW_MENU + '/revoke_all_by_role_id_and_view_menu_id_list',\n                data: {roleId: roleId, viewMenuIdList: viewMenuIdList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '撤销授权成功'});\n                    $('#viewMenu').datagrid('reload');\n                    $('#viewMenu').datagrid('clearSelections');\n                    $('#viewMenu').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n\n    function roleViewMenuGrantAll() {\n        var checkedAll = $('#viewMenu').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var viewMenuIdList = [];\n        if (checkedAll) {\n            for (var i = 0; i < checkedAll.length; i++) {\n                viewMenuIdList[i] = checkedAll[i].id;\n            }\n            util.ajax({\n                url: Url.User.Api.ROLE_VIEW_MENU + '/grant_all_by_role_id_and_view_menu_id_list',\n                data: {roleId: roleId, viewMenuIdList: viewMenuIdList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '授权成功'});\n                    $('#viewMenu').datagrid('reload');\n                    $('#viewMenu').datagrid('clearSelections');\n                    $('#viewMenu').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n\n    function roleViewMenuRevokeAll() {\n        var checkedAll = $('#viewMenu').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var viewMenuIdList = [];\n        if (checkedAll) {\n            for (var i = 0; i < checkedAll.length; i++) {\n                viewMenuIdList[i] = checkedAll[i].id;\n            }\n            util.ajax({\n                url: Url.User.Api.ROLE_VIEW_MENU + '/revoke_all_by_role_id_and_view_menu_id_list',\n                data: {roleId: roleId, viewMenuIdList: viewMenuIdList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '撤销授权成功'});\n                    $('#viewMenu').datagrid('reload');\n                    $('#viewMenu').datagrid('clearSelections');\n                    $('#viewMenu').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/user_role/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">角色：</td>\n            <td><input name=\"roleId\" id=\"roleId\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n    </table>\n</div>\n\n<script type=\"text/javascript\">\n    $('#roleId').combobox({\n        url: Url.User.Api.ROLE + '/list_all',\n        method: 'GET',\n        valueField: 'id',\n        textField: 'name'\n    });\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/user_role/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n\n<div id=\"userRoleToolbar\">\n    <nimrod:security authority=\"/COMPONENT/USER/USER_ROLE/PAGE_ALL/USER_ROLE_ADD_DIALOG\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\" onclick=\"userRoleAddDialog();\">授权用户角色</a>\n    </nimrod:security>\n    <nimrod:security authority=\"/COMPONENT/USER/USER_ROLE/PAGE_ALL/USER_ROLE_DELETE_ALL\">\n        <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\" onclick=\"userRoleDeleteAll();\">撤销授权用户角色</a>\n    </nimrod:security>\n</div>\n<table id=\"userRole\"></table>\n\n<script type=\"text/javascript\">\n    var user = $('#user').datagrid('getChecked');\n    $(function () {\n        if (user) {\n            var columns = [\n                {field: 'checkbox', checkbox: true},\n                {field: 'id', title: 'ID'},\n                {field: 'name', title: '角色名称'},\n                {field: 'value', title: '角色值'},\n                {field: 'remark', title: '备注'},\n            ];\n            $('#userRole').datagrid(expressui.grid.create, {\n                columns: [columns],\n                url: Url.User.Api.ROLE + '/list_all_by_user_id/' + user[0].id\n            });\n        }\n    });\n\n    function userRoleAddDialog() {\n        $('#userRoleAddDialog').dialog(expressui.dialog.create, {\n            title: '授权用户角色',\n            grid: {type: 'datagrid', selector: '#user'},\n            href: Url.User.Page.USER_ROLE + '/add_dialog',\n            save: {\n                url: Url.User.Api.USER_ROLE + '/add_one',\n                data: {userId: '{id}'},\n                method: 'post'\n            },\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'datagrid', selector: '#userRole'}],\n                success: '授权成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function userRoleDeleteAll() {\n        var checked = $('#userRole').datagrid('getChecked');\n        var roleIdList = [];\n        if (checked) {\n            for (var i = 0; i < checked.length; i++) {\n                roleIdList.push(checked[i][$('#userRole').datagrid('options').idField]);\n            }\n        }\n\n        $('#userRole').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.User.Api.USER_ROLE + '/delete_all_by_user_id_and_role_id_list',\n            data: {\n                userId: user[0].id,\n                roleIdList: roleIdList\n            },\n            method: 'post',\n            confirmMessage: '确定要撤销授权勾选项吗',\n            success: '撤销授权成功', reload: {type: 'datagrid', selector: '#userRole'}\n        });\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/view_menu/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">菜单名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">菜单分类：</td>\n            <td><input name=\"viewMenuCategoryId\" id=\"viewMenuCategoryId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">图标（icon）：</td>\n            <td><input name=\"icon\" id=\"icon\" class=\"easyui-textbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求地址（url）：</td>\n            <td><input name=\"url\" id=\"url\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" id=\"sort\" value=\"0\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" id=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n\n<script>\n    $(function () {\n        $('#viewMenuCategoryId').combotree({\n            url: Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_as_combo_tree'\n        });\n    });\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/user/view_menu/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">菜单名称：</td>\n            <td><input name=\"id\" type=\"hidden\">\n                <input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">菜单分类：</td>\n            <td><input name=\"viewMenuCategoryId\" id=\"viewMenuCategoryId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">图标（icon）：</td>\n            <td><input name=\"icon\" class=\"easyui-textbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求地址（url）：</td>\n            <td><input name=\"url\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n\n<script>\n    $(function () {\n        // $('#name').combobox({\n        //     prompt: '输入关键字搜索',\n        //     required: true,\n        //     // disabled: false,\n        //     // hasDownArrow: false,\n        //     mode: 'remote',\n        //     valueField: 'name',\n        //     url: Url.User.Api.VIEW_MENU + '/search_all_by_name',\n        //     onBeforeLoad: function (param) {\n        //         if (param && param.q) {\n        //             var value = param.q.replace('/ /g', '');\n        //             if (value !== '') {\n        //                 return true;\n        //             }\n        //         }\n        //         return false;\n        //     },\n        //     onSelect: function (row) {\n        //         if (row) {\n        //             $('#icon').textbox('setValue', row.icon);\n        //             $('#url').textbox('setValue', row.url);\n        //             $('#sort').numberbox('setValue', row.sort);\n        //             $('#remark').textbox('setValue', row.remark);\n        //         }\n        //     }\n        // });\n        $('#viewMenuCategoryId').combotree({\n            url: Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_as_combo_tree'\n        });\n    });\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/view_menu/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div class=\"easyui-layout\" data-options=\"fit:true\">\n    <div data-options=\"region:'west',split:true\" style=\"width:40%\">\n        <div id=\"viewMenuCategoryToolbar\">\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_MENU/PAGE_ALL/VIEW_MENU_CATEGORY_ADD_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"viewMenuCategoryAddDialog();\">新增</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_MENU/PAGE_ALL/VIEW_MENU_CATEGORY_EDIT_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n                   onclick=\"viewMenuCategoryEditDialog();\">编辑</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_MENU/PAGE_ALL/VIEW_MENU_CATEGORY_DELETE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"viewMenuCategoryDeleteAll();\">删除</a>\n            </nimrod:security>\n        </div>\n        <table id=\"viewMenuCategory\"></table>\n    </div>\n    <div data-options=\"region:'center',split:true\">\n        <div id=\"viewMenuToolbar\">\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_MENU/PAGE_ALL/VIEW_MENU_ADD_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"viewMenuAddDialog();\">新增</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_MENU/PAGE_ALL/VIEW_MENU_EDIT_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n                   onclick=\"viewMenuEditDialog();\">编辑</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_MENU/PAGE_ALL/VIEW_MENU_DELETE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"viewMenuDeleteAll();\">删除</a>\n            </nimrod:security>\n        </div>\n        <table id=\"viewMenu\"></table>\n    </div>\n</div>\n<script type=\"text/javascript\">\n    $(function () {\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '分类名称'},\n            {field: 'icon', title: '图标（icon）'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n\n        $('#viewMenuCategory').treegrid(expressui.grid.create, {\n            title: '视图菜单分类',\n            url: Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_parent',\n            expandUrl: Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_by_parent_id?parentId={id}',\n            columns: [columns],\n            onCheck: function (row) {\n                if (row) {\n                    $('#viewMenu').datagrid('reload', Url.User.Api.VIEW_MENU + '/page_all_by_view_menu_category_id?viewMenuCategoryId=' + row.id);\n                }\n            },\n            onUncheck: function (index, row) {\n                $('#viewMenu').datagrid('loadData', []);\n            }\n\n        });\n        columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '菜单名称'},\n            {field: 'icon', title: '图标（icon）'},\n            {field: 'url', title: '请求地址（url）'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#viewMenu').datagrid(expressui.grid.create, {\n            title: '视图菜单',\n            columns: [columns]\n        });\n    });\n\n    function viewMenuCategoryAddDialog() {\n        var one = $('#viewMenuCategory').treegrid(expressui.grid.getCheckedOneNoCheckedOrShowAlert);\n        if (!one) {\n            return;\n        }\n        $('#viewMenuCategoryAddDialog').dialog(expressui.dialog.create, {\n            title: '新增视图菜单分类',\n            grid: {type: 'treegrid', selector: '#viewMenuCategory'},\n            href: Url.User.Page.VIEW_MENU_CATEGORY + '/add_dialog',\n            get: {url: Url.User.Api.VIEW_MENU_CATEGORY + '/one/{id}', method: 'get'},\n            save: {url: Url.User.Api.VIEW_MENU_CATEGORY + '/add_one', method: 'post'},\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'treegrid', selector: '#viewMenuCategory'}, {\n                    type: 'datagrid',\n                    selector: '#viewMenu',\n                    data: []\n                }],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function viewMenuCategoryEditDialog() {\n        var one = $('#viewMenuCategory').treegrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (one) {\n            $('#viewMenuCategoryEditDialog').dialog(expressui.dialog.create, {\n                title: '编辑视图菜单分类',\n                grid: {type: 'treegrid', selector: '#viewMenuCategory'},\n                href: Url.User.Page.VIEW_MENU_CATEGORY + '/edit_dialog',\n                get: {url: Url.User.Api.VIEW_MENU_CATEGORY + '/one/{id}', method: 'get'},\n                save: {url: Url.User.Api.VIEW_MENU_CATEGORY + '/save_one', method: 'post'},\n                buttons: [{\n                    text: '保存',\n                    iconCls: 'iconfont icon-save',\n                    handler: expressui.dialog.save,\n                    reload: [{type: 'treegrid', selector: '#viewMenuCategory'}, {\n                        type: 'datagrid',\n                        selector: '#viewMenu',\n                        data: []\n                    }],\n                    success: '保存成功'\n                }, {\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n        }\n    }\n\n    function viewMenuCategoryDeleteAll() {\n        $('#viewMenuCategory').treegrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.User.Api.VIEW_MENU_CATEGORY + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            reload: [{type: 'treegrid', selector: '#viewMenuCategory'}, {\n                type: 'datagrid',\n                selector: '#viewMenu',\n                data: []\n            }]\n        });\n    }\n\n    function viewMenuAddDialog() {\n        var one = $('#viewMenuCategory').treegrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (!one) {\n            return;\n        }\n        $('#viewMenuAddDialog').dialog(expressui.dialog.create, {\n            title: '新增视图菜单',\n            width: 460,\n            grid: {type: 'treegrid', selector: '#viewMenuCategory'},\n            href: Url.User.Page.VIEW_MENU + '/add_dialog',\n            get: {url: Url.User.Api.VIEW_MENU + '/one/{id}', method: 'get'},\n            save: {url: Url.User.Api.VIEW_MENU + '/add_one', method: 'post'},\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'datagrid', selector: '#viewMenu'}],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function viewMenuEditDialog() {\n        var one = $('#viewMenu').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (one) {\n            $('#viewMenuEditDialog').dialog(expressui.dialog.create, {\n                title: '编辑视图菜单分类',\n                grid: {type: 'datagrid', selector: '#viewMenu'},\n                href: Url.User.Page.VIEW_MENU + '/edit_dialog',\n                get: {url: Url.User.Api.VIEW_MENU + '/one/{id}', method: 'get'},\n                save: {url: Url.User.Api.VIEW_MENU + '/save_one', method: 'post'},\n                buttons: [{\n                    text: '保存',\n                    iconCls: 'iconfont icon-save',\n                    handler: expressui.dialog.save,\n                    reload: [{type: 'datagrid', selector: '#viewMenu'}],\n                    success: '保存成功'\n                }, {\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n        }\n    }\n\n    function viewMenuDeleteAll() {\n        $('#viewMenu').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.User.Api.VIEW_MENU + '/delete_all?roleId=' + roleId,\n            method: 'post',\n            success: '删除成功',\n            reload: {type: 'datagrid', selector: '#viewMenu'}\n        });\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/view_menu_category/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">分类名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">父级分类：</td>\n            <td><input name=\"parentId\" id=\"parentId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">图标（icon）：</td>\n            <td><input name=\"icon\" id=\"icon\" class=\"easyui-textbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" id=\"sort\" value=\"0\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" id=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n\n<script>\n    $(function () {\n        $('#parentId').combotree({\n            url: Url.User.Api.VIEW_PAGE_CATEGORY + '/list_all_as_combo_tree'\n        });\n    });\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/view_menu_category/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">分类名称：</td>\n            <td><input name=\"id\" type=\"hidden\">\n                <input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">父级分类：</td>\n            <td><input name=\"parentId\" id=\"parentId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">图标（icon）：</td>\n            <td><input name=\"icon\" class=\"easyui-textbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<script type=\"text/javascript\">\n    $(function () {\n        $('#parentId').combotree({\n            url: Url.User.Api.VIEW_PAGE_CATEGORY + '/list_all_as_combo_tree'\n        });\n    });\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/user/view_page/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">页面名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">页面分类：</td>\n            <td><input name=\"viewPageCategoryId\" id=\"viewPageCategoryId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求地址（url）：</td>\n            <td><input name=\"url\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">权限（authority）：</td>\n            <td><input name=\"authority\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" value=\"0\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<script>\n    $(function () {\n        $('#viewPageCategoryId').combotree({\n            url: Url.User.Api.VIEW_PAGE_CATEGORY + '/list_all_as_combo_tree'\n        });\n    })\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/view_page/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">页面名称：</td>\n            <td>\n                <input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\">\n                <input name=\"id\" type=\"hidden\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">页面分类：</td>\n            <td><input name=\"viewPageCategoryId\" id=\"viewPageCategoryId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求地址（url）：</td>\n            <td><input name=\"url\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">权限（authority）：</td>\n            <td><input name=\"authority\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<script>\n    $(function () {\n        $('#viewPageCategoryId').combotree({\n            url: Url.User.Api.VIEW_PAGE_CATEGORY + '/list_all_as_combo_tree'\n        });\n    })\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/view_page/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div class=\"easyui-layout\" data-options=\"fit:true\">\n    <div data-options=\"region:'west',split:true\" style=\"width:25%\">\n        <div id=\"viewPageCategoryToolbar\">\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_PAGE/PAGE_ALL/VIEW_PAGE_CATEGORY_ADD_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"viewPageCategoryAddDialog();\">新增</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_PAGE/PAGE_ALL/VIEW_PAGE_CATEGORY_EDIT_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n                   onclick=\"viewPageCategoryEditDialog();\">编辑</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_PAGE/PAGE_ALL/VIEW_PAGE_CATEGORY_DELETE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"viewPageCategoryDeleteAll();\">删除</a>\n            </nimrod:security>\n        </div>\n        <table id=\"viewPageCategory\"></table>\n    </div>\n    <div data-options=\"region:'center',split:true\">\n        <div id=\"viewPageToolbar\">\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_PAGE/PAGE_ALL/VIEW_PAGE_ADD_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"viewPageAddDialog();\">新增</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_PAGE/PAGE_ALL/VIEW_PAGE_EDIT_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n                   onclick=\"viewPageEditDialog();\">编辑</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_PAGE/PAGE_ALL/VIEW_PAGE_DELETE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"viewPageDeleteAll();\">删除</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_PAGE/PAGE_ALL/VIEW_PAGE_API_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n                   onclick=\"viewPageApiDialog();\">关联 API</a>\n            </nimrod:security>\n        </div>\n        <table id=\"viewPage\"></table>\n    </div>\n    <div data-options=\"region:'east',split:true\" style=\"width:35%\">\n        <div id=\"viewPageComponentToolbar\">\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_PAGE/PAGE_ALL/VIEW_PAGE_COMPONENT_ADD_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"viewPageComponentAddDialog();\">新增</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_PAGE/PAGE_ALL/VIEW_PAGE_COMPONENT_EDIT_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n                   onclick=\"viewPageComponentEditDialog();\">编辑</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_PAGE/PAGE_ALL/VIEW_PAGE_COMPONENT_DELETE_ALL\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"viewPageComponentDeleteAll();\">删除</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_PAGE/PAGE_ALL/VIEW_PAGE_COMPONENT_API_DIALOG\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-edit\"\n                   onclick=\"viewPageComponentApiDialog();\">关联 API</a>\n            </nimrod:security>\n        </div>\n        <table id=\"viewPageComponent\"></table>\n    </div>\n</div>\n<script type=\"text/javascript\">\n    $(function () {\n        // 视图页面分类\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '分类名称'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#viewPageCategory').treegrid(expressui.grid.create, {\n            title: '视图页面分类',\n            url: Url.User.Api.VIEW_PAGE_CATEGORY + '/list_all_parent',\n            expandUrl: Url.User.Api.VIEW_PAGE_CATEGORY + '/list_all_by_parent_id?parentId={id}',\n            columns: [columns],\n            onCheck: function (row) {\n                if (row) {\n                    $('#viewPage').datagrid('reload', Url.User.Api.VIEW_PAGE + '/page_all_by_view_page_category_id?viewPageCategoryId=' + row.id);\n                    $('#viewPageComponent').datagrid('loadData', []);\n                }\n            },\n            onUncheck: function (index, row) {\n                $('#viewPage').datagrid('loadData', []);\n                $('#viewPageComponent').datagrid('loadData', []);\n            }\n        });\n\n        // 视图页面\n        columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '页面名称'},\n            {field: 'url', title: '请求地址（url）'},\n            {field: 'authority', title: '权限（authority）'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#viewPage').datagrid(expressui.grid.create, {\n            title: '视图页面',\n            columns: [columns],\n            onCheck: function (index, row) {\n                if (row) {\n                    $('#viewPageComponent').datagrid('reload', Url.User.Api.VIEW_PAGE_COMPONENT + '/page_all_by_view_page_id?viewPageId=' + row.id);\n                }\n            },\n            onUncheck: function (index, row) {\n                $('#viewPageComponent').datagrid('loadData', []);\n            }\n        });\n\n        // 视图页面组件\n        var VIEW_PAGE_COMPONENT_TYPE = [];\n        columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {\n                field: 'viewPageComponentType', title: '组件类型', formatter: function (value, row, index) {\n                    return expressui.grid.formatter(value, VIEW_PAGE_COMPONENT_TYPE);\n                }\n            },\n            {field: 'name', title: '组件名称'},\n            {field: 'authority', title: '权限（authority）'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#viewPageComponent').datagrid(expressui.grid.create, {\n            title: '视图页面组件',\n            columns: [columns],\n            onBeforeLoad: function (param) {\n                util.ajax({\n                    url: Url.System.Api.DICTIONARY + '/list_all_by_key/VIEW_PAGE_COMPONENT_TYPE',\n                    success: function (data) {\n                        if (data) {\n                            VIEW_PAGE_COMPONENT_TYPE = data;\n                        }\n                    }\n                });\n            }\n        });\n    });\n\n    function viewPageCategoryAddDialog() {\n        var viewPageCategory = $('#viewPageCategory').treegrid(expressui.grid.getCheckedOneNoCheckedOrShowAlert);\n        if (!viewPageCategory) {\n            return;\n        }\n        $('#viewPageCategoryAddDialog').dialog(expressui.dialog.create, {\n            title: '新增视图页面分类',\n            grid: {type: 'treegrid', selector: '#viewPageCategory'},\n            href: Url.User.Page.VIEW_PAGE_CATEGORY + '/add_dialog',\n            get: {url: Url.User.Api.VIEW_PAGE_CATEGORY + '/one/{id}', method: 'get'},\n            save: {url: Url.User.Api.VIEW_PAGE_CATEGORY + '/add_one', method: 'post'},\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'treegrid', selector: '#viewPageCategory'}, {\n                    type: 'datagrid',\n                    selector: '#viewPage',\n                    data: []\n                }, {type: 'datagrid', selector: '#viewPageComponent', data: []}],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function viewPageCategoryEditDialog() {\n        var one = $('#viewPageCategory').treegrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (one) {\n            $('#viewPageCategoryEditDialog').dialog(expressui.dialog.create, {\n                title: '编辑视图页面分类',\n                grid: {type: 'treegrid', selector: '#viewPageCategory'},\n                href: Url.User.Page.VIEW_PAGE_CATEGORY + '/edit_dialog',\n                get: {url: Url.User.Api.VIEW_PAGE_CATEGORY + '/one/{id}', method: 'get'},\n                save: {url: Url.User.Api.VIEW_PAGE_CATEGORY + '/save_one', method: 'post'},\n                buttons: [{\n                    text: '保存',\n                    iconCls: 'iconfont icon-save',\n                    handler: expressui.dialog.save,\n                    reload: [{type: 'treegrid', selector: '#viewPageCategory'}, {\n                        type: 'datagrid',\n                        selector: '#viewPage',\n                        data: []\n                    }, {type: 'datagrid', selector: '#viewPageComponent', data: []}],\n                    success: '保存成功'\n                }, {\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n        }\n    }\n\n    function viewPageCategoryDeleteAll() {\n        $('#viewPageCategory').treegrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.User.Api.VIEW_PAGE_CATEGORY + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            reload: [{type: 'treegrid', selector: '#viewPageCategory'}, {\n                type: 'datagrid',\n                selector: '#viewPage',\n                data: []\n            }, {type: 'datagrid', selector: '#viewPageComponent', data: []}],\n        });\n    }\n\n    function viewPageAddDialog() {\n        var viewPageCategory = $('#viewPageCategory').treegrid(expressui.grid.getCheckedOneOrShowAlert, '请勾选要操作的视图页面分类');\n        if (!viewPageCategory) {\n            return;\n        }\n\n        $('#viewPageAddDialog').dialog(expressui.dialog.create, {\n            title: '新增视图页面',\n            grid: {type: 'treegrid', selector: '#viewPageCategory'},\n            href: Url.User.Page.VIEW_PAGE + '/add_dialog',\n            get: {url: Url.User.Api.VIEW_PAGE + '/one/{id}', method: 'get'},\n            save: {url: Url.User.Api.VIEW_PAGE + '/add_one', method: 'post'},\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'datagrid', selector: '#viewPage'}, {\n                    type: 'datagrid',\n                    selector: '#viewPageComponent',\n                    data: []\n                }],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function viewPageEditDialog() {\n        var one = $('#viewPage').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (one) {\n            $('#viewPageEditDialog').dialog(expressui.dialog.create, {\n                title: '编辑视图页面分类',\n                grid: {type: 'datagrid', selector: '#viewPage'},\n                href: Url.User.Page.VIEW_PAGE + '/edit_dialog',\n                get: {url: Url.User.Api.VIEW_PAGE + '/one/{id}', method: 'get'},\n                save: {url: Url.User.Api.VIEW_PAGE + '/save_one', method: 'post'},\n                buttons: [{\n                    text: '保存',\n                    iconCls: 'iconfont icon-save',\n                    handler: expressui.dialog.save,\n                    reload: [{type: 'datagrid', selector: '#viewPage'}, {\n                        type: 'datagrid',\n                        selector: '#viewPageComponent',\n                        data: []\n                    }],\n                    success: '保存成功'\n                }, {\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n        }\n    }\n\n    function viewPageDeleteAll() {\n        $('#viewPage').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.User.Api.VIEW_PAGE + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            reload: [{type: 'datagrid', selector: '#viewPage'}, {\n                type: 'datagrid',\n                selector: '#viewPageComponent',\n                data: []\n            }]\n        });\n    }\n\n    /**\n     * 关联 API 对话框\n     */\n    function viewPageApiDialog() {\n        var one = $('#viewPage').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (one) {\n            $('#viewPageApiDialog').dialog(expressui.dialog.create, {\n                title: '关联 API',\n                grid: {type: 'datagrid', selector: '#viewPage'},\n                href: Url.User.Page.VIEW_PAGE_API + '/view_page_api',\n                width: 850,\n                height: 450,\n                buttons: [{\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n        }\n    }\n\n    function viewPageComponentAddDialog() {\n        var one = $('#viewPage').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (!one) {\n            return;\n        }\n\n        $('#viewPageComponentAddDialog').dialog(expressui.dialog.create, {\n            title: '新增视图页面组件',\n            grid: {type: 'datagrid', selector: '#viewPage'},\n            href: Url.User.Page.VIEW_PAGE_COMPONENT + '/add_dialog',\n            get: {url: Url.User.Api.VIEW_PAGE_COMPONENT + '/one/{id}', method: 'get'},\n            save: {url: Url.User.Api.VIEW_PAGE_COMPONENT + '/add_one', method: 'post'},\n            buttons: [{\n                text: '保存',\n                iconCls: 'iconfont icon-save',\n                handler: expressui.dialog.add,\n                reload: [{type: 'datagrid', selector: '#viewPageComponent'}],\n                success: '新增成功'\n            }, {\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n    function viewPageComponentEditDialog() {\n        var one = $('#viewPageComponent').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (one) {\n            $('#viewPageComponentEditDialog').dialog(expressui.dialog.create, {\n                title: '编辑视图页面组件',\n                grid: {type: 'datagrid', selector: '#viewPageComponent'},\n                href: Url.User.Page.VIEW_PAGE_COMPONENT + '/edit_dialog',\n                get: {url: Url.User.Api.VIEW_PAGE_COMPONENT + '/one/{id}', method: 'get'},\n                save: {url: Url.User.Api.VIEW_PAGE_COMPONENT + '/save_one', method: 'post'},\n                buttons: [{\n                    text: '保存',\n                    iconCls: 'iconfont icon-save',\n                    handler: expressui.dialog.save,\n                    reload: [{type: 'datagrid', selector: '#viewPageComponent'}],\n                    success: '保存成功'\n                }, {\n                    text: '关闭',\n                    iconCls: 'iconfont icon-close',\n                    handler: expressui.dialog.close\n                }]\n            });\n        }\n    }\n\n    function viewPageComponentDeleteAll() {\n        $('#viewPageComponent').datagrid(expressui.grid.postCheckedLessOneOrShowAlert, {\n            url: Url.User.Api.VIEW_PAGE_COMPONENT + '/delete_all',\n            method: 'post',\n            success: '删除成功',\n            reload: {type: 'datagrid', selector: '#viewPageComponent'}\n        });\n    }\n\n    /**\n     * 关联 API 对话框\n     */\n    function viewPageComponentApiDialog() {\n        var one = $('#viewPageComponent').datagrid(expressui.grid.getCheckedOneOrShowAlert);\n        if (!one) {\n            return;\n        }\n        $('#viewPageComponentApiDialog').dialog(expressui.dialog.create, {\n            title: '关联 API',\n            grid: {type: 'datagrid', selector: '#viewPageComponent'},\n            href: Url.User.Page.VIEW_PAGE_COMPONENT_API + '/view_page_component_api',\n            width: 800,\n            height: 420,\n            buttons: [{\n                text: '关闭',\n                iconCls: 'iconfont icon-close',\n                handler: expressui.dialog.close\n            }]\n        });\n    }\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/view_page_api/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">API 名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求地址（url）：</td>\n            <td><input name=\"url\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">权限（authority）：</td>\n            <td><input name=\"authority\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" value=\"0\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n"
  },
  {
    "path": "src/main/resources/templates/user/view_page_api/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">API 名称：</td>\n            <td>\n                <input name=\"id\" type=\"hidden\">\n                <input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求地址（url）：</td>\n            <td><input name=\"url\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n"
  },
  {
    "path": "src/main/resources/templates/user/view_page_api/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div class=\"easyui-layout\" data-options=\"fit:true\">\n    <div data-options=\"region:'west',split:true\" style=\"width:40%\">\n        <table id=\"viewPageApiCategory\"></table>\n    </div>\n    <div data-options=\"region:'center',split:true\">\n        <div id=\"viewPageApiToolbar\">\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_PAGE_API/VIEW_PAGE_API/ASSOCIATE_ALL_VIEW_PAGE_API\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"associateAllViewPageApi();\">关联</a>\n            </nimrod:security>\n            <nimrod:security authority=\"/COMPONENT/USER/VIEW_PAGE_API/VIEW_PAGE_API/REVOKE_ASSOCIATE_ALL_VIEW_PAGE_API\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"revokeAssociateAllViewPageApi();\">撤销关联</a>\n            </nimrod:security>\n        </div>\n        <table id=\"viewPageApi\"></table>\n    </div>\n</div>\n\n<script type=\"text/javascript\">\n    var viewPageId;\n    $(function () {\n        var checkedViewPage = $('#viewPage').datagrid('getChecked');\n        if (checkedViewPage) {\n            viewPageId = checkedViewPage[0].id;\n        }\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '分类名称'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#viewPageApiCategory').treegrid(expressui.grid.create, {\n            title: 'API 分类',\n            url: Url.User.Api.API_CATEGORY + '/list_all_parent',\n            expandUrl: Url.User.Api.API_CATEGORY + '/list_all_by_parent_id?parentId={id}',\n            columns: [columns],\n            onCheck: function (row) {\n                if (row) {\n                    $('#viewPageApi').datagrid('reload', Url.User.Api.API + '/page_all_by_api_category_id?apiCategoryId=' + row.id + '&viewPageId=' + viewPageId);\n                }\n            },\n            onUncheck: function (index, row) {\n                $('#viewPageApi').datagrid('loadData', []);\n            }\n        });\n\n        var IS_OR_NOT = [];\n        columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {\n                field: 'isAssociated', title: '是否已关联', formatter: function (value, row) {\n                    return expressui.grid.formatter(value, IS_OR_NOT);\n                }\n            },\n            {field: 'name', title: 'API 名称'},\n            {field: 'url', title: '请求地址（url）'},\n            {field: 'authority', title: '权限（authority）'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#viewPageApi').datagrid(expressui.grid.create, {\n            title: 'API',\n            columns: [columns],\n            onBeforeLoad: function (param) {\n                util.ajax({\n                    url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n                    async: false,\n                    success: function (data) {\n                        if (data) {\n                            IS_OR_NOT = data;\n                        }\n                    }\n                });\n            }\n        });\n    });\n\n    function associateAllViewPageApi() {\n        var checkedAll = $('#viewPageApi').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var apiIdList = [];\n        if (checkedAll) {\n            for (var i = 0; i < checkedAll.length; i++) {\n                apiIdList[i] = checkedAll[i].id;\n            }\n            util.ajax({\n                url: Url.User.Api.VIEW_PAGE_API + '/associate_all_by_view_page_id_and_api_id_list',\n                data: {viewPageId: viewPageId, apiIdList: apiIdList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '关联成功'});\n                    $('#viewPageApi').datagrid('reload');\n                    $('#viewPageApi').datagrid('clearSelections');\n                    $('#viewPageApi').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n\n    function revokeAssociateAllViewPageApi() {\n        var selectAll = $('#viewPageApi').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var apiIdList = [];\n        if (selectAll) {\n            for (var i = 0; i < selectAll.length; i++) {\n                apiIdList[i] = selectAll[i].id;\n            }\n            util.ajax({\n                url: Url.User.Api.VIEW_PAGE_API + '/revoke_associate_all_by_view_page_id_and_api_id_list',\n                data: {viewPageId: viewPageId, apiIdList: apiIdList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '撤销关联成功'});\n                    $('#viewPageApi').datagrid('reload');\n                    $('#viewPageApi').datagrid('clearSelections');\n                    $('#viewPageApi').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/user/view_page_category/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">分类名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">父级分类：</td>\n            <td><input name=\"parentId\" id=\"parentId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" value=\"0\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<script>\n    $(function () {\n        $('#parentId').combotree({\n            url: Url.User.Api.VIEW_PAGE_CATEGORY + '/list_all_as_combo_tree'\n        });\n    })\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/view_page_category/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">分类名称：</td>\n            <td><input name=\"id\" type=\"hidden\">\n                <input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">父级分类：</td>\n            <td><input name=\"parentId\" id=\"parentId\" class=\"easyui-combotree\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n\n    </table>\n</div>\n<script>\n    $(function () {\n        $('#parentId').combotree({\n            url: Url.User.Api.VIEW_PAGE_CATEGORY + '/list_all_as_combo_tree'\n        });\n    })\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/view_page_component/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">组件类型：</td>\n            <td>\n                <input name=\"viewPageComponentType\" id=\"viewPageComponentType\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">组件名称：</td>\n            <td class=\"input\">\n                <input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">权限（authority）：</td>\n            <td><input name=\"authority\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" value=\"0\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n<script>\n    $(function () {\n        $('#viewPageComponentType').combobox({\n            url: Url.System.API.DICTIONARY + '/list_all_by_key/VIEW_PAGE_COMPONENT_TYPE',\n            method: 'get',\n            valueField: 'value',\n            textField: 'valueName',\n            required: true\n        });\n    });\n</script>\n"
  },
  {
    "path": "src/main/resources/templates/user/view_page_component/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">组件类型：</td>\n            <td>\n                <input name=\"viewPageComponentType\" id=\"viewPageComponentType\">\n                <input name=\"id\" type=\"hidden\">\n            </td>\n        </tr>\n        <tr>\n            <td class=\"label\">组件名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">权限（authority）：</td>\n            <td><input name=\"authority\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" value=\"0\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n\n<script>\n    $(function () {\n        $('#viewPageComponentType').combobox({\n            url: Url.System.Api.DICTIONARY + '/list_all_by_key/VIEW_PAGE_COMPONENT_TYPE',\n            method: 'get',\n            valueField: 'value',\n            textField: 'valueName',\n            required: true\n        });\n    });\n</script>"
  },
  {
    "path": "src/main/resources/templates/user/view_page_component_api/add_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">API 名称：</td>\n            <td><input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求地址（url）：</td>\n            <td><input name=\"url\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">权限（authority）：</td>\n            <td><input name=\"authority\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" value=\"0\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\" data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n"
  },
  {
    "path": "src/main/resources/templates/user/view_page_component_api/edit_dialog.html",
    "content": "<div class=\"submit-form\">\n    <table class=\"submit-table\">\n        <tr>\n            <td class=\"label\">API 名称：</td>\n            <td><input name=\"id\" type=\"hidden\">\n                <input name=\"name\" class=\"easyui-textbox\" data-options=\"required:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">请求地址（url）：</td>\n            <td><input name=\"url\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"required:true,multiline:true\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">排序：</td>\n            <td><input name=\"sort\" class=\"easyui-numberbox\"></td>\n        </tr>\n        <tr>\n            <td class=\"label\">备注：</td>\n            <td><input name=\"remark\" class=\"easyui-textbox\" style=\"height:50px;\"\n                       data-options=\"multiline:true\"></td>\n        </tr>\n    </table>\n</div>\n"
  },
  {
    "path": "src/main/resources/templates/user/view_page_component_api/list.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <div th:replace=\"./widget/base\"></div>\n</head>\n<body>\n<div class=\"easyui-layout\" data-options=\"fit:true\">\n    <div data-options=\"region:'west',split:true\" style=\"width:40%\">\n        <table id=\"viewPageComponentApiCategory\"></table>\n    </div>\n    <div data-options=\"region:'center',split:true\">\n        <div id=\"viewPageComponentApiToolbar\">\n            <nimrod:security\n                    authority=\"/COMPONENT/USER/VIEW_PAGE_COMPONENT_API/PAGE_ALL/ASSOCIATE_ALL_VIEW_PAGE_COMPONENT_API\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-plus\"\n                   onclick=\"associateAllViewPageComponentApi();\">关联</a>\n            </nimrod:security>\n            <nimrod:security\n                    authority=\"/COMPONENT/USER/VIEW_PAGE_COMPONENT_API/PAGE_ALL/REVOKE_ASSOCIATE_ALL_VIEW_PAGE_COMPONENT_API\">\n                <a href=\"javascript:\" class=\"easyui-linkbutton\" iconCls=\"iconfont icon-close\"\n                   onclick=\"revokeAssociateAllViewPageComponentApi();\">撤销关联</a>\n            </nimrod:security>\n        </div>\n        <table id=\"viewPageComponentApi\"></table>\n    </div>\n</div>\n\n<script type=\"text/javascript\">\n    var viewPageComponentId;\n    $(function () {\n        var viewPageComponent = $('#viewPageComponent').datagrid('getChecked');\n        if (viewPageComponent) {\n            viewPageComponentId = viewPageComponent[0].id;\n        }\n        var columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {field: 'name', title: '分类名称'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#viewPageComponentApiCategory').treegrid(expressui.grid.create, {\n            title: 'API 分类',\n            url: Url.User.Api.API_CATEGORY + '/list_all_parent',\n            expandUrl: Url.User.Api.API_CATEGORY + '/list_all_by_parent_id?parentId={id}',\n            columns: [columns],\n            onCheck: function (row) {\n                if (row) {\n                    $('#viewPageComponentApi').datagrid('reload', Url.User.Api.API + '/page_all_by_api_category_id?apiCategoryId=' + row.id + '&viewPageComponentId=' + viewPageComponentId);\n                }\n            },\n            onUncheck: function (index, row) {\n                $('#viewPageComponentApi').datagrid('loadData', []);\n            }\n        });\n\n        var IS_OR_NOT = [];\n        columns = [\n            {field: 'checkbox', checkbox: true},\n            {field: 'id', title: 'ID'},\n            {\n                field: 'isAssociated', title: '是否已关联', formatter: function (value, row) {\n                    return expressui.grid.formatter(value, IS_OR_NOT);\n                }\n            },\n            {field: 'name', title: 'API 名称'},\n            {field: 'url', title: '请求地址（url）'},\n            {field: 'authority', title: '权限（authority）'},\n            {field: 'sort', title: '排序'},\n            {field: 'remark', title: '备注'},\n            {field: 'gmtModified', title: '更新时间'},\n            {field: 'gmtCreated', title: '创建时间'}\n        ];\n        $('#viewPageComponentApi').datagrid(expressui.grid.create, {\n            title: 'API',\n            columns: [columns],\n            onBeforeLoad: function (param) {\n                util.ajax({\n                    url: Url.System.Api.DICTIONARY + '/list_all_by_key/IS_OR_NOT',\n                    async: false,\n                    success: function (data) {\n                        if (data) {\n                            IS_OR_NOT = data;\n                        }\n                    }\n                });\n            }\n        });\n    });\n\n    function associateAllViewPageComponentApi() {\n        var selectAll = $('#viewPageComponentApi').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var apiIdList = [];\n        if (selectAll) {\n            for (var i = 0; i < selectAll.length; i++) {\n                apiIdList[i] = selectAll[i].id;\n            }\n            util.ajax({\n                url: Url.User.Api.VIEW_PAGE_COMPONENT_API + '/associate_all_by_view_page_component_id_and_api_id_list',\n                data: {viewPageComponentId: viewPageComponentId, apiIdList: apiIdList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '关联成功'});\n                    $('#viewPageComponentApi').datagrid('reload');\n                    $('#viewPageComponentApi').datagrid('clearSelections');\n                    $('#viewPageComponentApi').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n\n    function revokeAssociateAllViewPageComponentApi() {\n        var selectAll = $('#viewPageComponentApi').datagrid(expressui.grid.getCheckedLessOneOrShowAlert);\n        var apiIdList = [];\n        if (selectAll) {\n            for (var i = 0; i < selectAll.length; i++) {\n                apiIdList[i] = selectAll[i].id;\n            }\n            util.ajax({\n                url: Url.User.Api.VIEW_PAGE_COMPONENT_API + '/revoke_associate_all_by_view_page_component_id_and_api_id_list',\n                data: {viewPageComponentId: viewPageComponentId, apiIdList: apiIdList},\n                type: 'post',\n                success: function (data) {\n                    $.messager.show({title: '信息', msg: '撤销关联成功'});\n                    $('#viewPageComponentApi').datagrid('reload');\n                    $('#viewPageComponentApi').datagrid('clearSelections');\n                    $('#viewPageComponentApi').datagrid('clearChecked');\n                },\n                error: function (XMLHttpRequest) {\n                    $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message});\n                }\n            })\n        }\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/templates/widget/base.html",
    "content": "<!-- Standard Meta -->\n<meta charset=\"utf-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1\"/>\n<title th:utext=\"${title}\">Title</title>\n<link rel=\"shortcut icon\" th:href=\"@{/favicon.ico}\"/>\n<!--<link rel=\"icon\" type=\"image/jpeg\" href=\"@{/assets/img/logo.png}\"/>-->\n<link rel=\"bookmark\" th:href=\"@{/favicon.ico}\"/>\n<!--<link rel=\"bookmark\" type=\"image/jpeg\" th:href=\"@{/assets/img/logo.png}\"/>-->\n\n<link rel=\"stylesheet\" type=\"text/css\" th:href=\"@{/assets/css/base.css}\">\n<!--<link rel=\"stylesheet\" type=\"text/css\" th:href=\"@{/assets/vendor/font-awesome-4.7.0/css/font-awesome.css}\">-->\n<link rel=\"stylesheet\" type=\"text/css\" th:href=\"@{/assets/vendor/iconfont/iconfont.css}\">\n\n<!--<link rel=\"stylesheet\" type=\"text/css\" th:href=\"@{/assets/vendor/jquery-easyui-1.9.7/themes/color.css}\">-->\n<link rel=\"stylesheet\" type=\"text/css\" th:href=\"@{/assets/vendor/jquery-easyui-1.9.7/themes/gray/easyui.css}\">\n\n<link rel=\"stylesheet\" type=\"text/css\" th:href=\"@{/assets/vendor/easyui-plus-1.0.0/themes/blue/easyui.css}\">\n<link rel=\"stylesheet\" type=\"text/css\" th:href=\"@{/assets/vendor/easyui-plus-1.0.0/css/easyui.plus.css}\">\n\n<div th:replace=\"./widget/basejs\"></div>\n\n<script type=\"text/javascript\" charset=\"UTF-8\" th:src=\"@{/assets/vendor/jquery/jquery-1.12.4.min.js}\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\"\n        th:src=\"@{/assets/vendor/jquery-easyui-1.9.7/jquery.easyui.min.js}\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\"\n        th:src=\"@{/assets/vendor/jquery-easyui-1.9.7/locale/easyui-lang-zh_CN.js}\"></script>\n\n<script type=\"text/javascript\" charset=\"UTF-8\" th:src=\"@{/assets/js/url.js}\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" th:src=\"@{/assets/js/util.js}\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" th:src=\"@{/assets/vendor/easyui-plus-1.0.0/js/easyui.plus.js}\"></script>\n<!--[if lt IE 9]>\n<script type=\"text/javascript\" charset=\"UTF-8\" th:src=\"@{/assets/vendor/html5shiv-3.7.3.min.js}\"></script>\n<![endif]-->\n"
  },
  {
    "path": "src/main/resources/templates/widget/basejs.html",
    "content": "<script type=\"text/javascript\" th:inline=\"javascript\">\n    /*<![CDATA[*/\n    window._contextPath = /*[[ ${_contextPath} ]]*/ '/';\n    window._user = /*[[ ${_user} ]]*/ {};\n    window._host = /*[[ ${_host} ]]*/ {};\n    window._csrf = /*[[ ${_csrf} ]]*/ {};\n    window._defaultAvatar = _contextPath + '/assets/img/avatar.png';\n    /*]]>*/\n</script>"
  },
  {
    "path": "src/test/java/com/godcheese/nimrod/NimrodApplicationTests.java",
    "content": "package com.godcheese.nimrod;\n\nimport org.junit.jupiter.api.Test;\nimport org.springframework.boot.test.context.SpringBootTest;\n\n@SpringBootTest\nclass NimrodApplicationTests {\n\n    @Test\n    void contextLoads() {\n    }\n\n}\n\n"
  }
]